edit_di.cpp 27 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195
  1. /* $Id$
  2. * MegaZeux
  3. *
  4. * Copyright (C) 1996 Greg Janson
  5. * Copyright (C) 1998 Matthew D. Williams - dbwilli@scsn.net
  6. *
  7. * This program is free software; you can redistribute it and/or
  8. * modify it under the terms of the GNU General Public License as
  9. * published by the Free Software Foundation; either version 2 of
  10. * the License, or (at your option) any later version.
  11. *
  12. * This program is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  15. * General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU General Public License
  18. * along with this program; if not, write to the Free Software
  19. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  20. */
  21. //Dialogs for the world editor.
  22. #include "helpsys.h"
  23. #include "intake.h"
  24. #include "graphics.h"
  25. #include "mouse.h"
  26. #include "edit.h"
  27. #include "robo_ed.h"
  28. #include "boardmem.h"
  29. #include "window.h"
  30. #include "edit_di.h"
  31. #include "data.h"
  32. #include "const.h"
  33. #include "struct.h"
  34. #include <_null.h>
  35. #include "string.h"
  36. //Communial dialog
  37. #define MAX_ELEMS 15
  38. char sdi_types[MAX_ELEMS]={ DE_BUTTON,DE_BUTTON,0,0,0,0,0,0,0,0,0,0,0,0 };
  39. char sdi_xs[MAX_ELEMS]={ 15,37,0,0,0,0,0,0,0,0,0,0,0,0 };
  40. char sdi_ys[MAX_ELEMS]={ 15,15,0,0,0,0,0,0,0,0,0,0,0,0 };
  41. char far *sdi_strs[MAX_ELEMS]={ "OK","Cancel",NULL,NULL,NULL,NULL,NULL,NULL,
  42. NULL,NULL,NULL,NULL,NULL,NULL };
  43. int sdi_p1s[MAX_ELEMS]={ 0,1,0,0,0,0,0,0,0,0,0,0,0,0 };
  44. int sdi_p2s[MAX_ELEMS]={ 0,0,0,0,0,0,0,0,0,0,0,0,0,0 };
  45. void far *sdi_storage[MAX_ELEMS]={ NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
  46. NULL,NULL,NULL,NULL,NULL,NULL };
  47. dialog sdi={
  48. 10,4,69,21,"Edit settings",3,
  49. sdi_types,sdi_xs,sdi_ys,
  50. sdi_strs,sdi_p1s,sdi_p2s,sdi_storage,2 };
  51. //Internal- Reset dialog to above settings
  52. void reset_sdi(void) {
  53. for(int t1=2;t1<MAX_ELEMS;t1++) {
  54. sdi_types[t1]=sdi_xs[t1]=sdi_ys[t1]=sdi_p1s[t1]=sdi_p2s[t1]=0;
  55. sdi_strs[t1]=NULL;
  56. sdi_storage[t1]=NULL;
  57. }
  58. sdi.curr_element=2;
  59. sdi.num_elements=3;
  60. }
  61. #define do_dialog() run_dialog(&sdi,current_pg_seg,0,2)
  62. char far *sci_strs[NUM_STATUS_CNTRS]={
  63. "Status counter 1: ",
  64. "2: ",
  65. "3: ",
  66. "4: ",
  67. "5: ",
  68. "6: " };
  69. //Status counter info
  70. void status_counter_info(void) {
  71. int t1;
  72. set_context(82);
  73. reset_sdi();
  74. for(t1=0;t1<NUM_STATUS_CNTRS;t1++) {
  75. sdi_types[t1+2]=DE_INPUT;
  76. sdi_xs[t1+2]=t1?27:12;
  77. sdi_ys[t1+2]=5+t1;
  78. sdi_strs[t1+2]=sci_strs[t1];
  79. sdi_p1s[t1+2]=COUNTER_NAME_SIZE-1;
  80. sdi_storage[t1+2]=(void far *)
  81. &status_shown_counters[t1*COUNTER_NAME_SIZE];
  82. }
  83. sdi.num_elements=2+NUM_STATUS_CNTRS;
  84. do_dialog();
  85. pop_context();
  86. }
  87. char far *be_strs[4]={
  88. "Board to north:",
  89. "Board to south:",
  90. "Board to east:",
  91. "Board to west:" };
  92. //Board exits
  93. void board_exits(void) {
  94. int t1;
  95. int strg[4];
  96. set_context(83);
  97. reset_sdi();
  98. for(t1=0;t1<4;t1++) {
  99. sdi_types[t1+2]=DE_BOARD;
  100. sdi_xs[t1+2]=12;
  101. sdi_ys[t1+2]=4+(t1<<1);
  102. sdi_strs[t1+2]=be_strs[t1];
  103. sdi_p1s[t1+2]=1;
  104. sdi_storage[t1+2]=(void far *)&(strg[t1]);
  105. if(board_dir[t1]==NO_BOARD) strg[t1]=0;
  106. else strg[t1]=board_dir[t1];
  107. }
  108. sdi.num_elements=6;
  109. if(do_dialog()) {
  110. pop_context();
  111. return;
  112. }
  113. pop_context();
  114. for(t1=0;t1<4;t1++) {
  115. if(strg[t1]==0) board_dir[t1]=NO_BOARD;
  116. else board_dir[t1]=strg[t1];
  117. }
  118. }
  119. char far *sp_strs[7]={
  120. "Viewport X pos: ",
  121. "Viewport Y pos: ",
  122. "Viewport X size:",
  123. "Viewport Y size:",
  124. "Board X size: ",
  125. "Board Y size: ",
  126. "Max size 60x166\nMax size 80x125\nMax size 100x100\nMax size 200x50\nMax size 400x25" };
  127. //Size/pos of board/viewport
  128. void size_pos(void) {
  129. int t1,t2=2;
  130. int strg[7];
  131. set_context(84);
  132. reset_sdi();
  133. for(t1=0;t1<7;t1++) {
  134. sdi_types[t1+2]=DE_NUMBER;
  135. if(t1==6) sdi_types[t1+2]=DE_RADIO;
  136. sdi_xs[t1+2]=15;
  137. sdi_ys[t1+2]=t2++;
  138. if(t1==5) t2++;
  139. sdi_strs[t1+2]=sp_strs[t1];
  140. sdi_storage[t1+2]=(void far *)&(strg[t1]);
  141. if(t1<2) sdi_p1s[t1+2]=0;
  142. else sdi_p1s[t1+2]=1;
  143. }
  144. sdi_p1s[8]=5;
  145. sdi_p2s[2]=79;
  146. sdi_p2s[3]=24;
  147. sdi_p2s[4]=80;
  148. sdi_p2s[5]=25;
  149. sdi_p2s[6]=400;
  150. sdi_p2s[7]=166;
  151. sdi_p2s[8]=16;
  152. strg[0]=viewport_x;
  153. strg[1]=viewport_y;
  154. strg[2]=viewport_xsiz;
  155. strg[3]=viewport_ysiz;
  156. strg[4]=board_xsiz;
  157. strg[5]=board_ysiz;
  158. strg[6]=max_bsiz_mode;
  159. sdi_strs[1]="Center";
  160. sdi.num_elements=9;
  161. do {
  162. redo_it:
  163. t1=do_dialog();
  164. //Fix sizes
  165. if(!t1) {
  166. max_bsiz_mode=strg[6];
  167. convert_max_bsiz_mode();
  168. }
  169. if(strg[4]>max_bxsiz) strg[4]=max_bxsiz;
  170. if(strg[5]>max_bysiz) strg[5]=max_bysiz;
  171. if(strg[2]>strg[4]) strg[2]=strg[4];
  172. if(strg[3]>strg[5]) strg[3]=strg[5];
  173. if((strg[2]+strg[0])>80) strg[2]=80-strg[0];
  174. if((strg[3]+strg[1])>25) strg[3]=25-strg[1];
  175. if(t1==1) {
  176. //Center
  177. strg[0]=40-(strg[2]>>1);
  178. strg[1]=12-(strg[3]>>1);
  179. }
  180. else break;
  181. } while(1);
  182. //Check for size reduction
  183. if((!t1)&&((board_xsiz>strg[4])||(board_ysiz>strg[5])))
  184. if(confirm("Reduce board size- Are you sure?"))
  185. goto redo_it;
  186. sdi_strs[1]="Cancel";
  187. pop_context();
  188. if(t1) return;
  189. viewport_x=strg[0];
  190. viewport_y=strg[1];
  191. viewport_xsiz=strg[2];
  192. viewport_ysiz=strg[3];
  193. board_xsiz=strg[4];
  194. board_ysiz=strg[5];
  195. return;
  196. }
  197. //Dialog- (board info)
  198. //----------------------------------------------------------
  199. // Board name- __________________________
  200. // [ ] Can shoot ( ) Explosions to space
  201. // [ ] Can bomb ( ) Explosions to ash
  202. // [ ] Fire burns space ( ) Explosions to fire
  203. // [ ] Fire burns fakes
  204. // [ ] Fire burns trees ( ) Can save
  205. // [ ] Fire burns brown ( ) Can't save
  206. // [ ] Forest to floor ( ) Can save on sensors
  207. // [ ] Collect bombs
  208. // [ ] Fire burns forever ( ) No overlay
  209. // [ ] Restart if hurt ( ) Normal overlay
  210. // ( ) Static overlay
  211. // Time limit- _00000__!__!_ ( ) Transparent overlay
  212. //
  213. // _OK_ _Cancel_
  214. //
  215. //----------------------------------------------------------
  216. char far *bi_cstr="Can shoot\nCan bomb\nFire burns space\nFire burns fakes\n\
  217. Fire burns trees\nFire burns brown\nForest to floor\nCollect bombs\n\
  218. Fire burns forever\nRestart if hurt";
  219. char far *bi_rstr1="Explosions to space\nExplosions to ash\n\
  220. Explosions to fire\n";
  221. char far *bi_rstr2="Can save\nCan't save\nCan save on sensors";
  222. char far *bi_rstr3="No overlay\nNormal overlay\nStatic overlay\n\
  223. Transparent overlay";
  224. //Board info
  225. void board_info(void) {
  226. char chk[10]={ can_shoot,can_bomb,fire_burn_space,fire_burn_fakes,
  227. fire_burn_trees,fire_burn_brown,forest_becomes,collect_bombs,
  228. fire_burns,restart_if_zapped };
  229. int rad1=explosions_leave,rad2=save_mode,rad3=overlay_mode,
  230. time=time_limit;
  231. char tstr[BOARD_NAME_SIZE];
  232. set_context(85);
  233. reset_sdi();
  234. sdi_types[2]=DE_INPUT;
  235. sdi_types[3]=DE_CHECK;
  236. sdi_types[4]=DE_NUMBER;
  237. sdi_types[5]=DE_RADIO;
  238. sdi_types[6]=DE_RADIO;
  239. sdi_types[7]=DE_RADIO;
  240. sdi_xs[2]=9;
  241. sdi_xs[3]=5;
  242. sdi_xs[4]=5;
  243. sdi_xs[5]=33;
  244. sdi_xs[6]=33;
  245. sdi_xs[7]=33;
  246. sdi_ys[2]=1;
  247. sdi_ys[3]=2;
  248. sdi_ys[4]=13;
  249. sdi_ys[5]=2;
  250. sdi_ys[6]=6;
  251. sdi_ys[7]=10;
  252. sdi_strs[2]="Board name- ";
  253. sdi_strs[3]=bi_cstr;
  254. sdi_strs[4]="Time limit- ";
  255. sdi_strs[5]=bi_rstr1;
  256. sdi_strs[6]=bi_rstr2;
  257. sdi_strs[7]=bi_rstr3;
  258. sdi_p1s[2]=BOARD_NAME_SIZE-1;
  259. sdi_p1s[3]=10;
  260. sdi_p1s[5]=3;
  261. sdi_p1s[6]=3;
  262. sdi_p1s[7]=4;
  263. sdi_p2s[3]=18;
  264. sdi_p2s[4]=32767;
  265. sdi_p2s[5]=19;
  266. sdi_p2s[6]=19;
  267. sdi_p2s[7]=19;
  268. sdi_storage[2]=tstr;
  269. sdi_storage[3]=chk;
  270. sdi_storage[4]=&time;
  271. sdi_storage[5]=&rad1;
  272. sdi_storage[6]=&rad2;
  273. sdi_storage[7]=&rad3;
  274. str_cpy(tstr,&board_list[curr_board*BOARD_NAME_SIZE]);
  275. sdi.num_elements=8;
  276. if(do_dialog()) {
  277. pop_context();
  278. return;
  279. }
  280. str_cpy(&board_list[curr_board*BOARD_NAME_SIZE],tstr);
  281. can_shoot=chk[0];
  282. can_bomb=chk[1];
  283. fire_burn_space=chk[2];
  284. fire_burn_fakes=chk[3];
  285. fire_burn_trees=chk[4];
  286. fire_burn_brown=chk[5];
  287. forest_becomes=chk[6];
  288. collect_bombs=chk[7];
  289. fire_burns=chk[8];
  290. restart_if_zapped=chk[9];
  291. explosions_leave=rad1;
  292. save_mode=rad2;
  293. overlay_mode=rad3;
  294. time_limit=time;
  295. pop_context();
  296. }
  297. //Dialog- (global info)
  298. //----------------------------------------------------------
  299. //
  300. //Death board- Endgame board-
  301. //__________________________!!!__________________________!!!
  302. //
  303. //Death X- _00000__!__!_ Endgame X- _00000__!__!_
  304. //Death Y- _00000__!__!_ Endgame Y- _00000__!__!_
  305. //
  306. //( ) Death- Same position ( ) Endgame- Game over
  307. //( ) Death- Restart board ( ) Endgame- Teleport
  308. //( ) Death- Teleport
  309. // [ ] Play game over sfx
  310. //
  311. // _More_ _Edit Chars_ _Edit Dmg_ _Edit Global Robot_
  312. //
  313. // _OK_ _Cancel_
  314. //
  315. //----------------------------------------------------------
  316. void global_info(void) {
  317. int brd1=death_board,brd2=endgame_board;
  318. int dx=death_x,dy=death_y,ex=endgame_x,ey=endgame_y;
  319. int rad1=2,rad2=1;
  320. char chk[1]={ game_over_sfx };
  321. int t1;
  322. set_context(86);
  323. redo:
  324. if(brd1==DEATH_SAME_POS) {
  325. brd1=0; rad1=0;
  326. }
  327. if(brd1==NO_DEATH_BOARD) {
  328. brd1=0; rad1=1;
  329. }
  330. if(brd2==NO_ENDGAME_BOARD) {
  331. brd2=0; rad2=0;
  332. }
  333. reset_sdi();
  334. sdi_types[2]=DE_BOARD;
  335. sdi_types[3]=DE_NUMBER;
  336. sdi_types[4]=DE_NUMBER;
  337. sdi_types[5]=DE_RADIO;
  338. sdi_types[6]=DE_BOARD;
  339. sdi_types[7]=DE_NUMBER;
  340. sdi_types[8]=DE_NUMBER;
  341. sdi_types[9]=DE_RADIO;
  342. sdi_types[10]=DE_CHECK;
  343. sdi_types[11]=DE_BUTTON;
  344. sdi_types[12]=DE_BUTTON;
  345. sdi_types[13]=DE_BUTTON;
  346. sdi_types[14]=DE_BUTTON;
  347. sdi_xs[2]=1;
  348. sdi_xs[3]=1;
  349. sdi_xs[4]=1;
  350. sdi_xs[5]=1;
  351. sdi_xs[6]=30;
  352. sdi_xs[7]=30;
  353. sdi_xs[8]=30;
  354. sdi_xs[9]=30;
  355. sdi_xs[10]=30;
  356. sdi_xs[11]=5;
  357. sdi_xs[12]=12;
  358. sdi_xs[13]=25;
  359. sdi_xs[14]=36;
  360. sdi_ys[2]=2;
  361. sdi_ys[3]=5;
  362. sdi_ys[4]=6;
  363. sdi_ys[5]=8;
  364. sdi_ys[6]=2;
  365. sdi_ys[7]=5;
  366. sdi_ys[8]=6;
  367. sdi_ys[9]=8;
  368. sdi_ys[10]=11;
  369. sdi_ys[11]=13;
  370. sdi_ys[12]=13;
  371. sdi_ys[13]=13;
  372. sdi_ys[14]=13;
  373. sdi_strs[2]="Death board-";
  374. sdi_strs[3]="Death X- ";
  375. sdi_strs[4]="Death Y- ";
  376. sdi_strs[5]="Death- Same position\nDeath- Restart board\nDeath- Teleport";
  377. sdi_strs[6]="Endgame board-";
  378. sdi_strs[7]="Endgame X- ";
  379. sdi_strs[8]="Endgame Y- ";
  380. sdi_strs[9]="Endgame- Game over\nEndgame- Teleport";
  381. sdi_strs[10]="Play game over sfx";
  382. sdi_strs[11]="More";
  383. sdi_strs[12]="Edit Chars";
  384. sdi_strs[13]="Edit Dmg";
  385. sdi_strs[14]="Edit Global Robot";
  386. sdi_p1s[5]=3;
  387. sdi_p1s[9]=2;
  388. sdi_p1s[10]=1;
  389. sdi_p1s[11]=2;
  390. sdi_p1s[12]=3;
  391. sdi_p1s[13]=4;
  392. sdi_p1s[14]=5;
  393. sdi_p2s[3]=99;
  394. sdi_p2s[4]=99;
  395. sdi_p2s[5]=20;
  396. sdi_p2s[7]=99;
  397. sdi_p2s[8]=99;
  398. sdi_p2s[9]=18;
  399. sdi_p2s[10]=18;
  400. sdi_storage[2]=&brd1;
  401. sdi_storage[3]=&dx;
  402. sdi_storage[4]=&dy;
  403. sdi_storage[5]=&rad1;
  404. sdi_storage[6]=&brd2;
  405. sdi_storage[7]=&ex;
  406. sdi_storage[8]=&ey;
  407. sdi_storage[9]=&rad2;
  408. sdi_storage[10]=chk;
  409. sdi.num_elements=15;
  410. t1=do_dialog();
  411. if((t1==-1)||(t1==1)) {
  412. pop_context();
  413. return;
  414. }
  415. if(rad1==2) death_board=brd1;
  416. else if(rad1==1) death_board=NO_DEATH_BOARD;
  417. else death_board=DEATH_SAME_POS;
  418. if(rad2==1) endgame_board=brd2;
  419. else endgame_board=NO_ENDGAME_BOARD;
  420. death_x=dx; endgame_x=ex;
  421. death_y=dy; endgame_y=ey;
  422. game_over_sfx=chk[0];
  423. if(t1==2) {
  424. if(global_next()) goto redo;//More
  425. }
  426. else if(t1==3) global_chars();//Chars
  427. else if(t1==4) global_dmg();//Dmg
  428. else if(t1==5) {
  429. m_hide();
  430. save_screen(current_pg_seg);
  431. draw_window_box(16,12,50,14,current_pg_seg,EC_DEBUG_BOX,
  432. EC_DEBUG_BOX_DARK,EC_DEBUG_BOX_CORNER);
  433. write_string("Name for robot:",18,13,EC_DEBUG_LABEL,
  434. current_pg_seg);
  435. m_show();
  436. if(intake(robots[NUM_ROBOTS].robot_name,14,34,13,current_pg_seg,15,1,
  437. 0)==27) {
  438. restore_screen(current_pg_seg);
  439. pop_context();
  440. return;
  441. }
  442. restore_screen(current_pg_seg);
  443. set_context(87);
  444. robot_editor(NUM_ROBOTS);//Global robot
  445. pop_context();
  446. }
  447. pop_context();
  448. }
  449. //Next-
  450. //----------------------------------------------------------
  451. //
  452. // First board-
  453. // __________________________!!! Edging color- _*_
  454. //
  455. // Starting lives- _00000__!__!_
  456. // Maximum lives- _00000__!__!_
  457. //
  458. // Starting health- _00000__!__!_
  459. // Maximum health- _00000__!__!_ _Previous_
  460. //
  461. // [ ] Enemies' bullets hurt other enemies
  462. // [ ] Clear messages and projectiles on exit
  463. // [ ] Can only play world from a 'SWAP WORLD'
  464. //
  465. // _OK_ _Cancel_
  466. //
  467. //----------------------------------------------------------
  468. char global_next(void) {//Returns 1 for previous
  469. int brd=first_board;
  470. int col=edge_color;
  471. int lv=starting_lives,mlv=lives_limit;
  472. int hl=starting_health,mhl=health_limit;
  473. char chk[3]={ enemy_hurt_enemy,clear_on_exit,only_from_swap };
  474. int t1;
  475. set_context(88);
  476. reset_sdi();
  477. sdi_types[2]=DE_BOARD;
  478. sdi_types[3]=DE_COLOR;
  479. sdi_types[4]=DE_NUMBER;
  480. sdi_types[5]=DE_NUMBER;
  481. sdi_types[6]=DE_NUMBER;
  482. sdi_types[7]=DE_NUMBER;
  483. sdi_types[8]=DE_BUTTON;
  484. sdi_types[9]=DE_CHECK;
  485. sdi_xs[2]=6;
  486. sdi_xs[3]=38;
  487. sdi_xs[4]=6;
  488. sdi_xs[5]=6;
  489. sdi_xs[6]=6;
  490. sdi_xs[7]=6;
  491. sdi_xs[8]=38;
  492. sdi_xs[9]=6;
  493. sdi_ys[2]=2;
  494. sdi_ys[3]=3;
  495. sdi_ys[4]=5;
  496. sdi_ys[5]=6;
  497. sdi_ys[6]=8;
  498. sdi_ys[7]=9;
  499. sdi_ys[8]=9;
  500. sdi_ys[9]=11;
  501. sdi_strs[2]="First board-";
  502. sdi_strs[3]="Edging color- ";
  503. sdi_strs[4]="Starting lives- ";
  504. sdi_strs[5]="Maximum lives- ";
  505. sdi_strs[6]="Starting health- ";
  506. sdi_strs[7]="Maximum health- ";
  507. sdi_strs[8]="Previous";
  508. sdi_strs[9]="Enemies' bullets hurt other enemies\n\
  509. Clear messages and projectiles on exit\n\
  510. Can only play world from a 'SWAP WORLD'";
  511. sdi_p1s[4]=1;
  512. sdi_p1s[5]=1;
  513. sdi_p1s[6]=1;
  514. sdi_p1s[7]=1;
  515. sdi_p1s[8]=2;
  516. sdi_p1s[9]=3;
  517. sdi_p2s[4]=32767;
  518. sdi_p2s[5]=32767;
  519. sdi_p2s[6]=32767;
  520. sdi_p2s[7]=32767;
  521. sdi_p2s[9]=39;
  522. sdi_storage[2]=&brd;
  523. sdi_storage[3]=&col;
  524. sdi_storage[4]=&lv;
  525. sdi_storage[5]=&mlv;
  526. sdi_storage[6]=&hl;
  527. sdi_storage[7]=&mhl;
  528. sdi_storage[9]=chk;
  529. sdi.num_elements=10;
  530. t1=do_dialog();
  531. pop_context();
  532. if(t1==2) return 1;
  533. first_board=brd;
  534. edge_color=col;
  535. starting_lives=lv;
  536. lives_limit=mlv;
  537. starting_health=hl;
  538. health_limit=mhl;
  539. enemy_hurt_enemy=chk[0];
  540. clear_on_exit=chk[1];
  541. only_from_swap=chk[2];
  542. if(lv>mlv) starting_lives=mlv;
  543. if(hl>mhl) starting_health=mhl;
  544. return 0;
  545. }
  546. //----------------------------------------------------------
  547. // (Note- The numbers in parenthesis are the codes to use
  548. // with the CHANGE CHAR ID robot command)
  549. //
  550. //Energizer color #1 (200)-_*_ Energizer color #1 (200)-_*_
  551. // . .
  552. // . .
  553. // . .
  554. // . .
  555. // . .
  556. // . .
  557. // . .
  558. // . .
  559. // . .
  560. //
  561. // _Next_ _Previous_ _Done_
  562. //
  563. //----------------------------------------------------------
  564. char cdi_types[27]={ DE_BUTTON,DE_BUTTON,DE_BUTTON,
  565. DE_CHAR,DE_CHAR,DE_CHAR,DE_CHAR,DE_CHAR,DE_CHAR,
  566. DE_CHAR,DE_CHAR,DE_CHAR,DE_CHAR,DE_CHAR,DE_CHAR,
  567. DE_CHAR,DE_CHAR,DE_CHAR,DE_CHAR,DE_CHAR,DE_CHAR,
  568. DE_CHAR,DE_CHAR,DE_CHAR,DE_CHAR,DE_CHAR,DE_CHAR };
  569. char cdi_xs[27]={ 15,25,39,2,2,2,2,2,2,2,2,2,2,2,2,32,32,32,32,32,32,32,32,
  570. 32,32,32,32 };
  571. char cdi_ys[27]={ 15,15,15,2,3,4,5,6,7,8,9,10,11,12,13,2,3,4,5,6,7,8,9,10,
  572. 11,12,13 };
  573. char far *cdi_strs[27]={ "Next","Previous","Done",NULL,NULL,NULL,NULL,NULL,
  574. NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
  575. NULL,NULL,NULL,NULL,NULL };
  576. int cdi_p1s[27]={ 1,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };
  577. void far *cdi_storage[27]={ NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
  578. NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
  579. NULL,NULL,NULL,NULL };
  580. dialog cdi={
  581. 9,4,70,21,"Edit characters",27,
  582. cdi_types,cdi_xs,cdi_ys,cdi_strs,cdi_p1s,NULL,cdi_storage,3 };
  583. //Internal- Reset dialog to above settings
  584. void reset_cdi(void) {
  585. for(int t1=3;t1<27;t1++) {
  586. cdi_types[t1]=DE_CHAR;
  587. cdi_p1s[t1]=0;
  588. cdi_strs[t1]=NULL;
  589. cdi_storage[t1]=NULL;
  590. cdi_xs[t1]=2;
  591. if(t1>14) cdi_xs[t1]=32;
  592. }
  593. cdi.curr_element=3;
  594. cdi.num_elements=27;
  595. }
  596. #define do_cdialog() run_dialog(&cdi,current_pg_seg,0,3)
  597. //Info for char funcs, 192 selections (24 per func, 8 funcs)
  598. char far *char_strs[8][24]={ {
  599. "Space (000)-",
  600. "Normal (001)-",
  601. "Solid (002)-",
  602. "Tree (003)-",
  603. "Breakaway (006)-",
  604. "Boulder (008)-",
  605. "Crate (009)-",
  606. "Box (011)-",
  607. "Fake (013)-",
  608. "Carpet (014)-",
  609. "Floor (015)-",
  610. "Tiles (016)-",
  611. "Still Water (020)-",
  612. "N Water (021)-",
  613. "S Water (022)-",
  614. "E Water (023)-",
  615. "W Water (024)-",
  616. "Chest (027)-",
  617. "Gem (028)-",
  618. "Magic Gem (029)-",
  619. "Health (030)-",
  620. "Ring (031)-",
  621. "Potion (032)-",
  622. "Energizer (033)-" },{
  623. "Goop (034)-",
  624. "Bomb (036)-",
  625. "Explosion (038)-",
  626. "Key (039)-",
  627. "Lock (040)-",
  628. "Stairs (043)-",
  629. "Cave (044)-",
  630. "Gate (047)-",
  631. "Open Gate (048)-",
  632. "Coin (050)-",
  633. "Pouch (055)-",
  634. "Slider NS (057)-",
  635. "Slider EW (058)-",
  636. "Lazer Gun (060)-",
  637. "Forest (065)-",
  638. "Whirlpool 1 (067)-",
  639. "Whirlpool 2 (068)-",
  640. "Whirlpool 3 (069)-",
  641. "Whirlpool 4 (070)-",
  642. "Invis. Wall (071)-",
  643. "Ricochet (073)-",
  644. "Snake (080)-",
  645. "Eye (081)-",
  646. "Thief (082)-" },{
  647. "Slime Blob (083)-",
  648. "Runner (084)-",
  649. "Ghost (085)-",
  650. "Dragon (086)-",
  651. "Fish (087)-",
  652. "Shark (088)-",
  653. "Spider (089)-",
  654. "Goblin (090)-",
  655. "Spitting Tiger (091)-",
  656. "Bear (094)-",
  657. "Bear Cub (095)-",
  658. "Sign (125)-",
  659. "Scroll (126)-",
  660. "Blank Ice (160)-",
  661. "Ice Anim 1 (161)-",
  662. "Ice Anim 2 (162)-",
  663. "Ice Anim 3 (163)-",
  664. "Lava Anim 1 (164)-",
  665. "Lava Anim 2 (165)-",
  666. "Lava Anim 3 (166)-",
  667. "Small Ammo (167)-",
  668. "Large Ammo (168)-",
  669. "Lit Bomb Anim 1 (169)-",//Special
  670. "Energizer Color 1 (176)-" },{
  671. "Energizer Color 2 (177)-",
  672. "Energizer Color 3 (178)-",
  673. "Energizer Color 4 (179)-",
  674. "Energizer Color 5 (180)-",
  675. "Energizer Color 6 (181)-",
  676. "Energizer Color 7 (182)-",
  677. "Energizer Color 8 (183)-",
  678. "Explosion Stage 1 (184)-",
  679. "Explosion Stage 2 (185)-",
  680. "Explosion Stage 3 (186)-",
  681. "Explosion Stage 4 (187)-",
  682. "Horizontal Door (???)-",//Special
  683. "Vertical Door (???)-",//Special
  684. "Diagonal Door / (???)-",//Special
  685. "Diagonal Door \\ (???)-",//Special
  686. "CW Anim 1 (190)-",
  687. "CW Anim 2 (191)-",
  688. "CW Anim 3 (192)-",
  689. "CW Anim 4 (193)-",
  690. "CCW Anim 1 (194)-",
  691. "CCW Anim 2 (195)-",
  692. "CCW Anim 3 (196)-",
  693. "CCW Anim 4 (197)-",
  694. "N Transport Anim 1 (230)-" },{
  695. "N Transport Anim 2 (231)-",
  696. "N Transport Anim 3 (232)-",
  697. "N Transport Anim 4 (233)-",
  698. "S Transport Anim 1 (234)-",
  699. "S Transport Anim 2 (235)-",
  700. "S Transport Anim 3 (236)-",
  701. "S Transport Anim 4 (237)-",
  702. "E Transport Anim 1 (238)-",
  703. "E Transport Anim 2 (239)-",
  704. "E Transport Anim 3 (240)-",
  705. "E Transport Anim 4 (241)-",
  706. "W Transport Anim 1 (242)-",
  707. "W Transport Anim 2 (243)-",
  708. "W Transport Anim 3 (244)-",
  709. "W Transport Anim 4 (245)-",
  710. "A.Transport Anim 1 (246)-",
  711. "A.Transport Anim 2 (247)-",
  712. "A.Transport Anim 3 (248)-",
  713. "A.Transport Anim 4 (249)-",
  714. "N Thick Arrow (250)-",
  715. "S Thick Arrow (251)-",
  716. "E Thick Arrow (252)-",
  717. "W Thick Arrow (253)-",
  718. "N Thin Arrow (254)-" },{
  719. "S Thin Arrow (255)-",
  720. "E Thin Arrow (256)-",
  721. "W Thin Arrow (257)-",
  722. "Horiz Lazer Anim 1 (258)-",
  723. "Horiz Lazer Anim 2 (259)-",
  724. "Horiz Lazer Anim 3 (260)-",
  725. "Horiz Lazer Anim 4 (261)-",
  726. "Vert Lazer Anim 1 (262)-",
  727. "Vert Lazer Anim 2 (263)-",
  728. "Vert Lazer Anim 3 (264)-",
  729. "Vert Lazer Anim 4 (265)-",
  730. "Fire Anim 1 (266)-",
  731. "Fire Anim 2 (267)-",
  732. "Fire Anim 3 (268)-",
  733. "Fire Anim 4 (269)-",
  734. "Fire Anim 5 (270)-",
  735. "Fire Anim 6 (271)-",
  736. "Fire Color 1 (272)-",
  737. "Fire Color 2 (273)-",
  738. "Fire Color 3 (274)-",
  739. "Fire Color 4 (275)-",
  740. "Fire Color 5 (276)-",
  741. "Fire Color 6 (277)-",
  742. "Life Anim 1 (278)-" },{
  743. "Life Anim 2 (279)-",
  744. "Life Anim 3 (280)-",
  745. "Life Anim 4 (281)-",
  746. "Life Color 1 (282)-",
  747. "Life Color 2 (283)-",
  748. "Life Color 3 (284)-",
  749. "Life Color 4 (285)-",
  750. "Ricochet Panel \\ (286)-",
  751. "Ricochet Panel / (287)-",
  752. "Mine Anim 1 (288)-",
  753. "Mine Anim 2 (289)-",
  754. "Spit Fire Anim 1 (290)-",
  755. "Spit Fire Anim 2 (291)-",
  756. "Spit Fire Color 1 (292)-",
  757. "Spit Fire Color 2 (293)-",
  758. "Seeker Anim 1 (294)-",
  759. "Seeker Anim 2 (295)-",
  760. "Seeker Anim 3 (296)-",
  761. "Seeker Anim 4 (297)-",
  762. "Seeker Color 1 (298)-",
  763. "Seeker Color 2 (299)-",
  764. "Seeker Color 3 (300)-",
  765. "Seeker Color 4 (301)-",
  766. "Whirlpool Color 1 (302)-" },{
  767. "Whirlpool Color 2 (303)-",
  768. "Whirlpool Color 3 (304)-",
  769. "Whirlpool Color 4 (305)-",
  770. "N Player Bullet (306)-",
  771. "S Player Bullet (307)-",
  772. "E Player Bullet (308)-",
  773. "W Player Bullet (309)-",
  774. "N Neutral Bullet (310)-",
  775. "S Neutral Bullet (311)-",
  776. "E Neutral Bullet (312)-",
  777. "W Neutral Bullet (313)-",
  778. "N Enemy Bullet (314)-",
  779. "S Enemy Bullet (315)-",
  780. "E Enemy Bullet (316)-",
  781. "W Enemy Bullet (317)-",
  782. "N Player Char (318)-",
  783. "S Player Char (319)-",
  784. "E Player Char (320)-",
  785. "W Player Char (321)-",
  786. "Player Color (322)-",
  787. "Missile Color (323)-",
  788. "Player Bullet Color (324)-",
  789. "Neutral Bullet Color (325)-",
  790. "Enemy Bullet Color (326)-" } };
  791. //Have bit 512 set for a color
  792. int char_values[8][24]={ {
  793. 0,
  794. 1,
  795. 2,
  796. 3,
  797. 6,
  798. 8,
  799. 9,
  800. 11,
  801. 13,
  802. 14,
  803. 15,
  804. 16,
  805. 20,
  806. 21,
  807. 22,
  808. 23,
  809. 24,
  810. 27,
  811. 28,
  812. 29,
  813. 30,
  814. 31,
  815. 32,
  816. 33 },{
  817. 34,
  818. 36,
  819. 38,
  820. 39,
  821. 40,
  822. 43,
  823. 44,
  824. 47,
  825. 48,
  826. 50,
  827. 55,
  828. 57,
  829. 58,
  830. 60,
  831. 65,
  832. 67,
  833. 68,
  834. 69,
  835. 70,
  836. 71,
  837. 73,
  838. 80,
  839. 81,
  840. 82 },{
  841. 83,
  842. 84,
  843. 85,
  844. 86,
  845. 87,
  846. 88,
  847. 89,
  848. 90,
  849. 91,
  850. 94,
  851. 95,
  852. 125,
  853. 126,
  854. 160,
  855. 161,
  856. 162,
  857. 163,
  858. 164,
  859. 165,
  860. 166,
  861. 167,
  862. 168,
  863. 169,//Special
  864. 176+512 },{
  865. 177+512,
  866. 178+512,
  867. 179+512,
  868. 180+512,
  869. 181+512,
  870. 182+512,
  871. 183+512,
  872. 184+512,
  873. 185+512,
  874. 186+512,
  875. 187+512,
  876. 188,//Special
  877. 189,//Special
  878. 198,//Special
  879. 200,//Special
  880. 190,
  881. 191,
  882. 192,
  883. 193,
  884. 194,
  885. 195,
  886. 196,
  887. 197,
  888. 230 },{
  889. 231,
  890. 232,
  891. 233,
  892. 234,
  893. 235,
  894. 236,
  895. 237,
  896. 238,
  897. 239,
  898. 240,
  899. 241,
  900. 242,
  901. 243,
  902. 244,
  903. 245,
  904. 246,
  905. 247,
  906. 248,
  907. 249,
  908. 250,
  909. 251,
  910. 252,
  911. 253,
  912. 254 },{
  913. 255,
  914. 256,
  915. 257,
  916. 258,
  917. 259,
  918. 260,
  919. 261,
  920. 262,
  921. 263,
  922. 264,
  923. 265,
  924. 266,
  925. 267,
  926. 268,
  927. 269,
  928. 270,
  929. 271,
  930. 272+512,
  931. 273+512,
  932. 274+512,
  933. 275+512,
  934. 276+512,
  935. 277+512,
  936. 278 },{
  937. 279,
  938. 280,
  939. 281,
  940. 282+512,
  941. 283+512,
  942. 284+512,
  943. 285+512,
  944. 286,
  945. 287,
  946. 288,
  947. 289,
  948. 290,
  949. 291,
  950. 292+512,
  951. 293+512,
  952. 294,
  953. 295,
  954. 296,
  955. 297,
  956. 298+512,
  957. 299+512,
  958. 300+512,
  959. 301+512,
  960. 302+512 },{
  961. 303+512,
  962. 304+512,
  963. 305+512,
  964. 306,
  965. 307,
  966. 308,
  967. 309,
  968. 310,
  969. 311,
  970. 312,
  971. 313,
  972. 314,
  973. 315,
  974. 316,
  975. 317,
  976. 318,
  977. 319,
  978. 320,
  979. 321,
  980. 322+512,
  981. 323+512,
  982. 324+512,
  983. 325+512,
  984. 326+512 } };
  985. //Chars #1-8
  986. void global_chars(void) {
  987. int t1,t2,t3;
  988. int curr_scr=0;
  989. int temp[24];
  990. set_context(89);
  991. do {
  992. reset_cdi();
  993. for(t1=0;t1<24;t1++) {
  994. //Set strs, storage, param 1, types, and X position
  995. if(char_values[curr_scr][t1]&512) cdi_types[t1+3]=DE_COLOR;
  996. else if(char_values[curr_scr][t1]>127) cdi_p1s[t1+3]=1;
  997. cdi_strs[t1+3]=char_strs[curr_scr][t1];
  998. cdi_storage[t1+3]=&temp[t1];
  999. t3 = char_values[curr_scr][t1]&511;
  1000. if (t3 == 323) temp[t1] = missile_color;
  1001. else if ((t3>=324) && (t3<=326)) temp[t1] = bullet_color[t3-324];
  1002. else temp[t1]=id_chars[t3];
  1003. cdi_xs[t1+3]+=(25-str_len(char_strs[curr_scr][t1]));
  1004. }
  1005. //Run
  1006. t1=do_cdialog();
  1007. if(t1==-1) {
  1008. pop_context();
  1009. return;
  1010. }
  1011. //Get from storage
  1012. for(t2=0;t2<24;t2++) {
  1013. t3 = char_values[curr_scr][t2]&511;
  1014. if (t3 == 323) missile_color = temp[t2];
  1015. else if ((t3>=324) && (t3<=326)) bullet_color[t3 - 324] = temp[t2];
  1016. else id_chars[t3]=temp[t2];
  1017. }
  1018. //Setup lit bomb sequence or doors
  1019. if(curr_scr==2) {
  1020. //Lit bomb
  1021. for(t2=170;t2<176;t2++)
  1022. id_chars[t2]=id_chars[t2-1]-1;
  1023. }
  1024. else if(curr_scr==3) {
  1025. //Doors
  1026. id_chars[199]=id_chars[198];// '/'
  1027. id_chars[201]=id_chars[200];// '\'
  1028. id_chars[202]=id_chars[200];// '\'
  1029. id_chars[203]=id_chars[200];// '\'
  1030. id_chars[204]=id_chars[198];// '/'
  1031. id_chars[205]=id_chars[198];// '/'
  1032. id_chars[206]=id_chars[189];// '|'
  1033. id_chars[207]=id_chars[188];// '-'
  1034. id_chars[208]=id_chars[189];// '|'
  1035. id_chars[209]=id_chars[188];// '-'
  1036. id_chars[210]=id_chars[189];// '|'
  1037. id_chars[211]=id_chars[188];// '-'
  1038. id_chars[212]=id_chars[189];// '|'
  1039. id_chars[213]=id_chars[188];// '-'
  1040. id_chars[214]=id_chars[189];// '|'
  1041. id_chars[215]=id_chars[188];// '-'
  1042. id_chars[216]=id_chars[189];// '|'
  1043. id_chars[217]=id_chars[188];// '-'
  1044. id_chars[218]=id_chars[189];// '|'
  1045. id_chars[219]=id_chars[188];// '-'
  1046. id_chars[220]=id_chars[189];// '|'
  1047. id_chars[221]=id_chars[188];// '-'
  1048. id_chars[222]=id_chars[198];// '/'
  1049. id_chars[223]=id_chars[198];// '/'
  1050. id_chars[224]=id_chars[200];// '\'
  1051. id_chars[225]=id_chars[200];// '\'
  1052. id_chars[226]=id_chars[200];// '\'
  1053. id_chars[227]=id_chars[200];// '\'
  1054. id_chars[228]=id_chars[198];// '/'
  1055. id_chars[229]=id_chars[198];// '/'
  1056. }
  1057. //Next, prev, or done
  1058. if(t1==1) {
  1059. if((++curr_scr)>7) curr_scr=0;
  1060. }
  1061. if(t1==2) {
  1062. if((--curr_scr)<0) curr_scr=7;
  1063. }
  1064. } while((t1==1)||(t1==2));
  1065. pop_context();
  1066. }
  1067. //Info for damage editing
  1068. char dmg_ids[22]={
  1069. 26,
  1070. 38,
  1071. 59,
  1072. 61,
  1073. 62,
  1074. 63,
  1075. 75,
  1076. 76,
  1077. 78,
  1078. 79,
  1079. 80,
  1080. 83,
  1081. 84,
  1082. 85,
  1083. 86,
  1084. 87,
  1085. 88,
  1086. 89,
  1087. 90,
  1088. 91,
  1089. 94,
  1090. 95 };
  1091. char far *dmg_strs[24]={
  1092. "OK","Cancel",
  1093. "Lava-",
  1094. "Explosion-",
  1095. "Lazer-",
  1096. "Bullet-",
  1097. "Missile-",
  1098. "Fire-",
  1099. "Spike-",
  1100. "Custom Hurt-",
  1101. "Shooting Fire-",
  1102. "Seeker-",
  1103. "Snake-",
  1104. "Slime Blob-",
  1105. "Runner-",
  1106. "Ghost-",
  1107. "Dragon-",
  1108. "Fish-",
  1109. "Shark-",
  1110. "Spider-",
  1111. "Goblin-",
  1112. "Spitting Tiger-",
  1113. "Bear-",
  1114. "Bear Cub-" };
  1115. char ddi_types[24]={ DE_BUTTON,DE_BUTTON,
  1116. DE_NUMBER,DE_NUMBER,DE_NUMBER,DE_NUMBER,DE_NUMBER,DE_NUMBER,
  1117. DE_NUMBER,DE_NUMBER,DE_NUMBER,DE_NUMBER,DE_NUMBER,DE_NUMBER,
  1118. DE_NUMBER,DE_NUMBER,DE_NUMBER,DE_NUMBER,DE_NUMBER,DE_NUMBER,
  1119. DE_NUMBER,DE_NUMBER,DE_NUMBER,DE_NUMBER };
  1120. char ddi_xs[24]={ 15,37,2,2,2,2,2,2,2,2,2,2,2,31,31,31,31,31,31,31,31,
  1121. 31,31,31 };
  1122. char ddi_ys[24]={ 15,15,2,3,4,5,6,7,8,9,10,11,12,2,3,4,5,6,7,8,9,10,
  1123. 11,12 };
  1124. int ddi_p1s[24]={ 0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };
  1125. int ddi_p2s[24]={ 0,0,255,255,255,255,255,255,255,255,255,255,255,
  1126. 255,255,255,255,255,255,255,255,255,255,255 };
  1127. void far *ddi_storage[24]={ NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
  1128. NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
  1129. NULL };
  1130. dialog ddi={
  1131. 10,4,69,21,"Edit damage",24,
  1132. ddi_types,ddi_xs,ddi_ys,dmg_strs,ddi_p1s,ddi_p2s,ddi_storage,2 };
  1133. #define do_ddialog() run_dialog(&ddi,current_pg_seg,0,2)
  1134. void global_dmg(void) {
  1135. int t1;
  1136. int tmp[22];
  1137. set_context(90);
  1138. for(t1=0;t1<22;t1++) {
  1139. ddi_storage[t1+2]=&tmp[t1];
  1140. tmp[t1]=id_dmg[dmg_ids[t1]];
  1141. ddi_xs[t1+2]=2+(14-str_len(dmg_strs[t1+2]));
  1142. if(t1>10) ddi_xs[t1+2]+=29;
  1143. }
  1144. ddi.curr_element=2;
  1145. if(do_ddialog()) {
  1146. pop_context();
  1147. return;
  1148. }
  1149. for(t1=0;t1<22;t1++)
  1150. id_dmg[dmg_ids[t1]]=tmp[t1];
  1151. pop_context();
  1152. }