crocparty/game/map/game_map_entities.c
2024-02-29 13:20:18 -08:00

86 lines
2.7 KiB
C

#include <assert.h>
#include "sys/sys.h"
#include "game/game.h"
#include "game_map.h"
sys_i32 game_map_player_start_x;
sys_i32 game_map_player_start_y;
// called by map_game_map_create_entities
void map_game_map_player_spawn_create(sys_i32 x, sys_i32 y) {
// center, because the entity has top-left positioning
game_map_player_start_x = x * TILE_SZ_MICROPIXEL + PIXEL_SZ_MICROPIXEL * 8;
game_map_player_start_y = y * TILE_SZ_MICROPIXEL + PIXEL_SZ_MICROPIXEL * 16;
}
void map_game_map_collectible_cake_create(sys_i32 x, sys_i32 y) {
game_collectible_create(
(x + 2) * TILE_SZ_MICROPIXEL,
(y + 2) * TILE_SZ_MICROPIXEL,
GAME_COLLECTIBLE_TYPE_CAKE
);
}
void map_game_map_collectible_money_big_create(sys_i32 x, sys_i32 y) {
game_collectible_create(
(x + 1) * TILE_SZ_MICROPIXEL,
(y + 1) * TILE_SZ_MICROPIXEL,
GAME_COLLECTIBLE_TYPE_MONEY_BIG
);
}
void map_game_map_collectible_money_small_create(sys_i32 x, sys_i32 y) {
game_collectible_create(
(x + 1) * TILE_SZ_MICROPIXEL,
(y + 1) * TILE_SZ_MICROPIXEL,
GAME_COLLECTIBLE_TYPE_MONEY_SMALL
);
}
game_npc* game_map_npc_in_progress = NULL;
void map_game_map_npc_create(sys_i32 x, sys_i32 y) {
// center NPC
game_map_npc_in_progress = game_npc_create(
(x + 1) * TILE_SZ_MICROPIXEL,
(y + 1) * TILE_SZ_MICROPIXEL
);
}
void map_game_map_npc_set_sprite_id(sys_i32 id) {
assert(game_map_npc_in_progress && "NPC has to be in progress");
game_map_npc_in_progress->sprite_id = id;
}
void map_game_map_npc_set_palette_id(sys_i32 id) {
assert(game_map_npc_in_progress && "NPC has to be in progress");
game_map_npc_in_progress->palette_id = id;
}
void map_game_map_npc_set_inflict_id(sys_i32 id) {
assert(game_map_npc_in_progress && "NPC has to be in progress");
game_map_npc_in_progress->inflict_id = id;
}
void map_game_map_npc_set_face_left(bool face_left) {
assert(game_map_npc_in_progress && "NPC has to be in progress");
game_map_npc_in_progress->face_left = face_left;
}
void map_game_map_npc_set_flip(bool flip) {
assert(game_map_npc_in_progress && "NPC has to be in progress");
game_map_npc_in_progress->flip = flip;
}
void map_game_map_npc_set_no_cake_dialogue(const char* dialogue) {
assert(game_map_npc_in_progress && "NPC has to be in progress");
game_map_npc_in_progress->no_cake_dialogue = dialogue;
}
void map_game_map_npc_add_dialogue(const char* dialogue) {
assert(game_map_npc_in_progress && "NPC has to be in progress");
assert(game_map_npc_in_progress->n_dialogues < GAME_NPC_MAX_N_DIALOGUES &&
"NPC can't have too many dialogues");
sys_i32 ix = game_map_npc_in_progress->n_dialogues++;
game_map_npc_in_progress->dialogues[ix] = dialogue;
}