git » fp-git.git » commit 2d1398d

moved all the room graphics to room.h

author ecalot
2005-03-02 13:22:50 UTC
committer ecalot
2005-03-02 13:22:50 UTC
parent c24e2425e4c082b3c055298d9a2fd65c61345976

moved all the room graphics to room.h

FP/src/include/room.h +235 -0
FP/src/ker/room.c +3 -233

diff --git a/FP/src/include/room.h b/FP/src/include/room.h
index b18dd32..d7ef40e 100644
--- a/FP/src/include/room.h
+++ b/FP/src/include/room.h
@@ -45,5 +45,240 @@ void roomDrawForeground(tRoom* room);
 void roomLoadGfx(long environment); /* Only to initialize environment by mapStart */
 int roomPress(tRoom* room, tObject* obj);
 void roomKidChangedFloor(tRoom* room, tObject* kid);
+
+#define drawAllLeft(left,tile) \
+	/* Wall/left */\
+	if ((!isIn(tile,TILES_WALL))&&(isIn(left,TILES_WALL))) \
+		e(63,(x-1)*TILE_W+0,y*TILE_H+2);\
+	/* Gate/left */\
+	if (isIn(left,TILES_DOOR)) {\
+		e(15,(x-1)*TILE_W+0,y*TILE_H+2);\
+		drawGate((x-1)*TILE_W+0,(y-1)*TILE_H+3,gateGetFrame(left));\
+	}\
+	/* normal/left */\
+	if (isIn(left,TILES_FLOOR)) \
+		e(10,(x-1)*TILE_W+0,y*TILE_H+2);\
+	/* loose moving/left */\
+	if (isIn(left,TILES_LOOSEMOVING)) \
+		drawLoose((x-1)*TILE_W+0,y*TILE_H+2,looseGetFrame(left),layTritop);\
+	/* exit_left/left */\
+	if (isIn(left,TILE_EXIT_RIGHT)) \
+		e(7,(x-1)*TILE_W+0,y*TILE_H+2);\
+	/* pillar/left */\
+	if (isIn(left,TILES_PILLAR)) \
+		e(44,(x-1)*TILE_W+0,y*TILE_H+2);\
+	/* pillar_big_up/left */\
+	if (isIn(left,TILE_BP_BOTTOM)) \
+		e(83,(x-1)*TILE_W+0,y*TILE_H+2);\
+	if (isIn(left,TILE_BP_TOP)) \
+		e(85,(x-1)*TILE_W+0,y*TILE_H+3);\
+	/* pressable/left */\
+	if (isIn(left,TILES_RAISE_PRESSED)) \
+		e(10,(x-1)*TILE_W+0,y*TILE_H+2);\
+	if (isIn(left,TILES_RAISE_UNPRESSED)) \
+		e(10,(x-1)*TILE_W+0,y*TILE_H+1);\
+	if (isIn(left,TILES_DROP_PRESSED)) \
+		e(10,(x-1)*TILE_W+0,y*TILE_H+3);\
+	if (isIn(left,TILES_DROP_UNPRESSED)) \
+		e(10,(x-1)*TILE_W+0,y*TILE_H+2);\
+	/* debris/left */\
+	if (isIn(left,TILES_BROKENTILE)) \
+		e(49,(x-1)*TILE_W+0,y*TILE_H+2);\
+	/* spikes/left */\
+	if (isIn(left,TILES_SPIKES)) {\
+		e(107,(x-1)*TILE_W+0,y*TILE_H+2);\
+		drawSpike((x-2)*TILE_W+0,y*TILE_H,spikeGetFrame(left),layRight);\
+	}\
+	/* skeleton/left */\
+	if (isIn(left,TILES_SKELETON)) \
+		e(81,(x-1)*TILE_W+0,y*TILE_H+2);\
+	/* torch/this */\
+	if (isIn(tile,TILES_TORCH)) { /* animation */\
+		drawTorchFire(x*TILE_W+11,y*TILE_H-39); \
+		/* base */\
+		e(56,x*TILE_W+3,y*TILE_H-24);\
+	}\
+	/* chopper/this */\
+	if (isIn(tile,TILE_CHOPPER)) \
+		drawChopper((x-1)*TILE_W+0,y*TILE_H,chopperGetFrame(tile),layCBack);\
+	/* empty_bricks/this */\
+	if (isIn(tile,TILES_BRICKE1)) \
+		e(52,x*TILE_W+0,y*TILE_H-18);\
+	if (isIn(tile,TILES_BRICKE2)) \
+		e(53,x*TILE_W+0,y*TILE_H-18);\
+	if (isIn(tile,TILES_WINDOW)) \
+		e(54,x*TILE_W+0,y*TILE_H-18);\
+	/* floor_bricks/this */\
+	if (isIn(tile,TILES_BRICKF1)) \
+		e(12,x*TILE_W+0,y*TILE_H-18);\
+	if (isIn(tile,TILES_BRICKF2)) \
+		e(13,x*TILE_W+0,y*TILE_H-18);\
+	/* gate/this */\
+	if (isIn(tile,TILES_DOOR)) \
+		e(14,(x-1)*TILE_W+0,y*TILE_H+0);\
+	/* gate_frame/this */\
+	if (isIn(tile,TILES_GATEFRAME)) \
+		e(17,(x-1)*TILE_W+24,y*TILE_H+0);\
+	/* normal/this */\
+	if (isIn(tile,TILES_FLOOR)) \
+		e(9,(x-1)*TILE_W+0,y*TILE_H+0);\
+	/* loose moving/this */\
+	if (isIn(tile,TILES_LOOSEMOVING)) \
+		drawLoose((x-1)*TILE_W+0,y*TILE_H+0,looseGetFrame(tile),layTribot);\
+	/* exit_left/this */\
+	if (isIn(tile,TILE_EXIT_RIGHT)) \
+		e(5,(x-1)*TILE_W+0,y*TILE_H+0);\
+	if (isIn(tile,TILE_EXIT_LEFT)) {\
+		e(9,(x-1)*TILE_W+0,y*TILE_H+0);\
+		drawExit(x*TILE_W+8,(y-1)*TILE_H-1,gateGetFrame(tile));\
+	}\
+	/* pillar/this */\
+	if (isIn(tile,TILES_PILLAR)) \
+		e(43,(x-1)*TILE_W+0,y*TILE_H+0);\
+	/* big_pillar/this */\
+	if (isIn(tile,TILE_BP_BOTTOM)) \
+		e(82,(x-1)*TILE_W+0,y*TILE_H+0);\
+	if (isIn(tile,TILE_BP_TOP)) \
+		e(87,(x-1)*TILE_W+8,y*TILE_H+3);\
+	/* pressable/this */\
+	/* TODO: use boolean algebra to simplify this */\
+	if (isIn(tile,TILES_RAISE_UNPRESSED)&&isIn(left,TILES_WALKABLE)&&(!isIn(left,TILES_RAISE)))\
+		e(57,(x-1)*TILE_W+0,y*TILE_H);\
+	if ((isIn(tile,TILES_RAISE)&&((!isIn(tile,TILES_UNPRESSED))||(!isIn(left,TILES_WALKABLE))||isIn(left,TILES_RAISE)))&&(isIn(tile,TILES_UNPRESSED))) \
+		e(58,(x-1)*TILE_W+0,y*TILE_H);\
+	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(58,(x-1)*TILE_W+0,y*TILE_H+1);\
+						\
+	if (isIn(tile,TILES_DROP_PRESSED)) \
+		e(58,(x-1)*TILE_W+0,y*TILE_H+2);\
+	/* debris/this */\
+	if (isIn(tile,TILES_BROKENTILE)) \
+		e(48,(x-1)*TILE_W+0,y*TILE_H+0);\
+	/* spikes/this */\
+	if (isIn(tile,TILES_SPIKES)) {\
+		e(101,(x-1)*TILE_W+0,y*TILE_H+0);\
+		drawSpike((x-1)*TILE_W+0,y*TILE_H,spikeGetFrame(tile),layBack);\
+	}\
+	/* skeleton/this */\
+	if (isIn(tile,TILES_SKELETON)) \
+		e(80,(x-1)*TILE_W+0,y*TILE_H+0);\
+	/* sword/left */\
+	if (isIn(left,TILES_SWORD)) \
+		drawSword((x-1)*TILE_W-15,y*TILE_H-4);\
+	/* potion base/left */\
+	if (isIn(left,TILES_SMALLPOTION))\
+		drawPotionSmallBase((x-1)*TILE_W-15,y*TILE_H-4);\
+	if ((isIn(left,TILES_BIGPOTION))) \
+		drawPotionBigBase((x-1)*TILE_W-15,y*TILE_H-4);\
+	/* potion animation/left */\
+	if (isIn(left,TILES_REDPOTION))\
+		drawPotionRedBubbles((x-1)*TILE_W+3-15,y*TILE_H-15,isIn(left,TILES_BIGPOTION));\
+	if (isIn(left,TILES_GREENPOTION))\
+		drawPotionGreenBubbles((x-1)*TILE_W+3-15,y*TILE_H-15,isIn(left,TILES_BIGPOTION));\
+	if (isIn(left,TILES_BLUEPOTION))\
+		drawPotionBlueBubbles((x-1)*TILE_W+3-15,y*TILE_H-15,isIn(left,TILES_BIGPOTION));
+
+#define drawAllBack(left,tile,right,dleft) \
+	/* TODO: fix this conditions to make miniterms */\
+	/* loose moving */\
+	if (isIn(tile,TILES_LOOSEMOVING)) \
+		drawLoose((x-1)*TILE_W+0,y*TILE_H+3,looseGetFrame(tile),layBase);\
+	/* normal */\
+	if (isIn(tile,TILES_PRESSABLE)) \
+		/* TODO: drop has resource 59 for unpressed/raise 47? checkgame */\
+		e(59,(x-1)*TILE_W+0,y*TILE_H+(isIn(tile,TILES_UNPRESSED)?3:4));\
+	if (isIn(tile,TILES_WALKABLE)&&(!isIn(tile,TILES_LOOSEMOVING))&&(!isIn(tile,TILES_PRESSABLE)))\
+		e(11,(x-1)*TILE_W+0,y*TILE_H+3);\
+	/* wall */\
+	/* there are 4 cases */\
+	if (wallCase(WALL_LOC_WWW))\
+		e(65,(x-1)*TILE_W+0,y*TILE_H+3);\
+	if (wallCase(WALL_LOC_SWW))\
+		e(71,(x-1)*TILE_W+0,y*TILE_H+3);\
+	if (wallCase(WALL_LOC_WWS))\
+		e(67,(x-1)*TILE_W+0,y*TILE_H+3);\
+	if (wallCase(WALL_LOC_SWS))\
+		e(69,(x-1)*TILE_W+0,y*TILE_H+3);\
+	/* empty */\
+	/* tile, dleft*/\
+	\
+	/* gate_frame/this */\
+	if (isIn(tile,TILES_SPACE)&&isIn(tile,TILES_GATEFRAME)) \
+		e(42,(x-1)*TILE_W+0,y*TILE_H+3);\
+	/* gate/left */\
+	if (isIn(tile,TILES_SPACE)&&isIn(dleft,TILES_DOOR)) \
+		e(16,(x-1)*TILE_W+0,y*TILE_H+3);\
+	/*	drawGateTop(x*TILE_W+0,(y-1)*TILE_H+3,gateGetFrame(tile));*/\
+	/* big_pillar/left */\
+	if (isIn(tile,TILES_SPACE)&&isIn(dleft,TILE_BP_TOP)) \
+		e(86,(x-1)*TILE_W+0,y*TILE_H+3);\
+	/* pillar/left */\
+	if (isIn(tile,TILES_SPACE)&&isIn(dleft,TILES_PILLAR)) \
+		e(45,(x-1)*TILE_W+0,y*TILE_H+3);\
+	/* wall/left */\
+	if (isIn(tile,TILES_SPACE)&&isIn(dleft,TILES_WALL)) \
+		e(64,(x-1)*TILE_W+0,y*TILE_H+3);\
+\
+	/* upper objects */\
+	if (isIn(tile,TILE_EXIT_LEFT)) \
+		e(6,x*TILE_W+0,(y-1)*TILE_H+3);\
+	if (isIn(tile,TILE_EXIT_RIGHT)) \
+		e(8,x*TILE_W+0,(y-1)*TILE_H+3);\
+
+
+#define drawAllFore(left,tile,right) \
+	/* pillar */\
+	if (isIn(tile,TILES_PILLAR)) \
+		e(46,x*TILE_W-24,y*TILE_H+0);\
+	/* big pillar */\
+	if (isIn(tile,TILE_BP_BOTTOM)) \
+		e(84,x*TILE_W-24,y*TILE_H+0);\
+	/* wall */\
+	/* there are 4 cases */\
+	if (wallCase(WALL_LOC_WWW))\
+		e(66,(x-1)*TILE_W+0,y*TILE_H+0);\
+	if (wallCase(WALL_LOC_SWW))\
+		e(72,(x-1)*TILE_W+0,y*TILE_H+0);\
+	if (wallCase(WALL_LOC_WWS))\
+		e(68,(x-1)*TILE_W+0,y*TILE_H+0);\
+	if (wallCase(WALL_LOC_SWS))\
+		e(70,(x-1)*TILE_W+0,y*TILE_H+0);\
+		\
+	/* the seed generation algorithm */\
+	/* Upper row */\
+	if (wallGetInfo(WALL_TABLE_LINE1_DARKER))\
+		e(75,(x-1)*TILE_W+0,y*TILE_H-39);\
+	if (wallGetInfo(WALL_TABLE_LINE1_LEFT_DOWN))\
+		e(77,(x-1)*TILE_W+0,y*TILE_H-39);\
+	if (wallGetInfo(WALL_TABLE_LINE1_RIGHT_DOWN))\
+		e(79,(x-1)*TILE_W+24,y*TILE_H-39);\
+	if (wallGetInfo(WALL_TABLE_LINE1_RIGHT_UP))\
+		e(78,(x-1)*TILE_W+24,y*TILE_H-49);\
+	if (wallGetInfo(WALL_TABLE_LINE1_LEFT_UP))\
+		e(76,(x-1)*TILE_W+0,y*TILE_H-54);\
+	/* Second row */\
+	if (isIn(tile,TILES_WALL))\
+		e(74-wallGetInfo(WALL_TABLE_LINE2_SEP),(x-1)*TILE_W+7+wallGetInfo(WALL_TABLE_LINE2_OFFSET),y*TILE_H-18);\
+	if (wallGetInfo(WALL_TABLE_LINE2_LEFT_DOWN))\
+		e(77,(x-1)*TILE_W+7+wallGetInfo(WALL_TABLE_LINE2_OFFSET)+5,y*TILE_H-39+21);\
+	if (wallGetInfo(WALL_TABLE_LINE2_RIGHT_DOWN))\
+		e(79,(x-1)*TILE_W+24+7+wallGetInfo(WALL_TABLE_LINE2_OFFSET)-32+5,y*TILE_H-39+21);\
+	if (wallGetInfo(WALL_TABLE_LINE2_RIGHT_UP))\
+		e(78,(x-1)*TILE_W+24+7+wallGetInfo(WALL_TABLE_LINE2_OFFSET)-32+5,y*TILE_H-49+21);\
+	if (wallGetInfo(WALL_TABLE_LINE2_LEFT_UP))\
+		e(76,(x-1)*TILE_W+7+wallGetInfo(WALL_TABLE_LINE2_OFFSET)+5,y*TILE_H-54+21);\
+	/* Third row TODO: send to BottomTile */\
+	if (isIn(tile,TILES_WALL))\
+		e(74-wallGetInfo(WALL_TABLE_LINE3_SEP),(x-1)*TILE_W+3+wallGetInfo(WALL_TABLE_LINE3_OFFSET),y*TILE_H+3);\
+	if (wallGetInfo(WALL_TABLE_LINE3_LEFT_UP))\
+		e(76,(x-1)*TILE_W+5+wallGetInfo(WALL_TABLE_LINE3_OFFSET)+5,y*TILE_H-55+21*2);\
+\
+	/* debris/this foreground layer */\
+	if (isIn(tile,TILES_BROKENTILE)) \
+		e(51,(x-1)*TILE_W+0,y*TILE_H+0);\
+	/* spikes/this foreground layer */\
+	if (isIn(tile,TILES_SPIKES)) \
+		drawSpike((x-1)*TILE_W+0,y*TILE_H+0,spikeGetFrame(tile),layFore);\
+
 #endif
 
