From 233cdc8882f6a7c456d1171395143b9c65dc7048 Mon Sep 17 00:00:00 2001 From: p4plus2 Date: Thu, 26 Oct 2017 14:04:04 -0700 Subject: [PATCH] Reworked lua script making it easier to configure certain things Some SPC documnetation More logo documnetation Fixed decompilation error in bank B3 --- DKC2.lua | 214 +++++++++++++++++++++------------------------------- bank_80.asm | 55 +++++++------- bank_B3.asm | 8 +- bank_B5.asm | 214 ++++++++++++++++++++++++++-------------------------- bank_BB.asm | 1 + bank_EE.asm | 11 ++- music.txt | 207 ++++++++------------------------------------------ notes.txt | 47 +++++++----- sprites.txt | 174 ++++++++++++++++++++++++++++++++++++++++++ 9 files changed, 465 insertions(+), 466 deletions(-) create mode 100644 sprites.txt diff --git a/DKC2.lua b/DKC2.lua index 764212a..19149a7 100644 --- a/DKC2.lua +++ b/DKC2.lua @@ -1,3 +1,5 @@ +getmetatable('').__index = function(str, i) return string.sub(str, i, i) end + local function remove(data, value) data = table.remove(data, value) if type(data) == "nil" then @@ -6,6 +8,48 @@ local function remove(data, value) return data end +local function parse_line(line) + local result = {} + local pos = string.find(line, '%g') or (string.len(line) + 1) + while line[pos] ~= "" do + if (line[pos] == '"') then + local start_pos, end_pos = string.find(line, '%b""', pos) + table.insert(result, string.sub(line, start_pos + 1, end_pos - 1)) + pos = end_pos + 2 + else + local found_at = string.find(line, ',', pos) + table.insert(result, string.sub(line, pos, found_at and (found_at - 1) or -1)) + pos = (found_at and found_at or string.len(line)) + 1 + end + pos = string.find(line, '%g', pos) or (string.len(line) + 1) + end + return result +end + +local function load_csv(path) + local file = io.open(path, "rb") + local csv = {} + + if file then + for line in io.lines(path) do + table.insert(csv, parse_line(line)) + end + file:close() + end + + return csv; +end + +local function list_to_map(list) + local map = {} + + for index, entry in ipairs(list) do + map[tonumber(entry[1])] = entry[2] + end + + return map +end + local function write_long(value, offset) memory2.WRAM:write(bit.band(value, 0xFF), offset) memory2.WRAM:write(bit.band(bit.lrshift(value, 8), 0xFF), offset+1) @@ -143,6 +187,13 @@ local x_padding = -400 local y_padding = 0 local context = gui.renderctx.new(256, 224) +--config files +local sound_effects_path = "sound_effects.txt" +local musics_path = "music.txt" +local sprites_path = "sprites.txt" +local ram_watch_path = "ram_watch.txt" +local exec_watch_path = "exec_watch.txt" + --Add transparency to a color with default opacity local function trans(color) return color + (opacity * 0x1000000) @@ -221,11 +272,17 @@ local function toggle_layer(layer) bsnes.enablelayer(layer, 1, layer_state[layer]) end +local sprites_list = load_csv(sprites_path) +local sprites_map = list_to_map(sprites_list) + local sprite_table = 0x0DE2 +local sprite_routine_list = to_pc(0xB38348) local function display_sprite() local sprite_slot = clamp(slot, 0, 23) local slot_offset = sprite_table + sprite_slot * 0x5E local sprite_string = "Slot number (0x%04X): %d\n" .. + "Sprite: %s\n" .. + "Sprite routine: $B3%04X\n" .. "Sprite number(0x00): %04X\n" .. "Render order(0x02): %04X\n" .. "Position(0x04/0x08): (%04X.%04X, %04X.%04X)\n" .. @@ -248,8 +305,11 @@ local function display_sprite() "Spawn code(0x58):%04X\n" .. "Unknown data(0x5A):\n%s\n" + sprite_name = sprites_map[read_word(slot_offset)] or "UNKNOWN" text(0, 0, string.format(sprite_string, slot_offset, sprite_slot, --current slot + sprite_name, --sprite name + read_rom_word(sprite_routine_list + read_word(slot_offset)), --sprite routine read_word(slot_offset), --Sprite number read_word(slot_offset+0x02), --Render order read_word(slot_offset+0x06), read_word(slot_offset+0x04), --X position @@ -257,7 +317,7 @@ local function display_sprite() read_word(slot_offset+0x0C), --Potential ground height (7F00 == no ground) read_word(slot_offset+0x0E), --Potential ground distance (80xx == no ground) read_word(slot_offset+0x010), --Interaction type, dictates movements relative to blocks - read_word(slot_offset+0x012), --YXPPCCCCT TTTTTTTT properties + read_word(slot_offset+0x012), --YXPPCCCT TTTTTTTT properties read_word(slot_offset+0x014), --Unknown read_word(slot_offset+0x16), --Sprite frame copy 1 read_word(slot_offset+0x18), --Sprite frame copy 2 @@ -277,130 +337,11 @@ local function display_sprite() )) end -local sound_effect_map = { - "0x00 -- Nothing", - "0x01 -- Nothing?", - "0x02 -- Klomp walking", - "0x03 -- Monkey sound (unused)", - "0x04 -- Spin/cartwheel into enemy", - "0x05 -- Switch Kongs", - "0x06 -- Diddy hurt/lost", - "0x07 -- Dixie hurt/lost", - "0x08 -- Collect bananna", - "0x09 -- Collect something (unused)", - "0x0A -- Diddy loses life", - "0x0B -- Rambi charging", - "0x0C -- Something breaking (investigate)", - "0x0D -- Zinger like sound (investigate)", - "0x0E -- Zinger killed", - "0x0F -- Klick-Klack walking", - "0x10 -- Klick-Klack splat", - "0x11 -- Klobber skidding", - "0x12 -- Klobber waking up", - "0x13 -- Quiet sound (investigate)", - "0x14 -- Explosion of some sort (investigate)", - "0x15 -- Kannon shooting", - "0x16 -- Klampon eating player", - "0x17 -- Klampon snapping jaw while walking", - "0x18 -- Jump on kroc type enemy", - "0x19 -- Blow open bonus wall (investigate)", - "0x1A -- Shoot from cannon", - "0x1B -- Kong in barrel", - "0x1C -- Count down in bonus game", - "0x1D -- Rattly jump", - "0x1E -- More monkey sounds (unused?)", - "0x1F -- Klinger sliding down", - "0x20 -- Dixie loses life", - "0x21 -- Blowing sound (unused?)", - "0x22 -- Reveal token (unused?)", - "0x23 -- Diddy juggling", - "0x24 -- Neek squeak", - "0x25 -- Blowing gum variant (unused?)", - "0x26 -- Dixie blowing gum", - "0x27 -- Collect kong letter pitch 1", - "0x28 -- Collect kong letter pitch 2", - "0x29 -- Collect kong letter pitch 3", - "0x2A -- Collect kong letter pitch 4", - "0x2B -- Lose life/ballon pop", - "0x2C -- Gain life", - "0x2D -- Collect coin", - "0x2E -- K. Rool message", - "0x2F -- Squawks attack", - "0x30 -- Squawks flapping 1", - "0x31 -- Squawks flapping 2", - "0x32 -- Necky attacking", - "0x33 -- Menu move", - "0x34 -- Menu select", - "0x35 -- Reveal token", - "0x36 -- Collect token", - "0x37 -- Klick Klack flipping over", - "0x38 -- Collect life", - "0x39 -- Krow ghost exploding twinkle", - "0x3A -- Krow ghost exploding", - "0x3B -- Zinger sound (unused?)", - "0x3C -- Zinger sound higher pitch(unused?)", - "0x3D -- Zinger buzzing", - "0x3E -- Increase tempo/stop buzzing", - "0x3F -- Flitter buzzing", - "0x40 -- Team up", - "0x41 -- Animal buddy destoryed by sign (used with 0x42, 0x43, 0x44)", - "0x42 -- Animal buddy destoryed by sign (used with 0x41, 0x43, 0x44)", - "0x43 -- Animal buddy destoryed by sign (used with 0x41, 0x42, 0x44)", - "0x44 -- Animal buddy destoryed by sign (used with 0x41, 0x42, 0x43)", - "0x45 -- Rattly hurt", - "0x46 -- Squitter shoot web", - "0x47 -- Squitter shooting platform", - "0x48 -- Rattly idle jump", - "0x49 -- Rattly high jump", - "0x4A -- Load cannon ball into cannon", - "0x4B -- Shoot cannon (From Kannon)", - "0x4C -- Cannon ball falling from sky", - "0x4D -- Squitter jump (investigate)", - "0x4E -- Spiny walking", - "0x4F -- Squawks hurt", - "0x50 -- Invincible", - "0x51 -- Hit Kruncha", - "0x52 -- Rolling barrel", - "0x53 -- Rambi headbutt", - "0x54 -- Rambi trample", - "0x55 -- Animal transformation sound (semi unused)", - "0x56 -- Collect DK coin", - "0x57 -- Necky dying", - "0x58 -- Cat-O-9-Tails hurt", - "0x59 -- Kudgel hurt", - "0x5A -- K. Rool passing out", - "0x5B -- K. Rool falling into water", - "0x5C -- K. Rool falling into water (unused?)", - "0x5D -- Krook jumped on", - "0x5E -- Pause/unpause game", - "0x5F -- Wrong/invalid selection", - "0x60 -- Egg cracking sound", - "0x61 -- Krow flapping", - "0x62 -- Jumping in and out of water, or krow getting hit", - "0x63 -- Clapper arf", - "0x64 -- Krow grabbing egg", - "0x65 -- Enguard jab, or egg falling", - "0x66 -- Lost Enguard, Kleaver hooks", - "0x67 -- Time running out in bonus", - "0x68 -- Ambient in water", - "0x69 -- Puft up inflating, Kleaver sinking", - "0x6A -- Puft up exploding, Kleaver sinking 2", - "0x6B -- Swimming, Kleaver vibrating, Race count down", - "0x6C -- Shuri spinning, Kleaver boiling, Race go", - "0x6D -- Clapper clap", - "0x6E -- Jump on green kroc head/Klapper blowing", - "0x6F -- Jump on brown kroc head", - "0x70 -- Crashing mixed with DK (unused?)", - "0x71 -- Deeper rambi head butt (unused?)", - "0x72 -- Quieter monkey sound (unused?)", - "0x73 -- Engaurd-like jab (unused?)", - "0x74 -- Monkey sound (unused?)", - "0x75 -- Weird monkey echo (Unused?)", - "0x76 -- quieter monkey sound (unused?)", - "0x77 -- Unknown", - "0x78 -- Scared by boss", - "0x79 -- Caw of Krow" -} +local musics_list = load_csv(musics_path) +local musics_map = list_to_map(musics_list) + +local sound_effect_list = load_csv(sound_effects_path) +local sound_effect_map = list_to_map(sound_effect_list) local sound_index = 0x0632 local sound_buffer = 0x0622 @@ -454,7 +395,7 @@ local function display_sound() "sfx E(0x0E): %02X\n" .. "sfx F(0x0F): %02X\n\n" .. "SPC transfer id 0x%02X\n" .. - "Current song 0x%04X\n" .. + "Current song 0x%04X (%s)\n" .. "Mono/Stereo 0x%02X\n\n" .. "Play sound effect: %s\n" @@ -486,8 +427,9 @@ local function display_sound() read_byte(effect_buffer+0x0F), read_byte(spc_transfer_id), read_byte(current_song), + musics_map[read_byte(current_song)], read_byte(stereo_flag), - sound_effect_map[sound_effect+1] + sound_effect_map[sound_effect] )) end @@ -575,7 +517,7 @@ local function display_level() "$0515 (0x00) Header: 0x%04X\n" .. "$0517 (0x02): 0x%04X\n" .. "$0519 (0x04): 0x%04X\n" .. - "$051B (0x06): 0x%04X\n" .. + "$051B (0x06): Music id 0x%04X\n" .. "$051D (0x08): 0x%04X\n" .. "$051F (0x0A): 0x%04X\n" .. "$0521 (0x0C): 0x%04X\n" .. @@ -640,12 +582,18 @@ local function display_level() end local watched_addresses = {} +local exec_watched_addresses = {} +local exec_watched_count = {} local function display_watch() local watch_string = "" for address, read_callback in pairs(watched_addresses) do watch_string = watch_string .. read_callback() end + watch_string = watch_string .. "\n\n" + for address, read_callback in pairs(exec_watched_addresses) do + watch_string = watch_string .. read_callback() + end text(0, 0, watch_string) end @@ -869,6 +817,16 @@ function delete_watch(address) watched_addresses = remove(watched_addresses, address) end +function add_exec_watch(name, address) + exec_watched_addresses[address] = function() return string.format(name .. ": %02X\n", exec_watched_count[address]) end + exec_watched_count[address] = 0 + memory2.ROM:registerexec(to_pc(address), function() exec_watched_count[address] = exec_watched_count[address] + 1 end) +end + +function delete_exec_watch(address) + exec_watched_addresses = remove(exec_watched_addresses, address) +end + --I personally don't want to use these in actual code for clarity reasons --but on the fly I do want to type a lot less diff --git a/bank_80.asm b/bank_80.asm index c62ab49..f166347 100644 --- a/bank_80.asm +++ b/bank_80.asm @@ -1814,13 +1814,13 @@ init_rareware_logo: STA $211A ;$809195 |/ REP #$20 ;$809198 | LDA #$7400 ;$80919A |\ Clear $800 of VRAM at $E800 - JSR CODE_80B109 ;$80919D |/ + JSR clear_VRAM_block ;$80919D |/ LDA #$7000 ;$8091A0 |\ Clear $800 of VRAM at $E000 - JSR CODE_80B109 ;$8091A3 |/ + JSR clear_VRAM_block ;$8091A3 |/ LDA #$7800 ;$8091A6 |\ Clear $800 of VRAM at $F000 - JSR CODE_80B109 ;$8091A9 |/ + JSR clear_VRAM_block ;$8091A9 |/ LDA #$7C00 ;$8091AC |\ Clear $800 of VRAM at $F800 - JSR CODE_80B109 ;$8091AF |/ + JSR clear_VRAM_block ;$8091AF |/ LDX #DATA_F52FC7 ;$8091B2 |\ Load pointer to Nintendo presents layer 1 tilemap LDY.w #DATA_F52FC7>>16 ;$8091B5 | | LDA #$0000 ;$8091B8 | | @@ -2035,7 +2035,7 @@ run_rareware_logo: ; \ LDX #$007F ;$809423 |\ Upload $1440 bytes from $7F0500 to VRAM address $8000 LDA #$0500 ;$809426 | | The first half of tiledata for the Nintendo Presents LDY #$1440 ;$809429 | | - JSL DMA_to_VRAM ;$80942C |/ + JSL DMA_to_VRAM ;$80942C |/ DMA the payload CODE_809430: ; | LDA $2A ;$809430 |\ If the frame count is not exactly $0111 CMP #$0111 ;$809432 | | @@ -2045,7 +2045,7 @@ CODE_809430: ; | LDX #$007F ;$80943D |\ Upload $1440 bytes from $7F1940 to VRAM address $9440 LDA #$1940 ;$809440 | | The second half of tiledata for the Nintendo Presents LDY #$1440 ;$809443 | | - JSL DMA_to_VRAM ;$809446 |/ + JSL DMA_to_VRAM ;$809446 |/ DMA the payload LDA #$0000 ;$80944A | LDX #$001E ;$80944D | Number of bytes to clear minus 2 .clear_palette ; | @@ -2108,10 +2108,10 @@ CODE_8094CF: ; | STA $7A ;$8094DA | CODE_8094DC: ; | JSR CODE_80B061 ;$8094DC | - INC $2A ;$8094DF | - LDA $2A ;$8094E1 | - CMP #$0001 ;$8094E3 | - BNE CODE_8094EC ;$8094E6 | + INC $2A ;$8094DF | Increment the frame counter + LDA $2A ;$8094E1 |\ Check if this is the first frame of the logo + CMP #$0001 ;$8094E3 | | + BNE CODE_8094EC ;$8094E6 |/ JSL CODE_B58009 ;$8094E8 | CODE_8094EC: ; | LDA $2A ;$8094EC | @@ -2610,9 +2610,9 @@ CODE_8097EB: ; | LDY #$0800 ;$809912 | JSL DMA_to_VRAM ;$809915 | LDA #$7400 ;$809919 | - JSR CODE_80B109 ;$80991C | + JSR clear_VRAM_block ;$80991C | LDA #$7800 ;$80991F | - JSR CODE_80B109 ;$809922 | + JSR clear_VRAM_block ;$809922 | LDX #DATA_EC4749 ;$809925 | LDY.w #DATA_EC4749>>16 ;$809928 | LDA #$0000 ;$80992B | @@ -5225,22 +5225,22 @@ CODE_80B106: ; | WAI ;$80B106 | BRA CODE_80B106 ;$80B107 / -CODE_80B109: - STA $2116 ;$80B109 \ - LDA #DATA_80B116 ;$80B10C | - STA $4302 ;$80B10F | - STA $4308 ;$80B112 | - %offset(DATA_80B116, 1) - LDA #$0800 ;$80B115 | - STA $4305 ;$80B118 | - LDA #$1809 ;$80B11B | - STA $4300 ;$80B11E | +clear_VRAM_block: + STA $2116 ;$80B109 \ Store address to VRAM block to clear + LDA #.VRAM_zero_fill ;$80B10C |\ Set DMA source word (uses low byte of size as fixed data) + STA $4302 ;$80B10F | | + STA $4308 ;$80B112 |/ + %offset(.VRAM_zero_fill, 1) ; | Generate a label for fixed VRAM data + LDA #$0800 ;$80B115 |\ Set DMA size to $0800 + STA $4305 ;$80B118 |/ + LDA #$1809 ;$80B11B |\ Set DMA destination to $2118, two register write once, fixed + STA $4300 ;$80B11E |/ SEP #$20 ;$80B121 | - STZ $4304 ;$80B123 | - LDA #$01 ;$80B126 | - STA $420B ;$80B128 | + STZ $4304 ;$80B123 | Set DMA source bank to 00. + LDA #$01 ;$80B126 |\ Enable channel 1 DMA + STA $420B ;$80B128 |/ REP #$20 ;$80B12B | - RTS ;$80B12D / + RTS ;$80B12D / VRAM block is clear, return DATA_80B12E: db $00, $17, $1B, $1F, $00, $0C, $11, $17 @@ -5686,7 +5686,7 @@ CODE_80B5FA: LDY #$2000 ;$80B628 | JSL DMA_to_VRAM ;$80B62B | LDA #$7C00 ;$80B62F | - JSR CODE_80B109 ;$80B632 | + JSR clear_VRAM_block ;$80B632 | LDA #$7D00 ;$80B635 | STA $2116 ;$80B638 | LDX.w #DATA_F80D66>>16 ;$80B63B | @@ -12617,6 +12617,7 @@ CODE_80F3B0: ; | STZ $1730 ;$80F3B0 | RTS ;$80F3B3 / +CODE_80F3B4: LDA #$0001 ;$80F3B4 | STA $420B ;$80F3B7 | JMP CODE_80F3F2 ;$80F3BA / diff --git a/bank_B3.asm b/bank_B3.asm index c8cfd71..0b64531 100644 --- a/bank_B3.asm +++ b/bank_B3.asm @@ -4779,9 +4779,7 @@ DATA_B3A45D: CODE_B3A465: LDY #$0008 ;$B3A465 \ LDA [$8E],y ;$B3A468 | - CMP #$00 ;$B3A46A | - RTS ;$B3A46C / - + CMP #$6000 ;$B3A46A | BNE CODE_B3A488 ;$B3A46D | LDA $30,x ;$B3A46F | ORA #$0080 ;$B3A471 | @@ -8468,7 +8466,7 @@ CODE_B3BF32: ; | CLC ;$B3BF55 | CODE_B3BF56: ; | RTS ;$B3BF56 / - + CODE_B3BF57: JSR CODE_B3A369 ;$B3BF57 / @@ -15948,5 +15946,3 @@ DATA_B3F4D8: db $00, $00, $00, $00, $00, $00, $00, $00 db $00, $00, $00, $00, $00, $00, $00, $00 db $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $00, $00, $00, $00, $00, $00, $00 diff --git a/bank_B5.asm b/bank_B5.asm index fb12554..4df0082 100644 --- a/bank_B5.asm +++ b/bank_B5.asm @@ -19,8 +19,8 @@ CODE_B5800F: CODE_B58012: JMP CODE_B581CE ;$B58012 | -CODE_B58015: - JMP CODE_B581DA ;$B58015 | +null_spc_command_entry: + JMP null_spc_command ;$B58015 | CODE_B58018: JMP CODE_B581DB ;$B58018 | @@ -152,26 +152,26 @@ CODE_B580D5: STA $1C ;$B580D8 | LDX #$00FF ;$B580DA | JSR write_spc_command ;$B580DD | - JSR CODE_B58469 ;$B580E0 | - JSR CODE_B5825C ;$B580E3 | - JSR CODE_B58277 ;$B580E6 | + JSR upload_song_sample_set ;$B580E0 | + JSR upload_song_data ;$B580E3 | + JSR upload_song_sound_effects ;$B580E6 | JSR execute_spc_sound_engine ;$B580E9 | PLB ;$B580EC | RTL ;$B580ED / -CODE_B580EE: - PHB ;$B580EE \ - PHK ;$B580EF | - PLB ;$B580F0 | - JSR CODE_B5816D ;$B580F1 | - LDX #$00FE ;$B580F4 | - JSR write_spc_command ;$B580F7 | - LDA $1E ;$B580FA | - XBA ;$B580FC | - ORA #$00FA ;$B580FD | - TAX ;$B58100 | - JSR write_spc_command ;$B58101 | - PLB ;$B58104 | +CODE_B580EE: ; \ + PHB ;$B580EE |\ Change to current databank + PHK ;$B580EF | | + PLB ;$B580F0 |/ + JSR clear_sound_buffers ;$B580F1 | + LDX #$00FE ;$B580F4 |\ Tell the SPC engine to start playing music + JSR write_spc_command ;$B580F7 |/ + LDA $1E ;$B580FA |\ Write mono or stereo setting to SPC engine + XBA ;$B580FC | | + ORA #$00FA ;$B580FD | | + TAX ;$B58100 | | + JSR write_spc_command ;$B58101 |/ + PLB ;$B58104 | Restore databank RTL ;$B58105 / CODE_B58106: @@ -181,19 +181,19 @@ CODE_B58106: STA $1C ;$B58109 | LDX #$00FF ;$B5810B | JSR write_spc_command ;$B5810E | - JSR CODE_B58469 ;$B58111 | - JSR CODE_B5825C ;$B58114 | - JSR CODE_B58277 ;$B58117 | - JSR CODE_B5816D ;$B5811A | + JSR upload_song_sample_set ;$B58111 | + JSR upload_song_data ;$B58114 | + JSR upload_song_sound_effects ;$B58117 | + JSR clear_sound_buffers ;$B5811A | JSR execute_spc_sound_engine ;$B5811D | - LDX #$00FE ;$B58120 | - JSR write_spc_command ;$B58123 | - LDA $1E ;$B58126 | - XBA ;$B58128 | - ORA #$00FA ;$B58129 | - TAX ;$B5812C | - JSR write_spc_command ;$B5812D | - PLB ;$B58130 | + LDX #$00FE ;$B58120 |\ Tell the SPC engine to start playing music + JSR write_spc_command ;$B58123 |/ + LDA $1E ;$B58126 |\ Write mono or stereo setting to SPC engine + XBA ;$B58128 | | + ORA #$00FA ;$B58129 | | + TAX ;$B5812C | | + JSR write_spc_command ;$B5812D |/ + PLB ;$B58130 | Restore databank RTL ;$B58131 / CODE_B58132: @@ -205,35 +205,35 @@ CODE_B58132: STA $1C ;$B58139 | LDX #$00FF ;$B5813B | JSR write_spc_command ;$B5813E | - JSR CODE_B58469 ;$B58141 | - JSR CODE_B5825C ;$B58144 | - JSR CODE_B58277 ;$B58147 | - JSR CODE_B5816D ;$B5814A | + JSR upload_song_sample_set ;$B58141 | + JSR upload_song_data ;$B58144 | + JSR upload_song_sound_effects ;$B58147 | + JSR clear_sound_buffers ;$B5814A | JSR execute_spc_sound_engine ;$B5814D | PLA ;$B58150 | AND #$FF00 ;$B58151 | ORA #$00FB ;$B58154 | TAX ;$B58157 | JSR write_spc_command ;$B58158 | - LDX #$00FE ;$B5815B | - JSR write_spc_command ;$B5815E | - LDA $1E ;$B58161 | - XBA ;$B58163 | - ORA #$00FA ;$B58164 | - TAX ;$B58167 | - JSR write_spc_command ;$B58168 | - PLB ;$B5816B | + LDX #$00FE ;$B5815B |\ Tell the SPC engine to start playing music + JSR write_spc_command ;$B5815E |/ + LDA $1E ;$B58161 |\ Write mono or stereo setting to SPC engine + XBA ;$B58163 | | + ORA #$00FA ;$B58164 | | + TAX ;$B58167 | | + JSR write_spc_command ;$B58168 |/ + PLB ;$B5816B | Restore databank RTL ;$B5816C / -CODE_B5816D: +clear_sound_buffers: LDX #$0007 ;$B5816D \ -CODE_B58170: ; | +.clear_buffer_entry ; | STZ $0621,x ;$B58170 | STZ $0629,x ;$B58173 | STZ $0619,x ;$B58176 | DEX ;$B58179 | DEX ;$B5817A | - BPL CODE_B58170 ;$B5817B | + BPL .clear_buffer_entry ;$B5817B | STZ $0634 ;$B5817D | STZ $0636 ;$B58180 | LDA #$0002 ;$B58183 | @@ -242,7 +242,7 @@ CODE_B58170: ; | RTS ;$B5818C / upload_spc_engine_wrapper: - JSR upload_spc_engine ;$B5818D \ + JSR upload_spc_engine ;$B5818D \ Wrapper around SPC engine upload routine RTL ;$B58190 / upload_spc_engine: @@ -257,8 +257,8 @@ upload_spc_engine: JSR execute_spc_sound_engine ;$B581A7 | Jump to the sound engine entry RTS ;$B581AA / -CODE_B581AB: - RTS ;$B581AB / +.dead_code + RTS ;$B581AB > Dead code execute_spc_sound_engine: ; \ LDA #$0672 ;$B581AC |\ Load the sound engine entry point @@ -290,8 +290,8 @@ CODE_B581CE: JSR write_spc_command ;$B581D6 | RTL ;$B581D9 / -CODE_B581DA: - RTL ;$B581DA / +null_spc_command: + RTL ;$B581DA > Unused SPC command that does nothing CODE_B581DB: PHB ;$B581DB \ @@ -302,14 +302,14 @@ CODE_B581DB: ORA #$00FB ;$B581E2 | TAX ;$B581E5 | JSR write_spc_command ;$B581E6 | - LDX #$00FE ;$B581E9 | - JSR write_spc_command ;$B581EC | - LDA $1E ;$B581EF | - XBA ;$B581F1 | - ORA #$00FA ;$B581F2 | - TAX ;$B581F5 | - JSR write_spc_command ;$B581F6 | - PLB ;$B581F9 | + LDX #$00FE ;$B581E9 |\ Tell the SPC engine to start playing music + JSR write_spc_command ;$B581EC |/ + LDA $1E ;$B581EF |\ Write mono or stereo setting to SPC engine + XBA ;$B581F1 | | + ORA #$00FA ;$B581F2 | | + TAX ;$B581F5 | | + JSR write_spc_command ;$B581F6 |/ + PLB ;$B581F9 | Restore databank RTL ;$B581FA / write_spc_command: @@ -366,33 +366,33 @@ upload_spc_base_engine: ; \ REP #$30 ;$B58259 | RTS ;$B5825B / All done, new SPC base engine set up. -CODE_B5825C: - LDA $1C ;$B5825C \ - CLC ;$B5825E | - ROL A ;$B5825F | - STA $32 ;$B58260 | - ROL A ;$B58262 | - CLC ;$B58263 | - ADC $32 ;$B58264 | - TAX ;$B58266 | - LDA.l DATA_EE1086,x ;$B58267 | - STA $32 ;$B5826B | - LDA.l DATA_EE1088,x ;$B5826D | - STA $34 ;$B58271 | - JSR upload_inline_spc_block ;$B58273 | +upload_song_data: + LDA $1C ;$B5825C \ Load currently set song + CLC ;$B5825E |\ Multiply song number by 6 to get an offset to song data + ROL A ;$B5825F | | Effectively (X << 1) + (X << 2) + STA $32 ;$B58260 | | + ROL A ;$B58262 | | + CLC ;$B58263 | | + ADC $32 ;$B58264 |/ + TAX ;$B58266 | Move offset to an index register + LDA.l song_data,x ;$B58267 |\ Load pointer to song data + STA $32 ;$B5826B | | + LDA.l song_data+2,x ;$B5826D | | + STA $34 ;$B58271 |/ + JSR upload_inline_spc_block ;$B58273 | Upload song data RTS ;$B58276 / -CODE_B58277: - LDA $1C ;$B58277 \ - CLC ;$B58279 | - ADC $1C ;$B5827A | - ADC $1C ;$B5827C | - TAX ;$B5827E | - LDA.l DATA_EE117B,x ;$B5827F | - STA $32 ;$B58283 | - LDA.l DATA_EE117D,x ;$B58285 | - STA $34 ;$B58289 | - JSR upload_inline_spc_block ;$B5828B | +upload_song_sound_effects: ; \ + LDA $1C ;$B58277 |\ Triple song id + CLC ;$B58279 | | + ADC $1C ;$B5827A | | + ADC $1C ;$B5827C |/ + TAX ;$B5827E | Move offset to an index register + LDA.l DATA_EE117B,x ;$B5827F |\ Load pointer to song specific sound effects + STA $32 ;$B58283 | | + LDA.l DATA_EE117D,x ;$B58285 | | + STA $34 ;$B58289 |/ + JSR upload_inline_spc_block ;$B5828B | Upload sound effect data RTS ;$B5828E / upload_spc_sound_engine: @@ -420,18 +420,18 @@ upload_global_samples: ; \ STA $06 ;$B582BD |/ STZ $0A ;$B582BF | Reset the sample counter JSR sample_uploader ;$B582C1 | - LDA $02 ;$B582C4 |\ + LDA $02 ;$B582C4 |\ Set next pending source directory ARAM destination STA $04 ;$B582C6 |/ - LDA $06 ;$B582C8 |\ + LDA $06 ;$B582C8 |\ Set next pending sample data ARAM destination STA $08 ;$B582CA |/ - LDA $0A ;$B582CC |\ + LDA $0A ;$B582CC |\ Set next pending sample number STA $0C ;$B582CE |/ RTS ;$B582D0 / sample_uploader: STZ $0A ;$B582D1 \ Reset the sample counter LDX #$0000 ;$B582D3 | - LDA $0A ;$B582D6 |\ + LDA $0A ;$B582D6 |\ Copy sample number (always zero in this case) STA $3A ;$B582D8 |/ LDA $0E ;$B582DA |\ Copy sample map pointer STA $3E ;$B582DC | | @@ -654,26 +654,26 @@ upload_spc_block: LDY #$00 ;$B58465 | Reset the data index BRA .wait_for_echo ;$B58467 / -CODE_B58469: - LDA $1C ;$B58469 \ - CLC ;$B5846B | - ROL A ;$B5846C | - STA $32 ;$B5846D | - ROL A ;$B5846F | - CLC ;$B58470 | - ADC $32 ;$B58471 | - TAX ;$B58473 | - LDA.l DATA_EE1089,x ;$B58474 | - STA $0E ;$B58478 | - LDA.l DATA_EE108B,x ;$B5847A | - STA $10 ;$B5847E | - LDA $04 ;$B58480 | - STA $02 ;$B58482 | - LDA $08 ;$B58484 | - STA $06 ;$B58486 | - LDA $0C ;$B58488 | - STA $0A ;$B5848A | - JSR sample_uploader ;$B5848C | +upload_song_sample_set: + LDA $1C ;$B58469 \ Load currently set song + CLC ;$B5846B |\ Multiply song number by 6 to song sample set offset + ROL A ;$B5846C | | Effectively (X << 1) + (X << 2) + STA $32 ;$B5846D | | + ROL A ;$B5846F | | + CLC ;$B58470 | | + ADC $32 ;$B58471 |/ + TAX ;$B58473 | Move offset to an index register + LDA.l song_sample_sets,x ;$B58474 |\ Load pointer to song sample set + STA $0E ;$B58478 | | + LDA.l song_sample_sets+2,x ;$B5847A | | + STA $10 ;$B5847E |/ + LDA $04 ;$B58480 |\ Set next pending source directory ARAM destination + STA $02 ;$B58482 |/ + LDA $08 ;$B58484 |\ Set next pending sample data ARAM destination + STA $06 ;$B58486 |/ + LDA $0C ;$B58488 |\ Set next pending sample number + STA $0A ;$B5848A |/ + JSR sample_uploader ;$B5848C | Upload the samples RTS ;$B5848F / DATA_B58490: diff --git a/bank_BB.asm b/bank_BB.asm index aa4887b..9e14bce 100644 --- a/bank_BB.asm +++ b/bank_BB.asm @@ -909,6 +909,7 @@ CODE_BB8565: ; | STA $12,x ;$BB8579 | PLY ;$BB857B | PLB ;$BB857C | + t: INY ;$BB857D | INY ;$BB857E | JMP CODE_BB8485 ;$BB857F / diff --git a/bank_EE.asm b/bank_EE.asm index 52de9d0..0edd26e 100644 --- a/bank_EE.asm +++ b/bank_EE.asm @@ -132,10 +132,12 @@ CODE_0660: MOV A, $1313+Y ;$066A | MOV $E6, A ;$066D | JMP CODE_0678 ;$066F | + +CODE_0672: MOV $E6, #$13 ;$0672 | MOV $E5, #$00 ;$0675 | CODE_0678: ; | - CALL $100B ;$0678 | + CALL CODE_100B ;$0678 | MOV A, #$00 ;$067B | MOV $1C, A ;$067D | MOV $1D, A ;$067F | @@ -2091,12 +2093,9 @@ sample_table: dl !null_pointer dl !null_pointer -DATA_EE1086: - %offset(DATA_EE1088, 2) +song_data: + %offset(song_sample_sets, 3) dl DATA_EE1939 - -DATA_EE1089: - %offset(DATA_EE108B, 2) dl DATA_EE1223 dl DATA_EE195F dl DATA_EE124D diff --git a/music.txt b/music.txt index 41ba386..1152d61 100644 --- a/music.txt +++ b/music.txt @@ -1,175 +1,32 @@ -Music IDs -0x0000 -- Nothing -0x0001 -- Island map -0x0002 -- Main theme -0x0003 -- Swamp -0x0004 -- Swanky -0x0005 -- Enchanted wood -0x0006 -- Ship deck -0x0007 -- Mine -0x0008 -- Funky -0x0009 -- Brambles -0x000A -- Klubba -0x000B -- Wasp hive -0x000C -- Wrinkly -0x000D -- Lava -0x000E -- Roller coaster -0x000F -- Bonus -0x0010 -- Ship hold -0x0011 -- Fanfare -0x0012 -- Ship deck 2 -0x0013 -- Rescue kong -0x0014 -- Game over -0x0015 -- Big boss -0x0016 -- Castle -0x0017 -- Haunted -0x0018 -- Select -0x0019 -- Cranky -0x001A -- Ice -0x001B -- Jungle -0x001C -- Lost world -0x001D -- Rigging -0x001E -- Credits -0x001F -- Krool - -In level music prefixes -0x0000 -- normal -0x0100 -- death -0x0200 -- diddy win -0x0300 -- dixie win -0x0400 -- no dance win (invalid for boss music) - -Bonus music prefixes -0x0000 -- Bonus transition screen -0x0100 -- Complete (already one) -0x0200 -- lose -0x0300 -- In the bonus - -OW music, Swanky, Cranky, Wrinkly, Fanfare, Gameover, and Credits have no prefixes - - -Sound effects: -0x00 -- Nothing -0x01 -- Nothing? -0x02 -- Klomp walking -0x03 -- Monkey sound (unused) -0x04 -- Spin/cartwheel into enemy -0x05 -- Switch Kongs -0x06 -- Diddy hurt/lost -0x07 -- Dixie hurt/lost -0x08 -- Collect bananna -0x09 -- Collect something (unused) -0x0A -- Diddy loses life -0x0B -- Rambi charging -0x0C -- Something breaking (investigate) -0x0D -- Zinger like sound (investigate) -0x0E -- Zinger killed -0x0F -- Klick-Klack walking -0x10 -- Klick-Klack splat -0x11 -- Klobber skidding -0x12 -- Klobber waking up -0x13 -- Quiet sound (investigate) -0x14 -- Explosion of some sort (investigate) -0x15 -- Kannon shooting -0x16 -- Klampon eating player -0x17 -- Klampon snapping jaw while walking -0x18 -- Jump on kroc type enemy -0x19 -- Blow open bonus wall -0x1A -- Shoot from cannon -0x1B -- Kong in barrel -0x1C -- Count down in bonus game -0x1D -- Rattly jump -0x1E -- More monkey sounds (unused?) -0x1F -- Klinger sliding down -0x20 -- Dixie loses life -0x21 -- Blowing sound (unused?) -0x22 -- Reveal token (unused?) -0x23 -- Diddy juggling -0x24 -- Neek squeak -0x25 -- Blowing gum variant (unused?) -0x26 -- Dixie blowing gum -0x27 -- Collect kong letter pitch 1 -0x28 -- Collect kong letter pitch 2 -0x29 -- Collect kong letter pitch 3 -0x2A -- Collect kong letter pitch 4 -0x2B -- Lose life/ballon pop -0x2C -- Gain life -0x2D -- Collect coin -0x2E -- K. Rool message -0x2F -- Squawks attack -0x30 -- Squawks flapping 1 -0x31 -- Squawks flapping 2 -0x32 -- Spiny walking (investigate) -0x33 -- Menu move -0x34 -- Menu select -0x35 -- Reveal token -0x36 -- Collect kremcoin -0x37 -- Klick Klack flipping over -0x38 -- Collect life -0x39 -- Krow ghost exploding twinkle -0x3A -- Krow ghost exploding -0x3B -- Zinger sound (unused?) -0x3C -- Zinger sound higher pitch(unused?) -0x3D -- Zinger buzzing -0x3E -- Increase tempo/stop buzzing -0x3F -- Flitter buzzing -0x40 -- Team up -0x41 -- Animal buddy destoryed by sign (used with 0x42, 0x43, 0x44) -0x42 -- Animal buddy destoryed by sign (used with 0x41, 0x43, 0x44) -0x43 -- Animal buddy destoryed by sign (used with 0x41, 0x42, 0x44) -0x44 -- Animal buddy destoryed by sign (used with 0x41, 0x42, 0x43) -0x45 -- Rattly hurt -0x46 -- Squitter shoot web -0x47 -- Squitter shooting platform -0x48 -- Rattly idle jump -0x49 -- Rattly high jump -0x4A -- Load cannon ball into cannon -0x4B -- Shoot cannon (unused?) -0x4C -- Cannon ball falling from sky -0x4D -- Squitter jump (investigate) -0x4E -- Spiny walking -0x4F -- Squawks hurt -0x50 -- Invincible -0x51 -- Hit Kruncha -0x52 -- Rolling barrel -0x53 -- Rambi headbutt -0x54 -- Rambi trample -0x55 -- Animal transformation sound (semi unused) -0x56 -- Collect DK coin -0x57 -- Necky attacking -0x58 -- Cat-O-9-Tails hurt -0x59 -- Kudgel hurt -0x5A -- K. Rool passing out -0x5B -- K. Rool falling into water -0x5C -- K. Rool falling into water (unused?) -0x5D -- Krook jumped on -0x5E -- Pause/unpause game -0x5F -- Wrong/invalid selection -0x60 -- Egg cracking sound -0x61 -- Krow flapping -0x62 -- Jumping in and out of water, or krow hit -0x63 -- Clapper arf -0x64 -- Krow grabbing egg -0x65 -- Enguard jab -0x66 -- Lost Enguard, Kleaver hooks -0x67 -- Time running out in bonus -0x68 -- Ambient in water -0x69 -- Puft up inflating, Kleaver sinking -0x6A -- Puft up exploding, Kleaver sinking 2 -0x6B -- Swimming, Kleaver vibrating, Race count down -0x6C -- Shuri spinning, Kleaver boiling, Race go -0x6D -- Clapper clap -0x6E -- Jump on green kroc head, Klapper blowing -0x6F -- Jump on brown kroc head -0x70 -- Crashing mixed with DK (unused?) -0x71 -- Deeper rambi head butt (unused?) -0x72 -- Quieter monkey sound (unused?) -0x73 -- Engaurd-like jab (unused?) -0x74 -- Monkey sound (unused?) -0x75 -- Weird monkey echo (Unused?) -0x76 -- quieter monkey sound (unused?) -0x77 -- Unknown -0x78 -- Scared by boss -0x79 -- Caw of Krow - -Note: 0x60+ can have multiple uses. Ones before that may still be sample dependant. +0x00, "Nothing" +0x01, "Island map" +0x02, "Main theme" +0x03, "Swamp" +0x04, "Swanky" +0x05, "Enchanted wood" +0x06, "Ship deck" +0x07, "Mine" +0x08, "Funky" +0x09, "Brambles" +0x0A, "Klubba" +0x0B, "Wasp hive" +0x0C, "Wrinkly" +0x0D, "Lava" +0x0E, "Roller coaster" +0x0F, "Bonus" +0x10, "Ship hold" +0x11, "Fanfare" +0x12, "Ship deck 2" +0x13, "Rescue kong" +0x14, "Game over" +0x15, "Big boss" +0x16, "Castle" +0x17, "Haunted" +0x18, "Select" +0x19, "Cranky" +0x1A, "Ice" +0x1B, "Jungle" +0x1C, "Lost world" +0x1D, "Rigging" +0x1E, "Credits" +0x1F, "Krool" diff --git a/notes.txt b/notes.txt index e7ac660..6956285 100644 --- a/notes.txt +++ b/notes.txt @@ -431,23 +431,21 @@ Various compressed data: $F9C775 $FA4C3E -;these are not exactly right, they are in the wrong order.... -command 0x80(CODE_BB84C0): SEC and return ;success -command 0x81(CODE_BB84C7): evil? ;evil -command 0x82(CODE_BB84D8): Goto next command ;skip -command 0x83(CODE_BB84DA): load sub config ;subconfig -command 0x84(CODE_BB84EE): Set palette? ;palette -command 0x85(CODE_BB850C): Set X/Y/priority? ;directedpriority -command 0x86(CODE_BB8521): reads +2 (?) ;too tired -command 0x87(CODE_BB8582): reads +2, relative x flip? ;maybe -command 0x88(CODE_BB85A2): relative x/y ;relative -command 0x89(CODE_BB86D5): allocate VRAM? ;VRAM -command 0x8A(CODE_BB85BC): read +$1A, bulk copy ;bulk -command 0x8B(CODE_BB860E): x/y stuff ;ehh -command 0x8C(CODE_BB8646): jump to cmd 0x84 ;removed probably -command 0x8D(CODE_BB8678): more palette voodoo ;voodoo -command 0x8E(CODE_BB879E): VRAM alloc 2? ;VRAM2 - ++0 command 0x80(CODE_BB84C0) return success ++4 command 0x81(CODE_BB84C7) todo ++4 command 0x82(CODE_BB84D8) null command (goto next) ++4 command 0x83(CODE_BB84DA) load subconfig ++4 command 0x84(CODE_BB84EE) set palette ++4 command 0x85(CODE_BB850C) Set x/y/priority ++6 command 0x86(CODE_BB8521) shift spawn relative to parent sprite/set render priority/something with $1C ++6 command 0x87(CODE_BB8582) set property in sprite (based on parent X flip) ++2 command 0x88(CODE_BB85A2) Spawn at to $0A3E/$0A40 ++A command 0x89(CODE_BB86D5) alloc palette/vram ++1C command 0x8A(CODE_BB85BC) bulk settings ++4 command 0x8B(CODE_BB860E) Set sprite proiroty ++4 command 0x8C(CODE_BB8646) jump to command CODE_BB84EE ++4 command 0x8D(CODE_BB8678) Alt set palette (uses FD5EE table) ++A command 0x8E(CODE_BB879E) Another palette/vram allocation routine $05FD = index to control buffer @@ -457,8 +455,23 @@ $05FD = index to control buffer +CODE_BB842C one of several spawn sprite routines +music notes: +sound effects 0x60+ can have multiple uses. Ones before that may still be sample dependant. +In level music prefixes +0x0000 -- normal +0x0100 -- death +0x0200 -- diddy win +0x0300 -- dixie win +0x0400 -- no dance win (invalid for boss music) +Bonus music prefixes +0x0000 -- Bonus transition screen +0x0100 -- Complete (already one) +0x0200 -- lose +0x0300 -- In the bonus +OW music, Swanky, Cranky, Wrinkly, Fanfare, Gameover, and Credits have no prefixes diff --git a/sprites.txt b/sprites.txt new file mode 100644 index 0000000..833510c --- /dev/null +++ b/sprites.txt @@ -0,0 +1,174 @@ +0x000, "Game intro brilliancy * / Sprites true ending *" +0x004, "Sprites on overworld / Sprites true ending *" +0x008, "Kongs on map" +0x010, "Squawks' cookie" +0x014, "Running feet smoke * / Clapper "spit" *" +0x018, "Kannonball's fragment *" +0x01c, "Krow's egg fragment * / Kannonball's fragment *" +0x020, "Krow's egg fragment *" +0x024, "Hook (boss level)" +0x028, "Level with mobile water setup [when loading level] *" +0x02c, "Kleever's fragment *" +0x034, "Kleever's fragment *" +0x038, "Kleever's fragment *" +0x03c, "Kleever's fragment *" +0x040, "Init for 140? Appears for instance in the end of Barrel Bayou if you do back." +0x044, "Kleever's fragment *" +0x048, "Kleever's fragment *" +0x04c, "Kreepy Krow's dying stars *" +0x050, "Kaptain K. Roll's dying brilliancy *" +0x054, "Kaptain K. Roll's alga *" +0x058, "Poftup Spike" +0x05c, "Bulrush's base *" +0x060, "Barrel's fragments 1 *" +0x064, "Barrel's fragments 2 *" +0x068, "Zing King spikes" +0x06c, "Kannon" +0x074, "Klubba" +0x078, "Kudgel" +0x07c, "Zing King [Rambi Rumble]" +0x080, "Zing King [boss]" +0x084, "A flag for the 1-UP Balloon in K. Roll cabin" +0x088, "Chest groups" +0x08c, "(appears on top-left sometimes) [aux] * / (makes sprites not disappear when offscreen in some parts)" +0x094, "Door / Exit" +0x098, "Kaptain K. Roll's altar animation" +0x09c, "Klubba barrel brilliancy generator *" +0x0a0, "Klubba's barrel brilliancy" +0x0ac, "Water level activator *" +0x0b0, "End of Level Target / Water delimiter??? / Sprite delimiter? / Camera control?" +0x0b4, "TNT Barrel's fire *" +0x0b8, "TNT Barrel's fire *" +0x0bc, "Kackle (blue)" +0x0c0, "Horizontal wind activator? *" +0x0c4, "Verical wind activator? *" +0x0d0, "Tire" +0x0d4, "**Go throw solid block**" +0x0d8, "[Activator of sprites?]" +0x0e0, "Kong invincibility effect *" +0x0e4, "Diddy" +0x0e8, "Dixie" +0x0f0, "Appears when some [unidiretional?] sprites go offscreen" +0x0fc, "Dixie cry" +0x100, "Krow's head stunning stars * / Cat-O-9-Tails dizziness starts *" +0x108, "Squitter webbing projectile" +0x10c, "Kong water splash *" +0x118, "Squitter webbing platform" +0x11c, "DK Barrel (complement?) *" +0x120, "Bonus Barrel [aux]" +0x124, "Bonus Wall" +0x128, "Hot Air Balloon" +0x12c, "[like 08c]" +0x130, "Water splash (when enemy dies and falls into the sea or lava)" +0x134, "[like 08c]" +0x138, "Bonus countdown" +0x13c, "Cannon" +0x140, "Barrel [all?]" +0x144, "Iron Ball *REAL NAME?*" +0x148, "Animal Crate" +0x14c, "Hook" +0x150, "Invincibility Barrel" +0x154, "Halfway Barrel" +0x158, "Skull Cart" +0x15c, "75 Kremkoins / Banana Coin / DK Coin" +0x160, "End of Level Target [aux] *" +0x164, "End of Level Target [barrel] *" +0x168, "End of Level Target [aux] *" +0x16c, "End of Level Target (reward)" +0x170, "Banana Bunch" +0x174, "KONG Coins" +0x178, "Live Balloon" +0x17c, "Kudgel's TNT Barrel falling" +0x180, "KrokHead Barrel [and its aux symbol]" +0x184, "Scroll / Funky's Flight / Klubba's barrel" +0x188, "Banana Coin on Funky's Flight" +0x18c, "Cranky / Funky" +0x190, "Squitter" +0x194, "Rattly" +0x198, "Squawks / Quawks" +0x19c, "Rambi" +0x1a0, "Enguarde" +0x1a4, "Wooden Barrel" +0x1a8, "DK Barrel (floating)" +0x1ac, "Klobber" +0x1b0, "Cannonball" +0x1b4, "Krow's egg" +0x1b8, "TNT Barrel" +0x1bc, "Crate" +0x1c0, "Chest" +0x1c4, "Kreepy Krow's egg" +0x1cc, "Diddy's stereo / Dixie guitar" +0x1d0, "Kannon's Barrel / Kannon's Ball" +0x1d4, "Kannon's Smoke * / Zing King's smoke *" +0x1d8, "Kruncha" +0x1dc, "Click-Clack" +0x1e0, "Kutless" +0x1e4, "Neek (rat)" +0x1e8, "DK Barrel" +0x1e8, "Klobber [aux]" +0x1ec, "Klomp" +0x1f0, "Klampon" +0x1f8, "Flotsam (green) / Flotsam (blue)" +0x1fc, "Spiny" +0x200, "Klinger" +0x204, "Cat-O-9-Tails" +0x208, "Puftup" +0x20c, "Lockjaw" +0x210, "Snapjaw" +0x214, "Mini-Necky" +0x218, "Zinger" +0x21c, "Kaboing (gray)" +0x220, "Flitter" +0x224, "Krow's body" +0x228, "Krow's head" +0x22c, "Kreepy Krow's body" +0x230, "Kreepy Krow's head" +0x234, "Shuri" +0x238, "TNT Barrel's explosion * / Zing King's hit star *" +0x23c, "Rambi Crate Smoke *" +0x248, "TNT Barrel's fire *" +0x24c, "TNT Barrel's fire *" +0x250, "[like 8c]" +0x254, "Ghost Rope" +0x258, "No-Rambi Sign / No-Enguarde Sign / No-Squitter Sign" +0x25c, "Krook" +0x260, "Krook's hook" +0x264, "Kaptain K. Roll" +0x268, "Kaptain K. Roll's blunderbuss" +0x26c, "Kaptain K. Roll's blunderbuss air" +0x270, "Kaptain K. Roll's kannonballs" +0x274, "Kaptain K. Roll's blunderbuss fire" +0x278, "Klubba's bat" +0x27c, "Kudgel's bat" +0x280, "Donkey Kong's rope [wrong hitbox] *" +0x284, "Donkey Kong [wrong hitbox] *" +0x298, "Kleever's lava splash / Kudgel's stunning smoke / Kudgel's dying effect (fire) / Kreepy Krow's dying effect / Kaptain K. Roll's kannonballs smoke" +0x29c, "Kaptain K. Roll's eyes after explosion / Podium winners (ending)" +0x2a0, "Kaptain K. Roll's barrels/kannonballs" +0x2a4, "Kleever's blade *WRONG HITBOX OFFSET*" +0x2a8, "Kaptain K. Roll's water" +0x2ac, "Kaptain K. Roll's fish" +0x2b0, "Kleever's spining fragment" +0x2b4, "Kleever's spining fragment" +0x2b8, "Zing King's sting" +0x2bc, "Zing King's smoke after getting small *" +0x2c0, "Zing King's friends" +0x2c4, "Kleever's skull" +0x2c8, "Kleever's fire hand" +0x2cc, "Kleever's fireball" +0x2d0, "Kleever's base on lava" +0x2d4, "KrocHead (green) / KrocHead (brown)" +0x2d8, "Bulrush *wrong hitbox*" +0x2dc, "Animal reward before being able to grab it" +0x2e0, "Glimmer" +0x2e4, "Kloak" +0x2e8, "Kloak's projectile (box)" +0x2ec, "Gate [and its aux]" +0x2f0, "Klank" +0x2f4, "Skull Cart's spark *" +0x2f8, "Plus Barrel / Minus Barrel" +0x2fc, "Check Barrel" +0x304, "Clapper" +0x308, "Animal "explosion" smoke *" +0x30c, "Screech" +0x310, "Cart kill reward"