git » fp-git.git » commit a50af08

better conditional comparissions in room.conf format

author ecalot
2005-03-05 16:54:24 UTC
committer ecalot
2005-03-05 16:54:24 UTC
parent 0e8ea60c269cfa71c1cf0649c8708181f0763eaf

better conditional comparissions in room.conf format

FP/src/conf/awk/room_conf.awk +34 -3
FP/src/conf/room.conf +70 -64

diff --git a/FP/src/conf/awk/room_conf.awk b/FP/src/conf/awk/room_conf.awk
index 9dabaf7..e33174a 100644
--- a/FP/src/conf/awk/room_conf.awk
+++ b/FP/src/conf/awk/room_conf.awk
@@ -28,6 +28,32 @@
 #  DO NOT remove this copyright notice
 #
 
+function replace() {
+	if (match(value,/[a-z]+[!=]=TILE[A-Z_0-9]+/)) {
+		r=RSTART
+		l=RLENGTH
+		head=substr(value,1,r-1)
+		tail=substr(value,r+l)
+		middle=substr(value,r,l)
+		if (match(middle,/==/)) {	
+			r=RSTART
+			l=RLENGTH
+			val1=substr(middle,1,r-1)
+			val2=substr(middle,r+l)
+			not=""
+		} else {
+			match(middle,/!=/)
+			r=RSTART
+			l=RLENGTH
+			val1=substr(middle,1,r-1)
+			val2=substr(middle,r+l)
+			not="!"
+		}
+		value=sprintf("%s%sisIn(%s,%s)%s", head, not, val1, val2, tail)
+	} else {
+		keep=0
+	}
+}
 
 /^[\t ]*XX .*/ {
 	if (inIf) printf("}\n");
@@ -38,7 +64,10 @@
 /^[\t ]*cond / {
 	if (inIf) printf("}\\\n");
 	$1=""
-	printf("if (%s) {\\\n",$0)
+	value=$0
+	keep=1
+	while (keep) replace()
+	printf("if (%s) {\\\n",value)
 	inIf=1
 }
 
@@ -47,10 +76,12 @@
 	x=$2
 	y=$3
 	$1=$2=$3=""
-	r=$0
+	value=$0
+	keep=1
+	while (keep) replace()
 	comma=","
 	if ($0~/^[\t ]*$/) comma=""
-	printf("%s((x)+(%s),(y)+(%s)%s%s);\\\n",f,x,y,comma,r);
+	printf("%s((x)+(%s),(y)+(%s)%s%s);\\\n",f,x,y,comma,value);
 }
 
 END {
diff --git a/FP/src/conf/room.conf b/FP/src/conf/room.conf
index 86dc6a9..c163009 100644
--- a/FP/src/conf/room.conf
+++ b/FP/src/conf/room.conf
@@ -1,151 +1,157 @@
 
 # vim: set ts=10
 
+#TODO: use AllLeft instead of cond in AllLeft defines
+#      replace && and || for AND and OR
+#      add space support in aaa == kkkk
+#      replace wallGetblablabla(WALL_blablabla for WALL_blablabla
+#      order the elements by tile and not by layer
+
 XX AllLeft
 	# Gate/left
-	cond isIn(left,TILES_DOOR)
+	cond left==TILES_DOOR
 		drawAll	0	2	15
 		drawGate	0	-TILE_H+3	gateGetFrame(left)
 
 	# normal/left
-	cond isIn(left,TILES_FLOOR)
+	cond left==TILES_FLOOR
 		drawAll	0	2	10
 	# loose moving/left
-	cond isIn(left,TILES_LOOSEMOVING)
+	cond left==TILES_LOOSEMOVING
 		drawLoose	0	2	looseGetFrame(left),layTritop
 	# exit_left/left
-	cond isIn(left,TILE_EXIT_RIGHT)
+	cond left==TILE_EXIT_RIGHT
 		drawAll	0	2	7
 	# pillar/left
-	cond isIn(left,TILES_PILLAR)
+	cond left==TILES_PILLAR
 		drawAll	0	2	44
 	# pillar_big_up/left
-	cond isIn(left,TILE_BP_BOTTOM)
+	cond left==TILE_BP_BOTTOM
 		drawAll	0	2	83
-	cond isIn(left,TILE_BP_TOP)
+	cond left==TILE_BP_TOP
 		drawAll	0	3	85
 	# pressable/left
-	cond isIn(left,TILES_RAISE_PRESSED)
+	cond left==TILES_RAISE_PRESSED
 		drawAll	0	2	10
-	cond isIn(left,TILES_RAISE_UNPRESSED)
+	cond left==TILES_RAISE_UNPRESSED
 		drawAll	0	1	10
-	cond isIn(left,TILES_DROP_PRESSED)
+	cond left==TILES_DROP_PRESSED
 		drawAll	0	3	10
-	cond isIn(left,TILES_DROP_UNPRESSED)
+	cond left==TILES_DROP_UNPRESSED
 		drawAll	0	2	10
 	# debris/left
-	cond isIn(left,TILES_BROKENTILE)
+	cond left==TILES_BROKENTILE
 		drawAll	0	2	49
 	# spikes/left
-	cond isIn(left,TILES_SPIKES)
+	cond left==TILES_SPIKES
 		drawAll	0	2	107
 		drawSpike	-TILE_W	0	spikeGetFrame(left),layRight
 
 	# skeleton/left
-	cond isIn(left,TILES_SKELETON)
+	cond left==TILES_SKELETON
 		drawAll	0	2	81
 	# sword/left
-	cond isIn(left,TILES_SWORD)
+	cond left==TILES_SWORD
 		drawSword	-15	-4
 	# potion base/left
-	cond isIn(left,TILES_SMALLPOTION)
+	cond left==TILES_SMALLPOTION
 		drawPotionSmallBase	-15	-4
-	cond (isIn(left,TILES_BIGPOTION))
+	cond (left==TILES_BIGPOTION)
 		drawPotionBigBase	-15	-4
 	# potion animation/left
-	cond isIn(left,TILES_REDPOTION)
-		drawPotionRedBubbles	3-15	-15	isIn(left,TILES_BIGPOTION)
-	cond isIn(left,TILES_GREENPOTION)
-		drawPotionGreenBubbles	3-15	-15	isIn(left,TILES_BIGPOTION)
-	cond isIn(left,TILES_BLUEPOTION)
-		drawPotionBlueBubbles	3-15	-15	isIn(left,TILES_BIGPOTION)
+	cond left==TILES_REDPOTION
+		drawPotionRedBubbles	3-15	-15	left==TILES_BIGPOTION
+	cond left==TILES_GREENPOTION
+		drawPotionGreenBubbles	3-15	-15	left==TILES_BIGPOTION
+	cond left==TILES_BLUEPOTION
+		drawPotionBlueBubbles	3-15	-15	left==TILES_BIGPOTION
 
 XX AllTile
 	# Wall/left
-	cond (!isIn(tile,TILES_WALL))&&(isIn(left,TILES_WALL))
+	cond (tile!=TILES_WALL)&&(left==TILES_WALL)
 		drawAll	0	2	63
 	# torch/this
-	cond isIn(tile,TILES_TORCH)
+	cond tile==TILES_TORCH
 		# animation
 		drawTorchFire	11+TILE_W	-39
 		# base
 		drawAll	3+TILE_W	-24	56
 
 	# chopper/this
-	cond isIn(tile,TILE_CHOPPER)
+	cond tile==TILE_CHOPPER
 		drawChopper	0	0	chopperGetFrame(tile),layCBack
 	# empty_bricks/this
-	cond isIn(tile,TILES_BRICKE1)
+	cond tile==TILES_BRICKE1
 		drawAll	TILE_W+0	-18	52
-	cond isIn(tile,TILES_BRICKE2)
+	cond tile==TILES_BRICKE2
 		drawAll	TILE_W+0	-18	53
-	cond isIn(tile,TILES_WINDOW)
+	cond tile==TILES_WINDOW
 		drawAll	TILE_W+0	-18	54
 	# floor_bricks/this
-	cond isIn(tile,TILES_BRICKF1)
+	cond tile==TILES_BRICKF1
 		drawAll	TILE_W+0	-18	12
-	cond isIn(tile,TILES_BRICKF2)
+	cond tile==TILES_BRICKF2
 		drawAll	TILE_W+0	-18	13
 	# gate/this
-	cond isIn(tile,TILES_DOOR)
+	cond tile==TILES_DOOR
 		drawAll	0	0	14
 	# gate_frame/this
-	cond isIn(tile,TILES_GATEFRAME)
+	cond tile==TILES_GATEFRAME
 		drawAll	24	0	17
 	# normal/this
-	cond isIn(tile,TILES_FLOOR)
+	cond tile==TILES_FLOOR
 		drawAll	0	0	9
 	# loose moving/this
-	cond isIn(tile,TILES_LOOSEMOVING)
+	cond tile==TILES_LOOSEMOVING
 		drawLoose	0	0	looseGetFrame(tile),layTribot
 	# exit_left/this
-	cond isIn(tile,TILE_EXIT_RIGHT)
+	cond tile==TILE_EXIT_RIGHT
 		drawAll	0	0	5
-	cond isIn(tile,TILE_EXIT_LEFT)
+	cond tile==TILE_EXIT_LEFT
 		drawAll	0	0	9
 		drawExit	TILE_W+8	-TILE_H-1	gateGetFrame(tile)
 
 	# pillar/this
-	cond isIn(tile,TILES_PILLAR)
+	cond tile==TILES_PILLAR
 		drawAll	0	0	43
 	# big_pillar/this
-	cond isIn(tile,TILE_BP_BOTTOM)
+	cond tile==TILE_BP_BOTTOM
 		drawAll	0	0	82
-	cond isIn(tile,TILE_BP_TOP)
+	cond tile==TILE_BP_TOP
 		drawAll	8	3	87
 	# pressable/this
 	# TODO: use boolean algebra to simplify this
-	cond isIn(tile,TILES_RAISE_UNPRESSED)&&isIn(left,TILES_WALKABLE)&&(!isIn(left,TILES_RAISE))
+	cond tile==TILES_RAISE_UNPRESSED&&left==TILES_WALKABLE&&(left!=TILES_RAISE)
 		drawAll	0	0	57
-	cond (isIn(tile,TILES_RAISE)&&((!isIn(tile,TILES_UNPRESSED))||(!isIn(left,TILES_WALKABLE))||isIn(left,TILES_RAISE)))&&(isIn(tile,TILES_UNPRESSED))
+	cond (tile==TILES_RAISE&&((tile!=TILES_UNPRESSED)||(left!=TILES_WALKABLE)||left==TILES_RAISE))&&(tile==TILES_UNPRESSED)
 		drawAll	0	0	58
-	cond ((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)
+	cond ((tile==TILES_RAISE&&((tile!=TILES_UNPRESSED)||(left!=TILES_WALKABLE)||left==TILES_RAISE))&&(tile!=TILES_UNPRESSED))||tile==TILES_DROP_UNPRESSED
 		drawAll	0	1	58
-	cond isIn(tile,TILES_DROP_PRESSED)
+	cond tile==TILES_DROP_PRESSED
 		drawAll	0	2	58
 	# debris/this
-	cond isIn(tile,TILES_BROKENTILE)
+	cond tile==TILES_BROKENTILE
 		drawAll	0	0	48
 	# spikes/this
-	cond isIn(tile,TILES_SPIKES)
+	cond tile==TILES_SPIKES
 		drawAll	0	0	101
 		drawSpike	0	0	spikeGetFrame(tile),layBack
 
 	# skeleton/this
-	cond isIn(tile,TILES_SKELETON)
+	cond tile==TILES_SKELETON
 		drawAll	0	0	80
 
 XX AllBack
 	# loose moving
-	cond isIn(tile,TILES_LOOSEMOVING)
+	cond tile==TILES_LOOSEMOVING
 		drawLoose	0	3	looseGetFrame(tile),layBase
 	# normal
-	cond isIn(tile,TILES_UNPRESSED)
+	cond tile==TILES_UNPRESSED
 		# TODO: drop has resource 59 for unpressed/raise 47? checkgame
 		drawAll	0	3	59
-	cond isIn(tile,TILES_PRESSED)
+	cond tile==TILES_PRESSED
 		drawAll	0	4	59
-	cond isIn(tile,TILES_WALKABLE)&&(!isIn(tile,TILES_LOOSEMOVING))&&(!isIn(tile,TILES_PRESSABLE))
+	cond tile==TILES_WALKABLE && tile!=TILES_LOOSEMOVING && tile!=TILES_PRESSABLE
 		drawAll	0	3	11
 	# wall
 	# there are 4 cases
@@ -158,34 +164,34 @@ XX AllBack
 	cond wallCase(WALL_LOC_SWS)
 		drawAll	0	3	69
 	# empty/gate_frame/this
-	cond isIn(tile,TILES_SPACE)&&isIn(tile,TILES_GATEFRAME)
+	cond tile==TILES_SPACE && tile==TILES_GATEFRAME
 		drawAll	0	3	42
 	# empty/gate/left
-	cond isIn(tile,TILES_SPACE)&&isIn(dleft,TILES_DOOR)
+	cond tile==TILES_SPACE && dleft==TILES_DOOR
 		drawAll	0	3	16
 	# empty/big_pillar/left
-	cond isIn(tile,TILES_SPACE)&&isIn(dleft,TILE_BP_TOP)
+	cond tile==TILES_SPACE && dleft==TILE_BP_TOP
 		drawAll	0	3	86
 	# empty/pillar/left
-	cond isIn(tile,TILES_SPACE)&&isIn(dleft,TILES_PILLAR)
+	cond tile==TILES_SPACE && dleft==TILES_PILLAR
 		drawAll	0	3	45
 	# empty/wall/left
-	cond isIn(tile,TILES_SPACE)&&isIn(dleft,TILES_WALL)
+	cond tile==TILES_SPACE && dleft==TILES_WALL
 		drawAll	0	3	64
 
 	# upper objects
-	cond isIn(tile,TILE_EXIT_LEFT)
+	cond tile==TILE_EXIT_LEFT
 		drawAll	0+TILE_W	-TILE_H+3	6
-	cond isIn(tile,TILE_EXIT_RIGHT)
+	cond tile==TILE_EXIT_RIGHT
 		drawAll	0+TILE_W	-TILE_H+3	8
 
 
 XX AllFore
 	# pillar
-	cond isIn(tile,TILES_PILLAR)
+	cond tile==TILES_PILLAR
 		drawAll	8	0	46
 	# big pillar
-	cond isIn(tile,TILE_BP_BOTTOM)
+	cond tile==TILE_BP_BOTTOM
 		drawAll	8	0	84
 	# wall
 	# there are 4 cases
@@ -211,7 +217,7 @@ XX AllFore
 	cond wallGetInfo(WALL_TABLE_LINE1_LEFT_UP)
 		drawAll	0	-54	76
 	# Second row
-	cond isIn(tile,TILES_WALL)
+	cond tile==TILES_WALL
 		drawAll	7+wallGetInfo(WALL_TABLE_LINE2_OFFSET)	-18	74-wallGetInfo(WALL_TABLE_LINE2_SEP)
 	cond wallGetInfo(WALL_TABLE_LINE2_LEFT_DOWN)
 		drawAll	7+wallGetInfo(WALL_TABLE_LINE2_OFFSET)+5	-39+21	77
@@ -222,16 +228,16 @@ XX AllFore
 	cond wallGetInfo(WALL_TABLE_LINE2_LEFT_UP)
 		drawAll	7+wallGetInfo(WALL_TABLE_LINE2_OFFSET)+5	-54+21	76
 	# Third row TODO: send to BottomTile
-	cond isIn(tile,TILES_WALL)
+	cond tile==TILES_WALL
 		drawAll	3+wallGetInfo(WALL_TABLE_LINE3_OFFSET)	3	74-wallGetInfo(WALL_TABLE_LINE3_SEP)
 	cond wallGetInfo(WALL_TABLE_LINE3_LEFT_UP)
 		drawAll	5+wallGetInfo(WALL_TABLE_LINE3_OFFSET)+5	-55+21*2	76
 
 	# debris/this foreground layer
-	cond isIn(tile,TILES_BROKENTILE)
+	cond tile==TILES_BROKENTILE
 		drawAll	0	0	51
 	# spikes/this foreground layer
-	cond isIn(tile,TILES_SPIKES)
+	cond tile==TILES_SPIKES
 		drawSpike	0	0	spikeGetFrame(tile),layFore