author | ecalot
<ecalot> 2004-10-26 16:10:56 UTC |
committer | ecalot
<ecalot> 2004-10-26 16:10:56 UTC |
parent | 3e4d0f49b0b1731819106f77be1993afa64bd058 |
FP/src/conf/flags.conf | +5 | -4 |
FP/src/include/tiles.h | +1 | -1 |
FP/src/ker/kid.c | +13 | -1 |
FP/src/ker/object.c | +13 | -1 |
FP/src/ker/states.c | +6 | -9 |
FP/src/res/tiles.c | +11 | -3 |
diff --git a/FP/src/conf/flags.conf b/FP/src/conf/flags.conf index 2d8125f..f41d926 100644 --- a/FP/src/conf/flags.conf +++ b/FP/src/conf/flags.conf @@ -1,8 +1,9 @@ -u go up a screen -h go left -j go right -n go down +#u go up a screen +#h go left +#j go right +#n go down p press the floor c press the ceiling s make a sound g you hit the guard/kid +f fall down diff --git a/FP/src/include/tiles.h b/FP/src/include/tiles.h index 25bba9e..e1d6499 100644 --- a/FP/src/include/tiles.h +++ b/FP/src/include/tiles.h @@ -35,7 +35,7 @@ tiles.h: FreePrince : Tile functions #include "tiles_conf.h" -int isInGroup(unsigned char tile,short group); +int isInGroup(unsigned char tile,unsigned char backtile,short group); #endif diff --git a/FP/src/ker/kid.c b/FP/src/ker/kid.c index 3223532..6645563 100644 --- a/FP/src/ker/kid.c +++ b/FP/src/ker/kid.c @@ -141,7 +141,19 @@ void kidDraw(tKid kid) { int kidMove(tKid* kid,tKey key,tRoom* room) { #ifdef NEW_KERNEL - return stateUpdate(&key,kid,room); + short flags; + flags=stateUpdate(&key,kid,room); + if (flags&STATES_FLAG_P) + mapPressedTile( + room->level, + roomGetTile(room,(kid->location/10)+1,kid->floor+1), + room->id, + (kid->location/TILE_W)+1, + kid->floor+1 + ); + if (flags&STATES_FLAG_F) + kid->floor++; + return flags; #else int result; tTile tile; diff --git a/FP/src/ker/object.c b/FP/src/ker/object.c index 3223532..6645563 100644 --- a/FP/src/ker/object.c +++ b/FP/src/ker/object.c @@ -141,7 +141,19 @@ void kidDraw(tKid kid) { int kidMove(tKid* kid,tKey key,tRoom* room) { #ifdef NEW_KERNEL - return stateUpdate(&key,kid,room); + short flags; + flags=stateUpdate(&key,kid,room); + if (flags&STATES_FLAG_P) + mapPressedTile( + room->level, + roomGetTile(room,(kid->location/10)+1,kid->floor+1), + room->id, + (kid->location/TILE_W)+1, + kid->floor+1 + ); + if (flags&STATES_FLAG_F) + kid->floor++; + return flags; #else int result; tTile tile; diff --git a/FP/src/ker/states.c b/FP/src/ker/states.c index 371e09d..fd0edda 100644 --- a/FP/src/ker/states.c +++ b/FP/src/ker/states.c @@ -5,10 +5,7 @@ #include "kid.h" /* DIR_LEFT DIR_RIGHT */ void debugShowFlag(short optionflag) { - if (optionflag&STATES_FLAG_U) printf("ScreenUp "); - if (optionflag&STATES_FLAG_H) printf("ScreenLeft "); - if (optionflag&STATES_FLAG_J) printf("ScreenRight "); - if (optionflag&STATES_FLAG_N) printf("ScreenDown "); + if (optionflag&STATES_FLAG_F) printf("Falling "); if (optionflag&STATES_FLAG_P) printf("PressFloor "); if (optionflag&STATES_FLAG_C) printf("PressCeiling "); if (optionflag&STATES_FLAG_S) printf("Sound"); @@ -79,23 +76,23 @@ int evaluateCondition(int condition,tKey* key, tKid* kid, tRoom* room) { STATES_CONDRESULT_TRUE:STATES_CONDRESULT_FALSE; case esMapUp: DefaultFalse(room); - return isInGroup(room->fore[thisTile-12],c.argument)? + return isInGroup(room->fore[thisTile-12],room->back[thisTile-12],c.argument)? STATES_CONDRESULT_TRUE:STATES_CONDRESULT_FALSE; case esMapDown: DefaultFalse(room); - return isInGroup(room->fore[thisTile+12],c.argument)? + return isInGroup(room->fore[thisTile+12],room->back[thisTile+12],c.argument)? STATES_CONDRESULT_TRUE:STATES_CONDRESULT_FALSE; case esMapForward: DefaultFalse(room); - return isInGroup(room->fore[thisTile+((kid->direction==DIR_LEFT)?-1:1)],c.argument)? + return isInGroup(room->fore[thisTile+((kid->direction==DIR_LEFT)?-1:1)],room->back[thisTile+((kid->direction==DIR_LEFT)?-1:1)],c.argument)? STATES_CONDRESULT_TRUE:STATES_CONDRESULT_FALSE; case esMapBack: DefaultFalse(room); - return isInGroup(room->fore[thisTile+((kid->direction==DIR_LEFT)?1:-1)],c.argument)? + return isInGroup(room->fore[thisTile+((kid->direction==DIR_LEFT)?1:-1)],room->back[thisTile+((kid->direction==DIR_LEFT)?1:-1)],c.argument)? STATES_CONDRESULT_TRUE:STATES_CONDRESULT_FALSE; case esMapOn: DefaultFalse(room); - return isInGroup(room->fore[thisTile],c.argument)? + return isInGroup(room->fore[thisTile],room->back[thisTile],c.argument)? STATES_CONDRESULT_TRUE:STATES_CONDRESULT_FALSE; case esForwardTileNearerThan: DefaultFalse(kid); diff --git a/FP/src/res/tiles.c b/FP/src/res/tiles.c index 39ab8bf..17e5dbf 100644 --- a/FP/src/res/tiles.c +++ b/FP/src/res/tiles.c @@ -35,13 +35,21 @@ tiles.c: FreePrince : Tile functions #include "tiles_conf.h" -int isInGroup(unsigned char tile,short group) { +int isInGroup(unsigned char tile,unsigned char backtile,short group) { static unsigned char tileList[]=TILES_GROUP_LIST; unsigned char* i=tileList+group; + int docontinue; tile=tile&0x1F; /* get the last 5 bits and clear the beginning */ tile++; - - while ((*i)&&(*i!=tile)) i++; + do { + docontinue=0; + while ((*i)&&(((*i)&0x7f)!=tile)) i++; + if ((*i)&0x80) { + i++; + if ((*i)==(backtile+1)) return 1; + docontinue=1; + } + } while (docontinue); return *i; /* returns non-zero if true and zero if false */ }