Changeset 113


Ignore:
Timestamp:
Mar 16, 2008, 2:41:59 PM (10 years ago)
Author:
Sam Hocevar
Message:
  • Got rid of all the remaining occurrences of WINDOW_FRAME_*.
Location:
abuse/trunk/src
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • abuse/trunk/src/dev.cpp

    r111 r113  
    3333#include "chat.hpp"
    3434
    35 /* FIXME: get rid of this */
    36 #define WINDOW_FRAME_LEFT 0
    37 #define WINDOW_FRAME_TOP 0
    38 
    3935#define make_above_tile(x) ((x)|0x4000)
    4036char backw_on=0,forew_on=0,show_menu_on=0,ledit_on=0,pmenu_on=0,omenu_on=0,commandw_on=0,tbw_on=0,
     
    5450  current_space=PERM_SPACE;
    5551
    56  
    57   char prog[50]; 
     52
     53  char prog[50];
    5854  char const *cs=prog;
    5955  strcpy(prog,"(setq section 'game_section)\n");
     
    109105      f->put_image(screen,cash.img(id),x,y,1);
    110106    else
    111       cash.img(id)->put_image(screen,x,y); 
     107      cash.img(id)->put_image(screen,x,y);
    112108  }
    113109  virtual int width() { return cash.img(id)->width(); }
     
    142138{
    143139  public :
    144   amb_cont(int X, int Y, ifield *Next) : scroller(X,Y,ID_NULL,100,wm->font()->height()+2,0,64,Next) 
     140  amb_cont(int X, int Y, ifield *Next) : scroller(X,Y,ID_NULL,100,wm->font()->height()+2,0,64,Next)
    145141  { if (player_list) sx=player_list->ambient; }
    146142  virtual void scroll_event(int newx, image *screen)
     
    159155int confirm_quit()
    160156{
    161   image *ok_image=cash.img(cash.reg("art/frame.spe","dev_ok",SPEC_IMAGE,1))->copy(),
    162         *cancel_image=cash.img(cash.reg("art/frame.spe","cancel",SPEC_IMAGE,1))->copy();
    163 
    164 
    165   jwindow *quitw=wm->new_window(xres/2+40,yres/2,80,-1,
    166                           new button(WINDOW_FRAME_LEFT+10,WINDOW_FRAME_TOP+20,ID_QUIT_OK,ok_image,
    167                           new button(WINDOW_FRAME_LEFT+38,WINDOW_FRAME_TOP+20,ID_CANCEL,cancel_image,
    168                           new info_field(WINDOW_FRAME_LEFT,WINDOW_FRAME_TOP,ID_NULL,symbol_str("sure?"),NULL))),
    169                                     symbol_str("quit_title"));
    170   wm->grab_focus(quitw);
    171   int fin=0,quit=0;
    172   do
    173   {
     157    jwindow *quitw;
     158    image *ok_image, *cancel_image;
     159
     160    ok_image = cash.img(cash.reg("art/frame.spe", "dev_ok",
     161                                 SPEC_IMAGE, 1))->copy();
     162    cancel_image = cash.img(cash.reg("art/frame.spe", "cancel",
     163                                     SPEC_IMAGE, 1))->copy();
     164
     165    quitw = wm->new_window(xres / 2 + 40, yres / 2, 80, -1,
     166              new button(10, wm->font()->height() + 4, ID_QUIT_OK, ok_image,
     167              new button(38, wm->font()->height() + 4, ID_CANCEL, cancel_image,
     168              new info_field(2, 2, ID_NULL, symbol_str("sure?"), NULL))),
     169              symbol_str("quit_title"));
     170
     171    wm->grab_focus(quitw);
     172    int fin = 0, quit = 0;
     173
     174    while(!fin)
     175    {
     176        wm->flush_screen();
     177
     178        event ev;
     179        wm->get_event(ev);
     180        if(ev.type == EV_MESSAGE && ev.message.id == ID_QUIT_OK)
     181            fin = quit = 1;
     182        else if(ev.type == EV_MESSAGE && ev.message.id == ID_CANCEL)
     183            fin = 1;
     184        else if(ev.type == EV_KEY
     185                 && toupper(ev.key) == toupper(*symbol_str("YES")))
     186            fin = quit = 1;
     187        else if(ev.type == EV_KEY
     188                 && toupper(ev.key) == toupper(*symbol_str("NO")))
     189            fin = 1;
     190        if((ev.type == EV_KEY && ev.key == JK_ESC)
     191           || ev.type == EV_CLOSE_WINDOW)
     192            fin = 1;
     193    }
     194
     195    delete ok_image;
     196    delete cancel_image;
     197
     198    the_game->reset_keymap();
     199
     200    wm->close_window(quitw);
    174201    wm->flush_screen();
    175 
    176     event ev;
    177     wm->get_event(ev);
    178     if (ev.type==EV_MESSAGE && ev.message.id==ID_QUIT_OK)
    179       fin=quit=1;
    180     else if (ev.type==EV_MESSAGE && ev.message.id==ID_CANCEL)
    181       fin=1;
    182     else if (ev.type==EV_KEY && toupper(ev.key)==toupper(*symbol_str("YES")))
    183       fin=quit=1;
    184     else if (ev.type==EV_KEY && toupper(ev.key)==toupper(*symbol_str("NO")))
    185       fin=1;
    186     if ((ev.type==EV_KEY && ev.key==JK_ESC) || ev.type==EV_CLOSE_WINDOW) fin=1;
    187  
    188   } while (!fin);
    189   delete ok_image;
    190   delete cancel_image;
    191 
    192   the_game->reset_keymap();
    193 
    194   wm->close_window(quitw);
    195   wm->flush_screen();
    196   return quit;
     202    return quit;
    197203}
    198204
     
    200206{
    201207  int total=0,number=0;
    202   game_object *c; 
     208  game_object *c;
    203209  for (c=current_level->first_object();c;c=c->next)
    204210  {
     
    213219void dev_controll::search_backward()
    214220{ ;
    215 } 
     221}
    216222
    217223
     
    222228                            (the_game->first_view->cx2-the_game->first_view->cx1+1)*2;
    223229  the_game->first_view->cy2=the_game->first_view->cy1+
    224                             (the_game->first_view->cy2-the_game->first_view->cy1+1)*2;             
     230                            (the_game->first_view->cy2-the_game->first_view->cy1+1)*2;
    225231  delete small_render;
    226232  small_render=NULL;
     
    238244
    239245  small_render=new image((the_game->first_view->cx2-the_game->first_view->cx1+1),
    240                         (the_game->first_view->cy2-the_game->first_view->cy1+1),NULL,2);
     246            (the_game->first_view->cy2-the_game->first_view->cy1+1),NULL,2);
    241247}
    242248
     
    260266    } else
    261267    {
    262       game_object *first,*find=NULL;     
     268      game_object *first,*find=NULL;
    263269      if (!search_object || search_object->otype!=type)
    264270        first=current_level->first_object();
     
    267273      for (;!find && first;first=first->next)
    268274        if (first->otype==type)
    269           find=first;
     275      find=first;
    270276      int loop=0;
    271277      if (!find)
    272278      {
    273         for (first=current_level->first_object();first && !find;first=first->next)
    274         {
    275           if (first->otype==type)
    276             find=first;
    277         }
    278         loop=1;
     279    for (first=current_level->first_object();first && !find;first=first->next)
     280    {
     281      if (first->otype==type)
     282        find=first;
     283    }
     284    loop=1;
    279285      }
    280286      if (find)
    281287      {
    282288        search_object=find;
    283         show_object_number(search_object);
     289    show_object_number(search_object);
    284290      }
    285291      else
    286292      {
    287         the_game->show_help("No object matching name exsist in level\n");
    288        
     293    the_game->show_help("No object matching name exsist in level\n");
     294
    289295      }
    290296    }
     
    299305  else if (wm->key_pressed(JK_ALT_L) || wm->key_pressed(JK_ALT_R))
    300306    return x-(x%the_game->ftile_width())+the_game->ftile_width()/2;
    301   else return x; 
     307  else return x;
    302308}
    303309
     
    313319void dev_controll::make_ambient()
    314320{
    315   if (!ambw)
    316   ambw=wm->new_window(prop->getd("ambient x",-1),
    317                       prop->getd("ambient y",-1),-1,-1,
    318                       new amb_cont(WINDOW_FRAME_LEFT,WINDOW_FRAME_TOP,NULL),"ambient");
     321    if(ambw)
     322        return;
     323
     324    ambw = wm->new_window(prop->getd("ambient x", -1),
     325                          prop->getd("ambient y", -1), -1, -1,
     326                          new amb_cont(0, 0, NULL), "ambient");
    319327}
    320328
     
    324332  {
    325333    put_string("unchop x y, size x y,\n"
    326                "load, esave, name\n");
    327   } else 
     334           "load, esave, name\n");
     335  } else
    328336  {
    329337    event ev;
     
    352360  for (int i=0;i<DEV_MODES;i++)
    353361    dev_mode_icon[i]=cash.reg(artf,dev_mode_icon_names[i],SPEC_IMAGE,0);
    354  
     362
    355363}
    356364
     
    382390  if (y+new_height>cy2)
    383391    new_height-=y+new_height-cy2;
    384  
     392
    385393
    386394  for (iy=iy_start;new_height>0;new_height--,y++,iy+=ystep)
     
    389397    sl2=screen->scan_line(y)+x;
    390398    for (ix=ix_start,sx=0;sx<new_width;sx++,ix+=xstep,sl2++)
    391       *sl2=sl1[ix>>16];   
     399      *sl2=sl1[ix>>16];
    392400  }
    393401}
     
    421429  if (y+new_height>cy2)
    422430    new_height-=y+new_height-cy2;
    423  
     431
    424432  uint8_t d;
    425433  for (iy=iy_start;new_height>0;new_height--,y++,iy+=ystep)
     
    459467  {
    460468    int32_t vx=v->xoff(),vy=v->yoff();
    461  
     469
    462470    if (dev&DRAW_LINKS)
    463471    {
    464472      for (light_source *f=first_light_source;f;f=f->next)
    465473      {
    466         if (f->x-vx>=0 && f->x-vx<=(v->cx2-v->cx1+1) && f->y-vy>=0 && f->y-vy<=(v->cy2-v->cy1+1))
    467         {
    468           image *im=cash.img(light_buttons[f->type]);
    469           im->put_image(screen,f->x-vx+v->cx1-im->width()/2,f->y-vy+v->cy1-im->height()/2,1);
    470           screen->rectangle(f->x1-vx+v->cx1,f->y1-vy+v->cy1,f->x2-vx+v->cx1,f->y2-vy+v->cy1,
    471                             wm->medium_color());
    472         }
     474    if (f->x-vx>=0 && f->x-vx<=(v->cx2-v->cx1+1) && f->y-vy>=0 && f->y-vy<=(v->cy2-v->cy1+1))
     475    {
     476      image *im=cash.img(light_buttons[f->type]);
     477      im->put_image(screen,f->x-vx+v->cx1-im->width()/2,f->y-vy+v->cy1-im->height()/2,1);
     478      screen->rectangle(f->x1-vx+v->cx1,f->y1-vy+v->cy1,f->x2-vx+v->cx1,f->y2-vy+v->cy1,
     479                wm->medium_color());
     480    }
    473481      }
    474482    }
     
    477485    {
    478486      int32_t rx1,ry1;
    479       the_game->game_to_mouse(link_object->x,link_object->y,v,rx1,ry1);     
    480       screen->line(rx1,ry1,dlastx,dlasty,yellow);           
     487      the_game->game_to_mouse(link_object->x,link_object->y,v,rx1,ry1);
     488      screen->line(rx1,ry1,dlastx,dlasty,yellow);
    481489    }
    482490
     
    486494      int l=i->width()/2,h=i->height()/2;
    487495      int32_t rx1,ry1;
    488       the_game->game_to_mouse(selected_light->x,selected_light->y,v,rx1,ry1);     
     496      the_game->game_to_mouse(selected_light->x,selected_light->y,v,rx1,ry1);
    489497      screen->rectangle(rx1-l,ry1-h,rx1+l,ry1+h,wm->bright_color());
    490498    }
     
    494502      for (o=current_level->first_object();o;o=o->next)
    495503      {
    496         the_game->game_to_mouse(o->x,o->y,current_view,x1,y1);
    497         char *nm=object_names[o->otype];
    498         console_font->put_string(screen,x1-strlen(nm)*console_font->width()/2,y1+2,nm);
    499       }
    500    
     504    the_game->game_to_mouse(o->x,o->y,current_view,x1,y1);
     505    char *nm=object_names[o->otype];
     506    console_font->put_string(screen,x1-strlen(nm)*console_font->width()/2,y1+2,nm);
     507      }
     508
    501509    if (dev&DRAW_LINKS)
    502510    {
     
    504512      for (o=current_level->first_object();o;o=o->next)
    505513      {
    506         the_game->game_to_mouse(o->x,o->y,current_view,x1,y1);
    507 
    508         int i=0;
    509         for (;i<o->total_objects();i++)
    510         {
    511           game_object *other=o->get_object(i);
    512           the_game->game_to_mouse(other->x,other->y,current_view,x2,y2);       
    513           screen->line(x1,y1,x2,y2,wm->bright_color());
    514         }
    515 
    516         for (i=0;i<o->total_lights();i++)
    517         {
    518           light_source *l=o->get_light(i);
    519           the_game->game_to_mouse(l->x,l->y,current_view,x2,y2);
    520           screen->line(x1,y1,x2,y2,light_connection_color);
    521         }
     514    the_game->game_to_mouse(o->x,o->y,current_view,x1,y1);
     515
     516    int i=0;
     517    for (;i<o->total_objects();i++)
     518    {
     519      game_object *other=o->get_object(i);
     520      the_game->game_to_mouse(other->x,other->y,current_view,x2,y2);
     521      screen->line(x1,y1,x2,y2,wm->bright_color());
     522    }
     523
     524    for (i=0;i<o->total_lights();i++)
     525    {
     526      light_source *l=o->get_light(i);
     527      the_game->game_to_mouse(l->x,l->y,current_view,x2,y2);
     528      screen->line(x1,y1,x2,y2,light_connection_color);
     529    }
    522530
    523531      }
     
    525533
    526534    if (selected_object)
    527     {   
    528       selected_object->picture_space(x1,y1,x2,y2);   
     535    {
     536      selected_object->picture_space(x1,y1,x2,y2);
    529537      int32_t rx1,ry1,rx2,ry2;
    530538      the_game->game_to_mouse(x1,y1,v,rx1,ry1);
     
    535543      for (int i=0;i<selected_object->total_objects();i++)
    536544      {
    537         game_object *other=selected_object->get_object(i);
    538         the_game->game_to_mouse(other->x,other->y,current_view,x2,y2);
    539         screen->line(x1,y1,x2,y2,light_connection_color);
    540       }
    541     } 
     545    game_object *other=selected_object->get_object(i);
     546    the_game->game_to_mouse(other->x,other->y,current_view,x2,y2);
     547    screen->line(x1,y1,x2,y2,light_connection_color);
     548      }
     549    }
    542550
    543551
     
    564572void dev_controll::update_memprof()
    565573{
    566   if (memprof)
    567   {
     574    if(!memprof)
     575        return;
     576
    568577    int i;
    569     int total,*st,*ch;
    570     small_static_allocation_summary(total,st,ch);
    571 
    572     int x=WINDOW_FRAME_LEFT;
    573     int y=WINDOW_FRAME_TOP;
     578    int total, *st, *ch;
     579    small_static_allocation_summary(total, st, ch);
     580
     581    int h, x = 0, y = 0;
    574582    memprof->clear();
    575583
    576     for (i=0;i<total;i++)
    577     {
    578       int h=st[i]*100/3000;  x++;
    579       memprof->screen->bar(x,y,x,y+h,wm->bright_color());
    580       h=ch[i]*100/3000;
    581       memprof->screen->bar(x,y,x,y+h,wm->medium_color());
    582       x++;
     584    for(i = 0; i < total; i++)
     585    {
     586        x++;
     587        h = st[i] * 100 / 3000;
     588        memprof->screen->bar(x, y, x, y + h, wm->bright_color());
     589        h = ch[i] * 100 / 3000;
     590        memprof->screen->bar(x, y, x, y + h, wm->medium_color());
     591        x++;
    583592    }
    584593    jfree(st);
    585594    jfree(ch);
    586595    char buf[100];
    587     sprintf(buf,"%8ld %8ld",(long int)j_allocated(),(long int)j_available());
    588     wm->font()->put_string(memprof->screen,memprof->x1(),memprof->y2()-wm->font()->height(),buf);
    589 
    590   }
    591  
     596    sprintf(buf, "%8ld %8ld", (long int)j_allocated(), (long int)j_available());
     597    wm->font()->put_string(memprof->screen, memprof->x1(),
     598                           memprof->y2() - wm->font()->height(), buf);
    592599}
    593600
     
    607614    jfree(ch);
    608615    memprof=wm->new_window(0,0,total*2+20,100,NULL);
    609     update_memprof();   
     616    update_memprof();
    610617  }
    611618}
     
    631638    }
    632639
    633     tool_picker *tp=new tool_picker(WINDOW_FRAME_LEFT,WINDOW_FRAME_TOP,
    634                                              ID_NULL,
    635                                              5,(visual_object **)dev_mode_pict,dev_mode_ids,DEV_MODES,
    636                                                 pal,pal,NULL);
     640    tool_picker *tp=new tool_picker(0, 0,
     641                         ID_NULL,
     642                         5,(visual_object **)dev_mode_pict,dev_mode_ids,DEV_MODES,
     643                        pal,pal,NULL);
    637644    tbw=wm->new_window(prop->getd("toolbar x",-1),
    638                        prop->getd("toolbar y",-1),-1,-1,tp);
     645               prop->getd("toolbar y",-1),-1,-1,tp);
    639646    tp->set_x(setx,tbw->screen);
    640647  }
     
    643650void dev_controll::toggle_show_menu()
    644651{
    645   if (show_menu)
    646   {
    647     show_menu_on=0;
    648     prop->setd("layer x",show_menu->x);
    649     prop->setd("layer y",show_menu->y);
    650     wm->close_window(show_menu);
    651     show_menu=NULL;
    652   } else
    653   {
    654     show_menu_on=1;
    655     int sx=WINDOW_FRAME_LEFT,sy=WINDOW_FRAME_TOP;
    656 
    657     button *lnb=new button(sx,sy+100,SHOW_LINKS,            symbol_str("l_links"),NULL);           if (dev&DRAW_LINKS)          lnb->push();
    658     button *lb=new button(sx,sy+80,  SHOW_LIGHT,            symbol_str("l_light"),lnb);          if (dev&DRAW_LIGHTS)         lb->push();
    659     button *cb=new button(sx,sy+60,  SHOW_CHARACTERS,       symbol_str("l_char"),lb);       if (dev&DRAW_PEOPLE_LAYER)   cb->push();
    660     button *bb=new button(sx,sy+40,  SHOW_BACKGROUND,       symbol_str("l_back"),cb);       if (dev&DRAW_BG_LAYER)       bb->push();
    661     button *bdb=new button(sx,sy+20, SHOW_FOREGROUND_BOUND, symbol_str("l_bound"),bb); if (dev&DRAW_FG_BOUND_LAYER) bdb->push();
    662     button *fb=new button(sx,sy+ 0,  SHOW_FOREGROUND,       symbol_str("l_fore"),bdb);      if (dev&DRAW_FG_LAYER)       fb->push();
    663 
    664     show_menu=wm->new_window(prop->getd("layer x",-1),
    665                              prop->getd("layer y",-1),
    666                              -1,-1,fb,symbol_str(symbol_str("SHOW?")));
    667   }
    668 }
    669 
     652    if(show_menu)
     653    {
     654        show_menu_on = 0;
     655        prop->setd("layer x", show_menu->x);
     656        prop->setd("layer y", show_menu->y);
     657        wm->close_window(show_menu);
     658        show_menu = NULL;
     659        return;
     660    }
     661
     662    show_menu_on = 1;
     663
     664    button *lnb, *lb, *cb, *bb, *bdb, *fb;
     665
     666    lnb = new button(0, 100, SHOW_LINKS, symbol_str("l_links"), NULL);
     667    if(dev & DRAW_LINKS)
     668        lnb->push();
     669    lb = new button(0, 80, SHOW_LIGHT, symbol_str("l_light"), lnb);
     670    if(dev & DRAW_LIGHTS)
     671        lb->push();
     672    cb = new button(0, 60, SHOW_CHARACTERS, symbol_str("l_char"), lb);
     673    if(dev & DRAW_PEOPLE_LAYER)
     674        cb->push();
     675    bb = new button(0, 40, SHOW_BACKGROUND, symbol_str("l_back"), cb);
     676    if(dev & DRAW_BG_LAYER)
     677        bb->push();
     678    bdb = new button(0, 20, SHOW_FOREGROUND_BOUND, symbol_str("l_bound"), bb);
     679    if(dev & DRAW_FG_BOUND_LAYER)
     680        bdb->push();
     681    fb = new button(0, 0, SHOW_FOREGROUND, symbol_str("l_fore"), bdb);
     682    if(dev & DRAW_FG_LAYER)
     683        fb->push();
     684
     685    show_menu = wm->new_window(prop->getd("layer x", -1),
     686                               prop->getd("layer y", -1), -1, -1,
     687                               fb, symbol_str(symbol_str("SHOW?")));
     688}
    670689
    671690char **listable_objs=NULL;
     
    674693void dev_controll::toggle_omenu()
    675694{
    676   if (omenu)
    677   {
    678     omenu_on=0;
    679     prop->setd("objects x",omenu->x);
    680     prop->setd("objects y",omenu->y);
    681     wm->close_window(omenu);
    682     omenu=NULL;
    683     jfree(listable_objs);
    684     listable_objs=NULL;
    685   }
    686   else
    687   {
    688     omenu_on=1;
    689     total_listable=0;
    690     int i=0;
    691     for (;i<total_objects;i++)
    692       if (!figures[i]->get_cflag(CFLAG_UNLISTABLE))
    693         total_listable++;
    694     listable_objs=(char **)jmalloc(sizeof(char *)*total_listable,"omenu list");
    695     int c=0;   
    696     for (i=0;i<total_objects;i++)
    697       if (!figures[i]->get_cflag(CFLAG_UNLISTABLE))
    698       {
    699         listable_objs[c]=object_names[i];
    700         c++;
    701       }
    702              
    703     omenu=wm->new_window(prop->getd("objects x",0),
    704                          prop->getd("objects y",0),-1,-1,
    705                          new pick_list(WINDOW_FRAME_LEFT,
    706                                        WINDOW_FRAME_TOP,DEV_CREATE,yres/wm->font()->height()/2,
    707                                        listable_objs,total_listable,0,NULL,cash.img(window_texture)));
    708   } 
    709 }
     695    if(omenu)
     696    {
     697        omenu_on = 0;
     698        prop->setd("objects x", omenu->x);
     699        prop->setd("objects y", omenu->y);
     700        wm->close_window(omenu);
     701        omenu = NULL;
     702        jfree(listable_objs);
     703        listable_objs = NULL;
     704        return;
     705    }
     706
     707    omenu_on = 1;
     708    total_listable = 0;
     709
     710    int i, c;
     711
     712    for(i = 0; i < total_objects; i++)
     713        if(!figures[i]->get_cflag(CFLAG_UNLISTABLE))
     714            total_listable++;
     715    listable_objs = (char **)jmalloc(sizeof(char *) * total_listable, "omenu list");
     716
     717    for(i = 0, c = 0; i < total_objects; i++)
     718        if(!figures[i]->get_cflag(CFLAG_UNLISTABLE))
     719        {
     720            listable_objs[c] = object_names[i];
     721            c++;
     722        }
     723
     724    omenu = wm->new_window(prop->getd("objects x", 0),
     725                           prop->getd("objects y", 0), -1, -1,
     726                           new pick_list(0, 0, DEV_CREATE,
     727                                         yres / wm->font()->height() / 2,
     728                                         listable_objs, total_listable, 0,
     729                                         NULL, cash.img(window_texture)));
     730}
    710731
    711732static int get_omenu_item(int x)
     
    719740void dev_controll::toggle_pmenu()
    720741{
    721   if (pmenu)
    722   {
    723     pmenu_on=0;
    724     prop->setd("pal x",pmenu->x);
    725     prop->setd("pal y",pmenu->y);
    726     wm->close_window(pmenu);
    727     pmenu=NULL;
    728     jfree(pwin_list);
    729   }
    730   else if (total_pals)
    731   {
    732     pmenu_on=1;
    733     pwin_list=(char **)jmalloc(total_pals*sizeof(char *),"pal pick list");
    734     int i;
    735     for (i=0;i<total_pals;i++)
    736       pwin_list[i]=pal_wins[i]->name;
    737 
    738     pmenu=wm->new_window(prop->getd("pal x",0),
    739                          prop->getd("pal y",-1),
    740                          -1,-1,
    741                          new pick_list(WINDOW_FRAME_LEFT,
    742                                        WINDOW_FRAME_TOP,DEV_PALETTE,yres/wm->font()->height()/2,
    743                                        pwin_list,total_pals,0,NULL,cash.img(window_texture)));
    744   } else the_game->show_help(symbol_str("no_pals"));
    745 }
     742    if(pmenu)
     743    {
     744        pmenu_on = 0;
     745        prop->setd("pal x", pmenu->x);
     746        prop->setd("pal y", pmenu->y);
     747        wm->close_window(pmenu);
     748        pmenu = NULL;
     749        jfree(pwin_list);
     750        return;
     751    }
     752
     753    if(!total_pals)
     754    {
     755        the_game->show_help(symbol_str("no_pals"));
     756        return;
     757    }
     758
     759    pmenu_on = 1;
     760
     761    pwin_list = (char **)jmalloc(total_pals * sizeof(char *), "pal pick list");
     762    for(int i = 0; i < total_pals; i++)
     763        pwin_list[i] = pal_wins[i]->name;
     764
     765    pmenu = wm->new_window(prop->getd("pal x",0),
     766                           prop->getd("pal y",-1), -1,-1,
     767                           new pick_list(0, 0, DEV_PALETTE,
     768                                         yres / wm->font()->height() / 2,
     769                                         pwin_list, total_pals, 0, NULL,
     770                                         cash.img(window_texture)));
     771}
    746772
    747773
    748774void dev_controll::toggle_fgw()
    749775{
    750   if (!forew)
    751   {
    752     forew_on=0;
    753     int maxh=(yres-25)/(the_game->ftile_height()/fg_scale);
    754 
    755     tile_picker *f_tp=new tile_picker(WINDOW_FRAME_LEFT+1,WINDOW_FRAME_TOP+1,
    756                                          DEV_FG_PICKER,SPEC_FORETILE,fg_scale,maxh,fg_w,NULL);
     776    if(forew)
     777    {
     778        forew_on = 1;
     779        prop->setd("fore x", forew->x);
     780        prop->setd("fore y", forew->y);
     781        wm->close_window(forew);
     782        forew = NULL;
     783        return;
     784    }
     785
     786    /* FIXME: shouldn't this be 1? */
     787    forew_on = 0;
     788    int maxh = (yres - 25) / (the_game->ftile_height() / fg_scale);
     789
     790    /* FIXME: previous code had 1 instead of 0, investigate */
     791    tile_picker *f_tp = new tile_picker(0, 0, DEV_FG_PICKER, SPEC_FORETILE,
     792                                        fg_scale, maxh, fg_w, NULL);
    757793    f_tp->reverse();
    758794
    759     forew=wm->new_window(prop->getd("fore x",-30),
    760                          prop->getd("fore y",0),
    761                          -1,-1,
    762                          f_tp,symbol_str("l_fg"));
     795    forew = wm->new_window(prop->getd("fore x", -30), prop->getd("fore y", 0),
     796                           -1, -1, f_tp,symbol_str("l_fg"));
     797}
     798
     799void dev_controll::toggle_music_window()
     800{
     801/*  if (!music_window)
     802  {
     803    music_window=wm->new_window(-1,30,0,0,
     804             new pick_list(0,0,DEV_MUSIC_PICKLIST,10,song_list,total_songs,0,NULL));
     805    wm->fnt->put_string(music_window->screen,0,1,"songs");
    763806  } else
    764   {
    765     forew_on=1;
    766     prop->setd("fore x",forew->x);
    767     prop->setd("fore y",forew->y);
    768     wm->close_window(forew);
    769     forew=NULL;
    770   }
    771 }
    772 
    773 void dev_controll::toggle_music_window()
    774 {
    775 /*  if (!music_window)
    776   {
    777     music_window=wm->new_window(-1,30,0,0,
    778                          new pick_list(WINDOW_FRAME_LEFT,WINDOW_FRAME_TOP,
    779                                        DEV_MUSIC_PICKLIST,10,song_list,total_songs,0,NULL));
    780     wm->fnt->put_string(music_window->screen,WINDOW_FRAME_LEFT,1,"songs");
    781   } else
    782   {
     807  {
    783808    wm->close_window(music_window);
    784809    music_window=NULL;
     
    788813void dev_controll::toggle_bgw()
    789814{
    790   if (!backw)
    791   {
    792     backw_on=0;
    793     int maxh=(yres-25)/(the_game->btile_height()/bg_scale);
    794 
    795     backw=wm->new_window(prop->getd("back x",-30),
    796                          prop->getd("back y",0),
    797                          -1,-1,
    798                          new tile_picker(WINDOW_FRAME_LEFT+1,WINDOW_FRAME_TOP+1,
    799                                          DEV_BG_PICKER,SPEC_BACKTILE,bg_scale,maxh,bg_w,NULL),symbol_str("l_bg"));
    800   } else
    801   {
    802     backw_on=1;
    803     prop->setd("back x",backw->x);
    804     prop->setd("back y",backw->y);
    805     wm->close_window(backw);
    806     backw=NULL;
    807   }
     815    if(backw)
     816    {
     817        backw_on = 1;
     818        prop->setd("back x", backw->x);
     819        prop->setd("back y", backw->y);
     820        wm->close_window(backw);
     821        backw = NULL;
     822        return;
     823    }
     824
     825    /* FIXME: shouldn't this be 1? */
     826    backw_on = 0;
     827    int maxh = (yres - 25) / (the_game->btile_height() / bg_scale);
     828
     829    /* FIXME: previous code had 1 instead of 0, investigate */
     830    tile_picker *f_tp = new tile_picker(0, 0, DEV_BG_PICKER, SPEC_BACKTILE,
     831                                        bg_scale, maxh, bg_w, NULL);
     832    forew = wm->new_window(prop->getd("back x", -30), prop->getd("back y", 0),
     833                           -1, -1, f_tp,symbol_str("l_bg"));
    808834}
    809835
    810836void dev_controll::toggle_search_window()
    811837{
    812   if (!search_window)
    813   {
    814     int wl=WINDOW_FRAME_LEFT+1,
    815         wh=WINDOW_FRAME_TOP+1;
    816     int bw=cash.img(dev_forward)->width();
    817     search_window=wm->new_window(prop->getd("searchw x",-30),
    818                                  prop->getd("searchw y",0),
    819                                  -1,-1,
    820                                  new text_field(wl,wh,ID_SEARCH_TEXT,"object name>",
    821                                                 "***************************",
    822                                                 prop->get("search name",""),
    823                                   new button(wl+bw*1,wh+wm->font()->height()+5,ID_SEARCH_BACKWARD,
    824                                             cash.img(dev_backward),
    825                                   new button(wl+bw*3,wh+wm->font()->height()+5,ID_SEARCH_FOREWARD,
    826                                             cash.img(dev_forward),NULL))),"SEARCH");
    827     searchw_on=0;
    828   } else
    829   {
    830     searchw_on=1;
    831     prop->setd("searchw x",search_window->x);
    832     prop->setd("searchw y",search_window->y);
    833     prop->set("search name",search_window->read(ID_SEARCH_TEXT));
    834     wm->close_window(search_window);
    835     search_window=NULL;
    836     search_object=NULL;
    837   }
     838    if(search_window)
     839    {
     840        searchw_on = 1;
     841        prop->setd("searchw x", search_window->x);
     842        prop->setd("searchw y", search_window->y);
     843        prop->set("search name", search_window->read(ID_SEARCH_TEXT));
     844        wm->close_window(search_window);
     845        search_window = NULL;
     846        search_object = NULL;
     847        return;
     848    }
     849
     850    int bw = cash.img(dev_forward)->width();
     851    /* FIXME: previous code had 1,1 instead of 0,0 -- investigate */
     852    search_window = wm->new_window(prop->getd("searchw x", -30),
     853                                   prop->getd("searchw y", 0), -1, -1,
     854        new text_field(0, 0, ID_SEARCH_TEXT, "object name>",
     855                       "***************************",
     856                       prop->get("search name", ""),
     857        new button(bw, wm->font()->height() + 5, ID_SEARCH_BACKWARD,
     858                   cash.img(dev_backward),
     859        new button(bw * 3, wm->font()->height() + 5, ID_SEARCH_FOREWARD,
     860                   cash.img(dev_forward), NULL))), "SEARCH");
     861
     862    /* FIXME: shouldn't this be 1? */
     863    searchw_on = 0;
    838864}
    839865
     
    847873{
    848874  scale_mult=1;
    849   scale_div=1; 
     875  scale_div=1;
    850876  dev=0;
    851877  int i;
     
    854880
    855881  for (i=1;i<argc;i++)
    856   {   
     882  {
    857883    if (!strcmp(argv[i],"-edit"))
    858884    {
    859       dev|=EDIT_MODE;   
     885      dev|=EDIT_MODE;
    860886      start_edit=1;
    861887      start_running=1;
     
    868894    }
    869895    else if (!strcmp(argv[i],"-fwin"))
    870       open_fwin=1;   
     896      open_fwin=1;
    871897    else if (!strcmp(argv[i],"-show_mem"))
    872       start_mem=1;   
     898      start_mem=1;
    873899    else if (!strcmp(argv[i],"-bwin"))
    874       open_bwin=1;         
     900      open_bwin=1;
    875901    else if (!strcmp(argv[i],"-owin"))
    876       open_owin=1;       
     902      open_owin=1;
    877903    else if (!strcmp(argv[i],"-nodelay"))
    878904      start_nodelay=1;
     
    880906/*    else if (!strcmp(argv[i],"-scale"))
    881907    {
    882       i++;     
     908      i++;
    883909      scale_mult=atoi(argv[i++]);
    884910      scale_div=atoi(argv[i]);
     
    893919      demo_start=1;
    894920
    895   } 
     921  }
    896922
    897923  if (get_option("-no_autolight"))
     
    938964  search_object = NULL;
    939965  memprof=NULL;
    940   oedit=NULL; 
     966  oedit=NULL;
    941967  forew=NULL;
    942   backw=NULL; 
    943   omenu=NULL; 
     968  backw=NULL;
     969  omenu=NULL;
    944970  ledit=NULL;
    945971  pmenu=NULL;
     
    961987    the_game->draw();
    962988  }
    963  
     989
    964990  dev_console=new dev_term(50,18,this);
    965991  if (start_edit)
    966     dev_menu=make_menu(0,yres-wm->font()->height()-5);   
     992    dev_menu=make_menu(0,yres-wm->font()->height()-5);
    967993
    968994  if (get_option("-nolight"))
     
    9801006
    9811007void dev_controll::load_stuff()
    982 { 
     1008{
    9831009  if (dev & EDIT_MODE)
    9841010  {
     
    10041030  if (command[0]=='(')            // is this a lisp command?
    10051031  {
    1006     eval(compile(command)); 
     1032    eval(compile(command));
    10071033    return ;
    10081034  }
     
    10181044      while (o)
    10191045      {
    1020         dprintf("%s %d %d %d %d\n",object_names[o->otype],o->x,o->y,
    1021                 figures[o->otype]->rangex,
    1022                 figures[o->otype]->rangey
    1023                 );
    1024         o=o->next_active;
     1046    dprintf("%s %d %d %d %d\n",object_names[o->otype],o->x,o->y,
     1047        figures[o->otype]->rangex,
     1048        figures[o->otype]->rangey
     1049        );
     1050    o=o->next_active;
    10251051      }
    10261052    }
     
    10341060      int i;
    10351061      for (i=0;i<total_weapons;i++)
    1036         f->weapons[i]=-1;
     1062    f->weapons[i]=-1;
    10371063
    10381064      if (total_weapons)
     
    10511077      int32_t *w=(int32_t *)jmalloc(total_weapons*sizeof(int32_t),"tmp weapon array");
    10521078      memcpy(w,player_list->weapons,total_weapons*sizeof(int32_t));
    1053      
     1079
    10541080      char tmp[100];
    10551081      strcpy(tmp,current_level->name());
     
    10631089      player_list->focus->y=cy;
    10641090
    1065       memcpy(player_list->weapons,w,total_weapons*sizeof(int32_t));     
     1091      memcpy(player_list->weapons,w,total_weapons*sizeof(int32_t));
    10661092      jfree(w);
    10671093
    10681094      the_game->need_refresh();
    1069     }   
     1095    }
    10701096  }
    10711097
     
    10781104      if (sscanf(command,"%s%d%d",fword,&l,&h)==3)
    10791105      {
    1080         dprintf("unchopped %dx%d to ",l,h);
    1081         l=(l+the_game->btile_width()-1)/the_game->btile_width();
    1082         h=(h+the_game->btile_height()-1)/the_game->btile_height();
    1083         for (y=0,i=cur_bg;y<h;y++)
     1106    dprintf("unchopped %dx%d to ",l,h);
     1107    l=(l+the_game->btile_width()-1)/the_game->btile_width();
     1108    h=(h+the_game->btile_height()-1)/the_game->btile_height();
     1109    for (y=0,i=cur_bg;y<h;y++)
    10841110          for (x=0;x<l;x++)
    1085             the_game->put_bg(rx+x,ry+y,i++); 
    1086         dprintf("%dx%d\n",l,h);
     1111            the_game->put_bg(rx+x,ry+y,i++);
     1112    dprintf("%dx%d\n",l,h);
    10871113      } else dprintf(symbol_str("unchop1"));
    10881114
    1089     }     
    1090   } 
     1115    }
     1116  }
    10911117  if (!strcmp(fword,"center"))
    10921118  {
     
    11021128  if (!strcmp(fword,"size"))
    11031129  {
    1104     int l,w;   
     1130    int l,w;
    11051131    if (sscanf(command,"%s%d%d",fword,&l,&w)==3)
    11061132    {
    1107       current_level->set_size(l,w);   
     1133      current_level->set_size(l,w);
    11081134      dprintf("level is now %dx%d\n",l,w);
    11091135    } else dprintf(symbol_str("size1"));
     
    11151141    while (*command && *command!=' ') command++;
    11161142    if (*command)
    1117       current_level->set_name(command+1);   
     1143      current_level->set_name(command+1);
    11181144    dprintf(symbol_str("name_now"),current_level->name());
    11191145  }
     
    11211147  {
    11221148    strcpy(level_file,st);
    1123     dprintf("first level will be '%s'\n",level_file);     
     1149    dprintf("first level will be '%s'\n",level_file);
    11241150  }
    11251151
     
    11301156
    11311157    dprintf("loading '%s'\n",st);
    1132     the_game->load_level(st);   
     1158    the_game->load_level(st);
    11331159    current_level->unactivate_all();
    11341160
     
    11381164  if (!strcmp(fword,"mem"))
    11391165  {
    1140     if (st[0])   
     1166    if (st[0])
    11411167      show_char_mem(st);
    11421168    else show_mem();
     
    11501176
    11511177  if (!strcmp(fword,"delete"))
    1152   {     
     1178  {
    11531179    if (selected_object)
    11541180    {
     
    11561182        the_game->show_help(symbol_str("nd_player"));
    11571183      else
    1158       {     
    1159         if (selected_object->controller())
    1160           the_game->show_help(symbol_str("nd_player"));
    1161         else
    1162         {
    1163           current_level->delete_object(selected_object);
    1164           if (S_DELETE_SND>0) cash.sfx(S_DELETE_SND)->play(sfx_volume/2);
    1165           selected_object=NULL;
    1166         }
     1184      {
     1185    if (selected_object->controller())
     1186      the_game->show_help(symbol_str("nd_player"));
     1187    else
     1188    {
     1189      current_level->delete_object(selected_object);
     1190      if (S_DELETE_SND>0) cash.sfx(S_DELETE_SND)->play(sfx_volume/2);
     1191      selected_object=NULL;
     1192    }
    11671193      }
    11681194    } else if (selected_light)
     
    11701196      if (!edit_light)
    11711197      {
    1172         if (current_level)
    1173         {
     1198    if (current_level)
     1199    {
    11741200          current_level->remove_light(selected_light);
    1175           if (S_DELETE_SND>0) cash.sfx(S_DELETE_SND)->play(sfx_volume/2);
    1176         }
    1177         else
     1201      if (S_DELETE_SND>0) cash.sfx(S_DELETE_SND)->play(sfx_volume/2);
     1202    }
     1203    else
    11781204          delete_light(selected_light);
    1179         selected_light=NULL;
    1180       }     
     1205    selected_light=NULL;
     1206      }
    11811207    } else the_game->show_help(symbol_str("d_nosel"));
    11821208    the_game->need_refresh();
     
    12091235  if (!strcmp(fword,"move"))
    12101236  {
    1211     if (selected_object)   
    1212       edit_object=selected_object;       
     1237    if (selected_object)
     1238      edit_object=selected_object;
    12131239
    12141240    if (edit_object)
    12151241      state=DEV_MOVE_OBJECT;
    12161242    else the_game->show_help("No object selected");
    1217      
     1243
    12181244  }
    12191245  if (!strcmp(fword,"move_light"))
    12201246  {
    1221     if (selected_light)   
    1222       edit_light=selected_light;         
     1247    if (selected_light)
     1248      edit_light=selected_light;
    12231249
    12241250    if (edit_light)
    12251251      state=DEV_MOVE_LIGHT;
    12261252    else the_game->show_help("No light selected");
    1227      
    1228   }
    1229 
    1230  
     1253
     1254  }
     1255
     1256
    12311257  if (!strcmp(fword,"clear_auto"))
    12321258  {
     
    12421268    the_game->ftile_on(dlastx,dlasty,x,y);
    12431269    if (x>=0 && y>=0 && x<current_level->foreground_width() &&
    1244         y<current_level->foreground_height())
     1270    y<current_level->foreground_height())
    12451271    {
    12461272      cur_fg=current_level->get_fg(x,y);
    1247       if (forew)     
    1248         ((tile_picker *)forew->read(DEV_FG_PICKER))->recenter(forew->screen);     
     1273      if (forew)
     1274    ((tile_picker *)forew->read(DEV_FG_PICKER))->recenter(forew->screen);
    12491275      the_game->need_refresh();
    12501276    }
     
    12561282    the_game->ftile_on(dlastx,dlasty,x,y);
    12571283    if (x>=0 && y>=0 && x<current_level->foreground_width() &&
    1258         y<current_level->foreground_height())   
    1259       current_level->fg_set_raised(x,y,!current_level->fg_raised(x,y));   
    1260   }
    1261  
     1284    y<current_level->foreground_height())
     1285      current_level->fg_set_raised(x,y,!current_level->fg_raised(x,y));
     1286  }
     1287
    12621288  if (!strcmp(fword,"fg_add"))
    12631289  {
     
    12691295      if (cur_fg>=nforetiles) cur_fg=nforetiles-1;
    12701296
    1271       if (forew)     
    1272         ((tile_picker *)forew->read(DEV_FG_PICKER))->recenter(forew->screen);     
    1273     }   
     1297      if (forew)
     1298    ((tile_picker *)forew->read(DEV_FG_PICKER))->recenter(forew->screen);
     1299    }
    12741300  }
    12751301
     
    12901316    game_object *which=selected_object;
    12911317    if (!selected_object) which=edit_object;
    1292     if (which)   
     1318    if (which)
    12931319      current_level->to_front(which);
    12941320    else the_game->show_help(symbol_str("forward?"));
     
    12991325    game_object *which=selected_object;
    13001326    if (!selected_object) which=edit_object;
    1301     if (which)   
     1327    if (which)
    13021328      current_level->to_back(which);
    1303     else the_game->show_help(symbol_str("back?")); 
     1329    else the_game->show_help(symbol_str("back?"));
    13041330  }
    13051331
     
    13081334    game_object *which=selected_object;
    13091335    if (!selected_object) which=edit_object;
    1310     if (which)   
     1336    if (which)
    13111337    {
    13121338      int x;
    13131339      if (*st && sscanf(st,"%d",&x)!=EOF)
    13141340        which->change_aitype(x);
    1315       else 
    1316       {
    1317         switch (ev.key)
    1318         {
    1319           case '0' : which->change_aitype(0); break;
    1320           case '1' : which->change_aitype(1); break;
    1321           case '2' : which->change_aitype(2); break;
    1322           case '3' : which->change_aitype(3); break;
    1323           case '4' : which->change_aitype(4); break;
    1324           case '5' : which->change_aitype(5); break;
    1325           case '6' : which->change_aitype(6); break;
    1326           case '7' : which->change_aitype(7); break;
    1327           case '8' : which->change_aitype(8); break;
    1328           case '9' : which->change_aitype(9); break;
    1329           case ')' : which->change_aitype(10); break;
    1330           case '!' : which->change_aitype(11); break;
    1331           case '@' : which->change_aitype(12); break;
    1332           case '#' : which->change_aitype(13); break;
    1333           case '$' : which->change_aitype(14); break;
    1334           case '%' : which->change_aitype(15); break;
    1335           case '^' : which->change_aitype(16); break;
    1336           case '&' : which->change_aitype(17); break;
    1337           case '*' : which->change_aitype(18); break;
    1338           case '(' : which->change_aitype(19); break;
    1339         }
    1340       } 
     1341      else
     1342      {
     1343    switch (ev.key)
     1344    {
     1345      case '0' : which->change_aitype(0); break;
     1346      case '1' : which->change_aitype(1); break;
     1347      case '2' : which->change_aitype(2); break;
     1348      case '3' : which->change_aitype(3); break;
     1349      case '4' : which->change_aitype(4); break;
     1350      case '5' : which->change_aitype(5); break;
     1351      case '6' : which->change_aitype(6); break;
     1352      case '7' : which->change_aitype(7); break;
     1353      case '8' : which->change_aitype(8); break;
     1354      case '9' : which->change_aitype(9); break;
     1355      case ')' : which->change_aitype(10); break;
     1356      case '!' : which->change_aitype(11); break;
     1357      case '@' : which->change_aitype(12); break;
     1358      case '#' : which->change_aitype(13); break;
     1359      case '$' : which->change_aitype(14); break;
     1360      case '%' : which->change_aitype(15); break;
     1361      case '^' : which->change_aitype(16); break;
     1362      case '&' : which->change_aitype(17); break;
     1363      case '*' : which->change_aitype(18); break;
     1364      case '(' : which->change_aitype(19); break;
     1365    }
     1366      }
    13411367      the_game->need_refresh();
    13421368    }
    13431369    else the_game->show_help(symbol_str("aitype"));
    13441370  }
    1345 
    1346 
    13471371}
    13481372
     
    13501374void dev_controll::toggle_light_window()
    13511375{
    1352   if (!lightw)
    1353   {
    1354     int wl=WINDOW_FRAME_LEFT,wh=WINDOW_FRAME_TOP,bh=16+6,bw=20+6,th=wm->font()->height()+4;   
    1355     lightw=wm->new_window(prop->getd("light create x",0),
    1356                           prop->getd("light create y",0),
    1357                           -1,-1,new button_box(wl,wh,DEV_LIGHT_BUTTON_BOX,1,
    1358                                     new button(wl+bw*0,wh+bh*0,DEV_LIGHT0,cash.img(light_buttons[0]),
    1359                                     new button(wl+bw*1,wh+bh*0,DEV_LIGHT1,cash.img(light_buttons[1]),
    1360                                     new button(wl+bw*2,wh+bh*0,DEV_LIGHT2,cash.img(light_buttons[2]),
    1361 
    1362                                     new button(wl+bw*0,wh+bh*1,DEV_LIGHT3,cash.img(light_buttons[3]),
    1363                                     new button(wl+bw*1,wh+bh*1,DEV_LIGHT4,cash.img(light_buttons[4]),
    1364                                     new button(wl+bw*2,wh+bh*1,DEV_LIGHT5,cash.img(light_buttons[5]),
    1365 
    1366                                     new button(wl+bw*0,wh+bh*2,DEV_LIGHT6,cash.img(light_buttons[6]),
    1367                                     new button(wl+bw*1,wh+bh*2,DEV_LIGHT7,cash.img(light_buttons[7]),
    1368                                     new button(wl+bw*2,wh+bh*2,DEV_LIGHT8,cash.img(light_buttons[8]),
    1369 
    1370                                     new button(wl+bw*0,wh+bh*3,DEV_LIGHT9,cash.img(light_buttons[9]),
    1371                                  new button(wl+bw*1,wh+bh*3,DEV_AMBIENT,cash.img(light_buttons[11]),
    1372                                                NULL))))))))))),
    1373 
    1374                                     new text_field(wl,wh+bh*4,DEV_LIGHTW,      "W ","******",
    1375                                                    prop->getd("light create w",0),
    1376                                     new text_field(wl,wh+bh*4+th*1,DEV_LIGHTH, "H ","******",
    1377                                                    prop->getd("light create h",0),
    1378                                     new text_field(wl,wh+bh*4+th*2,DEV_LIGHTR1,"R1","******",
    1379                                                    prop->getd("light create r1",1),
    1380                                     new text_field(wl,wh+bh*4+th*3,DEV_LIGHTR2,"R2","******",
    1381                                                    prop->getd("light create r2",100),
    1382                                                    NULL))))),
    1383                                                    symbol_str("l_light"));
    1384                                                    
    1385   } else
    1386   {
    1387     prop->setd("light create x",lightw->x);
    1388     prop->setd("light create y",lightw->y);
    1389     prop->setd("light create w",atoi(lightw->read(DEV_LIGHTW)));
    1390     prop->setd("light create h",atoi(lightw->read(DEV_LIGHTH)));
    1391     prop->setd("light create r1",atoi(lightw->read(DEV_LIGHTR1)));
    1392     prop->setd("light create r2",atoi(lightw->read(DEV_LIGHTR2)));
    1393     wm->close_window(lightw);
    1394     lightw=NULL;
    1395   }
     1376    if(lightw)
     1377    {
     1378        prop->setd("light create x", lightw->x);
     1379        prop->setd("light create y", lightw->y);
     1380        prop->setd("light create w", atoi(lightw->read(DEV_LIGHTW)));
     1381        prop->setd("light create h", atoi(lightw->read(DEV_LIGHTH)));
     1382        prop->setd("light create r1", atoi(lightw->read(DEV_LIGHTR1)));
     1383        prop->setd("light create r2", atoi(lightw->read(DEV_LIGHTR2)));
     1384        wm->close_window(lightw);
     1385        lightw = NULL;
     1386        return;
     1387    }
     1388
     1389    int bh = 16 + 6, bw = 20 + 6, th = wm->font()->height() + 4;
     1390
     1391    lightw = wm->new_window(prop->getd("light create x", 0),
     1392                            prop->getd("light create y", 0), -1, -1,
     1393        new button_box(0, 0, DEV_LIGHT_BUTTON_BOX, 1,
     1394            new button(bw * 0, bh * 0, DEV_LIGHT0, cash.img(light_buttons[0]),
     1395            new button(bw * 1, bh * 0, DEV_LIGHT1, cash.img(light_buttons[1]),
     1396            new button(bw * 2, bh * 0, DEV_LIGHT2, cash.img(light_buttons[2]),
     1397            new button(bw * 0, bh * 1, DEV_LIGHT3, cash.img(light_buttons[3]),
     1398            new button(bw * 1, bh * 1, DEV_LIGHT4, cash.img(light_buttons[4]),
     1399            new button(bw * 2, bh * 1, DEV_LIGHT5, cash.img(light_buttons[5]),
     1400            new button(bw * 0, bh * 2, DEV_LIGHT6, cash.img(light_buttons[6]),
     1401            new button(bw * 1, bh * 2, DEV_LIGHT7, cash.img(light_buttons[7]),
     1402            new button(bw * 2, bh * 2, DEV_LIGHT8, cash.img(light_buttons[8]),
     1403            new button(bw * 0, bh * 3, DEV_LIGHT9, cash.img(light_buttons[9]),
     1404            new button(bw * 1, bh * 3, DEV_AMBIENT, cash.img(light_buttons[11]),
     1405            NULL))))))))))),
     1406        new text_field(0, bh * 4, DEV_LIGHTW, "W ", "******",
     1407                       prop->getd("light create w", 0),
     1408        new text_field(0, bh * 4 + th * 1, DEV_LIGHTH, "H ", "******",
     1409                       prop->getd("light create h", 0),
     1410        new text_field(0, bh * 4 + th * 2, DEV_LIGHTR1, "R1", "******",
     1411                       prop->getd("light create r1", 1),
     1412        new text_field(0, bh * 4 + th * 3, DEV_LIGHTR2, "R2", "******",
     1413                       prop->getd("light create r2", 100), NULL))))),
     1414        symbol_str("l_light"));
    13961415}
    13971416
     
    13991418{
    14001419  ai_object=o;
    1401   int th=wm->font()->height()+4,wl=WINDOW_FRAME_LEFT,wh=WINDOW_FRAME_TOP+20;
     1420  int th=wm->font()->height()+4,wl = 0, wh = 20;
    14021421  if (figures[o->otype]->total_fields)
    14031422  {
     
    14071426      if( strlen(figures[o->otype]->fields[i]->descript_name) > (unsigned)maxl )
    14081427        maxl=strlen(figures[o->otype]->fields[i]->descript_name);
    1409  
     1428
    14101429    int owh=wh;
    14111430    ifield *first=NULL,*last=NULL;
     
    14151434      strcpy(tmp,figures[o->otype]->fields[i]->descript_name);
    14161435      for (int j=maxl-strlen(figures[o->otype]->fields[i]->descript_name);j;j--)
    1417         strcat(tmp," ");     
     1436        strcat(tmp," ");
    14181437      int er;
    14191438      ifield *p=new text_field(wl,wh,ID_NULL,tmp,"######",
    1420                                (double)o->get_var_by_name(figures[o->otype]->fields[i]->real_name,er),
    1421                                NULL);
     1439                   (double)o->get_var_by_name(figures[o->otype]->fields[i]->real_name,er),
     1440                   NULL);
    14221441      if (last)
    14231442        last->next=p;
     
    14261445      last=p;
    14271446      wh+=th;
    1428     }         
     1447    }
    14291448    aiw=wm->new_window(prop->getd("ai x",0),
    1430                        prop->getd("ai y",0),
    1431                        -1,-1,               
     1449               prop->getd("ai y",0),
     1450               -1,-1,
    14321451       new button(wl,owh-20,DEV_AI_OK,cash.img(dev_ok),first),"ai");
    14331452
     
    14361455  {
    14371456    aiw=wm->new_window(prop->getd("ai x",0),
    1438                        prop->getd("ai y",0),
    1439                        -1,-1,
     1457               prop->getd("ai y",0),
     1458               -1,-1,
    14401459       new button(wl,wh-20,DEV_AI_OK,cash.img(dev_ok),
    14411460       new text_field(wl,wh+th*0, DEV_AI_XVEL,    symbol_str("ai_xvel"),"#####",(double)o->xvel(),
     
    14501469       new text_field(wl,wh+th*9,DEV_AI_STATE,    symbol_str("ai_state"),"####",(double)o->aistate(),
    14511470       new text_field(wl,wh+th*10,DEV_AI_FADE,    symbol_str("ai_fade"),"####",(double)o->fade_count(),
    1452                       NULL)))))))))))),"ai");
     1471              NULL)))))))))))),"ai");
    14531472  }
    14541473
     
    14681487    edit_light=NULL;
    14691488  }
    1470   if (l==selected_light) 
     1489  if (l==selected_light)
    14711490    selected_light=NULL;
    14721491}
     
    15001519{
    15011520  if (aiw)
    1502   {   
     1521  {
    15031522    game_object *o=ai_object;
    15041523    int32_t x;
     
    15071526      if (figures[o->otype]->total_fields)
    15081527      {
    1509         ifield *f=aiw->inm->get(DEV_AI_OK)->next;
    1510         for (int i=0;i<figures[o->otype]->total_fields;i++)
    1511         {
    1512           x=atoi(f->read());
    1513           char *v=figures[o->otype]->fields[i]->real_name;
    1514           int er;
    1515           if (o->get_var_by_name(v,er)!=x)
    1516           o->set_var_by_name(v,x);
    1517           f=f->next;
    1518         }
     1528    ifield *f=aiw->inm->get(DEV_AI_OK)->next;
     1529    for (int i=0;i<figures[o->otype]->total_fields;i++)
     1530    {
     1531      x=atoi(f->read());
     1532      char *v=figures[o->otype]->fields[i]->real_name;
     1533      int er;
     1534      if (o->get_var_by_name(v,er)!=x)
     1535      o->set_var_by_name(v,x);
     1536      f=f->next;
     1537    }
    15191538      }
    15201539      else
    15211540      {
    1522         x=atoi(aiw->read(DEV_AI_XVEL)); if (x!=o->xvel()) o->set_xvel(x);
    1523         x=atoi(aiw->read(DEV_AI_YVEL)); if (x!=o->yvel()) o->set_yvel(x);
    1524 
    1525         x=atoi(aiw->read(DEV_AI_XACEL)); if (x!=o->xacel()) o->set_xacel(x);
    1526         x=atoi(aiw->read(DEV_AI_YACEL)); if (x!=o->yacel()) o->set_yacel(x);
    1527 
    1528         x=atoi(aiw->read(DEV_AI_STTIME)); if (x!=o->aistate_time()) o->set_aistate_time(x);
    1529         x=atoi(aiw->read(DEV_AI_GRAVITY)); if (x!=o->gravity()) o->set_gravity(x);
    1530 
    1531         x=atoi(aiw->read(DEV_AI_HEALTH)); if (x!=o->hp()) o->set_hp(x);
    1532         x=atoi(aiw->read(DEV_AI_MORPHPR)); if (x!=o->mp()) o->set_mp(x);
    1533 
    1534         x=atoi(aiw->read(DEV_AI_TYPE)); if (x!=o->aitype()) o->set_aitype(x);
    1535         x=atoi(aiw->read(DEV_AI_STATE)); if (x!=o->aistate()) o->set_aistate(x);
    1536         x=atoi(aiw->read(DEV_AI_FADE)); if (x!=o->fade_count()) o->set_fade_count(x);
     1541    x=atoi(aiw->read(DEV_AI_XVEL)); if (x!=o->xvel()) o->set_xvel(x);
     1542    x=atoi(aiw->read(DEV_AI_YVEL)); if (x!=o->yvel()) o->set_yvel(x);
     1543
     1544    x=atoi(aiw->read(DEV_AI_XACEL)); if (x!=o->xacel()) o->set_xacel(x);
     1545    x=atoi(aiw->read(DEV_AI_YACEL)); if (x!=o->yacel()) o->set_yacel(x);
     1546
     1547    x=atoi(aiw->read(DEV_AI_STTIME)); if (x!=o->aistate_time()) o->set_aistate_time(x);
     1548    x=atoi(aiw->read(DEV_AI_GRAVITY)); if (x!=o->gravity()) o->set_gravity(x);
     1549
     1550    x=atoi(aiw->read(DEV_AI_HEALTH)); if (x!=o->hp()) o->set_hp(x);
     1551    x=atoi(aiw->read(DEV_AI_MORPHPR)); if (x!=o->mp()) o->set_mp(x);
     1552
     1553    x=atoi(aiw->read(DEV_AI_TYPE)); if (x!=o->aitype()) o->set_aitype(x);
     1554    x=atoi(aiw->read(DEV_AI_STATE)); if (x!=o->aistate()) o->set_aistate(x);
     1555    x=atoi(aiw->read(DEV_AI_FADE)); if (x!=o->fade_count()) o->set_fade_count(x);
    15371556      }
    15381557    }
     
    15561575    if (!current_level) return ;
    15571576    current_area=current_level->area_list=new area_controller(gx,gy,
    1558                                                               the_game->ftile_width(),
    1559                                                               the_game->ftile_height(),
    1560                                                               current_level->area_list);
     1577                                  the_game->ftile_width(),
     1578                                  the_game->ftile_height(),
     1579                                  current_level->area_list);
    15611580    the_game->need_refresh();
    15621581    state=DEV_DRAG_AREA_BOTTOM;
     
    15721591
    15731592    if (current_area && read_values)
    1574     {     
     1593    {
    15751594      current_area->ambient=atoi(area_win->read(DEV_AREA_AMBIENT));
    15761595      current_area->ambient_speed=atoi(area_win->read(DEV_AREA_AMBIENT_SPEED));
     
    15791598      current_area->view_xoff_speed=atoi(area_win->read(DEV_AREA_VIEW_XOFF_SPEED));
    15801599      current_area->view_yoff_speed=atoi(area_win->read(DEV_AREA_VIEW_YOFF_SPEED));
    1581     }   
     1600    }
    15821601    wm->close_window(area_win);
    15831602    area_win=NULL;
     
    16001619      the_game->game_to_mouse(a->x+a->w,a->y+a->h,v,x2,y2);
    16011620      if (abs(x1-mx)<2 && abs(y1-my)<2)
    1602       { find=a; find_top=1; }
     1621      { find=a;    find_top=1; }
    16031622      else if (abs(x2-mx)<2 && abs(y2-my)<2)
    1604       { find=a; find_top=0; }
    1605     } 
     1623      { find=a;    find_top=0; }
     1624    }
    16061625
    16071626    time_marker now;
     
    16091628    last_area_click.get_time();
    16101629    if (find && current_area && dc)
    1611     {         
     1630    {
    16121631      if (area_win) close_area_win(0);
    1613       int wl=WINDOW_FRAME_LEFT;
    1614       int wh=WINDOW_FRAME_TOP,th=wm->font()->height()+12,bw=cash.img(dev_ok)->width()+10;
     1632      int wl=0,wh=0,th=wm->font()->height()+12,bw=cash.img(dev_ok)->width()+10;
    16151633      area_win=wm->new_window(prop->getd("area_box x",0),
    1616                               prop->getd("area_box y",0),
    1617                               -1,-1,
    1618 
    1619                               new button(wl+bw*0,wh-8,DEV_AREA_OK,cash.img(dev_ok),
    1620                               new button(wl+bw*1,wh-8,DEV_AREA_DELETE,cash.img(dev_del),
    1621 
    1622                               new text_field(wl,wh+th*1,DEV_AREA_AMBIENT,         symbol_str("a_ambient"),"******",current_area->ambient,
     1634                  prop->getd("area_box y",0),
     1635                  -1,-1,
     1636
     1637                  new button(wl+bw*0,wh-8,DEV_AREA_OK,cash.img(dev_ok),
     1638                  new button(wl+bw*1,wh-8,DEV_AREA_DELETE,cash.img(dev_del),
     1639
     1640                  new text_field(wl,wh+th*1,DEV_AREA_AMBIENT,         symbol_str("a_ambient"),"******",current_area->ambient,
    16231641                              new text_field(wl,wh+th*2,DEV_AREA_AMBIENT_SPEED,   symbol_str("a_aspeed"),"******",current_area->ambient_speed,
    16241642                              new text_field(wl,wh+th*3,DEV_AREA_VIEW_XOFF,       symbol_str("a_view_xoff"),"******",current_area->view_xoff,
     
    16261644                              new text_field(wl,wh+th*5,DEV_AREA_VIEW_XOFF_SPEED, symbol_str("a_view_xspd"),"******",current_area->view_xoff_speed,
    16271645                              new text_field(wl,wh+th*6,DEV_AREA_VIEW_YOFF_SPEED, symbol_str("a_view_yspd"),"******",current_area->view_yoff_speed,
    1628                                              NULL)))))))));
     1646                         NULL)))))))));
    16291647    } else if (find)
    16301648    {
     
    16511669    prop->setd("oedit y",oedit->y);
    16521670    wm->close_window(oedit);
    1653     oedit=NULL;     
     1671    oedit=NULL;
    16541672    edit_object=NULL;
    16551673  }
     
    16781696  {
    16791697    dlastx=last_demo_mx;
    1680     dlasty=last_demo_my;   
     1698    dlasty=last_demo_my;
    16811699  }
    16821700  if (dev_console && dev_console->handle_event(ev))
     
    17011719      sshot_fcount=0;
    17021720      the_game->show_help(symbol_str("seqs_on"));
    1703     }   
     1721    }
    17041722  }
    17051723
     
    17091727    {
    17101728      if (!ev.mouse_button)
    1711         state=DEV_SELECT;   
     1729        state=DEV_SELECT;
    17121730    } break;
    17131731
    17141732    case DEV_CREATE_OBJECT :
    17151733    {
    1716       if (!ev.mouse_button)   
     1734      if (!ev.mouse_button)
    17171735        state=DEV_MOVE_OBJECT;
    17181736    } break;
     
    17251743      else
    17261744      {
    1727         if (ev.type==EV_MOUSE_MOVE)
    1728         {
    1729           the_game->mouse_to_game(last_demo_mx,last_demo_my,edit_object->x,edit_object->y);     
    1730           edit_object->x=snap_x(edit_object->x);
    1731           edit_object->y=snap_y(edit_object->y);
    1732           the_game->need_refresh();
    1733         }
    1734         else if (ev.mouse_button==1 && ev.window==NULL)
    1735         {
    1736           state=DEV_MOUSE_RELEASE;
    1737           selected_object=edit_object=NULL;     
    1738         }
    1739         if (ev.window==NULL && ev.type==EV_KEY && ev.key=='d')
    1740         {
    1741           int32_t xv=0,yv=100;
    1742           edit_object->try_move(edit_object->x,edit_object->y,xv,yv,1);
    1743           edit_object->y+=yv;
    1744           state=DEV_SELECT;
    1745           selected_object=edit_object=NULL;     
    1746         }
    1747       }
    1748     } break;
    1749    
    1750 
    1751     case DEV_MOVE_LIGHT :   
     1745    if (ev.type==EV_MOUSE_MOVE)
     1746    {
     1747      the_game->mouse_to_game(last_demo_mx,last_demo_my,edit_object->x,edit_object->y);
     1748      edit_object->x=snap_x(edit_object->x);
     1749      edit_object->y=snap_y(edit_object->y);
     1750      the_game->need_refresh();
     1751    }
     1752    else if (ev.mouse_button==1 && ev.window==NULL)
     1753    {
     1754      state=DEV_MOUSE_RELEASE;
     1755      selected_object=edit_object=NULL;
     1756    }
     1757    if (ev.window==NULL && ev.type==EV_KEY && ev.key=='d')
     1758    {
     1759      int32_t xv=0,yv=100;
     1760      edit_object->try_move(edit_object->x,edit_object->y,xv,yv,1);
     1761      edit_object->y+=yv;
     1762      state=DEV_SELECT;
     1763      selected_object=edit_object=NULL;
     1764    }
     1765      }
     1766    } break;
     1767
     1768
     1769    case DEV_MOVE_LIGHT :
    17521770    {
    17531771      if (edit_light)
    17541772      {
    1755         if (ev.type==EV_MOUSE_MOVE)
    1756         {
    1757           the_game->mouse_to_game(last_demo_mx,last_demo_my,edit_light->x,edit_light->y);
    1758           edit_light->x=snap_x(edit_light->x);
    1759           edit_light->y=snap_y(edit_light->y);
    1760 
    1761           edit_light->calc_range();
    1762           the_game->need_refresh();
    1763         } else if (ev.type==EV_KEY)
    1764         {
    1765           int rd=0;
    1766           switch (ev.key)
    1767           {
    1768             case '+' :
    1769             {
    1770               if (edit_light->type==9)
    1771               {
    1772                 if (edit_light->inner_radius<64)
    1773                 { edit_light->inner_radius++; rd=1; }
    1774               } else { edit_light->outer_radius++; rd=1; }
    1775             } break;
    1776             case '-' :
    1777             {
    1778               if (edit_light->type==9)
    1779               {
    1780                 if (edit_light->inner_radius>0)
    1781                 { edit_light->inner_radius--; rd=1; }
    1782               } else if (edit_light->outer_radius>edit_light->inner_radius+1)
    1783               { edit_light->outer_radius--; rd=1; }
    1784             } break;
    1785             case JK_RIGHT :
    1786             {
    1787               if (edit_light->type==9)
    1788               { edit_light->xshift++; rd=1; }
    1789               else if (edit_light->xshift>0)
    1790               { edit_light->xshift--; rd=1; }
    1791             } break;
    1792             case JK_LEFT :
    1793             {
    1794               if (edit_light->type==9)
    1795               {
    1796                 if (edit_light->xshift>1)
    1797                 { edit_light->xshift--; rd=1; }
    1798               }
    1799               else
    1800               { edit_light->xshift++; rd=1; }
    1801             } break;
    1802             case JK_UP :
    1803             {
    1804               if (edit_light->type==9)
    1805               { edit_light->yshift++; rd=1; }
    1806               else if (edit_light->yshift>0)
    1807               { edit_light->yshift--; rd=1; }
    1808             } break;
    1809             case JK_DOWN :
    1810             {
    1811               if (edit_light->type==9)
    1812               {
    1813                 if (edit_light->yshift>1)
    1814                 { edit_light->yshift--; rd=1; }
    1815               }
    1816               else
    1817               { edit_light->yshift++; rd=1; }
    1818             } break;
    1819            
    1820           }       
    1821           if (rd)
    1822           {
    1823             edit_light->calc_range();
    1824             the_game->need_refresh();
    1825           }
    1826 
    1827         }
     1773    if (ev.type==EV_MOUSE_MOVE)
     1774    {
     1775      the_game->mouse_to_game(last_demo_mx,last_demo_my,edit_light->x,edit_light->y);
     1776      edit_light->x=snap_x(edit_light->x);
     1777      edit_light->y=snap_y(edit_light->y);
     1778
     1779      edit_light->calc_range();
     1780      the_game->need_refresh();
     1781    } else if (ev.type==EV_KEY)
     1782    {
     1783      int rd=0;
     1784      switch (ev.key)
     1785      {
     1786        case '+' :
     1787        {
     1788          if (edit_light->type==9)
     1789          {
     1790        if (edit_light->inner_radius<64)
     1791        { edit_light->inner_radius++; rd=1; }
     1792          } else { edit_light->outer_radius++; rd=1; }
     1793        } break;
     1794        case '-' :
     1795        {
     1796          if (edit_light->type==9)
     1797          {
     1798        if (edit_light->inner_radius>0)
     1799        { edit_light->inner_radius--; rd=1; }
     1800          } else if (edit_light->outer_radius>edit_light->inner_radius+1)
     1801          { edit_light->outer_radius--; rd=1; }
     1802        } break;
     1803        case JK_RIGHT :
     1804        {
     1805          if (edit_light->type==9)
     1806          { edit_light->xshift++; rd=1; }
     1807          else if (edit_light->xshift>0)
     1808          { edit_light->xshift--; rd=1; }
     1809        } break;
     1810        case JK_LEFT :
     1811        {
     1812          if (edit_light->type==9)
     1813          {
     1814        if (edit_light->xshift>1)
     1815        { edit_light->xshift--; rd=1; }
     1816          }
     1817          else
     1818          { edit_light->xshift++; rd=1; }
     1819        } break;
     1820        case JK_UP :
     1821        {
     1822          if (edit_light->type==9)
     1823          { edit_light->yshift++; rd=1; }
     1824          else if (edit_light->yshift>0)
     1825          { edit_light->yshift--; rd=1; }
     1826        } break;
     1827        case JK_DOWN :
     1828        {
     1829          if (edit_light->type==9)
     1830          {
     1831        if (edit_light->yshift>1)
     1832        { edit_light->yshift--; rd=1; }
     1833          }
     1834          else
     1835          { edit_light->yshift++; rd=1; }
     1836        } break;
     1837
     1838      }
     1839      if (rd)
     1840      {
     1841        edit_light->calc_range();
     1842        the_game->need_refresh();
     1843      }
     1844
     1845    }
    18281846      }
    18291847
     
    18371855      if (current_area)
    18381856      {
    1839         int32_t gx,gy;
    1840         the_game->mouse_to_game(last_demo_mx,last_demo_my,gx,gy);
    1841         if (gx>current_area->x && gy>current_area->y)
    1842         {       
    1843           if (gx-current_area->x!=current_area->w || gy-current_area->y!=current_area->h)
    1844           {
    1845             the_game->need_refresh();
    1846             current_area->w=gx-current_area->x;
    1847             current_area->h=gy-current_area->y;   
    1848           }
    1849         }
    1850         if (ev.type==EV_MOUSE_BUTTON && !ev.mouse_button)
    1851         {
    1852           current_area->active=0;
    1853           state=DEV_SELECT;
    1854         }
     1857    int32_t gx,gy;
     1858    the_game->mouse_to_game(last_demo_mx,last_demo_my,gx,gy);
     1859    if (gx>current_area->x && gy>current_area->y)
     1860    {
     1861      if (gx-current_area->x!=current_area->w || gy-current_area->y!=current_area->h)
     1862      {
     1863        the_game->need_refresh();
     1864        current_area->w=gx-current_area->x;
     1865        current_area->h=gy-current_area->y;
     1866      }
     1867    }
     1868    if (ev.type==EV_MOUSE_BUTTON && !ev.mouse_button)
     1869    {
     1870      current_area->active=0;
     1871      state=DEV_SELECT;
     1872    }
    18551873      }
    18561874    } break;
     
    18601878      if (current_area)
    18611879      {
    1862         int32_t gx,gy;
    1863         the_game->mouse_to_game(last_demo_mx,last_demo_my,gx,gy);
    1864         if (gx<current_area->x+current_area->w && gy<current_area->y+current_area->h)
    1865         {       
    1866           if (gx!=current_area->x || gy!=current_area->y)
    1867           {
    1868             the_game->need_refresh();
    1869             current_area->x=gx;
    1870             current_area->y=gy;
    1871           }
    1872         }
    1873         if (ev.type==EV_MOUSE_BUTTON && !ev.mouse_button)
    1874         {
    1875           current_area->active=0;
    1876           state=DEV_SELECT;
    1877         }
     1880    int32_t gx,gy;
     1881    the_game->mouse_to_game(last_demo_mx,last_demo_my,gx,gy);
     1882    if (gx<current_area->x+current_area->w && gy<current_area->y+current_area->h)
     1883    {
     1884      if (gx!=current_area->x || gy!=current_area->y)
     1885      {
     1886        the_game->need_refresh();
     1887        current_area->x=gx;
     1888        current_area->y=gy;
     1889      }
     1890    }
     1891    if (ev.type==EV_MOUSE_BUTTON && !ev.mouse_button)
     1892    {
     1893      current_area->active=0;
     1894      state=DEV_SELECT;
     1895    }
    18781896      }
    18791897    } break;
     
    18831901      if (dev&EDIT_MODE)
    18841902      {
    1885         game_object *old=selected_object;     
    1886         selected_object=NULL;
    1887         if (ev.window==NULL)
    1888         {       
    1889           int32_t rx,ry;
    1890           the_game->mouse_to_game(last_demo_mx,last_demo_my,rx,ry);
    1891 
    1892           if (!(dev & MAP_MODE))
    1893           {
    1894             if (dev&DRAW_PEOPLE_LAYER)
     1903    game_object *old=selected_object;
     1904    selected_object=NULL;
     1905    if (ev.window==NULL)
     1906    {
     1907      int32_t rx,ry;
     1908      the_game->mouse_to_game(last_demo_mx,last_demo_my,rx,ry);
     1909
     1910      if (!(dev & MAP_MODE))
     1911      {
     1912        if (dev&DRAW_PEOPLE_LAYER)
    18951913              selected_object=current_level->find_object(rx,ry);
    1896             light_source *old_light=selected_light;
    1897             if (selected_object)
    1898               selected_light=NULL;
    1899             else
    1900               selected_light=find_light(rx,ry);
    1901             if (selected_light!=old_light)
    1902               the_game->need_refresh();           
    1903           } else { selected_light=NULL; }
    1904 
    1905           if (edit_mode==ID_DMODE_DRAW)
    1906           {
    1907             if (ev.mouse_button==1 && !selected_object && !selected_light)
    1908             {
    1909               int32_t xs,ys;
    1910               the_game->ftile_on(last_demo_mx,last_demo_my,xs,ys);
    1911               if (xs>=0 && ys>=0 && xs<current_level->foreground_width() &&
    1912                   ys<current_level->foreground_height())             
    1913               current_level->put_fg(xs,ys,raise_all ? make_above_tile(cur_fg) : cur_fg);
    1914               the_game->need_refresh();
    1915             } else if (ev.mouse_button==1 && !selected_object && !selected_light)
    1916             {
    1917               int32_t xs,ys;
    1918               the_game->btile_on(last_demo_mx,last_demo_my,xs,ys);
    1919               if (xs>=0 && ys>=0 && xs<current_level->background_width() &&
    1920                   ys<current_level->background_height())
    1921               current_level->put_bg(xs,ys,cur_fg);
    1922               the_game->need_refresh();
    1923             }
    1924           } else if (edit_mode==ID_DMODE_AREA)
    1925             area_handle_input(ev);
    1926           else if (edit_mode==ID_DMODE_PICK)
    1927             pick_handle_input(ev);                       
    1928         }
    1929        
    1930         if (old!=selected_object)
    1931         the_game->need_refresh();           
    1932 
    1933 
    1934         if (ev.mouse_button)
    1935         {
    1936           if (selected_object)
    1937           {
    1938             if (edit_object && edit_object!=selected_object)     
    1939               edit_object->add_object(selected_object);
    1940 
    1941             if (oedit)
    1942               close_oedit_window();
    1943              
    1944             int bw=20+6,bh=16+6,wl=WINDOW_FRAME_LEFT,wh=WINDOW_FRAME_TOP;
    1945 
    1946             oedit=wm->new_window(prop->getd("oedit x",0),
    1947                                 prop->getd("oedit y",0),
    1948                                  -1,-1,new button_box(wl,wh,ID_NULL,1,
    1949                 new button(wl+bw*0,wh,DEV_OEDIT_OK,cash.img(dev_ok),
    1950                 new button(wl+bw*1,wh,DEV_OEDIT_MOVE,cash.img(dev_move),
    1951                 new button(wl+bw*2,wh,DEV_OEDIT_FRONT,cash.img(dev_front),
    1952                 new button(wl+bw*3,wh,DEV_OEDIT_BACK,cash.img(dev_back),
    1953                 new button(wl+bw*4,wh,DEV_OEDIT_COPY,cash.img(dev_copy),
    1954                 new button(wl+bw*0,wh+bh*1,DEV_OEDIT_DELETE,cash.img(dev_del),
    1955                            NULL)))))),
    1956                new button(wl+bw*5,wh+bh*0,DEV_OEDIT_AI,cash.img(dev_ai),
    1957 
    1958                new button_box(wl+bw*1,wh+bh*1,DEV_OEDIT_CHAR_BOX,0,
    1959                new button(wl+bw*1,wh+bh*1,DEV_OEDIT_LEFT,cash.img(dev_char_left),
    1960                new button(wl+bw*2,wh+bh*1,DEV_OEDIT_RIGHT,cash.img(dev_char_right),NULL)),
    1961 
    1962                new button(wl+bw*3,wh+bh*1,DEV_OBJECTS_DELETE,cash.img(dev_objects),
    1963                new button(wl+bw*4,wh+bh*1,DEV_LIGHTS_DELETE,cash.img(dev_lights),NULL))))),
    1964                                 symbol_str("l_EDIT"));
    1965 
    1966            
    1967             edit_object=selected_object;       
    1968           } else if (selected_light)
    1969           {
    1970             if (ledit)
    1971             {
    1972               prop->setd("ledit x",ledit->x);
    1973               prop->setd("ledit x",ledit->y);
    1974               wm->close_window(ledit);
    1975             }
    1976             int bw=20+6,bh=16+6,wl=WINDOW_FRAME_LEFT,wh=WINDOW_FRAME_TOP,th=wm->font()->height()+4;
    1977             edit_light=selected_light;
    1978             if (edit_object)
    1979             {
    1980               edit_object->add_light(edit_light);
    1981               edit_light->known=1;
    1982             }
    1983             ledit=wm->new_window(prop->getd("ledit x",0),
    1984                                 prop->getd("ledit y",0),
    1985                                 -1,-1,
    1986                          new button_box(wl,wh,ID_NULL,1,
    1987                         new button(wl+bw*0,wh,DEV_LEDIT_OK,cash.img(dev_ok),
    1988                        new button(wl+bw*1,wh,DEV_LEDIT_MOVE,cash.img(dev_move),
    1989                      new button(wl+bw*2,wh,DEV_LEDIT_COPY,cash.img(dev_copy),
    1990                     new button(wl+bw*3,wh,DEV_LEDIT_DEL,cash.img(dev_del),NULL)))),
    1991                     new text_field(wl,wh+bh,DEV_LEDIT_W,      "W ","******",edit_light->xshift,
    1992                     new text_field(wl,wh+bh+th*1,DEV_LEDIT_H, "H ","******",edit_light->yshift,
    1993               new text_field(wl,wh+bh+th*2,DEV_LEDIT_R1,"R1","******",(int)(edit_light->inner_radius),
    1994              new text_field(wl,wh+bh+th*3,DEV_LEDIT_R2,"R2","******",(int)(edit_light->outer_radius),
    1995                                NULL))))));
    1996           }
    1997           else if (ev.window==NULL)
    1998           {
    1999             if (dlastx>=0 && dlasty>=0 && edit_mode==ID_DMODE_DRAW)
    2000             {
    2001               if ((dev & DRAW_FG_LAYER) && ev.mouse_button==1)
    2002               {
    2003                 the_game->ftile_on(last_demo_mx,last_demo_my,x,y);
    2004                 if (x>=0 && y>=0 && x<current_level->foreground_width() &&
    2005                     y<current_level->foreground_height())
    2006                 the_game->put_fg(x,y,raise_all ? make_above_tile(cur_fg) : cur_fg);
    2007               }       
    2008               if ((dev & DRAW_BG_LAYER) && ev.mouse_button==2)
    2009               {   
    2010                 the_game->btile_on(last_demo_mx,last_demo_my,x,y);
    2011                 if (x>=0 && y>=0 && x<current_level->background_width() &&
    2012                     y<current_level->background_height())
    2013                 the_game->put_bg(x,y,cur_bg);
    2014               }
    2015             }
    2016           }
    2017         }
     1914        light_source *old_light=selected_light;
     1915        if (selected_object)
     1916          selected_light=NULL;
     1917        else
     1918          selected_light=find_light(rx,ry);
     1919        if (selected_light!=old_light)
     1920          the_game->need_refresh();
     1921      } else { selected_light=NULL; }
     1922
     1923      if (edit_mode==ID_DMODE_DRAW)
     1924      {
     1925        if (ev.mouse_button==1 && !selected_object && !selected_light)
     1926        {
     1927          int32_t xs,ys;
     1928          the_game->ftile_on(last_demo_mx,last_demo_my,xs,ys);
     1929          if (xs>=0 && ys>=0 && xs<current_level->foreground_width() &&
     1930          ys<current_level->foreground_height())
     1931          current_level->put_fg(xs,ys,raise_all ? make_above_tile(cur_fg) : cur_fg);
     1932          the_game->need_refresh();
     1933        } else if (ev.mouse_button==1 && !selected_object && !selected_light)
     1934        {
     1935          int32_t xs,ys;
     1936          the_game->btile_on(last_demo_mx,last_demo_my,xs,ys);
     1937          if (xs>=0 && ys>=0 && xs<current_level->background_width() &&
     1938          ys<current_level->background_height())
     1939          current_level->put_bg(xs,ys,cur_fg);
     1940          the_game->need_refresh();
     1941        }
     1942      } else if (edit_mode==ID_DMODE_AREA)
     1943        area_handle_input(ev);
     1944      else if (edit_mode==ID_DMODE_PICK)
     1945        pick_handle_input(ev);
     1946    }
     1947
     1948    if (old!=selected_object)
     1949        the_game->need_refresh();
     1950
     1951
     1952    if (ev.mouse_button)
     1953    {
     1954      if (selected_object)
     1955      {
     1956        if (edit_object && edit_object!=selected_object)
     1957             edit_object->add_object(selected_object);
     1958
     1959        if (oedit)
     1960          close_oedit_window();
     1961
     1962        int bw=20+6,bh=16+6;
     1963
     1964        oedit=wm->new_window(prop->getd("oedit x",0),
     1965                prop->getd("oedit y",0),
     1966                 -1,-1,new button_box(0,0,ID_NULL,1,
     1967        new button(bw*0,0,DEV_OEDIT_OK,cash.img(dev_ok),
     1968        new button(bw*1,0,DEV_OEDIT_MOVE,cash.img(dev_move),
     1969        new button(bw*2,0,DEV_OEDIT_FRONT,cash.img(dev_front),
     1970            new button(bw*3,0,DEV_OEDIT_BACK,cash.img(dev_back),
     1971            new button(bw*4,0,DEV_OEDIT_COPY,cash.img(dev_copy),
     1972        new button(bw*0,bh*1,DEV_OEDIT_DELETE,cash.img(dev_del),
     1973               NULL)))))),
     1974           new button(bw*5,bh*0,DEV_OEDIT_AI,cash.img(dev_ai),
     1975
     1976           new button_box(bw*1,bh*1,DEV_OEDIT_CHAR_BOX,0,
     1977           new button(bw*1,bh*1,DEV_OEDIT_LEFT,cash.img(dev_char_left),
     1978           new button(bw*2,bh*1,DEV_OEDIT_RIGHT,cash.img(dev_char_right),NULL)),
     1979
     1980           new button(bw*3,bh*1,DEV_OBJECTS_DELETE,cash.img(dev_objects),
     1981           new button(bw*4,bh*1,DEV_LIGHTS_DELETE,cash.img(dev_lights),NULL))))),
     1982                symbol_str("l_EDIT"));
     1983
     1984
     1985        edit_object=selected_object;
     1986      } else if (selected_light)
     1987      {
     1988        if (ledit)
     1989        {
     1990          prop->setd("ledit x",ledit->x);
     1991          prop->setd("ledit x",ledit->y);
     1992          wm->close_window(ledit);
     1993        }
     1994        int bw=20+6,bh=16+6,th=wm->font()->height()+4;
     1995        edit_light=selected_light;
     1996        if (edit_object)
     1997        {
     1998          edit_object->add_light(edit_light);
     1999          edit_light->known=1;
     2000        }
     2001        ledit=wm->new_window(prop->getd("ledit x",0),
     2002                prop->getd("ledit y",0),
     2003                -1,-1,
     2004              new button_box(0,0,ID_NULL,1,
     2005                   new button(bw*0,0,DEV_LEDIT_OK,cash.img(dev_ok),
     2006               new button(bw*1,0,DEV_LEDIT_MOVE,cash.img(dev_move),
     2007                  new button(bw*2,0,DEV_LEDIT_COPY,cash.img(dev_copy),
     2008            new button(bw*3,0,DEV_LEDIT_DEL,cash.img(dev_del),NULL)))),
     2009            new text_field(0,bh,DEV_LEDIT_W,      "W ","******",edit_light->xshift,
     2010            new text_field(0,bh+th*1,DEV_LEDIT_H, "H ","******",edit_light->yshift,
     2011          new text_field(0,bh+th*2,DEV_LEDIT_R1,"R1","******",(int)(edit_light->inner_radius),
     2012         new text_field(0,bh+th*3,DEV_LEDIT_R2,"R2","******",(int)(edit_light->outer_radius),
     2013                   NULL))))));
     2014      }
     2015      else if (ev.window==NULL)
     2016      {
     2017        if (dlastx>=0 && dlasty>=0 && edit_mode==ID_DMODE_DRAW)
     2018        {
     2019          if ((dev & DRAW_FG_LAYER) && ev.mouse_button==1)
     2020          {
     2021        the_game->ftile_on(last_demo_mx,last_demo_my,x,y);
     2022        if (x>=0 && y>=0 && x<current_level->foreground_width() &&
     2023            y<current_level->foreground_height())
     2024        the_game->put_fg(x,y,raise_all ? make_above_tile(cur_fg) : cur_fg);
     2025          }
     2026          if ((dev & DRAW_BG_LAYER) && ev.mouse_button==2)
     2027          {
     2028        the_game->btile_on(last_demo_mx,last_demo_my,x,y);
     2029        if (x>=0 && y>=0 && x<current_level->background_width() &&
     2030            y<current_level->background_height())
     2031        the_game->put_bg(x,y,cur_bg);
     2032          }
     2033        }
     2034      }
     2035    }
    20182036      }
    20192037    }
     
    20272045    {
    20282046      switch (ev.message.id)
    2029       { 
    2030         case ID_DMODE_DRAW :
    2031         case ID_DMODE_PICK :
    2032         case ID_DMODE_FILL :
    2033         case ID_DMODE_LINE :
    2034         case ID_DMODE_RECT :
    2035         case ID_DMODE_BAR  :
    2036         case ID_DMODE_AREA :
    2037         {
    2038           edit_mode=ev.message.id;
    2039         } break;
    2040 /*      case ID_ENLARGE_RENDER :
    2041         {
    2042           if (!small_render)
    2043             double_render();
    2044           else   
    2045             single_render();
    2046          
    2047           view_shift_disabled=!view_shift_disabled;
    2048         } break; */
    2049 
    2050         case ID_SEARCH :
    2051         {
    2052           toggle_search_window();
    2053         } break;
    2054         case ID_SEARCH_FOREWARD :
    2055         { search_forward();
    2056         } break;
    2057         case ID_SEARCH_BACKWARD :
    2058         { search_forward();
    2059         } break;
    2060         case ID_CANCEL :
    2061         {
    2062           if (mess_win)
    2063           {
    2064             wm->close_window(mess_win);
    2065             mess_win=NULL;
    2066           } break;
    2067         } break;
    2068         case ID_LEVEL_LOAD :
    2069         {       
    2070           if (!mess_win)
    2071           {
    2072             mess_win=file_dialog(symbol_str("level_name"),current_level ? current_level->name() : "",
    2073                                 ID_LEVEL_LOAD_OK,symbol_str("ok_button"),ID_CANCEL,symbol_str("cancel_button"),
    2074                                 symbol_str("FILENAME"),ID_MESS_STR1);
    2075             wm->grab_focus(mess_win);
    2076           }
    2077         } break;
    2078         case ID_LEVEL_LOAD_OK :
    2079         {
    2080           char cmd[100];
    2081           sprintf(cmd,"load %s",mess_win->read(ID_MESS_STR1));
    2082           dev_cont->do_command(cmd,ev);
    2083           wm->push_event(new event(ID_CANCEL,NULL));        // close window
    2084         } break;       
    2085         case ID_GAME_SAVE :
    2086         {
    2087           current_level->save("savegame.spe",1);
    2088           the_game->show_help(symbol_str("saved_game"));
    2089           the_game->need_refresh();       
    2090         } break;
    2091         case ID_LEVEL_SAVE :
    2092         { if (current_level)
    2093           {
    2094             if (current_level->save(current_level->name(),0))
    2095             {
    2096               char msg[100];
    2097               sprintf(msg,symbol_str("saved_level"),current_level->name());
    2098               the_game->show_help(msg);
    2099               the_game->need_refresh();
    2100             }
    2101           }
    2102           else the_game->show_help("no current level, cannot save");
    2103         } break;
    2104         case ID_LEVEL_SAVEAS :
    2105         {
    2106           if (!mess_win)
    2107           {
    2108             mess_win=file_dialog(symbol_str("saveas_name"),current_level ? current_level->name() : "untitled.spe",
    2109                                ID_LEVEL_SAVEAS_OK,symbol_str("ok_button"),
    2110                                 ID_CANCEL,symbol_str("cancel_button"),
    2111                                 symbol_str("FILENAME"),ID_MESS_STR1);
    2112             wm->grab_focus(mess_win);
    2113           }
    2114         } break;
    2115         case ID_LEVEL_SAVEAS_OK :
    2116         {
    2117           if (current_level)
    2118           {
    2119             current_level->set_name(mess_win->read(ID_MESS_STR1));
    2120             wm->push_event(new event(ID_CANCEL,NULL));        // close window after save
    2121             wm->push_event(new event(ID_LEVEL_SAVE,NULL));         
    2122           }
    2123         } break;
    2124         case ID_EDIT_SAVE :
    2125         {
    2126           do_command("esave",ev);
    2127           the_game->show_help(symbol_str("edit_saved"));
    2128         } break;
    2129         case ID_CACHE_PROFILE :
    2130         {
    2131           if (current_level && !cash.prof_is_on())
    2132           {
    2133             cash.prof_init();
    2134             the_game->show_help("Cache profiling is now on.");
    2135           }
    2136           else the_game->show_help("Cache profiling is already on!");
    2137         } break;
    2138 
    2139         case ID_CACHE_PROFILE_END :  // ask the user for a file name to save as
    2140         {
    2141           if (cash.prof_is_on())
    2142           {
    2143             cash.prof_uninit();
    2144             the_game->show_help(symbol_str("prof_off"));
    2145           } else the_game->show_help(symbol_str("prof"));
    2146         } break;
    2147 
    2148         case ID_LEVEL_NEW :
    2149         {
    2150           if (!mess_win)
    2151           {
    2152             mess_win=wm->new_window(xres/2,yres/2,-1,-1,
    2153                        new button(WINDOW_FRAME_LEFT+10,WINDOW_FRAME_TOP+20,ID_LEVEL_NEW_OK,symbol_str("YES"),
    2154                        new button(WINDOW_FRAME_LEFT+40,WINDOW_FRAME_TOP+20,ID_CANCEL,symbol_str("NO"),
    2155               new info_field(WINDOW_FRAME_LEFT,WINDOW_FRAME_TOP,ID_NULL,symbol_str("sure?"),NULL))),symbol_str("New?"));
    2156             wm->grab_focus(mess_win);
    2157           }
    2158         } break;
    2159         case ID_LEVEL_NEW_OK :
    2160         {
    2161           wm->push_event(new event(ID_CANCEL,NULL));  // close_window
    2162           if (current_level)     
    2163             delete current_level;       
    2164           current_level=new level(100,100,"untitled.spe");
    2165         } break;
    2166         case ID_LEVEL_RESIZE :
    2167         {
    2168           if (!mess_win)
    2169           {
    2170             int wl=WINDOW_FRAME_LEFT,wt=WINDOW_FRAME_TOP,h=wm->font()->height()+8;
    2171             mess_win=wm->new_window(xres/2,yres/2,-1,-1,
    2172                     new text_field(wl,wt+h*0,ID_MESS_STR1,symbol_str("width_"),"****",
    2173                                current_level ? current_level->foreground_width() : 100,
    2174                     new text_field(wl,wt+h*1,ID_MESS_STR2,symbol_str("height_"),"****",
    2175                                current_level ? current_level->foreground_height() : 100,
    2176                                    new button(wl+10,wt+h*4,ID_LEVEL_RESIZE_OK,symbol_str("ok_button"),
    2177                                    new button(wt+40,wt+h*4,ID_CANCEL,symbol_str("cancel_button"),NULL)))),symbol_str("_scroll"));
    2178           }
    2179         } break;
    2180         case ID_LEVEL_RESIZE_OK :
    2181         {
    2182           if (current_level)
    2183           {
    2184             current_level->set_size(atoi(mess_win->read(ID_MESS_STR1)),
    2185                                     atoi(mess_win->read(ID_MESS_STR2)));
    2186           } else the_game->show_help("Create a level first!");
    2187           wm->push_event(new event(ID_CANCEL,NULL));  // close_window
    2188         } break;
    2189 
    2190         case ID_SUSPEND :
    2191         {
    2192           dev^=SUSPEND_MODE;
    2193           if (dev&SUSPEND_MODE)
    2194             the_game->show_help(symbol_str("suspend_on"));
    2195           else
    2196              the_game->show_help(symbol_str("suspend_off"));
    2197         } break;
    2198         case ID_PLAY_MODE :
    2199         {
    2200           dev^=EDIT_MODE;
    2201         } break;
    2202         case ID_QUIT :
    2203         {
    2204           if (confirm_quit())
    2205             do_command("quit",ev);
    2206         } ;
    2207         case ID_TOGGLE_MAP :
    2208         {
    2209           if (dev&MAP_MODE) dev-=MAP_MODE;
    2210           else dev|=MAP_MODE;
    2211           the_game->need_refresh();     
    2212         } break;
    2213         case ID_TOGGLE_LIGHT :
    2214         {
    2215           dev^=DRAW_LIGHTS;
    2216           the_game->need_refresh();
    2217         } break;
    2218         case ID_RECORD_DEMO :
    2219         {
    2220           if (!mess_win)
    2221           {
    2222             int wl=WINDOW_FRAME_LEFT,wt=WINDOW_FRAME_TOP,h=wm->font()->height()+8;
    2223             mess_win=wm->new_window(xres/2,yres/2,-1,-1,
    2224                     new text_field(wl,wt+h*0,ID_RECORD_DEMO_FILENAME,
    2225                                    "demo filename","*******************",
    2226                                    "demo.dat",
    2227                                    new button(wl+10,wt+h*2,ID_RECORD_DEMO_OK,symbol_str("ok_button"),
    2228                                    new button(wt+40,wt+h*2,ID_CANCEL,symbol_str("cancel_button"),NULL))));
    2229           }
    2230         } break;
     2047      {
     2048    case ID_DMODE_DRAW :
     2049    case ID_DMODE_PICK :
     2050    case ID_DMODE_FILL :
     2051    case ID_DMODE_LINE :
     2052    case ID_DMODE_RECT :
     2053    case ID_DMODE_BAR  :
     2054    case ID_DMODE_AREA :
     2055    {
     2056      edit_mode=ev.message.id;
     2057    } break;
     2058/*    case ID_ENLARGE_RENDER :
     2059    {
     2060      if (!small_render)
     2061        double_render();
     2062      else
     2063        single_render();
     2064
     2065      view_shift_disabled=!view_shift_disabled;
     2066    } break; */
     2067
     2068    case ID_SEARCH :
     2069    {
     2070      toggle_search_window();
     2071    } break;
     2072    case ID_SEARCH_FOREWARD :
     2073    { search_forward();
     2074    } break;
     2075    case ID_SEARCH_BACKWARD :
     2076    { search_forward();
     2077    } break;
     2078    case ID_CANCEL :
     2079    {
     2080      if (mess_win)
     2081      {
     2082        wm->close_window(mess_win);
     2083        mess_win=NULL;
     2084      } break;
     2085    } break;
     2086    case ID_LEVEL_LOAD :
     2087    {
     2088      if (!mess_win)
     2089      {
     2090        mess_win=file_dialog(symbol_str("level_name"),current_level ? current_level->name() : "",
     2091                ID_LEVEL_LOAD_OK,symbol_str("ok_button"),ID_CANCEL,symbol_str("cancel_button"),
     2092                symbol_str("FILENAME"),ID_MESS_STR1);
     2093        wm->grab_focus(mess_win);
     2094      }
     2095    } break;
     2096    case ID_LEVEL_LOAD_OK :
     2097    {
     2098      char cmd[100];
     2099      sprintf(cmd,"load %s",mess_win->read(ID_MESS_STR1));
     2100      dev_cont->do_command(cmd,ev);
     2101      wm->push_event(new event(ID_CANCEL,NULL));        // close window
     2102    } break;
     2103    case ID_GAME_SAVE :
     2104    {
     2105      current_level->save("savegame.spe",1);
     2106      the_game->show_help(symbol_str("saved_game"));
     2107      the_game->need_refresh();
     2108    } break;
     2109    case ID_LEVEL_SAVE :
     2110    { if (current_level)
     2111      {
     2112        if (current_level->save(current_level->name(),0))
     2113        {
     2114          char msg[100];
     2115          sprintf(msg,symbol_str("saved_level"),current_level->name());
     2116          the_game->show_help(msg);
     2117          the_game->need_refresh();
     2118        }
     2119      }
     2120      else the_game->show_help("no current level, cannot save");
     2121    } break;
     2122    case ID_LEVEL_SAVEAS :
     2123    {
     2124      if (!mess_win)
     2125      {
     2126        mess_win=file_dialog(symbol_str("saveas_name"),current_level ? current_level->name() : "untitled.spe",
     2127                   ID_LEVEL_SAVEAS_OK,symbol_str("ok_button"),
     2128                ID_CANCEL,symbol_str("cancel_button"),
     2129                symbol_str("FILENAME"),ID_MESS_STR1);
     2130        wm->grab_focus(mess_win);
     2131      }
     2132    } break;
     2133    case ID_LEVEL_SAVEAS_OK :
     2134    {
     2135      if (current_level)
     2136      {
     2137        current_level->set_name(mess_win->read(ID_MESS_STR1));
     2138        wm->push_event(new event(ID_CANCEL,NULL));        // close window after save
     2139        wm->push_event(new event(ID_LEVEL_SAVE,NULL));
     2140      }
     2141    } break;
     2142    case ID_EDIT_SAVE :
     2143    {
     2144      do_command("esave",ev);
     2145      the_game->show_help(symbol_str("edit_saved"));
     2146    } break;
     2147    case ID_CACHE_PROFILE :
     2148    {
     2149      if (current_level && !cash.prof_is_on())
     2150      {
     2151        cash.prof_init();
     2152        the_game->show_help("Cache profiling is now on.");
     2153      }
     2154      else the_game->show_help("Cache profiling is already on!");
     2155    } break;
     2156
     2157    case ID_CACHE_PROFILE_END :  // ask the user for a file name to save as
     2158    {
     2159      if (cash.prof_is_on())
     2160      {
     2161        cash.prof_uninit();
     2162        the_game->show_help(symbol_str("prof_off"));
     2163      } else the_game->show_help(symbol_str("prof"));
     2164    } break;
     2165
     2166    case ID_LEVEL_NEW :
     2167    {
     2168      if (!mess_win)
     2169      {
     2170        mess_win=wm->new_window(xres/2,yres/2,-1,-1,
     2171               new button(10,20,ID_LEVEL_NEW_OK,symbol_str("YES"),
     2172                        new button(40,20,ID_CANCEL,symbol_str("NO"),
     2173          new info_field(0,0,ID_NULL,symbol_str("sure?"),NULL))),symbol_str("New?"));
     2174        wm->grab_focus(mess_win);
     2175      }
     2176    } break;
     2177    case ID_LEVEL_NEW_OK :
     2178    {
     2179      wm->push_event(new event(ID_CANCEL,NULL));  // close_window
     2180      if (current_level)
     2181        delete current_level;
     2182      current_level=new level(100,100,"untitled.spe");
     2183    } break;
     2184    case ID_LEVEL_RESIZE :
     2185    {
     2186      if (!mess_win)
     2187      {
     2188        int h=wm->font()->height()+8;
     2189        mess_win=wm->new_window(xres/2,yres/2,-1,-1,
     2190            new text_field(0,h*0,ID_MESS_STR1,symbol_str("width_"),"****",
     2191                   current_level ? current_level->foreground_width() : 100,
     2192            new text_field(0,h*1,ID_MESS_STR2,symbol_str("height_"),"****",
     2193                   current_level ? current_level->foreground_height() : 100,
     2194                   new button(10,h*4,ID_LEVEL_RESIZE_OK,symbol_str("ok_button"),
     2195                   new button(40,h*4,ID_CANCEL,symbol_str("cancel_button"),NULL)))),symbol_str("_scroll"));
     2196      }
     2197    } break;
     2198    case ID_LEVEL_RESIZE_OK :
     2199    {
     2200      if (current_level)
     2201      {
     2202        current_level->set_size(atoi(mess_win->read(ID_MESS_STR1)),
     2203                    atoi(mess_win->read(ID_MESS_STR2)));
     2204      } else the_game->show_help("Create a level first!");
     2205      wm->push_event(new event(ID_CANCEL,NULL));  // close_window
     2206    } break;
     2207
     2208    case ID_SUSPEND :
     2209    {
     2210      dev^=SUSPEND_MODE;
     2211      if (dev&SUSPEND_MODE)
     2212        the_game->show_help(symbol_str("suspend_on"));
     2213      else
     2214         the_game->show_help(symbol_str("suspend_off"));
     2215    } break;
     2216    case ID_PLAY_MODE :
     2217    {
     2218      dev^=EDIT_MODE;
     2219    } break;
     2220    case ID_QUIT :
     2221    {
     2222      if (confirm_quit())
     2223        do_command("quit",ev);
     2224    } ;
     2225    case ID_TOGGLE_MAP :
     2226    {
     2227      if (dev&MAP_MODE) dev-=MAP_MODE;
     2228      else dev|=MAP_MODE;
     2229      the_game->need_refresh();
     2230    } break;
     2231    case ID_TOGGLE_LIGHT :
     2232    {
     2233      dev^=DRAW_LIGHTS;
     2234      the_game->need_refresh();
     2235    } break;
     2236    case ID_RECORD_DEMO :
     2237    {
     2238      if (!mess_win)
     2239      {
     2240        int h=wm->font()->height()+8;
     2241        mess_win=wm->new_window(xres/2,yres/2,-1,-1,
     2242            new text_field(0,h*0,ID_RECORD_DEMO_FILENAME,
     2243                   "demo filename","*******************",
     2244                   "demo.dat",
     2245                   new button(10,h*2,ID_RECORD_DEMO_OK,symbol_str("ok_button"),
     2246                   new button(40,h*2,ID_CANCEL,symbol_str("cancel_button"),NULL))));
     2247      }
     2248    } break;
    22312249
    22322250        case ID_RECORD_DEMO_OK :
    2233         {
    2234           demo_man.set_state(demo_manager::RECORDING,mess_win->read(ID_RECORD_DEMO_FILENAME));
    2235           wm->push_event(new event(ID_CANCEL,NULL));        // close window       
    2236         } break;
    2237 
    2238         case ID_PLAY_DEMO :
    2239         {
    2240           if (!mess_win)
    2241           {
    2242             int wl=WINDOW_FRAME_LEFT,wt=WINDOW_FRAME_TOP,h=wm->font()->height()+8;
    2243             mess_win=wm->new_window(xres/2,yres/2,-1,-1,
    2244                     new text_field(wl,wt+h*0,ID_PLAY_DEMO_FILENAME,
    2245                                    "demo filename","*******************",
    2246                                    "demo.dat",
    2247                                    new button(wl+10,wt+h*2,ID_PLAY_DEMO_OK,symbol_str("ok_button"),
    2248                                    new button(wt+40,wt+h*2,ID_CANCEL,symbol_str("cancel_button"),NULL))));
    2249           }
    2250         } break;
     2251    {
     2252      demo_man.set_state(demo_manager::RECORDING,mess_win->read(ID_RECORD_DEMO_FILENAME));
     2253      wm->push_event(new event(ID_CANCEL,NULL));        // close window
     2254    } break;
     2255
     2256    case ID_PLAY_DEMO :
     2257    {
     2258      if (!mess_win)
     2259      {
     2260        int h=wm->font()->height()+8;
     2261        mess_win=wm->new_window(xres/2,yres/2,-1,-1,
     2262            new text_field(0,h*0,ID_PLAY_DEMO_FILENAME,
     2263                   "demo filename","*******************",
     2264                   "demo.dat",
     2265                   new button(10,h*2,ID_PLAY_DEMO_OK,symbol_str("ok_button"),
     2266                   new button(40,h*2,ID_CANCEL,symbol_str("cancel_button"),NULL))));
     2267      }
     2268    } break;
    22512269
    22522270        case ID_PLAY_DEMO_OK :
    2253         {
    2254           demo_man.set_state(demo_manager::PLAYING,mess_win->read(ID_PLAY_DEMO_FILENAME));
    2255           wm->close_window(mess_win);
    2256           mess_win=NULL;
    2257         } break;
    2258 
    2259         case ID_SET_SCROLL :
    2260         {
    2261           if (!mess_win)
    2262           {
    2263             int wl=WINDOW_FRAME_LEFT,wt=WINDOW_FRAME_TOP,h=wm->font()->height()+8;
    2264             mess_win=wm->new_window(xres/2,yres/2,-1,-1,
    2265                     new text_field(wl,wt+h*0,ID_MESS_STR1,symbol_str("x_mul"),"****",bg_xmul,
    2266                     new text_field(wl,wt+h*1,ID_MESS_STR2,symbol_str("x_div"),"****",bg_xdiv,
    2267                     new text_field(wl,wt+h*2,ID_MESS_STR3,symbol_str("y_mul"),"****",bg_ymul,
    2268                     new text_field(wl,wt+h*3,ID_MESS_STR4,symbol_str("y_div"),"****",bg_ydiv,
    2269                                    new button(wl+10,wt+h*4,ID_SET_SCROLL_CHECK,symbol_str("ok_button"),
    2270                                    new button(wt+40,wt+h*4,ID_CANCEL,symbol_str("cancel_button"),NULL)))))),symbol_str("_scroll"));
    2271           }
    2272         } break;
    2273         case ID_SET_SCROLL_CHECK :
    2274         {
    2275           int tbg_xmul=atoi(mess_win->read(ID_MESS_STR1));
    2276           int tbg_xdiv=atoi(mess_win->read(ID_MESS_STR2));
    2277           int tbg_ymul=atoi(mess_win->read(ID_MESS_STR3));
    2278           int tbg_ydiv=atoi(mess_win->read(ID_MESS_STR4));
    2279 
    2280           if ( (((float)tbg_xmul/(float)tbg_xdiv) < ((float)bg_xmul/(float)bg_xdiv)) ||
    2281               (((float)tbg_ymul/(float)tbg_ydiv) < ((float)bg_ymul/(float)bg_ydiv)))
    2282           {
    2283             int wl=WINDOW_FRAME_LEFT,wt=WINDOW_FRAME_TOP,h=wm->font()->height()+8;
    2284 
    2285             warn_win=wm->new_window(xres/2-40,yres/2-40,-1,-1,
    2286                               new info_field(wl,wt,ID_NULL,
    2287                                           symbol_str("back_loss"),
    2288                                           new button(wl+10,wt+h*4,ID_SET_SCROLL_OK,symbol_str("ok_button"),
    2289                                           new button(wt+40,wt+h*4,ID_WARN_CANCEL,symbol_str("cancel_button"),NULL))),
    2290                                     symbol_str("WARNING"));
    2291             wm->grab_focus(warn_win);
    2292           } else wm->push_event(new event(ID_SET_SCROLL_OK,NULL));
    2293         } break;
    2294         case ID_WARN_CANCEL :
    2295         {
    2296           wm->close_window(warn_win); warn_win=NULL;
    2297           wm->push_event(new event(ID_CANCEL,NULL));
    2298         } break;
    2299         case ID_SET_SCROLL_OK :
    2300         {
    2301           if (warn_win) { wm->close_window(warn_win); warn_win=NULL; }
    2302           bg_xmul=atoi(mess_win->read(ID_MESS_STR1));
    2303           bg_xdiv=atoi(mess_win->read(ID_MESS_STR2));
    2304           bg_ymul=atoi(mess_win->read(ID_MESS_STR3));
    2305           bg_ydiv=atoi(mess_win->read(ID_MESS_STR4));
    2306           wm->push_event(new event(ID_CANCEL,NULL));        // close window
    2307         } break;
    2308 
    2309         case ID_CENTER_PLAYER :
    2310         {
    2311            do_command("center",ev); break;
    2312         } break;
    2313 
    2314         case ID_INTERPOLATE_DRAW : 
    2315         {
    2316           interpolate_draw=!interpolate_draw;
    2317         } break;
    2318 
    2319         case ID_DISABLE_AUTOLIGHT :
    2320         {
    2321           disable_autolight=!disable_autolight;
    2322         } break;
    2323 
    2324         case ID_ADD_PALETTE :
    2325         {
    2326           if (!mess_win)
    2327           {
    2328             int wl=WINDOW_FRAME_LEFT,wt=WINDOW_FRAME_TOP,h=wm->font()->height()+8;
    2329             mess_win=wm->new_window(xres/2,yres/2,-1,-1,
    2330                     new text_field(wl,wt+h*0,ID_MESS_STR1,symbol_str("ap_width"),"****",2,
    2331                     new text_field(wl,wt+h*1,ID_MESS_STR2,symbol_str("ap_height"),"****",2,
    2332                     new text_field(wl,wt+h*2,ID_MESS_STR3,symbol_str("ap_name"),"***********","pal",
    2333                                    new button(wl+10,wt+h*3,ID_ADD_PALETTE_OK,symbol_str("ok_button"),
    2334                                    new button(wt+40,wt+h*3,ID_CANCEL,symbol_str("cancel_button"),NULL))))),symbol_str("ap_pal"));
    2335           }
    2336         } break;
    2337         case ID_ADD_PALETTE_OK :
    2338         {
    2339           char name[70];
    2340           sprintf(name,"(add_palette \"%s\" %d %d)",mess_win->read(ID_MESS_STR3),
    2341                   atoi(mess_win->read(ID_MESS_STR1)),
    2342                   atoi(mess_win->read(ID_MESS_STR2)));
    2343           char const *s=name;
    2344           eval(compile(s));
    2345           wm->push_event(new event(ID_CANCEL,NULL));        // close window
    2346         } break;
    2347         case ID_TOGGLE_DELAY :
    2348         {
    2349           the_game->toggle_delay(); break;
    2350         } break;
    2351 
    2352         case ID_SMALL_MODE :
    2353         {
    2354           make_screen_size(311,160); break;
    2355         } break;
    2356         case ID_CLEAR_WEAPONS :
    2357         {
    2358           event ev;
    2359           do_command("clear_weapons",ev);
    2360         } break;
    2361         case ID_GOD_MODE :
    2362         {
    2363           for (view *v=player_list;v;v=v->next)
    2364             v->god=!v->god;
    2365         } break;
    2366         case ID_MOUSE_SCROLL :
    2367         {
    2368           mouse_scrolling=!mouse_scrolling;
    2369           prop->setd("mouse_scrolling",mouse_scrolling);
    2370           if (mouse_scrolling)
    2371             the_game->show_help(symbol_str("ms_on"));
    2372           else
    2373             the_game->show_help(symbol_str("ms_off"));
    2374         } break;
    2375 
    2376         case ID_LOCK_PALETTES :
    2377         {
    2378           palettes_locked=!palettes_locked;
    2379           prop->setd("palettes_locked",palettes_locked);
    2380           if (palettes_locked)
    2381             the_game->show_help(symbol_str("pal_lock"));
    2382           else the_game->show_help(symbol_str("pal_unlock"));     
    2383         } break;
    2384 
    2385         case ID_DISABLE_VIEW_SHIFT :
    2386         {
    2387           view_shift_disabled=!view_shift_disabled;
    2388           prop->setd("view_shift_disabled",view_shift_disabled);
    2389           if (view_shift_disabled)
    2390             the_game->show_help(symbol_str("vs_dis"));
    2391           else the_game->show_help(symbol_str("vs_en"));         
    2392         } break;
    2393 
    2394         case ID_WIN_FORE :
    2395         {
    2396           toggle_fgw();
    2397         } break;
    2398         case ID_WIN_BACK :
    2399         {
    2400           toggle_bgw();
    2401         } break;
    2402         case ID_WIN_OBJECTS :
    2403         {
    2404           toggle_omenu();
    2405         } break;
    2406         case ID_WIN_PALETTES :
    2407         {
    2408           toggle_pmenu();
    2409         } break;
    2410         case ID_WIN_LIGHTING :
    2411         {
    2412           toggle_light_window();
    2413         } break;
    2414         case ID_WIN_LAYERS :
    2415         {
    2416           toggle_show_menu();
    2417         } break;
    2418         case ID_WIN_CONSOLE :
    2419         {
    2420           if (dev_console) dev_console->toggle();
    2421         } break;
    2422         case ID_WIN_TOOLBAR :
    2423         {
    2424           toggle_toolbar();
    2425         } break;
    2426 
    2427         case DEV_AMBIENT :
    2428         { if (!ambw) make_ambient(); } break;
    2429         case DEV_AREA_OK :
    2430         { close_area_win(1); } break;
    2431         case DEV_AREA_DELETE :
    2432         { close_area_win(0);
    2433           if (current_area && current_level)
    2434           {
    2435             if (current_level->area_list==current_area)
    2436               current_level->area_list=current_level->area_list->next;
    2437             else
    2438             {
    2439               area_controller *a=current_level->area_list,*l=NULL;
    2440               for (;a!=current_area && a;a=a->next) { l=a; }
    2441               l->next=a->next;
    2442               delete a;
    2443             }
    2444             current_area=NULL;
    2445             the_game->need_refresh();
    2446           }
    2447         } break;
    2448         case DEV_AI_OK :
    2449           close_ai_window(); break;
    2450         case DEV_OEDIT_AI :
    2451           make_ai_window(edit_object); break;
    2452         case DEV_OBJECTS_DELETE :
    2453         {
    2454           if (edit_object)
    2455           {
    2456             for (int i=0;i<edit_object->total_objects();i++)
    2457               edit_object->remove_object(edit_object->get_object(0));
    2458             the_game->need_refresh();       
    2459           }
    2460         } break;
    2461 
    2462         case DEV_LIGHTS_DELETE :
    2463         {
    2464           if (edit_object)
    2465           {
    2466             for (int i=0;i<edit_object->total_lights();i++)
    2467               edit_object->remove_light(edit_object->get_light(0));
    2468             the_game->need_refresh();       
    2469           }
    2470         } break;
    2471 
    2472         case DEV_LEDIT_DEL :
    2473         {
    2474           prop->setd("ledit x",ledit->x);
    2475           prop->setd("ledit y",ledit->y);
    2476           wm->close_window(ledit); ledit=NULL;
    2477           if (current_level)
    2478             current_level->remove_light(edit_light);
    2479           else
    2480             delete_light(edit_light);
    2481           edit_light=NULL;
    2482           the_game->need_refresh();
    2483         } break;
    2484         case DEV_LEDIT_OK :
    2485         {
    2486           edit_light->xshift=atoi(ledit->read(DEV_LEDIT_W));
    2487           edit_light->yshift=atoi(ledit->read(DEV_LEDIT_H));
    2488           edit_light->inner_radius=atoi(ledit->read(DEV_LEDIT_R1));
    2489           edit_light->outer_radius=atoi(ledit->read(DEV_LEDIT_R2));
    2490           if (edit_light->outer_radius<=edit_light->inner_radius)
    2491           {
    2492             edit_light->inner_radius=edit_light->outer_radius-1;
    2493             if (edit_light->inner_radius<1)
    2494             {
    2495               edit_light->inner_radius=1;
    2496               edit_light->outer_radius=2;
    2497             }
    2498           }
    2499 
    2500           edit_light->calc_range();
    2501           edit_light=NULL;
    2502           prop->setd("ledit x",ledit->x);
    2503           prop->setd("ledit y",ledit->y);
    2504           wm->close_window(ledit); ledit=NULL;
    2505           the_game->need_refresh();       
    2506         } break;
    2507         case DEV_LEDIT_MOVE :
    2508         {
    2509           prop->setd("ledit x",ledit->x);
    2510           prop->setd("ledit y",ledit->y);
    2511           wm->close_window(ledit); ledit=NULL;
    2512           state=DEV_MOVE_LIGHT;
    2513         } break;
    2514         case DEV_LEDIT_COPY :
    2515         {
    2516           edit_light=edit_light->copy();
    2517           prop->setd("ledit x",ledit->x);
    2518           prop->setd("ledit y",ledit->y);
    2519           wm->close_window(ledit); ledit=NULL;   
    2520           state=DEV_MOVE_LIGHT;
    2521         } break;
    2522 
    2523 
    2524         case DEV_LIGHT0 :
    2525         case DEV_LIGHT1 :
    2526         case DEV_LIGHT2 :
    2527         case DEV_LIGHT3 :
    2528         case DEV_LIGHT4 :
    2529         case DEV_LIGHT5 :
    2530         case DEV_LIGHT6 :
    2531         case DEV_LIGHT7 :
    2532         case DEV_LIGHT8 :
    2533         case DEV_LIGHT9 :
    2534         {
    2535           int32_t lx,ly;
    2536           the_game->mouse_to_game(last_demo_mx,last_demo_my,lx,ly);
    2537           lx=snap_x(lx);
    2538           ly=snap_y(ly);
    2539           edit_light=add_light_source(ev.message.id-DEV_LIGHT0,lx,ly,
    2540                                        atoi(lightw->read(DEV_LIGHTR1)),
    2541                                        atoi(lightw->read(DEV_LIGHTR2)),
    2542                                        atoi(lightw->read(DEV_LIGHTW)),
    2543                                        atoi(lightw->read(DEV_LIGHTH)));
    2544           state=DEV_MOVE_LIGHT;                               
    2545         } break;
    2546         case ID_RAISE_ALL :
    2547         {
    2548           raise_all=!raise_all;
    2549           prop->setd("raise_all",raise_all);
    2550           if (raise_all)
    2551             the_game->show_help(symbol_str("fg_r"));
    2552           else
    2553             the_game->show_help(symbol_str("fg_l"));
    2554         } break;
    2555         case DEV_OEDIT_COPY :
    2556         {
    2557           game_object *use=copy_object;
    2558           if (!use) use=edit_object;
    2559           if (use)
    2560           {         
    2561             game_object *old=use;
    2562             close_oedit_window();
    2563             if (use->controller())
    2564               the_game->show_help(symbol_str("no_clone"));
    2565             else
    2566             {
    2567               edit_object=old->copy();
    2568 
    2569               current_level->add_object(edit_object);
    2570               the_game->need_refresh();
    2571               state=DEV_MOVE_OBJECT;
    2572 
    2573               close_oedit_window();
    2574               copy_object=NULL;
    2575             }
    2576           }
    2577         } break;
    2578         case DEV_OEDIT_LEFT :
    2579         {
    2580           if (edit_object)
    2581           {
    2582             the_game->need_refresh();
    2583             edit_object->direction=-1;
    2584           }
    2585         } break;
    2586         case DEV_OEDIT_RIGHT :
    2587         {
    2588           if (edit_object)
    2589           {
    2590             the_game->need_refresh();
    2591             edit_object->direction=1;
    2592           }
    2593         } break;
    2594 
    2595 
    2596         case DEV_COMMAND_OK :
    2597         {
    2598           char cmd[100];
    2599           strcpy(cmd,commandw->inm->get(DEV_COMMAND)->read());     
    2600           prop->setd("commandw x",commandw->x);
    2601           prop->setd("commandw y",commandw->y);
    2602           wm->close_window(commandw);
    2603           commandw=NULL;
    2604           do_command(cmd,ev);
    2605         } break;
    2606 
    2607         case ID_SHOW_FPS :
    2608         { fps_on=!fps_on; } break;
    2609         case ID_PROFILE :
    2610         { profile_toggle();
    2611           profile_on=!profile_on;
    2612         } break;
    2613          
    2614         case ID_TOGGLE_NAMES : { show_names=!show_names; } break;
    2615         case DEV_QUIT : the_game->end_session(); break;
    2616         case DEV_EDIT_FG : dev=1; break; //the_game->draw(); break;
    2617         case DEV_EDIT_BG : dev=2; break; //the_game->draw(); break;
    2618         case DEV_EDIT_FGBG : dev=3; break; //the_game->draw(); break;
    2619         case DEV_PLAY : dev=0; break; //the_game->draw(); break;
    2620         case SHOW_FOREGROUND :
    2621         { dev=dev^DRAW_FG_LAYER; the_game->need_refresh(); } break;
    2622         case SHOW_FOREGROUND_BOUND :
    2623         { dev=dev^DRAW_FG_BOUND_LAYER; the_game->need_refresh(); } break;
    2624         case SHOW_BACKGROUND :
    2625         { dev=dev^DRAW_BG_LAYER; the_game->need_refresh(); } break;
    2626         case SHOW_CHARACTERS :
    2627         { dev=dev^DRAW_PEOPLE_LAYER; the_game->need_refresh(); } break;
    2628         case SHOW_LIGHT :
    2629         { dev=dev^DRAW_LIGHTS; the_game->need_refresh(); } break;               
    2630         case SHOW_LINKS :
    2631         { dev=dev^DRAW_LINKS;  the_game->need_refresh(); } break;
    2632          
    2633 
    2634         case DEV_CREATE :
    2635         {         
    2636           int val=get_omenu_item(((pick_list *)ev.message.data)->get_selection());
    2637           char cmd[100];
    2638           sprintf(cmd,"create %s",object_names[val]);
    2639           do_command(cmd,ev);
    2640           state=DEV_CREATE_OBJECT;
    2641           dev|=(EDIT_MODE | DRAW_PEOPLE_LAYER);     
    2642         }             
    2643         break; 
    2644 
    2645         case DEV_PALETTE :
    2646         {
    2647           int val=((pick_list *)ev.message.data)->get_selection();         
    2648           pal_wins[val]->open_window();
    2649         } break;
    2650 
    2651         case DEV_MUSIC_PICKLIST :
    2652         {         
    2653 /*          int *val=((int *)((pick_list *)ev.message.data)->read());
    2654             if (current_song) delete current_song;
    2655             current_song=new song(song_list[*val]);
    2656             current_song->play();           */
    2657         }             
    2658         break;           
    2659 
    2660         case DEV_OEDIT_OK :
    2661         { close_oedit_window(); } break;
    2662          
    2663         case DEV_OEDIT_DELETE :
    2664         {
    2665           selected_object=edit_object;
    2666           do_command("delete",ev);
    2667           close_oedit_window();
    2668         }
    2669         break;
    2670          
    2671         case DEV_OEDIT_FRONT :
    2672         {
    2673           do_command("to_front",ev);
    2674           close_oedit_window();                     
    2675         }
    2676         break;
    2677 
    2678         case DEV_OEDIT_BACK :
    2679         {
    2680           do_command("to_back",ev);
    2681           close_oedit_window();                     
    2682         }
    2683         break;
    2684 
    2685         case DEV_OEDIT_MOVE :       
    2686         {
    2687           game_object *o=edit_object;
    2688           close_oedit_window();
    2689           edit_object=o;
    2690           do_command("move",ev);
    2691         }
    2692         break;   
     2271    {
     2272      demo_man.set_state(demo_manager::PLAYING,mess_win->read(ID_PLAY_DEMO_FILENAME));
     2273      wm->close_window(mess_win);
     2274      mess_win=NULL;
     2275    } break;
     2276
     2277    case ID_SET_SCROLL :
     2278    {
     2279      if (!mess_win)
     2280      {
     2281        int h=wm->font()->height()+8;
     2282        mess_win=wm->new_window(xres/2,yres/2,-1,-1,
     2283            new text_field(0,h*0,ID_MESS_STR1,symbol_str("x_mul"),"****",bg_xmul,
     2284            new text_field(0,h*1,ID_MESS_STR2,symbol_str("x_div"),"****",bg_xdiv,
     2285            new text_field(0,h*2,ID_MESS_STR3,symbol_str("y_mul"),"****",bg_ymul,
     2286            new text_field(0,h*3,ID_MESS_STR4,symbol_str("y_div"),"****",bg_ydiv,
     2287                   new button(10,h*4,ID_SET_SCROLL_CHECK,symbol_str("ok_button"),
     2288                   new button(40,h*4,ID_CANCEL,symbol_str("cancel_button"),NULL)))))),symbol_str("_scroll"));
     2289      }
     2290    } break;
     2291    case ID_SET_SCROLL_CHECK :
     2292    {
     2293      int tbg_xmul=atoi(mess_win->read(ID_MESS_STR1));
     2294      int tbg_xdiv=atoi(mess_win->read(ID_MESS_STR2));
     2295      int tbg_ymul=atoi(mess_win->read(ID_MESS_STR3));
     2296      int tbg_ydiv=atoi(mess_win->read(ID_MESS_STR4));
     2297
     2298      if ( (((float)tbg_xmul/(float)tbg_xdiv) < ((float)bg_xmul/(float)bg_xdiv)) ||
     2299          (((float)tbg_ymul/(float)tbg_ydiv) < ((float)bg_ymul/(float)bg_ydiv)))
     2300      {
     2301        int h=wm->font()->height()+8;
     2302
     2303        warn_win=wm->new_window(xres/2-40,yres/2-40,-1,-1,
     2304                  new info_field(0,0,ID_NULL,
     2305                      symbol_str("back_loss"),
     2306                      new button(10,h*4,ID_SET_SCROLL_OK,symbol_str("ok_button"),
     2307                      new button(40,h*4,ID_WARN_CANCEL,symbol_str("cancel_button"),NULL))),
     2308                    symbol_str("WARNING"));
     2309        wm->grab_focus(warn_win);
     2310      } else wm->push_event(new event(ID_SET_SCROLL_OK,NULL));
     2311    } break;
     2312    case ID_WARN_CANCEL :
     2313    {
     2314      wm->close_window(warn_win); warn_win=NULL;
     2315      wm->push_event(new event(ID_CANCEL,NULL));
     2316    } break;
     2317    case ID_SET_SCROLL_OK :
     2318    {
     2319      if (warn_win) { wm->close_window(warn_win); warn_win=NULL; }
     2320      bg_xmul=atoi(mess_win->read(ID_MESS_STR1));
     2321      bg_xdiv=atoi(mess_win->read(ID_MESS_STR2));
     2322      bg_ymul=atoi(mess_win->read(ID_MESS_STR3));
     2323      bg_ydiv=atoi(mess_win->read(ID_MESS_STR4));
     2324      wm->push_event(new event(ID_CANCEL,NULL));        // close window
     2325    } break;
     2326
     2327    case ID_CENTER_PLAYER :
     2328    {
     2329       do_command("center",ev); break;
     2330    } break;
     2331
     2332    case ID_INTERPOLATE_DRAW :
     2333    {
     2334      interpolate_draw=!interpolate_draw;
     2335    } break;
     2336
     2337    case ID_DISABLE_AUTOLIGHT :
     2338    {
     2339      disable_autolight=!disable_autolight;
     2340    } break;
     2341
     2342    case ID_ADD_PALETTE :
     2343    {
     2344      if (!mess_win)
     2345      {
     2346        int h=wm->font()->height()+8;
     2347        mess_win=wm->new_window(xres/2,yres/2,-1,-1,
     2348            new text_field(0,h*0,ID_MESS_STR1,symbol_str("ap_width"),"****",2,
     2349            new text_field(0,h*1,ID_MESS_STR2,symbol_str("ap_height"),"****",2,
     2350            new text_field(0,h*2,ID_MESS_STR3,symbol_str("ap_name"),"***********","pal",
     2351                   new button(10,h*3,ID_ADD_PALETTE_OK,symbol_str("ok_button"),
     2352                   new button(40,h*3,ID_CANCEL,symbol_str("cancel_button"),NULL))))),symbol_str("ap_pal"));
     2353      }
     2354    } break;
     2355    case ID_ADD_PALETTE_OK :
     2356    {
     2357      char name[70];
     2358      sprintf(name,"(add_palette \"%s\" %d %d)",mess_win->read(ID_MESS_STR3),
     2359          atoi(mess_win->read(ID_MESS_STR1)),
     2360          atoi(mess_win->read(ID_MESS_STR2)));
     2361      char const *s=name;
     2362      eval(compile(s));
     2363      wm->push_event(new event(ID_CANCEL,NULL));        // close window
     2364    } break;
     2365    case ID_TOGGLE_DELAY :
     2366    {
     2367      the_game->toggle_delay(); break;
     2368    } break;
     2369
     2370    case ID_SMALL_MODE :
     2371    {
     2372      make_screen_size(311,160); break;
     2373    } break;
     2374    case ID_CLEAR_WEAPONS :
     2375    {
     2376      event ev;
     2377      do_command("clear_weapons",ev);
     2378    } break;
     2379    case ID_GOD_MODE :
     2380    {
     2381      for (view *v=player_list;v;v=v->next)
     2382        v->god=!v->god;
     2383    } break;
     2384    case ID_MOUSE_SCROLL :
     2385    {
     2386      mouse_scrolling=!mouse_scrolling;
     2387      prop->setd("mouse_scrolling",mouse_scrolling);
     2388      if (mouse_scrolling)
     2389        the_game->show_help(symbol_str("ms_on"));
     2390      else
     2391        the_game->show_help(symbol_str("ms_off"));
     2392    } break;
     2393
     2394    case ID_LOCK_PALETTES :
     2395    {
     2396      palettes_locked=!palettes_locked;
     2397      prop->setd("palettes_locked",palettes_locked);
     2398      if (palettes_locked)
     2399        the_game->show_help(symbol_str("pal_lock"));
     2400      else the_game->show_help(symbol_str("pal_unlock"));
     2401    } break;
     2402
     2403    case ID_DISABLE_VIEW_SHIFT :
     2404    {
     2405      view_shift_disabled=!view_shift_disabled;
     2406      prop->setd("view_shift_disabled",view_shift_disabled);
     2407      if (view_shift_disabled)
     2408        the_game->show_help(symbol_str("vs_dis"));
     2409      else the_game->show_help(symbol_str("vs_en"));
     2410    } break;
     2411
     2412    case ID_WIN_FORE :
     2413    {
     2414      toggle_fgw();
     2415    } break;
     2416    case ID_WIN_BACK :
     2417    {
     2418      toggle_bgw();
     2419    } break;
     2420    case ID_WIN_OBJECTS :
     2421    {
     2422      toggle_omenu();
     2423    } break;
     2424    case ID_WIN_PALETTES :
     2425    {
     2426      toggle_pmenu();
     2427    } break;
     2428    case ID_WIN_LIGHTING :
     2429    {
     2430      toggle_light_window();
     2431    } break;
     2432    case ID_WIN_LAYERS :
     2433    {
     2434      toggle_show_menu();
     2435    } break;
     2436    case ID_WIN_CONSOLE :
     2437    {
     2438      if (dev_console) dev_console->toggle();
     2439    } break;
     2440    case ID_WIN_TOOLBAR :
     2441    {
     2442      toggle_toolbar();
     2443    } break;
     2444
     2445    case DEV_AMBIENT :
     2446    { if (!ambw) make_ambient(); } break;
     2447    case DEV_AREA_OK :
     2448    { close_area_win(1); } break;
     2449    case DEV_AREA_DELETE :
     2450    { close_area_win(0);
     2451      if (current_area && current_level)
     2452      {
     2453        if (current_level->area_list==current_area)
     2454          current_level->area_list=current_level->area_list->next;
     2455        else
     2456        {
     2457          area_controller *a=current_level->area_list,*l=NULL;
     2458          for (;a!=current_area && a;a=a->next) { l=a; }
     2459          l->next=a->next;
     2460          delete a;
     2461        }
     2462        current_area=NULL;
     2463        the_game->need_refresh();
     2464      }
     2465    } break;
     2466    case DEV_AI_OK :
     2467      close_ai_window(); break;
     2468    case DEV_OEDIT_AI :
     2469      make_ai_window(edit_object); break;
     2470    case DEV_OBJECTS_DELETE :
     2471    {
     2472      if (edit_object)
     2473      {
     2474        for (int i=0;i<edit_object->total_objects();i++)
     2475          edit_object->remove_object(edit_object->get_object(0));
     2476        the_game->need_refresh();
     2477      }
     2478    } break;
     2479
     2480    case DEV_LIGHTS_DELETE :
     2481    {
     2482      if (edit_object)
     2483      {
     2484        for (int i=0;i<edit_object->total_lights();i++)
     2485          edit_object->remove_light(edit_object->get_light(0));
     2486        the_game->need_refresh();
     2487      }
     2488    } break;
     2489
     2490    case DEV_LEDIT_DEL :
     2491    {
     2492      prop->setd("ledit x",ledit->x);
     2493      prop->setd("ledit y",ledit->y);
     2494      wm->close_window(ledit); ledit=NULL;
     2495      if (current_level)
     2496        current_level->remove_light(edit_light);
     2497      else
     2498        delete_light(edit_light);
     2499      edit_light=NULL;
     2500      the_game->need_refresh();
     2501    } break;
     2502    case DEV_LEDIT_OK :
     2503    {
     2504      edit_light->xshift=atoi(ledit->read(DEV_LEDIT_W));
     2505      edit_light->yshift=atoi(ledit->read(DEV_LEDIT_H));
     2506      edit_light->inner_radius=atoi(ledit->read(DEV_LEDIT_R1));
     2507      edit_light->outer_radius=atoi(ledit->read(DEV_LEDIT_R2));
     2508      if (edit_light->outer_radius<=edit_light->inner_radius)
     2509      {
     2510        edit_light->inner_radius=edit_light->outer_radius-1;
     2511        if (edit_light->inner_radius<1)
     2512        {
     2513          edit_light->inner_radius=1;
     2514          edit_light->outer_radius=2;
     2515        }
     2516      }
     2517
     2518      edit_light->calc_range();
     2519      edit_light=NULL;
     2520      prop->setd("ledit x",ledit->x);
     2521      prop->setd("ledit y",ledit->y);
     2522      wm->close_window(ledit); ledit=NULL;
     2523      the_game->need_refresh();
     2524    } break;
     2525    case DEV_LEDIT_MOVE :
     2526    {
     2527      prop->setd("ledit x",ledit->x);
     2528      prop->setd("ledit y",ledit->y);
     2529      wm->close_window(ledit); ledit=NULL;
     2530      state=DEV_MOVE_LIGHT;
     2531    } break;
     2532    case DEV_LEDIT_COPY :
     2533    {
     2534      edit_light=edit_light->copy();
     2535      prop->setd("ledit x",ledit->x);
     2536      prop->setd("ledit y",ledit->y);
     2537      wm->close_window(ledit); ledit=NULL;
     2538      state=DEV_MOVE_LIGHT;
     2539    } break;
     2540
     2541
     2542    case DEV_LIGHT0 :
     2543    case DEV_LIGHT1 :
     2544    case DEV_LIGHT2 :
     2545    case DEV_LIGHT3 :
     2546    case DEV_LIGHT4 :
     2547    case DEV_LIGHT5 :
     2548    case DEV_LIGHT6 :
     2549    case DEV_LIGHT7 :
     2550    case DEV_LIGHT8 :
     2551    case DEV_LIGHT9 :
     2552    {
     2553      int32_t lx,ly;
     2554      the_game->mouse_to_game(last_demo_mx,last_demo_my,lx,ly);
     2555      lx=snap_x(lx);
     2556      ly=snap_y(ly);
     2557      edit_light=add_light_source(ev.message.id-DEV_LIGHT0,lx,ly,
     2558                       atoi(lightw->read(DEV_LIGHTR1)),
     2559                       atoi(lightw->read(DEV_LIGHTR2)),
     2560                       atoi(lightw->read(DEV_LIGHTW)),
     2561                       atoi(lightw->read(DEV_LIGHTH)));
     2562      state=DEV_MOVE_LIGHT;
     2563    } break;
     2564    case ID_RAISE_ALL :
     2565    {
     2566      raise_all=!raise_all;
     2567      prop->setd("raise_all",raise_all);
     2568      if (raise_all)
     2569        the_game->show_help(symbol_str("fg_r"));
     2570      else
     2571        the_game->show_help(symbol_str("fg_l"));
     2572    } break;
     2573    case DEV_OEDIT_COPY :
     2574    {
     2575      game_object *use=copy_object;
     2576      if (!use) use=edit_object;
     2577      if (use)
     2578      {
     2579        game_object *old=use;
     2580        close_oedit_window();
     2581        if (use->controller())
     2582          the_game->show_help(symbol_str("no_clone"));
     2583        else
     2584        {
     2585          edit_object=old->copy();
     2586
     2587          current_level->add_object(edit_object);
     2588          the_game->need_refresh();
     2589          state=DEV_MOVE_OBJECT;
     2590
     2591          close_oedit_window();
     2592          copy_object=NULL;
     2593        }
     2594      }
     2595    } break;
     2596    case DEV_OEDIT_LEFT :
     2597    {
     2598      if (edit_object)
     2599      {
     2600        the_game->need_refresh();
     2601        edit_object->direction=-1;
     2602      }
     2603    } break;
     2604    case DEV_OEDIT_RIGHT :
     2605    {
     2606      if (edit_object)
     2607      {
     2608        the_game->need_refresh();
     2609        edit_object->direction=1;
     2610      }
     2611    } break;
     2612
     2613
     2614    case DEV_COMMAND_OK :
     2615    {
     2616      char cmd[100];
     2617      strcpy(cmd,commandw->inm->get(DEV_COMMAND)->read());
     2618      prop->setd("commandw x",commandw->x);
     2619      prop->setd("commandw y",commandw->y);
     2620      wm->close_window(commandw);
     2621      commandw=NULL;
     2622      do_command(cmd,ev);
     2623    } break;
     2624
     2625    case ID_SHOW_FPS :
     2626    { fps_on=!fps_on; } break;
     2627    case ID_PROFILE :
     2628    { profile_toggle();
     2629      profile_on=!profile_on;
     2630    } break;
     2631
     2632    case ID_TOGGLE_NAMES : { show_names=!show_names; } break;
     2633    case DEV_QUIT : the_game->end_session(); break;
     2634    case DEV_EDIT_FG : dev=1; break; //the_game->draw(); break;
     2635    case DEV_EDIT_BG : dev=2; break; //the_game->draw(); break;
     2636    case DEV_EDIT_FGBG : dev=3; break; //the_game->draw(); break;
     2637    case DEV_PLAY : dev=0; break; //the_game->draw(); break;
     2638    case SHOW_FOREGROUND :
     2639    { dev=dev^DRAW_FG_LAYER; the_game->need_refresh(); } break;
     2640    case SHOW_FOREGROUND_BOUND :
     2641    { dev=dev^DRAW_FG_BOUND_LAYER; the_game->need_refresh(); } break;
     2642    case SHOW_BACKGROUND :
     2643    { dev=dev^DRAW_BG_LAYER; the_game->need_refresh(); } break;
     2644    case SHOW_CHARACTERS :
     2645    { dev=dev^DRAW_PEOPLE_LAYER; the_game->need_refresh(); } break;
     2646    case SHOW_LIGHT :
     2647    { dev=dev^DRAW_LIGHTS; the_game->need_refresh(); } break;
     2648    case SHOW_LINKS :
     2649    { dev=dev^DRAW_LINKS;  the_game->need_refresh(); } break;
     2650
     2651
     2652    case DEV_CREATE :
     2653    {
     2654      int val=get_omenu_item(((pick_list *)ev.message.data)->get_selection());
     2655      char cmd[100];
     2656      sprintf(cmd,"create %s",object_names[val]);
     2657      do_command(cmd,ev);
     2658      state=DEV_CREATE_OBJECT;
     2659      dev|=(EDIT_MODE | DRAW_PEOPLE_LAYER);
     2660    }
     2661    break;
     2662
     2663    case DEV_PALETTE :
     2664    {
     2665      int val=((pick_list *)ev.message.data)->get_selection();
     2666      pal_wins[val]->open_window();
     2667    } break;
     2668
     2669    case DEV_MUSIC_PICKLIST :
     2670    {
     2671/*        int *val=((int *)((pick_list *)ev.message.data)->read());
     2672        if (current_song) delete current_song;
     2673        current_song=new song(song_list[*val]);
     2674        current_song->play();        */
     2675    }
     2676    break;
     2677
     2678    case DEV_OEDIT_OK :
     2679    { close_oedit_window(); } break;
     2680
     2681    case DEV_OEDIT_DELETE :
     2682    {
     2683      selected_object=edit_object;
     2684      do_command("delete",ev);
     2685      close_oedit_window();
     2686    }
     2687    break;
     2688
     2689    case DEV_OEDIT_FRONT :
     2690    {
     2691      do_command("to_front",ev);
     2692      close_oedit_window();
     2693    }
     2694    break;
     2695
     2696    case DEV_OEDIT_BACK :
     2697    {
     2698      do_command("to_back",ev);
     2699      close_oedit_window();
     2700    }
     2701    break;
     2702
     2703    case DEV_OEDIT_MOVE :
     2704    {
     2705      game_object *o=edit_object;
     2706      close_oedit_window();
     2707      edit_object=o;
     2708      do_command("move",ev);
     2709    }
     2710    break;
    26932711      }
    26942712    } break;
     
    26982716    {
    26992717      if (ev.window)
    2700       {   
    2701         if (ev.window==commandw)
    2702         {
    2703           prop->setd("commandw x",commandw->x);
    2704           prop->setd("commandw y",commandw->y);   
    2705           wm->close_window(commandw);
    2706           commandw=NULL;       
    2707         } else if (ev.window==oedit)
    2708           close_oedit_window();
    2709         else if (ev.window==ambw)
    2710         { wm->close_window(ambw); ambw=NULL; }
    2711         else if (ev.window==backw) toggle_bgw();
    2712         else if (ev.window==forew) toggle_fgw();
    2713         else if (ev.window==lightw) toggle_light_window();
    2714         else if (ev.window==show_menu) toggle_show_menu();
    2715         else if (ev.window==pmenu) toggle_pmenu();
    2716         else if (ev.window==tbw) toggle_toolbar();
    2717         else if (ev.window==omenu) toggle_omenu();
    2718         else if (ev.window==memprof) toggle_memprof();
    2719         else if (ev.window==search_window) toggle_search_window();
    2720         else if (profile_handle_event(ev))  profile_on=!profile_on;
    2721         else if (chat->chat_event(ev)) chat->toggle();
    2722    
    2723       } 
     2718      {
     2719    if (ev.window==commandw)
     2720    {
     2721      prop->setd("commandw x",commandw->x);
     2722      prop->setd("commandw y",commandw->y);
     2723      wm->close_window(commandw);
     2724      commandw=NULL;
     2725    } else if (ev.window==oedit)
     2726      close_oedit_window();
     2727    else if (ev.window==ambw)
     2728    { wm->close_window(ambw); ambw=NULL; }
     2729    else if (ev.window==backw) toggle_bgw();
     2730    else if (ev.window==forew) toggle_fgw();
     2731    else if (ev.window==lightw) toggle_light_window();
     2732    else if (ev.window==show_menu) toggle_show_menu();
     2733    else if (ev.window==pmenu) toggle_pmenu();
     2734    else if (ev.window==tbw) toggle_toolbar();
     2735    else if (ev.window==omenu) toggle_omenu();
     2736    else if (ev.window==memprof) toggle_memprof();
     2737    else if (ev.window==search_window) toggle_search_window();
     2738    else if (profile_handle_event(ev))  profile_on=!profile_on;
     2739    else if (chat->chat_event(ev)) chat->toggle();
     2740
     2741      }
    27242742    }
    27252743    break;
     
    27292747      {
    27302748        if (!edit_object && link_object && selected_object && link_object!=selected_object)
    2731         {
    2732           link_object->add_object(selected_object);
    2733           if (S_LINK_SND>0) cash.sfx(S_LINK_SND)->play(sfx_volume/2);
    2734           the_game->need_refresh();
    2735         }
    2736 
    2737         link_object=NULL;
     2749    {
     2750      link_object->add_object(selected_object);
     2751      if (S_LINK_SND>0) cash.sfx(S_LINK_SND)->play(sfx_volume/2);
     2752      the_game->need_refresh();
     2753    }
     2754
     2755    link_object=NULL;
    27382756      }
    27392757    } break;
    27402758    case EV_KEY :
    2741     {   
     2759    {
    27422760      if (backw && ev.window==backw)
    27432761      { if (ev.key=='-' && bg_scale<the_game->btile_height()/2)
    2744         { toggle_bgw();
    2745           bg_scale++;
    2746           toggle_bgw();
    2747         } else if (ev.key=='+' && bg_scale>1)
    2748         { toggle_bgw();
    2749           bg_scale--;
    2750           toggle_bgw();
    2751         } else if (ev.key=='b') toggle_bgw();
    2752         else if (ev.key=='B') { toggle_bgw(); bg_w++; if (bg_w>6) bg_w=1; toggle_bgw(); }
     2762    { toggle_bgw();
     2763      bg_scale++;
     2764      toggle_bgw();
     2765    } else if (ev.key=='+' && bg_scale>1)
     2766    { toggle_bgw();
     2767      bg_scale--;
     2768      toggle_bgw();
     2769    } else if (ev.key=='b') toggle_bgw();
     2770    else if (ev.key=='B') { toggle_bgw(); bg_w++; if (bg_w>6) bg_w=1; toggle_bgw(); }
    27532771      }
    27542772      if (forew && ev.window==forew)
    27552773      { if (ev.key=='-' && fg_scale<the_game->ftile_height()/2)
    2756         { toggle_fgw();
    2757           fg_scale++;
    2758           toggle_fgw();
    2759         } else if (ev.key=='+' && fg_scale>1)
    2760         { toggle_fgw();
    2761           fg_scale--;
    2762           toggle_fgw();
    2763         } else if (ev.key=='i')
    2764         {
    2765           toggle_fgw();
    2766           fg_reversed=!fg_reversed;
    2767           prop->setd("fg_reversed",fg_reversed);
    2768           toggle_fgw();
    2769         } else if (ev.key=='f') toggle_fgw();
    2770 
    2771         else if (ev.key=='F') { toggle_fgw(); fg_w++; if (fg_w>6) fg_w=1; toggle_fgw(); }
     2774    { toggle_fgw();
     2775      fg_scale++;
     2776      toggle_fgw();
     2777    } else if (ev.key=='+' && fg_scale>1)
     2778    { toggle_fgw();
     2779      fg_scale--;
     2780      toggle_fgw();
     2781    } else if (ev.key=='i')
     2782    {
     2783      toggle_fgw();
     2784      fg_reversed=!fg_reversed;
     2785      prop->setd("fg_reversed",fg_reversed);
     2786      toggle_fgw();
     2787    } else if (ev.key=='f') toggle_fgw();
     2788
     2789    else if (ev.key=='F') { toggle_fgw(); fg_w++; if (fg_w>6) fg_w=1; toggle_fgw(); }
    27722790      }
    27732791      if (ev.window==NULL || ev.window==pmenu ||
    2774           ev.window==forew || is_pal_win(ev.window))  // main window actions
    2775       {         
    2776         switch (ev.key)
    2777         {
    2778           case JK_CTRL_L : if (!edit_object && !link_object) { link_object=selected_object; }
    2779           case 'n' : current_level->next_focus(); break;                           
    2780 //        case '/' : if (dev_console) dev_console->toggle(); break;       
    2781           case 't' :
    2782           {
    2783             if (ev.window==NULL || ev.window==forew)
    2784             {
    2785               the_game->ftile_on(last_demo_mx,last_demo_my,x,y);
    2786               fg_fill(cur_fg,x,y,NULL);
    2787             }
    2788           } break;
    2789           case 'f' : toggle_fgw(); break;
    2790           case 'M' : toggle_music_window(); break;                         
    2791 
    2792           case 'b' : toggle_bgw(); break;
    2793           case 'a' : toggle_toolbar(); break;
    2794           case 'A' : { if (selected_object)
    2795                        {
    2796                          if (oedit) wm->push_event(new event(DEV_OEDIT_OK,NULL));                     
    2797                         make_ai_window(selected_object);
    2798                        }
    2799                      } break;
    2800                      
    2801           case 'o' : toggle_omenu(); break;                   
    2802 
    2803           case '<' : do_command("to_back",ev); break;
    2804 
    2805           case '>' : do_command("to_front",ev); break;
    2806           case 'p' : toggle_pmenu(); break;                   
    2807           case 'P' : profile_toggle(); break;
    2808           case '|' : toggle_memprof(); break;
    2809           case '.' :
    2810           {
    2811             if (last_created_type>=0)
    2812             {
    2813               int val=last_created_type;
    2814               char cmd[100];
    2815               sprintf(cmd,"create %s",object_names[val]);
    2816               do_command(cmd,ev);
    2817               state=DEV_CREATE_OBJECT;
    2818               dev|=(EDIT_MODE | DRAW_PEOPLE_LAYER);         
    2819             }
    2820           }             
    2821           break;       
    2822 
    2823 
    2824           case 'd' : { do_command("delete",ev);  the_game->need_refresh(); } break;
    2825           case 'i' :
    2826           {       
    2827             fg_reversed=!fg_reversed;
    2828             prop->setd("fg_reversed",fg_reversed);
    2829             if (forew)
    2830             {
    2831               toggle_fgw();
    2832               toggle_fgw();
    2833             }
    2834           } break;
    2835           case 'l' : toggle_light_window(); break;
    2836           case '!' :
    2837           case '@' :
    2838           case '#' :
    2839           case '$' :
    2840           case '%' :
    2841           case '^' :
    2842           case '&' :
    2843           case '*' :
    2844           case '(' :
    2845           case ')' :
    2846 
    2847           case '0' :
    2848           case '1' :
    2849           case '2' :
    2850           case '3' :
    2851           case '4' :
    2852           case '5' :
    2853           case '6' :
    2854           case '7' :
    2855           case '8' :
    2856           case '9' : do_command("set_aitype",ev); break;
    2857           case 'c' : do_command("center",ev); break;
    2858           case 'C' : 
    2859           if (selected_object && selected_object->controller()==NULL)
    2860           { copy_object=selected_object;
    2861                         wm->push_event(new event(DEV_OEDIT_COPY,NULL)); } break;
    2862          
    2863           case 'D' : the_game->toggle_delay(); break;
    2864           case 'L' : toggle_show_menu(); break;
    2865           case '`' : do_command("fg_select",ev); break;
    2866           case 'r' : { do_command("toggle_fg_raise",ev); the_game->need_refresh(); }  break;
    2867           case '[' : do_command("fg_add -1",ev); break;
    2868           case ']' : do_command("fg_add 1",ev); break;
    2869           case 'R' : do_command("reload",ev); break;
    2870           case 'w' :
    2871           {       
    2872             int32_t rx,ry;
    2873             the_game->mouse_to_game(dlastx,dlasty,rx,ry);
    2874             char msg[100]; sprintf(msg,symbol_str("mouse_at"),rx,ry);
    2875             the_game->show_help(msg);
    2876             the_game->need_refresh();
    2877           } break;
    2878           case 'k' :
    2879           {
    2880             if (selected_object && selected_object->total_objects())
    2881               selected_object->remove_object(selected_object->get_object(0));
    2882             the_game->need_refresh();
    2883           } break;
    2884           case 'K' :
    2885           {
    2886             if (selected_object && selected_object->total_objects())
    2887               selected_object->remove_object(selected_object->get_object(selected_object->total_objects()-1));
    2888             the_game->need_refresh();
    2889           } break;
    2890           case 'j' :
    2891           {
    2892             if (current_level && player_list && player_list->focus)
    2893             {
    2894               int32_t rx,ry;
    2895               the_game->mouse_to_game(dlastx,dlasty,rx,ry);
    2896               player_list->focus->x=rx;
    2897               player_list->focus->y=ry;
    2898               do_command("center",ev);
    2899               the_game->need_refresh();
    2900             }
    2901           } break;
    2902           case 'z' : do_command("clear_weapons",ev); break;       
    2903           case 'Z' : if (dev&EDIT_MODE)
    2904           { view *v=the_game->view_in(last_demo_mx,last_demo_my);
    2905             if (v)
    2906             {
    2907               v->god=!v->god;
    2908               sbar.redraw(screen);
    2909             }
    2910           } break;
    2911           case ' ' :
    2912           {
    2913             if (dev & EDIT_MODE)
    2914             {
    2915               if (selected_object)
    2916               {
    2917                 if (oedit)
    2918                   close_oedit_window();
    2919                 edit_object=selected_object;
    2920                 do_command("move",ev);
    2921               } else if (selected_light)
    2922               {
    2923                 if (ledit)
    2924                 {
    2925                   wm->close_window(ledit);
    2926                   ledit=NULL;
    2927                 }
    2928                 edit_light=selected_light;
    2929                 do_command("move_light",ev);
    2930               }
    2931              
    2932             } break;       
    2933           }       
    2934           case 'x' :
    2935           {
    2936             if (selected_object)
    2937             { if (selected_object->direction>0)
    2938               selected_object->direction=-1;
    2939             else selected_object->direction=1;
    2940             }
    2941           } break;
    2942          
    2943         }         
    2944       }
    2945     }
    2946   }
    2947  
     2792      ev.window==forew || is_pal_win(ev.window))  // main window actions
     2793      {
     2794    switch (ev.key)
     2795    {
     2796      case JK_CTRL_L : if (!edit_object && !link_object) { link_object=selected_object; }
     2797      case 'n' : current_level->next_focus(); break;
     2798//      case '/' : if (dev_console) dev_console->toggle(); break;
     2799      case 't' :
     2800      {
     2801        if (ev.window==NULL || ev.window==forew)
     2802        {
     2803          the_game->ftile_on(last_demo_mx,last_demo_my,x,y);
     2804          fg_fill(cur_fg,x,y,NULL);
     2805        }
     2806      } break;
     2807      case 'f' : toggle_fgw(); break;
     2808      case 'M' : toggle_music_window(); break;
     2809
     2810      case 'b' : toggle_bgw(); break;
     2811      case 'a' : toggle_toolbar(); break;
     2812      case 'A' : { if (selected_object)
     2813               {
     2814             if (oedit) wm->push_event(new event(DEV_OEDIT_OK,NULL));
     2815            make_ai_window(selected_object);
     2816               }
     2817             } break;
     2818
     2819      case 'o' : toggle_omenu(); break;
     2820
     2821      case '<' : do_command("to_back",ev); break;
     2822
     2823      case '>' : do_command("to_front",ev); break;
     2824      case 'p' : toggle_pmenu(); break;
     2825      case 'P' : profile_toggle(); break;
     2826      case '|' : toggle_memprof(); break;
     2827      case '.' :
     2828      {
     2829        if (last_created_type>=0)
     2830        {
     2831          int val=last_created_type;
     2832          char cmd[100];
     2833          sprintf(cmd,"create %s",object_names[val]);
     2834          do_command(cmd,ev);
     2835          state=DEV_CREATE_OBJECT;
     2836          dev|=(EDIT_MODE | DRAW_PEOPLE_LAYER);
     2837        }
     2838      }
     2839      break;
     2840
     2841
     2842      case 'd' : { do_command("delete",ev);  the_game->need_refresh(); } break;
     2843      case 'i' :
     2844      {
     2845        fg_reversed=!fg_reversed;
     2846        prop->setd("fg_reversed",fg_reversed);
     2847        if (forew)
     2848        {
     2849          toggle_fgw();
     2850          toggle_fgw();
     2851        }
     2852      } break;
     2853      case 'l' : toggle_light_window(); break;
     2854      case '!' :
     2855      case '@' :
     2856      case '#' :
     2857      case '$' :
     2858      case '%' :
     2859      case '^' :
     2860      case '&' :
     2861      case '*' :
     2862      case '(' :
     2863      case ')' :
     2864
     2865      case '0' :
     2866      case '1' :
     2867      case '2' :
     2868      case '3' :
     2869      case '4' :
     2870      case '5' :
     2871      case '6' :
     2872      case '7' :
     2873      case '8' :
     2874      case '9' : do_command("set_aitype",ev); break;
     2875      case 'c' : do_command("center",ev); break;
     2876      case 'C' :
     2877      if (selected_object && selected_object->controller()==NULL)
     2878      { copy_object=selected_object;
     2879            wm->push_event(new event(DEV_OEDIT_COPY,NULL)); } break;
     2880
     2881      case 'D' : the_game->toggle_delay(); break;
     2882      case 'L' : toggle_show_menu(); break;
     2883      case '`' : do_command("fg_select",ev); break;
     2884      case 'r' : { do_command("toggle_fg_raise",ev); the_game->need_refresh(); }  break;
     2885      case '[' : do_command("fg_add -1",ev); break;
     2886      case ']' : do_command("fg_add 1",ev); break;
     2887      case 'R' : do_command("reload",ev); break;
     2888      case 'w' :
     2889      {
     2890        int32_t rx,ry;
     2891        the_game->mouse_to_game(dlastx,dlasty,rx,ry);
     2892        char msg[100]; sprintf(msg,symbol_str("mouse_at"),rx,ry);
     2893        the_game->show_help(msg);
     2894        the_game->need_refresh();
     2895      } break;
     2896      case 'k' :
     2897      {
     2898        if (selected_object && selected_object->total_objects())
     2899          selected_object->remove_object(selected_object->get_object(0));
     2900        the_game->need_refresh();
     2901      } break;
     2902      case 'K' :
     2903      {
     2904        if (selected_object && selected_object->total_objects())
     2905          selected_object->remove_object(selected_object->get_object(selected_object->total_objects()-1));
     2906        the_game->need_refresh();
     2907      } break;
     2908      case 'j' :
     2909      {
     2910        if (current_level && player_list && player_list->focus)
     2911        {
     2912          int32_t rx,ry;
     2913          the_game->mouse_to_game(dlastx,dlasty,rx,ry);
     2914          player_list->focus->x=rx;
     2915          player_list->focus->y=ry;
     2916          do_command("center",ev);
     2917          the_game->need_refresh();
     2918        }
     2919      } break;
     2920      case 'z' : do_command("clear_weapons",ev); break;
     2921      case 'Z' : if (dev&EDIT_MODE)
     2922      { view *v=the_game->view_in(last_demo_mx,last_demo_my);
     2923        if (v)
     2924        {
     2925          v->god=!v->god;
     2926          sbar.redraw(screen);
     2927        }
     2928      } break;
     2929      case ' ' :
     2930      {
     2931        if (dev & EDIT_MODE)
     2932        {
     2933          if (selected_object)
     2934          {
     2935        if (oedit)
     2936          close_oedit_window();
     2937        edit_object=selected_object;
     2938        do_command("move",ev);
     2939          } else if (selected_light)
     2940          {
     2941        if (ledit)
     2942        {
     2943          wm->close_window(ledit);
     2944          ledit=NULL;
     2945        }
     2946        edit_light=selected_light;
     2947        do_command("move_light",ev);
     2948          }
     2949
     2950        } break;
     2951      }
     2952      case 'x' :
     2953      {
     2954        if (selected_object)
     2955        { if (selected_object->direction>0)
     2956          selected_object->direction=-1;
     2957        else selected_object->direction=1;
     2958        }
     2959      } break;
     2960
     2961    }
     2962      }
     2963    }
     2964  }
     2965
    29482966
    29492967}
     
    29582976
    29592977
    2960 pal_win::pal_win(void *args) 
     2978pal_win::pal_win(void *args)
    29612979{
    29622980  int i=0;
    29632981  Cell *ao=(Cell *)args;
    2964  
     2982
    29652983  name=strcpy((char *)jmalloc(strlen(lstring_value(CAR(args)))+1,
    2966                               "pal name"),lstring_value(CAR(args)));
     2984                  "pal name"),lstring_value(CAR(args)));
    29672985  ao=CDR(ao);
    29682986  scale=w=h=1;
    29692987  x=y=0;
    2970  
     2988
    29712989  if (!NILP(ao))
    29722990  {
     
    29772995      if (!NILP(ao))
    29782996      {
    2979         x=lnumber_value(CAR(ao)); ao=CDR(ao);
    2980         if (!NILP(ao))
    2981         {
    2982           y=lnumber_value(CAR(ao)); ao=CDR(ao);
    2983           if (!NILP(ao))
    2984             scale=lnumber_value(CAR(ao)); ao=CDR(ao);
    2985         }
     2997    x=lnumber_value(CAR(ao)); ao=CDR(ao);
     2998    if (!NILP(ao))
     2999    {
     3000      y=lnumber_value(CAR(ao)); ao=CDR(ao);
     3001      if (!NILP(ao))
     3002        scale=lnumber_value(CAR(ao)); ao=CDR(ao);
     3003    }
    29863004      }
    29873005    }
     
    29963014  {
    29973015    if (i>w*h)
    2998     { 
     3016    {
    29993017      lbreak("to many parameters to add_palette ");
    30003018      exit(0);
     
    30033021    // make sure the tile that they suggested exists
    30043022    if (pat[i]<=0 || pat[i]>nforetiles || foretiles[pat[i]]<0)
    3005       pat[i]=0;   
     3023      pat[i]=0;
    30063024    ao=CDR(ao);
    30073025    i++;
     
    30133031
    30143032void pal_win::open_window()
    3015 { 
     3033{
    30163034  if (me) close_window();
    30173035  me=wm->new_window(x,y,w*f_wid/scale,h*f_hi/scale,NULL,name);
     
    30283046    wm->close_window(me);
    30293047    me=NULL;
    3030    
     3048
    30313049  }
    30323050}
     
    30433061    for (i=0;i<w*h;i++)
    30443062    {
    3045       im->clear();     
     3063      im->clear();
    30463064      the_game->get_fg(pat[i])->im->put_image(im,0,0);
    30473065      scale_put(im,me->screen,me->x1()+(i%w)*tw,
    3048                 me->y1()+(i/w)*th,tw,th);
     3066        me->y1()+(i/w)*th,tw,th);
    30493067      if (d==pat[i])
    30503068      {
    3051         find=i;
    3052         me->screen->rectangle(me->x1()+(i%w)*tw,
    3053                           me->y1()+(i/w)*th,
    3054                           me->x1()+(i%w)*tw+tw-1,
    3055                           me->y1()+(i/w)*th+th-1,wm->bright_color());
     3069    find=i;
     3070    me->screen->rectangle(me->x1()+(i%w)*tw,
     3071              me->y1()+(i/w)*th,
     3072              me->x1()+(i%w)*tw+tw-1,
     3073              me->y1()+(i/w)*th+th-1,wm->bright_color());
    30563074      }
    30573075    }
     
    30613079}
    30623080
    3063 void pal_win::handle_event(event &ev) 
     3081void pal_win::handle_event(event &ev)
    30643082{
    30653083  int d=cur_fg;
     
    30683086  {
    30693087    int i,dr=0;
    3070     for (i=0;i<w*h;i++) 
    3071     {
    3072       if (pat[i]==d || pat[i]==last_selected) 
     3088    for (i=0;i<w*h;i++)
     3089    {
     3090      if (pat[i]==d || pat[i]==last_selected)
    30733091        dr=1;
    30743092    }
     
    30843102      {
    30853103        if (ev.mouse_button==1)
    3086         {         
    3087           int selx=(last_demo_mx-me->x-me->x1())/(the_game->ftile_width()/scale),
    3088               sely=(last_demo_my-me->y-me->y1())/(the_game->ftile_height()/scale);
    3089           if (selx>=0 && sely>=0 && selx<w && sely<h)
    3090           {
    3091             cur_fg=pat[selx+sely*w];
    3092             if (dev_cont->forew)     
    3093               ((tile_picker *)dev_cont->forew->
    3094                read(DEV_FG_PICKER))->recenter(dev_cont->forew->screen);     
    3095           }
    3096         } else if (ev.mouse_button==2)
    3097         {
    3098           if (palettes_locked)
    3099             the_game->show_help(symbol_str("pal_lock"));
    3100           else
    3101           {
    3102             int selx=(last_demo_mx-me->x-me->x1())/(the_game->ftile_width()/scale),
    3103                 sely=(last_demo_my-me->y-me->y1())/(the_game->ftile_height()/scale);
    3104             if (selx>=0 && sely>=0 && selx<w && sely<h)
    3105             {
    3106               pat[selx+sely*w]=cur_fg;
    3107               draw();
    3108             }
    3109           }
    3110         }
     3104    {
     3105      int selx=(last_demo_mx-me->x-me->x1())/(the_game->ftile_width()/scale),
     3106          sely=(last_demo_my-me->y-me->y1())/(the_game->ftile_height()/scale);
     3107      if (selx>=0 && sely>=0 && selx<w && sely<h)
     3108      {
     3109        cur_fg=pat[selx+sely*w];
     3110        if (dev_cont->forew)
     3111          ((tile_picker *)dev_cont->forew->
     3112           read(DEV_FG_PICKER))->recenter(dev_cont->forew->screen);
     3113      }
     3114    } else if (ev.mouse_button==2)
     3115    {
     3116      if (palettes_locked)
     3117        the_game->show_help(symbol_str("pal_lock"));
     3118      else
     3119      {
     3120        int selx=(last_demo_mx-me->x-me->x1())/(the_game->ftile_width()/scale),
     3121            sely=(last_demo_my-me->y-me->y1())/(the_game->ftile_height()/scale);
     3122        if (selx>=0 && sely>=0 && selx<w && sely<h)
     3123        {
     3124          pat[selx+sely*w]=cur_fg;
     3125          draw();
     3126        }
     3127      }
     3128    }
    31113129      } break;
    31123130
     
    31143132      {
    31153133        switch (ev.key)
    3116         {
    3117           case '+' :
    3118           { if (scale>1) 
    3119             {
    3120               close_window();
    3121               scale--;
    3122               open_window();
    3123             }
    3124           } break;
    3125           case '-' :
    3126           { if (scale<the_game->ftile_height()/2)
    3127             {
    3128               close_window();
    3129               scale++;
    3130               open_window();
    3131             }
    3132           } break;       
    3133           case JK_LEFT :
    3134           {
    3135             if (palettes_locked) the_game->show_help(symbol_str("pal_lock"));
    3136             else if (w>1) resize(-1,0);
    3137           } break;
    3138           case JK_RIGHT :
    3139           {
    3140             if (palettes_locked) the_game->show_help(symbol_str("pal_lock"));
    3141             else
    3142               resize(1,0);
    3143           } break;
    3144           case JK_UP :
    3145           {
    3146             if (palettes_locked) the_game->show_help(symbol_str("pal_lock"));
    3147             else if (h>1) resize(0,-1);
    3148           } break;
    3149           case JK_DOWN :
    3150           {
    3151             if (palettes_locked)           
    3152               the_game->show_help(symbol_str("pal_lock"));
    3153             else
    3154               resize(0,1);
    3155           } break;       
    3156           case JK_ESC : close_window(); break;
    3157           case ' ' :
    3158           {
    3159             int32_t xs,ys,xx,yy;
    3160             the_game->ftile_on(me->x,me->y,xs,ys);
    3161 
    3162             for (xx=xs;xx<xs+w;xx++)
    3163             {
    3164               for (yy=ys;yy<ys+h;yy++)
    3165               {       
    3166                 if (xx>=0 && yy>=0 && xx<current_level->foreground_width() &&
    3167                     yy<current_level->foreground_height())
    3168                   the_game->put_fg(xx,yy,raise_all ? make_above_tile(pat[xx-xs+(yy-ys)*w]) : pat[xx-xs+(yy-ys)*w] );
    3169               }
    3170             }
    3171           } break;
    3172           case 't' :
    3173           {
    3174             int32_t xs,ys;
    3175             the_game->ftile_on(me->x,me->y,xs,ys);
    3176             dev_cont->fg_fill(-1,xs,ys,this);
    3177           } break;
    3178 
    3179         }
     3134    {
     3135      case '+' :
     3136      { if (scale>1)
     3137        {
     3138          close_window();
     3139          scale--;
     3140          open_window();
     3141        }
     3142      } break;
     3143      case '-' :
     3144      { if (scale<the_game->ftile_height()/2)
     3145        {
     3146          close_window();
     3147          scale++;
     3148          open_window();
     3149        }
     3150      } break;
     3151      case JK_LEFT :
     3152      {
     3153        if (palettes_locked) the_game->show_help(symbol_str("pal_lock"));
     3154        else if (w>1) resize(-1,0);
     3155      } break;
     3156      case JK_RIGHT :
     3157      {
     3158        if (palettes_locked) the_game->show_help(symbol_str("pal_lock"));
     3159        else
     3160          resize(1,0);
     3161      } break;
     3162      case JK_UP :
     3163      {
     3164        if (palettes_locked) the_game->show_help(symbol_str("pal_lock"));
     3165        else if (h>1) resize(0,-1);
     3166      } break;
     3167      case JK_DOWN :
     3168      {
     3169        if (palettes_locked)
     3170          the_game->show_help(symbol_str("pal_lock"));
     3171        else
     3172          resize(0,1);
     3173      } break;
     3174      case JK_ESC : close_window();    break;
     3175      case ' ' :
     3176      {
     3177        int32_t xs,ys,xx,yy;
     3178        the_game->ftile_on(me->x,me->y,xs,ys);
     3179
     3180        for (xx=xs;xx<xs+w;xx++)
     3181        {
     3182          for (yy=ys;yy<ys+h;yy++)
     3183          {
     3184        if (xx>=0 && yy>=0 && xx<current_level->foreground_width() &&
     3185            yy<current_level->foreground_height())
     3186          the_game->put_fg(xx,yy,raise_all ? make_above_tile(pat[xx-xs+(yy-ys)*w]) : pat[xx-xs+(yy-ys)*w] );
     3187          }
     3188        }
     3189      } break;
     3190      case 't' :
     3191      {
     3192        int32_t xs,ys;
     3193        the_game->ftile_on(me->x,me->y,xs,ys);
     3194        dev_cont->fg_fill(-1,xs,ys,this);
     3195      } break;
     3196
     3197    }
    31803198      } break;
    31813199
     
    32293247{
    32303248  FILE *fp=open_FILE("edit.lsp","w");
    3231   if (!fp) 
     3249  if (!fp)
    32323250    the_game->show_help(symbol_str("no_edit.lsp"));
    32333251  else
    32343252  {
    32353253    fprintf(fp,"(set_zoom %d)\n",the_game->zoom);
    3236    
     3254
    32373255    int i;
    32383256    for (i=0;i<total_pals;i++)
     
    32663284static int get_color(int color, int x, int y, pal_win *p)
    32673285{
    3268   if (p) 
     3286  if (p)
    32693287  {
    32703288    while (x<0) x+=p->width();
     
    33023320        if (fgvalue(above[x])==fcolor)
    33033321        { r=new fill_rec(x,y-1,recs);
    3304           recs=r; 
     3322          recs=r;
    33053323        }
    33063324      }
     
    33233341          if (x>0 && fgvalue(above[x-1])!=fgvalue(fcolor) && fgvalue(above[x])==fgvalue(fcolor))
    33243342          { r=new fill_rec(x,y-1,recs);
    3325             recs=r; 
     3343            recs=r;
    33263344          }
    33273345        }
     
    33303348          if (x>0 && fgvalue(below[x-1])!=fgvalue(fcolor) && fgvalue(below[x])==fgvalue(fcolor))
    33313349          { r=new fill_rec(x,y+1,recs);
    3332             recs=r; 
     3350            recs=r;
    33333351          }
    33343352        }
     
    33713389  }
    33723390  if (print)
    3373     dprintf("\ntotal=%d\n",t);     
     3391    dprintf("\ntotal=%d\n",t);
    33743392  return t;
    33753393}
     
    33853403  if (find<0)
    33863404    dprintf("No character '%s' defined\n",name);
    3387   else 
     3405  else
    33883406    get_char_mem(find,1);
    3389  
     3407
    33903408}
    33913409
     
    34003418      if (cash.loaded(foretiles[i]))
    34013419      {
    3402         t++;     
    3403         s+=cash.foret(foretiles[i])->size();
     3420    t++;
     3421    s+=cash.foret(foretiles[i])->size();
    34043422      }
    34053423    }
     
    34143432      if (cash.loaded(foretiles[i]))
    34153433      {
    3416         t++;
    3417         s+=cash.backt(backtiles[i])->size();
     3434    t++;
     3435    s+=cash.backt(backtiles[i])->size();
    34183436      }
    34193437    }
    34203438  }
    34213439  dprintf("%d loaded backtiles=%d bytes\n",t,s);
    3422  
     3440
    34233441  t=0; s=0;
    34243442  for (i=0;i<total_objects;i++)
     
    34353453void dev_cleanup()
    34363454{
    3437   if (start_edit) 
     3455  if (start_edit)
    34383456    prop->save("defaults.prp");
    34393457  delete prop;
     
    34603478static pmi filemenu[]={
    34613479          {"menu1_load",         ID_LEVEL_LOAD,NULL,-1},
    3462           {NULL,0,NULL,-1},
    3463           {"menu1_save",     ID_LEVEL_SAVE,NULL,-1},
    3464           {"menu1_saveas",      ID_LEVEL_SAVEAS,NULL,-1},
    3465           {"menu1_savegame",          ID_GAME_SAVE,NULL,-1},
    3466           {"menu1_new",          ID_LEVEL_NEW,NULL,-1},
    3467           {"menu1_resize",         ID_LEVEL_RESIZE,NULL,-1},
    3468           {NULL,0,NULL,-1},
    3469           {"menu1_suspend",ID_SUSPEND,NULL,-1},
    3470           {"menu1_toggle",ID_PLAY_MODE,NULL,-1},
    3471           {NULL,0,NULL,-1},
    3472           {"menu1_savepal",ID_EDIT_SAVE,NULL,-1},
    3473 //        {"menu1_startc",ID_CACHE_PROFILE,NULL,-1},
    3474 //        {"menu1_endc",ID_CACHE_PROFILE_END,NULL,-1},
    3475           {NULL,0,NULL,-1},     
    3476           {"menu1_quit",      ID_QUIT,NULL,-1},
    3477           {NULL,-1,NULL,-1}
    3478         };
     3480      {NULL,0,NULL,-1},
     3481      {"menu1_save",     ID_LEVEL_SAVE,NULL,-1},
     3482      {"menu1_saveas",      ID_LEVEL_SAVEAS,NULL,-1},
     3483      {"menu1_savegame",          ID_GAME_SAVE,NULL,-1},
     3484      {"menu1_new",          ID_LEVEL_NEW,NULL,-1},
     3485      {"menu1_resize",         ID_LEVEL_RESIZE,NULL,-1},
     3486      {NULL,0,NULL,-1},
     3487      {"menu1_suspend",ID_SUSPEND,NULL,-1},
     3488      {"menu1_toggle",ID_PLAY_MODE,NULL,-1},
     3489      {NULL,0,NULL,-1},
     3490      {"menu1_savepal",ID_EDIT_SAVE,NULL,-1},
     3491//      {"menu1_startc",ID_CACHE_PROFILE,NULL,-1},
     3492//      {"menu1_endc",ID_CACHE_PROFILE_END,NULL,-1},
     3493      {NULL,0,NULL,-1},
     3494      {"menu1_quit",      ID_QUIT,NULL,-1},
     3495      {NULL,-1,NULL,-1}
     3496    };
    34793497
    34803498
     
    34963514  {"menu2_map",      ID_TOGGLE_MAP,NULL,-1},
    34973515//  {"Shrink to 320x200 (F10)",    ID_SMALL_MODE,NULL,-1},
    3498   {"menu2_view",        ID_DISABLE_VIEW_SHIFT,&view_shift_disabled,-1}, 
     3516  {"menu2_view",        ID_DISABLE_VIEW_SHIFT,&view_shift_disabled,-1},
    34993517//  {"Ultra Smooth draw (U)",      ID_INTERPOLATE_DRAW,  &interpolate_draw,'U'},
    35003518  {"menu2_alight",      ID_DISABLE_AUTOLIGHT, &disable_autolight,'A'},
     
    35133531          {"menu3_back",    ID_WIN_BACK,    &backw_on,-1},
    35143532          {"menu3_layers",    ID_WIN_LAYERS,  &show_menu_on,-1},
    3515           {"menu3_light",    ID_WIN_LIGHTING,&ledit_on,-1},
    3516           {"menu3_pal",    ID_WIN_PALETTES,&pmenu_on,-1},
    3517           {"menu3_objs",    ID_WIN_OBJECTS, &omenu_on,-1},
    3518 //        {"menu3_console",    ID_WIN_CONSOLE, &commandw_on,-1},
    3519           {"menu3_toolbar",    ID_WIN_TOOLBAR, &tbw_on,-1},
    3520 //        {"Search      (s)",    ID_SEARCH,      &searchw_on,-1},
    3521           {"menu3_prof",    ID_PROFILE,     &profile_on,-1},
    3522           {"menu3_save",     ID_SAVE_WINDOWS,NULL,-1},
    3523           {NULL,-1,NULL,-1}
    3524         };
     3533      {"menu3_light",    ID_WIN_LIGHTING,&ledit_on,-1},
     3534      {"menu3_pal",    ID_WIN_PALETTES,&pmenu_on,-1},
     3535      {"menu3_objs",    ID_WIN_OBJECTS, &omenu_on,-1},
     3536//      {"menu3_console",    ID_WIN_CONSOLE, &commandw_on,-1},
     3537      {"menu3_toolbar",    ID_WIN_TOOLBAR, &tbw_on,-1},
     3538//      {"Search      (s)",    ID_SEARCH,      &searchw_on,-1},
     3539      {"menu3_prof",    ID_PROFILE,     &profile_on,-1},
     3540      {"menu3_save",     ID_SAVE_WINDOWS,NULL,-1},
     3541      {NULL,-1,NULL,-1}
     3542    };
    35253543
    35263544
     
    35293547static pmi filemenu[]={
    35303548          {"Load Level",         ID_LEVEL_LOAD,NULL,-1},
    3531           {NULL,0,NULL,-1},
    3532           {"Save Level (S)",     ID_LEVEL_SAVE,NULL,-1},
    3533           {"Save level as",      ID_LEVEL_SAVEAS,NULL,-1},
    3534           {"Save game",          ID_GAME_SAVE,NULL,-1},
    3535           {"New level",          ID_LEVEL_NEW,NULL,-1},
    3536           {"Resize map",         ID_LEVEL_RESIZE,NULL,-1},
    3537           {NULL,0,NULL,-1},
    3538           {"Suspend non-players",ID_SUSPEND,NULL,-1},
    3539           {"Play mode toggle (TAB)",ID_PLAY_MODE,NULL,-1},
    3540           {NULL,0,NULL,-1},
    3541           {"Save Palettes         ",ID_EDIT_SAVE,NULL,-1},
    3542           {"Start cache profile   ",ID_CACHE_PROFILE,NULL,-1},
    3543           {"End cache profile     ",ID_CACHE_PROFILE_END,NULL,-1},
    3544           {NULL,0,NULL,-1},     
    3545           {"Quit      (Q)",      ID_QUIT,NULL,-1},
    3546           {NULL,-1,NULL,-1}
    3547         };
     3549      {NULL,0,NULL,-1},
     3550      {"Save Level (S)",     ID_LEVEL_SAVE,NULL,-1},
     3551      {"Save level as",      ID_LEVEL_SAVEAS,NULL,-1},
     3552      {"Save game",          ID_GAME_SAVE,NULL,-1},
     3553      {"New level",          ID_LEVEL_NEW,NULL,-1},
     3554      {"Resize map",         ID_LEVEL_RESIZE,NULL,-1},
     3555      {NULL,0,NULL,-1},
     3556      {"Suspend non-players",ID_SUSPEND,NULL,-1},
     3557      {"Play mode toggle (TAB)",ID_PLAY_MODE,NULL,-1},
     3558      {NULL,0,NULL,-1},
     3559      {"Save Palettes         ",ID_EDIT_SAVE,NULL,-1},
     3560      {"Start cache profile   ",ID_CACHE_PROFILE,NULL,-1},
     3561      {"End cache profile     ",ID_CACHE_PROFILE_END,NULL,-1},
     3562      {NULL,0,NULL,-1},
     3563      {"Quit      (Q)",      ID_QUIT,NULL,-1},
     3564      {NULL,-1,NULL,-1}
     3565    };
    35483566
    35493567
     
    35653583  {"Toggle map        (m)",      ID_TOGGLE_MAP,NULL,-1},
    35663584//  {"Shrink to 320x200 (F10)",    ID_SMALL_MODE,NULL,-1},
    3567   {"Disable view shifts",        ID_DISABLE_VIEW_SHIFT,&view_shift_disabled,-1}, 
     3585  {"Disable view shifts",        ID_DISABLE_VIEW_SHIFT,&view_shift_disabled,-1},
    35683586//  {"Ultra Smooth draw (U)",      ID_INTERPOLATE_DRAW,  &interpolate_draw,'U'},
    35693587  {"Disable Autolight (A)",      ID_DISABLE_AUTOLIGHT, &disable_autolight,'A'},
     
    35823600          {"Background  (b)",    ID_WIN_BACK,    &backw_on,-1},
    35833601          {"Draw layers (L)",    ID_WIN_LAYERS,  &show_menu_on,-1},
    3584           {"Lighting    (l)",    ID_WIN_LIGHTING,&ledit_on,-1},
    3585           {"Palettes    (p)",    ID_WIN_PALETTES,&pmenu_on,-1},
    3586           {"Objects     (o)",    ID_WIN_OBJECTS, &omenu_on,-1},
    3587           {"Console     (/)",    ID_WIN_CONSOLE, &commandw_on,-1},
    3588           {"Tool Bar    (a)",    ID_WIN_TOOLBAR, &tbw_on,-1},
    3589 //        {"Search      (s)",    ID_SEARCH,      &searchw_on,-1},
    3590           {"Profile     (P)",    ID_PROFILE,     &profile_on,-1},
    3591           {"Save positions",     ID_SAVE_WINDOWS,NULL,-1},
    3592           {NULL,-1,NULL,-1}
    3593         };
     3602      {"Lighting    (l)",    ID_WIN_LIGHTING,&ledit_on,-1},
     3603      {"Palettes    (p)",    ID_WIN_PALETTES,&pmenu_on,-1},
     3604      {"Objects     (o)",    ID_WIN_OBJECTS, &omenu_on,-1},
     3605      {"Console     (/)",    ID_WIN_CONSOLE, &commandw_on,-1},
     3606      {"Tool Bar    (a)",    ID_WIN_TOOLBAR, &tbw_on,-1},
     3607//      {"Search      (s)",    ID_SEARCH,      &searchw_on,-1},
     3608      {"Profile     (P)",    ID_PROFILE,     &profile_on,-1},
     3609      {"Save positions",     ID_SAVE_WINDOWS,NULL,-1},
     3610      {NULL,-1,NULL,-1}
     3611    };
    35943612
    35953613*/
    3596        
     3614
    35973615static pmenu_item *i_recurse(pmi *first)
    35983616{
    35993617  if (first->id==-1)
    36003618    return NULL;
    3601   else 
     3619  else
    36023620    return new pmenu_item(first->id,first->name ? symbol_str(first->name) : 0,first->on_off,first->key,i_recurse(first+1));
    36033621}
    3604    
     3622
    36053623static pmenu *make_menu(int x, int y)
    36063624{
    36073625  return new pmenu(x,y,
    36083626         new pmenu_item(symbol_str("file_top"),new psub_menu(i_recurse(filemenu),NULL),
    3609         new pmenu_item(symbol_str("edit_top"),new psub_menu(i_recurse(editmenu),NULL),
    3610         new pmenu_item(symbol_str("window_top"),new psub_menu(i_recurse(winmenu),NULL),NULL))),screen);
     3627    new pmenu_item(symbol_str("edit_top"),new psub_menu(i_recurse(editmenu),NULL),
     3628    new pmenu_item(symbol_str("window_top"),new psub_menu(i_recurse(winmenu),NULL),NULL))),screen);
    36113629}
    36123630
     
    36283646  if ((dev&EDIT_MODE) && !dev_menu)
    36293647  {
    3630     dev_menu=make_menu(0,yres-wm->font()->height()-5);   
     3648    dev_menu=make_menu(0,yres-wm->font()->height()-5);
    36313649  }
    36323650  else if (!(dev&EDIT_MODE) && dev_menu)
     
    36343652    delete dev_menu;
    36353653    dev_menu=NULL;
    3636   } 
     3654  }
    36373655}
    36383656
  • abuse/trunk/src/game.cpp

    r112 r113  
    19721972                                        ((button *)ev.message.data)->push();
    19731973/*                                        volume_window->inm->redraw();
    1974                                         draw_value(volume_window->screen, WINDOW_FRAME_LEFT + 2, WINDOW_FRAME_TOP + 43,
     1974                                        draw_value(volume_window->screen, 2, 43,
    19751975                                                (volume_window->x2()-volume_window->x1()-1), 8, sfx_volume, 127);
    1976                                         draw_value(volume_window->screen, WINDOW_FRAME_LEFT + 2, WINDOW_FRAME_TOP + 94,
     1976                                        draw_value(volume_window->screen, 2, 94,
    19771977                                                (volume_window->x2()-volume_window->x1()-1), 8, music_volume, 127);
    19781978*/
  • abuse/trunk/src/imlib/jwindow.cpp

    r112 r113  
    405405    l = L >= 0 ? L + left_border() : l - L;
    406406    h = H >= 0 ? H + top_border() : h - H;
    407     //if (!f) { l+=WINDOW_FRAME_LEFT; h+=WINDOW_FRAME_TOP; }
    408407    y = Y >= 0 ? Y : yres - h + Y - top_border() - bottom_border() - 1;
    409408    x = X >= 0 ? X : xres - l + X - left_border() - right_border() - 1;
  • abuse/trunk/src/loadgame.cpp

    r111 r113  
    204204/*  int ih=cash.img(save_buts[0])->height();
    205205  ico_button *buts[MAX_SAVE_GAMES];
    206   int y=WINDOW_FRAME_TOP;
     206  int y=0;
    207207
    208208
    209209  for (i=0;i<total_saved;i++,y+=ih)
    210210  {
    211     buts[i]=new ico_button(WINDOW_FRAME_LEFT,y,ID_LOAD_GAME_NUMBER+i,                 
     211    buts[i]=new ico_button(0,y,ID_LOAD_GAME_NUMBER+i,                 
    212212                           save_buts[i*3+1],save_buts[i*3+1],save_buts[i*3+0],save_buts[i*3+2],NULL);
    213213    buts[i]->set_act_id(ID_LOAD_GAME_PREVIEW+i);
  • abuse/trunk/src/menu.cpp

    r112 r113  
    287287static void create_volume_window()
    288288{
    289 /*  int vx=WINDOW_FRAME_LEFT,vy=WINDOW_FRAME_TOP+wm->font()->height()*2,scroller_height=130,bh=wm->font()->height()+5;
     289/*  int vx=0,vy=wm->font()->height()*2,scroller_height=130,bh=wm->font()->height()+5;
    290290
    291291  volume_window=wm->new_window(prop->getd("volume_x",xres/2-20),
  • abuse/trunk/src/netcfg.cpp

    r111 r113  
    169169{
    170170  ifield *ilist=NULL;
    171   int x=WINDOW_FRAME_LEFT,y=WINDOW_FRAME_TOP;
     171  int x=0,y=0;
    172172 
    173   jwindow *sv=wm->new_window(50,80,-1,-1,new button(WINDOW_FRAME_LEFT,WINDOW_FRAME_TOP,NET_SERVER,symbol_str("server"),
    174                                      new button(WINDOW_FRAME_LEFT,WINDOW_FRAME_TOP+wm->font()->height()*2,NET_CLIENT,symbol_str("client"),
    175                                      new button(WINDOW_FRAME_LEFT,WINDOW_FRAME_TOP+wm->font()->height()*4,NET_SINGLE,symbol_str("single_play"),
    176                                      new button(WINDOW_FRAME_LEFT,WINDOW_FRAME_TOP+wm->font()->height()*6,NET_CANCEL,symbol_str("cancel_net"),
     173  jwindow *sv=wm->new_window(50,80,-1,-1,new button(0,0,NET_SERVER,symbol_str("server"),
     174                                     new button(0,wm->font()->height()*2,NET_CLIENT,symbol_str("client"),
     175                                     new button(0,wm->font()->height()*4,NET_SINGLE,symbol_str("single_play"),
     176                                     new button(0,wm->font()->height()*6,NET_CANCEL,symbol_str("cancel_net"),
    177177                                                NULL)))),symbol_str("Networking"));
    178178
  • abuse/trunk/src/unixnfc.cpp

    r106 r113  
    487487
    488488
    489       jwindow *j=wm->new_window(0,yres/2,-1,-1,new info_field(WINDOW_FRAME_LEFT,
    490                                                                    WINDOW_FRAME_TOP,
    491                                                                    0,"Clients are re-syncing, please wait...",NULL));
     489      jwindow *j=wm->new_window(0,yres/2,-1,-1,new info_field(0, 0, 0, "Clients are re-syncing, please wait...",NULL));
    492490      wm->flush_screen();
    493491      if (!reload_start()) return ;
     
    565563        {
    566564          abort=wm->new_window(0,yres/2,-1,wm->font()->height()*4,
    567                                new info_field(WINDOW_FRAME_LEFT,
    568                                               WINDOW_FRAME_TOP,
    569                                               0,"Waiting for data...",
    570                                               new button(WINDOW_FRAME_LEFT,
    571                                                          WINDOW_FRAME_TOP+wm->font()->height()+5,ID_NET_DISCONNECT,
     565                               new info_field(0, 0, 0,"Waiting for data...",
     566                                              new button(0, wm->font()->height()+5,ID_NET_DISCONNECT,
    572567                                                         "Disconnect slackers",NULL)),"Error");   
    573568          wm->flush_screen();
Note: See TracChangeset for help on using the changeset viewer.