From 9480e0932b36eb8713a5b54383928fa48e5ab5ef Mon Sep 17 00:00:00 2001 From: ketmar Date: Tue, 13 Mar 2012 04:55:59 +0200 Subject: [PATCH] stubs for item usage --- asm/game.awa | 85 ++++++++++++++++++++++++++++++++++++++++++++++++---- asm/use_apple.awa | 10 +++---- asm/use_dynamite.awa | 5 ++-- asm/use_gloves.awa | 2 ++ asm/use_rocket.awa | 2 ++ asm/use_vial.awa | 2 ++ src/game.c | 4 +++ 7 files changed, 96 insertions(+), 14 deletions(-) create mode 100644 asm/use_gloves.awa create mode 100644 asm/use_rocket.awa create mode 100644 asm/use_vial.awa diff --git a/asm/game.awa b/asm/game.awa index 12ac82f..eee34a6 100644 --- a/asm/game.awa +++ b/asm/game.awa @@ -9,7 +9,7 @@ const: PSPR_JUMPING = 12 entry_game_start: rst FRST_ML_GAME - set [cur_level], 29 + set [cur_level], 10 game_restart_level: bsr clear_stack @@ -609,7 +609,25 @@ game_check_fan_move: ret +game_side_move_check: + jeq .left, [prof_dir], DIR_LEFT + psh [pos_x] + add 1 + psh -666 + mgb + jne game_no_no, 0 + ret +.left: + psh [pos_x] + sub 1 + psh -666 + mgb + jne game_no_no, 0 + ret + + game_do_side_move: + bsr game_side_move_check set [side_walked], 11 ; check fan jeq .nofan, [prof_sliding], 0 @@ -811,7 +829,7 @@ game_use_facing: game_use_drill: deflvar: .tid, .tmp mgf [pos_x], [pos_y] - jgt game_no_no, 3 + jeq game_no_no, 3 ; new entry_drill, [.tid] set pos_x, [pos_x], [.tid] @@ -1269,9 +1287,8 @@ game_no_no: pop [spr_dir] set [spr_num], 0 .quit: - bsr game_next_frame - bsr game_next_frame - ret + bsr clear_stack + jmp game_facing_loop_w2f .from_left: bsr game_next_frame bsr game_next_frame @@ -1309,6 +1326,34 @@ game_use_left: bsr game_use_dynamite jmp .quit .not_dyn: + jne .not_rocket, [.type], ITEM_ROCKET + bsr game_use_rocket + jmp .quit +.not_rocket: + jne .not_vial, [.type], ITEM_VIAL + bsr game_use_vial + jmp .quit +.not_vial: + jne .not_gloves, [.type], ITEM_GLOVES + bsr game_use_gloves + jmp .quit +.not_gloves: + jne .not_drill, [.type], ITEM_DRILL + ; turn from left + bsr game_next_frame + bsr game_next_frame + set [prof_dir], DIR_FACING + set [spr_dir], DIR_RIGHT + set [spr_num], 10 + bsr game_next_frame + bsr game_next_frame + set [spr_dir], DIR_LEFT + set [spr_num], PSPR_FACING + bsr game_next_frame + bsr game_next_frame + bsr clear_stack + jmp game_use_facing +.not_drill: ; .quit: jmp game_left_stand_loop @@ -1333,6 +1378,33 @@ game_use_right: bsr game_use_dynamite jmp .quit .not_dyn: + jne .not_rocket, [.type], ITEM_ROCKET + bsr game_use_rocket + jmp .quit +.not_rocket: + jne .not_vial, [.type], ITEM_VIAL + bsr game_use_vial + jmp .quit +.not_vial: + jne .not_gloves, [.type], ITEM_GLOVES + bsr game_use_gloves + jmp .quit +.not_gloves: + jne .not_drill, [.type], ITEM_DRILL + ; turn from right + bsr game_next_frame + bsr game_next_frame + set [prof_dir], DIR_FACING + set [spr_dir], DIR_LEFT + set [spr_num], 10 + bsr game_next_frame + bsr game_next_frame + set [spr_num], PSPR_FACING + bsr game_next_frame + bsr game_next_frame + bsr clear_stack + jmp game_use_facing +.not_drill: ; .quit: jmp game_right_stand_loop @@ -1341,6 +1413,9 @@ game_use_right: include: use_key.awa include: use_apple.awa include: use_dynamite.awa +include: use_rocket.awa +include: use_vial.awa +include: use_gloves.awa game_load_level: diff --git a/asm/use_apple.awa b/asm/use_apple.awa index 3e259a7..a8c2b7c 100644 --- a/asm/use_apple.awa +++ b/asm/use_apple.awa @@ -12,19 +12,17 @@ game_use_apple: psh [.sign] add psh [pos_y] - psh 2 - sub + sub 2 mgf - jgt game_no_no, 0 + jne game_no_no, 0 ; psh [pos_x] psh [.sign] add psh [pos_y] - psh 1 - sub + sub 1 mgf - jgt game_no_no, 0 + jne game_no_no, 0 ; set pos_ty, -12, [prof_item] set frozen, 1, [prof_item] diff --git a/asm/use_dynamite.awa b/asm/use_dynamite.awa index 7d76003..55ff6bd 100644 --- a/asm/use_dynamite.awa +++ b/asm/use_dynamite.awa @@ -12,10 +12,9 @@ game_use_dynamite: psh [.sign] add psh [pos_y] - psh 2 - sub + sub 2 mgf - jgt game_no_no, 0 + jne game_no_no, 0 ; set pos_ty, -12, [prof_item] set frozen, 1, [prof_item] diff --git a/asm/use_gloves.awa b/asm/use_gloves.awa new file mode 100644 index 0000000..09e3ba7 --- /dev/null +++ b/asm/use_gloves.awa @@ -0,0 +1,2 @@ +game_use_gloves: + jmp game_no_no diff --git a/asm/use_rocket.awa b/asm/use_rocket.awa new file mode 100644 index 0000000..14e6366 --- /dev/null +++ b/asm/use_rocket.awa @@ -0,0 +1,2 @@ +game_use_rocket: + jmp game_no_no diff --git a/asm/use_vial.awa b/asm/use_vial.awa new file mode 100644 index 0000000..2a9d375 --- /dev/null +++ b/asm/use_vial.awa @@ -0,0 +1,2 @@ +game_use_vial: + jmp game_no_no diff --git a/src/game.c b/src/game.c index 622100a..5996e8e 100644 --- a/src/game.c +++ b/src/game.c @@ -70,6 +70,7 @@ static int lnamex; static Uint8 levelback; static Uint8 bmap[MAP_HEIGHT][MAP_WIDTH]; static Uint8 fmap[MAP_HEIGHT][MAP_WIDTH]; +static Uint8 xflags[MAP_WIDTH]; static Item items[256]; static int itemCount; static int scrX, scrY; @@ -156,6 +157,7 @@ static int loadLevelInternal (ResFile *resfile, int lidx) { pos = 31; memset(bmap, 0, sizeof(bmap)); memset(fmap, 0, sizeof(fmap)); + memset(xflags, 0, sizeof(xflags)); for (int x = 1; x < MAP_WIDTH; ++x) { for (int y = 0; y < MAP_HEIGHT; ++y) { bmap[y][x] = lvl[pos++]; @@ -314,6 +316,7 @@ static inline Uint8 fgTile (int x, int y) { static inline Uint8 bgTile (int x, int y) { + if (y == -666) return (x >= 0 && x < MAP_WIDTH) ? xflags[x] : 0; return (x >= 0 && y >= 0 && x < MAP_WIDTH && y < MAP_HEIGHT) ? bmap[y][x]&0x0f : 0; } @@ -329,6 +332,7 @@ static inline void setFGTile (int x, int y, Uint8 tile) { static inline void setBGTile (int x, int y, Uint8 tile) { + if (y == -666 && x >= 0 && x < MAP_WIDTH) xflags[x] = tile; if (x >= 0 && y >= 0 && x < MAP_WIDTH && y < MAP_HEIGHT) bmap[y][x] = (bmap[y][x]&0xf0)|(tile&0x0f); } -- 2.11.4.GIT