Changeset 113
- Timestamp:
- Mar 16, 2008, 2:41:59 PM (14 years ago)
- Location:
- abuse/trunk/src
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
abuse/trunk/src/dev.cpp
r111 r113 33 33 #include "chat.hpp" 34 34 35 /* FIXME: get rid of this */36 #define WINDOW_FRAME_LEFT 037 #define WINDOW_FRAME_TOP 038 39 35 #define make_above_tile(x) ((x)|0x4000) 40 36 char 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, … … 54 50 current_space=PERM_SPACE; 55 51 56 57 char prog[50]; 52 53 char prog[50]; 58 54 char const *cs=prog; 59 55 strcpy(prog,"(setq section 'game_section)\n"); … … 109 105 f->put_image(screen,cash.img(id),x,y,1); 110 106 else 111 cash.img(id)->put_image(screen,x,y); 107 cash.img(id)->put_image(screen,x,y); 112 108 } 113 109 virtual int width() { return cash.img(id)->width(); } … … 142 138 { 143 139 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) 145 141 { if (player_list) sx=player_list->ambient; } 146 142 virtual void scroll_event(int newx, image *screen) … … 159 155 int confirm_quit() 160 156 { 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); 174 201 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; 197 203 } 198 204 … … 200 206 { 201 207 int total=0,number=0; 202 game_object *c; 208 game_object *c; 203 209 for (c=current_level->first_object();c;c=c->next) 204 210 { … … 213 219 void dev_controll::search_backward() 214 220 { ; 215 } 221 } 216 222 217 223 … … 222 228 (the_game->first_view->cx2-the_game->first_view->cx1+1)*2; 223 229 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; 225 231 delete small_render; 226 232 small_render=NULL; … … 238 244 239 245 small_render=new image((the_game->first_view->cx2-the_game->first_view->cx1+1), 240 246 (the_game->first_view->cy2-the_game->first_view->cy1+1),NULL,2); 241 247 } 242 248 … … 260 266 } else 261 267 { 262 game_object *first,*find=NULL; 268 game_object *first,*find=NULL; 263 269 if (!search_object || search_object->otype!=type) 264 270 first=current_level->first_object(); … … 267 273 for (;!find && first;first=first->next) 268 274 if (first->otype==type) 269 275 find=first; 270 276 int loop=0; 271 277 if (!find) 272 278 { 273 274 275 276 277 278 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; 279 285 } 280 286 if (find) 281 287 { 282 288 search_object=find; 283 289 show_object_number(search_object); 284 290 } 285 291 else 286 292 { 287 288 293 the_game->show_help("No object matching name exsist in level\n"); 294 289 295 } 290 296 } … … 299 305 else if (wm->key_pressed(JK_ALT_L) || wm->key_pressed(JK_ALT_R)) 300 306 return x-(x%the_game->ftile_width())+the_game->ftile_width()/2; 301 else return x; 307 else return x; 302 308 } 303 309 … … 313 319 void dev_controll::make_ambient() 314 320 { 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"); 319 327 } 320 328 … … 324 332 { 325 333 put_string("unchop x y, size x y,\n" 326 327 } else 334 "load, esave, name\n"); 335 } else 328 336 { 329 337 event ev; … … 352 360 for (int i=0;i<DEV_MODES;i++) 353 361 dev_mode_icon[i]=cash.reg(artf,dev_mode_icon_names[i],SPEC_IMAGE,0); 354 362 355 363 } 356 364 … … 382 390 if (y+new_height>cy2) 383 391 new_height-=y+new_height-cy2; 384 392 385 393 386 394 for (iy=iy_start;new_height>0;new_height--,y++,iy+=ystep) … … 389 397 sl2=screen->scan_line(y)+x; 390 398 for (ix=ix_start,sx=0;sx<new_width;sx++,ix+=xstep,sl2++) 391 *sl2=sl1[ix>>16]; 399 *sl2=sl1[ix>>16]; 392 400 } 393 401 } … … 421 429 if (y+new_height>cy2) 422 430 new_height-=y+new_height-cy2; 423 431 424 432 uint8_t d; 425 433 for (iy=iy_start;new_height>0;new_height--,y++,iy+=ystep) … … 459 467 { 460 468 int32_t vx=v->xoff(),vy=v->yoff(); 461 469 462 470 if (dev&DRAW_LINKS) 463 471 { 464 472 for (light_source *f=first_light_source;f;f=f->next) 465 473 { 466 467 468 469 470 471 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 } 473 481 } 474 482 } … … 477 485 { 478 486 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); 481 489 } 482 490 … … 486 494 int l=i->width()/2,h=i->height()/2; 487 495 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); 489 497 screen->rectangle(rx1-l,ry1-h,rx1+l,ry1+h,wm->bright_color()); 490 498 } … … 494 502 for (o=current_level->first_object();o;o=o->next) 495 503 { 496 497 498 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 501 509 if (dev&DRAW_LINKS) 502 510 { … … 504 512 for (o=current_level->first_object();o;o=o->next) 505 513 { 506 507 508 509 510 511 512 the_game->game_to_mouse(other->x,other->y,current_view,x2,y2); 513 514 515 516 517 518 519 520 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 } 522 530 523 531 } … … 525 533 526 534 if (selected_object) 527 { 528 selected_object->picture_space(x1,y1,x2,y2); 535 { 536 selected_object->picture_space(x1,y1,x2,y2); 529 537 int32_t rx1,ry1,rx2,ry2; 530 538 the_game->game_to_mouse(x1,y1,v,rx1,ry1); … … 535 543 for (int i=0;i<selected_object->total_objects();i++) 536 544 { 537 538 539 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 } 542 550 543 551 … … 564 572 void dev_controll::update_memprof() 565 573 { 566 if (memprof) 567 { 574 if(!memprof) 575 return; 576 568 577 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; 574 582 memprof->clear(); 575 583 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++; 583 592 } 584 593 jfree(st); 585 594 jfree(ch); 586 595 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); 592 599 } 593 600 … … 607 614 jfree(ch); 608 615 memprof=wm->new_window(0,0,total*2+20,100,NULL); 609 update_memprof(); 616 update_memprof(); 610 617 } 611 618 } … … 631 638 } 632 639 633 tool_picker *tp=new tool_picker( WINDOW_FRAME_LEFT,WINDOW_FRAME_TOP,634 635 636 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); 637 644 tbw=wm->new_window(prop->getd("toolbar x",-1), 638 645 prop->getd("toolbar y",-1),-1,-1,tp); 639 646 tp->set_x(setx,tbw->screen); 640 647 } … … 643 650 void dev_controll::toggle_show_menu() 644 651 { 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 } 670 689 671 690 char **listable_objs=NULL; … … 674 693 void dev_controll::toggle_omenu() 675 694 { 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 } 710 731 711 732 static int get_omenu_item(int x) … … 719 740 void dev_controll::toggle_pmenu() 720 741 { 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 } 746 772 747 773 748 774 void dev_controll::toggle_fgw() 749 775 { 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); 757 793 f_tp->reverse(); 758 794 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 799 void 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"); 763 806 } 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 { 783 808 wm->close_window(music_window); 784 809 music_window=NULL; … … 788 813 void dev_controll::toggle_bgw() 789 814 { 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")); 808 834 } 809 835 810 836 void dev_controll::toggle_search_window() 811 837 { 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 } else829 {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; 838 864 } 839 865 … … 847 873 { 848 874 scale_mult=1; 849 scale_div=1; 875 scale_div=1; 850 876 dev=0; 851 877 int i; … … 854 880 855 881 for (i=1;i<argc;i++) 856 { 882 { 857 883 if (!strcmp(argv[i],"-edit")) 858 884 { 859 dev|=EDIT_MODE; 885 dev|=EDIT_MODE; 860 886 start_edit=1; 861 887 start_running=1; … … 868 894 } 869 895 else if (!strcmp(argv[i],"-fwin")) 870 open_fwin=1; 896 open_fwin=1; 871 897 else if (!strcmp(argv[i],"-show_mem")) 872 start_mem=1; 898 start_mem=1; 873 899 else if (!strcmp(argv[i],"-bwin")) 874 open_bwin=1; 900 open_bwin=1; 875 901 else if (!strcmp(argv[i],"-owin")) 876 open_owin=1; 902 open_owin=1; 877 903 else if (!strcmp(argv[i],"-nodelay")) 878 904 start_nodelay=1; … … 880 906 /* else if (!strcmp(argv[i],"-scale")) 881 907 { 882 i++; 908 i++; 883 909 scale_mult=atoi(argv[i++]); 884 910 scale_div=atoi(argv[i]); … … 893 919 demo_start=1; 894 920 895 } 921 } 896 922 897 923 if (get_option("-no_autolight")) … … 938 964 search_object = NULL; 939 965 memprof=NULL; 940 oedit=NULL; 966 oedit=NULL; 941 967 forew=NULL; 942 backw=NULL; 943 omenu=NULL; 968 backw=NULL; 969 omenu=NULL; 944 970 ledit=NULL; 945 971 pmenu=NULL; … … 961 987 the_game->draw(); 962 988 } 963 989 964 990 dev_console=new dev_term(50,18,this); 965 991 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); 967 993 968 994 if (get_option("-nolight")) … … 980 1006 981 1007 void dev_controll::load_stuff() 982 { 1008 { 983 1009 if (dev & EDIT_MODE) 984 1010 { … … 1004 1030 if (command[0]=='(') // is this a lisp command? 1005 1031 { 1006 eval(compile(command)); 1032 eval(compile(command)); 1007 1033 return ; 1008 1034 } … … 1018 1044 while (o) 1019 1045 { 1020 1021 1022 1023 1024 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; 1025 1051 } 1026 1052 } … … 1034 1060 int i; 1035 1061 for (i=0;i<total_weapons;i++) 1036 1062 f->weapons[i]=-1; 1037 1063 1038 1064 if (total_weapons) … … 1051 1077 int32_t *w=(int32_t *)jmalloc(total_weapons*sizeof(int32_t),"tmp weapon array"); 1052 1078 memcpy(w,player_list->weapons,total_weapons*sizeof(int32_t)); 1053 1079 1054 1080 char tmp[100]; 1055 1081 strcpy(tmp,current_level->name()); … … 1063 1089 player_list->focus->y=cy; 1064 1090 1065 memcpy(player_list->weapons,w,total_weapons*sizeof(int32_t)); 1091 memcpy(player_list->weapons,w,total_weapons*sizeof(int32_t)); 1066 1092 jfree(w); 1067 1093 1068 1094 the_game->need_refresh(); 1069 } 1095 } 1070 1096 } 1071 1097 … … 1078 1104 if (sscanf(command,"%s%d%d",fword,&l,&h)==3) 1079 1105 { 1080 1081 1082 1083 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++) 1084 1110 for (x=0;x<l;x++) 1085 the_game->put_bg(rx+x,ry+y,i++); 1086 1111 the_game->put_bg(rx+x,ry+y,i++); 1112 dprintf("%dx%d\n",l,h); 1087 1113 } else dprintf(symbol_str("unchop1")); 1088 1114 1089 } 1090 } 1115 } 1116 } 1091 1117 if (!strcmp(fword,"center")) 1092 1118 { … … 1102 1128 if (!strcmp(fword,"size")) 1103 1129 { 1104 int l,w; 1130 int l,w; 1105 1131 if (sscanf(command,"%s%d%d",fword,&l,&w)==3) 1106 1132 { 1107 current_level->set_size(l,w); 1133 current_level->set_size(l,w); 1108 1134 dprintf("level is now %dx%d\n",l,w); 1109 1135 } else dprintf(symbol_str("size1")); … … 1115 1141 while (*command && *command!=' ') command++; 1116 1142 if (*command) 1117 current_level->set_name(command+1); 1143 current_level->set_name(command+1); 1118 1144 dprintf(symbol_str("name_now"),current_level->name()); 1119 1145 } … … 1121 1147 { 1122 1148 strcpy(level_file,st); 1123 dprintf("first level will be '%s'\n",level_file); 1149 dprintf("first level will be '%s'\n",level_file); 1124 1150 } 1125 1151 … … 1130 1156 1131 1157 dprintf("loading '%s'\n",st); 1132 the_game->load_level(st); 1158 the_game->load_level(st); 1133 1159 current_level->unactivate_all(); 1134 1160 … … 1138 1164 if (!strcmp(fword,"mem")) 1139 1165 { 1140 if (st[0]) 1166 if (st[0]) 1141 1167 show_char_mem(st); 1142 1168 else show_mem(); … … 1150 1176 1151 1177 if (!strcmp(fword,"delete")) 1152 { 1178 { 1153 1179 if (selected_object) 1154 1180 { … … 1156 1182 the_game->show_help(symbol_str("nd_player")); 1157 1183 else 1158 { 1159 1160 1161 1162 1163 1164 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 } 1167 1193 } 1168 1194 } else if (selected_light) … … 1170 1196 if (!edit_light) 1171 1197 { 1172 1173 1198 if (current_level) 1199 { 1174 1200 current_level->remove_light(selected_light); 1175 1176 1177 1201 if (S_DELETE_SND>0) cash.sfx(S_DELETE_SND)->play(sfx_volume/2); 1202 } 1203 else 1178 1204 delete_light(selected_light); 1179 1180 } 1205 selected_light=NULL; 1206 } 1181 1207 } else the_game->show_help(symbol_str("d_nosel")); 1182 1208 the_game->need_refresh(); … … 1209 1235 if (!strcmp(fword,"move")) 1210 1236 { 1211 if (selected_object) 1212 edit_object=selected_object; 1237 if (selected_object) 1238 edit_object=selected_object; 1213 1239 1214 1240 if (edit_object) 1215 1241 state=DEV_MOVE_OBJECT; 1216 1242 else the_game->show_help("No object selected"); 1217 1243 1218 1244 } 1219 1245 if (!strcmp(fword,"move_light")) 1220 1246 { 1221 if (selected_light) 1222 edit_light=selected_light; 1247 if (selected_light) 1248 edit_light=selected_light; 1223 1249 1224 1250 if (edit_light) 1225 1251 state=DEV_MOVE_LIGHT; 1226 1252 else the_game->show_help("No light selected"); 1227 1228 } 1229 1230 1253 1254 } 1255 1256 1231 1257 if (!strcmp(fword,"clear_auto")) 1232 1258 { … … 1242 1268 the_game->ftile_on(dlastx,dlasty,x,y); 1243 1269 if (x>=0 && y>=0 && x<current_level->foreground_width() && 1244 1270 y<current_level->foreground_height()) 1245 1271 { 1246 1272 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); 1249 1275 the_game->need_refresh(); 1250 1276 } … … 1256 1282 the_game->ftile_on(dlastx,dlasty,x,y); 1257 1283 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 1262 1288 if (!strcmp(fword,"fg_add")) 1263 1289 { … … 1269 1295 if (cur_fg>=nforetiles) cur_fg=nforetiles-1; 1270 1296 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 } 1274 1300 } 1275 1301 … … 1290 1316 game_object *which=selected_object; 1291 1317 if (!selected_object) which=edit_object; 1292 if (which) 1318 if (which) 1293 1319 current_level->to_front(which); 1294 1320 else the_game->show_help(symbol_str("forward?")); … … 1299 1325 game_object *which=selected_object; 1300 1326 if (!selected_object) which=edit_object; 1301 if (which) 1327 if (which) 1302 1328 current_level->to_back(which); 1303 else the_game->show_help(symbol_str("back?")); 1329 else the_game->show_help(symbol_str("back?")); 1304 1330 } 1305 1331 … … 1308 1334 game_object *which=selected_object; 1309 1335 if (!selected_object) which=edit_object; 1310 if (which) 1336 if (which) 1311 1337 { 1312 1338 int x; 1313 1339 if (*st && sscanf(st,"%d",&x)!=EOF) 1314 1340 which->change_aitype(x); 1315 else 1316 { 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 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 } 1341 1367 the_game->need_refresh(); 1342 1368 } 1343 1369 else the_game->show_help(symbol_str("aitype")); 1344 1370 } 1345 1346 1347 1371 } 1348 1372 … … 1350 1374 void dev_controll::toggle_light_window() 1351 1375 { 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")); 1396 1415 } 1397 1416 … … 1399 1418 { 1400 1419 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; 1402 1421 if (figures[o->otype]->total_fields) 1403 1422 { … … 1407 1426 if( strlen(figures[o->otype]->fields[i]->descript_name) > (unsigned)maxl ) 1408 1427 maxl=strlen(figures[o->otype]->fields[i]->descript_name); 1409 1428 1410 1429 int owh=wh; 1411 1430 ifield *first=NULL,*last=NULL; … … 1415 1434 strcpy(tmp,figures[o->otype]->fields[i]->descript_name); 1416 1435 for (int j=maxl-strlen(figures[o->otype]->fields[i]->descript_name);j;j--) 1417 strcat(tmp," "); 1436 strcat(tmp," "); 1418 1437 int er; 1419 1438 ifield *p=new text_field(wl,wh,ID_NULL,tmp,"######", 1420 1421 1439 (double)o->get_var_by_name(figures[o->otype]->fields[i]->real_name,er), 1440 NULL); 1422 1441 if (last) 1423 1442 last->next=p; … … 1426 1445 last=p; 1427 1446 wh+=th; 1428 } 1447 } 1429 1448 aiw=wm->new_window(prop->getd("ai x",0), 1430 1431 -1,-1, 1449 prop->getd("ai y",0), 1450 -1,-1, 1432 1451 new button(wl,owh-20,DEV_AI_OK,cash.img(dev_ok),first),"ai"); 1433 1452 … … 1436 1455 { 1437 1456 aiw=wm->new_window(prop->getd("ai x",0), 1438 1439 1457 prop->getd("ai y",0), 1458 -1,-1, 1440 1459 new button(wl,wh-20,DEV_AI_OK,cash.img(dev_ok), 1441 1460 new text_field(wl,wh+th*0, DEV_AI_XVEL, symbol_str("ai_xvel"),"#####",(double)o->xvel(), … … 1450 1469 new text_field(wl,wh+th*9,DEV_AI_STATE, symbol_str("ai_state"),"####",(double)o->aistate(), 1451 1470 new text_field(wl,wh+th*10,DEV_AI_FADE, symbol_str("ai_fade"),"####",(double)o->fade_count(), 1452 1471 NULL)))))))))))),"ai"); 1453 1472 } 1454 1473 … … 1468 1487 edit_light=NULL; 1469 1488 } 1470 if (l==selected_light) 1489 if (l==selected_light) 1471 1490 selected_light=NULL; 1472 1491 } … … 1500 1519 { 1501 1520 if (aiw) 1502 { 1521 { 1503 1522 game_object *o=ai_object; 1504 1523 int32_t x; … … 1507 1526 if (figures[o->otype]->total_fields) 1508 1527 { 1509 1510 1511 1512 1513 1514 1515 1516 1517 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 } 1519 1538 } 1520 1539 else 1521 1540 { 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 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); 1537 1556 } 1538 1557 } … … 1556 1575 if (!current_level) return ; 1557 1576 current_area=current_level->area_list=new area_controller(gx,gy, 1558 1559 1560 current_level->area_list); 1577 the_game->ftile_width(), 1578 the_game->ftile_height(), 1579 current_level->area_list); 1561 1580 the_game->need_refresh(); 1562 1581 state=DEV_DRAG_AREA_BOTTOM; … … 1572 1591 1573 1592 if (current_area && read_values) 1574 { 1593 { 1575 1594 current_area->ambient=atoi(area_win->read(DEV_AREA_AMBIENT)); 1576 1595 current_area->ambient_speed=atoi(area_win->read(DEV_AREA_AMBIENT_SPEED)); … … 1579 1598 current_area->view_xoff_speed=atoi(area_win->read(DEV_AREA_VIEW_XOFF_SPEED)); 1580 1599 current_area->view_yoff_speed=atoi(area_win->read(DEV_AREA_VIEW_YOFF_SPEED)); 1581 } 1600 } 1582 1601 wm->close_window(area_win); 1583 1602 area_win=NULL; … … 1600 1619 the_game->game_to_mouse(a->x+a->w,a->y+a->h,v,x2,y2); 1601 1620 if (abs(x1-mx)<2 && abs(y1-my)<2) 1602 { find=a; 1621 { find=a; find_top=1; } 1603 1622 else if (abs(x2-mx)<2 && abs(y2-my)<2) 1604 { find=a; 1605 } 1623 { find=a; find_top=0; } 1624 } 1606 1625 1607 1626 time_marker now; … … 1609 1628 last_area_click.get_time(); 1610 1629 if (find && current_area && dc) 1611 { 1630 { 1612 1631 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; 1615 1633 area_win=wm->new_window(prop->getd("area_box x",0), 1616 1617 1618 1619 1620 new button(wl+bw*1,wh-8,DEV_AREA_DELETE,cash.img(dev_del), 1621 1622 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, 1623 1641 new text_field(wl,wh+th*2,DEV_AREA_AMBIENT_SPEED, symbol_str("a_aspeed"),"******",current_area->ambient_speed, 1624 1642 new text_field(wl,wh+th*3,DEV_AREA_VIEW_XOFF, symbol_str("a_view_xoff"),"******",current_area->view_xoff, … … 1626 1644 new text_field(wl,wh+th*5,DEV_AREA_VIEW_XOFF_SPEED, symbol_str("a_view_xspd"),"******",current_area->view_xoff_speed, 1627 1645 new text_field(wl,wh+th*6,DEV_AREA_VIEW_YOFF_SPEED, symbol_str("a_view_yspd"),"******",current_area->view_yoff_speed, 1628 1646 NULL))))))))); 1629 1647 } else if (find) 1630 1648 { … … 1651 1669 prop->setd("oedit y",oedit->y); 1652 1670 wm->close_window(oedit); 1653 oedit=NULL; 1671 oedit=NULL; 1654 1672 edit_object=NULL; 1655 1673 } … … 1678 1696 { 1679 1697 dlastx=last_demo_mx; 1680 dlasty=last_demo_my; 1698 dlasty=last_demo_my; 1681 1699 } 1682 1700 if (dev_console && dev_console->handle_event(ev)) … … 1701 1719 sshot_fcount=0; 1702 1720 the_game->show_help(symbol_str("seqs_on")); 1703 } 1721 } 1704 1722 } 1705 1723 … … 1709 1727 { 1710 1728 if (!ev.mouse_button) 1711 state=DEV_SELECT; 1729 state=DEV_SELECT; 1712 1730 } break; 1713 1731 1714 1732 case DEV_CREATE_OBJECT : 1715 1733 { 1716 if (!ev.mouse_button) 1734 if (!ev.mouse_button) 1717 1735 state=DEV_MOVE_OBJECT; 1718 1736 } break; … … 1725 1743 else 1726 1744 { 1727 1728 1729 the_game->mouse_to_game(last_demo_mx,last_demo_my,edit_object->x,edit_object->y); 1730 1731 1732 1733 1734 1735 1736 1737 selected_object=edit_object=NULL; 1738 1739 1740 1741 1742 1743 1744 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 : 1752 1770 { 1753 1771 if (edit_light) 1754 1772 { 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 { 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 else if (edit_light->xshift>0) 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 else if (edit_light->yshift>0) 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 } 1821 1822 1823 1824 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 } 1828 1846 } 1829 1847 … … 1837 1855 if (current_area) 1838 1856 { 1839 1840 1841 1842 { 1843 1844 1845 1846 1847 current_area->h=gy-current_area->y; 1848 1849 1850 1851 1852 1853 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 } 1855 1873 } 1856 1874 } break; … … 1860 1878 if (current_area) 1861 1879 { 1862 1863 1864 1865 { 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 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 } 1878 1896 } 1879 1897 } break; … … 1883 1901 if (dev&EDIT_MODE) 1884 1902 { 1885 game_object *old=selected_object; 1886 1887 1888 { 1889 1890 1891 1892 1893 1894 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) 1895 1913 selected_object=current_level->find_object(rx,ry); 1896 1897 1898 1899 1900 1901 1902 the_game->need_refresh(); 1903 1904 1905 1906 1907 1908 1909 1910 1911 if (xs>=0 && ys>=0 && xs<current_level->foreground_width() && 1912 ys<current_level->foreground_height()) 1913 1914 1915 1916 1917 1918 1919 if (xs>=0 && ys>=0 && xs<current_level->background_width() && 1920 1921 1922 1923 1924 1925 1926 1927 pick_handle_input(ev); 1928 1929 1930 1931 the_game->need_refresh(); 1932 1933 1934 1935 1936 1937 1938 if (edit_object && edit_object!=selected_object) 1939 1940 1941 1942 1943 1944 int bw=20+6,bh=16+6,wl=WINDOW_FRAME_LEFT,wh=WINDOW_FRAME_TOP;1945 1946 1947 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 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 1965 1966 1967 edit_object=selected_object; 1968 1969 1970 1971 1972 1973 1974 1975 1976 int bw=20+6,bh=16+6,wl=WINDOW_FRAME_LEFT,wh=WINDOW_FRAME_TOP,th=wm->font()->height()+4;1977 1978 1979 1980 1981 1982 1983 1984 1985 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 1996 1997 1998 1999 2000 2001 2002 { 2003 2004 2005 2006 2007 } 2008 2009 { 2010 2011 2012 2013 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 } 2018 2036 } 2019 2037 } … … 2027 2045 { 2028 2046 switch (ev.message.id) 2029 { 2030 2031 2032 2033 case ID_DMODE_LINE : 2034 2035 case ID_DMODE_BAR : 2036 2037 2038 2039 2040 /* 2041 2042 2043 2044 else 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 { 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 } break; 2085 2086 2087 2088 2089 the_game->need_refresh(); 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 wm->push_event(new event(ID_LEVEL_SAVE,NULL)); 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 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 2157 2158 2159 2160 2161 2162 if (current_level) 2163 delete current_level; 2164 2165 2166 2167 2168 2169 2170 int wl=WINDOW_FRAME_LEFT,wt=WINDOW_FRAME_TOP,h=wm->font()->height()+8;2171 2172 new text_field(wl,wt+h*0,ID_MESS_STR1,symbol_str("width_"),"****",2173 2174 new text_field(wl,wt+h*1,ID_MESS_STR2,symbol_str("height_"),"****",2175 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 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 the_game->need_refresh(); 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 int wl=WINDOW_FRAME_LEFT,wt=WINDOW_FRAME_TOP,h=wm->font()->height()+8;2223 2224 new text_field(wl,wt+h*0,ID_RECORD_DEMO_FILENAME,2225 2226 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 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; 2231 2249 2232 2250 case ID_RECORD_DEMO_OK : 2233 2234 2235 wm->push_event(new event(ID_CANCEL,NULL)); // close window 2236 2237 2238 2239 2240 2241 2242 int wl=WINDOW_FRAME_LEFT,wt=WINDOW_FRAME_TOP,h=wm->font()->height()+8;2243 2244 new text_field(wl,wt+h*0,ID_PLAY_DEMO_FILENAME,2245 2246 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 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; 2251 2269 2252 2270 case ID_PLAY_DEMO_OK : 2253 2254 2255 2256 2257 } break; 2258 2259 2260 2261 2262 2263 int wl=WINDOW_FRAME_LEFT,wt=WINDOW_FRAME_TOP,h=wm->font()->height()+8;2264 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 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 int wl=WINDOW_FRAME_LEFT,wt=WINDOW_FRAME_TOP,h=wm->font()->height()+8;2284 2285 2286 new info_field(wl,wt,ID_NULL,2287 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 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 case ID_INTERPOLATE_DRAW : 2315 2316 2317 2318 2319 case ID_DISABLE_AUTOLIGHT : 2320 2321 2322 2323 2324 2325 2326 2327 2328 int wl=WINDOW_FRAME_LEFT,wt=WINDOW_FRAME_TOP,h=wm->font()->height()+8;2329 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 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 do_command("clear_weapons",ev); 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 else the_game->show_help(symbol_str("pal_unlock")); 2383 2384 2385 2386 2387 2388 2389 2390 2391 else the_game->show_help(symbol_str("vs_en")); 2392 } break; 2393 2394 2395 { 2396 2397 2398 2399 { 2400 2401 2402 2403 { 2404 2405 2406 2407 { 2408 2409 2410 2411 { 2412 2413 2414 2415 2416 toggle_show_menu(); 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 the_game->need_refresh(); 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 the_game->need_refresh(); 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 the_game->need_refresh(); 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 wm->close_window(ledit); ledit=NULL; 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 state=DEV_MOVE_LIGHT; 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 { 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 state=DEV_MOVE_OBJECT; 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 strcpy(cmd,commandw->inm->get(DEV_COMMAND)->read()); 2600 2601 2602 wm->close_window(commandw); 2603 2604 2605 2606 2607 2608 2609 2610 { profile_toggle(); 2611 profile_on=!profile_on; 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 { dev=dev^DRAW_LIGHTS; the_game->need_refresh(); } break; 2630 2631 2632 2633 2634 case DEV_CREATE : 2635 { 2636 2637 2638 2639 2640 2641 dev|=(EDIT_MODE | DRAW_PEOPLE_LAYER); 2642 } 2643 break; 2644 2645 2646 2647 int val=((pick_list *)ev.message.data)->get_selection(); 2648 2649 2650 2651 case DEV_MUSIC_PICKLIST : 2652 { 2653 /* 2654 2655 2656 current_song->play();*/2657 } 2658 break; 2659 2660 case DEV_OEDIT_OK : 2661 2662 2663 case DEV_OEDIT_DELETE : 2664 2665 2666 2667 2668 2669 2670 2671 case DEV_OEDIT_FRONT : 2672 2673 2674 close_oedit_window(); 2675 2676 2677 2678 case DEV_OEDIT_BACK : 2679 2680 2681 close_oedit_window(); 2682 2683 2684 2685 case DEV_OEDIT_MOVE : 2686 2687 2688 2689 2690 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; 2693 2711 } 2694 2712 } break; … … 2698 2716 { 2699 2717 if (ev.window) 2700 { 2701 2702 2703 2704 prop->setd("commandw y",commandw->y); 2705 wm->close_window(commandw); 2706 commandw=NULL; 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 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 } 2724 2742 } 2725 2743 break; … … 2729 2747 { 2730 2748 if (!edit_object && link_object && selected_object && link_object!=selected_object) 2731 2732 2733 2734 2735 2736 2737 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; 2738 2756 } 2739 2757 } break; 2740 2758 case EV_KEY : 2741 { 2759 { 2742 2760 if (backw && ev.window==backw) 2743 2761 { if (ev.key=='-' && bg_scale<the_game->btile_height()/2) 2744 2745 2746 2747 2748 2749 2750 2751 2752 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(); } 2753 2771 } 2754 2772 if (forew && ev.window==forew) 2755 2773 { if (ev.key=='-' && fg_scale<the_game->ftile_height()/2) 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 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(); } 2772 2790 } 2773 2791 if (ev.window==NULL || ev.window==pmenu || 2774 2775 { 2776 2777 2778 2779 case 'n' : current_level->next_focus(); break; 2780 // case '/' : if (dev_console) dev_console->toggle(); break;2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 case 'M' : toggle_music_window(); break; 2791 2792 2793 2794 2795 2796 if (oedit) wm->push_event(new event(DEV_OEDIT_OK,NULL)); 2797 2798 2799 2800 2801 case 'o' : toggle_omenu(); break; 2802 2803 2804 2805 2806 case 'p' : toggle_pmenu(); break; 2807 2808 2809 case '.' : 2810 { 2811 2812 2813 2814 2815 2816 2817 2818 dev|=(EDIT_MODE | DRAW_PEOPLE_LAYER); 2819 2820 } 2821 break; 2822 2823 2824 2825 case 'i' : 2826 { 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 case 'C' : 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 case 'w' : 2871 { 2872 2873 2874 2875 2876 2877 2878 2879 2880 if (selected_object && selected_object->total_objects()) 2881 2882 2883 2884 2885 2886 if (selected_object && selected_object->total_objects()) 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 case 'z' : do_command("clear_weapons",ev); break; 2903 2904 2905 2906 2907 2908 2909 2910 2911 case ' ' : 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 } break; 2933 } 2934 case 'x' : 2935 2936 if (selected_object) 2937 2938 2939 2940 2941 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 2948 2966 2949 2967 } … … 2958 2976 2959 2977 2960 pal_win::pal_win(void *args) 2978 pal_win::pal_win(void *args) 2961 2979 { 2962 2980 int i=0; 2963 2981 Cell *ao=(Cell *)args; 2964 2982 2965 2983 name=strcpy((char *)jmalloc(strlen(lstring_value(CAR(args)))+1, 2966 2984 "pal name"),lstring_value(CAR(args))); 2967 2985 ao=CDR(ao); 2968 2986 scale=w=h=1; 2969 2987 x=y=0; 2970 2988 2971 2989 if (!NILP(ao)) 2972 2990 { … … 2977 2995 if (!NILP(ao)) 2978 2996 { 2979 2980 2981 2982 2983 2984 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 } 2986 3004 } 2987 3005 } … … 2996 3014 { 2997 3015 if (i>w*h) 2998 { 3016 { 2999 3017 lbreak("to many parameters to add_palette "); 3000 3018 exit(0); … … 3003 3021 // make sure the tile that they suggested exists 3004 3022 if (pat[i]<=0 || pat[i]>nforetiles || foretiles[pat[i]]<0) 3005 pat[i]=0; 3023 pat[i]=0; 3006 3024 ao=CDR(ao); 3007 3025 i++; … … 3013 3031 3014 3032 void pal_win::open_window() 3015 { 3033 { 3016 3034 if (me) close_window(); 3017 3035 me=wm->new_window(x,y,w*f_wid/scale,h*f_hi/scale,NULL,name); … … 3028 3046 wm->close_window(me); 3029 3047 me=NULL; 3030 3048 3031 3049 } 3032 3050 } … … 3043 3061 for (i=0;i<w*h;i++) 3044 3062 { 3045 im->clear(); 3063 im->clear(); 3046 3064 the_game->get_fg(pat[i])->im->put_image(im,0,0); 3047 3065 scale_put(im,me->screen,me->x1()+(i%w)*tw, 3048 3066 me->y1()+(i/w)*th,tw,th); 3049 3067 if (d==pat[i]) 3050 3068 { 3051 3052 3053 3054 3055 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()); 3056 3074 } 3057 3075 } … … 3061 3079 } 3062 3080 3063 void pal_win::handle_event(event &ev) 3081 void pal_win::handle_event(event &ev) 3064 3082 { 3065 3083 int d=cur_fg; … … 3068 3086 { 3069 3087 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) 3073 3091 dr=1; 3074 3092 } … … 3084 3102 { 3085 3103 if (ev.mouse_button==1) 3086 { 3087 3088 3089 3090 3091 3092 if (dev_cont->forew) 3093 3094 read(DEV_FG_PICKER))->recenter(dev_cont->forew->screen); 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 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 } 3111 3129 } break; 3112 3130 … … 3114 3132 { 3115 3133 switch (ev.key) 3116 3117 3118 { if (scale>1) 3119 3120 3121 3122 3123 3124 3125 3126 { if (scale<the_game->ftile_height()/2) 3127 3128 3129 3130 3131 3132 } break; 3133 case JK_LEFT : 3134 3135 3136 3137 3138 case JK_RIGHT : 3139 3140 3141 3142 resize(1,0); 3143 3144 case JK_UP : 3145 3146 3147 else if (h>1) resize(0,-1); 3148 3149 case JK_DOWN : 3150 3151 if (palettes_locked) 3152 3153 3154 resize(0,1); 3155 } break; 3156 case JK_ESC : close_window();break;3157 case ' ' : 3158 3159 3160 3161 3162 3163 3164 3165 { 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 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 } 3180 3198 } break; 3181 3199 … … 3229 3247 { 3230 3248 FILE *fp=open_FILE("edit.lsp","w"); 3231 if (!fp) 3249 if (!fp) 3232 3250 the_game->show_help(symbol_str("no_edit.lsp")); 3233 3251 else 3234 3252 { 3235 3253 fprintf(fp,"(set_zoom %d)\n",the_game->zoom); 3236 3254 3237 3255 int i; 3238 3256 for (i=0;i<total_pals;i++) … … 3266 3284 static int get_color(int color, int x, int y, pal_win *p) 3267 3285 { 3268 if (p) 3286 if (p) 3269 3287 { 3270 3288 while (x<0) x+=p->width(); … … 3302 3320 if (fgvalue(above[x])==fcolor) 3303 3321 { r=new fill_rec(x,y-1,recs); 3304 recs=r; 3322 recs=r; 3305 3323 } 3306 3324 } … … 3323 3341 if (x>0 && fgvalue(above[x-1])!=fgvalue(fcolor) && fgvalue(above[x])==fgvalue(fcolor)) 3324 3342 { r=new fill_rec(x,y-1,recs); 3325 recs=r; 3343 recs=r; 3326 3344 } 3327 3345 } … … 3330 3348 if (x>0 && fgvalue(below[x-1])!=fgvalue(fcolor) && fgvalue(below[x])==fgvalue(fcolor)) 3331 3349 { r=new fill_rec(x,y+1,recs); 3332 recs=r; 3350 recs=r; 3333 3351 } 3334 3352 } … … 3371 3389 } 3372 3390 if (print) 3373 dprintf("\ntotal=%d\n",t); 3391 dprintf("\ntotal=%d\n",t); 3374 3392 return t; 3375 3393 } … … 3385 3403 if (find<0) 3386 3404 dprintf("No character '%s' defined\n",name); 3387 else 3405 else 3388 3406 get_char_mem(find,1); 3389 3407 3390 3408 } 3391 3409 … … 3400 3418 if (cash.loaded(foretiles[i])) 3401 3419 { 3402 t++; 3403 3420 t++; 3421 s+=cash.foret(foretiles[i])->size(); 3404 3422 } 3405 3423 } … … 3414 3432 if (cash.loaded(foretiles[i])) 3415 3433 { 3416 3417 3434 t++; 3435 s+=cash.backt(backtiles[i])->size(); 3418 3436 } 3419 3437 } 3420 3438 } 3421 3439 dprintf("%d loaded backtiles=%d bytes\n",t,s); 3422 3440 3423 3441 t=0; s=0; 3424 3442 for (i=0;i<total_objects;i++) … … 3435 3453 void dev_cleanup() 3436 3454 { 3437 if (start_edit) 3455 if (start_edit) 3438 3456 prop->save("defaults.prp"); 3439 3457 delete prop; … … 3460 3478 static pmi filemenu[]={ 3461 3479 {"menu1_load", ID_LEVEL_LOAD,NULL,-1}, 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 // 3474 // 3475 {NULL,0,NULL,-1}, 3476 3477 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 }; 3479 3497 3480 3498 … … 3496 3514 {"menu2_map", ID_TOGGLE_MAP,NULL,-1}, 3497 3515 // {"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}, 3499 3517 // {"Ultra Smooth draw (U)", ID_INTERPOLATE_DRAW, &interpolate_draw,'U'}, 3500 3518 {"menu2_alight", ID_DISABLE_AUTOLIGHT, &disable_autolight,'A'}, … … 3513 3531 {"menu3_back", ID_WIN_BACK, &backw_on,-1}, 3514 3532 {"menu3_layers", ID_WIN_LAYERS, &show_menu_on,-1}, 3515 3516 3517 3518 // 3519 3520 // 3521 3522 3523 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 }; 3525 3543 3526 3544 … … 3529 3547 static pmi filemenu[]={ 3530 3548 {"Load Level", ID_LEVEL_LOAD,NULL,-1}, 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 {NULL,0,NULL,-1}, 3545 3546 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 }; 3548 3566 3549 3567 … … 3565 3583 {"Toggle map (m)", ID_TOGGLE_MAP,NULL,-1}, 3566 3584 // {"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}, 3568 3586 // {"Ultra Smooth draw (U)", ID_INTERPOLATE_DRAW, &interpolate_draw,'U'}, 3569 3587 {"Disable Autolight (A)", ID_DISABLE_AUTOLIGHT, &disable_autolight,'A'}, … … 3582 3600 {"Background (b)", ID_WIN_BACK, &backw_on,-1}, 3583 3601 {"Draw layers (L)", ID_WIN_LAYERS, &show_menu_on,-1}, 3584 3585 3586 3587 3588 3589 // 3590 3591 3592 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 }; 3594 3612 3595 3613 */ 3596 3614 3597 3615 static pmenu_item *i_recurse(pmi *first) 3598 3616 { 3599 3617 if (first->id==-1) 3600 3618 return NULL; 3601 else 3619 else 3602 3620 return new pmenu_item(first->id,first->name ? symbol_str(first->name) : 0,first->on_off,first->key,i_recurse(first+1)); 3603 3621 } 3604 3622 3605 3623 static pmenu *make_menu(int x, int y) 3606 3624 { 3607 3625 return new pmenu(x,y, 3608 3626 new pmenu_item(symbol_str("file_top"),new psub_menu(i_recurse(filemenu),NULL), 3609 3610 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); 3611 3629 } 3612 3630 … … 3628 3646 if ((dev&EDIT_MODE) && !dev_menu) 3629 3647 { 3630 dev_menu=make_menu(0,yres-wm->font()->height()-5); 3648 dev_menu=make_menu(0,yres-wm->font()->height()-5); 3631 3649 } 3632 3650 else if (!(dev&EDIT_MODE) && dev_menu) … … 3634 3652 delete dev_menu; 3635 3653 dev_menu=NULL; 3636 } 3654 } 3637 3655 } 3638 3656 -
abuse/trunk/src/game.cpp
r112 r113 1972 1972 ((button *)ev.message.data)->push(); 1973 1973 /* 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, 1975 1975 (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, 1977 1977 (volume_window->x2()-volume_window->x1()-1), 8, music_volume, 127); 1978 1978 */ -
abuse/trunk/src/imlib/jwindow.cpp
r112 r113 405 405 l = L >= 0 ? L + left_border() : l - L; 406 406 h = H >= 0 ? H + top_border() : h - H; 407 //if (!f) { l+=WINDOW_FRAME_LEFT; h+=WINDOW_FRAME_TOP; }408 407 y = Y >= 0 ? Y : yres - h + Y - top_border() - bottom_border() - 1; 409 408 x = X >= 0 ? X : xres - l + X - left_border() - right_border() - 1; -
abuse/trunk/src/loadgame.cpp
r111 r113 204 204 /* int ih=cash.img(save_buts[0])->height(); 205 205 ico_button *buts[MAX_SAVE_GAMES]; 206 int y= WINDOW_FRAME_TOP;206 int y=0; 207 207 208 208 209 209 for (i=0;i<total_saved;i++,y+=ih) 210 210 { 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, 212 212 save_buts[i*3+1],save_buts[i*3+1],save_buts[i*3+0],save_buts[i*3+2],NULL); 213 213 buts[i]->set_act_id(ID_LOAD_GAME_PREVIEW+i); -
abuse/trunk/src/menu.cpp
r112 r113 287 287 static void create_volume_window() 288 288 { 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; 290 290 291 291 volume_window=wm->new_window(prop->getd("volume_x",xres/2-20), -
abuse/trunk/src/netcfg.cpp
r111 r113 169 169 { 170 170 ifield *ilist=NULL; 171 int x= WINDOW_FRAME_LEFT,y=WINDOW_FRAME_TOP;171 int x=0,y=0; 172 172 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"), 177 177 NULL)))),symbol_str("Networking")); 178 178 -
abuse/trunk/src/unixnfc.cpp
r106 r113 487 487 488 488 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)); 492 490 wm->flush_screen(); 493 491 if (!reload_start()) return ; … … 565 563 { 566 564 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, 572 567 "Disconnect slackers",NULL)),"Error"); 573 568 wm->flush_screen();
Note: See TracChangeset
for help on using the changeset viewer.