git » fp-git.git » commit 6c52cb3

moved room graphics from room.h to room.conf

author ecalot
2005-03-05 12:12:44 UTC
committer ecalot
2005-03-05 12:12:44 UTC
parent 8200bcd9814149d1cd6cde5df6525c87e1f49049

moved room graphics from room.h to room.conf

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);
 }	
 
 /*