X-Git-Url: https://git.rohieb.name/hackover2013-badge-firmware.git/blobdiff_plain/926f4cca0bec5b39f4d45dc9cdece5ddcedbcd95..ac05cee74d9922fdca433dd2c03fd8542002bb28:/badge/jumpnrun/items.c diff --git a/badge/jumpnrun/items.c b/badge/jumpnrun/items.c index cc296c3..42e83b1 100644 --- a/badge/jumpnrun/items.c +++ b/badge/jumpnrun/items.c @@ -1,12 +1,13 @@ #include "items.h" #include "jumpnrun.h" +#include "game_state.h" static void on_collect_win(jumpnrun_item *self, jumpnrun_game_state *state, jumpnrun_level *lv) { (void) lv; self->flags |= JUMPNRUN_ITEM_COLLECTED; - state->status = JUMPNRUN_WON; + state->flags |= JUMPNRUN_STATE_WON; } static void on_collect_checkpoint(jumpnrun_item *self, @@ -15,11 +16,29 @@ static void on_collect_checkpoint(jumpnrun_item *self, (void) state; self->flags |= JUMPNRUN_ITEM_COLLECTED; lv->start_pos = (vec2d) { self->pos.x, - fixed_point_sub(fixed_point_add(self->pos.y, FIXED_INT(self->type->sprite.height)), hacker_extents().y) + fixed_point_sub(fixed_point_add(self->pos.y, FIXED_INT(self->type->sprite.height)), jumpnrun_player_extents().y) }; } +static void on_collect_key(jumpnrun_item *self, + jumpnrun_game_state *state, + jumpnrun_level *lv) { + (void) lv; + self->flags |= JUMPNRUN_ITEM_COLLECTED; + ++state->player.keys; +} + +static void on_collect_encrypted(jumpnrun_item *self, + jumpnrun_game_state *state, + jumpnrun_level *lv) { + if(state->player.keys != 0) { + on_collect_win(self, state, lv); + } +} + jumpnrun_item_type const jumpnrun_item_type_data[JUMPNRUN_ITEM_TYPE_COUNT] = { { { 6, 7, (uint8_t const *) "\x7c\x61\xb5\x1a\xfc\x03" }, on_collect_win }, - { { 9, 12, (uint8_t const *) "\xff\x1f\x04\x49\x10\x05\x49\x50\x04\x51\x10\x04\x7f" }, on_collect_checkpoint } + { { 9, 12, (uint8_t const *) "\xff\x1f\x04\x49\x10\x05\x49\x50\x04\x51\x10\x04\x7f" }, on_collect_checkpoint }, + { { 3, 7, (uint8_t const *) "\xa7\xfe\x01" }, on_collect_key }, + { { 9, 10, (uint8_t const *) "\xfc\x0b\x98\x65\xbd\x1d\x06\x98\x6a\x80\xff\x03" }, on_collect_encrypted } };