author | ecalot
<ecalot> 2005-03-05 12:12:44 UTC |
committer | ecalot
<ecalot> 2005-03-05 12:12:44 UTC |
parent | 8200bcd9814149d1cd6cde5df6525c87e1f49049 |
FP/src/Makefile | +6 | -2 |
FP/src/conf/awk/room_conf.awk | +52 | -0 |
FP/src/conf/room.conf | +235 | -26 |
FP/src/conf/tiles.conf | +2 | -0 |
FP/src/include/.cvsignore | +1 | -0 |
FP/src/include/room.h | +1 | -232 |
FP/src/ker/room.c | +24 | -24 |
diff --git a/FP/src/Makefile b/FP/src/Makefile index d9ec02a..7aec2cf 100644 --- a/FP/src/Makefile +++ b/FP/src/Makefile @@ -68,7 +68,8 @@ GENERATEDSTAHEADERS = include/states_conf_static.h \ #include/states_conf_properties.h GENERATEDTILHEADERS = include/tiles_conf_types.h include/tiles_conf_groups.h -GENERATEDOTHHEADERS = include/walls_conf.h include/anims_conf.h include/text_conf.h +GENERATEDOTHHEADERS = include/walls_conf.h include/anims_conf.h include/text_conf.h\ + include/room_conf.h #Use this to temporary remove an option OPTIONS = $(INCLUDE) $(DEFINES) $(RELEASE) @@ -170,7 +171,7 @@ kernel.o: ker/kernel.c include/kernel.h include/resources.h\ $(CC) -c ker/kernel.c $(OPTIONS) room.o: ker/room.c include/room.h include/resources.h include/res_conf.h\ - include/walls_conf.h $(GENERATEDTILHEADERS) + include/walls_conf.h $(GENERATEDTILHEADERS) include/room_conf.h $(INFO) Compiling kernel room object... $(CC) -c ker/room.c $(OPTIONS) @@ -297,3 +298,6 @@ include/text_conf.h: conf/alphabet.conf conf/awk/text_conf.awk $(INFO) Generating font alphabet... $(AWK) -f conf/awk/text_conf.awk conf/alphabet.conf>include/text_conf.h +include/room_conf.h: conf/room.conf conf/awk/room_conf.awk + $(INFO) Generating room drawing code... + $(AWK) -f conf/awk/room_conf.awk conf/room.conf>include/room_conf.h diff --git a/FP/src/conf/awk/room_conf.awk b/FP/src/conf/awk/room_conf.awk new file mode 100644 index 0000000..5e3e3f3 --- /dev/null +++ b/FP/src/conf/awk/room_conf.awk @@ -0,0 +1,52 @@ +# Princed V3 - Prince of Persia Level Editor for PC Version +# Copyright (C) 2003 Princed Development Team +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# The authors of this program may be contacted at http://forum.princed.com.ar + +# room_conf.awk: FreePrince : room.conf parser +# \xaf\xaf\xaf\xaf\xaf\xaf\xaf\xaf\xaf\xaf\xaf\xaf\xaf +# Copyright 2005 Princed Development Team +# Created: 5 Mar 2005 +# +# Author: Enrique Calot <ecalot.cod@princed.com.ar> +# +# Note: +# DO NOT remove this copyright notice +# + + +/[\t ]*XX .*/ { + if (inIf) printf("}\n"); + printf("\n#define draw%s(x,y,left,tile,right,dleft) \\\n",$2) + inIf=0 +} + +/[\t ]*if / { + if (inIf) printf("}\\\n"); + printf("%s {\\\n",$0) + inIf=1 +} + +/[\t ]*draw/ { + printf("%s\\\n",$0); +} + +END { + if (inIf) printf("}\\\n"); + print +} + diff --git a/FP/src/conf/room.conf b/FP/src/conf/room.conf index e32c448..0996f25 100644 --- a/FP/src/conf/room.conf +++ b/FP/src/conf/room.conf @@ -1,27 +1,236 @@ -panel floor - area left - condition (!isIn(tile,TILES_WALL))&&(isIn(left,TILES_WALL)) - image 63 - xt (x-1) - yt y - y 2 - -panel pillar - area left - condition isIn(left,TILES_PILLAR) - image 44 - xt x-1 - yt y - y 2 - area this - condition isIn(tile,TILES_PILLAR) - image 43 - xt x-1 - yt y - area dleft - condition isIn(dleft,TILES_PILLAR) - image 45 - xt x-1 - yt y - y 3 +XX AllLeft + # Gate/left + if (isIn(left,TILES_DOOR)) + drawAll((x)+0,(y)+2,15); + drawGate((x)+0,(y)-TILE_H+3,gateGetFrame(left)); + + # normal/left + if (isIn(left,TILES_FLOOR)) + drawAll((x)+0,(y)+2,10); + # loose moving/left + if (isIn(left,TILES_LOOSEMOVING)) + drawLoose((x)+0,(y)+2,looseGetFrame(left),layTritop); + # exit_left/left + if (isIn(left,TILE_EXIT_RIGHT)) + drawAll((x)+0,(y)+2,7); + # pillar/left + if (isIn(left,TILES_PILLAR)) + drawAll((x)+0,(y)+2,44); + # pillar_big_up/left + if (isIn(left,TILE_BP_BOTTOM)) + drawAll((x)+0,(y)+2,83); + if (isIn(left,TILE_BP_TOP)) + drawAll((x)+0,(y)+3,85); + # pressable/left + if (isIn(left,TILES_RAISE_PRESSED)) + drawAll((x)+0,(y)+2,10); + if (isIn(left,TILES_RAISE_UNPRESSED)) + drawAll((x)+0,(y)+1,10); + if (isIn(left,TILES_DROP_PRESSED)) + drawAll((x)+0,(y)+3,10); + if (isIn(left,TILES_DROP_UNPRESSED)) + drawAll((x)+0,(y)+2,10); + # debris/left + if (isIn(left,TILES_BROKENTILE)) + drawAll((x)+0,(y)+2,49); + # spikes/left + if (isIn(left,TILES_SPIKES)) + drawAll((x)+0,(y)+2,107); + drawSpike((x)-TILE_W+0,(y),spikeGetFrame(left),layRight); + + # skeleton/left + if (isIn(left,TILES_SKELETON)) + drawAll((x)+0,(y)+2,81); + # sword/left + if (isIn(left,TILES_SWORD)) + drawSword((x)-15,(y)-4); + # potion base/left + if (isIn(left,TILES_SMALLPOTION)) + drawPotionSmallBase((x)-15,(y)-4); + if ((isIn(left,TILES_BIGPOTION))) + drawPotionBigBase((x)-15,(y)-4); + # potion animation/left + if (isIn(left,TILES_REDPOTION)) + drawPotionRedBubbles((x)+3-15,(y)-15,isIn(left,TILES_BIGPOTION)); + if (isIn(left,TILES_GREENPOTION)) + drawPotionGreenBubbles((x)+3-15,(y)-15,isIn(left,TILES_BIGPOTION)); + if (isIn(left,TILES_BLUEPOTION)) + drawPotionBlueBubbles((x)+3-15,(y)-15,isIn(left,TILES_BIGPOTION)); + +XX AllTile + # Wall/left + if ((!isIn(tile,TILES_WALL))&&(isIn(left,TILES_WALL))) + drawAll((x)+0,(y)+2,63); + # torch/this + if (isIn(tile,TILES_TORCH)) + # animation + drawTorchFire((x)+11+TILE_W,(y)-39); + # base + drawAll((x)+3+TILE_W,(y)-24,56); + + # chopper/this + if (isIn(tile,TILE_CHOPPER)) + drawChopper((x)+0,(y),chopperGetFrame(tile),layCBack); + # empty_bricks/this + if (isIn(tile,TILES_BRICKE1)) + drawAll((x)+TILE_W+0,(y)-18,52); + if (isIn(tile,TILES_BRICKE2)) + drawAll((x)+TILE_W+0,(y)-18,53); + if (isIn(tile,TILES_WINDOW)) + drawAll((x)+TILE_W+0,(y)-18,54); + # floor_bricks/this + if (isIn(tile,TILES_BRICKF1)) + drawAll((x)+TILE_W+0,(y)-18,12); + if (isIn(tile,TILES_BRICKF2)) + drawAll((x)+TILE_W+0,(y)-18,13); + # gate/this + if (isIn(tile,TILES_DOOR)) + drawAll((x)+0,(y)+0,14); + # gate_frame/this + if (isIn(tile,TILES_GATEFRAME)) + drawAll((x)+24,(y)+0,17); + # normal/this + if (isIn(tile,TILES_FLOOR)) + drawAll((x)+0,(y)+0,9); + # loose moving/this + if (isIn(tile,TILES_LOOSEMOVING)) + drawLoose((x)+0,(y)+0,looseGetFrame(tile),layTribot); + # exit_left/this + if (isIn(tile,TILE_EXIT_RIGHT)) + drawAll((x)+0,(y)+0,5); + if (isIn(tile,TILE_EXIT_LEFT)) + drawAll((x)+0,(y)+0,9); + drawExit((x)+TILE_W+8,(y)-TILE_H-1,gateGetFrame(tile)); + + # pillar/this + if (isIn(tile,TILES_PILLAR)) + drawAll((x)+0,(y)+0,43); + # big_pillar/this + if (isIn(tile,TILE_BP_BOTTOM)) + drawAll((x)+0,(y)+0,82); + if (isIn(tile,TILE_BP_TOP)) + drawAll((x)+8,(y)+3,87); + # pressable/this + # TODO: use boolean algebra to simplify this + if (isIn(tile,TILES_RAISE_UNPRESSED)&&isIn(left,TILES_WALKABLE)&&(!isIn(left,TILES_RAISE))) + drawAll((x)+0,(y),57); + if ((isIn(tile,TILES_RAISE)&&((!isIn(tile,TILES_UNPRESSED))||(!isIn(left,TILES_WALKABLE))||isIn(left,TILES_RAISE)))&&(isIn(tile,TILES_UNPRESSED))) + drawAll((x)+0,(y),58); + if (((isIn(tile,TILES_RAISE)&&((!isIn(tile,TILES_UNPRESSED))||(!isIn(left,TILES_WALKABLE))||isIn(left,TILES_RAISE)))&&(!isIn(tile,TILES_UNPRESSED)))||isIn(tile,TILES_DROP_UNPRESSED)) + drawAll((x)+0,(y)+1,58); + if (isIn(tile,TILES_DROP_PRESSED)) + drawAll((x)+0,(y)+2,58); + # debris/this + if (isIn(tile,TILES_BROKENTILE)) + drawAll((x)+0,(y)+0,48); + # spikes/this + if (isIn(tile,TILES_SPIKES)) + drawAll((x)+0,(y)+0,101); + drawSpike((x)+0,(y),spikeGetFrame(tile),layBack); + + # skeleton/this + if (isIn(tile,TILES_SKELETON)) + drawAll((x)+0,(y)+0,80); + +XX AllBack + # loose moving + if (isIn(tile,TILES_LOOSEMOVING)) + drawLoose((x)+0,(y)+3,looseGetFrame(tile),layBase); + # normal + if (isIn(tile,TILES_UNPRESSED)) + # TODO: drop has resource 59 for unpressed/raise 47? checkgame + drawAll((x)+0,(y)+3,59); + if (isIn(tile,TILES_PRESSED)) + drawAll((x)+0,(y)+4,59); + if (isIn(tile,TILES_WALKABLE)&&(!isIn(tile,TILES_LOOSEMOVING))&&(!isIn(tile,TILES_PRESSABLE))) + drawAll((x)+0,(y)+3,11); + # wall + # there are 4 cases + if (wallCase(WALL_LOC_WWW)) + drawAll((x)+0,(y)+3,65); + if (wallCase(WALL_LOC_SWW)) + drawAll((x)+0,(y)+3,71); + if (wallCase(WALL_LOC_WWS)) + drawAll((x)+0,(y)+3,67); + if (wallCase(WALL_LOC_SWS)) + drawAll((x)+0,(y)+3,69); + # empty/gate_frame/this + if (isIn(tile,TILES_SPACE)&&isIn(tile,TILES_GATEFRAME)) + drawAll((x)+0,(y)+3,42); + # empty/gate/left + if (isIn(tile,TILES_SPACE)&&isIn(dleft,TILES_DOOR)) + drawAll((x)+0,(y)+3,16); + # empty/big_pillar/left + if (isIn(tile,TILES_SPACE)&&isIn(dleft,TILE_BP_TOP)) + drawAll((x)+0,(y)+3,86); + # empty/pillar/left + if (isIn(tile,TILES_SPACE)&&isIn(dleft,TILES_PILLAR)) + drawAll((x)+0,(y)+3,45); + # empty/wall/left + if (isIn(tile,TILES_SPACE)&&isIn(dleft,TILES_WALL)) + drawAll((x)+0,(y)+3,64); + + # upper objects + if (isIn(tile,TILE_EXIT_LEFT)) + drawAll((x)+0+TILE_W,(y)-TILE_H+3,6); + if (isIn(tile,TILE_EXIT_RIGHT)) + drawAll((x)+0+TILE_W,(y)-TILE_H+3,8); + + +XX AllFore + # pillar + if (isIn(tile,TILES_PILLAR)) + drawAll((x)+8,(y)+0,46); + # big pillar + if (isIn(tile,TILE_BP_BOTTOM)) + drawAll((x)+8,(y)+0,84); + # wall + # there are 4 cases + if (wallCase(WALL_LOC_WWW)) + drawAll((x)+0,(y)+0,66); + if (wallCase(WALL_LOC_SWW)) + drawAll((x)+0,(y)+0,72); + if (wallCase(WALL_LOC_WWS)) + drawAll((x)+0,(y)+0,68); + if (wallCase(WALL_LOC_SWS)) + drawAll((x)+0,(y)+0,70); + + # the seed generation algorithm + # Upper row + if (wallGetInfo(WALL_TABLE_LINE1_DARKER)) + drawAll((x)+0,(y)-39,75); + if (wallGetInfo(WALL_TABLE_LINE1_LEFT_DOWN)) + drawAll((x)+0,(y)-39,77); + if (wallGetInfo(WALL_TABLE_LINE1_RIGHT_DOWN)) + drawAll((x)+24,(y)-39,79); + if (wallGetInfo(WALL_TABLE_LINE1_RIGHT_UP)) + drawAll((x)+24,(y)-49,78); + if (wallGetInfo(WALL_TABLE_LINE1_LEFT_UP)) + drawAll((x)+0,(y)-54,76); + # Second row + if (isIn(tile,TILES_WALL)) + drawAll((x)+7+wallGetInfo(WALL_TABLE_LINE2_OFFSET),(y)-18,74-wallGetInfo(WALL_TABLE_LINE2_SEP)); + if (wallGetInfo(WALL_TABLE_LINE2_LEFT_DOWN)) + drawAll((x)+7+wallGetInfo(WALL_TABLE_LINE2_OFFSET)+5,(y)-39+21,77); + if (wallGetInfo(WALL_TABLE_LINE2_RIGHT_DOWN)) + drawAll((x)+24+7+wallGetInfo(WALL_TABLE_LINE2_OFFSET)-32+5,(y)-39+21,79); + if (wallGetInfo(WALL_TABLE_LINE2_RIGHT_UP)) + drawAll((x)+24+7+wallGetInfo(WALL_TABLE_LINE2_OFFSET)-32+5,(y)-49+21,78); + if (wallGetInfo(WALL_TABLE_LINE2_LEFT_UP)) + drawAll((x)+7+wallGetInfo(WALL_TABLE_LINE2_OFFSET)+5,(y)-54+21,76); + # Third row TODO: send to BottomTile + if (isIn(tile,TILES_WALL)) + drawAll((x)+3+wallGetInfo(WALL_TABLE_LINE3_OFFSET),(y)+3,74-wallGetInfo(WALL_TABLE_LINE3_SEP)); + if (wallGetInfo(WALL_TABLE_LINE3_LEFT_UP)) + drawAll((x)+5+wallGetInfo(WALL_TABLE_LINE3_OFFSET)+5,(y)-55+21*2,76); + + # debris/this foreground layer + if (isIn(tile,TILES_BROKENTILE)) + drawAll((x)+0,(y)+0,51); + # spikes/this foreground layer + if (isIn(tile,TILES_SPIKES)) + drawSpike((x)+0,(y)+0,spikeGetFrame(tile),layFore); + + + diff --git a/FP/src/conf/tiles.conf b/FP/src/conf/tiles.conf index a76c46a..dba30fb 100644 --- a/FP/src/conf/tiles.conf +++ b/FP/src/conf/tiles.conf @@ -51,6 +51,7 @@ walkable tile BTN_DROP 6 event walkable pressable unpressed@Pressable@info->action==eNormal +pressed@Pressable@info->action!=eNormal drop_unpressed@Pressable@info->action==eNormal drop_pressed@Pressable@info->action!=eNormal @@ -110,6 +111,7 @@ brokenTile walkable tile BTN_RAISE 15 event walkable dangerous pressable raise unpressed@Pressable@info->action==eNormal +pressed@Pressable@info->action!=eNormal raise_unpressed@Pressable@info->action==eNormal raise_pressed@Pressable@info->action!=eNormal diff --git a/FP/src/include/.cvsignore b/FP/src/include/.cvsignore index 6c80020..b63f5e0 100644 --- a/FP/src/include/.cvsignore +++ b/FP/src/include/.cvsignore @@ -10,3 +10,4 @@ tiles_conf_groups.h walls_conf.h anims_conf.h text_conf.h +room_conf.h diff --git a/FP/src/include/room.h b/FP/src/include/room.h index 9639603..acf1117 100644 --- a/FP/src/include/room.h +++ b/FP/src/include/room.h @@ -46,238 +46,7 @@ void roomLoadGfx(long environment); /* Only to initialize environment by mapStar int roomPress(tRoom* room, tObject* obj); void roomKidChangedFloor(tRoom* room, tObject* kid); -#define drawAllLeft(x,y,left,tile) \ - /* Gate/left */\ - if (isIn(left,TILES_DOOR)) {\ - e((x)+0,(y)+2,15);\ - drawGate((x)+0,(y)-TILE_H+3,gateGetFrame(left));\ - }\ - /* normal/left */\ - if (isIn(left,TILES_FLOOR)) \ - e((x)+0,(y)+2,10);\ - /* loose moving/left */\ - if (isIn(left,TILES_LOOSEMOVING)) \ - drawLoose((x)+0,(y)+2,looseGetFrame(left),layTritop);\ - /* exit_left/left */\ - if (isIn(left,TILE_EXIT_RIGHT)) \ - e((x)+0,(y)+2,7);\ - /* pillar/left */\ - if (isIn(left,TILES_PILLAR)) \ - e((x)+0,(y)+2,44);\ - /* pillar_big_up/left */\ - if (isIn(left,TILE_BP_BOTTOM)) \ - e((x)+0,(y)+2,83);\ - if (isIn(left,TILE_BP_TOP)) \ - e((x)+0,(y)+3,85);\ - /* pressable/left */\ - if (isIn(left,TILES_RAISE_PRESSED)) \ - e((x)+0,(y)+2,10);\ - if (isIn(left,TILES_RAISE_UNPRESSED)) \ - e((x)+0,(y)+1,10);\ - if (isIn(left,TILES_DROP_PRESSED)) \ - e((x)+0,(y)+3,10);\ - if (isIn(left,TILES_DROP_UNPRESSED)) \ - e((x)+0,(y)+2,10);\ - /* debris/left */\ - if (isIn(left,TILES_BROKENTILE)) \ - e((x)+0,(y)+2,49);\ - /* spikes/left */\ - if (isIn(left,TILES_SPIKES)) {\ - e((x)+0,(y)+2,107);\ - drawSpike((x)-TILE_W+0,(y),spikeGetFrame(left),layRight);\ - }\ - /* skeleton/left */\ - if (isIn(left,TILES_SKELETON)) \ - e((x)+0,(y)+2,81);\ - /* sword/left */\ - if (isIn(left,TILES_SWORD)) \ - drawSword((x)-15,(y)-4);\ - /* potion base/left */\ - if (isIn(left,TILES_SMALLPOTION))\ - drawPotionSmallBase((x)-15,(y)-4);\ - if ((isIn(left,TILES_BIGPOTION))) \ - drawPotionBigBase((x)-15,(y)-4);\ - /* potion animation/left */\ - if (isIn(left,TILES_REDPOTION))\ - drawPotionRedBubbles((x)+3-15,(y)-15,isIn(left,TILES_BIGPOTION));\ - if (isIn(left,TILES_GREENPOTION))\ - drawPotionGreenBubbles((x)+3-15,(y)-15,isIn(left,TILES_BIGPOTION));\ - if (isIn(left,TILES_BLUEPOTION))\ - drawPotionBlueBubbles((x)+3-15,(y)-15,isIn(left,TILES_BIGPOTION)); - -#define drawAllTile(x,y,left,tile) \ - /* Wall/left */\ - if ((!isIn(tile,TILES_WALL))&&(isIn(left,TILES_WALL))) \ - e((x)+0,(y)+2,63);\ - /* torch/this */\ - if (isIn(tile,TILES_TORCH)) { /* animation */\ - drawTorchFire((x)+11+TILE_W,(y)-39); \ - /* base */\ - e((x)+3+TILE_W,(y)-24,56);\ - }\ - /* chopper/this */\ - if (isIn(tile,TILE_CHOPPER)) \ - drawChopper((x)+0,(y),chopperGetFrame(tile),layCBack);\ - /* empty_bricks/this */\ - if (isIn(tile,TILES_BRICKE1)) \ - e((x)+TILE_W+0,(y)-18,52);\ - if (isIn(tile,TILES_BRICKE2)) \ - e((x)+TILE_W+0,(y)-18,53);\ - if (isIn(tile,TILES_WINDOW)) \ - e((x)+TILE_W+0,(y)-18,54);\ - /* floor_bricks/this */\ - if (isIn(tile,TILES_BRICKF1)) \ - e((x)+TILE_W+0,(y)-18,12);\ - if (isIn(tile,TILES_BRICKF2)) \ - e((x)+TILE_W+0,(y)-18,13);\ - /* gate/this */\ - if (isIn(tile,TILES_DOOR)) \ - e((x)+0,(y)+0,14);\ - /* gate_frame/this */\ - if (isIn(tile,TILES_GATEFRAME)) \ - e((x)+24,(y)+0,17);\ - /* normal/this */\ - if (isIn(tile,TILES_FLOOR)) \ - e((x)+0,(y)+0,9);\ - /* loose moving/this */\ - if (isIn(tile,TILES_LOOSEMOVING)) \ - drawLoose((x)+0,(y)+0,looseGetFrame(tile),layTribot);\ - /* exit_left/this */\ - if (isIn(tile,TILE_EXIT_RIGHT)) \ - e((x)+0,(y)+0,5);\ - if (isIn(tile,TILE_EXIT_LEFT)) {\ - e((x)+0,(y)+0,9);\ - drawExit((x)+TILE_W+8,(y)-TILE_H-1,gateGetFrame(tile));\ - }\ - /* pillar/this */\ - if (isIn(tile,TILES_PILLAR)) \ - e((x)+0,(y)+0,43);\ - /* big_pillar/this */\ - if (isIn(tile,TILE_BP_BOTTOM)) \ - e((x)+0,(y)+0,82);\ - if (isIn(tile,TILE_BP_TOP)) \ - e((x)+8,(y)+3,87);\ - /* pressable/this */\ - /* TODO: use boolean algebra to simplify this */\ - if (isIn(tile,TILES_RAISE_UNPRESSED)&&isIn(left,TILES_WALKABLE)&&(!isIn(left,TILES_RAISE)))\ - e((x)+0,(y),57);\ - if ((isIn(tile,TILES_RAISE)&&((!isIn(tile,TILES_UNPRESSED))||(!isIn(left,TILES_WALKABLE))||isIn(left,TILES_RAISE)))&&(isIn(tile,TILES_UNPRESSED))) \ - e((x)+0,(y),58);\ - if (((isIn(tile,TILES_RAISE)&&((!isIn(tile,TILES_UNPRESSED))||(!isIn(left,TILES_WALKABLE))||isIn(left,TILES_RAISE)))&&(!isIn(tile,TILES_UNPRESSED)))||isIn(tile,TILES_DROP_UNPRESSED))\ - e((x)+0,(y)+1,58);\ - if (isIn(tile,TILES_DROP_PRESSED)) \ - e((x)+0,(y)+2,58);\ - /* debris/this */\ - if (isIn(tile,TILES_BROKENTILE)) \ - e((x)+0,(y)+0,48);\ - /* spikes/this */\ - if (isIn(tile,TILES_SPIKES)) {\ - e((x)+0,(y)+0,101);\ - drawSpike((x)+0,(y),spikeGetFrame(tile),layBack);\ - }\ - /* skeleton/this */\ - if (isIn(tile,TILES_SKELETON)) \ - e((x)+0,(y)+0,80); - -#define drawAllBack(x,y,left,tile,right,dleft) \ - /* loose moving */\ - if (isIn(tile,TILES_LOOSEMOVING)) \ - drawLoose((x)+0,(y)+3,looseGetFrame(tile),layBase);\ - /* normal */\ - if (isIn(tile,TILES_PRESSABLE)) \ - /* TODO: drop has resource 59 for unpressed/raise 47? checkgame */\ - e((x)+0,(y)+(isIn(tile,TILES_UNPRESSED)?3:4),59);\ - if (isIn(tile,TILES_WALKABLE)&&(!isIn(tile,TILES_LOOSEMOVING))&&(!isIn(tile,TILES_PRESSABLE)))\ - e((x)+0,(y)+3,11);\ - /* wall */\ - /* there are 4 cases */\ - if (wallCase(WALL_LOC_WWW))\ - e((x)+0,(y)+3,65);\ - if (wallCase(WALL_LOC_SWW))\ - e((x)+0,(y)+3,71);\ - if (wallCase(WALL_LOC_WWS))\ - e((x)+0,(y)+3,67);\ - if (wallCase(WALL_LOC_SWS))\ - e((x)+0,(y)+3,69);\ - /* empty */\ - /* tile, dleft*/\ - \ - /* gate_frame/this */\ - if (isIn(tile,TILES_SPACE)&&isIn(tile,TILES_GATEFRAME)) \ - e((x)+0,(y)+3,42);\ - /* gate/left */\ - if (isIn(tile,TILES_SPACE)&&isIn(dleft,TILES_DOOR)) \ - e((x)+0,(y)+3,16);\ - /* big_pillar/left */\ - if (isIn(tile,TILES_SPACE)&&isIn(dleft,TILE_BP_TOP)) \ - e((x)+0,(y)+3,86);\ - /* pillar/left */\ - if (isIn(tile,TILES_SPACE)&&isIn(dleft,TILES_PILLAR)) \ - e((x)+0,(y)+3,45);\ - /* wall/left */\ - if (isIn(tile,TILES_SPACE)&&isIn(dleft,TILES_WALL)) \ - e((x)+0,(y)+3,64);\ -\ - /* upper objects */\ - if (isIn(tile,TILE_EXIT_LEFT)) \ - e((x)+0+TILE_W,(y)-TILE_H+3,6);\ - if (isIn(tile,TILE_EXIT_RIGHT)) \ - e((x)+0+TILE_W,(y)-TILE_H+3,8); - - -#define drawAllFore(x,y,left,tile,right) \ - /* pillar */\ - if (isIn(tile,TILES_PILLAR)) \ - e((x)+8,(y)+0,46);\ - /* big pillar */\ - if (isIn(tile,TILE_BP_BOTTOM)) \ - e((x)+8,(y)+0,84);\ - /* wall */\ - /* there are 4 cases */\ - if (wallCase(WALL_LOC_WWW))\ - e((x)+0,(y)+0,66);\ - if (wallCase(WALL_LOC_SWW))\ - e((x)+0,(y)+0,72);\ - if (wallCase(WALL_LOC_WWS))\ - e((x)+0,(y)+0,68);\ - if (wallCase(WALL_LOC_SWS))\ - e((x)+0,(y)+0,70);\ - \ - /* the seed generation algorithm */\ - /* Upper row */\ - if (wallGetInfo(WALL_TABLE_LINE1_DARKER))\ - e((x)+0,(y)-39,75);\ - if (wallGetInfo(WALL_TABLE_LINE1_LEFT_DOWN))\ - e((x)+0,(y)-39,77);\ - if (wallGetInfo(WALL_TABLE_LINE1_RIGHT_DOWN))\ - e((x)+24,(y)-39,79);\ - if (wallGetInfo(WALL_TABLE_LINE1_RIGHT_UP))\ - e((x)+24,(y)-49,78);\ - if (wallGetInfo(WALL_TABLE_LINE1_LEFT_UP))\ - e((x)+0,(y)-54,76);\ - /* Second row */\ - if (isIn(tile,TILES_WALL))\ - e((x)+7+wallGetInfo(WALL_TABLE_LINE2_OFFSET),(y)-18,74-wallGetInfo(WALL_TABLE_LINE2_SEP));\ - if (wallGetInfo(WALL_TABLE_LINE2_LEFT_DOWN))\ - e((x)+7+wallGetInfo(WALL_TABLE_LINE2_OFFSET)+5,(y)-39+21,77);\ - if (wallGetInfo(WALL_TABLE_LINE2_RIGHT_DOWN))\ - e((x)+24+7+wallGetInfo(WALL_TABLE_LINE2_OFFSET)-32+5,(y)-39+21,79);\ - if (wallGetInfo(WALL_TABLE_LINE2_RIGHT_UP))\ - e((x)+24+7+wallGetInfo(WALL_TABLE_LINE2_OFFSET)-32+5,(y)-49+21,78);\ - if (wallGetInfo(WALL_TABLE_LINE2_LEFT_UP))\ - e((x)+7+wallGetInfo(WALL_TABLE_LINE2_OFFSET)+5,(y)-54+21,76);\ - /* Third row TODO: send to BottomTile */\ - if (isIn(tile,TILES_WALL))\ - e((x)+3+wallGetInfo(WALL_TABLE_LINE3_OFFSET),(y)+3,74-wallGetInfo(WALL_TABLE_LINE3_SEP));\ - if (wallGetInfo(WALL_TABLE_LINE3_LEFT_UP))\ - e((x)+5+wallGetInfo(WALL_TABLE_LINE3_OFFSET)+5,(y)-55+21*2,76);\ -\ - /* debris/this foreground layer */\ - if (isIn(tile,TILES_BROKENTILE)) \ - e((x)+0,(y)+0,51);\ - /* spikes/this foreground layer */\ - if (isIn(tile,TILES_SPIKES)) \ - drawSpike((x)+0,(y)+0,spikeGetFrame(tile),layFore);\ +#include "room_conf.h" #endif diff --git a/FP/src/ker/room.c b/FP/src/ker/room.c index 72adf60..7973e6a 100644 --- a/FP/src/ker/room.c +++ b/FP/src/ker/room.c @@ -144,7 +144,7 @@ int wallGetCase(tTile left, tTile tile, tTile right) { * Drawing functions */ -#define e(x,y,a) outputDrawBitmap(roomGfx.environment->pFrames[a],(x),(y)) +#define drawAll(x,y,a) outputDrawBitmap(roomGfx.environment->pFrames[a],(x),(y)) /*#define isIn(a,TILES_UNPRESSED) (((tPressable*)a.moreInfo)->action==eNormal)*/ #define chopperGetFrame(a) (((tDanger*)a.moreInfo)->frame) @@ -189,13 +189,13 @@ void drawLoose(int x, int y, int frame,tLooseLayer layer) { } switch(layer) { case layTritop: - e(x,y,tritop-3); + drawAll(x,y,tritop-3); break; case layTribot: - e(x,y,tribot-3); + drawAll(x,y,tribot-3); break; case layBase: - e(x,y,base-3); + drawAll(x,y,base-3); break; } } @@ -208,18 +208,18 @@ void drawUnlinkedLoose(int x, int y/*, int frame,tLooseLayer layer*/) { tribot=40; /* switch(layer) { case layTritop: - e(x,y,tritop-3); + drawAll(x,y,tritop-3); break; case layTribot: - e(x,y,tribot-3); + drawAll(x,y,tribot-3); break; case layBase: - e(x,y,base-3); + drawAll(x,y,base-3); break; }*/ - e(x+TILE_W,y+2,tritop-3); - e(x,y,tribot-3); - e(x,y+3,base-3); + drawAll(x+TILE_W,y+2,tritop-3); + drawAll(x,y,tribot-3); + drawAll(x,y+3,base-3); } @@ -228,20 +228,20 @@ void drawGate(int x, int y, int frame) { register int i; register const int mod=frame&7; - e(x,y+mod,27-mod); + drawAll(x,y+mod,27-mod); for (i=8;i<=frame;i+=8) - e(x,y+i+mod,20); - e(x,y+i+mod+4,18); + drawAll(x,y+i+mod,20); + drawAll(x,y+i+mod+4,18); } void drawExit(int x, int y, int frame) { /* Frame defined from 0 (open) to 50 (close) */ register int i; - if (frame<47) e(x,y+47,55); - e(x,y+51,50); + if (frame<47) drawAll(x,y+47,55); + drawAll(x,y+51,50); for (i=0;i<=frame;i+=4) - e(x,y+i+(frame&3),1); - e(x,y,2); + drawAll(x,y+i+(frame&3),1); + drawAll(x,y,2); } typedef enum {layFore=113,layRight=108,layBack=102}tSpikeLayer; @@ -259,7 +259,7 @@ void drawSpike(int x, int y, int frame, tSpikeLayer layer) { y-=2; break; } - e(x,y,(int)layer+((frame>4)?(6-frame):frame)); + drawAll(x,y,(int)layer+((frame>4)?(6-frame):frame)); } } @@ -273,12 +273,12 @@ void drawChopper(int x, int y, int frame, tChopperLayer layer) { } switch (layer) { /* TODO: use relative offsets in resources */ case layCFore: - e(x,y,97-frame); + drawAll(x,y,97-frame); break; case layCBack: - e(x,y,92-frame); + drawAll(x,y,92-frame); if (frame<3) - e(x,y-60+outputGetHeight(roomGfx.environment->pFrames[100-frame]),100-frame); + drawAll(x,y-60+outputGetHeight(roomGfx.environment->pFrames[100-frame]),100-frame); break; } } @@ -289,8 +289,8 @@ void drawChopper(int x, int y, int frame, tChopperLayer layer) { void drawBackPanel(tRoom* room,int x, int y) { tTile tile=roomGetTile(room,x,y); tTile left=roomGetTile(room,x-1,y); - drawAllLeft((x-1)*TILE_W,y*TILE_H,left,tile); - drawAllTile((x-1)*TILE_W,y*TILE_H,left,tile); + drawAllLeft((x-1)*TILE_W,y*TILE_H,left,tile,dummy,dummy); + drawAllTile((x-1)*TILE_W,y*TILE_H,left,tile,dummy,dummy); } /* bottom panel block at background */ @@ -311,7 +311,7 @@ void drawForePanel(tRoom* room,int x, int y) { tTile tile=roomGetTile(room,x,y); tTile right=roomGetTile(room,x+1,y); int cases=wallGetCase(left,tile,right); - drawAllFore((x-1)*TILE_W,y*TILE_H,left,tile,right); + drawAllFore((x-1)*TILE_W,y*TILE_H,left,tile,right,dummy); } /*