mirror of
https://github.com/notwa/mm
synced 2024-11-04 22:39:02 -08:00
add object spawning to OoT
This commit is contained in:
parent
49e51cd6e7
commit
108c4189ef
4 changed files with 550 additions and 1 deletions
474
Lua/inject/actor object table oot.asm
Normal file
474
Lua/inject/actor object table oot.asm
Normal file
|
@ -0,0 +1,474 @@
|
|||
HEX {
|
||||
00 00 // Player
|
||||
00 00 // unset
|
||||
00 32 // En_Test
|
||||
00 00 // unset
|
||||
00 01 // En_GirlA
|
||||
00 00 // unset
|
||||
00 00 // unset
|
||||
00 01 // En_Part
|
||||
00 01 // En_Light
|
||||
00 01 // En_Door
|
||||
00 0E // En_Box
|
||||
00 0A // Bg_Dy_Yoseizo
|
||||
00 2C // Bg_Hidan_Firewall
|
||||
00 01 // En_Poh
|
||||
00 07 // En_Okuta
|
||||
00 36 // Bg_Ydan_Sp
|
||||
00 01 // En_Bom
|
||||
00 0B // En_Wallmas
|
||||
00 0C // En_Dodongo
|
||||
00 0D // En_Firefly
|
||||
00 1A // En_Horse
|
||||
00 00 // En_Item00
|
||||
00 01 // En_Arrow
|
||||
00 00 // unset
|
||||
00 01 // En_Elf
|
||||
00 13 // En_Niw
|
||||
00 00 // unset
|
||||
00 16 // En_Tite
|
||||
00 17 // En_Reeba
|
||||
00 18 // En_Peehat
|
||||
00 02 // En_Butte
|
||||
00 00 // unset
|
||||
00 01 // En_Insect
|
||||
00 01 // En_Fish
|
||||
00 00 // unset
|
||||
00 01 // En_Holl
|
||||
00 40 // En_Scene_Change
|
||||
00 1B // En_Zf
|
||||
00 76 // En_Hata
|
||||
00 19 // Boss_Dodongo
|
||||
00 1C // Boss_Goma
|
||||
00 1D // En_Zl1
|
||||
00 01 // En_Viewer
|
||||
00 1E // En_Goma
|
||||
00 03 // Bg_Pushbox
|
||||
00 12 // En_Bubble
|
||||
00 01 // Door_Shutter
|
||||
00 1F // En_Dodojr
|
||||
00 19 // En_Bdfire
|
||||
00 00 // unset
|
||||
00 01 // En_Boom
|
||||
00 20 // En_Torch2
|
||||
00 21 // En_Bili
|
||||
00 22 // En_Tp
|
||||
00 00 // unset
|
||||
00 24 // En_St
|
||||
00 25 // En_Bw
|
||||
00 00 // En_A_Obj
|
||||
00 26 // En_Eiyer
|
||||
00 01 // En_River_Sound
|
||||
00 27 // En_Horse_Normal
|
||||
00 01 // En_Ossan
|
||||
00 2A // Bg_Treemouth
|
||||
00 2B // Bg_Dodoago
|
||||
00 2C // Bg_Hidan_Dalm
|
||||
00 2C // Bg_Hidan_Hrock
|
||||
00 2D // En_Horse_Ganon
|
||||
00 2C // Bg_Hidan_Rock
|
||||
00 2C // Bg_Hidan_Rsekizou
|
||||
00 2C // Bg_Hidan_Sekizou
|
||||
00 2C // Bg_Hidan_Sima
|
||||
00 2C // Bg_Hidan_Syoku
|
||||
00 8A // En_Xc
|
||||
00 01 // Bg_Hidan_Curtain
|
||||
00 2F // Bg_Spot00_Hanebasi
|
||||
00 30 // En_Mb
|
||||
00 31 // En_Bombf
|
||||
00 60 // En_Zl2
|
||||
00 2C // Bg_Hidan_Fslift
|
||||
00 35 // En_OE2
|
||||
00 36 // Bg_Ydan_Hasi
|
||||
00 36 // Bg_Ydan_Maruta
|
||||
00 37 // Boss_Ganondrof
|
||||
00 00 // unset
|
||||
00 38 // En_Am
|
||||
00 39 // En_Dekubaba
|
||||
00 01 // En_M_Fire1
|
||||
00 01 // En_M_Thunder
|
||||
00 2B // Bg_Ddan_Jd
|
||||
00 01 // Bg_Breakwall
|
||||
00 40 // En_Jj
|
||||
00 46 // En_Horse_Zelda
|
||||
00 2B // Bg_Ddan_Kd
|
||||
00 48 // Door_Warp1
|
||||
00 A4 // Obj_Syokudai
|
||||
00 BD // Item_B_Heart
|
||||
00 4A // En_Dekunuts
|
||||
00 4D // Bg_Menkuri_Kaiten
|
||||
00 4D // Bg_Menkuri_Eye
|
||||
00 56 // En_Vali
|
||||
00 59 // Bg_Mizu_Movebg
|
||||
00 59 // Bg_Mizu_Water
|
||||
00 14 // Arms_Hook
|
||||
00 5A // En_fHG
|
||||
00 01 // Bg_Mori_Hineri
|
||||
00 5D // En_Bb
|
||||
00 5E // Bg_Toki_Hikari
|
||||
00 5F // En_Yukabyun
|
||||
00 5E // Bg_Toki_Swd
|
||||
00 5A // En_Fhg_Fire
|
||||
00 01 // Bg_Mjin
|
||||
00 2C // Bg_Hidan_Kousi
|
||||
00 5E // Door_Toki
|
||||
00 2C // Bg_Hidan_Hamstep
|
||||
00 77 // En_Bird
|
||||
00 00 // unset
|
||||
00 00 // unset
|
||||
00 00 // unset
|
||||
00 00 // unset
|
||||
00 7C // En_Wood02
|
||||
00 00 // unset
|
||||
00 00 // unset
|
||||
00 00 // unset
|
||||
00 00 // unset
|
||||
00 81 // En_Lightbox
|
||||
00 82 // En_Pu_box
|
||||
00 00 // unset
|
||||
00 00 // unset
|
||||
00 85 // En_Trap
|
||||
00 01 // En_Arow_Trap
|
||||
00 86 // En_Vase
|
||||
00 00 // unset
|
||||
00 88 // En_Ta
|
||||
00 89 // En_Tk
|
||||
00 72 // Bg_Mori_Bigst
|
||||
00 72 // Bg_Mori_Elevator
|
||||
00 72 // Bg_Mori_Kaitenkabe
|
||||
00 72 // Bg_Mori_Rakkatenjo
|
||||
00 8B // En_Vm
|
||||
00 01 // Demo_Effect
|
||||
00 01 // Demo_Kankyo
|
||||
00 2C // Bg_Hidan_Fwbig
|
||||
00 0B // En_Floormas
|
||||
00 97 // En_Heishi1
|
||||
00 98 // En_Rd
|
||||
00 99 // En_Po_Sisters
|
||||
00 9A // Bg_Heavy_Block
|
||||
00 99 // Bg_Po_Event
|
||||
00 01 // Obj_Mure
|
||||
00 24 // En_Sw
|
||||
00 9C // Boss_Fd
|
||||
00 01 // Object_Kankyo
|
||||
00 9D // En_Du
|
||||
00 9E // En_Fd
|
||||
00 A0 // En_Horse_Link_Child
|
||||
00 02 // Door_Ana
|
||||
00 A1 // Bg_Spot02_Objects
|
||||
00 A2 // Bg_Haka
|
||||
00 01 // Magic_Wind
|
||||
00 01 // Magic_Fire
|
||||
00 00 // unset
|
||||
00 A3 // En_Ru1
|
||||
00 A5 // Boss_Fd2
|
||||
00 03 // En_Fd_Fire
|
||||
00 A6 // En_Dh
|
||||
00 A6 // En_Dha
|
||||
00 A7 // En_Rl
|
||||
00 01 // En_Encount1
|
||||
00 9D // Demo_Du
|
||||
00 87 // Demo_Im
|
||||
00 0E // Demo_Tre_Lgt
|
||||
00 9E // En_Fw
|
||||
00 9C // Bg_Vb_Sima
|
||||
00 9C // En_Vb_Ball
|
||||
00 01 // Bg_Haka_Megane
|
||||
00 69 // Bg_Haka_MeganeBG
|
||||
00 69 // Bg_Haka_Ship
|
||||
00 01 // Bg_Haka_Sgami
|
||||
00 00 // unset
|
||||
00 97 // En_Heishi2
|
||||
00 92 // En_Encount2
|
||||
00 92 // En_Fire_Rock
|
||||
00 AC // En_Brob
|
||||
00 AB // Mir_Ray
|
||||
00 AE // Bg_Spot09_Obj
|
||||
00 AF // Bg_Spot18_Obj
|
||||
00 8C // Boss_Va
|
||||
00 69 // Bg_Haka_Tubo
|
||||
00 69 // Bg_Haka_Trap
|
||||
00 8D // Bg_Haka_Huta
|
||||
00 01 // Bg_Haka_Zou
|
||||
00 B1 // Bg_Spot17_Funen
|
||||
00 01 // En_Syateki_Itm
|
||||
00 5B // En_Syateki_Man
|
||||
00 B2 // En_Tana
|
||||
00 B3 // En_Nb
|
||||
00 B4 // Boss_Mo
|
||||
00 B5 // En_Sb
|
||||
01 5F // En_Bigokuta
|
||||
00 39 // En_Karebaba
|
||||
00 96 // Bg_Bdan_Objects
|
||||
00 BC // Demo_Sa
|
||||
00 C9 // Demo_Go
|
||||
00 C0 // En_In
|
||||
00 C1 // En_Tr
|
||||
00 C2 // Bg_Spot16_Bombstone
|
||||
00 00 // unset
|
||||
00 2C // Bg_Hidan_Kowarerukabe
|
||||
00 02 // Bg_Bombwall
|
||||
00 74 // Bg_Spot08_Iceblock
|
||||
00 CA // En_Ru2
|
||||
00 CC // Obj_Dekujr
|
||||
00 59 // Bg_Mizu_Uzu
|
||||
00 6A // Bg_Spot06_Objects
|
||||
00 6B // Bg_Ice_Objects
|
||||
00 8D // Bg_Haka_Water
|
||||
00 00 // unset
|
||||
00 D0 // En_Ma2
|
||||
00 01 // En_Bom_Chu
|
||||
00 01 // En_Horse_Game_Check
|
||||
00 D3 // Boss_Tw
|
||||
00 D4 // En_Rr
|
||||
00 D5 // En_Ba
|
||||
00 D5 // En_Bx
|
||||
00 D6 // En_Anubice
|
||||
00 D6 // En_Anubice_Fire
|
||||
00 72 // Bg_Mori_Hashigo
|
||||
00 72 // Bg_Mori_Hashira4
|
||||
00 72 // Bg_Mori_Idomizu
|
||||
01 7A // Bg_Spot16_Doughnut
|
||||
00 96 // Bg_Bdan_Switch
|
||||
00 E0 // En_Ma1
|
||||
00 E1 // Boss_Ganon
|
||||
00 E2 // Boss_Sst
|
||||
00 00 // unset
|
||||
00 00 // unset
|
||||
00 E5 // En_Ny
|
||||
00 E6 // En_Fr
|
||||
00 15 // Item_Shield
|
||||
00 6B // Bg_Ice_Shelter
|
||||
00 01 // En_Ice_Hono
|
||||
00 DE // Item_Ocarina
|
||||
00 00 // unset
|
||||
00 00 // unset
|
||||
00 01 // Magic_Dark
|
||||
00 01 // Demo_6K
|
||||
00 01 // En_Anubice_Tag
|
||||
00 69 // Bg_Haka_Gate
|
||||
00 F0 // Bg_Spot15_Saku
|
||||
01 1F // Bg_Jya_Goroiwa
|
||||
00 F1 // Bg_Jya_Zurerukabe
|
||||
00 00 // unset
|
||||
00 F1 // Bg_Jya_Cobra
|
||||
00 F1 // Bg_Jya_Kanaami
|
||||
01 5B // Fishing
|
||||
00 03 // Obj_Oshihiki
|
||||
01 81 // Bg_Gate_Shutter
|
||||
00 01 // Eff_Dust
|
||||
00 F9 // Bg_Spot01_Fusya
|
||||
00 F9 // Bg_Spot01_Idohashira
|
||||
00 F9 // Bg_Spot01_Idomizu
|
||||
00 A4 // Bg_Po_Syokudai
|
||||
00 E1 // Bg_Ganon_Otyuka
|
||||
00 F0 // Bg_Spot15_Rrbox
|
||||
01 00 // Bg_Umajump
|
||||
00 00 // unset
|
||||
00 01 // Arrow_Fire
|
||||
00 01 // Arrow_Ice
|
||||
00 01 // Arrow_Light
|
||||
00 00 // unset
|
||||
00 00 // unset
|
||||
00 01 // Item_Etcetera
|
||||
00 03 // Obj_Kibako
|
||||
00 01 // Obj_Tsubo
|
||||
00 01 // En_Wonder_Item
|
||||
01 06 // En_Ik
|
||||
01 06 // Demo_Ik
|
||||
01 0A // En_Skj
|
||||
01 0A // En_Skjneedle
|
||||
00 01 // En_G_Switch
|
||||
00 5A // Demo_Ext
|
||||
00 01 // Demo_Shd
|
||||
01 68 // En_Dns
|
||||
00 01 // Elf_Msg
|
||||
00 03 // En_Honotrap
|
||||
00 03 // En_Tubo_Trap
|
||||
00 01 // Obj_Ice_Poly
|
||||
01 12 // Bg_Spot03_Taki
|
||||
01 13 // Bg_Spot07_Taki
|
||||
01 14 // En_Fz
|
||||
00 89 // En_Po_Relay
|
||||
00 6C // Bg_Relay_Objects
|
||||
00 FE // En_Diving_Game
|
||||
00 01 // En_Kusa
|
||||
01 1E // Obj_Bean
|
||||
01 63 // Obj_Bombiwa
|
||||
00 00 // unset
|
||||
00 00 // unset
|
||||
00 03 // Obj_Switch
|
||||
01 1B // Obj_Elevator
|
||||
01 1D // Obj_Lift
|
||||
01 1C // Obj_Hsblock
|
||||
00 01 // En_Okarina_Tag
|
||||
00 01 // En_Yabusame_Mark
|
||||
01 1F // En_Goroiwa
|
||||
00 01 // En_Ex_Ruppy
|
||||
01 21 // En_Toryo
|
||||
01 22 // En_Daiku
|
||||
00 00 // unset
|
||||
01 24 // En_Nwc
|
||||
01 25 // En_Blkobj
|
||||
00 01 // Item_Inbox
|
||||
01 16 // En_Ge1
|
||||
00 01 // Obj_Blockstop
|
||||
00 01 // En_Sda
|
||||
00 01 // En_Clear_Tag
|
||||
01 10 // En_Niw_Lady
|
||||
00 C9 // En_Gm
|
||||
01 27 // En_Ms
|
||||
01 28 // En_Hs
|
||||
01 29 // Bg_Ingate
|
||||
01 2F // En_Kanban
|
||||
00 97 // En_Heishi3
|
||||
00 13 // En_Syateki_Niw
|
||||
00 13 // En_Attack_Niw
|
||||
01 80 // Bg_Spot01_Idosoko
|
||||
00 BC // En_Sa
|
||||
00 01 // En_Wonder_Talk
|
||||
01 30 // Bg_Gjyo_Bridge
|
||||
01 0F // En_Ds
|
||||
01 32 // En_Mk
|
||||
01 60 // En_Bom_Bowl_Man
|
||||
00 01 // En_Bom_Bowl_Pit
|
||||
01 31 // En_Owl
|
||||
00 02 // En_Ishi
|
||||
00 02 // Obj_Hana
|
||||
01 2A // Obj_Lightswitch
|
||||
00 01 // Obj_Mure2
|
||||
00 C9 // En_Go
|
||||
01 33 // En_Fu
|
||||
00 00 // unset
|
||||
00 01 // En_Changer
|
||||
00 F1 // Bg_Jya_Megami
|
||||
00 F1 // Bg_Jya_Lift
|
||||
00 F1 // Bg_Jya_Bigmirror
|
||||
00 F1 // Bg_Jya_Bombchuiwa
|
||||
00 F1 // Bg_Jya_Amishutter
|
||||
00 F1 // Bg_Jya_Bombiwa
|
||||
00 AF // Bg_Spot18_Basket
|
||||
00 00 // unset
|
||||
00 E1 // En_Ganon_Organ
|
||||
01 3A // En_Siofuki
|
||||
01 3B // En_Stream
|
||||
00 00 // unset
|
||||
01 3C // En_Mm
|
||||
00 01 // En_Ko
|
||||
00 FF // En_Kz
|
||||
00 01 // En_Weather_Tag
|
||||
00 E2 // Bg_Sst_Floor
|
||||
00 EC // En_Ani
|
||||
00 01 // En_Ex_Item
|
||||
01 6C // Bg_Jya_Ironobj
|
||||
01 44 // En_Js
|
||||
00 01 // En_Jsjutan
|
||||
01 45 // En_Cs
|
||||
00 FB // En_Md
|
||||
00 01 // En_Hy
|
||||
00 01 // En_Ganon_Mant
|
||||
00 01 // En_Okarina_Effect
|
||||
01 4A // En_Mag
|
||||
01 4B // Door_Gerudo
|
||||
00 01 // Elf_Msg2
|
||||
01 4C // Demo_Gt
|
||||
00 6D // En_Po_Field
|
||||
01 4D // Efc_Erupc
|
||||
01 56 // Bg_Zg
|
||||
00 97 // En_Heishi4
|
||||
00 60 // En_Zl3
|
||||
01 53 // Boss_Ganon2
|
||||
01 54 // En_Kakasi
|
||||
01 55 // En_Takara_Man
|
||||
00 03 // Obj_Makeoshihiki
|
||||
00 01 // Oceff_Spot
|
||||
00 01 // End_Title
|
||||
00 00 // unset
|
||||
00 01 // En_Torch
|
||||
01 5A // Demo_Ec
|
||||
00 01 // Shot_Sun
|
||||
00 0A // En_Dy_Extra
|
||||
00 01 // En_Wonder_Talk2
|
||||
01 67 // En_Ge2
|
||||
00 01 // Obj_Roomtimer
|
||||
01 5E // En_Ssh
|
||||
00 01 // En_Sth
|
||||
00 01 // Oceff_Wipe
|
||||
00 01 // Oceff_Storm
|
||||
00 26 // En_Weiyer
|
||||
01 61 // Bg_Spot05_Soko
|
||||
00 F1 // Bg_Jya_1flift
|
||||
01 6C // Bg_Jya_Haheniron
|
||||
01 62 // Bg_Spot12_Gate
|
||||
01 62 // Bg_Spot12_Saku
|
||||
01 64 // En_Hintnuts
|
||||
00 01 // En_Nutsball
|
||||
01 66 // Bg_Spot00_Break
|
||||
01 68 // En_Shopnuts
|
||||
00 01 // En_It
|
||||
01 69 // En_GeldB
|
||||
00 01 // Oceff_Wipe2
|
||||
00 01 // Oceff_Wipe3
|
||||
01 6A // En_Niw_Girl
|
||||
01 6B // En_Dog
|
||||
00 24 // En_Si
|
||||
00 01 // Bg_Spot01_Objects2
|
||||
00 02 // Obj_Comb
|
||||
01 6F // Bg_Spot11_Bakudankabe
|
||||
01 70 // Obj_Kibako2
|
||||
00 01 // En_Dnt_Demo
|
||||
01 71 // En_Dnt_Jiji
|
||||
00 01 // En_Dnt_Nomal
|
||||
01 11 // En_Guest
|
||||
01 78 // Bg_Bom_Guard
|
||||
01 28 // En_Hs2
|
||||
01 79 // Demo_Kekkai
|
||||
00 74 // Bg_Spot08_Bakudankabe
|
||||
00 B1 // Bg_Spot17_Bakudankabe
|
||||
00 00 // unset
|
||||
00 01 // Obj_Mure3
|
||||
01 82 // En_Tg
|
||||
01 82 // En_Mu
|
||||
00 C9 // En_Go2
|
||||
01 83 // En_Wf
|
||||
01 84 // En_Skb
|
||||
01 85 // Demo_Gj
|
||||
01 86 // Demo_Geff
|
||||
01 79 // Bg_Gnd_Firemeiro
|
||||
01 79 // Bg_Gnd_Darkmeiro
|
||||
01 79 // Bg_Gnd_Soulmeiro
|
||||
01 79 // Bg_Gnd_Nisekabe
|
||||
01 79 // Bg_Gnd_Iceblock
|
||||
01 89 // En_Gb
|
||||
01 88 // En_Gs
|
||||
00 59 // Bg_Mizu_Bwall
|
||||
00 59 // Bg_Mizu_Shutter
|
||||
01 22 // En_Daiku_Kakariko
|
||||
01 78 // Bg_Bowl_Wall
|
||||
00 01 // En_Wall_Tubo
|
||||
00 6D // En_Po_Desert
|
||||
00 08 // En_Crow
|
||||
01 8E // Door_Killer
|
||||
01 6F // Bg_Spot11_Oasis
|
||||
00 AF // Bg_Spot18_Futa
|
||||
00 AF // Bg_Spot18_Shutter
|
||||
00 D0 // En_Ma3
|
||||
01 8B // En_Cow
|
||||
00 6B // Bg_Ice_Turara
|
||||
00 6B // Bg_Ice_Shutter
|
||||
01 54 // En_Kakasi2
|
||||
01 54 // En_Kakasi3
|
||||
00 01 // Oceff_Wipe4
|
||||
00 60 // En_Eg
|
||||
00 4D // Bg_Menkuri_Nisekabe
|
||||
00 FE // En_Zo
|
||||
00 01 // Obj_Makekinsuta
|
||||
01 69 // En_Ge3
|
||||
01 90 // Obj_Timeblock
|
||||
00 02 // Obj_Hamishi
|
||||
01 91 // En_Zl4
|
||||
01 3C // En_Mm2
|
||||
00 03 // Bg_Jya_Block
|
||||
01 90 // Obj_Warp2block
|
||||
}
|
||||
.align
|
|
@ -4,6 +4,7 @@
|
|||
[global_context]: 0x803E6B20
|
||||
[buttons_offset]: 0x14
|
||||
[actor_spawn_offset]: 0x1CA0
|
||||
[object_spawn_offset]: 0x17D88
|
||||
|
||||
[link_actor]: 0x803FFDB0
|
||||
[actor_x]: 0x24
|
||||
|
@ -17,3 +18,8 @@
|
|||
[upgrades_2_offset]: 0xBA
|
||||
|
||||
.include "spawn.asm"
|
||||
|
||||
load_object:
|
||||
// unimplemented for now, just return 0
|
||||
jr
|
||||
cl v0
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
[actor_spawn]: 0x80025110
|
||||
[object_spawn]: 0x800812F0
|
||||
[max_actor_no]: 0x1D6
|
||||
|
||||
[global_context]: 0x801C84A0
|
||||
[buttons_offset]: 0x14
|
||||
[actor_spawn_offset]: 0x1C24
|
||||
[object_spawn_offset]: 0x117A4
|
||||
|
||||
[link_actor]: 0x801DAA30
|
||||
[actor_x]: 0x24
|
||||
|
@ -17,3 +19,66 @@
|
|||
[upgrades_2_offset]: 0xA2
|
||||
|
||||
.include "spawn.asm"
|
||||
|
||||
actor_object_table:
|
||||
.include "actor object table oot.asm"
|
||||
|
||||
load_object:
|
||||
// args: a0 (actor number)
|
||||
// returns v0 (0 if ok, 1 on error)
|
||||
push 4, s0, ra
|
||||
li v0, 1
|
||||
la t0, actor_object_table
|
||||
sll t1, a0, 1
|
||||
addu t0, t0, t1
|
||||
lhu s0, 0(t0) // object number
|
||||
beq s0, r0, load_object_return
|
||||
nop
|
||||
bal is_object_loaded
|
||||
mov a0, s0
|
||||
bne v0, r0, load_object_return
|
||||
cl v0
|
||||
li t8, @global_context
|
||||
li t9, @object_spawn_offset
|
||||
add a0, t8, t9
|
||||
mov a1, s0
|
||||
jal @object_spawn
|
||||
nop
|
||||
load_object_return:
|
||||
jpop 4, s0, ra
|
||||
|
||||
/*
|
||||
we'll be dealing with structs like
|
||||
typedef struct {
|
||||
uint_ptr region_start; // ?
|
||||
uint_ptr region_end; // ?
|
||||
byte loaded_count; // only set in first item
|
||||
byte loaded_count_alt; // usually fewer than the above
|
||||
uint16 unknown;
|
||||
uint16 object_number;
|
||||
uint16 padding;
|
||||
uint_ptr start;
|
||||
uint32 size;
|
||||
uint32 unknowns[11]; // more pointers and sizes
|
||||
} loaded_object; // total size: 68 bytes
|
||||
*/
|
||||
|
||||
is_object_loaded:
|
||||
// args: a0 (object number)
|
||||
// returns v0 (1 if loaded, 0 if not)
|
||||
push 4
|
||||
li t8, @global_context
|
||||
li t9, @object_spawn_offset
|
||||
add t0, t8, t9 // current item
|
||||
lb t1, 8(t0) // remaining items
|
||||
li v0, 1
|
||||
is_object_loaded_loop:
|
||||
lh t2, 12(t0) // item's object number
|
||||
beq a0, t2, is_object_loaded_return
|
||||
subi t1, t1, 1 // TODO: double check there's no off-by-one error
|
||||
addi t0, t0, 68
|
||||
bne t1, r0, is_object_loaded_loop
|
||||
nop
|
||||
cl v0
|
||||
is_object_loaded_return:
|
||||
jpop 4
|
||||
|
|
|
@ -74,7 +74,10 @@ return:
|
|||
|
||||
simple_spawn: // args: a0 (actor to spawn)
|
||||
push 4, 9, ra
|
||||
mov a2, a0
|
||||
jal load_object
|
||||
sw a0, 56(sp) // keep me updated!
|
||||
bne v0, r0, simple_spawn_return
|
||||
lw a2, 56(sp) // keep me updated!
|
||||
li a1, @global_context
|
||||
addi a0, a1, @actor_spawn_offset
|
||||
li t0, @link_actor
|
||||
|
@ -103,6 +106,7 @@ simple_spawn: // args: a0 (actor to spawn)
|
|||
sw t9, 0x30(sp) // unknown
|
||||
jal @actor_spawn
|
||||
nop
|
||||
simple_spawn_return:
|
||||
jpop 4, 9, ra
|
||||
|
||||
hold_delay:
|
||||
|
|
Loading…
Reference in a new issue