aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAstatin <[email protected]>2025-06-17 17:42:44 +0200
committerAstatin <[email protected]>2025-06-17 17:42:44 +0200
commitb84a1c2c0ebb484e23753c2f9db8742389fcc99a (patch)
tree0036439ad1a5cc4c08c4bef79c0255b851a894f2
parenta9142d0163f41c89196ea201ce8245899c701b82 (diff)
loading ldtk tilemaps + adding dungeon structure that can be loaded at runtime
-rw-r--r--Makefile2
-rw-r--r--definitions.gbasm59
-rw-r--r--main.gbasm21
-rw-r--r--map/dungeons.gbasm40
-rw-r--r--map/dungeons/morningforest.gbasm23
-rw-r--r--map/generationevents.gbasm56
-rw-r--r--map/loading/dungeoninfos.gbasm (renamed from map/loaddungeon.gbasm)48
-rw-r--r--map/loading/dungeontiles.gbasm (renamed from map/loading.gbasm)166
-rw-r--r--map/loading/romtiles.gbasm81
-rw-r--r--map/maps/test.ldtk416
-rw-r--r--map/maps/test.map.gbasm275
-rw-r--r--modes/dungeongeneration.gbasm36
-rw-r--r--modes/maploading.gbasm14
-rw-r--r--modes/vblank_handler_list.gbasm4
-rw-r--r--playerattacks/hop.gbasm16
-rw-r--r--rng.gbasm3
-rw-r--r--scripts/parse-ldtkmap.py37
-rw-r--r--utils.gbasm18
18 files changed, 877 insertions, 438 deletions
diff --git a/Makefile b/Makefile
index d471a23..2c502c5 100644
--- a/Makefile
+++ b/Makefile
@@ -22,7 +22,7 @@ build/main.rom: build/main.rom.unsigned
cp build/main.rom.unsigned build/main.rom
python scripts/set_checksums.py build/main.rom
-build/main.rom.unsigned: main.gbasm tileset.gbasm text.gbasm dialogues/text.gbasm map/maps.gbasm $(wildcard ./*.gbasm) $(wildcard ./**/*.gbasm)
+build/main.rom.unsigned: main.gbasm tileset.gbasm text.gbasm dialogues/text.gbasm map/maps.gbasm $(wildcard ./*.gbasm) $(wildcard ./**/*.gbasm) $(wildcard ./**/**/*.gbasm)
mkdir -p build
gbasm $< $@ > build/main.sym
diff --git a/definitions.gbasm b/definitions.gbasm
index 20724dc..c321de4 100644
--- a/definitions.gbasm
+++ b/definitions.gbasm
@@ -61,9 +61,10 @@
; bit 4: animation step should start to go up on next frame
; bit 5: if entity collision map should be updated
-.DEFINE mem_prepared_block_tile ($c00d)
-.DEFINE mem_prepared_block_position_1 ($c00e)
-.DEFINE mem_prepared_block_position_2 ($c00f)
+.DEFINE mem_number_of_attacks ($c00d)
+.DEFINE mem_entity_being_attacked_low ($c00e)
+
+; FREE SPACE POGPOGPOG $c00f
.DEFINE mem_object_load_counter ($c010)
.DEFINE mem_prepared_viewport_x ($c011)
@@ -100,9 +101,7 @@
.DEFINE mem_last_button_action ($c020)
.DEFINE mem_loading_step ($c021)
-.DEFINE mem_prepared_loading_block_tile ($c022)
-.DEFINE mem_prepared_loading_block_position_1 ($c023)
-.DEFINE mem_prepared_loading_block_position_2 ($c024)
+.DEFINE mem_rom_tilemap_addr $c022 ; Takes $c022 to $c024 (bank + ptr)
.DEFINE mem_loading_mode_vblank_func_pointer_high ($c025)
.DEFINE mem_loading_mode_vblank_func_pointer_low ($c026)
@@ -128,38 +127,46 @@
.DEFINE mem_blinking_animation_counter ($c036)
-.DEFINE mem_additional_loading_block_x ($c037)
-.DEFINE mem_additional_loading_block_y ($c038)
-.DEFINE mem_additional_loading_block_tile ($c039)
-.DEFINE mem_additional_loading_block_position_1 ($c03a)
-.DEFINE mem_additional_loading_block_position_2 ($c03b)
+.DEFINE mem_entity_spawning_pattern ($c037)
+
+; 38-3a
+.DEFINE mem_dialogue_script_bank ($c038)
+
+.DEFINE mem_dialogue_script_program_counter $c039 ; takes c039 and c03a
+
+.DEFINE mem_floor_count_bin ($c03b)
.DEFINE mem_floor_count ($c03c)
-.DEFINE mem_dialogue_script_bank ($c03d)
+.DEFINE mem_loop_frame_timer ($c03d)
+
+.DEFINE mem_bunny_status_tile ($c03e)
-.DEFINE mem_dialogue_script_program_counter $c03e ; takes c03e and c03f
+.DEFINE mem_cursor_max_position ($c03f)
-.DEFINE mem_entity_being_attacked_low ($c040)
+.DEFINE mem_vblank_jump_instruction $c040 ; takes from c040 to c042
+.DEFINE mem_vblank_jump_destination $c041 ; takes from c041 to c042
+.DEFINE mem_stat_jump_instruction $c043 ; takes from c043 to c045
+.DEFINE mem_stat_jump_destination $c044 ; takes from c044 to c045
-.DEFINE mem_vblank_jump_instruction $c041 ; takes from c041 to c043
-.DEFINE mem_vblank_jump_destination $c042 ; takes from c042 to c043
-.DEFINE mem_stat_jump_instruction $c044 ; takes from c044 to c046
-.DEFINE mem_stat_jump_destination $c045 ; takes from c045 to c046
-.DEFINE mem_number_of_attacks ($c047)
-.DEFINE mem_cursor_max_position ($c048)
+.DEFINE mem_learn_attack_dialogue_ret_ptr $c046 ; Takes $c046 to $c048 (bank + ptr)
+.DEFINE mem_learn_attack_attack_name_ptr $c049 ; Takes $c049 to $c04b (bank + ptr)
-.DEFINE mem_learn_attack_dialogue_ret_ptr $c049 ; Takes $c049 and $c04b (bank + ptr)
-.DEFINE mem_learn_attack_attack_name_ptr $c04c ; Takes $c04c and $c04e (bank + ptr)
+; FREE SPACE $c04c
-.DEFINE mem_loop_frame_timer ($c04f)
+.DEFINE mem_prepared_loading_block_position $c04e ; Takes $c04e-$c04f
+.DEFINE mem_prepared_loading_block_tile $c050 ; Takes $c050-c054
-.DEFINE mem_bunny_status_tile ($c050)
+.DEFINE mem_additional_loading_block_x ($c055)
+.DEFINE mem_additional_loading_block_y ($c056)
+.DEFINE mem_additional_loading_block_position $c057 ; Takes $c057-$c058
+.DEFINE mem_additional_loading_block_tile $c059 ; Takes $c059-$c05c
-.DEFINE mem_floor_count_bin ($c051)
+.DEFINE mem_prepared_block_position $c05d ; Takes $c05d-$c05e
+.DEFINE mem_prepared_block_tile $c05f ; Takes $c05f-$c062
-.DEFINE mem_entity_spawning_pattern ($c052)
+.DEFINE mem_dungeon $c060 ; Takes $c060-$c062
; ## WARNING THE SPACE BETWEEN $c400 and $c800 is used as a buffer for the loading map function during dungeon generation
.DEFINE mem_map_loading_buffer $c400
diff --git a/main.gbasm b/main.gbasm
index 5865842..cce2831 100644
--- a/main.gbasm
+++ b/main.gbasm
@@ -98,14 +98,6 @@
Entrypoint:
CALL =Initialize_RNG
- LD A, $20
- LD $mem_bunny_health, A
- LD A, $30
- LD $mem_bunny_mana, A
- LD A, $01
- LD $mem_floor_count, A
- LD A, $00
- LD $mem_floor_count_bin, A
LD HL, $mem_bunny_attacks
LD A, $01
@@ -117,7 +109,13 @@ Entrypoint:
LD A, $01
LD $mem_number_of_attacks, A
- CALL =Init_DemoQuest_Event
+ LD A, bank(=Morning_Forest)
+ LD ($mem_dungeon), A
+ LD HL, ptr(=Morning_Forest)
+ LD A, H
+ LD ($mem_dungeon+1), A
+ LD A, L
+ LD ($mem_dungeon+2), A
CALL =Load_Tile
@@ -129,7 +127,8 @@ Entrypoint:
.INCLUDE "dialogues/utils.gbasm"
.INCLUDE "buttons.gbasm"
.INCLUDE "map/utils.gbasm"
-.INCLUDE "map/loading.gbasm"
+.INCLUDE "map/loading/dungeontiles.gbasm"
+.INCLUDE "map/loading/romtiles.gbasm"
.INCLUDE "map/generation.gbasm"
.INCLUDE "map/objects.gbasm"
.INCLUDE "map/generationevents.gbasm"
@@ -146,7 +145,7 @@ Entrypoint:
.INCLUDE "playerattacks.gbasm"
.INCLUDE "enemiesattacks.gbasm"
.INCLUDE "dialogues/functions.gbasm"
-.INCLUDE "map/loaddungeon.gbasm"
+.INCLUDE "map/loading/dungeoninfos.gbasm"
.PADTO $4000
.INCLUDE "tileset.gbasm"
diff --git a/map/dungeons.gbasm b/map/dungeons.gbasm
index 4a37830..6c642ce 100644
--- a/map/dungeons.gbasm
+++ b/map/dungeons.gbasm
@@ -1 +1,41 @@
+; struct dungeon
+; {
+; name: *char (u24=bank+ptr),
+; flags: 0b000mTSFM,
+; M = whether or not this dungeon has a pregenerated tilemap (0 means that it's randomly generated)
+; F = whether or not the floors are counted
+; S = whether or not enemies can spawn
+; T = whether or not there is a top bar shown
+; m = whether or not you can open the attack menu
+; tilemap: ptr (u24=bank+ptr)
+; generation_event_size: u8 (size of the generation_eents_structure
+; generation_events: [x]struct (8 bytes) {
+; ...see definitions
+; }
+; max_floor: u8
+; inverted_max_floor: u8 (1/max_floor)
+; spawning_pattern: [8]struct (5 bytes){
+; entities_idx: [4]u8
+; spawn_frequencies: u8
+; }
+
+.MACRODEF GEN_EVENT_DIALOGUE floor =dialogue
+ $start:
+ .DB low($floor), $01
+ .DB bank(=dialogue), high(ptr(=dialogue)), low(ptr(=dialogue))
+ .PADTO =$start+8
+.END
+
+.MACRODEF GEN_EVENT_SPECIAL_ENTITY floor entity_idx
+ $start:
+ .DB low($floor), $02, low($entity_idx)
+ .PADTO =$start+8
+.END
+
+.MACRODEF GEN_EVENT_REMOVE_STAIRS floor
+ $start:
+ .DB low($floor), $03
+ .PADTO =$start+8
+.END
+
.INCLUDE "map/dungeons/morningforest.gbasm"
diff --git a/map/dungeons/morningforest.gbasm b/map/dungeons/morningforest.gbasm
index 4b79861..893ac57 100644
--- a/map/dungeons/morningforest.gbasm
+++ b/map/dungeons/morningforest.gbasm
@@ -1,6 +1,23 @@
-Dungeon:
- .name: .DB =Dungeon_Name_1_Txt
+Morning_Forest:
+ .name:
+ .DB bank(=Dungeon_Name_1_Txt)
+ .DB ptr(=Dungeon_Name_1_Txt)
+
+ .flag: .DB 0b00011110
+
+ .tilemap_padding: .PADTO =.tilemap_padding+3
+
+ .generation_events.size:
+ .DB low(=.generation_events.end-=.generation_events)
+ .generation_events:
+ .GEN_EVENT_DIALOGUE $01 =Demo_quest_init
+ .GEN_EVENT_DIALOGUE $10 =Demo_quest_floor_reach
+ .GEN_EVENT_SPECIAL_ENTITY $10 $06
+ .GEN_EVENT_REMOVE_STAIRS $10
+ .generation_events.end:
+
.max_floor: .DB 0x0a, inv(0x0a)
+
.spawning_patterns:
.DB $entity_cat_index, $entity_cat_index, $entity_cat_index, $entity_fimsh_index, 0b00000010
.DB $entity_cat_index, $entity_cat_index, $entity_penguin_index, $entity_fimsh_index, 0b00100011
@@ -10,3 +27,5 @@ Dungeon:
.DB $entity_cat_index, $entity_fox_index, $entity_penguin_index, $entity_fimsh_index, 0b00011111
.DB $entity_fox_index, $entity_bug_index, $entity_penguin_index, $entity_fimsh_index, 0b00011111
.DB $entity_fox_index, $entity_mouse_index, $entity_penguin_index, $entity_fimsh_index, 0b00111111
+
+.ASSERT bank(=Morning_Forest) bank(.)
diff --git a/map/generationevents.gbasm b/map/generationevents.gbasm
index 8a39b64..b540508 100644
--- a/map/generationevents.gbasm
+++ b/map/generationevents.gbasm
@@ -73,59 +73,3 @@ Generation_Event_Jump_Table:
LD HL, $mem_object_list
LD (HL), $00
RET
-
-Init_DemoQuest_Event:
- LD HL, $mem_dungeon_generation_events
-
- LD (HL), $01 ; floor
- INC HL
- LD (HL), $01 ; jump table dialogue script
- INC HL
- LD (HL), bank(=Demo_quest_init)
- INC HL
- LD (HL), high(ptr(=Demo_quest_init))
- INC HL
- LD (HL), low(ptr(=Demo_quest_init))
- INC HL
-
- INC HL
- INC HL
- INC HL
-
- LD (HL), $10 ; floor
- INC HL
- LD (HL), $02 ; jump table entity
- INC HL
- LD (HL), $06 ; demo quest bunny idx
- INC HL
-
- INC HL
- INC HL
- INC HL
- INC HL
- INC HL
-
- LD (HL), $10 ; floor
- INC HL
- LD (HL), $03 ; jump table remove stairs
- INC HL
- INC HL
-
- INC HL
- INC HL
- INC HL
- INC HL
- INC HL
-
- LD (HL), $10 ; floor
- INC HL
- LD (HL), $01 ; jump table dialogue script
- INC HL
- LD (HL), bank(=Demo_quest_floor_reach)
- INC HL
- LD (HL), high(ptr(=Demo_quest_floor_reach))
- INC HL
- LD (HL), low(ptr(=Demo_quest_floor_reach))
-
-AAAAAAAAA:
- RET
diff --git a/map/loaddungeon.gbasm b/map/loading/dungeoninfos.gbasm
index c2052c2..2b8fceb 100644
--- a/map/loaddungeon.gbasm
+++ b/map/loading/dungeoninfos.gbasm
@@ -2,9 +2,13 @@ Load_Dungeon_Txt: ; pointer to Dungeon struct in HL, bank in A
.CHANGE_BANK_TO_A
LD A, (HL+)
+ LD E, A
+ LD A, (HL+)
LD B, A
LD A, (HL+)
LD C, A
+ LD A, E
+ .CHANGE_BANK_TO_A
PUSH BC
LD H, B
@@ -30,8 +34,22 @@ Load_Dungeon_Txt: ; pointer to Dungeon struct in HL, bank in A
Load_Dungeon_Spawn_patterns: ; pointer to Dungeon struct in HL bank in A
.CHANGE_BANK_TO_A
- INC HL
- INC HL
+ LD A, L
+ ADD $07
+ LD L, A
+ LD A, H
+ ADC $00
+ LD H, A
+
+ LD A, (HL+)
+ LD B, A
+ LD A, L
+ ADD B
+ LD L, A
+ LD A, H
+ ADC $00
+ LD H, A
+
INC HL
; TODO FIX THE THING WHEN THERE'S MORE THAN 256/7 FLOORS
@@ -86,3 +104,29 @@ Load_Dungeon_Spawn_patterns: ; pointer to Dungeon struct in HL bank in A
LD $mem_entity_spawning_pattern, A
RET
+
+Load_Generation_Events: ; bank in A, dungeon ptr in HL
+ .CHANGE_BANK_TO_A
+ LD A, L
+ ADD $07
+ LD L, A
+ LD A, H
+ ADC $00
+ LD H, A
+ LD B, $00
+ LD C, (HL)
+ INC HL
+ LD D, H
+ LD E, L
+ LD HL, $mem_dungeon_generation_events
+ CALL =memcpy
+
+ LD A, C
+ CPL
+ INC A
+ ADD $80
+ LD C, A
+
+ CALL =bzero
+
+ RET
diff --git a/map/loading.gbasm b/map/loading/dungeontiles.gbasm
index dddf1a3..5f91197 100644
--- a/map/loading.gbasm
+++ b/map/loading/dungeontiles.gbasm
@@ -13,10 +13,10 @@ Load_Prepared_Map:
.For_X:
LD A, C
CALL =Load_Block
- LD A, $mem_prepared_block_position_1
+ LD A, ($mem_prepared_block_position)
SUB high($VRAM_tilemap_1)
ADD high($mem_map_loading_buffer)
- LD $mem_prepared_block_position_1, A
+ LD ($mem_prepared_block_position), A
CALL =Display_Main_Prepared_Block
INC C
@@ -68,7 +68,6 @@ Load_Next_Block_Row: ; (+1/-1 direction in B, block number (between 0-f) in C
RET
Load_Next_Block_Column: ; (+1/-1 direction in B), block number (between 0-f) in C
-
PUSH AF
PUSH BC
PUSH DE
@@ -116,7 +115,7 @@ Prepare_Scrolling_Map:
AND $07
DEC A
AND $01
- SLA A
+ ADD A
DEC A
LD B, A
LD A, $mem_bunny_direction
@@ -155,7 +154,7 @@ Construct_Tile_Address: ; Construct Tile Map address from A and B in DE
RL D
SLA E
RL D
- SLA A
+ ADD A
OR E
LD E, A
LD A, D
@@ -167,9 +166,12 @@ Construct_Tile_Address: ; Construct Tile Map address from A and B in DE
RET
-Load_Block: ; X in A, Y in B
+Load_Block:
+Load_Block_From_Solid: ; X in A, Y in B
PUSH BC
PUSH AF
+ .After_AF_BC_Push:
+
PUSH DE
CALL =Construct_Tile_Address
@@ -213,8 +215,6 @@ Load_Block: ; X in A, Y in B
OR C
LD C, A
- INC C
-
LD A, $mem_map_loading_flags
SET 2, A
LD $mem_map_loading_flags, A
@@ -223,9 +223,9 @@ Load_Block: ; X in A, Y in B
POP DE
LD A, D
- LD $mem_prepared_block_position_1, A
+ LD ($mem_prepared_block_position), A
LD A, E
- LD $mem_prepared_block_position_2, A
+ LD ($mem_prepared_block_position+1), A
POP AF
@@ -235,13 +235,52 @@ Load_Block: ; X in A, Y in B
JR Z, =Load_Block.Empty
Load_Block.Solid:
LD A, C
- LD $mem_prepared_block_tile, A
+ AND 0b0101
+ SRA A
+ RRA
+ RLCA
+ ADD $20
+
+ LD ($mem_prepared_block_tile), A
+
+ LD A, C
+ AND 0b0110
+ SRA A
+ ADD $24
+
+ LD ($mem_prepared_block_tile+1), A
+
+ LD A, C
+ AND 0b1001
+ SRA A
+ RRA
+ RLCA
+ SRA A
+ RRA
+ RLCA
+ ADD $28
+
+ LD ($mem_prepared_block_tile+2), A
+
+ LD A, C
+ AND 0b1010
+ SRA A
+ RRA
+ RRA
+ RLCA
+ ADD $2c
+
+ LD ($mem_prepared_block_tile+3), A
+
JR =Load_Block.End
Load_Block.Empty:
LD A, $00
- LD $mem_prepared_block_tile, A
+ LD ($mem_prepared_block_tile), A
+ LD ($mem_prepared_block_tile+1), A
+ LD ($mem_prepared_block_tile+2), A
+ LD ($mem_prepared_block_tile+3), A
Load_Block.End:
@@ -258,12 +297,11 @@ Load_Additional_Block:
LD B, A
LD A, $mem_additional_loading_block_x
CALL =Load_Block
- LD A, $mem_prepared_block_tile
- LD $mem_additional_loading_block_tile, A
- LD A, $mem_prepared_block_position_1
- LD $mem_additional_loading_block_position_1, A
- LD A, $mem_prepared_block_position_2
- LD $mem_additional_loading_block_position_2, A
+ .COPY_4BYTES $mem_additional_loading_block_tile, $mem_prepared_block_tile
+ LD A, ($mem_prepared_block_position)
+ LD ($mem_additional_loading_block_position), A
+ LD A, ($mem_prepared_block_position+1)
+ LD ($mem_additional_loading_block_position+1), A
RET
@@ -285,12 +323,12 @@ Display_Prepared_Blocks:
RES 6, A
LD $mem_display_flag, A
- LD A, $mem_additional_loading_block_tile
- LD $mem_prepared_block_tile, A
- LD A, $mem_additional_loading_block_position_1
- LD $mem_prepared_block_position_1, A
- LD A, $mem_additional_loading_block_position_2
- LD $mem_prepared_block_position_2, A
+ .COPY_4BYTES $mem_prepared_block_tile, $mem_additional_loading_block_tile
+
+ LD A, ($mem_additional_loading_block_position)
+ LD ($mem_prepared_block_position), A
+ LD A, ($mem_additional_loading_block_position+1)
+ LD ($mem_prepared_block_position+1), A
JP =Display_Main_Prepared_Block
Display_Main_Prepared_Block:
@@ -298,92 +336,28 @@ Display_Main_Prepared_Block:
PUSH BC
PUSH DE
- LD A, $mem_prepared_block_position_1
+ LD A, ($mem_prepared_block_position)
LD D, A
- LD A, $mem_prepared_block_position_2
+ LD A, ($mem_prepared_block_position+1)
LD E, A
- LD A, $mem_prepared_block_tile
- CP $00
- JR Z, =.Empty
- DEC A
- LD C, A
-
- AND 0b0101
- SCF
- CCF
- RR A
- RR A
- RLC A
- ADD $20
-
- LD (DE), A
-
- LD A, E
- OR $20
- LD E, A
-
- LD A, C
- AND 0b1001
- SCF
- CCF
- RR A
- RR A
- RLC A
- SCF
- CCF
- RR A
- RR A
- RLC A
- ADD $28
+ LD A, ($mem_prepared_block_tile)
LD (DE), A
INC E
-
- LD A, C
- AND 0b1010
- SRA A
- RR A
- RR A
- RLC A
- ADD $2c
-
- LD (DE), A
-
- LD A, E
- AND $DF
- LD E, A
-
- LD A, C
- AND 0b0110
- SRA A
- ADD $24
-
+ LD A, ($mem_prepared_block_tile+1)
LD (DE), A
- .End:
-
- POP DE
- POP BC
- POP AF
- RET
-
- .Empty:
- XOR A
- LD (DE), A
LD A, E
OR $20
+ DEC A
LD E, A
- XOR A
+ LD A, ($mem_prepared_block_tile+2)
LD (DE), A
+
INC E
- XOR A
- LD (DE), A
- LD A, E
- AND $DF
- LD E, A
- XOR A
+ LD A, ($mem_prepared_block_tile+3)
LD (DE), A
POP DE
diff --git a/map/loading/romtiles.gbasm b/map/loading/romtiles.gbasm
new file mode 100644
index 0000000..989a201
--- /dev/null
+++ b/map/loading/romtiles.gbasm
@@ -0,0 +1,81 @@
+Load_ROM_Block: ; X in A, Y in B
+ PUSH BC
+ PUSH AF
+
+ CP $20
+ JP NC, =Load_Block_From_Solid.After_AF_BC_Push
+
+ PUSH BC
+ LD C, A
+ LD A, B
+ CP $20
+ LD A, C
+ POP BC
+ JP NC, =Load_Block_From_Solid.After_AF_BC_Push
+
+ PUSH DE
+ PUSH HL
+
+ LD C, A
+
+
+ CALL =Construct_Tile_Address
+
+ LD A, $mem_map_loading_flags
+ SET 2, A
+ LD $mem_map_loading_flags, A
+
+ LD A, ($mem_rom_tilemap_addr+1)
+ LD H, A
+ LD A, ($mem_rom_tilemap_addr+2)
+ LD L, A
+ LD A, ($mem_rom_tilemap_addr)
+ .CHANGE_BANK_TO_A
+
+ SLA C
+ SLA B
+ LD A, $00
+ SRA B
+ RR A
+ SRA B
+ RR A
+ OR C
+ LD C, A
+
+ DBG
+
+ LD A, L
+ ADD C
+ LD L, A
+ LD A, H
+ ADC B
+ LD H, A
+
+ LD A, D
+ LD ($mem_prepared_block_position), A
+ LD A, E
+ LD ($mem_prepared_block_position+1), A
+
+ LD A, (HL+)
+ LD ($mem_prepared_block_tile), A
+ LD A, (HL)
+ LD ($mem_prepared_block_tile+1), A
+
+ LD A, L
+ DEC A
+ ADD $40
+ LD L, A
+ LD A, H
+ ADC $00
+ LD H, A
+
+ LD A, (HL+)
+ LD ($mem_prepared_block_tile+2), A
+ LD A, (HL)
+ LD ($mem_prepared_block_tile+3), A
+
+ POP HL
+ POP DE
+ POP AF
+ POP BC
+ RET
diff --git a/map/maps/test.ldtk b/map/maps/test.ldtk
index 238a266..ad0aa9d 100644
--- a/map/maps/test.ldtk
+++ b/map/maps/test.ldtk
@@ -11,7 +11,7 @@
"iid": "a44281a0-3740-11f0-9e9d-278017e89d25",
"jsonVersion": "1.5.3",
"appBuildId": 485696,
- "nextUid": 100,
+ "nextUid": 125,
"identifierStyle": "Capitalize",
"toc": [],
"worldLayout": "Free",
@@ -114,7 +114,7 @@
"isOptional": false,
"rules": [
{
- "uid": 73,
+ "uid": 100,
"active": true,
"size": 3,
"tileRectsIds": [[0]],
@@ -141,12 +141,12 @@
"outOfBoundsValue": 2,
"invalidated": false,
"perlinActive": false,
- "perlinSeed": 3803826,
+ "perlinSeed": 4244637,
"perlinScale": 0.2,
"perlinOctaves": 2
},
{
- "uid": 74,
+ "uid": 101,
"active": true,
"size": 3,
"tileRectsIds": [[15]],
@@ -173,12 +173,12 @@
"outOfBoundsValue": 2,
"invalidated": false,
"perlinActive": false,
- "perlinSeed": 7198347,
+ "perlinSeed": 5068538,
"perlinScale": 0.2,
"perlinOctaves": 2
},
{
- "uid": 75,
+ "uid": 102,
"active": true,
"size": 3,
"tileRectsIds": [[10]],
@@ -205,12 +205,12 @@
"outOfBoundsValue": 2,
"invalidated": false,
"perlinActive": false,
- "perlinSeed": 5339095,
+ "perlinSeed": 5164513,
"perlinScale": 0.2,
"perlinOctaves": 2
},
{
- "uid": 76,
+ "uid": 103,
"active": true,
"size": 3,
"tileRectsIds": [[9]],
@@ -237,12 +237,12 @@
"outOfBoundsValue": 2,
"invalidated": false,
"perlinActive": false,
- "perlinSeed": 8227451,
+ "perlinSeed": 4068836,
"perlinScale": 0.2,
"perlinOctaves": 2
},
{
- "uid": 77,
+ "uid": 104,
"active": true,
"size": 3,
"tileRectsIds": [[5]],
@@ -269,15 +269,15 @@
"outOfBoundsValue": 2,
"invalidated": false,
"perlinActive": false,
- "perlinSeed": 6349180,
+ "perlinSeed": 1289933,
"perlinScale": 0.2,
"perlinOctaves": 2
},
{
- "uid": 78,
+ "uid": 105,
"active": true,
"size": 3,
- "tileRectsIds": [[4]],
+ "tileRectsIds": [[6]],
"alpha": 1,
"chance": 1,
"breakOnMatch": true,
@@ -301,12 +301,12 @@
"outOfBoundsValue": 2,
"invalidated": false,
"perlinActive": false,
- "perlinSeed": 6851122,
+ "perlinSeed": 1592403,
"perlinScale": 0.2,
"perlinOctaves": 2
},
{
- "uid": 79,
+ "uid": 106,
"active": true,
"size": 3,
"tileRectsIds": [[2]],
@@ -333,12 +333,12 @@
"outOfBoundsValue": 2,
"invalidated": false,
"perlinActive": false,
- "perlinSeed": 2018503,
+ "perlinSeed": 1841902,
"perlinScale": 0.2,
"perlinOctaves": 2
},
{
- "uid": 80,
+ "uid": 107,
"active": true,
"size": 3,
"tileRectsIds": [[1]],
@@ -365,12 +365,12 @@
"outOfBoundsValue": 2,
"invalidated": false,
"perlinActive": false,
- "perlinSeed": 2346343,
+ "perlinSeed": 7382030,
"perlinScale": 0.2,
"perlinOctaves": 2
},
{
- "uid": 81,
+ "uid": 108,
"active": true,
"size": 3,
"tileRectsIds": [[3]],
@@ -397,12 +397,12 @@
"outOfBoundsValue": 2,
"invalidated": false,
"perlinActive": false,
- "perlinSeed": 45566,
+ "perlinSeed": 2692299,
"perlinScale": 0.2,
"perlinOctaves": 2
},
{
- "uid": 82,
+ "uid": 109,
"active": true,
"size": 3,
"tileRectsIds": [[8]],
@@ -429,12 +429,12 @@
"outOfBoundsValue": 2,
"invalidated": false,
"perlinActive": false,
- "perlinSeed": 9369893,
+ "perlinSeed": 4075634,
"perlinScale": 0.2,
"perlinOctaves": 2
},
{
- "uid": 83,
+ "uid": 110,
"active": true,
"size": 3,
"tileRectsIds": [[4]],
@@ -461,12 +461,12 @@
"outOfBoundsValue": 2,
"invalidated": false,
"perlinActive": false,
- "perlinSeed": 3950552,
+ "perlinSeed": 4841810,
"perlinScale": 0.2,
"perlinOctaves": 2
},
{
- "uid": 84,
+ "uid": 111,
"active": true,
"size": 3,
"tileRectsIds": [[12]],
@@ -493,12 +493,12 @@
"outOfBoundsValue": 2,
"invalidated": false,
"perlinActive": false,
- "perlinSeed": 4706061,
+ "perlinSeed": 704296,
"perlinScale": 0.2,
"perlinOctaves": 2
},
{
- "uid": 85,
+ "uid": 112,
"active": true,
"size": 3,
"tileRectsIds": [[10]],
@@ -525,12 +525,12 @@
"outOfBoundsValue": 2,
"invalidated": false,
"perlinActive": false,
- "perlinSeed": 6408909,
+ "perlinSeed": 8309516,
"perlinScale": 0.2,
"perlinOctaves": 2
},
{
- "uid": 86,
+ "uid": 113,
"active": true,
"size": 3,
"tileRectsIds": [[9]],
@@ -557,12 +557,12 @@
"outOfBoundsValue": 2,
"invalidated": false,
"perlinActive": false,
- "perlinSeed": 7141269,
+ "perlinSeed": 1027723,
"perlinScale": 0.2,
"perlinOctaves": 2
},
{
- "uid": 87,
+ "uid": 114,
"active": true,
"size": 3,
"tileRectsIds": [[5]],
@@ -589,12 +589,12 @@
"outOfBoundsValue": 2,
"invalidated": false,
"perlinActive": false,
- "perlinSeed": 9407965,
+ "perlinSeed": 641287,
"perlinScale": 0.2,
"perlinOctaves": 2
},
{
- "uid": 88,
+ "uid": 115,
"active": true,
"size": 3,
"tileRectsIds": [[6]],
@@ -621,12 +621,12 @@
"outOfBoundsValue": 2,
"invalidated": false,
"perlinActive": false,
- "perlinSeed": 4145457,
+ "perlinSeed": 7937538,
"perlinScale": 0.2,
"perlinOctaves": 2
},
{
- "uid": 89,
+ "uid": 116,
"active": true,
"size": 3,
"tileRectsIds": [[11]],
@@ -653,12 +653,12 @@
"outOfBoundsValue": 2,
"invalidated": false,
"perlinActive": false,
- "perlinSeed": 1868485,
+ "perlinSeed": 2317231,
"perlinScale": 0.2,
"perlinOctaves": 2
},
{
- "uid": 90,
+ "uid": 117,
"active": true,
"size": 3,
"tileRectsIds": [[13]],
@@ -685,12 +685,12 @@
"outOfBoundsValue": 2,
"invalidated": false,
"perlinActive": false,
- "perlinSeed": 1947474,
+ "perlinSeed": 3927948,
"perlinScale": 0.2,
"perlinOctaves": 2
},
{
- "uid": 91,
+ "uid": 118,
"active": true,
"size": 3,
"tileRectsIds": [[7]],
@@ -717,12 +717,12 @@
"outOfBoundsValue": 2,
"invalidated": false,
"perlinActive": false,
- "perlinSeed": 7357459,
+ "perlinSeed": 7802878,
"perlinScale": 0.2,
"perlinOctaves": 2
},
{
- "uid": 92,
+ "uid": 119,
"active": true,
"size": 3,
"tileRectsIds": [[14]],
@@ -749,12 +749,12 @@
"outOfBoundsValue": 2,
"invalidated": false,
"perlinActive": false,
- "perlinSeed": 5046169,
+ "perlinSeed": 72667,
"perlinScale": 0.2,
"perlinOctaves": 2
},
{
- "uid": 93,
+ "uid": 120,
"active": true,
"size": 3,
"tileRectsIds": [[15]],
@@ -781,12 +781,12 @@
"outOfBoundsValue": 2,
"invalidated": false,
"perlinActive": false,
- "perlinSeed": 878430,
+ "perlinSeed": 8526192,
"perlinScale": 0.2,
"perlinOctaves": 2
},
{
- "uid": 94,
+ "uid": 121,
"active": true,
"size": 3,
"tileRectsIds": [[15]],
@@ -813,12 +813,12 @@
"outOfBoundsValue": 2,
"invalidated": false,
"perlinActive": false,
- "perlinSeed": 3740860,
+ "perlinSeed": 5570921,
"perlinScale": 0.2,
"perlinOctaves": 2
},
{
- "uid": 95,
+ "uid": 122,
"active": true,
"size": 3,
"tileRectsIds": [[15]],
@@ -845,12 +845,12 @@
"outOfBoundsValue": 2,
"invalidated": false,
"perlinActive": false,
- "perlinSeed": 746466,
+ "perlinSeed": 6697741,
"perlinScale": 0.2,
"perlinOctaves": 2
},
{
- "uid": 96,
+ "uid": 123,
"active": true,
"size": 3,
"tileRectsIds": [[15]],
@@ -877,12 +877,12 @@
"outOfBoundsValue": 2,
"invalidated": false,
"perlinActive": false,
- "perlinSeed": 2011540,
+ "perlinSeed": 2048853,
"perlinScale": 0.2,
"perlinOctaves": 2
},
{
- "uid": 97,
+ "uid": 124,
"active": true,
"size": 1,
"tileRectsIds": [[15]],
@@ -909,7 +909,7 @@
"outOfBoundsValue": 2,
"invalidated": false,
"perlinActive": false,
- "perlinSeed": 6517407,
+ "perlinSeed": 4198929,
"perlinScale": 0.2,
"perlinOctaves": 2
}
@@ -1098,162 +1098,162 @@
"optionalRules": [],
"intGridCsv": [],
"autoLayerTiles": [
- { "px": [208,176], "src": [48,48], "f": 0, "t": 15, "d": [97,365], "a": 1 },
- { "px": [192,176], "src": [48,48], "f": 0, "t": 15, "d": [96,364], "a": 1 },
- { "px": [224,176], "src": [48,48], "f": 0, "t": 15, "d": [95,366], "a": 1 },
- { "px": [208,192], "src": [48,48], "f": 0, "t": 15, "d": [95,397], "a": 1 },
- { "px": [192,160], "src": [48,48], "f": 0, "t": 15, "d": [94,332], "a": 1 },
- { "px": [224,160], "src": [48,48], "f": 0, "t": 15, "d": [93,334], "a": 1 },
- { "px": [208,64], "src": [32,48], "f": 0, "t": 14, "d": [92,141], "a": 1 },
- { "px": [384,96], "src": [32,48], "f": 0, "t": 14, "d": [92,216], "a": 1 },
- { "px": [384,112], "src": [32,48], "f": 0, "t": 14, "d": [92,248], "a": 1 },
- { "px": [176,160], "src": [32,48], "f": 0, "t": 14, "d": [92,331], "a": 1 },
- { "px": [352,224], "src": [32,48], "f": 0, "t": 14, "d": [92,470], "a": 1 },
- { "px": [352,464], "src": [48,16], "f": 0, "t": 7, "d": [91,950], "a": 1 },
- { "px": [112,160], "src": [16,48], "f": 0, "t": 13, "d": [90,327], "a": 1 },
- { "px": [240,160], "src": [16,48], "f": 0, "t": 13, "d": [90,335], "a": 1 },
- { "px": [400,96], "src": [48,32], "f": 0, "t": 11, "d": [89,217], "a": 1 },
- { "px": [208,160], "src": [48,32], "f": 0, "t": 11, "d": [89,333], "a": 1 },
- { "px": [352,208], "src": [48,32], "f": 0, "t": 11, "d": [89,438], "a": 1 },
- { "px": [368,208], "src": [48,32], "f": 0, "t": 11, "d": [89,439], "a": 1 },
- { "px": [176,176], "src": [32,16], "f": 0, "t": 6, "d": [88,363], "a": 1 },
- { "px": [192,192], "src": [32,16], "f": 0, "t": 6, "d": [88,396], "a": 1 },
- { "px": [400,112], "src": [16,16], "f": 0, "t": 5, "d": [87,249], "a": 1 },
- { "px": [240,176], "src": [16,16], "f": 0, "t": 5, "d": [87,367], "a": 1 },
- { "px": [224,192], "src": [16,16], "f": 0, "t": 5, "d": [87,398], "a": 1 },
- { "px": [368,224], "src": [16,16], "f": 0, "t": 5, "d": [87,471], "a": 1 },
- { "px": [192,144], "src": [16,32], "f": 0, "t": 9, "d": [86,300], "a": 1 },
- { "px": [240,144], "src": [16,32], "f": 0, "t": 9, "d": [86,303], "a": 1 },
- { "px": [176,144], "src": [32,32], "f": 0, "t": 10, "d": [85,299], "a": 1 },
- { "px": [224,144], "src": [32,32], "f": 0, "t": 10, "d": [85,302], "a": 1 },
- { "px": [32,48], "src": [0,48], "f": 0, "t": 12, "d": [84,98], "a": 1 },
- { "px": [240,48], "src": [0,48], "f": 0, "t": 12, "d": [84,111], "a": 1 },
- { "px": [32,64], "src": [0,48], "f": 0, "t": 12, "d": [84,130], "a": 1 },
- { "px": [96,64], "src": [0,48], "f": 0, "t": 12, "d": [84,134], "a": 1 },
- { "px": [128,64], "src": [0,48], "f": 0, "t": 12, "d": [84,136], "a": 1 },
- { "px": [176,64], "src": [0,48], "f": 0, "t": 12, "d": [84,139], "a": 1 },
- { "px": [208,80], "src": [0,48], "f": 0, "t": 12, "d": [84,173], "a": 1 },
- { "px": [416,80], "src": [0,48], "f": 0, "t": 12, "d": [84,186], "a": 1 },
- { "px": [464,96], "src": [0,48], "f": 0, "t": 12, "d": [84,221], "a": 1 },
- { "px": [304,112], "src": [0,48], "f": 0, "t": 12, "d": [84,243], "a": 1 },
- { "px": [464,112], "src": [0,48], "f": 0, "t": 12, "d": [84,253], "a": 1 },
- { "px": [304,128], "src": [0,48], "f": 0, "t": 12, "d": [84,275], "a": 1 },
- { "px": [464,128], "src": [0,48], "f": 0, "t": 12, "d": [84,285], "a": 1 },
- { "px": [112,144], "src": [0,48], "f": 0, "t": 12, "d": [84,295], "a": 1 },
- { "px": [464,144], "src": [0,48], "f": 0, "t": 12, "d": [84,317], "a": 1 },
- { "px": [320,160], "src": [0,48], "f": 0, "t": 12, "d": [84,340], "a": 1 },
- { "px": [112,176], "src": [0,48], "f": 0, "t": 12, "d": [84,359], "a": 1 },
- { "px": [320,176], "src": [0,48], "f": 0, "t": 12, "d": [84,372], "a": 1 },
- { "px": [448,288], "src": [0,48], "f": 0, "t": 12, "d": [84,604], "a": 1 },
- { "px": [256,304], "src": [0,48], "f": 0, "t": 12, "d": [84,624], "a": 1 },
- { "px": [448,304], "src": [0,48], "f": 0, "t": 12, "d": [84,636], "a": 1 },
- { "px": [256,320], "src": [0,48], "f": 0, "t": 12, "d": [84,656], "a": 1 },
- { "px": [256,336], "src": [0,48], "f": 0, "t": 12, "d": [84,688], "a": 1 },
- { "px": [336,336], "src": [0,48], "f": 0, "t": 12, "d": [84,693], "a": 1 },
- { "px": [368,336], "src": [0,48], "f": 0, "t": 12, "d": [84,695], "a": 1 },
- { "px": [432,336], "src": [0,48], "f": 0, "t": 12, "d": [84,699], "a": 1 },
- { "px": [176,80], "src": [0,16], "f": 0, "t": 4, "d": [83,171], "a": 1 },
- { "px": [384,128], "src": [0,16], "f": 0, "t": 4, "d": [83,280], "a": 1 },
- { "px": [208,208], "src": [0,16], "f": 0, "t": 4, "d": [83,429], "a": 1 },
- { "px": [352,240], "src": [0,16], "f": 0, "t": 4, "d": [83,502], "a": 1 },
- { "px": [384,304], "src": [0,16], "f": 0, "t": 4, "d": [83,632], "a": 1 },
- { "px": [336,352], "src": [0,16], "f": 0, "t": 4, "d": [83,725], "a": 1 },
- { "px": [368,352], "src": [0,16], "f": 0, "t": 4, "d": [83,727], "a": 1 },
- { "px": [176,32], "src": [0,32], "f": 0, "t": 8, "d": [82,75], "a": 1 },
- { "px": [96,48], "src": [0,32], "f": 0, "t": 8, "d": [82,102], "a": 1 },
- { "px": [128,48], "src": [0,32], "f": 0, "t": 8, "d": [82,104], "a": 1 },
- { "px": [368,320], "src": [0,32], "f": 0, "t": 8, "d": [82,663], "a": 1 },
- { "px": [320,448], "src": [0,32], "f": 0, "t": 8, "d": [82,916], "a": 1 },
- { "px": [352,448], "src": [0,32], "f": 0, "t": 8, "d": [82,918], "a": 1 },
- { "px": [384,448], "src": [0,32], "f": 0, "t": 8, "d": [82,920], "a": 1 },
- { "px": [48,32], "src": [48,0], "f": 0, "t": 3, "d": [81,67], "a": 1 },
- { "px": [192,48], "src": [48,0], "f": 0, "t": 3, "d": [81,108], "a": 1 },
- { "px": [224,64], "src": [48,0], "f": 0, "t": 3, "d": [81,142], "a": 1 },
- { "px": [432,64], "src": [48,0], "f": 0, "t": 3, "d": [81,155], "a": 1 },
- { "px": [48,80], "src": [48,0], "f": 0, "t": 3, "d": [81,163], "a": 1 },
- { "px": [112,80], "src": [48,0], "f": 0, "t": 3, "d": [81,167], "a": 1 },
- { "px": [336,80], "src": [48,0], "f": 0, "t": 3, "d": [81,181], "a": 1 },
- { "px": [352,80], "src": [48,0], "f": 0, "t": 3, "d": [81,182], "a": 1 },
- { "px": [368,80], "src": [48,0], "f": 0, "t": 3, "d": [81,183], "a": 1 },
- { "px": [224,96], "src": [48,0], "f": 0, "t": 3, "d": [81,206], "a": 1 },
- { "px": [96,128], "src": [48,0], "f": 0, "t": 3, "d": [81,262], "a": 1 },
- { "px": [432,176], "src": [48,0], "f": 0, "t": 3, "d": [81,379], "a": 1 },
- { "px": [96,192], "src": [48,0], "f": 0, "t": 3, "d": [81,390], "a": 1 },
- { "px": [384,208], "src": [48,0], "f": 0, "t": 3, "d": [81,440], "a": 1 },
- { "px": [416,272], "src": [48,0], "f": 0, "t": 3, "d": [81,570], "a": 1 },
- { "px": [432,272], "src": [48,0], "f": 0, "t": 3, "d": [81,571], "a": 1 },
- { "px": [272,288], "src": [48,0], "f": 0, "t": 3, "d": [81,593], "a": 1 },
- { "px": [288,288], "src": [48,0], "f": 0, "t": 3, "d": [81,594], "a": 1 },
- { "px": [336,464], "src": [48,0], "f": 0, "t": 3, "d": [81,949], "a": 1 },
- { "px": [368,464], "src": [48,0], "f": 0, "t": 3, "d": [81,951], "a": 1 },
- { "px": [64,32], "src": [16,0], "f": 0, "t": 1, "d": [80,68], "a": 1 },
- { "px": [64,80], "src": [16,0], "f": 0, "t": 1, "d": [80,164], "a": 1 },
- { "px": [240,96], "src": [16,0], "f": 0, "t": 1, "d": [80,207], "a": 1 },
- { "px": [304,384], "src": [16,0], "f": 0, "t": 1, "d": [80,787], "a": 1 },
- { "px": [224,32], "src": [32,0], "f": 0, "t": 2, "d": [79,78], "a": 1 },
- { "px": [160,48], "src": [32,0], "f": 0, "t": 2, "d": [79,106], "a": 1 },
- { "px": [80,128], "src": [32,0], "f": 0, "t": 2, "d": [79,261], "a": 1 },
- { "px": [96,160], "src": [32,0], "f": 0, "t": 2, "d": [79,326], "a": 1 },
- { "px": [80,192], "src": [32,0], "f": 0, "t": 2, "d": [79,389], "a": 1 },
- { "px": [400,368], "src": [32,0], "f": 0, "t": 2, "d": [79,761], "a": 1 },
- { "px": [32,80], "src": [0,16], "f": 0, "t": 4, "d": [78,162], "a": 1 },
- { "px": [96,80], "src": [0,16], "f": 0, "t": 4, "d": [78,166], "a": 1 },
- { "px": [448,80], "src": [0,16], "f": 0, "t": 4, "d": [78,188], "a": 1 },
- { "px": [208,96], "src": [0,16], "f": 0, "t": 4, "d": [78,205], "a": 1 },
- { "px": [304,144], "src": [0,16], "f": 0, "t": 4, "d": [78,307], "a": 1 },
- { "px": [320,192], "src": [0,16], "f": 0, "t": 4, "d": [78,404], "a": 1 },
- { "px": [336,208], "src": [0,16], "f": 0, "t": 4, "d": [78,437], "a": 1 },
- { "px": [304,304], "src": [0,16], "f": 0, "t": 4, "d": [78,627], "a": 1 },
- { "px": [320,320], "src": [0,16], "f": 0, "t": 4, "d": [78,660], "a": 1 },
- { "px": [256,352], "src": [0,16], "f": 0, "t": 4, "d": [78,720], "a": 1 },
- { "px": [272,368], "src": [0,16], "f": 0, "t": 4, "d": [78,753], "a": 1 },
- { "px": [288,384], "src": [0,16], "f": 0, "t": 4, "d": [78,786], "a": 1 },
- { "px": [320,464], "src": [0,16], "f": 0, "t": 4, "d": [78,948], "a": 1 },
- { "px": [240,64], "src": [16,16], "f": 0, "t": 5, "d": [77,143], "a": 1 },
- { "px": [128,80], "src": [16,16], "f": 0, "t": 5, "d": [77,168], "a": 1 },
- { "px": [320,96], "src": [16,16], "f": 0, "t": 5, "d": [77,212], "a": 1 },
- { "px": [416,96], "src": [16,16], "f": 0, "t": 5, "d": [77,218], "a": 1 },
- { "px": [464,160], "src": [16,16], "f": 0, "t": 5, "d": [77,349], "a": 1 },
- { "px": [448,176], "src": [16,16], "f": 0, "t": 5, "d": [77,380], "a": 1 },
- { "px": [112,192], "src": [16,16], "f": 0, "t": 5, "d": [77,391], "a": 1 },
- { "px": [416,192], "src": [16,16], "f": 0, "t": 5, "d": [77,410], "a": 1 },
- { "px": [400,208], "src": [16,16], "f": 0, "t": 5, "d": [77,441], "a": 1 },
- { "px": [400,288], "src": [16,16], "f": 0, "t": 5, "d": [77,601], "a": 1 },
- { "px": [448,320], "src": [16,16], "f": 0, "t": 5, "d": [77,668], "a": 1 },
- { "px": [432,352], "src": [16,16], "f": 0, "t": 5, "d": [77,731], "a": 1 },
- { "px": [416,368], "src": [16,16], "f": 0, "t": 5, "d": [77,762], "a": 1 },
- { "px": [384,464], "src": [16,16], "f": 0, "t": 5, "d": [77,952], "a": 1 },
- { "px": [240,32], "src": [16,32], "f": 0, "t": 9, "d": [76,79], "a": 1 },
- { "px": [208,48], "src": [16,32], "f": 0, "t": 9, "d": [76,109], "a": 1 },
- { "px": [448,64], "src": [16,32], "f": 0, "t": 9, "d": [76,156], "a": 1 },
- { "px": [384,80], "src": [16,32], "f": 0, "t": 9, "d": [76,184], "a": 1 },
- { "px": [464,80], "src": [16,32], "f": 0, "t": 9, "d": [76,189], "a": 1 },
- { "px": [112,128], "src": [16,32], "f": 0, "t": 9, "d": [76,263], "a": 1 },
- { "px": [320,144], "src": [16,32], "f": 0, "t": 9, "d": [76,308], "a": 1 },
- { "px": [336,192], "src": [16,32], "f": 0, "t": 9, "d": [76,405], "a": 1 },
- { "px": [448,272], "src": [16,32], "f": 0, "t": 9, "d": [76,572], "a": 1 },
- { "px": [304,288], "src": [16,32], "f": 0, "t": 9, "d": [76,595], "a": 1 },
- { "px": [320,304], "src": [16,32], "f": 0, "t": 9, "d": [76,628], "a": 1 },
- { "px": [336,320], "src": [16,32], "f": 0, "t": 9, "d": [76,661], "a": 1 },
- { "px": [272,352], "src": [16,32], "f": 0, "t": 9, "d": [76,721], "a": 1 },
- { "px": [288,368], "src": [16,32], "f": 0, "t": 9, "d": [76,754], "a": 1 },
- { "px": [32,32], "src": [32,32], "f": 0, "t": 10, "d": [75,66], "a": 1 },
- { "px": [416,64], "src": [32,32], "f": 0, "t": 10, "d": [75,154], "a": 1 },
- { "px": [320,80], "src": [32,32], "f": 0, "t": 10, "d": [75,180], "a": 1 },
- { "px": [304,96], "src": [32,32], "f": 0, "t": 10, "d": [75,211], "a": 1 },
- { "px": [448,160], "src": [32,32], "f": 0, "t": 10, "d": [75,348], "a": 1 },
- { "px": [416,176], "src": [32,32], "f": 0, "t": 10, "d": [75,378], "a": 1 },
- { "px": [400,192], "src": [32,32], "f": 0, "t": 10, "d": [75,409], "a": 1 },
- { "px": [400,272], "src": [32,32], "f": 0, "t": 10, "d": [75,569], "a": 1 },
- { "px": [256,288], "src": [32,32], "f": 0, "t": 10, "d": [75,592], "a": 1 },
- { "px": [384,288], "src": [32,32], "f": 0, "t": 10, "d": [75,600], "a": 1 },
- { "px": [432,320], "src": [32,32], "f": 0, "t": 10, "d": [75,667], "a": 1 },
- { "px": [416,352], "src": [32,32], "f": 0, "t": 10, "d": [75,730], "a": 1 },
- { "px": [176,48], "src": [48,48], "f": 0, "t": 15, "d": [74,107], "a": 1 },
- { "px": [48,144], "src": [0,0], "f": 0, "t": 0, "d": [73,291], "a": 1 },
- { "px": [48,176], "src": [0,0], "f": 0, "t": 0, "d": [73,355], "a": 1 },
- { "px": [336,416], "src": [0,0], "f": 0, "t": 0, "d": [73,853], "a": 1 },
- { "px": [368,416], "src": [0,0], "f": 0, "t": 0, "d": [73,855], "a": 1 }
+ { "px": [208,176], "src": [48,48], "f": 0, "t": 15, "d": [124,365], "a": 1 },
+ { "px": [192,176], "src": [48,48], "f": 0, "t": 15, "d": [123,364], "a": 1 },
+ { "px": [224,176], "src": [48,48], "f": 0, "t": 15, "d": [122,366], "a": 1 },
+ { "px": [208,192], "src": [48,48], "f": 0, "t": 15, "d": [122,397], "a": 1 },
+ { "px": [192,160], "src": [48,48], "f": 0, "t": 15, "d": [121,332], "a": 1 },
+ { "px": [224,160], "src": [48,48], "f": 0, "t": 15, "d": [120,334], "a": 1 },
+ { "px": [208,64], "src": [32,48], "f": 0, "t": 14, "d": [119,141], "a": 1 },
+ { "px": [384,96], "src": [32,48], "f": 0, "t": 14, "d": [119,216], "a": 1 },
+ { "px": [384,112], "src": [32,48], "f": 0, "t": 14, "d": [119,248], "a": 1 },
+ { "px": [176,160], "src": [32,48], "f": 0, "t": 14, "d": [119,331], "a": 1 },
+ { "px": [352,224], "src": [32,48], "f": 0, "t": 14, "d": [119,470], "a": 1 },
+ { "px": [352,464], "src": [48,16], "f": 0, "t": 7, "d": [118,950], "a": 1 },
+ { "px": [112,160], "src": [16,48], "f": 0, "t": 13, "d": [117,327], "a": 1 },
+ { "px": [240,160], "src": [16,48], "f": 0, "t": 13, "d": [117,335], "a": 1 },
+ { "px": [400,96], "src": [48,32], "f": 0, "t": 11, "d": [116,217], "a": 1 },
+ { "px": [208,160], "src": [48,32], "f": 0, "t": 11, "d": [116,333], "a": 1 },
+ { "px": [352,208], "src": [48,32], "f": 0, "t": 11, "d": [116,438], "a": 1 },
+ { "px": [368,208], "src": [48,32], "f": 0, "t": 11, "d": [116,439], "a": 1 },
+ { "px": [176,176], "src": [32,16], "f": 0, "t": 6, "d": [115,363], "a": 1 },
+ { "px": [192,192], "src": [32,16], "f": 0, "t": 6, "d": [115,396], "a": 1 },
+ { "px": [400,112], "src": [16,16], "f": 0, "t": 5, "d": [114,249], "a": 1 },
+ { "px": [240,176], "src": [16,16], "f": 0, "t": 5, "d": [114,367], "a": 1 },
+ { "px": [224,192], "src": [16,16], "f": 0, "t": 5, "d": [114,398], "a": 1 },
+ { "px": [368,224], "src": [16,16], "f": 0, "t": 5, "d": [114,471], "a": 1 },
+ { "px": [192,144], "src": [16,32], "f": 0, "t": 9, "d": [113,300], "a": 1 },
+ { "px": [240,144], "src": [16,32], "f": 0, "t": 9, "d": [113,303], "a": 1 },
+ { "px": [176,144], "src": [32,32], "f": 0, "t": 10, "d": [112,299], "a": 1 },
+ { "px": [224,144], "src": [32,32], "f": 0, "t": 10, "d": [112,302], "a": 1 },
+ { "px": [32,48], "src": [0,48], "f": 0, "t": 12, "d": [111,98], "a": 1 },
+ { "px": [240,48], "src": [0,48], "f": 0, "t": 12, "d": [111,111], "a": 1 },
+ { "px": [32,64], "src": [0,48], "f": 0, "t": 12, "d": [111,130], "a": 1 },
+ { "px": [96,64], "src": [0,48], "f": 0, "t": 12, "d": [111,134], "a": 1 },
+ { "px": [128,64], "src": [0,48], "f": 0, "t": 12, "d": [111,136], "a": 1 },
+ { "px": [176,64], "src": [0,48], "f": 0, "t": 12, "d": [111,139], "a": 1 },
+ { "px": [208,80], "src": [0,48], "f": 0, "t": 12, "d": [111,173], "a": 1 },
+ { "px": [416,80], "src": [0,48], "f": 0, "t": 12, "d": [111,186], "a": 1 },
+ { "px": [464,96], "src": [0,48], "f": 0, "t": 12, "d": [111,221], "a": 1 },
+ { "px": [304,112], "src": [0,48], "f": 0, "t": 12, "d": [111,243], "a": 1 },
+ { "px": [464,112], "src": [0,48], "f": 0, "t": 12, "d": [111,253], "a": 1 },
+ { "px": [304,128], "src": [0,48], "f": 0, "t": 12, "d": [111,275], "a": 1 },
+ { "px": [464,128], "src": [0,48], "f": 0, "t": 12, "d": [111,285], "a": 1 },
+ { "px": [112,144], "src": [0,48], "f": 0, "t": 12, "d": [111,295], "a": 1 },
+ { "px": [464,144], "src": [0,48], "f": 0, "t": 12, "d": [111,317], "a": 1 },
+ { "px": [320,160], "src": [0,48], "f": 0, "t": 12, "d": [111,340], "a": 1 },
+ { "px": [112,176], "src": [0,48], "f": 0, "t": 12, "d": [111,359], "a": 1 },
+ { "px": [320,176], "src": [0,48], "f": 0, "t": 12, "d": [111,372], "a": 1 },
+ { "px": [448,288], "src": [0,48], "f": 0, "t": 12, "d": [111,604], "a": 1 },
+ { "px": [256,304], "src": [0,48], "f": 0, "t": 12, "d": [111,624], "a": 1 },
+ { "px": [448,304], "src": [0,48], "f": 0, "t": 12, "d": [111,636], "a": 1 },
+ { "px": [256,320], "src": [0,48], "f": 0, "t": 12, "d": [111,656], "a": 1 },
+ { "px": [256,336], "src": [0,48], "f": 0, "t": 12, "d": [111,688], "a": 1 },
+ { "px": [336,336], "src": [0,48], "f": 0, "t": 12, "d": [111,693], "a": 1 },
+ { "px": [368,336], "src": [0,48], "f": 0, "t": 12, "d": [111,695], "a": 1 },
+ { "px": [432,336], "src": [0,48], "f": 0, "t": 12, "d": [111,699], "a": 1 },
+ { "px": [176,80], "src": [0,16], "f": 0, "t": 4, "d": [110,171], "a": 1 },
+ { "px": [384,128], "src": [0,16], "f": 0, "t": 4, "d": [110,280], "a": 1 },
+ { "px": [208,208], "src": [0,16], "f": 0, "t": 4, "d": [110,429], "a": 1 },
+ { "px": [352,240], "src": [0,16], "f": 0, "t": 4, "d": [110,502], "a": 1 },
+ { "px": [384,304], "src": [0,16], "f": 0, "t": 4, "d": [110,632], "a": 1 },
+ { "px": [336,352], "src": [0,16], "f": 0, "t": 4, "d": [110,725], "a": 1 },
+ { "px": [368,352], "src": [0,16], "f": 0, "t": 4, "d": [110,727], "a": 1 },
+ { "px": [176,32], "src": [0,32], "f": 0, "t": 8, "d": [109,75], "a": 1 },
+ { "px": [96,48], "src": [0,32], "f": 0, "t": 8, "d": [109,102], "a": 1 },
+ { "px": [128,48], "src": [0,32], "f": 0, "t": 8, "d": [109,104], "a": 1 },
+ { "px": [368,320], "src": [0,32], "f": 0, "t": 8, "d": [109,663], "a": 1 },
+ { "px": [320,448], "src": [0,32], "f": 0, "t": 8, "d": [109,916], "a": 1 },
+ { "px": [352,448], "src": [0,32], "f": 0, "t": 8, "d": [109,918], "a": 1 },
+ { "px": [384,448], "src": [0,32], "f": 0, "t": 8, "d": [109,920], "a": 1 },
+ { "px": [48,32], "src": [48,0], "f": 0, "t": 3, "d": [108,67], "a": 1 },
+ { "px": [192,48], "src": [48,0], "f": 0, "t": 3, "d": [108,108], "a": 1 },
+ { "px": [224,64], "src": [48,0], "f": 0, "t": 3, "d": [108,142], "a": 1 },
+ { "px": [432,64], "src": [48,0], "f": 0, "t": 3, "d": [108,155], "a": 1 },
+ { "px": [48,80], "src": [48,0], "f": 0, "t": 3, "d": [108,163], "a": 1 },
+ { "px": [112,80], "src": [48,0], "f": 0, "t": 3, "d": [108,167], "a": 1 },
+ { "px": [336,80], "src": [48,0], "f": 0, "t": 3, "d": [108,181], "a": 1 },
+ { "px": [352,80], "src": [48,0], "f": 0, "t": 3, "d": [108,182], "a": 1 },
+ { "px": [368,80], "src": [48,0], "f": 0, "t": 3, "d": [108,183], "a": 1 },
+ { "px": [224,96], "src": [48,0], "f": 0, "t": 3, "d": [108,206], "a": 1 },
+ { "px": [96,128], "src": [48,0], "f": 0, "t": 3, "d": [108,262], "a": 1 },
+ { "px": [432,176], "src": [48,0], "f": 0, "t": 3, "d": [108,379], "a": 1 },
+ { "px": [96,192], "src": [48,0], "f": 0, "t": 3, "d": [108,390], "a": 1 },
+ { "px": [384,208], "src": [48,0], "f": 0, "t": 3, "d": [108,440], "a": 1 },
+ { "px": [416,272], "src": [48,0], "f": 0, "t": 3, "d": [108,570], "a": 1 },
+ { "px": [432,272], "src": [48,0], "f": 0, "t": 3, "d": [108,571], "a": 1 },
+ { "px": [272,288], "src": [48,0], "f": 0, "t": 3, "d": [108,593], "a": 1 },
+ { "px": [288,288], "src": [48,0], "f": 0, "t": 3, "d": [108,594], "a": 1 },
+ { "px": [336,464], "src": [48,0], "f": 0, "t": 3, "d": [108,949], "a": 1 },
+ { "px": [368,464], "src": [48,0], "f": 0, "t": 3, "d": [108,951], "a": 1 },
+ { "px": [64,32], "src": [16,0], "f": 0, "t": 1, "d": [107,68], "a": 1 },
+ { "px": [64,80], "src": [16,0], "f": 0, "t": 1, "d": [107,164], "a": 1 },
+ { "px": [240,96], "src": [16,0], "f": 0, "t": 1, "d": [107,207], "a": 1 },
+ { "px": [304,384], "src": [16,0], "f": 0, "t": 1, "d": [107,787], "a": 1 },
+ { "px": [224,32], "src": [32,0], "f": 0, "t": 2, "d": [106,78], "a": 1 },
+ { "px": [160,48], "src": [32,0], "f": 0, "t": 2, "d": [106,106], "a": 1 },
+ { "px": [80,128], "src": [32,0], "f": 0, "t": 2, "d": [106,261], "a": 1 },
+ { "px": [96,160], "src": [32,0], "f": 0, "t": 2, "d": [106,326], "a": 1 },
+ { "px": [80,192], "src": [32,0], "f": 0, "t": 2, "d": [106,389], "a": 1 },
+ { "px": [400,368], "src": [32,0], "f": 0, "t": 2, "d": [106,761], "a": 1 },
+ { "px": [32,80], "src": [32,16], "f": 0, "t": 6, "d": [105,162], "a": 1 },
+ { "px": [96,80], "src": [32,16], "f": 0, "t": 6, "d": [105,166], "a": 1 },
+ { "px": [448,80], "src": [32,16], "f": 0, "t": 6, "d": [105,188], "a": 1 },
+ { "px": [208,96], "src": [32,16], "f": 0, "t": 6, "d": [105,205], "a": 1 },
+ { "px": [304,144], "src": [32,16], "f": 0, "t": 6, "d": [105,307], "a": 1 },
+ { "px": [320,192], "src": [32,16], "f": 0, "t": 6, "d": [105,404], "a": 1 },
+ { "px": [336,208], "src": [32,16], "f": 0, "t": 6, "d": [105,437], "a": 1 },
+ { "px": [304,304], "src": [32,16], "f": 0, "t": 6, "d": [105,627], "a": 1 },
+ { "px": [320,320], "src": [32,16], "f": 0, "t": 6, "d": [105,660], "a": 1 },
+ { "px": [256,352], "src": [32,16], "f": 0, "t": 6, "d": [105,720], "a": 1 },
+ { "px": [272,368], "src": [32,16], "f": 0, "t": 6, "d": [105,753], "a": 1 },
+ { "px": [288,384], "src": [32,16], "f": 0, "t": 6, "d": [105,786], "a": 1 },
+ { "px": [320,464], "src": [32,16], "f": 0, "t": 6, "d": [105,948], "a": 1 },
+ { "px": [240,64], "src": [16,16], "f": 0, "t": 5, "d": [104,143], "a": 1 },
+ { "px": [128,80], "src": [16,16], "f": 0, "t": 5, "d": [104,168], "a": 1 },
+ { "px": [320,96], "src": [16,16], "f": 0, "t": 5, "d": [104,212], "a": 1 },
+ { "px": [416,96], "src": [16,16], "f": 0, "t": 5, "d": [104,218], "a": 1 },
+ { "px": [464,160], "src": [16,16], "f": 0, "t": 5, "d": [104,349], "a": 1 },
+ { "px": [448,176], "src": [16,16], "f": 0, "t": 5, "d": [104,380], "a": 1 },
+ { "px": [112,192], "src": [16,16], "f": 0, "t": 5, "d": [104,391], "a": 1 },
+ { "px": [416,192], "src": [16,16], "f": 0, "t": 5, "d": [104,410], "a": 1 },
+ { "px": [400,208], "src": [16,16], "f": 0, "t": 5, "d": [104,441], "a": 1 },
+ { "px": [400,288], "src": [16,16], "f": 0, "t": 5, "d": [104,601], "a": 1 },
+ { "px": [448,320], "src": [16,16], "f": 0, "t": 5, "d": [104,668], "a": 1 },
+ { "px": [432,352], "src": [16,16], "f": 0, "t": 5, "d": [104,731], "a": 1 },
+ { "px": [416,368], "src": [16,16], "f": 0, "t": 5, "d": [104,762], "a": 1 },
+ { "px": [384,464], "src": [16,16], "f": 0, "t": 5, "d": [104,952], "a": 1 },
+ { "px": [240,32], "src": [16,32], "f": 0, "t": 9, "d": [103,79], "a": 1 },
+ { "px": [208,48], "src": [16,32], "f": 0, "t": 9, "d": [103,109], "a": 1 },
+ { "px": [448,64], "src": [16,32], "f": 0, "t": 9, "d": [103,156], "a": 1 },
+ { "px": [384,80], "src": [16,32], "f": 0, "t": 9, "d": [103,184], "a": 1 },
+ { "px": [464,80], "src": [16,32], "f": 0, "t": 9, "d": [103,189], "a": 1 },
+ { "px": [112,128], "src": [16,32], "f": 0, "t": 9, "d": [103,263], "a": 1 },
+ { "px": [320,144], "src": [16,32], "f": 0, "t": 9, "d": [103,308], "a": 1 },
+ { "px": [336,192], "src": [16,32], "f": 0, "t": 9, "d": [103,405], "a": 1 },
+ { "px": [448,272], "src": [16,32], "f": 0, "t": 9, "d": [103,572], "a": 1 },
+ { "px": [304,288], "src": [16,32], "f": 0, "t": 9, "d": [103,595], "a": 1 },
+ { "px": [320,304], "src": [16,32], "f": 0, "t": 9, "d": [103,628], "a": 1 },
+ { "px": [336,320], "src": [16,32], "f": 0, "t": 9, "d": [103,661], "a": 1 },
+ { "px": [272,352], "src": [16,32], "f": 0, "t": 9, "d": [103,721], "a": 1 },
+ { "px": [288,368], "src": [16,32], "f": 0, "t": 9, "d": [103,754], "a": 1 },
+ { "px": [32,32], "src": [32,32], "f": 0, "t": 10, "d": [102,66], "a": 1 },
+ { "px": [416,64], "src": [32,32], "f": 0, "t": 10, "d": [102,154], "a": 1 },
+ { "px": [320,80], "src": [32,32], "f": 0, "t": 10, "d": [102,180], "a": 1 },
+ { "px": [304,96], "src": [32,32], "f": 0, "t": 10, "d": [102,211], "a": 1 },
+ { "px": [448,160], "src": [32,32], "f": 0, "t": 10, "d": [102,348], "a": 1 },
+ { "px": [416,176], "src": [32,32], "f": 0, "t": 10, "d": [102,378], "a": 1 },
+ { "px": [400,192], "src": [32,32], "f": 0, "t": 10, "d": [102,409], "a": 1 },
+ { "px": [400,272], "src": [32,32], "f": 0, "t": 10, "d": [102,569], "a": 1 },
+ { "px": [256,288], "src": [32,32], "f": 0, "t": 10, "d": [102,592], "a": 1 },
+ { "px": [384,288], "src": [32,32], "f": 0, "t": 10, "d": [102,600], "a": 1 },
+ { "px": [432,320], "src": [32,32], "f": 0, "t": 10, "d": [102,667], "a": 1 },
+ { "px": [416,352], "src": [32,32], "f": 0, "t": 10, "d": [102,730], "a": 1 },
+ { "px": [176,48], "src": [48,48], "f": 0, "t": 15, "d": [101,107], "a": 1 },
+ { "px": [48,144], "src": [0,0], "f": 0, "t": 0, "d": [100,291], "a": 1 },
+ { "px": [48,176], "src": [0,0], "f": 0, "t": 0, "d": [100,355], "a": 1 },
+ { "px": [336,416], "src": [0,0], "f": 0, "t": 0, "d": [100,853], "a": 1 },
+ { "px": [368,416], "src": [0,0], "f": 0, "t": 0, "d": [100,855], "a": 1 }
],
"seed": 3670360,
"overrideTilesetUid": null,
diff --git a/map/maps/test.map.gbasm b/map/maps/test.map.gbasm
index 9fce10d..b131ebd 100644
--- a/map/maps/test.map.gbasm
+++ b/map/maps/test.map.gbasm
@@ -1,10 +1,269 @@
; THIS FILE IS GENERATED AUTOMATICALLY, DO NOT CHANGE
_map_Test:
- .DB $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $37, $e3, $ff, $ff, $42, $bb
- .DB $e3, $ff, $16, $bb, $ca, $0f, $d6, $23, $d8, $e7, $1f, $ff, $dc, $f7, $ff, $ff
- .DB $de, $f7, $ff, $1f, $df, $e7, $27, $77, $cf, $ef, $07, $3f, $e3, $ef, $07, $77
- .DB $f9, $cf, $8f, $1f, $fc, $1f, $df, $ff, $ff, $3f, $ff, $ff, $ff, $bf, $ff, $ff
- .DB $ff, $ff, $ff, $ff, $e1, $ff, $ff, $ff, $ec, $f0, $ff, $ff, $ee, $e6, $ff, $ff
- .DB $e7, $4e, $ff, $ff, $f7, $5e, $ff, $ff, $f3, $5c, $ff, $ff, $f9, $f9, $ff, $ff
- .DB $ff, $f3, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $5f, $ff, $ff, $ff, $ff, $ff, $ff
- .DB $fe, $af, $ff, $ff, $fe, $0f, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff
+ .collisons:
+ .DB $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $37, $e3, $ff, $ff, $42, $bb
+ .DB $e3, $ff, $16, $bb, $ca, $0f, $d6, $23, $d8, $e7, $1f, $ff, $dc, $f7, $ff, $ff
+ .DB $de, $f7, $ff, $1f, $df, $e7, $27, $77, $cf, $ef, $07, $3f, $e3, $ef, $07, $77
+ .DB $f9, $cf, $8f, $1f, $fc, $1f, $df, $ff, $ff, $3f, $ff, $ff, $ff, $bf, $ff, $ff
+ .DB $ff, $ff, $ff, $ff, $e1, $ff, $ff, $ff, $ec, $f0, $ff, $ff, $ee, $e6, $ff, $ff
+ .DB $e7, $4e, $ff, $ff, $f7, $5e, $ff, $ff, $f3, $5c, $ff, $ff, $f9, $f9, $ff, $ff
+ .DB $ff, $f3, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $5f, $ff, $ff, $ff, $ff, $ff, $ff
+ .DB $fe, $af, $ff, $ff, $fe, $0f, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff
+ .tiles:
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $20, $25, $21, $25, $21, $24, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $20, $24, $00, $00, $00, $00, $20, $25, $21, $24
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $2a, $2f, $29, $2d, $29, $2c, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $2a, $2e, $00, $00, $00, $00, $28, $2d, $2b, $2e
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $22, $26, $00, $00, $00, $00, $00, $00, $20, $24, $00, $00
+ .DB $20, $24, $00, $00, $20, $25, $23, $27, $21, $25, $21, $24, $00, $00, $22, $26
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $2a, $2e, $00, $00, $00, $00, $00, $00, $2a, $2e, $00, $00
+ .DB $2a, $2e, $00, $00, $28, $2d, $2b, $2f, $29, $2d, $2b, $2e, $00, $00, $2a, $2e
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $22, $26, $00, $00, $00, $00, $00, $00, $22, $26, $00, $00
+ .DB $22, $26, $00, $00, $00, $00, $22, $26, $00, $00, $22, $27, $21, $25, $23, $26
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $20, $25, $21, $25, $21, $24, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $2a, $2e, $00, $00, $00, $00, $00, $00, $2a, $2e, $00, $00
+ .DB $2a, $2e, $00, $00, $00, $00, $2a, $2e, $00, $00, $2a, $2f, $29, $2d, $29, $2c
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $2a, $2f, $29, $2d, $2b, $2e, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $22, $27, $21, $25, $21, $24, $00, $00, $22, $27, $21, $25
+ .DB $23, $26, $00, $00, $00, $00, $22, $26, $00, $00, $22, $26, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $20, $25, $21, $25, $21, $25, $21, $25
+ .DB $21, $24, $00, $00, $22, $26, $00, $00, $22, $27, $21, $24, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $28, $2d, $29, $2d, $29, $2c, $00, $00, $28, $2d, $29, $2d
+ .DB $29, $2c, $00, $00, $00, $00, $28, $2c, $00, $00, $2a, $2e, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $2a, $2f, $29, $2d, $29, $2d, $29, $2d
+ .DB $2b, $2e, $00, $00, $2a, $2e, $00, $00, $28, $2d, $2b, $2e, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $22, $27, $21, $25, $21, $24
+ .DB $00, $00, $00, $00, $00, $00, $20, $25, $23, $26, $00, $00, $00, $00, $00, $00
+ .DB $22, $27, $21, $25, $23, $26, $00, $00, $00, $00, $22, $26, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $28, $2d, $29, $2d, $29, $2c
+ .DB $00, $00, $00, $00, $00, $00, $2a, $2f, $29, $2c, $00, $00, $00, $00, $00, $00
+ .DB $2a, $2f, $2b, $2f, $29, $2c, $00, $00, $00, $00, $2a, $2e, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $22, $26, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $22, $27, $23, $26, $00, $00, $00, $00, $00, $00, $22, $26, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $64, $65, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $2a, $2e, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $2a, $2f, $29, $2c, $00, $00, $00, $00, $00, $00, $2a, $2e, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $20, $25, $21, $25, $21, $24
+ .DB $00, $00, $00, $00, $00, $00, $00, $66, $67, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $22, $26, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $22, $26, $00, $00, $00, $00, $00, $00, $00, $00, $22, $26, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $28, $2d, $29, $2d, $2b, $2e
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $2a, $2e, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $28, $2c, $00, $00, $00, $00, $00, $00, $00, $00, $2a, $2e, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $20, $24, $00, $00, $00, $00, $00, $00, $22, $26
+ .DB $00, $00, $00, $00, $00, $00, $20, $25, $21, $24, $00, $00, $20, $25, $21, $24
+ .DB $00, $00, $00, $00, $00, $00, $22, $27, $21, $24, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $22, $26, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $28, $2c, $00, $00, $00, $00, $00, $00, $2a, $2e
+ .DB $00, $00, $00, $00, $00, $00, $2a, $2f, $2b, $2e, $00, $00, $2a, $2f, $2b, $2e
+ .DB $00, $00, $00, $00, $00, $00, $28, $2d, $2b, $2e, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $2a, $2e, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $20, $25, $23, $26
+ .DB $00, $00, $00, $00, $00, $00, $22, $27, $23, $27, $21, $25, $23, $27, $23, $26
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $22, $26, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $20, $25, $23, $26, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $28, $2d, $2b, $2e
+ .DB $00, $00, $00, $00, $00, $00, $2a, $2f, $2b, $2f, $2b, $2f, $2b, $2f, $2b, $2e
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $2a, $2e, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $2a, $2f, $29, $2c, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $20, $24, $00, $00, $00, $00, $00, $00, $22, $26
+ .DB $00, $00, $00, $00, $00, $00, $22, $27, $23, $27, $23, $27, $23, $27, $23, $26
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $22, $26, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $20, $25, $21, $25, $23, $26, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $28, $2c, $00, $00, $00, $00, $00, $00, $2a, $2e
+ .DB $00, $00, $00, $00, $00, $00, $28, $2d, $2b, $2f, $2b, $2f, $2b, $2f, $29, $2c
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $2a, $2e, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $2a, $2f, $29, $2d, $29, $2c, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $20, $25, $21, $25, $23, $26
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $22, $27, $23, $27, $23, $26, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $22, $27, $21, $24, $00, $00, $00, $00
+ .DB $00, $00, $20, $25, $23, $26, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $28, $2d, $29, $2d, $29, $2c
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $28, $2d, $2b, $2f, $29, $2c, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $28, $2d, $2b, $2e, $00, $00, $00, $00
+ .DB $00, $00, $2a, $2f, $29, $2c, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $22, $26, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $22, $27, $21, $25, $21, $25
+ .DB $21, $25, $23, $26, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $28, $2c, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $28, $2d, $2b, $2f, $2b, $2f
+ .DB $29, $2d, $29, $2c, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $22, $27, $23, $26
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $2a, $2f, $29, $2c
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $22, $26, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $64, $65, $00, $28, $2c, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $66, $67, $f0, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $f0, $f0, $f0, $00, $8a, $9c, $9d
+ .DB $8a, $9d, $92, $97, $00, $aa, $83, $00, $f0, $f0, $f0, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $20, $25, $21, $25, $21, $25, $21, $24, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $2a, $2f, $29, $2d, $29, $2d, $2b, $2e, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $20, $25, $21, $25, $21, $25, $21, $24, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $20, $25, $23, $26, $00, $00, $00, $00, $22, $26, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $2a, $2f, $29, $2d, $29, $2d, $2b, $2e, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $2a, $2f, $29, $2c, $00, $00, $00, $00, $2a, $2e, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $22, $26, $00, $00, $00, $00, $22, $27, $21, $24, $00, $00, $00, $00, $00, $00
+ .DB $22, $26, $00, $00, $00, $00, $00, $00, $22, $26, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $2a, $2e, $00, $00, $00, $00, $28, $2d, $2b, $2e, $00, $00, $00, $00, $00, $00
+ .DB $28, $2c, $00, $00, $00, $00, $00, $00, $2a, $2e, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $22, $26, $00, $00, $00, $00, $00, $00, $22, $27, $21, $24, $00, $00, $20, $24
+ .DB $00, $00, $00, $00, $00, $00, $20, $25, $23, $26, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $2a, $2e, $00, $00, $00, $00, $00, $00, $28, $2d, $2b, $2e, $00, $00, $2a, $2e
+ .DB $00, $00, $00, $00, $00, $00, $2a, $2f, $29, $2c, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $22, $26, $00, $00, $00, $00, $00, $00, $00, $00, $22, $26, $00, $00, $22, $26
+ .DB $00, $00, $00, $00, $00, $00, $22, $26, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $2a, $2e, $00, $00, $00, $00, $00, $00, $00, $00, $2a, $2e, $00, $00, $2a, $2e
+ .DB $00, $00, $00, $00, $00, $00, $2a, $2e, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $22, $27, $21, $24, $00, $00, $00, $00, $00, $00, $22, $26, $00, $00, $22, $26
+ .DB $00, $00, $00, $00, $20, $25, $23, $26, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $28, $2d, $2b, $2e, $00, $00, $00, $00, $00, $00, $28, $2c, $00, $00, $28, $2c
+ .DB $00, $00, $00, $00, $2a, $2f, $29, $2c, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $22, $27, $21, $24, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $20, $25, $23, $26, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $28, $2d, $2b, $2e, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $28, $2d, $29, $2c, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $22, $27, $21, $24, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $28, $2d, $29, $2c, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $20, $24, $00, $00, $20, $24
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $28, $2c, $00, $00, $28, $2c
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $20, $24, $00, $00, $20, $24, $00, $00
+ .DB $20, $24, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $2a, $2e, $00, $00, $2a, $2e, $00, $00
+ .DB $2a, $2e, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $22, $27, $21, $25, $23, $27, $21, $25
+ .DB $23, $26, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $28, $2d, $29, $2d, $29, $2d, $29, $2d
+ .DB $29, $2c, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+.ASSERT bank(=_map_Test) bank(.)
diff --git a/modes/dungeongeneration.gbasm b/modes/dungeongeneration.gbasm
index 172093f..b9d40ef 100644
--- a/modes/dungeongeneration.gbasm
+++ b/modes/dungeongeneration.gbasm
@@ -22,6 +22,30 @@
.END
New_Dungeon:
+ LD A, $20
+ LD $mem_bunny_health, A
+ LD A, $30
+ LD $mem_bunny_mana, A
+ LD A, $01
+ LD $mem_floor_count, A
+ LD A, $00
+ LD $mem_floor_count_bin, A
+
+ LD A, ($mem_dungeon+1)
+ LD H, A
+ LD A, ($mem_dungeon+2)
+ LD L, A
+ LD A, ($mem_dungeon)
+ CALL =Load_Dungeon_Txt
+
+ LD A, ($mem_dungeon+1)
+ LD H, A
+ LD A, ($mem_dungeon+2)
+ LD L, A
+ LD A, ($mem_dungeon)
+ CALL =Load_Generation_Events
+
+New_Floor:
LD SP, $fffe
LD A, $00
@@ -32,10 +56,6 @@ New_Dungeon:
LD A, $00
LD $mem_display_flag, A
- LD A, bank(=Dungeon)
- LD HL, ptr(=Dungeon)
- CALL =Load_Dungeon_Txt
-
LD A, $f4
LD ($9ecb), A
@@ -51,9 +71,11 @@ New_Dungeon:
CALL =Reset_Map
-
- LD A, bank(=Dungeon)
- LD HL, ptr(=Dungeon)
+ LD A, ($mem_dungeon+1)
+ LD H, A
+ LD A, ($mem_dungeon+2)
+ LD L, A
+ LD A, ($mem_dungeon)
CALL =Load_Dungeon_Spawn_patterns
LD A, $entity_questgoalbunny_index
LD $mem_loaded_special_entity_index, A
diff --git a/modes/maploading.gbasm b/modes/maploading.gbasm
index 72f24ed..ab8ecbe 100644
--- a/modes/maploading.gbasm
+++ b/modes/maploading.gbasm
@@ -32,8 +32,11 @@ Map_Loading:
LD A, $00
LD $mem_display_flag, A
- LD A, bank(=Dungeon)
- LD HL, ptr(=Dungeon)
+ LD A, ($mem_dungeon+1)
+ LD H, A
+ LD A, ($mem_dungeon+2)
+ LD L, A
+ LD A, ($mem_dungeon)
CALL =Load_Dungeon_Txt
LD A, $f4
@@ -57,8 +60,11 @@ Map_Loading:
LD DE, ptr(=_map_Test)
CALL =memcpy
- LD A, bank(=Dungeon)
- LD HL, ptr(=Dungeon)
+ LD A, ($mem_dungeon+1)
+ LD H, A
+ LD A, ($mem_dungeon+2)
+ LD L, A
+ LD A, ($mem_dungeon)
CALL =Load_Dungeon_Spawn_patterns
LD A, $entity_questgoalbunny_index
LD $mem_loaded_special_entity_index, A
diff --git a/modes/vblank_handler_list.gbasm b/modes/vblank_handler_list.gbasm
index 99db063..004c782 100644
--- a/modes/vblank_handler_list.gbasm
+++ b/modes/vblank_handler_list.gbasm
@@ -26,8 +26,8 @@ VBlank_Handler_List:
; 2 (loading, animation)
.DB =Loading_VBLANK_Entrypoint
- ; 3 (new dungeon)
- .DB =New_Dungeon
+ ; 3 (new floor)
+ .DB =New_Floor
; 4 (pregenerated map loading)
.DB =Map_Loading
diff --git a/playerattacks/hop.gbasm b/playerattacks/hop.gbasm
index d8b280d..30c673f 100644
--- a/playerattacks/hop.gbasm
+++ b/playerattacks/hop.gbasm
@@ -38,12 +38,8 @@ Hop_Attack_Loading_VBlank:
CALL =Display_Main_Prepared_Block
- LD A, $mem_prepared_loading_block_tile
- LD $mem_prepared_block_tile, A
- LD A, $mem_prepared_loading_block_position_1
- LD $mem_prepared_block_position_1, A
- LD A, $mem_prepared_loading_block_position_2
- LD $mem_prepared_block_position_2, A
+ .COPY_4BYTES $mem_prepared_block_tile, $mem_prepared_loading_block_tile
+ .COPY_2BYTES $mem_prepared_block_position, $mem_prepared_loading_block_position
LD A, $mem_map_loading_flags
SET 2, A
@@ -121,12 +117,8 @@ Hop_Attack_Loading_Regular:
RET NZ
CALL =Preload_Map_Hop
- LD A, $mem_prepared_block_tile
- LD $mem_prepared_loading_block_tile, A
- LD A, $mem_prepared_block_position_1
- LD $mem_prepared_loading_block_position_1, A
- LD A, $mem_prepared_block_position_2
- LD $mem_prepared_loading_block_position_2, A
+ .COPY_4BYTES $mem_prepared_loading_block_tile, $mem_prepared_block_tile
+ .COPY_2BYTES $mem_prepared_loading_block_position, $mem_prepared_block_position
LD A, $mem_bunny_direction
SWAP A
diff --git a/rng.gbasm b/rng.gbasm
index 8867c56..5409a39 100644
--- a/rng.gbasm
+++ b/rng.gbasm
@@ -23,8 +23,7 @@ RNG_Step:
LD E, A
; state << 7
- SCF
- CCF
+ AND A
LD A, $mem_rng_state_2
LD B, A
LD A, $mem_rng_state_1
diff --git a/scripts/parse-ldtkmap.py b/scripts/parse-ldtkmap.py
index 5071515..c80181b 100644
--- a/scripts/parse-ldtkmap.py
+++ b/scripts/parse-ldtkmap.py
@@ -5,14 +5,39 @@ import os
filename = sys.argv[1]
label = "_map_" + os.path.basename(filename)[:-5].replace(".", " ").title().replace(" ", "_")
+check_same_bank = "_same_bank_check_"+label+""
print(label+":")
+
file = open(filename, "r")
ldtk = json.loads(file.read())
intgridLayer = [i for i in ldtk['levels'][0]['layerInstances'] if i['__type'] == 'IntGrid'][0]['intGridCsv']
autoLayer = [i for i in ldtk['levels'][0]['layerInstances'] if i['__type'] == 'AutoLayer'][0]['autoLayerTiles']
+tiles = [i for i in ldtk['levels'][0]['layerInstances'] if i['__type'] == 'Tiles'][0]
+tile_width = tiles['__cWid']
+tile_height = tiles['__cHei']
+grid_tiles = tiles['gridTiles']
+
+tilemap = [0 for _ in range(0, tile_width*tile_height)]
+
+for tile in autoLayer:
+ x = int(tile['px'][0]/8)
+ y = int(tile['px'][1]/8)
+ t = tile['t']
+ topleft = (((t & 0b100) >> 1) | (t & 0b1)) + 0x20
+ topright = ((t & 0b110) >> 1) + 0x24
+ bottomleft = (((t & 0b1000) >> 2) | (t & 0b1)) + 0x28
+ bottomright = (((t & 0b1000) >> 2) | ((t & 0b10) >> 1)) + 0x2c
+
+ tilemap[y * tile_width + x] = topleft
+ tilemap[y * tile_width + x+1] = topright
+ tilemap[(y+1) * tile_width + x] = bottomleft
+ tilemap[(y+1) * tile_width + x+1] = bottomright
+
+for tile in grid_tiles:
+ tilemap[tile['d'][0]] = tile['t']
collision_map = []
for y in range(0, 32):
@@ -23,11 +48,21 @@ for y in range(0, 32):
collision_u8 |= 1 << (7-i)
collision_map.append(collision_u8 ^ 0xff)
+print("\t.collisons:")
for i in range(0, int(len(collision_map) / 16)):
- print("\t.DB ", end="")
+ print("\t\t.DB ", end="")
for j in range(0, 15):
print("${:02x}, ".format(collision_map[i*16+j]), end="")
print("${:02x}".format(collision_map[i*16+15]))
+print("\t.tiles:")
+for i in range(0, int(len(tilemap) / 16)):
+ print("\t\t.DB ", end="")
+ for j in range(0, 15):
+ print("${:02x}, ".format(tilemap[i*16+j]), end="")
+ print("${:02x}".format(tilemap[i*16+15]))
+
+print(".ASSERT", "bank(="+label+")", "bank(.)")
+
# print("============================")
# print(autoLayer)
diff --git a/utils.gbasm b/utils.gbasm
index c16160c..1393e82 100644
--- a/utils.gbasm
+++ b/utils.gbasm
@@ -312,3 +312,21 @@ VBlank_Wait:
POP AF
CALL ptr(=addr)
.END
+
+.MACRODEF COPY_4BYTES dest src
+ LD A, ($src)
+ LD ($dest), A
+ LD A, ($src+1)
+ LD ($dest+1), A
+ LD A, ($src+2)
+ LD ($dest+2), A
+ LD A, ($src+3)
+ LD ($dest+3), A
+.END
+
+.MACRODEF COPY_2BYTES dest src
+ LD A, ($src)
+ LD ($dest), A
+ LD A, ($src+1)
+ LD ($dest+1), A
+.END