From f3acb1a0a30b5d4cae57aabba2f1492d61cb323b Mon Sep 17 00:00:00 2001 From: Klemen Plestenjak Date: Tue, 23 Jan 2024 16:41:24 +0100 Subject: [PATCH] Add get item handle point --- game/game_tileset.h | 49 +++++++++++++++++++++++++++++++++ scripts/extract_common.py | 55 ++++++++++++++++++++++++++++++++++++++ scripts/extract_tileset.py | 3 +++ 3 files changed, 107 insertions(+) diff --git a/game/game_tileset.h b/game/game_tileset.h index 663cb32..2f96690 100644 --- a/game/game_tileset.h +++ b/game/game_tileset.h @@ -1565,4 +1565,53 @@ static Vector2 getTileOffset(BzTileID tile, i32 idx) { } } +static bool hasItemHandlePoint(BzTile tile) { + switch (tile) { + case 7680: + case 7681: + case 7682: + case 7936: + case 7937: + case 7938: + case 7939: + case 7942: + case 7943: + case 8192: + case 8193: + case 8194: + case 8195: + case 8196: + case 8197: + case 8198: + case 8199: + case 8200: + case 8201: + return true; + default: return false; + } +} +static Vector2 getItemHandlePoint(BzTile tile) { + switch (tile) { + case 7680: return (Vector2) {5, 11}; + case 7681: return (Vector2) {4, 11}; + case 7682: return (Vector2) {4, 12}; + case 7936: return (Vector2) {8, 8}; + case 7937: return (Vector2) {8, 8}; + case 7938: return (Vector2) {8, 8}; + case 7939: return (Vector2) {10, 6}; + case 7942: return (Vector2) {7, 7.5}; + case 7943: return (Vector2) {7, 9}; + case 8192: return (Vector2) {4, 12}; + case 8193: return (Vector2) {6, 10}; + case 8194: return (Vector2) {3, 13}; + case 8195: return (Vector2) {5, 11}; + case 8196: return (Vector2) {6, 10}; + case 8197: return (Vector2) {6, 10}; + case 8198: return (Vector2) {5, 11}; + case 8199: return (Vector2) {5, 11}; + case 8200: return (Vector2) {4, 12}; + case 8201: return (Vector2) {4, 12}; + default: return (Vector2) {0, 0}; + } +} #endif // GAME_TILESET_H diff --git a/scripts/extract_common.py b/scripts/extract_common.py index 0c05a28..d73103a 100644 --- a/scripts/extract_common.py +++ b/scripts/extract_common.py @@ -582,3 +582,58 @@ class EnumWriter: writer.block_end() writer.empty_line() + + def output_has_object(self, func_name, name): + writer = self.writer + tiles = {} + for tile in self.all_tiles: + if 'objectgroup' not in tile: + continue + objects = tile['objectgroup']['objects'] + for object in objects: + if object['name'] == name: + tiles[tile['id']] = object + break + + writer.output(f"static bool {func_name}(BzTile tile) ") + writer.block_start() + writer.output("switch (tile) ") + writer.block_start() + + for k, v in tiles.items(): + writer.output(f"case {k}:\n") + writer.indent() + writer.output("return true;\n") + writer.unindent() + writer.output(f"default: return false;\n") + + writer.block_end() + writer.block_end() + + def output_get_object(self, func_name, name, ret_type, default_ret, transform): + writer = self.writer + tiles = {} + for tile in self.all_tiles: + if 'objectgroup' not in tile: + continue + objects = tile['objectgroup']['objects'] + for object in objects: + if object['name'] == name: + tiles[tile['id']] = object + break + + writer.output(f"static {ret_type} {func_name}(BzTile tile) ") + writer.block_start() + writer.output("switch (tile) ") + writer.block_start() + + for k, v in tiles.items(): + ret = transform(v) + writer.output(f"case {k}: return {ret};\n") + writer.output(f"default: return {default_ret};\n") + + writer.block_end() + writer.block_end() + + + diff --git a/scripts/extract_tileset.py b/scripts/extract_tileset.py index e452288..298ba54 100644 --- a/scripts/extract_tileset.py +++ b/scripts/extract_tileset.py @@ -94,6 +94,9 @@ tile_writer.output_get_text_rect("getTextureRect", 256, 16, 16) tile_writer.output_base_index("getTileBase", "player") tile_writer.output_index_tile_offset("getTileOffset", "player", 256, 16, 16) +tile_writer.output_has_object("hasItemHandlePoint", "handle") +tile_writer.output_get_object("getItemHandlePoint", "handle", "Vector2", "(Vector2) {0, 0}", lambda x: f"(Vector2) {{{x['x']}, {x['y']}}}") + writer.header_guard_stop()