diff --git a/FP/src/ker/room.c b/FP/src/ker/room.c
index d1f7b4b..4d1c6f7 100644
--- a/FP/src/ker/room.c
+++ b/FP/src/ker/room.c
@@ -285,143 +285,11 @@ void drawChopper(int x, int y, int frame, tChopperLayer layer) {
 
 /* End of special drawings */
 
-
 /* main panel block */
 void drawBackPanel(tRoom* room,int x, int y) {
 	tTile tile=roomGetTile(room,x,y);
 	tTile left=roomGetTile(room,x-1,y);
-	/* LEFT (left,tile) */
-	
-	/* Wall/left */
-	if ((!isIn(tile,TILES_WALL))&&(isIn(left,TILES_WALL))) 
-		e(63,(x-1)*TILE_W+0,y*TILE_H+2);
-	/* Gate/left */
-	if (isIn(left,TILES_DOOR)) {
-		e(15,(x-1)*TILE_W+0,y*TILE_H+2);
-		drawGate((x-1)*TILE_W+0,(y-1)*TILE_H+3,gateGetFrame(left));
-	}
-	/* normal/left */
-	if (isIn(left,TILES_FLOOR)) 
-		e(10,(x-1)*TILE_W+0,y*TILE_H+2);
-	/* loose moving/left */
-	if (isIn(left,TILES_LOOSEMOVING)) 
-		drawLoose((x-1)*TILE_W+0,y*TILE_H+2,looseGetFrame(left),layTritop);
-	/* exit_left/left */
-	if (isIn(left,TILE_EXIT_RIGHT)) 
-		e(7,(x-1)*TILE_W+0,y*TILE_H+2);
-	/* pillar/left */
-	if (isIn(left,TILES_PILLAR)) 
-		e(44,(x-1)*TILE_W+0,y*TILE_H+2);
-	/* pillar_big_up/left */
-	if (isIn(left,TILE_BP_BOTTOM)) 
-		e(83,(x-1)*TILE_W+0,y*TILE_H+2);
-	if (isIn(left,TILE_BP_TOP)) 
-		e(85,(x-1)*TILE_W+0,y*TILE_H+3);
-	/* pressable/left */
-	if (isIn(left,TILES_RAISE_PRESSED)) 
-		e(10,(x-1)*TILE_W+0,y*TILE_H+2);
-	if (isIn(left,TILES_RAISE_UNPRESSED)) 
-		e(10,(x-1)*TILE_W+0,y*TILE_H+1);
-	if (isIn(left,TILES_DROP_PRESSED)) 
-		e(10,(x-1)*TILE_W+0,y*TILE_H+3);
-	if (isIn(left,TILES_DROP_UNPRESSED)) 
-		e(10,(x-1)*TILE_W+0,y*TILE_H+2);
-	/* debris/left */
-	if (isIn(left,TILES_BROKENTILE)) 
-		e(49,(x-1)*TILE_W+0,y*TILE_H+2);
-	/* spikes/left */
-	if (isIn(left,TILES_SPIKES)) {
-		e(107,(x-1)*TILE_W+0,y*TILE_H+2);
-		drawSpike((x-2)*TILE_W+0,y*TILE_H,spikeGetFrame(left),layRight);
-	}
-	/* skeleton/left */
-	if (isIn(left,TILES_SKELETON)) 
-		e(81,(x-1)*TILE_W+0,y*TILE_H+2);
-	/* torch/this */
-	if (isIn(tile,TILES_TORCH)) { /* animation */
-		drawTorchFire(x*TILE_W+11,y*TILE_H-39); 
-		/* base */
-		e(56,x*TILE_W+3,y*TILE_H-24);
-	}
-	/* chopper/this */
-	if (isIn(tile,TILE_CHOPPER)) 
-		drawChopper((x-1)*TILE_W+0,y*TILE_H,chopperGetFrame(tile),layCBack);
-	/* empty_bricks/this */
-	if (isIn(tile,TILES_BRICKE1)) 
-		e(52,x*TILE_W+0,y*TILE_H-18);
-	if (isIn(tile,TILES_BRICKE2)) 
-		e(53,x*TILE_W+0,y*TILE_H-18);
-	if (isIn(tile,TILES_WINDOW)) 
-		e(54,x*TILE_W+0,y*TILE_H-18);
-	/* floor_bricks/this */
-	if (isIn(tile,TILES_BRICKF1)) 
-		e(12,x*TILE_W+0,y*TILE_H-18);
-	if (isIn(tile,TILES_BRICKF2)) 
-		e(13,x*TILE_W+0,y*TILE_H-18);
-	/* gate/this */
-	if (isIn(tile,TILES_DOOR)) 
-		e(14,(x-1)*TILE_W+0,y*TILE_H+0);
-	/* gate_frame/this */
-	if (isIn(tile,TILES_GATEFRAME)) 
-		e(17,(x-1)*TILE_W+24,y*TILE_H+0);
-	/* normal/this */
-	if (isIn(tile,TILES_FLOOR)) 
-		e(9,(x-1)*TILE_W+0,y*TILE_H+0);
-	/* loose moving/this */
-	if (isIn(tile,TILES_LOOSEMOVING)) 
-		drawLoose((x-1)*TILE_W+0,y*TILE_H+0,looseGetFrame(tile),layTribot);
-	/* exit_left/this */
-	if (isIn(tile,TILE_EXIT_RIGHT)) 
-		e(5,(x-1)*TILE_W+0,y*TILE_H+0);
-	if (isIn(tile,TILE_EXIT_LEFT)) {
-		e(9,(x-1)*TILE_W+0,y*TILE_H+0);
-		drawExit(x*TILE_W+8,(y-1)*TILE_H-1,gateGetFrame(tile));
-	}
-	/* pillar/this */
-	if (isIn(tile,TILES_PILLAR)) 
-		e(43,(x-1)*TILE_W+0,y*TILE_H+0);
-	/* big_pillar/this */
-	if (isIn(tile,TILE_BP_BOTTOM)) 
-		e(82,(x-1)*TILE_W+0,y*TILE_H+0);
-	if (isIn(tile,TILE_BP_TOP)) 
-		e(87,(x-1)*TILE_W+8,y*TILE_H+3);
-	/* pressable/this */
-	/* TODO: use boolean algebra to simplify this */
-	if (isIn(tile,TILES_RAISE_UNPRESSED)&&isIn(left,TILES_WALKABLE)&&(!isIn(left,TILES_RAISE)))
-		e(57,(x-1)*TILE_W+0,y*TILE_H);
-	if ((isIn(tile,TILES_RAISE)&&((!isIn(tile,TILES_UNPRESSED))||(!isIn(left,TILES_WALKABLE))||isIn(left,TILES_RAISE)))&&(isIn(tile,TILES_UNPRESSED))) 
-		e(58,(x-1)*TILE_W+0,y*TILE_H);
-	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(58,(x-1)*TILE_W+0,y*TILE_H+1);
-						
-	if (isIn(tile,TILES_DROP_PRESSED)) 
-		e(58,(x-1)*TILE_W+0,y*TILE_H+2);
-	/* debris/this */
-	if (isIn(tile,TILES_BROKENTILE)) 
-		e(48,(x-1)*TILE_W+0,y*TILE_H+0);
-	/* spikes/this */
-	if (isIn(tile,TILES_SPIKES)) {
-		e(101,(x-1)*TILE_W+0,y*TILE_H+0);
-		drawSpike((x-1)*TILE_W+0,y*TILE_H,spikeGetFrame(tile),layBack);
-	}
-	/* skeleton/this */
-	if (isIn(tile,TILES_SKELETON)) 
-		e(80,(x-1)*TILE_W+0,y*TILE_H+0);
-	/* sword/left */
-	if (isIn(left,TILES_SWORD)) 
-		drawSword((x-1)*TILE_W-15,y*TILE_H-4);
-	/* potion base/left */
-	if (isIn(left,TILES_SMALLPOTION))
-		drawPotionSmallBase((x-1)*TILE_W-15,y*TILE_H-4);
-	if ((isIn(left,TILES_BIGPOTION))) 
-		drawPotionBigBase((x-1)*TILE_W-15,y*TILE_H-4);
-	/* potion animation/left */
-	if (isIn(left,TILES_REDPOTION))
-		drawPotionRedBubbles((x-1)*TILE_W+3-15,y*TILE_H-15,isIn(left,TILES_BIGPOTION));
-	if (isIn(left,TILES_GREENPOTION))
-		drawPotionGreenBubbles((x-1)*TILE_W+3-15,y*TILE_H-15,isIn(left,TILES_BIGPOTION));
-	if (isIn(left,TILES_BLUEPOTION))
-		drawPotionBlueBubbles((x-1)*TILE_W+3-15,y*TILE_H-15,isIn(left,TILES_BIGPOTION));
+	drawAllLeft(left,tile);
 }
 
 /* bottom panel block at background */
@@ -431,53 +299,7 @@ void drawBackBottomTile(tRoom* room,int x, int y) {
 	tTile right=roomGetTile(room,x+1,y);
 	tTile dleft=roomGetTile(room,x-1,(y==3)?3:(y+1));
 	int cases=wallGetCase(left,tile,right);
-
-	/* TODO: fix this conditions to make miniterms */
-	/* loose moving */
-	if (isIn(tile,TILES_LOOSEMOVING)) 
-		drawLoose((x-1)*TILE_W+0,y*TILE_H+3,looseGetFrame(tile),layBase);
-	/* normal */
-	if (isIn(tile,TILES_PRESSABLE)) 
-		/* TODO: drop has resource 59 for unpressed/raise 47? checkgame */
-		e(59,(x-1)*TILE_W+0,y*TILE_H+(isIn(tile,TILES_UNPRESSED)?3:4));
-	if (isIn(tile,TILES_WALKABLE)&&(!isIn(tile,TILES_LOOSEMOVING))&&(!isIn(tile,TILES_PRESSABLE)))
-		e(11,(x-1)*TILE_W+0,y*TILE_H+3);
-	/* wall */
-			/* there are 4 cases */
-			if (wallCase(WALL_LOC_WWW))
-				e(65,(x-1)*TILE_W+0,y*TILE_H+3);
-			if (wallCase(WALL_LOC_SWW))
-				e(71,(x-1)*TILE_W+0,y*TILE_H+3);
-			if (wallCase(WALL_LOC_WWS))
-				e(67,(x-1)*TILE_W+0,y*TILE_H+3);
-			if (wallCase(WALL_LOC_SWS))
-				e(69,(x-1)*TILE_W+0,y*TILE_H+3);
-		if (isIn(tile,TILES_SPACE)) {
-	/* empty */
-			/* tile, dleft*/
-			
-			/* gate_frame/this */
-			if (isIn(tile,TILES_GATEFRAME)) 
-				e(42,(x-1)*TILE_W+0,y*TILE_H+3);
-			/* gate/left */
-			if (isIn(dleft,TILES_DOOR)) 
-				e(16,(x-1)*TILE_W+0,y*TILE_H+3);
-			/*	drawGateTop(x*TILE_W+0,(y-1)*TILE_H+3,gateGetFrame(tile));*/
-			/* big_pillar/left */
-			if (isIn(dleft,TILE_BP_TOP)) 
-				e(86,(x-1)*TILE_W+0,y*TILE_H+3);
-			/* pillar/left */
-			if (isIn(dleft,TILES_PILLAR)) 
-				e(45,(x-1)*TILE_W+0,y*TILE_H+3);
-			/* wall/left */
-			if (isIn(dleft,TILES_WALL)) 
-				e(64,(x-1)*TILE_W+0,y*TILE_H+3);
-		}
-	/* upper objects */
-	if (isIn(tile,TILE_EXIT_LEFT)) 
-		e(6,x*TILE_W+0,(y-1)*TILE_H+3);
-	if (isIn(tile,TILE_EXIT_RIGHT)) 
-		e(8,x*TILE_W+0,(y-1)*TILE_H+3);
+	drawAllBack(left,tile,right,dleft) \
 }
 
 /* main panel block */
@@ -488,59 +310,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);
-
-	/* pillar */
-	if (isIn(tile,TILES_PILLAR)) 
-		e(46,x*TILE_W-24,y*TILE_H+0);
-	/* big pillar */
-	if (isIn(tile,TILE_BP_BOTTOM)) 
-		e(84,x*TILE_W-24,y*TILE_H+0);
-	/* wall */
-	/* there are 4 cases */
-	if (wallCase(WALL_LOC_WWW))
-		e(66,(x-1)*TILE_W+0,y*TILE_H+0);
-	if (wallCase(WALL_LOC_SWW))
-		e(72,(x-1)*TILE_W+0,y*TILE_H+0);
-	if (wallCase(WALL_LOC_WWS))
-		e(68,(x-1)*TILE_W+0,y*TILE_H+0);
-	if (wallCase(WALL_LOC_SWS))
-		e(70,(x-1)*TILE_W+0,y*TILE_H+0);
-		
-	/* the seed generation algorithm */
-	/* Upper row */
-	if (wallGetInfo(WALL_TABLE_LINE1_DARKER))
-		e(75,(x-1)*TILE_W+0,y*TILE_H-39);
-	if (wallGetInfo(WALL_TABLE_LINE1_LEFT_DOWN))
-		e(77,(x-1)*TILE_W+0,y*TILE_H-39);
-	if (wallGetInfo(WALL_TABLE_LINE1_RIGHT_DOWN))
-		e(79,(x-1)*TILE_W+24,y*TILE_H-39);
-	if (wallGetInfo(WALL_TABLE_LINE1_RIGHT_UP))
-		e(78,(x-1)*TILE_W+24,y*TILE_H-49);
-	if (wallGetInfo(WALL_TABLE_LINE1_LEFT_UP))
-		e(76,(x-1)*TILE_W+0,y*TILE_H-54);
-	/* Second row */
-	if (isIn(tile,TILES_WALL))
-		e(74-wallGetInfo(WALL_TABLE_LINE2_SEP),(x-1)*TILE_W+7+wallGetInfo(WALL_TABLE_LINE2_OFFSET),y*TILE_H-18);
-	if (wallGetInfo(WALL_TABLE_LINE2_LEFT_DOWN))
-		e(77,(x-1)*TILE_W+7+wallGetInfo(WALL_TABLE_LINE2_OFFSET)+5,y*TILE_H-39+21);
-	if (wallGetInfo(WALL_TABLE_LINE2_RIGHT_DOWN))
-		e(79,(x-1)*TILE_W+24+7+wallGetInfo(WALL_TABLE_LINE2_OFFSET)-32+5,y*TILE_H-39+21);
-	if (wallGetInfo(WALL_TABLE_LINE2_RIGHT_UP))
-		e(78,(x-1)*TILE_W+24+7+wallGetInfo(WALL_TABLE_LINE2_OFFSET)-32+5,y*TILE_H-49+21);
-	if (wallGetInfo(WALL_TABLE_LINE2_LEFT_UP))
-		e(76,(x-1)*TILE_W+7+wallGetInfo(WALL_TABLE_LINE2_OFFSET)+5,y*TILE_H-54+21);
-	/* Third row TODO: send to BottomTile */
-	if (isIn(tile,TILES_WALL))
-		e(74-wallGetInfo(WALL_TABLE_LINE3_SEP),(x-1)*TILE_W+3+wallGetInfo(WALL_TABLE_LINE3_OFFSET),y*TILE_H+3);
-	if (wallGetInfo(WALL_TABLE_LINE3_LEFT_UP))
-		e(76,(x-1)*TILE_W+5+wallGetInfo(WALL_TABLE_LINE3_OFFSET)+5,y*TILE_H-55+21*2);
-
-	/* debris/this foreground layer */
-	if (isIn(tile,TILES_BROKENTILE)) 
-		e(51,(x-1)*TILE_W+0,y*TILE_H+0);
-	/* spikes/this foreground layer */
-	if (isIn(tile,TILES_SPIKES)) 
-		drawSpike((x-1)*TILE_W+0,y*TILE_H+0,spikeGetFrame(tile),layFore);
+	drawAllFore(left,tile,right);
 }	
 
 /*