Various dompin (#672)

* partner funcs

* land.c

* filemenu_update

* 190A10.c

* hammer.c dun

* prog rock

* various funcs

* moving

* update_item_entities

* filemenu_yesno_handle_input

* cleanin

* sweeping

* PR comments
This commit is contained in:
Ethan Roseman 2022-03-30 08:07:13 -04:00 committed by GitHub
parent 9e0aab9e6d
commit d0a7655779
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
62 changed files with 2032 additions and 3287 deletions

View File

@ -44,7 +44,10 @@
"**/.git": true,
"**/.splat_cache": true,
".ninja*": true,
"ver/current": true
"ver/current": true,
"expected": true,
"**/*.i": true,
"docs/doxygen": true,
},
"C_Cpp.default.cStandard": "c89",
}

492
diff.py
View File

@ -109,6 +109,15 @@ if __name__ == "__main__":
help="""Diff .o files rather than a whole binary. This makes it possible to
see symbol names. (Recommended)""",
)
parser.add_argument(
"-f",
"--objfile",
dest="objfile",
type=str,
help="""File path for an object file being diffed. When used
the map file isn't searched for the function given. Useful for dynamically
linked libraries.""",
)
parser.add_argument(
"-e",
"--elf",
@ -132,6 +141,14 @@ if __name__ == "__main__":
help="""Tweak --source handling to make it work with binutils < 2.33.
Implies --source.""",
)
parser.add_argument(
"-j",
"--section",
dest="diff_section",
default=".text",
metavar="SECTION",
help="Diff restricted to a given output section.",
)
parser.add_argument(
"-L",
"--line-numbers",
@ -271,7 +288,6 @@ if __name__ == "__main__":
metavar="LINES",
dest="max_lines",
type=int,
default=1024,
help="The maximum length of the diff, in lines.",
)
parser.add_argument(
@ -356,6 +372,7 @@ except ModuleNotFoundError as e:
class ProjectSettings:
arch_str: str
objdump_executable: str
objdump_flags: List[str]
build_command: List[str]
map_format: str
mw_build_dir: str
@ -365,6 +382,7 @@ class ProjectSettings:
source_directories: Optional[List[str]]
source_extensions: List[str]
show_line_numbers_default: bool
disassemble_all: bool
@dataclass
@ -379,11 +397,14 @@ class Config:
# Build/objdump options
diff_obj: bool
objfile: Optional[str]
make: bool
source_old_binutils: bool
diff_section: str
inlines: bool
max_function_size_lines: int
max_function_size_bytes: int
max_function_lines_overriden: bool
# Display options
formatter: "Formatter"
@ -422,11 +443,14 @@ def create_project_settings(settings: Dict[str, Any]) -> ProjectSettings:
"source_extensions", [".c", ".h", ".cpp", ".hpp", ".s"]
),
objdump_executable=get_objdump_executable(settings.get("objdump_executable")),
objdump_flags=settings.get("objdump_flags", []),
map_format=settings.get("map_format", "gnu"),
mw_build_dir=settings.get("mw_build_dir", "build/"),
show_line_numbers_default=settings.get("show_line_numbers_default", True),
disassemble_all=settings.get("disassemble_all", False),
)
DEFAULT_MAX_LINES = 1024
def create_config(args: argparse.Namespace, project: ProjectSettings) -> Config:
arch = get_arch(project.arch_str)
@ -457,15 +481,20 @@ def create_config(args: argparse.Namespace, project: ProjectSettings) -> Config:
if show_line_numbers is None:
show_line_numbers = project.show_line_numbers_default
max_lines = args.max_lines or DEFAULT_MAX_LINES
return Config(
arch=arch,
# Build/objdump options
diff_obj=args.diff_obj,
objfile=args.objfile,
make=args.make,
source_old_binutils=args.source_old_binutils,
diff_section=args.diff_section,
inlines=args.inlines,
max_function_size_lines=args.max_lines,
max_function_size_bytes=args.max_lines * 4,
max_function_size_lines=max_lines,
max_function_size_bytes=max_lines * 4,
max_function_lines_overriden = args.max_lines is not None,
# Display options
formatter=formatter,
threeway=args.threeway,
@ -488,7 +517,11 @@ def get_objdump_executable(objdump_executable: Optional[str]) -> str:
if objdump_executable is not None:
return objdump_executable
objdump_candidates = ["mips-linux-gnu-objdump", "mips64-elf-objdump", "mips-elf-objdump"]
objdump_candidates = [
"mips-linux-gnu-objdump",
"mips64-elf-objdump",
"mips-elf-objdump",
]
for objdump_cand in objdump_candidates:
try:
subprocess.check_call(
@ -514,7 +547,7 @@ def get_arch(arch_str: str) -> "ArchSettings":
raise ValueError(f"Unknown architecture: {arch_str}")
BUFFER_CMD: List[str] = ["tail", "-c", str(10 ** 9)]
BUFFER_CMD: List[str] = ["tail", "-c", str(10**9)]
# -S truncates long lines instead of wrapping them
# -R interprets color escape sequences
@ -636,6 +669,7 @@ class Text:
class TableMetadata:
headers: Tuple[Text, ...]
current_score: int
max_score: int
previous_score: Optional[int]
@ -804,12 +838,7 @@ class JsonFormatter(Formatter):
return {"text": s, "format": f.name.lower()}
elif isinstance(f, RotationFormat):
attrs = asdict(f)
attrs.update(
{
"text": s,
"format": "rotation",
}
)
attrs.update({"text": s, "format": "rotation"})
return attrs
else:
static_assert_unreachable(f)
@ -828,6 +857,7 @@ class JsonFormatter(Formatter):
for h, name in zip(meta.headers, ("base", "current", "previous"))
}
output["current_score"] = meta.current_score
output["max_score"] = meta.max_score
if meta.previous_score is not None:
output["previous_score"] = meta.previous_score
output_rows: List[Dict[str, Any]] = []
@ -956,7 +986,7 @@ def restrict_to_function(dump: str, fn_name: str) -> str:
return ""
def serialize_data_references(references: List[Tuple[int, int, str]]) -> str:
def serialize_rodata_references(references: List[Tuple[int, int, str]]) -> str:
return "".join(
f"DATAREF {text_offset} {from_offset} {from_section}\n"
for (text_offset, from_offset, from_section) in references
@ -985,7 +1015,11 @@ def run_objdump(cmd: ObjdumpCommand, config: Config, project: ProjectSettings) -
flags, target, restrict = cmd
try:
out = subprocess.run(
[project.objdump_executable] + config.arch.arch_flags + flags + [target],
[project.objdump_executable]
+ config.arch.arch_flags
+ project.objdump_flags
+ flags
+ [target],
check=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
@ -1003,11 +1037,11 @@ def run_objdump(cmd: ObjdumpCommand, config: Config, project: ProjectSettings) -
with open(target, "rb") as f:
obj_data = f.read()
return preprocess_objdump_out(restrict, obj_data, out)
return preprocess_objdump_out(restrict, obj_data, out, config)
def preprocess_objdump_out(
restrict: Optional[str], obj_data: Optional[bytes], objdump_out: str
restrict: Optional[str], obj_data: Optional[bytes], objdump_out: str, config: Config
) -> str:
"""
Preprocess the output of objdump into a format that `process()` expects.
@ -1027,13 +1061,16 @@ def preprocess_objdump_out(
out = out.rstrip("\n")
if obj_data:
out = serialize_data_references(parse_elf_data_references(obj_data)) + out
out = (
serialize_rodata_references(parse_elf_rodata_references(obj_data, config))
+ out
)
return out
def search_map_file(
fn_name: str, project: ProjectSettings
fn_name: str, project: ProjectSettings, config: Config
) -> Tuple[Optional[str], Optional[int]]:
if not project.mapfile:
fail(f"No map file configured; cannot find function {fn_name}.")
@ -1053,7 +1090,7 @@ def search_map_file(
cands = []
last_line = ""
for line in lines:
if line.startswith(" .text"):
if line.startswith(" " + config.diff_section):
cur_objfile = line.split()[3]
if "load address" in line:
tokens = last_line.split() + line.split()
@ -1078,9 +1115,12 @@ def search_map_file(
re.compile(
# ram elf rom
r" \S+ \S+ (\S+) (\S+) . "
+ fn_name
# object name
+ r"(?: \(entry of \.(?:init|text)\))? \t(\S+)"
+ re.escape(fn_name)
+ r"(?: \(entry of "
+ re.escape(config.diff_section)
+ r"\))? \t"
# object name
+ "(\S+)"
),
contents,
)
@ -1115,7 +1155,9 @@ def search_map_file(
return None, None
def parse_elf_data_references(data: bytes) -> List[Tuple[int, int, str]]:
def parse_elf_rodata_references(
data: bytes, config: Config
) -> List[Tuple[int, int, str]]:
e_ident = data[:16]
if e_ident[:4] != b"\x7FELF":
return []
@ -1128,7 +1170,6 @@ def parse_elf_data_references(data: bytes) -> List[Tuple[int, int, str]]:
is_little_endian = e_ident[5] == 1
str_end = "<" if is_little_endian else ">"
str_off = "I" if is_32bit else "Q"
sym_size = {"B": 1, "H": 2, "I": 4, "Q": 8}
def read(spec: str, offset: int) -> Tuple[int, ...]:
spec = spec.replace("P", str_off)
@ -1180,17 +1221,25 @@ def parse_elf_data_references(data: bytes) -> List[Tuple[int, int, str]]:
assert len(symtab_sections) == 1
symtab = sections[symtab_sections[0]]
text_sections = [i for i in range(e_shnum) if sec_names[i] == b".text"]
assert len(text_sections) == 1
section_name = config.diff_section.encode("utf-8")
text_sections = [
i
for i in range(e_shnum)
if sec_names[i] == section_name and sections[i].sh_size != 0
]
if len(text_sections) != 1:
return []
text_section = text_sections[0]
ret: List[Tuple[int, int, str]] = []
for s in sections:
if s.sh_type == SHT_REL or s.sh_type == SHT_RELA:
if s.sh_info == text_section:
# Skip .text -> .text references
# Skip section_name -> section_name references
continue
sec_name = sec_names[s.sh_info].decode("latin1")
if sec_name != ".rodata":
continue
sec_base = sections[s.sh_info].sh_offset
for i in range(0, s.sh_size, s.sh_entsize):
if s.sh_type == SHT_REL:
@ -1247,11 +1296,16 @@ def dump_elf(
f"--stop-address={end_addr}",
]
if project.disassemble_all:
disassemble_flag = "-D"
else:
disassemble_flag = "-d"
flags2 = [
f"--disassemble={diff_elf_symbol}",
]
objdump_flags = ["-drz", "-j", ".text"]
objdump_flags = [disassemble_flag, "-rz", "-j", config.diff_section]
return (
project.myimg,
(objdump_flags + flags1, project.baseimg, None),
@ -1273,7 +1327,10 @@ def dump_objfile(
if start.startswith("0"):
fail("numerical start address not supported with -o; pass a function name")
objfile, _ = search_map_file(start, project)
objfile = config.objfile
if not objfile:
objfile, _ = search_map_file(start, project, config)
if not objfile:
fail("Not able to find .o file for function.")
@ -1283,11 +1340,16 @@ def dump_objfile(
if not os.path.isfile(objfile):
fail(f"Not able to find .o file for function: {objfile} is not a file.")
refobjfile = "ver/current/expected/" + objfile
refobjfile = "ver/us/expected/" + objfile
if not os.path.isfile(refobjfile):
fail(f'Please ensure an OK .o file exists at "{refobjfile}".')
objdump_flags = ["-drz", "-j", ".text"]
if project.disassemble_all:
disassemble_flag = "-D"
else:
disassemble_flag = "-d"
objdump_flags = [disassemble_flag, "-rz", "-j", config.diff_section]
return (
objfile,
(objdump_flags, refobjfile, start),
@ -1304,7 +1366,7 @@ def dump_binary(
run_make(project.myimg, project)
start_addr = maybe_eval_int(start)
if start_addr is None:
_, start_addr = search_map_file(start, project)
_, start_addr = search_map_file(start, project, config)
if start_addr is None:
fail("Not able to find function in map file.")
if end is not None:
@ -1324,10 +1386,18 @@ def dump_binary(
)
class DifferenceNormalizer:
# Example: "ldr r4, [pc, #56] ; (4c <AddCoins+0x4c>)"
ARM32_LOAD_POOL_PATTERN = r"(ldr\s+r([0-9]|1[0-3]),\s+\[pc,.*;\s*)(\([a-fA-F0-9]+.*\))"
# The base class is a no-op.
class AsmProcessor:
def __init__(self, config: Config) -> None:
self.config = config
def process_reloc(self, row: str, prev: str) -> str:
return prev
def normalize(self, mnemonic: str, row: str) -> str:
"""This should be called exactly once for each line."""
arch = self.config.arch
@ -1339,8 +1409,129 @@ class DifferenceNormalizer:
def _normalize_arch_specific(self, mnemonic: str, row: str) -> str:
return row
def post_process(self, lines: List["Line"]) -> None:
return
class DifferenceNormalizerAArch64(DifferenceNormalizer):
class AsmProcessorMIPS(AsmProcessor):
def process_reloc(self, row: str, prev: str) -> str:
arch = self.config.arch
if "R_MIPS_NONE" in row or "R_MIPS_JALR" in row:
# GNU as emits no-op relocations immediately after real ones when
# assembling with -mabi=64. Return without trying to parse 'imm' as an
# integer.
return prev
before, imm, after = parse_relocated_line(prev)
repl = row.split()[-1]
if imm != "0":
# MIPS uses relocations with addends embedded in the code as immediates.
# If there is an immediate, show it as part of the relocation. Ideally
# we'd show this addend in both %lo/%hi, but annoyingly objdump's output
# doesn't include enough information to pair up %lo's and %hi's...
# TODO: handle unambiguous cases where all addends for a symbol are the
# same, or show "+???".
mnemonic = prev.split()[0]
if mnemonic in arch.instructions_with_address_immediates:
imm = hex(int(imm, 16))
repl += ("" if imm.startswith("-") else "+") + imm
if "R_MIPS_LO16" in row:
repl = f"%lo({repl})"
elif "R_MIPS_HI16" in row:
# Ideally we'd pair up R_MIPS_LO16 and R_MIPS_HI16 to generate a
# correct addend for each, but objdump doesn't give us the order of
# the relocations, so we can't find the right LO16. :(
repl = f"%hi({repl})"
elif "R_MIPS_26" in row:
# Function calls
pass
elif "R_MIPS_PC16" in row:
# Branch to glabel. This gives confusing output, but there's not much
# we can do here.
pass
elif "R_MIPS_GPREL16" in row:
repl = f"%gp_rel({repl})"
elif "R_MIPS_GOT16" in row:
repl = f"%got({repl})"
elif "R_MIPS_CALL16" in row:
repl = f"%call16({repl})"
else:
assert False, f"unknown relocation type '{row}' for line '{prev}'"
return before + repl + after
class AsmProcessorPPC(AsmProcessor):
def process_reloc(self, row: str, prev: str) -> str:
arch = self.config.arch
assert any(
r in row for r in ["R_PPC_REL24", "R_PPC_ADDR16", "R_PPC_EMB_SDA21"]
), f"unknown relocation type '{row}' for line '{prev}'"
before, imm, after = parse_relocated_line(prev)
repl = row.split()[-1]
if "R_PPC_REL24" in row:
# function calls
pass
elif "R_PPC_ADDR16_HI" in row:
# absolute hi of addr
repl = f"{repl}@h"
elif "R_PPC_ADDR16_HA" in row:
# adjusted hi of addr
repl = f"{repl}@ha"
elif "R_PPC_ADDR16_LO" in row:
# lo of addr
repl = f"{repl}@l"
elif "R_PPC_ADDR16" in row:
# 16-bit absolute addr
if "+0x7" in repl:
# remove the very large addends as they are an artifact of (label-_SDA(2)_BASE_)
# computations and are unimportant in a diff setting.
if int(repl.split("+")[1], 16) > 0x70000000:
repl = repl.split("+")[0]
elif "R_PPC_EMB_SDA21" in row:
# small data area
pass
return before + repl + after
class AsmProcessorARM32(AsmProcessor):
def process_reloc(self, row: str, prev: str) -> str:
arch = self.config.arch
before, imm, after = parse_relocated_line(prev)
repl = row.split()[-1]
return before + repl + after
def _normalize_arch_specific(self, mnemonic: str, row: str) -> str:
if self.config.ignore_addr_diffs:
row = self._normalize_bl(mnemonic, row)
row = self._normalize_data_pool(row)
return row
def _normalize_bl(self, mnemonic: str, row: str) -> str:
if mnemonic != "bl":
return row
row, _ = split_off_address(row)
return row + "<ignore>"
def _normalize_data_pool(self, row: str) -> str:
pool_match = re.search(ARM32_LOAD_POOL_PATTERN, row)
return pool_match.group(1) if pool_match else row
def post_process(self, lines: List["Line"]) -> None:
lines_by_line_number = {}
for line in lines:
lines_by_line_number[line.line_num] = line
for line in lines:
if line.data_pool_addr is None:
continue
# Add data symbol and its address to the line.
line_original = lines_by_line_number[line.data_pool_addr].original
value = line_original.split()[1]
addr = "{:x}".format(line.data_pool_addr)
line.original = line.normalized_original + f"={value} ({addr})"
class AsmProcessorAArch64(AsmProcessor):
def __init__(self, config: Config) -> None:
super().__init__(config)
self._adrp_pair_registers: Set[str] = set()
@ -1390,23 +1581,6 @@ class DifferenceNormalizerAArch64(DifferenceNormalizer):
return row
class DifferenceNormalizerARM32(DifferenceNormalizer):
def __init__(self, config: Config) -> None:
super().__init__(config)
def _normalize_arch_specific(self, mnemonic: str, row: str) -> str:
if self.config.ignore_addr_diffs:
row = self._normalize_bl(mnemonic, row)
return row
def _normalize_bl(self, mnemonic: str, row: str) -> str:
if mnemonic != "bl":
return row
row, _ = split_off_address(row)
return row + "<ignore>"
@dataclass
class ArchSettings:
name: str
@ -1416,13 +1590,15 @@ class ArchSettings:
re_sprel: Pattern[str]
re_large_imm: Pattern[str]
re_imm: Pattern[str]
re_reloc: Pattern[str]
branch_instructions: Set[str]
instructions_with_address_immediates: Set[str]
forbidden: Set[str] = field(default_factory=lambda: set(string.ascii_letters + "_"))
arch_flags: List[str] = field(default_factory=list)
branch_likely_instructions: Set[str] = field(default_factory=set)
difference_normalizer: Type[DifferenceNormalizer] = DifferenceNormalizer
proc: Type[AsmProcessor] = AsmProcessor
big_endian: Optional[bool] = True
delay_slot_instructions: Set[str] = field(default_factory=set)
MIPS_BRANCH_LIKELY_INSTRUCTIONS = {
@ -1481,7 +1657,6 @@ ARM32_BRANCH_INSTRUCTIONS = {
}
AARCH64_BRANCH_INSTRUCTIONS = {
"bl",
"b",
"b.eq",
"b.ne",
@ -1533,17 +1708,23 @@ PPC_BRANCH_INSTRUCTIONS = {
MIPS_SETTINGS = ArchSettings(
name="mips",
re_int=re.compile(r"[0-9]+"),
re_comment=re.compile(r"<.*?>"),
re_reg=re.compile(
r"\$?\b(a[0-3]|t[0-9]|s[0-8]|at|v[01]|f[12]?[0-9]|f3[01]|k[01]|fp|ra|zero)\b"
),
re_comment=re.compile(r"<.*>"),
# Includes:
# - General purpose registers v0..1, a0..7, t0..9, s0..8, zero, at, fp, k0..1/kt0..1
# - Float registers f0..31, or fv0..1, fa0..7, ft0..15, fs0..8 plus odd complements
# (actually used number depends on ABI)
# sp, gp should not be in this list
re_reg=re.compile(r"\$?\b([astv][0-9]|at|f[astv]?[0-9]+f?|kt?[01]|fp|ra|zero)\b"),
re_sprel=re.compile(r"(?<=,)([0-9]+|0x[0-9a-f]+)\(sp\)"),
re_large_imm=re.compile(r"-?[1-9][0-9]{2,}|-?0x[0-9a-f]{3,}"),
re_imm=re.compile(r"(\b|-)([0-9]+|0x[0-9a-fA-F]+)\b(?!\(sp)|%(lo|hi)\([^)]*\)"),
re_reloc=re.compile(r"R_MIPS_"),
arch_flags=["-m", "mips:4300"],
branch_likely_instructions=MIPS_BRANCH_LIKELY_INSTRUCTIONS,
branch_instructions=MIPS_BRANCH_INSTRUCTIONS,
instructions_with_address_immediates=MIPS_BRANCH_INSTRUCTIONS.union({"jal", "j"}),
delay_slot_instructions=MIPS_BRANCH_INSTRUCTIONS.union({"j", "jal", "jr", "jalr"}),
proc=AsmProcessorMIPS,
)
MIPSEL_SETTINGS = replace(MIPS_SETTINGS, name="mipsel", big_endian=False)
@ -1551,7 +1732,7 @@ MIPSEL_SETTINGS = replace(MIPS_SETTINGS, name="mipsel", big_endian=False)
ARM32_SETTINGS = ArchSettings(
name="arm32",
re_int=re.compile(r"[0-9]+"),
re_comment=re.compile(r"(<.*?>|//.*$)"),
re_comment=re.compile(r"(<.*>|//.*$)"),
# Includes:
# - General purpose registers: r0..13
# - Frame pointer registers: lr (r14), pc (r15)
@ -1563,42 +1744,54 @@ ARM32_SETTINGS = ArchSettings(
re_sprel=re.compile(r"sp, #-?(0x[0-9a-fA-F]+|[0-9]+)\b"),
re_large_imm=re.compile(r"-?[1-9][0-9]{2,}|-?0x[0-9a-f]{3,}"),
re_imm=re.compile(r"(?<!sp, )#-?(0x[0-9a-fA-F]+|[0-9]+)\b"),
re_reloc=re.compile(r"R_ARM_"),
branch_instructions=ARM32_BRANCH_INSTRUCTIONS,
instructions_with_address_immediates=ARM32_BRANCH_INSTRUCTIONS.union({"adr"}),
difference_normalizer=DifferenceNormalizerARM32,
proc=AsmProcessorARM32,
)
ARMEL_SETTINGS = replace(ARM32_SETTINGS, name="armel", big_endian=False)
AARCH64_SETTINGS = ArchSettings(
name="aarch64",
re_int=re.compile(r"[0-9]+"),
re_comment=re.compile(r"(<.*?>|//.*$)"),
# GPRs and FP registers: X0-X30, W0-W30, [DSHQ]0..31
re_comment=re.compile(r"(<.*>|//.*$)"),
# GPRs and FP registers: X0-X30, W0-W30, [BHSDVQ]0..31
# (FP registers may be followed by data width and number of elements, e.g. V0.4S)
# The zero registers and SP should not be in this list.
re_reg=re.compile(r"\$?\b([dshq][12]?[0-9]|[dshq]3[01]|[xw][12]?[0-9]|[xw]30)\b"),
re_reg=re.compile(
r"\$?\b([bhsdvq]([12]?[0-9]|3[01])(\.\d\d?[bhsdvq])?|[xw][12]?[0-9]|[xw]30)\b"
),
re_sprel=re.compile(r"sp, #-?(0x[0-9a-fA-F]+|[0-9]+)\b"),
re_large_imm=re.compile(r"-?[1-9][0-9]{2,}|-?0x[0-9a-f]{3,}"),
re_imm=re.compile(r"(?<!sp, )#-?(0x[0-9a-fA-F]+|[0-9]+)\b"),
re_reloc=re.compile(r"R_AARCH64_"),
branch_instructions=AARCH64_BRANCH_INSTRUCTIONS,
instructions_with_address_immediates=AARCH64_BRANCH_INSTRUCTIONS.union({"adrp"}),
difference_normalizer=DifferenceNormalizerAArch64,
instructions_with_address_immediates=AARCH64_BRANCH_INSTRUCTIONS.union(
{"bl", "adrp"}
),
proc=AsmProcessorAArch64,
)
PPC_SETTINGS = ArchSettings(
name="ppc",
re_int=re.compile(r"[0-9]+"),
re_comment=re.compile(r"(<.*?>|//.*$)"),
re_comment=re.compile(r"(<.*>|//.*$)"),
re_reg=re.compile(r"\$?\b([rf][0-9]+)\b"),
re_sprel=re.compile(r"(?<=,)(-?[0-9]+|-?0x[0-9a-f]+)\(r1\)"),
re_large_imm=re.compile(r"-?[1-9][0-9]{2,}|-?0x[0-9a-f]{3,}"),
re_imm=re.compile(r"(\b|-)([0-9]+|0x[0-9a-fA-F]+)\b(?!\(r1)|[^@]*@(ha|h|lo)"),
re_reloc=re.compile(r"R_PPC_"),
branch_instructions=PPC_BRANCH_INSTRUCTIONS,
instructions_with_address_immediates=PPC_BRANCH_INSTRUCTIONS.union({"bl"}),
proc=AsmProcessorPPC,
)
ARCH_SETTINGS = [
MIPS_SETTINGS,
MIPSEL_SETTINGS,
ARM32_SETTINGS,
ARMEL_SETTINGS,
AARCH64_SETTINGS,
PPC_SETTINGS,
]
@ -1618,6 +1811,7 @@ def hexify_int(row: str, pat: Match[str], arch: ArchSettings) -> str:
def parse_relocated_line(line: str) -> Tuple[str, str, str]:
# Pick out the last argument
for c in ",\t ":
if c in line:
ind2 = line.rindex(c)
@ -1626,6 +1820,7 @@ def parse_relocated_line(line: str) -> Tuple[str, str, str]:
raise Exception(f"failed to parse relocated line: {line}")
before = line[: ind2 + 1]
after = line[ind2 + 1 :]
# Move an optional ($reg) part of it to 'after'
ind2 = after.find("(")
if ind2 == -1:
imm, after = after, ""
@ -1636,79 +1831,6 @@ def parse_relocated_line(line: str) -> Tuple[str, str, str]:
return before, imm, after
def process_mips_reloc(row: str, prev: str, arch: ArchSettings) -> str:
before, imm, after = parse_relocated_line(prev)
repl = row.split()[-1]
if imm != "0":
# MIPS uses relocations with addends embedded in the code as immediates.
# If there is an immediate, show it as part of the relocation. Ideally
# we'd show this addend in both %lo/%hi, but annoyingly objdump's output
# doesn't include enough information to pair up %lo's and %hi's...
# TODO: handle unambiguous cases where all addends for a symbol are the
# same, or show "+???".
mnemonic = prev.split()[0]
if (
mnemonic in arch.instructions_with_address_immediates
and not imm.startswith("0x")
):
imm = "0x" + imm
repl += "+" + imm if int(imm, 0) > 0 else imm
if "R_MIPS_LO16" in row:
repl = f"%lo({repl})"
elif "R_MIPS_HI16" in row:
# Ideally we'd pair up R_MIPS_LO16 and R_MIPS_HI16 to generate a
# correct addend for each, but objdump doesn't give us the order of
# the relocations, so we can't find the right LO16. :(
repl = f"%hi({repl})"
elif "R_MIPS_26" in row:
# Function calls
pass
elif "R_MIPS_PC16" in row:
# Branch to glabel. This gives confusing output, but there's not much
# we can do here.
pass
else:
assert False, f"unknown relocation type '{row}' for line '{prev}'"
return before + repl + after
def process_ppc_reloc(row: str, prev: str) -> str:
assert any(
r in row for r in ["R_PPC_REL24", "R_PPC_ADDR16", "R_PPC_EMB_SDA21"]
), f"unknown relocation type '{row}' for line '{prev}'"
before, imm, after = parse_relocated_line(prev)
repl = row.split()[-1]
if "R_PPC_REL24" in row:
# function calls
pass
elif "R_PPC_ADDR16_HI" in row:
# absolute hi of addr
repl = f"{repl}@h"
elif "R_PPC_ADDR16_HA" in row:
# adjusted hi of addr
repl = f"{repl}@ha"
elif "R_PPC_ADDR16_LO" in row:
# lo of addr
repl = f"{repl}@l"
elif "R_PPC_ADDR16" in row:
# 16-bit absolute addr
if "+0x7" in repl:
# remove the very large addends as they are an artifact of (label-_SDA(2)_BASE_)
# computations and are unimportant in a diff setting.
if int(repl.split("+")[1], 16) > 0x70000000:
repl = repl.split("+")[0]
elif "R_PPC_EMB_SDA21" in row:
# small data area
pass
return before + repl + after
def process_arm_reloc(row: str, prev: str, arch: ArchSettings) -> str:
before, imm, after = parse_relocated_line(prev)
repl = row.split()[-1]
return before + repl + after
def pad_mnemonic(line: str) -> str:
if "\t" not in line:
return line
@ -1725,6 +1847,7 @@ class Line:
scorable_line: str
line_num: Optional[int] = None
branch_target: Optional[int] = None
data_pool_addr: Optional[int] = None
source_filename: Optional[str] = None
source_line_num: Optional[int] = None
source_lines: List[str] = field(default_factory=list)
@ -1733,7 +1856,7 @@ class Line:
def process(dump: str, config: Config) -> List[Line]:
arch = config.arch
normalizer = arch.difference_normalizer(config)
processor = arch.proc(config)
skip_next = False
source_lines = []
source_filename = None
@ -1775,7 +1898,7 @@ def process(dump: str, config: Config) -> List[Line]:
)
break
if not re.match(r"^ +[0-9a-f]+:\t", row):
if not re.match(r"^\s+[0-9a-f]+:\s+", row):
# This regex is conservative, and assumes the file path does not contain "weird"
# characters like colons, tabs, or angle brackets.
if re.match(
@ -1786,13 +1909,22 @@ def process(dump: str, config: Config) -> List[Line]:
source_lines.append(row)
continue
# If the instructions loads a data pool symbol, extract the address of
# the symbol.
data_pool_addr = None
pool_match = re.search(ARM32_LOAD_POOL_PATTERN, row)
if pool_match:
offset = pool_match.group(3).split(" ")[0][1:]
data_pool_addr = int(offset, 16)
m_comment = re.search(arch.re_comment, row)
comment = m_comment[0] if m_comment else None
row = re.sub(arch.re_comment, "", row)
line_num_str = row.split(":")[0]
row = row.rstrip()
tabs = row.split("\t")
row = "\t".join(tabs[2:])
line_num = eval_line_num(tabs[0].strip())
line_num = eval_line_num(line_num_str.strip())
if line_num in data_refs:
refs = data_refs[line_num]
@ -1817,8 +1949,15 @@ def process(dump: str, config: Config) -> List[Line]:
row_parts = [part.lstrip() for part in row.split(" ", 1)]
mnemonic = row_parts[0].strip()
if mnemonic not in arch.instructions_with_address_immediates:
row = re.sub(arch.re_int, lambda m: hexify_int(row, m, arch), row)
addr = ""
if mnemonic in arch.instructions_with_address_immediates:
row, addr = split_off_address(row)
# objdump prefixes addresses with 0x/-0x if they don't resolve to some
# symbol + offset. Strip that.
addr = addr.replace("0x", "")
row = re.sub(arch.re_int, lambda m: hexify_int(row, m, arch), row)
row += addr
# Let 'original' be 'row' with relocations applied, while we continue
# transforming 'row' into a coarser version that ignores registers and
@ -1827,27 +1966,17 @@ def process(dump: str, config: Config) -> List[Line]:
while i < len(lines):
reloc_row = lines[i]
if "R_AARCH64_" in reloc_row:
# TODO: handle relocation
pass
elif "R_MIPS_" in reloc_row:
original = process_mips_reloc(reloc_row, original, arch)
elif "R_PPC_" in reloc_row:
original = process_ppc_reloc(reloc_row, original)
elif "R_ARM_" in reloc_row:
original = process_arm_reloc(reloc_row, original, arch)
if re.search(arch.re_reloc, reloc_row):
original = processor.process_reloc(reloc_row, original)
else:
break
i += 1
normalized_original = normalizer.normalize(mnemonic, original)
normalized_original = processor.normalize(mnemonic, original)
scorable_line = normalized_original
if not config.score_stack_differences:
scorable_line = re.sub(arch.re_sprel, "addr(sp)", scorable_line)
if mnemonic in arch.branch_instructions:
# Replace the final argument with "<target>"
scorable_line = re.sub(r"[^, \t]+$", "<target>", scorable_line)
if skip_next:
skip_next = False
@ -1870,8 +1999,6 @@ def process(dump: str, config: Config) -> List[Line]:
branch_target = None
if mnemonic in arch.branch_instructions:
branch_target = int(row_parts[1].strip().split(",")[-1], 16)
if mnemonic in arch.branch_likely_instructions:
branch_target -= 4
output.append(
Line(
@ -1882,6 +2009,7 @@ def process(dump: str, config: Config) -> List[Line]:
scorable_line=scorable_line,
line_num=line_num,
branch_target=branch_target,
data_pool_addr=data_pool_addr,
source_filename=source_filename,
source_line_num=source_line_num,
source_lines=source_lines,
@ -1896,6 +2024,7 @@ def process(dump: str, config: Config) -> List[Line]:
elif stop_after_delay_slot:
break
processor.post_process(output)
return output
@ -1917,7 +2046,9 @@ def split_off_address(line: str) -> Tuple[str, str]:
parts = line.split(",")
if len(parts) < 2:
parts = line.split(None, 1)
off = len(line) - len(parts[-1])
if len(parts) < 2:
parts.append("")
off = len(line) - len(parts[-1].strip())
return line[:off], line[off:]
@ -1933,7 +2064,7 @@ def diff_sequences(
) -> List[Tuple[str, int, int, int, int]]:
if (
algorithm != "levenshtein"
or len(seq1) * len(seq2) > 4 * 10 ** 8
or len(seq1) * len(seq2) > 4 * 10**8
or len(seq1) + len(seq2) >= 0x110000
):
return diff_sequences_difflib(seq1, seq2)
@ -2057,6 +2188,10 @@ def score_diff_lines(
def diff_delete(line: str) -> None:
deletions.append(line)
# if config.max_function_lines_overriden:
# max_index = min(config.max_function_size_lines, len(lines))
# else:
# Find the end of the last long streak of matching mnemonics, if it looks
# like the objdump output was truncated. This is used to skip scoring
# misaligned lines at the end of the diff.
@ -2115,6 +2250,18 @@ class OutputLine:
class Diff:
lines: List[OutputLine]
score: int
max_score: int
def trim_nops(lines: List[Line], arch: ArchSettings) -> List[Line]:
lines = lines[:]
while (
lines
and lines[-1].mnemonic == "nop"
and (len(lines) == 1 or lines[-2].mnemonic not in arch.delay_slot_instructions)
):
lines.pop()
return lines
def do_diff(lines1: List[Line], lines2: List[Line], config: Config) -> Diff:
@ -2144,8 +2291,11 @@ def do_diff(lines1: List[Line], lines2: List[Line], config: Config) -> Diff:
btset.add(bt)
sc(str(bt))
lines1 = trim_nops(lines1, arch)
lines2 = trim_nops(lines2, arch)
diffed_lines = diff_lines(lines1, lines2, config.algorithm)
score = score_diff_lines(diffed_lines, config)
max_score = len(lines1) * config.penalty_deletion
line_num_base = -1
line_num_offset = 0
@ -2213,10 +2363,15 @@ def do_diff(lines1: List[Line], lines2: List[Line], config: Config) -> Diff:
line2_line = line_num_2to1[line2.line_num]
line2_target = (line2_line[0] + (target - line2.line_num), 0)
# Set the key for three-way diffing to a normalized version.
# Adjust the branch target for scoring and three-way diffing.
norm2, norm_branch2 = split_off_address(line2.normalized_original)
if norm_branch2 != "<ign>":
line2.normalized_original = norm2 + str(line2_target)
if norm_branch2 != "<ignore>":
retargetted = hex(line2_target[0]).replace("0x", "")
if line2_target[1] != 0:
retargetted += f"+{line2_target[1]}"
line2.normalized_original = norm2 + retargetted
sc_base, _ = split_off_address(line2.scorable_line)
line2.scorable_line = sc_base + retargetted
same_target = line2_target == (line1.branch_target, 0)
else:
# Do a naive comparison for non-branches (e.g. function calls).
@ -2376,7 +2531,9 @@ def do_diff(lines1: List[Line], lines2: List[Line], config: Config) -> Diff:
)
)
return Diff(lines=output, score=score)
score = score_diff_lines(diffed_lines, config)
output = output[config.skip_lines :]
return Diff(lines=output, score=score, max_score=max_score)
def chunk_diff_lines(
@ -2452,13 +2609,14 @@ def align_diffs(
Text(f"{padding}PREVIOUS ({old_diff.score})"),
),
current_score=new_diff.score,
max_score=new_diff.max_score,
previous_score=old_diff.score,
)
old_chunks = chunk_diff_lines(old_diff.lines)
new_chunks = chunk_diff_lines(new_diff.lines)
diff_lines = []
empty = OutputLine(Text(), Text(), None, True, False, None, None)
assert len(old_chunks) == len(new_chunks), "same target"
#assert len(old_chunks) == len(new_chunks), "same target"
for old_chunk, new_chunk in zip(old_chunks, new_chunks):
if isinstance(old_chunk, list):
assert isinstance(new_chunk, list)
@ -2495,6 +2653,7 @@ def align_diffs(
Text(f"{padding}CURRENT ({new_diff.score})"),
),
current_score=new_diff.score,
max_score=new_diff.max_score,
previous_score=None,
)
diff_lines = [(line, line) for line in new_diff.lines]
@ -2609,10 +2768,9 @@ class Display:
self.last_diff_output = diff_output
meta, diff_lines = align_diffs(last_diff_output, diff_output, self.config)
diff_lines = diff_lines[self.config.skip_lines :]
output = self.config.formatter.table(meta, diff_lines)
refresh_key = (
[[col.key2 for col in x[1:]] for x in diff_lines],
[line.key2 for line in diff_output.lines],
diff_output.score,
)
return (output, refresh_key)

View File

@ -1214,7 +1214,8 @@ typedef struct ItemEntity {
/* 0x2E */ u8 unkCounter;
/* 0x2F */ s8 unk_2F;
/* 0x30 */ f32 scale;
/* 0x34 */ char unk_34[8];
/* 0x34 */ Vec3s unk_34;
/* 0x3A */ char unk_3A[2];
/* 0x3C */ s32 framesLeft;
/* 0x40 */ s32* currentState;
/* 0x44 */ s32 unk_44;
@ -1805,7 +1806,8 @@ typedef struct Encounter {
} Encounter; // size = 0x5C
typedef struct PlayerPathElement {
/* 0x00 */ char unk_00[4];
/* 0x00 */ s8 isJumping;
/* 0x03 */ char unk_01[3];
/* 0x04 */ Vec3f pos;
} PlayerPathElement; // size = 0x10
@ -2422,20 +2424,21 @@ typedef struct PopupMessage {
/* 0x18 */ Message* message;
} PopupMessage; // size = 0x1C
typedef struct struct8015A578 {
typedef struct Struct8015A578 {
/* 0x00 */ u8 unk_00;
/* 0x01 */ u8 unk_01;
/* 0x02 */ u8 unk_02;
/* 0x03 */ u8 unk_03[5];
/* 0x08 */ f32 unk_08;
} struct8015A578; // size = 0x0C
/* 0x0C */ char unk_0C[0x4];
} Struct8015A578; // size = 0x10
typedef struct SaveMetadata {
/* 0x00 */ s32 timePlayed;
/* 0x04 */ u8 spiritsRescued;
/* 0x05 */ char unk_05[0x1];
/* 0x06 */ s8 level;
/* 0x07 */ char filename[8];
/* 0x07 */ unsigned char filename[8];
/* 0x0F */ char unk_0F[0x1];
/* 0x10 */ s32 unk_10;
/* 0x14 */ s32 unk_14;

View File

@ -813,7 +813,7 @@ EffectInstance* fx_windy_leaves(s32, f32, f32, f32);
EffectInstance* fx_falling_leaves(s32, f32, f32, f32);
void fx_stars_spread(s32, f32, f32, f32, s32, s32);
void fx_steam_burst(s32, f32, f32, f32, f32, s32);
void fx_stars_orbiting(s32, f32, f32, f32, f32, s32, s32*);
void fx_stars_orbiting(s32, f32, f32, f32, f32, s32, EffectInstance**);
void fx_big_snowflakes(s32, f32, f32, f32);
EffectInstance* fx_debuff(s32, f32, f32, f32);
void fx_green_impact(s32, f32, f32, f32, f32);
@ -825,7 +825,7 @@ EffectInstance* fx_fire_breath(s32, f32, f32, f32, f32, f32, f32, s32, s32, s32)
EffectInstance* fx_shimmer_burst(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_energy_shockwave(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_shimmer_wave(s32, f32, f32, f32, f32, f32, s32, s32);
void fx_aura(s32, f32, f32, f32, f32, s32*);
void fx_aura(s32, f32, f32, f32, f32, EffectInstance**);
EffectInstance* fx_3C(s32, f32, f32, f32, f32, s32*);
void fx_3D(s32, f32, f32, f32, f32, f32, f32, s32, s32*);
EffectInstance* fx_blast(s32, f32, f32, f32, f32, s32);

View File

@ -510,6 +510,7 @@ enum SoundIDs {
SOUND_D4 = 0x000000D4,
SOUND_D5 = 0x000000D5,
SOUND_D6 = 0x000000D6,
SOUND_DC = 0x000000DC,
SOUND_HIT_PLAYER_NORMAL = 0x000000E1,
SOUND_HIT_PLAYER_FIRE = 0x000000E2,
SOUND_HIT_PLAYER_ICE = 0x000000E3,
@ -517,6 +518,7 @@ enum SoundIDs {
SOUND_HIT_NORMAL = 0x000000E9,
SOUND_HIT_FIRE = 0x000000EA,
SOUND_HIT_ICE = 0x000000EB,
SOUND_F1 = 0x000000F1,
SOUND_108 = 0x00000108,
SOUND_IMMUNE = 0x0000010C,
SOUND_HIT_BONES = 0x0000010D,
@ -527,6 +529,7 @@ enum SoundIDs {
SOUND_LAND = 0x0000014B,
SOUND_HIT_BLOCK = 0x0000014E,
SOUND_SEARCH_BUSH = 0x00000153,
SOUND_158 = 0x00000158,
SOUND_162 = 0x00000162,
SOUND_ENTER_PIPE = 0x00000163,
SOUND_SMASH_GOOMNUT_TREE = 0x00000165,
@ -587,6 +590,7 @@ enum SoundIDs {
SOUND_367 = 0x00000367,
SOUND_368 = 0x00000368,
SOUND_369 = 0x00000369,
SOUND_372 = 0x00000372,
SOUND_375 = 0x00000375,
SOUND_376 = 0x00000376,
SOUND_377 = 0x00000377,
@ -621,6 +625,9 @@ enum SoundIDs {
SOUND_INFLICT_STATUS = 0x00002032, //< Stop, poison, paralyze
SOUND_2038 = 0x00002038,
SOUND_2039 = 0x00002039,
SOUND_205B = 0x0000205B,
SOUND_2072 = 0x00002072,
SOUND_2073 = 0x00002073,
SOUND_BOMB_BLAST = 0x00002076,
SOUND_JUMP_2081 = 0x00002081,
SOUND_JUMP_8BIT_MARIO = 0x00002082,
@ -644,6 +651,12 @@ enum SoundIDs {
SOUND_2112 = 0x00002112,
SOUND_2113 = 0x00002113,
SOUND_2114 = 0x00002114,
SOUND_2115 = 0x00002115,
SOUND_2116 = 0x00002116,
SOUND_2117 = 0x00002117,
SOUND_2118 = 0x00002118,
SOUND_2119 = 0x00002119,
SOUND_211A = 0x0000211A,
};
enum Cams {

View File

@ -32,7 +32,9 @@ WINDOW_UPDATE_FUNC(filemenu_update_show_name_input);
WINDOW_UPDATE_FUNC(filemenu_update_show_options_left);
WINDOW_UPDATE_FUNC(filemenu_update_show_options_right);
WINDOW_UPDATE_FUNC(filemenu_update_show_options_bottom);
WINDOW_UPDATE_FUNC(filemenu_update_show_with_rotation);
WINDOW_UPDATE_FUNC(filemenu_update_hidden_name_input);
WINDOW_UPDATE_FUNC(filemenu_update_hidden_options_left);
WINDOW_UPDATE_FUNC(filemenu_update_hidden_options_right);
WINDOW_UPDATE_FUNC(filemenu_update_hidden_title);
@ -40,8 +42,10 @@ WINDOW_UPDATE_FUNC(filemenu_update_hidden_options_bottom);
WINDOW_UPDATE_FUNC(filemenu_update_hidden_with_rotation);
WINDOW_UPDATE_FUNC(filemenu_update_select_file);
WINDOW_UPDATE_FUNC(filemenu_update_deselect_file);
WINDOW_UPDATE_FUNC(filemenu_update_show_name_confirm);
WINDOW_UPDATE_FUNC(filemenu_update_hidden_name_confirm);
WINDOW_UPDATE_FUNC(main_menu_window_update);

View File

@ -30,6 +30,7 @@ u32 _heap_free(HeapNode* heapNodeList, void* addrToFree);
void* _heap_realloc(HeapNode* heapNodeList, void* addr, u32 newSize);
HeapNode* _heap_create(HeapNode* addr, u32 size);
s32 dma_copy(Addr romStart, Addr romEnd, void* vramDest);
f32 rand_float(void);
void copy_matrix(Matrix4f src, Matrix4f dest);
s32 _Printf(PrintCallback pfn, char* arg, const char* fmt, va_list ap);
@ -58,6 +59,8 @@ s32 create_entity(EntityBlueprint*, s32, s32, s32, s32, ...);
void entity_shattering_idle(Entity* entity);
void func_802666E4(Actor* actor, f32 x, f32 y, f32 z, s32 damage);
s32 entity_raycast_down(f32*, f32*, f32*, f32*, f32*, f32*);
void step_game_loop(void);
s32 resume_all_group(s32 groupFlags);
f32 length2D(f32 x, f32 y);
@ -383,6 +386,7 @@ PlayerData* get_player_data(void);
s32 npc_raycast_down_around(s32, f32*, f32*, f32*, f32*, f32, f32);
s32 npc_raycast_down_sides(s32, f32*, f32*, f32*, f32*);
s32 npc_raycast_up(s32, f32*, f32*, f32*, f32*);
s32 player_raycast_up_corners(PlayerStatus*, f32*, f32*, f32*, f32*, f32);
s32 player_raycast_below_cam_relative(PlayerStatus*, f32*, f32*, f32*, f32*, f32*, f32*, f32*, f32*);
s32 npc_test_move_taller_with_slipping(s32, f32*, f32*, f32*, f32, f32, f32, f32);
@ -410,6 +414,7 @@ Evt* start_script_in_group(EvtScript* source, u8 priority, u8 initialState, u8 g
f32 get_player_normal_yaw(void);
void set_standard_shadow_scale(Shadow* shadow, f32 scale);
void set_peach_shadow_scale(Shadow* shadow, f32 scale);
s32 is_block_on_ground(Entity* block);
void set_animation(s32 actorID, s32, s32 animationIndex);
void set_animation_rate(s32 actorID, s32 partIndex, f32 rate);
void func_8011B7C0(u16, s32, s32);
@ -510,6 +515,7 @@ Evt* get_script_by_index(s32 index);
s32 get_lava_reset_pos(f32* x, f32* y, f32* z);
void start_rumble(s32, s32);
void update_locomotion_state(void);
void start_rumble_type(u32);
void start_falling(void);
@ -903,9 +909,9 @@ void clear_trigger_data(void);
void clear_script_list(void);
void clear_entity_data(s32);
void clear_effect_data(void);
void clear_area_flags(void);
void update_locomotion_state(void);
void clear_saved_variables(void);
void clear_area_flags(void);
void func_802BFB44_323694(f32 arg0);
f32 get_player_normal_pitch(void);

View File

@ -452,19 +452,19 @@ void func_8003D3BC(Npc* npc);
void func_8003D624(Npc* npc, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5, s32 arg6);
void func_8003D660(Npc* npc, s32 arg1);
void func_8003D660(Npc* npc, s32);
void func_8003D788(Npc* npc, s32 arg1);
void func_8003D788(Npc* npc, s32);
void func_8003DA38(Npc* npc, s32 arg1);
void func_8003DA38(Npc* npc, s32);
s32 func_8003DC38(void);
s32 func_8003DC38(Npc*, s32);
void func_8003DFA0(Npc* npc);
void func_8003DFA0(Npc* npc, s32);
void func_8003E0D4(Npc* npc);
void func_8003E0D4(Npc* npc, s32);
void func_8003E1D0(Npc* npc);
void func_8003E1D0(Npc* npc, s32);
/// Duplicate of set_defeated().
void COPY_set_defeated(s32 mapID, s32 encounterID);

View File

@ -90,6 +90,7 @@ extern s16 D_8010CD10;
extern s16 D_8010CD12;
extern s32 D_8010CD20;
extern s32 D_801595A0;
extern Struct8015A578 D_8015A578;
extern BackgroundHeader gBackgroundImage;

View File

@ -183,10 +183,9 @@ void filemenu_update_cursor(void) {
filemenu_cursorGoalAlpha2 = 0xFF;
}
// problem with second loop declaration
#ifdef NON_MATCHING
void filemenu_update(void) {
MenuPanel* menu = filemenu_menus[filemenu_8024C098];
MenuPanel** menuIt;
s32 i;
for (i = 0x2C; i < ARRAY_COUNT(gWindows); i++) {
@ -218,18 +217,15 @@ void filemenu_update(void) {
}
}
for (i = 0; i < ARRAY_COUNT(filemenu_menus); i++) {
menu = filemenu_menus[i];
if (menu->initialized) {
if (menu->fpUpdate != NULL) {
menu->fpUpdate(menu);
}
// TODO clean up bad match
menuIt = &filemenu_menus;
for (i = 0; i < ARRAY_COUNT(filemenu_menus); i++, menuIt++) {
menu = *menuIt;
if (menu->initialized && menu->fpUpdate != NULL) {
menu->fpUpdate(menu);
}
}
}
#else
INCLUDE_ASM(s32, "163400", filemenu_update);
#endif
void func_8024330C(
s32 windowIdx,
@ -708,8 +704,8 @@ void filemenu_cleanup(void) {
set_window_update(i, WINDOW_UPDATE_HIDE);
}
set_window_update(0x18, WINDOW_UPDATE_HIDE);
set_window_update(0x17, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_PAUSE_TUTORIAL, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_PAUSE_DECRIPTION, WINDOW_UPDATE_HIDE);
func_80244BC4();
}

View File

@ -353,10 +353,10 @@ void filemenu_main_init(MenuPanel* menu) {
*posXPtr = x;
if (menu->page != 0) {
set_window_update(0x35, WINDOW_UPDATE_HIDE);
set_window_update(0x37, WINDOW_UPDATE_HIDE);
set_window_update(0x33, WINDOW_UPDATE_HIDE);
set_window_update(0x34, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_53, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_55, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_51, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_52, WINDOW_UPDATE_HIDE);
}
menu->initialized = 1;
}
@ -495,19 +495,19 @@ void filemenu_main_handle_input(MenuPanel* menu) {
filemenu_8024C110[i] = 0xF7;
}
D_8024C090 = 0;
set_window_update(0x30, filemenu_update_show_name_input);
set_window_update(0x31, filemenu_update_show_name_input);
set_window_update(0x2D, filemenu_update_hidden_with_rotation);
set_window_update(0x33, filemenu_update_hidden_with_rotation);
set_window_update(0x34, filemenu_update_hidden_with_rotation);
set_window_update(0x35, filemenu_update_hidden_with_rotation);
set_window_update(0x36, filemenu_update_hidden_with_rotation);
set_window_update(0x37, filemenu_update_hidden_with_rotation);
set_window_update(0x35, filemenu_update_hidden_with_rotation);
set_window_update(0x38, filemenu_update_hidden_with_rotation);
set_window_update(0x39, filemenu_update_hidden_with_rotation);
set_window_update(0x3A, filemenu_update_hidden_with_rotation);
set_window_update(0x3B, filemenu_update_hidden_with_rotation);
set_window_update(WINDOW_ID_48, filemenu_update_show_name_input);
set_window_update(WINDOW_ID_49, filemenu_update_show_name_input);
set_window_update(WINDOW_ID_45, filemenu_update_hidden_with_rotation);
set_window_update(WINDOW_ID_51, filemenu_update_hidden_with_rotation);
set_window_update(WINDOW_ID_52, filemenu_update_hidden_with_rotation);
set_window_update(WINDOW_ID_53, filemenu_update_hidden_with_rotation);
set_window_update(WINDOW_ID_54, filemenu_update_hidden_with_rotation);
set_window_update(WINDOW_ID_55, filemenu_update_hidden_with_rotation);
set_window_update(WINDOW_ID_53, filemenu_update_hidden_with_rotation);
set_window_update(WINDOW_ID_56, filemenu_update_hidden_with_rotation);
set_window_update(WINDOW_ID_57, filemenu_update_hidden_with_rotation);
set_window_update(WINDOW_ID_58, filemenu_update_hidden_with_rotation);
set_window_update(WINDOW_ID_59, filemenu_update_hidden_with_rotation);
sfx_play_sound(SOUND_MENU_NEXT);
filemenu_8024C098 = 3;
temp_a0 = filemenu_menus[filemenu_8024C098];
@ -517,50 +517,50 @@ void filemenu_main_handle_input(MenuPanel* menu) {
}
if (menu->selected == 6) {
set_window_update(0x33, filemenu_update_hidden_options_left);
set_window_update(0x34, filemenu_update_hidden_options_right);
set_window_update(0x35, filemenu_update_hidden_options_bottom);
set_window_update(0x36, filemenu_update_hidden_options_bottom);
set_window_update(0x37, filemenu_update_hidden_options_bottom);
set_window_update(0x38, filemenu_update_hidden_options_left);
set_window_update(0x39, filemenu_update_hidden_options_right);
set_window_update(0x3A, filemenu_update_hidden_options_left);
set_window_update(0x3B, filemenu_update_hidden_options_right);
set_window_update(0x2D, filemenu_update_hidden_title);
set_window_update(WINDOW_ID_51, filemenu_update_hidden_options_left);
set_window_update(WINDOW_ID_52, filemenu_update_hidden_options_right);
set_window_update(WINDOW_ID_53, filemenu_update_hidden_options_bottom);
set_window_update(WINDOW_ID_54, filemenu_update_hidden_options_bottom);
set_window_update(WINDOW_ID_55, filemenu_update_hidden_options_bottom);
set_window_update(WINDOW_ID_56, filemenu_update_hidden_options_left);
set_window_update(WINDOW_ID_57, filemenu_update_hidden_options_right);
set_window_update(WINDOW_ID_58, filemenu_update_hidden_options_left);
set_window_update(WINDOW_ID_59, filemenu_update_hidden_options_right);
set_window_update(WINDOW_ID_45, filemenu_update_hidden_title);
sfx_play_sound(SOUND_D6);
set_game_mode(0xF);
} else if (menu->selected == 4) {
sfx_play_sound(SOUND_MENU_NEXT);
menu->page = 1;
filemenu_set_selected(menu, 1, 2);
set_window_update(0x33, filemenu_update_hidden_options_left);
set_window_update(0x34, filemenu_update_hidden_options_right);
set_window_update(0x35, filemenu_update_hidden_options_bottom);
set_window_update(0x37, filemenu_update_hidden_options_bottom);
set_window_update(WINDOW_ID_51, filemenu_update_hidden_options_left);
set_window_update(WINDOW_ID_52, filemenu_update_hidden_options_right);
set_window_update(WINDOW_ID_53, filemenu_update_hidden_options_bottom);
set_window_update(WINDOW_ID_55, filemenu_update_hidden_options_bottom);
} else if (menu->selected == 5) {
sfx_play_sound(SOUND_MENU_NEXT);
menu->page = 3;
filemenu_set_selected(menu, 1, 2);
set_window_update(0x33, filemenu_update_hidden_options_left);
set_window_update(0x34, filemenu_update_hidden_options_right);
set_window_update(0x35, filemenu_update_hidden_options_bottom);
set_window_update(0x37, filemenu_update_hidden_options_bottom);
set_window_update(WINDOW_ID_51, filemenu_update_hidden_options_left);
set_window_update(WINDOW_ID_52, filemenu_update_hidden_options_right);
set_window_update(WINDOW_ID_53, filemenu_update_hidden_options_bottom);
set_window_update(WINDOW_ID_55, filemenu_update_hidden_options_bottom);
} else if (menu->selected < 4) {
sfx_play_sound(SOUND_MENU_NEXT);
set_window_update(0x2D, filemenu_update_hidden_with_rotation);
set_window_update(0x33, filemenu_update_hidden_with_rotation);
set_window_update(0x34, filemenu_update_hidden_with_rotation);
set_window_update(0x35, filemenu_update_hidden_with_rotation);
set_window_update(0x36, filemenu_update_hidden_with_rotation);
set_window_update(0x37, filemenu_update_hidden_with_rotation);
set_window_update(0x35, filemenu_update_hidden_with_rotation);
set_window_update(0x38, filemenu_update_hidden_with_rotation);
set_window_update(0x39, filemenu_update_hidden_with_rotation);
set_window_update(0x3A, filemenu_update_hidden_with_rotation);
set_window_update(0x3B, filemenu_update_hidden_with_rotation);
set_window_update(menu->selected + 56, filemenu_update_select_file);
set_window_update(WINDOW_ID_45, filemenu_update_hidden_with_rotation);
set_window_update(WINDOW_ID_51, filemenu_update_hidden_with_rotation);
set_window_update(WINDOW_ID_52, filemenu_update_hidden_with_rotation);
set_window_update(WINDOW_ID_53, filemenu_update_hidden_with_rotation);
set_window_update(WINDOW_ID_54, filemenu_update_hidden_with_rotation);
set_window_update(WINDOW_ID_55, filemenu_update_hidden_with_rotation);
set_window_update(WINDOW_ID_53, filemenu_update_hidden_with_rotation);
set_window_update(WINDOW_ID_56, filemenu_update_hidden_with_rotation);
set_window_update(WINDOW_ID_57, filemenu_update_hidden_with_rotation);
set_window_update(WINDOW_ID_58, filemenu_update_hidden_with_rotation);
set_window_update(WINDOW_ID_59, filemenu_update_hidden_with_rotation);
set_window_update(menu->selected + WINDOW_ID_56, filemenu_update_select_file);
sfx_play_sound(SOUND_MENU_NEXT);
set_window_update(0x32, 1);
set_window_update(WINDOW_ID_50, WINDOW_UPDATE_SHOW);
gWindows[50].pos.y = 143;
gWindows[50].width = 69;
gWindows[50].height = 44;
@ -581,15 +581,15 @@ void filemenu_main_handle_input(MenuPanel* menu) {
if (menu->selected == 6) {
sfx_play_sound(SOUND_MENU_NEXT);
menu->page = 0;
set_window_update(0x33, filemenu_update_show_options_left);
set_window_update(0x34, filemenu_update_show_options_right);
set_window_update(0x35, filemenu_update_show_options_bottom);
set_window_update(0x37, filemenu_update_show_options_bottom);
set_window_update(WINDOW_ID_51, filemenu_update_show_options_left);
set_window_update(WINDOW_ID_52, filemenu_update_show_options_right);
set_window_update(WINDOW_ID_53, filemenu_update_show_options_bottom);
set_window_update(WINDOW_ID_55, filemenu_update_show_options_bottom);
filemenu_set_selected(menu, 0, 2);
} else if (menu->selected < 4) {
if (gSaveSlotHasData[menu->selected] != 0) {
sfx_play_sound(SOUND_MENU_NEXT);
set_window_update(0x32, filemenu_update_show_name_confirm);
set_window_update(WINDOW_ID_50, filemenu_update_show_name_confirm);
gWindows[50].pos.y = 121;
gWindows[50].width = 69;
gWindows[50].height = 44;
@ -613,10 +613,10 @@ void filemenu_main_handle_input(MenuPanel* menu) {
if (menu->selected == 6) {
sfx_play_sound(SOUND_MENU_NEXT);
menu->page = 0;
set_window_update(0x33, filemenu_update_show_options_left);
set_window_update(0x34, filemenu_update_show_options_right);
set_window_update(0x35, filemenu_update_show_options_bottom);
set_window_update(0x37, filemenu_update_show_options_bottom);
set_window_update(WINDOW_ID_51, filemenu_update_show_options_left);
set_window_update(WINDOW_ID_52, filemenu_update_show_options_right);
set_window_update(WINDOW_ID_53, filemenu_update_show_options_bottom);
set_window_update(WINDOW_ID_55, filemenu_update_show_options_bottom);
filemenu_set_selected(menu, 0, 1);
} else if (menu->selected < 4) {
if (gSaveSlotHasData[menu->selected] != 0) {
@ -649,15 +649,15 @@ void filemenu_main_handle_input(MenuPanel* menu) {
gWindows[47].pos.y = ((gWindows[47].parent != -1) ? (gWindows[gWindows[47].parent].height / 2) : 240 / 2) - gWindows[47].height / 2;
set_window_update(0x2F, 1);
set_window_update(0x32, 2);
set_window_update(WINDOW_ID_47, WINDOW_UPDATE_SHOW);
set_window_update(WINDOW_ID_50, WINDOW_UPDATE_HIDE);
fio_load_game(filemenu_loadedFileIdx);
gSaveSlotMetadata[filemenu_iterFileIdx] = gSaveSlotMetadata[filemenu_loadedFileIdx];
fio_save_game(filemenu_iterFileIdx);
gSaveSlotHasData[filemenu_iterFileIdx] = 1;
} else {
sfx_play_sound(SOUND_MENU_NEXT);
set_window_update(0x32, filemenu_update_show_name_confirm);
set_window_update(WINDOW_ID_50, filemenu_update_show_name_confirm);
gWindows[50].pos.y = 121;
gWindows[50].width = 69;
@ -686,14 +686,14 @@ void filemenu_main_handle_input(MenuPanel* menu) {
sfx_play_sound(SOUND_MENU_NEXT);
filemenu_8024C098 = 2;
filemenu_menus[filemenu_8024C098]->page = 1;
set_window_update(0x2C, main_menu_window_update);
set_window_update(0x2F, 1);
set_window_update(0x32, 2);
set_window_update(WINDOW_ID_PAUSE_CURSOR, main_menu_window_update);
set_window_update(WINDOW_ID_47, WINDOW_UPDATE_SHOW);
set_window_update(WINDOW_ID_50, WINDOW_UPDATE_HIDE);
fio_save_game(menu->selected);
gSaveSlotHasData[menu->selected] = 1;
} else {
sfx_play_sound(SOUND_MENU_NEXT);
set_window_update(0x32, filemenu_update_show_name_confirm);
set_window_update(WINDOW_ID_50, filemenu_update_show_name_confirm);
gWindows[50].pos.y = 127;
gWindows[50].width = 69;
gWindows[50].height = 44;
@ -735,35 +735,35 @@ void filemenu_main_handle_input(MenuPanel* menu) {
switch (menu->page) {
case 0:
set_window_update(0x33, filemenu_update_hidden_options_left);
set_window_update(0x34, filemenu_update_hidden_options_right);
set_window_update(0x35, filemenu_update_hidden_options_bottom);
set_window_update(0x36, filemenu_update_hidden_options_bottom);
set_window_update(0x37, filemenu_update_hidden_options_bottom);
set_window_update(0x38, filemenu_update_hidden_options_left);
set_window_update(0x39, filemenu_update_hidden_options_right);
set_window_update(0x3A, filemenu_update_hidden_options_left);
set_window_update(0x3B, filemenu_update_hidden_options_right);
set_window_update(0x2D, filemenu_update_hidden_title);
set_window_update(WINDOW_ID_51, filemenu_update_hidden_options_left);
set_window_update(WINDOW_ID_52, filemenu_update_hidden_options_right);
set_window_update(WINDOW_ID_53, filemenu_update_hidden_options_bottom);
set_window_update(WINDOW_ID_54, filemenu_update_hidden_options_bottom);
set_window_update(WINDOW_ID_55, filemenu_update_hidden_options_bottom);
set_window_update(WINDOW_ID_56, filemenu_update_hidden_options_left);
set_window_update(WINDOW_ID_57, filemenu_update_hidden_options_right);
set_window_update(WINDOW_ID_58, filemenu_update_hidden_options_left);
set_window_update(WINDOW_ID_59, filemenu_update_hidden_options_right);
set_window_update(WINDOW_ID_45, filemenu_update_hidden_title);
sfx_play_sound(SOUND_D6);
set_game_mode(0xF);
break;
case 1:
menu->page = 0;
filemenu_set_selected(menu, 0, 2);
set_window_update(0x33, filemenu_update_show_options_left);
set_window_update(0x34, filemenu_update_show_options_right);
set_window_update(0x35, filemenu_update_show_options_bottom);
set_window_update(0x37, filemenu_update_show_options_bottom);
set_window_update(WINDOW_ID_51, filemenu_update_show_options_left);
set_window_update(WINDOW_ID_52, filemenu_update_show_options_right);
set_window_update(WINDOW_ID_53, filemenu_update_show_options_bottom);
set_window_update(WINDOW_ID_55, filemenu_update_show_options_bottom);
sfx_play_sound(SOUND_MENU_BACK);
break;
case 3:
menu->page = 0;
filemenu_set_selected(menu, 1, 2);
set_window_update(0x33, filemenu_update_show_options_left);
set_window_update(0x34, filemenu_update_show_options_right);
set_window_update(0x35, filemenu_update_show_options_bottom);
set_window_update(0x37, filemenu_update_show_options_bottom);
set_window_update(WINDOW_ID_51, filemenu_update_show_options_left);
set_window_update(WINDOW_ID_52, filemenu_update_show_options_right);
set_window_update(WINDOW_ID_53, filemenu_update_show_options_bottom);
set_window_update(WINDOW_ID_55, filemenu_update_show_options_bottom);
sfx_play_sound(SOUND_MENU_BACK);
break;
case 4:

View File

@ -1,6 +1,9 @@
#include "common.h"
#include "filemenu.h"
#include "fio.h"
extern SaveMetadata gSaveSlotMetadata[4];
extern u8 gSaveSlotHasData[4];
extern MenuWindowBP D_8024A0CC[2];
void filemenu_yesno_draw_options_contents(MenuPanel* tab, s32 posX, s32 posY) {
@ -90,7 +93,7 @@ void filemenu_yesno_draw_prompt_contents(MenuPanel* tab, s32 posX, s32 posY) {
}
xOffset = (147 - (i * 11)) / 2;
filemenu_draw_file_name(&filemenu_8024C110, i + 1, posX + xOffset, posY + 22, 0xFF, 0, 8, 0xB);
filemenu_draw_file_name(&filemenu_8024C110[0], i + 1, posX + xOffset, posY + 22, 0xFF, 0, 8, 0xB);
xOffset += (i + 1) * 11;
filemenu_draw_message(filemenu_get_menu_message(FILE_MESSAGE_PERIOD_20), posX + xOffset, posY + 22, 0xFF, 0, 0);
filemenu_draw_message(filemenu_get_menu_message(FILE_MESSAGE_OK), posX + 70, posY + 38, 0xFF, 0, 0);
@ -115,9 +118,230 @@ void filemenu_yesno_init(MenuPanel* tab) {
tab->initialized = TRUE;
}
static const f32 padding = 0.0f;
void filemenu_yesno_handle_input(MenuPanel* menu) {
s32 oldSelected = menu->selected;
INCLUDE_ASM(s32, "167570", filemenu_yesno_handle_input);
if (filemenu_heldButtons & BUTTON_STICK_UP) {
menu->row--;
if (menu->row < 0) {
menu->row = 0;
}
}
if (filemenu_heldButtons & BUTTON_STICK_DOWN) {
menu->row++;
if (menu->row >= menu->numRows) {
menu->row = menu->numRows - 1;
}
}
menu->selected = MENU_PANEL_SELECTED_GRID_DATA(menu);
if (oldSelected != menu->selected) {
sfx_play_sound(SOUND_MENU_CHANGE_SELECTION);
}
if ((filemenu_pressedButtons & BUTTON_START) && menu->page == 4) {
filemenu_set_selected(menu, 0, 0);
filemenu_pressedButtons = BUTTON_A;
}
if (filemenu_pressedButtons & BUTTON_A) {
u32 slot;
u32 slot2;
u32 slot3;
u32 slot4;
s32 i;
sfx_play_sound(SOUND_MENU_NEXT);
switch (menu->selected) {
case 0:
switch (menu->page) {
case 0:
filemenu_8024C098 = 2;
filemenu_menus[filemenu_8024C098]->page = 0;
gWindows[47].width = 182;
gWindows[47].height = 25;
gWindows[47].pos.x = ((gWindows[47].parent != -1)
? (gWindows[gWindows[47].parent].width / 2)
: SCREEN_WIDTH / 2) - gWindows[47].width / 2;
gWindows[47].pos.y = ((gWindows[47].parent != -1)
? (gWindows[gWindows[47].parent].height / 2)
: SCREEN_HEIGHT / 2) - gWindows[47].height / 2;
set_window_update(WINDOW_ID_47, WINDOW_UPDATE_SHOW);
set_window_update(WINDOW_ID_50, (s32)filemenu_update_hidden_name_confirm);
slot = filemenu_menus[0]->selected;
for (i = 0; i < ARRAY_COUNT(gSaveSlotMetadata->filename); i++) {
gSaveSlotMetadata[slot].filename[i] = 0xF7;
}
gSaveSlotMetadata[slot].level = 0;
gSaveSlotMetadata[slot].timePlayed = 0;
gSaveSlotMetadata[slot].spiritsRescued = 0;
fio_erase_game(slot);
gSaveSlotHasData[slot] = FALSE;
break;
case 3:
filemenu_8024C098 = 2;
filemenu_menus[filemenu_8024C098]->page = 2;
gWindows[47].width = 154;
gWindows[47].height = 39;
gWindows[47].pos.x = ((gWindows[47].parent != -1)
? (gWindows[gWindows[47].parent].width / 2)
: SCREEN_WIDTH / 2) - gWindows[47].width / 2;
gWindows[47].pos.y = ((gWindows[47].parent != -1)
? (gWindows[gWindows[47].parent].height / 2)
: SCREEN_HEIGHT / 2) - gWindows[47].height / 2;
set_window_update(WINDOW_ID_47, WINDOW_UPDATE_SHOW);
set_window_update(WINDOW_ID_50, (s32)filemenu_update_hidden_name_confirm);
fio_load_game(filemenu_loadedFileIdx);
gSaveSlotMetadata[filemenu_iterFileIdx] = gSaveSlotMetadata[filemenu_loadedFileIdx];
fio_save_game(filemenu_iterFileIdx);
gSaveSlotHasData[filemenu_iterFileIdx] = TRUE;
break;
case 1:
filemenu_8024C098 = 2;
filemenu_menus[filemenu_8024C098]->page = 1;
gWindows[47].width = 153;
gWindows[47].height = 25;
gWindows[47].pos.x = ((gWindows[47].parent != -1)
? (gWindows[gWindows[47].parent].width / 2)
: SCREEN_WIDTH / 2) - gWindows[47].width / 2;
gWindows[47].pos.y = ((gWindows[47].parent != -1)
? (gWindows[gWindows[47].parent].height / 2)
: SCREEN_HEIGHT / 2) - gWindows[47].height / 2;
set_window_update(WINDOW_ID_47, WINDOW_UPDATE_SHOW);
set_window_update(WINDOW_ID_50, (s32)filemenu_update_hidden_name_confirm);
gSaveSlotMetadata[filemenu_menus[0]->selected] = gSaveSlotMetadata[gGameStatusPtr->saveSlot];
fio_save_game(filemenu_menus[0]->selected);
gSaveSlotHasData[filemenu_menus[0]->selected] = TRUE;
break;
case 2:
clear_player_data();
clear_saved_variables();
gGameStatusPtr->areaID = 0;
gGameStatusPtr->mapID = 0xB;
gGameStatusPtr->entryID = 0;
evt_set_variable(NULL, EVT_STORY_PROGRESS, STORY_INTRO);
slot2 = filemenu_menus[0]->selected;
for (i = 0; i < ARRAY_COUNT(gSaveSlotMetadata->filename); i++) {
gSaveSlotMetadata[slot2].filename[i] = filemenu_8024C110[i];
}
fio_save_game(slot2);
gSaveSlotHasData[slot2] = TRUE;
set_window_update(WINDOW_ID_48, (s32)filemenu_update_hidden_name_input);
set_window_update(WINDOW_ID_49, (s32)filemenu_update_hidden_name_input);
set_window_update(WINDOW_ID_45, (s32)filemenu_update_show_with_rotation);
set_window_update(WINDOW_ID_51, (s32)filemenu_update_show_with_rotation);
set_window_update(WINDOW_ID_52, (s32)filemenu_update_show_with_rotation);
set_window_update(WINDOW_ID_53, (s32)filemenu_update_show_with_rotation);
set_window_update(WINDOW_ID_54, (s32)filemenu_update_show_with_rotation);
set_window_update(WINDOW_ID_55, (s32)filemenu_update_show_with_rotation);
set_window_update(WINDOW_ID_53, (s32)filemenu_update_show_with_rotation);
set_window_update(WINDOW_ID_56, (s32)filemenu_update_show_with_rotation);
set_window_update(WINDOW_ID_57, (s32)filemenu_update_show_with_rotation);
set_window_update(WINDOW_ID_58, (s32)filemenu_update_show_with_rotation);
set_window_update(WINDOW_ID_59, (s32)filemenu_update_show_with_rotation);
set_window_update(WINDOW_ID_50, (s32)filemenu_update_hidden_name_confirm);
filemenu_8024C098 = 2;
filemenu_menus[2]->page = 3;
gWindows[47].width = 184;
gWindows[47].height = 25;
gWindows[47].pos.x = ((gWindows[47].parent != -1)
? (gWindows[gWindows[47].parent].width / 2)
: SCREEN_WIDTH / 2) - gWindows[47].width / 2;
gWindows[47].pos.y = ((gWindows[47].parent != -1)
? (gWindows[gWindows[47].parent].height / 2)
: SCREEN_HEIGHT / 2) - gWindows[47].height / 2;
set_window_update(WINDOW_ID_47, WINDOW_UPDATE_SHOW);
break;
case 4:
slot3 = filemenu_menus[0]->selected;
if (gGameStatusPtr->soundOutputMode != 1 - D_800D95E8.saveSlot ||
slot3 != (u8)D_800D95E8.saveCount)
{
D_800D95E8.saveSlot = 1 - gGameStatusPtr->soundOutputMode;
D_800D95E8.saveCount = slot3;
fio_flush_backups();
}
fio_load_game(slot3);
set_game_mode(0xF);
break;
}
break;
case 1:
switch (menu->page) {
case 0:
case 1:
case 3:
filemenu_8024C098 = 0;
set_window_update(WINDOW_ID_50, (s32)filemenu_update_hidden_name_confirm);
break;
case 2:
filemenu_8024C098 = 3;
set_window_update(WINDOW_ID_50, (s32)filemenu_update_hidden_name_confirm);
break;
case 4:
filemenu_8024C098 = 0;
slot4 = filemenu_menus[0]->selected;
set_window_update(WINDOW_ID_45, (s32)filemenu_update_show_with_rotation);
set_window_update(WINDOW_ID_51, (s32)filemenu_update_show_with_rotation);
set_window_update(WINDOW_ID_52, (s32)filemenu_update_show_with_rotation);
set_window_update(WINDOW_ID_53, (s32)filemenu_update_show_with_rotation);
set_window_update(WINDOW_ID_54, (s32)filemenu_update_show_with_rotation);
set_window_update(WINDOW_ID_55, (s32)filemenu_update_show_with_rotation);
set_window_update(WINDOW_ID_53, (s32)filemenu_update_show_with_rotation);
set_window_update(WINDOW_ID_56, (s32)filemenu_update_show_with_rotation);
set_window_update(WINDOW_ID_57, (s32)filemenu_update_show_with_rotation);
set_window_update(WINDOW_ID_58, (s32)filemenu_update_show_with_rotation);
set_window_update(WINDOW_ID_59, (s32)filemenu_update_show_with_rotation);
set_window_update(slot4 + 0x38, (s32)filemenu_update_deselect_file);
set_window_update(WINDOW_ID_50, WINDOW_UPDATE_HIDE);
break;
}
break;
}
}
if (filemenu_pressedButtons & BUTTON_B) {
u32 slot;
sfx_play_sound(SOUND_MENU_BACK);
filemenu_set_selected(menu, 0, 1);
switch (menu->page) {
case 0:
case 1:
case 3:
filemenu_8024C098 = 0;
set_window_update(WINDOW_ID_50, (s32)filemenu_update_hidden_name_confirm);
break;
case 2:
filemenu_8024C098 = 3;
set_window_update(WINDOW_ID_50, (s32)filemenu_update_hidden_name_confirm);
break;
case 4:
filemenu_8024C098 = 0;
slot = filemenu_menus[0]->selected;
set_window_update(WINDOW_ID_45, (s32)filemenu_update_show_with_rotation);
set_window_update(WINDOW_ID_51, (s32)filemenu_update_show_with_rotation);
set_window_update(WINDOW_ID_52, (s32)filemenu_update_show_with_rotation);
set_window_update(WINDOW_ID_53, (s32)filemenu_update_show_with_rotation);
set_window_update(WINDOW_ID_54, (s32)filemenu_update_show_with_rotation);
set_window_update(WINDOW_ID_55, (s32)filemenu_update_show_with_rotation);
set_window_update(WINDOW_ID_53, (s32)filemenu_update_show_with_rotation);
set_window_update(WINDOW_ID_56, (s32)filemenu_update_show_with_rotation);
set_window_update(WINDOW_ID_57, (s32)filemenu_update_show_with_rotation);
set_window_update(WINDOW_ID_58, (s32)filemenu_update_show_with_rotation);
set_window_update(WINDOW_ID_59, (s32)filemenu_update_show_with_rotation);
set_window_update(slot + WINDOW_ID_56, (s32)filemenu_update_deselect_file);
set_window_update(WINDOW_ID_50, WINDOW_UPDATE_HIDE);
break;
}
}
}
void filemenu_yesno_update(void) {
}

View File

@ -59,18 +59,18 @@ void filemenu_info_handle_input(void) {
switch(page) {
case 1:
menu->page = 0;
set_window_update(0x33, (s32)filemenu_update_show_options_left);
set_window_update(0x34, (s32)filemenu_update_show_options_right);
set_window_update(0x35, (s32)filemenu_update_show_options_bottom);
set_window_update(0x37, (s32)filemenu_update_show_options_bottom);
set_window_update(WINDOW_ID_51, (s32)filemenu_update_show_options_left);
set_window_update(WINDOW_ID_52, (s32)filemenu_update_show_options_right);
set_window_update(WINDOW_ID_53, (s32)filemenu_update_show_options_bottom);
set_window_update(WINDOW_ID_55, (s32)filemenu_update_show_options_bottom);
filemenu_set_selected(menu, 0, 2);
break;
case 4:
menu->page = 0;
set_window_update(0x33, (s32)filemenu_update_show_options_left);
set_window_update(0x34, (s32)filemenu_update_show_options_right);
set_window_update(0x35, (s32)filemenu_update_show_options_bottom);
set_window_update(0x37, (s32)filemenu_update_show_options_bottom);
set_window_update(WINDOW_ID_51, (s32)filemenu_update_show_options_left);
set_window_update(WINDOW_ID_52, (s32)filemenu_update_show_options_right);
set_window_update(WINDOW_ID_53, (s32)filemenu_update_show_options_bottom);
set_window_update(WINDOW_ID_55, (s32)filemenu_update_show_options_bottom);
filemenu_set_selected(menu, 1, 2);
break;
case 2:
@ -78,7 +78,7 @@ void filemenu_info_handle_input(void) {
filemenu_set_selected(menu, 1, 2);
break;
}
set_window_update(0x2F, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_47, WINDOW_UPDATE_HIDE);
}
}

View File

@ -619,7 +619,7 @@ void btl_state_update_celebration(void) {
x = 20;
y = 186;
set_window_properties(8, 20, 186, 280, 32, 20, func_80260948, NULL, -1);
set_window_update(8, WINDOW_UPDATE_SHOW);
set_window_update(WINDOW_ID_8, WINDOW_UPDATE_SHOW);
gBattleState2 = BATTLE_STATE2_UNK_8;
}
break;
@ -662,7 +662,7 @@ void btl_state_update_celebration(void) {
break;
case BATTLE_STATE2_UNK_9:
hud_element_free(D_8029FAE8);
set_window_update(8, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_8, WINDOW_UPDATE_HIDE);
switch (battleStatus->currentSubmenu) {
case 0:
@ -770,7 +770,7 @@ void btl_state_update_celebration(void) {
x = 160 - (width / 2);
y = 80;
set_window_properties(9, x, y, width, 28, 10, func_80260A20, NULL, -1);
set_window_update(9, WINDOW_UPDATE_SHOW);
set_window_update(WINDOW_ID_9, WINDOW_UPDATE_SHOW);
D_8029FB4C = 60;
gBattleState2 = BATTLE_STATE2_UNK_10;
break;
@ -782,7 +782,7 @@ void btl_state_update_celebration(void) {
D_8029FB4C--;
break;
}
set_window_update(9, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_9, WINDOW_UPDATE_HIDE);
gBattleState2 = BATTLE_STATE2_UNK_8;
break;
case BATTLE_STATE2_UNK_14:

View File

@ -1,6 +1,32 @@
#include "common.h"
INCLUDE_ASM(s32, "190A10", func_80262130);
extern s32 D_8010C968;
extern s32 D_8010C98C;
s32 func_80262130(f32 inX, f32 inY, f32 inZ, f32 arg3, f32 radius) {
f32 x = inX;
f32 y = inY;
f32 z = inZ;
f32 hitDepth = arg3;
s32 ret = FALSE;
s32 phi_s0 = 0;
if (npc_raycast_down_around(0, &x, &y, &z, &hitDepth, 90.0f, radius) && hitDepth <= arg3) {
s32 type = get_collider_type_by_id(D_8010C98C & 0xFF);
s32 type2 = get_collider_type_by_id(D_8010C968 & 0xFF);
phi_s0 = type & type2;
if (phi_s0 != (D_8010C98C & 0xFF)) {
phi_s0 = 0;
}
}
if (phi_s0 == 1) {
ret = TRUE;
}
return ret;
}
s32 func_8026220C(f32 arg0, f32 arg1) {
return (arg1 > 100.0f) ? 28 : 0;

View File

@ -349,17 +349,17 @@ void func_802A27D0(void) {
void func_802A27E4(void) {
s32 i;
set_window_update(1, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_1, WINDOW_UPDATE_HIDE);
if (!battle_menu_hasSpiritsMenu) {
set_window_update(2, WINDOW_UPDATE_HIDE);
set_window_update(3, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_2, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_3, WINDOW_UPDATE_HIDE);
} else {
set_window_update(4, WINDOW_UPDATE_HIDE);
set_window_update(5, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_4, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_5, WINDOW_UPDATE_HIDE);
}
set_window_update(8, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_8, WINDOW_UPDATE_HIDE);
for (i = 0; i < battle_menu_moveOptionCount; i++) {
hud_element_free(battle_menu_moveOptionIconIDs[i]);
@ -398,17 +398,17 @@ void func_802A2910(void) {
}
hud_element_set_script(battle_menu_moveCursorIcon, HudScript_AnimatedHandPointer);
set_window_update(1, WINDOW_UPDATE_TRANSPARENT);
set_window_update(WINDOW_ID_1, WINDOW_UPDATE_TRANSPARENT);
if (!battle_menu_hasSpiritsMenu) {
set_window_update(2, WINDOW_UPDATE_TRANSPARENT);
set_window_update(3, WINDOW_UPDATE_TRANSPARENT);
set_window_update(WINDOW_ID_2, WINDOW_UPDATE_TRANSPARENT);
set_window_update(WINDOW_ID_3, WINDOW_UPDATE_TRANSPARENT);
} else {
set_window_update(4, WINDOW_UPDATE_TRANSPARENT);
set_window_update(5, WINDOW_UPDATE_TRANSPARENT);
set_window_update(WINDOW_ID_4, WINDOW_UPDATE_TRANSPARENT);
set_window_update(WINDOW_ID_5, WINDOW_UPDATE_TRANSPARENT);
}
set_window_update(8, WINDOW_UPDATE_SHOW);
set_window_update(WINDOW_ID_8, WINDOW_UPDATE_SHOW);
battle_menu_moveTextColor = 10;
D_802AD10F = 1;
battle_menu_moveTextOpacity = 255;
@ -420,16 +420,16 @@ void func_802A2AB8(void) {
s32* moveOptionCostUnitIconIDs;
s32 i;
set_window_update(1, WINDOW_UPDATE_TRANSPARENT);
set_window_update(WINDOW_ID_1, WINDOW_UPDATE_TRANSPARENT);
if (!battle_menu_hasSpiritsMenu) {
set_window_update(2, WINDOW_UPDATE_TRANSPARENT);
set_window_update(3, WINDOW_UPDATE_TRANSPARENT);
set_window_update(WINDOW_ID_2, WINDOW_UPDATE_TRANSPARENT);
set_window_update(WINDOW_ID_3, WINDOW_UPDATE_TRANSPARENT);
} else {
set_window_update(4, WINDOW_UPDATE_TRANSPARENT);
set_window_update(5, WINDOW_UPDATE_TRANSPARENT);
set_window_update(WINDOW_ID_4, WINDOW_UPDATE_TRANSPARENT);
set_window_update(WINDOW_ID_5, WINDOW_UPDATE_TRANSPARENT);
}
set_window_update(8, WINDOW_UPDATE_SHOW);
set_window_update(WINDOW_ID_8, WINDOW_UPDATE_SHOW);
moveOptionIconIDs = battle_menu_moveOptionIconIDs;
@ -455,7 +455,7 @@ void func_802A2AB8(void) {
}
void func_802A2C58(void) {
set_window_update(8, WINDOW_UPDATE_SHOW);
set_window_update(WINDOW_ID_8, WINDOW_UPDATE_SHOW);
battle_menu_moveState = 30;
}
@ -576,9 +576,9 @@ void func_802A4718(void) {
void func_802A472C(void) {
s32 i;
set_window_update(6, WINDOW_UPDATE_HIDE);
set_window_update(7, WINDOW_UPDATE_HIDE);
set_window_update(8, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_6, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_7, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_8, WINDOW_UPDATE_HIDE);
for (i = 0; i < D_802AD66C; i++) {
hud_element_free(D_802AD628[i]);
@ -600,9 +600,9 @@ void func_802A47E0(void) {
hud_element_set_tint(D_802AD61C, 0xFF, 0xFF, 0xFF);
hud_element_set_tint(D_802AD620, 0xFF, 0xFF, 0xFF);
hud_element_set_script(D_802AD618, HudScript_AnimatedHandPointer);
set_window_update(6, WINDOW_UPDATE_TRANSPARENT);
set_window_update(7, WINDOW_UPDATE_TRANSPARENT);
set_window_update(8, WINDOW_UPDATE_SHOW);
set_window_update(WINDOW_ID_6, WINDOW_UPDATE_TRANSPARENT);
set_window_update(WINDOW_ID_7, WINDOW_UPDATE_TRANSPARENT);
set_window_update(WINDOW_ID_8, WINDOW_UPDATE_SHOW);
D_802AD614 = 10;
D_802AD60B = 1;
D_802AD624 = 255;
@ -612,9 +612,9 @@ void func_802A47E0(void) {
void func_802A48FC(void) {
s32 i;
set_window_update(6, WINDOW_UPDATE_TRANSPARENT);
set_window_update(7, WINDOW_UPDATE_TRANSPARENT);
set_window_update(8, WINDOW_UPDATE_SHOW);
set_window_update(WINDOW_ID_6, WINDOW_UPDATE_TRANSPARENT);
set_window_update(WINDOW_ID_7, WINDOW_UPDATE_TRANSPARENT);
set_window_update(WINDOW_ID_8, WINDOW_UPDATE_SHOW);
for (i = 0; i < D_802AD66C; i++) {
hud_element_set_tint(D_802AD628[i], 0xFF, 0xFF, 0xFF);
@ -630,9 +630,9 @@ void func_802A48FC(void) {
}
void func_802A4A10(void) {
set_window_update(6, WINDOW_UPDATE_TRANSPARENT);
set_window_update(7, WINDOW_UPDATE_TRANSPARENT);
set_window_update(8, WINDOW_UPDATE_SHOW);
set_window_update(WINDOW_ID_6, WINDOW_UPDATE_TRANSPARENT);
set_window_update(WINDOW_ID_7, WINDOW_UPDATE_TRANSPARENT);
set_window_update(WINDOW_ID_8, WINDOW_UPDATE_SHOW);
D_802AD604 = 30;
}

View File

@ -492,7 +492,7 @@ void update_coin_counter(void) {
if ((uiStatus->displayCoins == playerData->coins) || (uiStatus->unk_6C[0] <= 30)) {
uiStatus->unk_6C[0] -= 1;
if (uiStatus->unk_6C[0] == 0) {
set_window_update(20, (s32)basic_hidden_window_update);
set_window_update(WINDOW_ID_20, (s32)basic_hidden_window_update);
uiStatus->unk_6C[1] = 15;
D_8010CD10 = 0;
D_8010CD12 = 1;
@ -513,7 +513,7 @@ void show_coin_counter(void) {
s32 index;
if ((D_8010CD10 != 0) || (D_8010CD12 != 0)) {
set_window_update(20, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_20, WINDOW_UPDATE_HIDE);
if (uiStatus->iconIndex12 > -1) {
hud_element_free(uiStatus->iconIndex10);
hud_element_free(uiStatus->iconIndex11);
@ -527,7 +527,7 @@ void show_coin_counter(void) {
if (uiStatus->unk_6C[0] == 0) {
set_window_properties(0x14, 32, 164, 64, 20, 0x15, coin_counter_draw_content, 0, -1);
set_window_update(20, (s32)basic_window_update);
set_window_update(WINDOW_ID_20, (s32)basic_window_update);
index = hud_element_create(HudScript_MenuTimes);
uiStatus->iconIndex10 = index;
hud_element_set_flags(index, HUD_ELEMENT_FLAGS_80);

View File

@ -239,62 +239,62 @@ s32 popup_menu_update(void) {
} else {
set_window_properties(0xF, 0xC, -6, 0x79, 0x10, 0x15, popup_menu_draw_title_contents, NULL, 0xE);
}
set_window_update(0xF, WINDOW_UPDATE_SHOW);
set_window_update(0x11, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_15, WINDOW_UPDATE_SHOW);
set_window_update(WINDOW_ID_17, WINDOW_UPDATE_HIDE);
break;
case 1:
set_window_properties(0xE, posX, posY, 0x8B, ((s8) D_8010D656 * 0xD) + 0x1A, 0x14, popup_menu_draw_menu_contents, NULL, -1);
set_window_properties(0x11, 0xD, -6, 0x72, 0x10, 0x15, popup_menu_draw_title_contents, NULL, 0xE);
set_window_update(0xF, WINDOW_UPDATE_HIDE);
set_window_update(0x11, WINDOW_UPDATE_SHOW);
set_window_update(WINDOW_ID_15, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_17, WINDOW_UPDATE_SHOW);
break;
case 3:
set_window_properties(0xE, posX, posY, 0xA2, ((s8) D_8010D656 * 0xD) + 0x1A, 0x14, popup_menu_draw_menu_contents, NULL, -1);
set_window_properties(0xF, 0x11, -6, 0x60, 0x10, 0x15, popup_menu_draw_title_contents, NULL, 0xE);
set_window_update(0xF, WINDOW_UPDATE_SHOW);
set_window_update(0x11, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_15, WINDOW_UPDATE_SHOW);
set_window_update(WINDOW_ID_17, WINDOW_UPDATE_HIDE);
break;
case 4:
set_window_properties(0xE, posX, posY, 0x92, ((s8) D_8010D656 * 0xD) + 0x1A, 0x14, popup_menu_draw_menu_contents, NULL, -1);
set_window_properties(0x11, 0xC, -6, 0x72, 0x10, 0x15, popup_menu_draw_title_contents, NULL, 0xE);
set_window_update(0xF, WINDOW_UPDATE_HIDE);
set_window_update(0x11, WINDOW_UPDATE_SHOW);
set_window_update(WINDOW_ID_15, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_17, WINDOW_UPDATE_SHOW);
break;
case 5:
set_window_properties(0xE, posX, posY, 0xA7, ((s8) D_8010D656 * 0xD) + 0x1A, 0x14, popup_menu_draw_menu_contents, NULL, -1);
set_window_properties(0xF, 0x16, -6, 0x5F, 0x10, 0x15, popup_menu_draw_title_contents, NULL, 0xE);
set_window_update(0xF, WINDOW_UPDATE_SHOW);
set_window_update(0x11, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_15, WINDOW_UPDATE_SHOW);
set_window_update(WINDOW_ID_17, WINDOW_UPDATE_HIDE);
break;
case 8:
set_window_properties(0xE, posX, posY, 0xAA, ((s8) D_8010D656 * 0xD) + 0x1A, 0x14, popup_menu_draw_menu_contents, NULL, -1);
set_window_properties(0xF, 0x20, -6, 0x68, 0x10, 0x15, popup_menu_draw_title_contents, NULL, 0xE);
set_window_update(0xF, WINDOW_UPDATE_SHOW);
set_window_update(0x11, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_15, WINDOW_UPDATE_SHOW);
set_window_update(WINDOW_ID_17, WINDOW_UPDATE_HIDE);
break;
case 9:
set_window_properties(0xE, posX, posY, 0x91, ((s8) D_8010D656 * 0xD) + 0x1A, 0x14, popup_menu_draw_menu_contents, NULL, -1);
set_window_properties(0xF, 0xC, -6, 0x79, 0x10, 0x15, popup_menu_draw_title_contents, NULL, 0xE);
set_window_update(0xF, WINDOW_UPDATE_SHOW);
set_window_update(0x11, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_15, WINDOW_UPDATE_SHOW);
set_window_update(WINDOW_ID_17, WINDOW_UPDATE_HIDE);
break;
case 10:
set_window_properties(0xE, posX, posY, 0x80, ((s8) D_8010D656 * 0xD) + 0x1A, 0x14, popup_menu_draw_menu_contents, NULL, -1);
set_window_properties(0xF, 0xC, -6, 0x68, 0x10, 0x15, popup_menu_draw_title_contents, NULL, 0xE);
set_window_update(0xF, WINDOW_UPDATE_SHOW);
set_window_update(0x11, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_15, WINDOW_UPDATE_SHOW);
set_window_update(WINDOW_ID_17, WINDOW_UPDATE_HIDE);
break;
case 11:
set_window_properties(0xE, posX, posY, 0x95, ((s8) D_8010D656 * 0xD) + 0x1A, 0x14, popup_menu_draw_menu_contents, NULL, -1);
set_window_properties(0xF, 6, -6, 0x8B, 0x10, 0x15, popup_menu_draw_title_contents, NULL, 0xE);
set_window_update(0xF, WINDOW_UPDATE_SHOW);
set_window_update(0x11, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_15, WINDOW_UPDATE_SHOW);
set_window_update(WINDOW_ID_17, WINDOW_UPDATE_HIDE);
break;
case 13:
set_window_properties(0xE, posX, posY, 0x83, ((s8) D_8010D656 * 0xD) + 0x1A, 0x14, popup_menu_draw_menu_contents, NULL, -1);
set_window_properties(0x11, 0xA, -6, 0x72, 0x10, 0x15, popup_menu_draw_title_contents, NULL, 0xE);
set_window_update(0xF, WINDOW_UPDATE_HIDE);
set_window_update(0x11, WINDOW_UPDATE_SHOW);
set_window_update(WINDOW_ID_15, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_17, WINDOW_UPDATE_SHOW);
break;
}
@ -374,18 +374,18 @@ s32 popup_menu_update(void) {
case 8:
case 9:
case 12:
set_window_update(0xE, WINDOW_UPDATE_SHOW);
set_window_update(0x13, WINDOW_UPDATE_SHOW);
set_window_update(WINDOW_ID_14, WINDOW_UPDATE_SHOW);
set_window_update(WINDOW_ID_19, WINDOW_UPDATE_SHOW);
break;
case 1:
case 4:
set_window_update(0xE, WINDOW_UPDATE_SHOW);
set_window_update(0x13, WINDOW_UPDATE_SHOW);
set_window_update(WINDOW_ID_14, WINDOW_UPDATE_SHOW);
set_window_update(WINDOW_ID_19, WINDOW_UPDATE_SHOW);
break;
case 10:
case 11:
case 13:
set_window_update(0xE, WINDOW_UPDATE_SHOW);
set_window_update(WINDOW_ID_14, WINDOW_UPDATE_SHOW);
break;
}
} else {
@ -399,35 +399,35 @@ s32 popup_menu_update(void) {
case 8:
case 9:
case 12:
set_window_update(0xE, (s32)basic_window_update);
set_window_update(WINDOW_ID_14, (s32)basic_window_update);
sfx_play_sound(1);
set_window_update(0x13, (s32)basic_window_update);
set_window_update(WINDOW_ID_19, (s32)basic_window_update);
break;
case 1:
case 4:
set_window_update(0xE, (s32)basic_window_update);
set_window_update(WINDOW_ID_14, (s32)basic_window_update);
sfx_play_sound(2);
set_window_update(0x13, (s32)basic_window_update);
set_window_update(WINDOW_ID_19, (s32)basic_window_update);
break;
case 10:
case 11:
case 13:
set_window_update(0xE, (s32)basic_window_update);
set_window_update(WINDOW_ID_14, (s32)basic_window_update);
sfx_play_sound(1);
break;
}
set_window_update(0x15, WINDOW_UPDATE_SHOW);
set_window_update(WINDOW_ID_21, WINDOW_UPDATE_SHOW);
}
if (gPopupMenu->popupType == 3) {
set_window_update(0x10, (s32)basic_window_update);
set_window_update(0x14, (s32)basic_window_update);
set_window_update(WINDOW_ID_16, (s32)basic_window_update);
set_window_update(WINDOW_ID_20, (s32)basic_window_update);
}
if (gPopupMenu->popupType == 4) {
set_window_update(0x12, (s32)basic_window_update);
set_window_update(WINDOW_ID_18, (s32)basic_window_update);
}
if (gPopupMenu->popupType == 5) {
set_window_update(0x10, (s32)basic_window_update);
set_window_update(WINDOW_ID_16, (s32)basic_window_update);
}
D_8010D640 = 1;
break;
@ -636,18 +636,18 @@ s32 popup_menu_update(void) {
case 8:
case 9:
case 12:
set_window_update(0xE, WINDOW_UPDATE_HIDE);
set_window_update(0x13, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_14, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_19, WINDOW_UPDATE_HIDE);
break;
case 1:
case 4:
set_window_update(0xE, WINDOW_UPDATE_HIDE);
set_window_update(0x13, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_14, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_19, WINDOW_UPDATE_HIDE);
break;
case 10:
case 11:
case 13:
set_window_update(0xE, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_14, WINDOW_UPDATE_HIDE);
break;
}
destroy_popup_menu();
@ -688,14 +688,14 @@ s32 popup_menu_update(void) {
gPopupMenu->result = -1;
return 0;
case 31:
set_window_update(0xE, WINDOW_UPDATE_HIDE);
set_window_update(0x13, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_14, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_19, WINDOW_UPDATE_HIDE);
if (D_8010D68E != 0) {
set_window_update(0x15, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_21, WINDOW_UPDATE_HIDE);
}
width = get_msg_width(0x1D006B, 0) + 23;
set_window_properties(9, 160 - (width / 2), 0x50, width, 0x28, 0x14, func_800F4CF0, NULL, -1);
set_window_update(9, WINDOW_UPDATE_SHOW);
set_window_update(WINDOW_ID_9, WINDOW_UPDATE_SHOW);
D_8010D644 = 0x3C;
D_8010D640 = 0x20;
return 0;
@ -707,11 +707,11 @@ s32 popup_menu_update(void) {
D_8010D644--;
return 0;
}
set_window_update(9, WINDOW_UPDATE_HIDE);
set_window_update(0xE, WINDOW_UPDATE_SHOW);
set_window_update(0x13, WINDOW_UPDATE_SHOW);
set_window_update(WINDOW_ID_9, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_14, WINDOW_UPDATE_SHOW);
set_window_update(WINDOW_ID_19, WINDOW_UPDATE_SHOW);
if (D_8010D68E != 0) {
set_window_update(0x15, WINDOW_UPDATE_SHOW);
set_window_update(WINDOW_ID_21, WINDOW_UPDATE_SHOW);
}
D_8010D640 = 1;
gPopupMenu->result = 0;
@ -749,18 +749,18 @@ s32 popup_menu_update(void) {
case 8:
case 9:
case 12:
set_window_update(0xE, WINDOW_UPDATE_HIDE);
set_window_update(0x13, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_14, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_19, WINDOW_UPDATE_HIDE);
break;
case 1:
case 4:
set_window_update(0xE, WINDOW_UPDATE_HIDE);
set_window_update(0x13, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_14, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_19, WINDOW_UPDATE_HIDE);
break;
case 10:
case 11:
case 13:
set_window_update(0xE, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_14, WINDOW_UPDATE_HIDE);
break;
}
@ -772,14 +772,14 @@ s32 popup_menu_update(void) {
}
width = get_msg_width(msgID, 0) + 23;
set_window_properties(0x15, 160 - (width / 2), 76, width, 32, 0x13, func_800F4C1C, NULL, -1);
set_window_update(0x15, WINDOW_UPDATE_SHOW);
set_window_update(WINDOW_ID_21, WINDOW_UPDATE_SHOW);
D_8010D6A0 = msg_get_printer_for_msg(0x1E001D, &D_8010D6A4);
msg_printer_set_origin_pos(D_8010D6A0, 160, 0x90);
D_8010D640 = 0x65;
break;
case 101:
if (D_8010D6A4 == 1) {
set_window_update(0x15, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_21, WINDOW_UPDATE_HIDE);
switch (D_8010D6A0->currentOption) {
case 0:
D_8010D640 = 0x66;
@ -825,18 +825,18 @@ s32 popup_menu_update(void) {
case 8:
case 9:
case 12:
set_window_update(0xE, WINDOW_UPDATE_SHOW);
set_window_update(0x13, WINDOW_UPDATE_SHOW);
set_window_update(WINDOW_ID_14, WINDOW_UPDATE_SHOW);
set_window_update(WINDOW_ID_19, WINDOW_UPDATE_SHOW);
break;
case 1:
case 4:
set_window_update(0xE, WINDOW_UPDATE_SHOW);
set_window_update(0x13, WINDOW_UPDATE_SHOW);
set_window_update(WINDOW_ID_14, WINDOW_UPDATE_SHOW);
set_window_update(WINDOW_ID_19, WINDOW_UPDATE_SHOW);
break;
case 10:
case 11:
case 13:
set_window_update(0xE, WINDOW_UPDATE_SHOW);
set_window_update(WINDOW_ID_14, WINDOW_UPDATE_SHOW);
break;
}
D_8010D690 = 0xA;

View File

@ -1,5 +1,6 @@
#include "common.h"
#include "effects.h"
#include "hud_element.h"
#define MAX_ITEM_ENTITIES 256
@ -11,16 +12,26 @@ extern ItemEntity* D_801561A0[MAX_ITEM_ENTITIES];
extern ItemEntity** D_801565A0; // item entity list
extern s16 D_801565A4;
extern s16 D_801565A8;
extern s32 D_80155D80;
extern s16 D_80155D8C;
extern s16 D_80155D8E;
extern s16 D_80155D90;
void item_entity_load(ItemEntity* itemEntity);
extern s32* SparkleScript_Coin;
void item_entity_load(ItemEntity*);
void item_entity_update(ItemEntity*);
void appendGfx_item_entity(void*);
void draw_item_entities(void);
void func_80132D94(void);
void func_8013559C(ItemEntity* itemEntity);
s32 test_item_player_collision(ItemEntity*);
void update_item_entity_collectable(ItemEntity*);
void func_8013559C(ItemEntity*);
void update_item_entity_static(ItemEntity*);
void func_801356C4(void);
void func_801356CC(ItemEntity*);
void func_801356D4(void);
void update_item_entity_temp(ItemEntity*);
INCLUDE_ASM(s32, "C50A0", draw_ci_image_with_clipping);
@ -59,16 +70,13 @@ s32 sparkle_script_step(ItemEntity* itemEntity) {
itemEntity->unk_44 = *currentState++;
itemEntity->currentState = currentState;
break;
case 2:
itemEntity->currentState = itemEntity->sequenceStart;
return 1;
return TRUE;
case 3:
itemEntity->sequenceStart = currentState;
itemEntity->currentState = currentState;
return 1;
return TRUE;
case 7:
itemEntity->framesLeft = *currentState++;
itemEntity->unk_4C = *currentState++;
@ -77,16 +85,13 @@ s32 sparkle_script_step(ItemEntity* itemEntity) {
itemEntity->unk_58 = *currentState++;
itemEntity->currentState = currentState;
break;
case 4:
itemEntity->currentState = currentState++;
itemEntity->currentState = currentState++;
case 0:
return 1;
return TRUE;
}
return 0;
return FALSE;
}
void sparkle_script_update(ItemEntity* itemEntity) {
@ -183,10 +188,95 @@ INCLUDE_ASM(s32, "C50A0", make_item_entity_at_player);
INCLUDE_ASM(s32, "C50A0", item_entity_update);
INCLUDE_ASM(s32, "C50A0", update_item_entities);
void update_item_entities(void) {
ItemEntity* entity;
ItemEntity* entity2;
f32 x, y, z, hitDepth;
s32 coin;
s32 i;
if (!(gOverrideFlags & 0xC00)) {
for (i = 0; i < 0x100; i++) {
entity = D_801565A0[i];
if (entity != NULL && entity->flags != 0) {
if (entity->itemID == ITEM_COIN) {
if (rand_int(100) > 90) {
sparkle_script_init(entity, &SparkleScript_Coin);
D_80155D8C = rand_int(16) - 8;
D_80155D8E = rand_int(16) - 8;
D_80155D90 = 5;
}
sparkle_script_update(entity);
}
item_entity_update(entity);
switch (entity->type) {
case 0:
update_item_entity_static(entity);
break;
case 1:
case 2:
func_801356CC(entity);
break;
case 3:
case 12:
case 16:
case 20:
case 23:
update_item_entity_collectable(entity);
break;
case 28:
update_item_entity_temp(entity);
break;
}
entity = D_801565A0[i];
if (entity != NULL) {
s32 xs, ys, zs;
switch (entity->type) {
case 0:
case 3:
case 12:
case 16:
case 28:
xs = entity->position.x;
ys = entity->position.y;
zs = entity->position.z;
if (xs != entity->unk_34.x || ys != entity->unk_34.y || zs != entity->unk_34.z) {
Shadow* shadow = get_shadow_by_index(entity->shadowIndex);
x = entity->position.x;
y = entity->position.y + 12.0f;
z = entity->position.z;
hitDepth = 1000.0f;
npc_raycast_down_sides(0x20000, &x, &y, &z, &hitDepth);
shadow->position.x = x;
shadow->position.y = y;
shadow->position.z = z;
shadow->rotation.x = gGameStatusPtr->playerGroundTraceAngles.x;
shadow->rotation.y = 0.0f;
shadow->rotation.z = gGameStatusPtr->playerGroundTraceAngles.z;
set_standard_shadow_scale(shadow, hitDepth * 0.5f);
}
break;
}
entity->unk_34.x = entity->position.x;
entity->unk_34.y = entity->position.y;
entity->unk_34.z = entity->position.z;
}
}
do {} while (0); // required to match
}
}
}
INCLUDE_ASM(s32, "C50A0", appendGfx_item_entity);
void appendGfx_item_entity(void* itemEntity);
void draw_item_entities(void) {
RenderTask rt;
@ -318,7 +408,6 @@ void func_80133A94(s32 idx, s32 itemID) {
item_entity_load(item);
}
s32 test_item_player_collision(ItemEntity* itemEntity);
INCLUDE_ASM(s32, "C50A0", test_item_player_collision);
s32 test_item_entity_position(f32 x, f32 y, f32 z, f32 dist) {
@ -443,7 +532,7 @@ void func_8013559C(ItemEntity* itemEntity) {
}
void update_item_entity_static(ItemEntity* itemEntity) {
if ((s8)itemEntity->state == 0 && test_item_player_collision(itemEntity)) {
if (itemEntity->state == 0 && test_item_player_collision(itemEntity)) {
D_801565A4 = 1;
itemEntity->type = 28;
itemEntity->state = 0;
@ -455,7 +544,7 @@ void update_item_entity_static(ItemEntity* itemEntity) {
void func_801356C4(void) {
}
void func_801356CC(void) {
void func_801356CC(ItemEntity* itemEntity) {
}
void func_801356D4(void) {
@ -471,7 +560,7 @@ void func_801369D0(s32 arg1, s32 x, s32 y) {
draw_msg(0x1D0060, x + 12, y + 4, 255, 52, 0);
}
void func_80136A08(ItemEntity* itemEntity, s32 posX, s32 arg2) {
void func_80136A08(ItemEntity* itemEntity, s32 posX, s32 posY) {
ItemData* itemData = &gItemTable[itemEntity->itemID];
s32 itemMsg;
@ -481,7 +570,7 @@ void func_80136A08(ItemEntity* itemEntity, s32 posX, s32 arg2) {
case 10:
case 11:
itemMsg = itemData->itemMsg;
draw_msg(itemMsg, posX + 8, arg2, 255, 0xA, 0);
draw_msg(itemMsg, posX + 8, posY, 255, 0xA, 0);
break;
}
}

View File

@ -32,7 +32,6 @@ extern Gfx D_802B7C00_E231B0[];
extern void (*D_8010C93C)(void);
extern struct802B7C78* D_802B7C78_E23228;
extern struct8015A578 D_8015A578;
void fold_appendGfx_component(s32, UnknownCommand*, s32, Matrix4f*);
void func_802B735C_E2290C(void);
@ -172,7 +171,7 @@ void func_802B735C_E2290C(void) {
}
}
if (D_802B7C78_E23228->unk_18++ >= 0x33) {
if (D_802B7C78_E23228->unk_18++ > 50) {
D_8015A578.unk_02 = 0;
D_8010C93C = NULL;
playerStatus->animFlags &= ~0x100;

View File

@ -1015,7 +1015,6 @@ extern RenderTask* mdl_renderTaskLists[3];
extern s32 mdl_renderTaskMode;
extern s32 mdl_renderTaskCount; // num render task entries?
extern s8 D_8015A578;
extern TextureHandle mdl_textureHandles[128];
extern RenderTask mdl_clearRenderTasks[3][0x100];
@ -1035,6 +1034,9 @@ void entity_free_static_data(EntityBlueprint* data);
void update_entity_shadow_position(Entity* entity);
s32 entity_raycast_down(f32* x, f32* y, f32* z, f32* hitYaw, f32* hitPitch, f32* hitLength);
void func_80117D00(Model* model);
void appendGfx_model_group(Model* model);
void render_transform_group_node(ModelNode* node);
void render_transform_group(ModelTransformGroup* group);
void load_model_transforms(ModelNode* model, ModelNode* parent, Matrix4f mdlTxMtx, s32 treeDepth);
void enable_transform_group(u16 modelID);
@ -1156,7 +1158,7 @@ void update_entities(void) {
}
update_shadows();
D_8015A578 = 0;
D_8015A578.unk_00 = 0;
}
void update_shadows(void) {
@ -2228,7 +2230,7 @@ s32 is_block_on_ground(Entity* block) {
ret = hitLength;
if (ret == 32767) {
ret = 0;
ret = FALSE;
}
return ret;
@ -2237,26 +2239,20 @@ s32 is_block_on_ground(Entity* block) {
void state_delegate_NOP(void) {
}
// Dumb temp and weird i decrement and temp increment stuff needed to match
void clear_game_modes(void) {
GameMode* state = &gMainGameState[0];
GameMode* gameMode;
s32 i;
for (i = ARRAY_COUNT(gMainGameState) - 1; i >= 0; i--, state++) {
state->flags = 0;
for (gameMode = gMainGameState, i = 0; i < ARRAY_COUNT(gMainGameState); i++, gameMode++) {
gameMode->flags = 0;
}
}
// weird ordering at the beginning
#ifndef NON_EQUIVALENT
INCLUDE_ASM(s32, "a5dd0_len_114e0", set_next_game_mode);
#else
GameMode* set_next_game_mode(GameMode* arg0) {
GameMode* gameMode;
s32 i;
for (i = 0; i < ARRAY_COUNT(gMainGameState); i++) {
gameMode = &gMainGameState[i];
for (gameMode = gMainGameState, i = 0; i < ARRAY_COUNT(gMainGameState); i++, gameMode++) {
if (gameMode->flags == 0) {
break;
}
@ -2288,7 +2284,6 @@ GameMode* set_next_game_mode(GameMode* arg0) {
return gameMode;
}
#endif
GameMode* set_game_mode_slot(s32 i, GameMode* arg0) {
GameMode* gameMode = &gMainGameState[i];
@ -2627,7 +2622,278 @@ INCLUDE_ASM(s32, "a5dd0_len_114e0", func_80116674);
INCLUDE_ASM(s32, "a5dd0_len_114e0", func_80116698);
// this function has weird control flow and suqqz
#ifdef NON_EQUIVALENT
void render_models(void) {
Camera* camera = &gCameras[gCurrentCameraID];
s32 distance;
s32 cond;
s32 i;
RenderTask rt;
RenderTask* rtPtr = &rt;
f32 sp38;
f32 sp3C;
f32 sp40;
f32 sp44;
f32 sp48;
f32 sp4C;
f32 sp50;
f32 sp54;
f32 sp58;
f32 sp5C;
f32 sp60;
f32 sp64;
f32 sp68;
f32 sp6C;
f32 sp70;
f32 sp74;
f32 sp78;
f32 sp7C;
f32 sp80;
f32 sp84;
f32 centerX, centerY, centerZ;
f32 sp98;
f32 spA0;
f32 temp_f0;
f32 temp_f0_2;
f32 temp_f0_3;
f32 temp_f0_4;
f32 temp_f0_5;
f32 temp_f0_6;
f32 temp_f0_7;
f32 temp_f0_8;
f32 temp_f12;
f32 temp_f12_10;
f32 temp_f12_11;
f32 temp_f12_12;
f32 temp_f12_13;
f32 temp_f12_14;
f32 temp_f12_15;
f32 temp_f12_16;
f32 temp_f12_2;
f32 temp_f12_3;
f32 temp_f12_4;
f32 temp_f12_5;
f32 temp_f12_6;
f32 temp_f12_7;
f32 temp_f12_8;
f32 temp_f12_9;
f32 temp_f20;
f32 temp_f20_2;
f32 temp_f20_3;
f32 temp_f20_4;
f32 temp_f20_5;
f32 temp_f20_6;
f32 temp_f20_7;
f32 temp_f20_8;
f32 temp_f26;
f32 temp_f28;
f32 temp_f2;
f32 temp_f2_2;
f32 temp_f2_3;
f32 temp_f2_4;
f32 temp_f2_5;
f32 temp_f2_6;
f32 temp_f2_7;
f32 temp_f2_8;
f32 temp_f4;
f32 temp_f4_10;
f32 temp_f4_11;
f32 temp_f4_12;
f32 temp_f4_13;
f32 temp_f4_14;
f32 temp_f4_15;
f32 temp_f4_16;
f32 temp_f4_17;
f32 temp_f4_18;
f32 temp_f4_19;
f32 temp_f4_20;
f32 temp_f4_21;
f32 temp_f4_22;
f32 temp_f4_23;
f32 temp_f4_24;
f32 temp_f4_2;
f32 temp_f4_3;
f32 temp_f4_4;
f32 temp_f4_5;
f32 temp_f4_6;
f32 temp_f4_7;
f32 temp_f4_8;
f32 temp_f4_9;
f32 temp_f6;
f32 temp_f6_2;
f32 temp_f6_3;
f32 temp_f6_4;
f32 temp_f6_5;
f32 temp_f6_6;
f32 temp_f6_7;
f32 temp_f6_8;
f32 temp_f8;
f32 temp_f8_2;
f32 temp_f8_3;
f32 temp_f8_4;
f32 temp_f8_5;
f32 temp_f8_6;
f32 temp_f8_7;
f32 temp_f8_8;
sp48 = camera->perspectiveMatrix[0][0];
sp4C = camera->perspectiveMatrix[0][1];
sp50 = camera->perspectiveMatrix[0][2];
sp54 = camera->perspectiveMatrix[0][3];
sp58 = camera->perspectiveMatrix[1][0];
sp5C = camera->perspectiveMatrix[1][1];
sp60 = camera->perspectiveMatrix[1][2];
sp64 = camera->perspectiveMatrix[1][3];
sp68 = camera->perspectiveMatrix[2][0];
sp6C = camera->perspectiveMatrix[2][1];
sp70 = camera->perspectiveMatrix[2][2];
sp74 = camera->perspectiveMatrix[2][3];
sp78 = camera->perspectiveMatrix[3][0];
sp7C = camera->perspectiveMatrix[3][1];
sp80 = camera->perspectiveMatrix[3][2];
sp84 = camera->perspectiveMatrix[3][3];
for (i = 0; i < ARRAY_COUNT(*gCurrentModels); i++) {
Model* model = (*gCurrentModels)[i];
if (model != NULL) {
if (model->flags == 0) {
continue;
}
if (model->flags & 4) {
continue;
}
if (model->flags & 2) {
continue;
}
if (model->flags & 0x20) {
continue;
}
if (model->flags & 0x8) {
continue;
}
centerX = model->center.x;
centerY = model->center.y;
centerZ = model->center.z;
if (model->flags & 0x200) {
ModelNodeProperty* propertyList = model->modelNode->propertyList;
temp_f26 = (f32) propertyList->dataType;
sp98 = temp_f26;
spA0 = (f32) propertyList[1].dataType;
temp_f28 = (f32) propertyList[1].key;
temp_f4 = centerX - temp_f26;
temp_f12 = centerY - spA0;
temp_f20 = centerZ - temp_f28;
temp_f6 = (sp48 * temp_f4) + (sp58 * temp_f12) + (sp68 * temp_f20) + sp78;
temp_f8 = (sp4C * temp_f4) + (sp5C * temp_f12) + (sp6C * temp_f20) + sp7C;
temp_f2 = (sp50 * temp_f4) + (sp60 * temp_f12) + (sp70 * temp_f20) + sp80;
temp_f4_2 = (sp54 * temp_f4) + (sp64 * temp_f12) + (sp74 * temp_f20) + sp84;
cond = FALSE;
if ((temp_f4_2 != 0.0f) &&
((temp_f0 = 1.0f / temp_f4_2, temp_f4_3 = temp_f6 * temp_f0, temp_f12_2 = temp_f8 * temp_f0, !((temp_f2 * temp_f0) > -1.0f)) || !(temp_f4_3 >= -1.0f) || !(temp_f4_3 <= 1.0f) || !(temp_f12_2 >= -1.0f) || !(temp_f12_2 <= 1.0f)) && ((sp98 == 0.0f) || ((temp_f4_4 = centerX + sp98, temp_f12_3 = centerY - spA0, temp_f20_2 = centerZ - temp_f28, temp_f6_2 = (sp48 * temp_f4_4) + (sp58 * temp_f12_3) + (sp68 * temp_f20_2) + sp78, temp_f8_2 = (sp4C * temp_f4_4) + (sp5C * temp_f12_3) + (sp6C * temp_f20_2) + sp7C, temp_f2_2 = (sp50 * temp_f4_4) + (sp60 * temp_f12_3) + (sp70 * temp_f20_2) + sp80, temp_f4_5 = (sp54 * temp_f4_4) + (sp64 * temp_f12_3) + (sp74 * temp_f20_2) + sp84, (temp_f4_5 != 0.0f)) && ((temp_f0_2 = 1.0f / temp_f4_5, temp_f4_6 = temp_f6_2 * temp_f0_2, temp_f12_4 = temp_f8_2 * temp_f0_2, !((temp_f2_2 * temp_f0_2) > -1.0f)) || !(temp_f4_6 >= -1.0f) || !(temp_f4_6 <= 1.0f) || !(temp_f12_4 >= -1.0f) || !(temp_f12_4 <= 1.0f)))) && ((spA0 == 0.0f) || ((temp_f4_7 = centerX - sp98, temp_f12_5 = centerY + spA0, temp_f20_3 = centerZ - temp_f28, temp_f6_3 = (sp48 * temp_f4_7) + (sp58 * temp_f12_5) + (sp68 * temp_f20_3) + sp78, temp_f8_3 = (sp4C * temp_f4_7) + (sp5C * temp_f12_5) + (sp6C * temp_f20_3) + sp7C, temp_f2_3 = (sp50 * temp_f4_7) + (sp60 * temp_f12_5) + (sp70 * temp_f20_3) + sp80, temp_f4_8 = (sp54 * temp_f4_7) + (sp64 * temp_f12_5) + (sp74 * temp_f20_3) + sp84, (temp_f4_8 != 0.0f)) && ((temp_f0_3 = 1.0f / temp_f4_8, temp_f4_9 = temp_f6_3 * temp_f0_3, temp_f12_6 = temp_f8_3 * temp_f0_3, !((temp_f2_3 * temp_f0_3) > -1.0f)) || !(temp_f4_9 >= -1.0f) || !(temp_f4_9 <= 1.0f) || !(temp_f12_6 >= -1.0f) || !(temp_f12_6 <= 1.0f))))) {
if ((sp98 != 0.0f) && (spA0 != 0.0f)) {
temp_f4_10 = centerX + sp98;
temp_f12_7 = centerY + spA0;
temp_f20_4 = centerZ - temp_f28;
temp_f6_4 = (sp48 * temp_f4_10) + (sp58 * temp_f12_7) + (sp68 * temp_f20_4) + sp78;
temp_f8_4 = (sp4C * temp_f4_10) + (sp5C * temp_f12_7) + (sp6C * temp_f20_4) + sp7C;
temp_f2_4 = (sp50 * temp_f4_10) + (sp60 * temp_f12_7) + (sp70 * temp_f20_4) + sp80;
temp_f4_11 = (sp54 * temp_f4_10) + (sp64 * temp_f12_7) + (sp74 * temp_f20_4) + sp84;
if (temp_f4_11 != 0.0f) {
temp_f0_4 = 1.0f / temp_f4_11;
temp_f4_12 = temp_f6_4 * temp_f0_4;
temp_f12_8 = temp_f8_4 * temp_f0_4;
if (((temp_f2_4 * temp_f0_4) > -1.0f) && (temp_f4_12 >= -1.0f) && (temp_f4_12 <= 1.0f) && (temp_f12_8 >= -1.0f)) {
if (!(temp_f12_8 <= 1.0f)) {
goto block_36;
}
} else {
goto block_37;
}
}
} else {
block_36:
block_37:
if (((temp_f28 == 0.0f) || ((temp_f4_13 = centerX - sp98, temp_f12_9 = centerY - spA0, temp_f20_5 = centerZ + temp_f28, temp_f6_5 = (sp48 * temp_f4_13) + (sp58 * temp_f12_9) + (sp68 * temp_f20_5) + sp78, temp_f8_5 = (sp4C * temp_f4_13) + (sp5C * temp_f12_9) + (sp6C * temp_f20_5) + sp7C, temp_f2_5 = (sp50 * temp_f4_13) + (sp60 * temp_f12_9) + (sp70 * temp_f20_5) + sp80, temp_f4_14 = (sp54 * temp_f4_13) + (sp64 * temp_f12_9) + (sp74 * temp_f20_5) + sp84, (temp_f4_14 != 0.0f)) && ((temp_f0_5 = 1.0f / temp_f4_14, temp_f4_15 = temp_f6_5 * temp_f0_5, temp_f12_10 = temp_f8_5 * temp_f0_5, !((temp_f2_5 * temp_f0_5) > -1.0f)) || !(temp_f4_15 >= -1.0f) || !(temp_f4_15 <= 1.0f) || !(temp_f12_10 >= -1.0f) || !(temp_f12_10 <= 1.0f)))) && ((sp98 == 0.0f) || (temp_f28 == 0.0f) || ((temp_f4_16 = centerX + sp98, temp_f12_11 = centerY - spA0, temp_f20_6 = centerZ + temp_f28, temp_f6_6 = (sp48 * temp_f4_16) + (sp58 * temp_f12_11) + (sp68 * temp_f20_6) + sp78, temp_f8_6 = (sp4C * temp_f4_16) + (sp5C * temp_f12_11) + (sp6C * temp_f20_6) + sp7C, temp_f2_6 = (sp50 * temp_f4_16) + (sp60 * temp_f12_11) + (sp70 * temp_f20_6) + sp80, temp_f4_17 = (sp54 * temp_f4_16) + (sp64 * temp_f12_11) + (sp74 * temp_f20_6) + sp84, (temp_f4_17 != 0.0f)) && ((temp_f0_6 = 1.0f / temp_f4_17, temp_f4_18 = temp_f6_6 * temp_f0_6, temp_f12_12 = temp_f8_6 * temp_f0_6, !((temp_f2_6 * temp_f0_6) > -1.0f)) || !(temp_f4_18 >= -1.0f) || !(temp_f4_18 <= 1.0f) || !(temp_f12_12 >= -1.0f) || !(temp_f12_12 <= 1.0f)))) && ((spA0 == 0.0f) || (temp_f28 == 0.0f) || ((temp_f4_19 = centerX - sp98, temp_f12_13 = centerY + spA0, temp_f20_7 = centerZ + temp_f28, temp_f6_7 = (sp48 * temp_f4_19) + (sp58 * temp_f12_13) + (sp68 * temp_f20_7) + sp78, temp_f8_7 = (sp4C * temp_f4_19) + (sp5C * temp_f12_13) + (sp6C * temp_f20_7) + sp7C, temp_f2_7 = (sp50 * temp_f4_19) + (sp60 * temp_f12_13) + (sp70 * temp_f20_7) + sp80, temp_f4_20 = (sp54 * temp_f4_19) + (sp64 * temp_f12_13) + (sp74 * temp_f20_7) + sp84, (temp_f4_20 != 0.0f)) && ((temp_f0_7 = 1.0f / temp_f4_20, temp_f4_21 = temp_f6_7 * temp_f0_7, temp_f12_14 = temp_f8_7 * temp_f0_7, !((temp_f2_7 * temp_f0_7) > -1.0f)) || !(temp_f4_21 >= -1.0f) || !(temp_f4_21 <= 1.0f) || !(temp_f12_14 >= -1.0f) || !(temp_f12_14 <= 1.0f)))) && ((sp98 == 0.0f) || (spA0 == 0.0f) || (temp_f28 == 0.0f) || ((temp_f4_22 = centerX + sp98, temp_f12_15 = centerY + spA0, temp_f20_8 = centerZ + temp_f28, temp_f6_8 = (sp48 * temp_f4_22) + (sp58 * temp_f12_15) + (sp68 * temp_f20_8) + sp78, temp_f8_8 = (sp4C * temp_f4_22) + (sp5C * temp_f12_15) + (sp6C * temp_f20_8) + sp7C, temp_f2_8 = (sp50 * temp_f4_22) + (sp60 * temp_f12_15) + (sp70 * temp_f20_8) + sp80, temp_f4_23 = (sp54 * temp_f4_22) + (sp64 * temp_f12_15) + (sp74 * temp_f20_8) + sp84, (temp_f4_23 != 0.0f)) && ((temp_f0_8 = 1.0f / temp_f4_23, temp_f4_24 = temp_f6_8 * temp_f0_8, temp_f12_16 = temp_f8_8 * temp_f0_8, !((temp_f2_8 * temp_f0_8) > -1.0f)) || !(temp_f4_24 >= -1.0f) || !(temp_f4_24 <= 1.0f) || !(temp_f12_16 >= -1.0f) || !(temp_f12_16 <= 1.0f))))) {
cond = TRUE;
}
}
}
if (cond) {
continue;
}
}
transform_point(camera->perspectiveMatrix[0], centerX, centerY, centerZ, 1.0f, &sp38, &sp3C, &sp40, &sp44);
distance = sp40 + 5000.0f;
if (distance < 0) {
distance = 0;
} else if (distance > 10000) {
distance = 10000;
}
rtPtr->appendGfxArg = model;
if (model->modelNode->type == SHAPE_TYPE_GROUP) {
rtPtr->appendGfx = appendGfx_model_group;
} else {
rtPtr->appendGfx = appendGfx_model;
}
rtPtr->distance = -distance;
rtPtr->renderMode = model->renderMode;
queue_render_task(rtPtr);
}
}
for (i = 0; i < ARRAY_COUNT(*gCurrentTransformGroups); i++) {
ModelTransformGroup* group = (*gCurrentTransformGroups)[i];
f32 centerX, centerY, centerZ;
s32 distance;
if (group == NULL) {
continue;
}
if (group->flags == 0) {
continue;
}
if (group->flags & MODEL_TRANSFORM_GROUP_FLAGS_4) {
continue;
}
centerX = group->center.x;
centerY = group->center.y;
centerZ = group->center.z;
transform_point(camera->perspectiveMatrix, centerX, centerY, centerZ, 1.0f, &sp38, &sp3C, &sp40, &sp44);
if (sp44 == 0.0f) {
sp44 = 1.0f;
}
distance = (sp40 / sp44) * 10000.0f;
if (!(group->flags & MODEL_TRANSFORM_GROUP_FLAGS_2)) {
rtPtr->appendGfx = render_transform_group;
rtPtr->appendGfxArg = group;
rtPtr->distance = -distance;
rtPtr->renderMode = group->renderMode;
queue_render_task(rtPtr);
}
}
}
#else
INCLUDE_ASM(s32, "a5dd0_len_114e0", render_models);
#endif
void appendGfx_model_group(Model* model) {
s32 modelTreeDepth = (*mdl_currentModelTreeNodeInfo)[model->modelID].treeDepth;
@ -3306,7 +3572,13 @@ void mdl_get_vertex_count(Gfx* gfx, s32* numVertices, s32* baseVtx, s32* gfxCoun
INCLUDE_ASM(s32, "a5dd0_len_114e0", mdl_local_gfx_update_vtx_pointers);
INCLUDE_ASM(s32, "a5dd0_len_114e0", mdl_local_gfx_copy_vertices);
void mdl_local_gfx_copy_vertices(u8* from, s32 num, u8* to) {
u32 i;
for (i = 0; i < num * 16; i++) {
to[i] = from[i];
}
}
INCLUDE_ASM(s32, "a5dd0_len_114e0", mdl_make_local_vertex_copy);

View File

@ -26,10 +26,7 @@ BSS s32 D_8010C958;
BSS s32 D_8010C95C;
BSS s32 D_8010C960;
BSS s32 D_8010C964;
BSS s8 D_8010C968;
BSS char D_8010C969;
BSS char D_8010C96A;
BSS s8 D_8010C96B;
BSS s32 D_8010C968;
BSS s32 D_8010C96C;
BSS s32 D_8010C970;
BSS s32 D_8010C974;
@ -63,9 +60,9 @@ BSS s32 D_8010CD20;
BSS char D_8010CD24[0xC];
BSS s32 D_8010CD30;
BSS s32 D_8010CD34;
BSS s32 PlayerMoveHistory;
BSS s32 gPlayerMoveHistory;
BSS char D_8010CD3C[0x27C];
BSS s32 PlayerMoveHistoryIndex;
BSS s32 gPlayerMoveHistoryIndex;
BSS s32 D_8010CFBC;
BSS s32 wPartnerTetherDistance;
BSS s32 D_8010CFC4;

View File

@ -239,7 +239,7 @@ s32 bgm_set_song(s32 playerIndex, s32 songID, s32 variation, s32 fadeOutTime, s1
s32 func_8014A964(s32 playerIndex, s32 songID, s32 variation, s32 fadeInTime, s16 arg4, s16 arg5) {
if (gGameStatusPtr->demoState != 0) {
return 1;
return TRUE;
} else {
MusicSettings* musicSetting = &gMusicSettings[playerIndex];
@ -247,7 +247,7 @@ s32 func_8014A964(s32 playerIndex, s32 songID, s32 variation, s32 fadeInTime, s1
func_800559C4(musicSetting->songName);
musicSetting->flags &= ~MUSIC_SETTINGS_FLAGS_1;
return 1;
return TRUE;
} else {
s32 defaultVariation = bgm_get_map_default_variation(songID);
if (defaultVariation >= 0) {
@ -263,7 +263,7 @@ s32 func_8014A964(s32 playerIndex, s32 songID, s32 variation, s32 fadeInTime, s1
musicSetting->unk_02 = 1;
musicSetting->flags &= ~MUSIC_SETTINGS_FLAGS_2;
return 1;
return TRUE;
}
}
}
@ -272,11 +272,11 @@ s32 func_8014AA54(s32 playerIndex, s32 arg1, s16 arg2) {
MusicSettings* musicSetting = &gMusicSettings[playerIndex];
if (!(musicSetting->flags & MUSIC_SETTINGS_FLAGS_1)) {
return 0;
return FALSE;
}
if (!(musicSetting->flags & MUSIC_SETTINGS_FLAGS_2)) {
return 0;
return FALSE;
}
switch (arg2) {
@ -290,8 +290,7 @@ s32 func_8014AA54(s32 playerIndex, s32 arg1, s16 arg2) {
func_80056068(musicSetting->songName, arg1);
break;
}
return 1;
return TRUE;
}
s32 func_8014AB0C(s32 playerIndex, s16 arg1) {
@ -367,25 +366,21 @@ void bgm_update_volume(void) {
}
}
// can't figure out the loop
#ifdef NON_EQUIVALENT
s32 func_8014AD40(void) {
MusicSettings* settings = &gMusicSettings[0];
s32 i;
for (i = 0; i < 2; i++) {
if (!(gMusicSettings[i].flags & MUSIC_SETTINGS_FLAGS_1)) {
for (i = 0; i < 2; i++, settings++) {
if (!(settings->flags & MUSIC_SETTINGS_FLAGS_1)) {
continue;
}
if (func_800559FC(gMusicSettings[i].songName) != 0) {
return 1;
if (func_800559FC(settings->songName)) {
return TRUE;
}
}
return 0;
return FALSE;
}
#else
INCLUDE_ASM(s32, "e0b30_len_b80", func_8014AD40);
#endif
void bgm_pop_song(void) {
MusicSettings* musicSetting = &gMusicSettings[0];

66
src/entity/103CD0.c Normal file
View File

@ -0,0 +1,66 @@
#include "common.h"
void entity_shattering_setupGfx(s32 entityIndex);
void entity_BrickBlock_idle(Entity* entity) {
entity_base_block_idle(entity);
}
INCLUDE_ASM(void, "entity/103CD0", entity_shattering_init_pieces, Entity* entity, void* arg1, void* arg2);
INCLUDE_ASM(void, "entity/103CD0", entity_shattering_idle, Entity* entity);
#ifdef NON_EQUIVALENT
// display list issues
void entity_shattering_setupGfx(s32 entityIndex) {
Gfx* temp_s2;
SwitchData* data;
struct802E2BA4* phi_fp;
Matrix4f subroutine_arg6;
Matrix4f subroutine_arg16;
Matrix4f subroutine_arg36;
Matrix4f subroutine_arg48;
s32 i;
f32 x_inv;
f32 y_inv;
f32 z_inv;
Entity* entity;
f32 threeSixty;
f32 someFloat;
f32 one;
s16 temp;
temp_s2 = gMasterGfxPos;
threeSixty = 360.0f;
someFloat = 0.00390625f;
entity = get_entity_by_index(entityIndex);
data = entity->dataBuf.swtch;
x_inv = -entity->position.x;
y_inv = -entity->position.y;
z_inv = -entity->position.z;
phi_fp = data->renderYaw;
for (i = 0; i < 24; i++) {
if (data->unk_3C.s == 0xFF) {
gDPSetRenderMode(temp_s2++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2);
gDPSetCombineMode(temp_s2++, G_CC_MODULATEIA, G_CC_MODULATEIA);
} else {
gDPSetCombineLERP(temp_s2++, 0, 0, 0, TEXEL0, SHADE, 0, TEXEL0, 0, 0, 0, 0, TEXEL0, TEXEL0, 0, SHADE, 0);
gDPSetPrimColor(temp_s2++, 0, 0, 0x00, 0x00, 0x00, data->unk_3C.b[1])
}
guTranslateF(&subroutine_arg6, x_inv, y_inv, z_inv);
guRotateF(&subroutine_arg36, data->unk_8B[i] * threeSixty * someFloat, 1.0f, 0.0f, 0.0f);
guRotateF(&subroutine_arg48, data->unk_A4[i] * threeSixty * someFloat, 0.0f, 1.0f, 0.0f);
guMtxCatF(&subroutine_arg36, &subroutine_arg48, &subroutine_arg48);
guMtxCatF(&subroutine_arg48, &subroutine_arg6, &subroutine_arg6);
guTranslateF(&subroutine_arg16, data->unk_C0[i], data->unk_124[i], data->unk_188[i]);
guMtxCatF(&subroutine_arg6, &subroutine_arg16, &subroutine_arg16);
guMtxF2L(&subroutine_arg16, &gDisplayContext->matrixStack[gMatrixListPos]);
gSPMatrix(temp_s2++, &gDisplayContext->matrixStack[++gMatrixListPos], G_MTX_PUSH | G_MTX_MUL | G_MTX_MODELVIEW);
gSPDisplayList(temp_s2++, entity->vertexData + phi_fp->unk_02[i][0]);
gSPPopMatrix(temp_s2++, G_MTX_MODELVIEW);
}
gMasterGfxPos = temp_s2;
}
#else
INCLUDE_ASM(s32, "entity/103CD0", entity_shattering_setupGfx);
#endif

View File

@ -142,7 +142,9 @@ s32 D_802E99FC[7] = {
&D_0A003508, 0x00000002, 0x00000000,
};
EntityBlueprint Entity_SavePoint = { 0x4200, 0x0020, &D_802E99FC, {0, 0, 0, 0}, entity_SaveBlock_init, &D_802E9930, entity_block_handle_collision, E4B2E0_ROM_START, E4B2E0_ROM_END, 32, {0x19, 0x19, 0x19}};
EntityBlueprint Entity_SavePoint = {
0x4200, 0x0020, &D_802E99FC, {0, 0, 0, 0}, entity_SaveBlock_init, &D_802E9930, entity_block_handle_collision, E4B2E0_ROM_START, E4B2E0_ROM_END, 32, {0x19, 0x19, 0x19}
};
// potential file split(?)
s32 D_802E9A3C[1] = {
@ -198,10 +200,18 @@ s32 D_802E9B94[7] = {
(s32) &D_0A000740, 0x00000002, 0x00000000,
};
EntityBlueprint Entity_RedSwitch = { 0xA000, 0x002C, &D_802E9B78, {0, 0, 0, 0}, entity_base_switch_init, &D_802E9A40, NULL, E62AC0_ROM_START, E62AC0_ROM_END, ENTITY_TYPE_RED_SWITCH, {0x16, 0x17, 0x16} };
EntityBlueprint Entity_BlueSwitch = { 0xAA04, 0x002C, &D_802E9B40, {0, 0, 0, 0}, entity_BlueSwitch_init, &D_802E9AC4, NULL, E639C0_ROM_START, E639C0_ROM_END, ENTITY_TYPE_BLUE_SWITCH, {0x16, 0x17, 0x16} };
EntityBlueprint Entity_HugeBlueSwitch = { 0xAA04, 0x002C, &D_802E9B5C, {0, 0, 0, 0}, entity_HugeBlueSwitch_init, &D_802E9A88, NULL, E639C0_ROM_START, E639C0_ROM_END, ENTITY_TYPE_HUGE_BLUE_SWITCH, {0x42, 0x4B, 0x42} };
EntityBlueprint Entity_GreenStompSwitch = { 0xC000, 0x002C, &D_802E9B94, {0, 0, 0, 0}, entity_base_switch_init, &D_802E9B00, NULL, E62370_ROM_START, E62370_ROM_END, ENTITY_TYPE_GREEN_STOMP_SWITCH, {0x32, 0x0F, 0x32} };
EntityBlueprint Entity_RedSwitch = {
0xA000, 0x002C, &D_802E9B78, {0, 0, 0, 0}, entity_base_switch_init, &D_802E9A40, NULL, E62AC0_ROM_START, E62AC0_ROM_END, ENTITY_TYPE_RED_SWITCH, {0x16, 0x17, 0x16}
};
EntityBlueprint Entity_BlueSwitch = {
0xAA04, 0x002C, &D_802E9B40, {0, 0, 0, 0}, entity_BlueSwitch_init, &D_802E9AC4, NULL, E639C0_ROM_START, E639C0_ROM_END, ENTITY_TYPE_BLUE_SWITCH, {0x16, 0x17, 0x16}
};
EntityBlueprint Entity_HugeBlueSwitch = {
0xAA04, 0x002C, &D_802E9B5C, {0, 0, 0, 0}, entity_HugeBlueSwitch_init, &D_802E9A88, NULL, E639C0_ROM_START, E639C0_ROM_END, ENTITY_TYPE_HUGE_BLUE_SWITCH, {0x42, 0x4B, 0x42}
};
EntityBlueprint Entity_GreenStompSwitch = {
0xC000, 0x002C, &D_802E9B94, {0, 0, 0, 0}, entity_base_switch_init, &D_802E9B00, NULL, E62370_ROM_START, E62370_ROM_END, ENTITY_TYPE_GREEN_STOMP_SWITCH, {0x32, 0x0F, 0x32}
};
s32 D_802E9C40[12] = {
0x00000007, 0x00000020, 0x00000003, 0x00000000,
@ -214,13 +224,27 @@ s32 D_802E9C70[7] = {
(s32) &D_802E9828, 0x00000002, 0x00000000
};
EntityBlueprint Entity_ShatteringHammer1Block = { 0x0000, 0x0250, &D_802E9C70, {0, 0, 0, 0}, entity_shattering_block_init, &D_802E9C40, NULL, E32420_ROM_START, E32420_ROM_END, ENTITY_TYPE_HAMMER1_BLOCK, {0x10, 0x10, 0x10}};
EntityBlueprint Entity_ShatteringHammer2Block = { 0x0000, 0x0250, &D_802E9C70, {0, 0, 0, 0}, entity_shattering_block_init, &D_802E9C40, NULL, E35670_ROM_START, E35670_ROM_END, ENTITY_TYPE_HAMMER2_BLOCK, {0x10, 0x10, 0x10}};
EntityBlueprint Entity_ShatteringHammer3Block = { 0x0000, 0x0250, &D_802E9C70, {0, 0, 0, 0}, entity_shattering_block_init, &D_802E9C40, NULL, E38890_ROM_START, E38890_ROM_END, ENTITY_TYPE_HAMMER3_BLOCK, {0x10, 0x10, 0x10}};
EntityBlueprint Entity_ShatteringHammer1BlockTiny = { 0x0000, 0x0250, &D_802E9C70, {0, 0, 0, 0}, entity_shattering_block_init, &D_802E9C40, NULL, E32420_ROM_START, E32420_ROM_END, ENTITY_TYPE_HAMMER1_BLOCK_TINY, {0x08, 0x08, 0x08}};
EntityBlueprint Entity_ShatteringHammer2BlockTiny = { 0x0000, 0x0250, &D_802E9C70, {0, 0, 0, 0}, entity_shattering_block_init, &D_802E9C40, NULL, E35670_ROM_START, E35670_ROM_END, ENTITY_TYPE_HAMMER2_BLOCK_TINY, {0x08, 0x08, 0x08}};
EntityBlueprint Entity_ShatteringHammer3BlockTiny = { 0x0000, 0x0250, &D_802E9C70, {0, 0, 0, 0}, entity_shattering_block_init, &D_802E9C40, NULL, E38890_ROM_START, E38890_ROM_END, ENTITY_TYPE_HAMMER3_BLOCK_TINY, {0x08, 0x08, 0x08}};
EntityBlueprint Entity_ShatteringBrickBlock = { 0x0000, 0x0250, &D_802E9C70, {0, 0, 0, 0}, entity_shattering_block_init, &D_802E9C40, NULL, E3E260_ROM_START, E3E260_ROM_END, ENTITY_TYPE_BRICK_BLOCK, {0x08, 0x08, 0x08}};
EntityBlueprint Entity_ShatteringHammer1Block = {
0x0000, 0x0250, &D_802E9C70, {0, 0, 0, 0}, entity_shattering_block_init, &D_802E9C40, NULL, E32420_ROM_START, E32420_ROM_END, ENTITY_TYPE_HAMMER1_BLOCK, {0x10, 0x10, 0x10}
};
EntityBlueprint Entity_ShatteringHammer2Block = {
0x0000, 0x0250, &D_802E9C70, {0, 0, 0, 0}, entity_shattering_block_init, &D_802E9C40, NULL, E35670_ROM_START, E35670_ROM_END, ENTITY_TYPE_HAMMER2_BLOCK, {0x10, 0x10, 0x10}
};
EntityBlueprint Entity_ShatteringHammer3Block = {
0x0000, 0x0250, &D_802E9C70, {0, 0, 0, 0}, entity_shattering_block_init, &D_802E9C40, NULL, E38890_ROM_START, E38890_ROM_END, ENTITY_TYPE_HAMMER3_BLOCK, {0x10, 0x10, 0x10}
};
EntityBlueprint Entity_ShatteringHammer1BlockTiny = {
0x0000, 0x0250, &D_802E9C70, {0, 0, 0, 0}, entity_shattering_block_init, &D_802E9C40, NULL, E32420_ROM_START, E32420_ROM_END, ENTITY_TYPE_HAMMER1_BLOCK_TINY, {0x08, 0x08, 0x08}
};
EntityBlueprint Entity_ShatteringHammer2BlockTiny = {
0x0000, 0x0250, &D_802E9C70, {0, 0, 0, 0}, entity_shattering_block_init, &D_802E9C40, NULL, E35670_ROM_START, E35670_ROM_END, ENTITY_TYPE_HAMMER2_BLOCK_TINY, {0x08, 0x08, 0x08}
};
EntityBlueprint Entity_ShatteringHammer3BlockTiny = {
0x0000, 0x0250, &D_802E9C70, {0, 0, 0, 0}, entity_shattering_block_init, &D_802E9C40, NULL, E38890_ROM_START, E38890_ROM_END, ENTITY_TYPE_HAMMER3_BLOCK_TINY, {0x08, 0x08, 0x08}
};
EntityBlueprint Entity_ShatteringBrickBlock = {
0x0000, 0x0250, &D_802E9C70, {0, 0, 0, 0}, entity_shattering_block_init, &D_802E9C40, NULL, E3E260_ROM_START, E3E260_ROM_END, ENTITY_TYPE_BRICK_BLOCK, {0x08, 0x08, 0x08}
};
void entity_shattering_block_init(Entity* entity) {
u32 type;
@ -231,7 +255,10 @@ void entity_shattering_block_init(Entity* entity) {
entity->dataBuf.swtch->unk_38 = entity->position.y;
type = get_entity_type((u8)entity->listIndex);
if ((type - 24) < 3) {
if (type == ENTITY_TYPE_HAMMER1_BLOCK_TINY ||
type == ENTITY_TYPE_HAMMER2_BLOCK_TINY ||
type == ENTITY_TYPE_HAMMER3_BLOCK_TINY)
{
entity->scale.x = 0.5f;
entity->scale.y = 0.5f;
entity->scale.z = 0.5f;
@ -254,7 +281,7 @@ void entity_shattering_block_init(Entity* entity) {
a2 = &D_0A001218;
break;
case ENTITY_TYPE_BRICK_BLOCK:
sfx_play_sound_at_position(0x158, 0, entity->position.x, entity->position.y, entity->position.z);
sfx_play_sound_at_position(SOUND_158, 0, entity->position.x, entity->position.y, entity->position.z);
a1 = &D_0A003F70;
a2 = &D_0A002318;
break;
@ -275,32 +302,29 @@ void entity_shattering_block_init(Entity* entity) {
}
void entity_breakable_block_create_shattering_entity(Entity* entity) {
u32 type;
EntityBlueprint* addr = NULL;
EntityBlueprint* bp = NULL;
type = get_entity_type(entity->listIndex);
switch (type) {
switch (get_entity_type(entity->listIndex)) {
case ENTITY_TYPE_HAMMER1_BLOCK:
addr = &Entity_ShatteringHammer1Block;
bp = &Entity_ShatteringHammer1Block;
break;
case ENTITY_TYPE_HAMMER1_BLOCK_TINY:
addr = &Entity_ShatteringHammer1BlockTiny;
bp = &Entity_ShatteringHammer1BlockTiny;
break;
case ENTITY_TYPE_HAMMER2_BLOCK:
addr = &Entity_ShatteringHammer2Block;
bp = &Entity_ShatteringHammer2Block;
break;
case ENTITY_TYPE_HAMMER2_BLOCK_TINY:
addr = &Entity_ShatteringHammer2BlockTiny;
bp = &Entity_ShatteringHammer2BlockTiny;
break;
case ENTITY_TYPE_HAMMER3_BLOCK:
addr = &Entity_ShatteringHammer3Block;
bp = &Entity_ShatteringHammer3Block;
break;
case ENTITY_TYPE_HAMMER3_BLOCK_TINY:
addr = &Entity_ShatteringHammer3BlockTiny;
bp = &Entity_ShatteringHammer3BlockTiny;
break;
case ENTITY_TYPE_BRICK_BLOCK:
addr = &Entity_ShatteringBrickBlock;
bp = &Entity_ShatteringBrickBlock;
break;
case ENTITY_TYPE_MULTI_COIN_BRICK:
case ENTITY_TYPE_YELLOW_BLOCK:
@ -311,9 +335,9 @@ void entity_breakable_block_create_shattering_entity(Entity* entity) {
break;
}
if (addr == NULL) {
if (bp == NULL) {
return;
}
create_entity(addr, entity->position.x, entity->position.y, entity->position.z, 0, 0x80000000);
create_entity(bp, entity->position.x, entity->position.y, entity->position.z, 0, 0x80000000);
}

View File

@ -1,7 +1,5 @@
#include "common.h"
extern void* D_8015A578;
INCLUDE_ASM(s32, "entity/SimpleSpring", entity_ScriptSpring_idle);
#ifdef NON_EQUIVALENT
@ -104,7 +102,7 @@ void entity_HiddenPanel_init(Entity* ent) {
s32 phi_v0;
data = ent->dataBuf.unk;
mem_clear(&D_8015A578, 0x10);
mem_clear(&D_8015A578, sizeof(D_8015A578));
ent->unk3C = &entity_HiddenPanel_setupGfx;
data->unk6 = 0xFFFF;
data->unk24 = (?32) ent->unk4C;
@ -127,7 +125,7 @@ void entity_HiddenPanel_init(Entity* ent) {
guMtxCatF(&sp58, &sp18, &sp18);
guScaleF(&sp58, ent->scale.x, ent->scale.y, ent->scale.z);
guMtxCatF(&sp58, &sp18, temp_s1);
if ((D_8015A578.unk1 & 1) != 0) {
if (D_8015A578.unk_01 & 1) {
entity_set_render_script(ent, &D_802EAAE0);
phi_v0 = 0xA0001B0 & 0xFFFF;
} else {
@ -136,7 +134,7 @@ void entity_HiddenPanel_init(Entity* ent) {
temp_a1 = ent->vertexData + phi_v0;
data->unk78 = temp_a1;
mdl_project_tex_coords(data->unk74, temp_a1, temp_s2 + 0x34, ent->unk44);
D_8015A578.unk1 = (u8) (D_8015A578.unk1 + 1);
D_8015A578.unk_01++;
}
#else

View File

@ -1,8 +1,8 @@
#include "common.h"
#include "effects.h"
#define REFLECTED_SWITCH_LINKED 2
#define REFLECTED_SWITCH_HIDDEN 1
#define REFLECTED_SWITCH_LINKED 2
void entity_shattering_init_pieces(Entity* entity, void* arg1, void* arg2);
@ -23,7 +23,7 @@ void entity_GreenStompSwitch_retract(Entity* entity) {
SwitchData* data = entity->dataBuf.swtch;
u16 curTime = data->greenMotionTimer--;
if (curTime) {
if (curTime != 0) {
entity->position.y -= 1.8625;
return;
}
@ -36,7 +36,7 @@ void entity_GreenStompSwitch_extend(Entity* entity) {
SwitchData* data = entity->dataBuf.swtch;
u16 curTime = data->greenMotionTimer--;
if (curTime) {
if (curTime != 0) {
entity->position.y += 1.8625;
return;
}
@ -44,8 +44,6 @@ void entity_GreenStompSwitch_extend(Entity* entity) {
data->greenMotionTimer = 8;
}
void entity_raycast_down(f32*, f32*, f32*, f32*, f32*, f32*);
void entity_switch_fall_down(Entity* entity) {
SwitchData* data = entity->dataBuf.swtch;
f32 hitDepth = 10.0f;
@ -57,11 +55,12 @@ void entity_switch_fall_down(Entity* entity) {
entity_raycast_down(&x, &y, &z, &hitYaw, &hitPitch, &hitDepth);
if ((entity->position.y != y) && (entity->position.y > y)) {
f32 var = data->fallVelocity;
var += 0.5;
data->fallVelocity = var;
entity->position.y -= var;
if (entity->position.y != y && entity->position.y > y) {
f32 fallVelocity = data->fallVelocity;
fallVelocity += 0.5;
data->fallVelocity = fallVelocity;
entity->position.y -= fallVelocity;
if (entity->position.y < y) {
entity->position.y = y;
}
@ -142,8 +141,6 @@ void entity_base_switch_anim_init(Entity* entity) {
}
s32 entity_RedSwitch_animate_scale(Entity* entity) {
f32 temp_f0;
f32 temp_f2;
f32 temp_f4;
f32 temp_f6;
SwitchData* data = entity->dataBuf.swtch;
@ -151,7 +148,7 @@ s32 entity_RedSwitch_animate_scale(Entity* entity) {
s32 phi_s2 = 0;
switch (data->animStateScaleX) {
case 0: // switch 1
case 0:
temp_f6 = data->baseScale.z * 0.3;
temp_f4 = ((data->baseScale.x + temp_f6) - entity->scale.x) / 4.0;
phi_f4 = temp_f4;
@ -165,7 +162,7 @@ s32 entity_RedSwitch_animate_scale(Entity* entity) {
data->animStateScaleX++;
}
break;
case 1: // switch 1
case 1:
temp_f6 = data->baseScale.z * -0.2;
temp_f4 = ((data->baseScale.x + temp_f6) - entity->scale.x) / 6.0;
phi_f4 = temp_f4;
@ -179,7 +176,7 @@ s32 entity_RedSwitch_animate_scale(Entity* entity) {
data->animStateScaleX++;
}
break;
case 2: // switch 1
case 2:
temp_f6 = data->baseScale.z * 0.15;
temp_f4 = ((data->baseScale.x + temp_f6) - entity->scale.x) / 4.0;
phi_f4 = temp_f4;
@ -193,7 +190,7 @@ s32 entity_RedSwitch_animate_scale(Entity* entity) {
data->animStateScaleX++;
}
break;
case 3: // switch 1
case 3:
temp_f6 = data->baseScale.z * -0.1;
temp_f4 = ((data->baseScale.x + temp_f6) - entity->scale.x) / 6.0;
phi_f4 = temp_f4;
@ -207,7 +204,7 @@ s32 entity_RedSwitch_animate_scale(Entity* entity) {
data->animStateScaleX++;
}
break;
case 4: // switch 1
case 4:
temp_f4 = (data->baseScale.x - entity->scale.x) / 4.0;
phi_f4 = temp_f4;
if (temp_f4 < 0.01) {
@ -221,7 +218,7 @@ s32 entity_RedSwitch_animate_scale(Entity* entity) {
data->animStateScaleX++;
}
break;
case 5: // switch 1
case 5:
phi_s2++;
break;
}
@ -229,8 +226,7 @@ s32 entity_RedSwitch_animate_scale(Entity* entity) {
entity->scale.z = entity->scale.x;
switch (data->animStateScaleY) {
case 0: // switch 2
case 0:
temp_f6 = data->baseScale.z * -0.5;
temp_f4 = ((data->baseScale.y + temp_f6) - entity->scale.y) / 5.0;
phi_f4 = temp_f4;
@ -244,7 +240,7 @@ s32 entity_RedSwitch_animate_scale(Entity* entity) {
data->animStateScaleY++;
}
break;
case 1: // switch 2
case 1:
temp_f6 = data->baseScale.z * 0.1;
temp_f4 = ((data->baseScale.y + temp_f6) - entity->scale.y) / 10.0;
phi_f4 = temp_f4;
@ -258,7 +254,7 @@ s32 entity_RedSwitch_animate_scale(Entity* entity) {
data->animStateScaleY++;
}
break;
case 2: // switch 2
case 2:
temp_f6 = data->baseScale.z * -0.3;
temp_f4 = ((data->baseScale.y + temp_f6) - entity->scale.y) / 5.0;
phi_f4 = temp_f4;
@ -272,7 +268,7 @@ s32 entity_RedSwitch_animate_scale(Entity* entity) {
data->animStateScaleY++;
}
break;
case 3: // switch 2
case 3:
temp_f6 = data->baseScale.z * 0.0;
temp_f4 = ((data->baseScale.y + temp_f6) - entity->scale.y) / 10.0;
phi_f4 = temp_f4;
@ -286,7 +282,7 @@ s32 entity_RedSwitch_animate_scale(Entity* entity) {
data->animStateScaleY++;
}
break;
case 4: // switch 2
case 4:
temp_f4 = (data->baseScale.y - entity->scale.y) / 5.0;
phi_f4 = temp_f4;
if (temp_f4 > -0.01) {
@ -300,7 +296,7 @@ s32 entity_RedSwitch_animate_scale(Entity* entity) {
data->animStateScaleY++;
}
break;
case 5: // switch 2
case 5:
phi_s2++;
break;
}
@ -320,7 +316,6 @@ void entity_base_switch_start_bound_script(Entity* entity) {
}
void entity_base_switch_animate_scale(Entity* entity) {
f32 temp_f0;
f32 temp_f4;
f32 scaleChange;
SwitchData* data = entity->dataBuf.swtch;
@ -454,8 +449,8 @@ void entity_base_switch_animate_scale(Entity* entity) {
}
data->scaleAnimTimer++;
if ((data->scaleAnimTimer == 10) && (data->linkedSwitch == NULL)) {
fx_cold_breath(0, entity->position.x, entity->position.y, entity->position.z, 1.0f, 0x3C);
if (data->scaleAnimTimer == 10 && data->linkedSwitch == NULL) {
fx_cold_breath(0, entity->position.x, entity->position.y, entity->position.z, 1.0f, 60);
}
}
@ -501,66 +496,3 @@ void entity_HugeBlueSwitch_init(Entity* entity) {
data->baseScale.y = 3.0f;
data->baseScale.z = 3.0f;
}
void entity_BrickBlock_idle(Entity* entity) {
entity_base_block_idle(entity);
}
INCLUDE_ASM(void, "entity/Switch", entity_shattering_init_pieces, Entity* entity, void* arg1, void* arg2);
INCLUDE_ASM(void, "entity/Switch", entity_shattering_idle, Entity* entity);
#ifdef NON_EQUIVALENT
// display list issues
void entity_shattering_setupGfx(s32 entityIndex) {
Gfx* temp_s2;
SwitchData* data;
struct802E2BA4* phi_fp;
Matrix4f subroutine_arg6;
Matrix4f subroutine_arg16;
Matrix4f subroutine_arg36;
Matrix4f subroutine_arg48;
s32 i;
f32 x_inv;
f32 y_inv;
f32 z_inv;
Entity* entity;
f32 threeSixty;
f32 someFloat;
f32 one;
s16 temp;
temp_s2 = gMasterGfxPos;
threeSixty = 360.0f;
someFloat = 0.00390625f;
entity = get_entity_by_index(entityIndex);
data = entity->dataBuf.swtch;
x_inv = -entity->position.x;
y_inv = -entity->position.y;
z_inv = -entity->position.z;
phi_fp = data->renderYaw;
for (i = 0; i < 24; i++) {
if (data->unk_3C.s == 0xFF) {
gDPSetRenderMode(temp_s2++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2);
gDPSetCombineMode(temp_s2++, G_CC_MODULATEIA, G_CC_MODULATEIA);
} else {
gDPSetCombineLERP(temp_s2++, 0, 0, 0, TEXEL0, SHADE, 0, TEXEL0, 0, 0, 0, 0, TEXEL0, TEXEL0, 0, SHADE, 0);
gDPSetPrimColor(temp_s2++, 0, 0, 0x00, 0x00, 0x00, data->unk_3C.b[1])
}
guTranslateF(&subroutine_arg6, x_inv, y_inv, z_inv);
guRotateF(&subroutine_arg36, data->unk_8B[i] * threeSixty * someFloat, 1.0f, 0.0f, 0.0f);
guRotateF(&subroutine_arg48, data->unk_A4[i] * threeSixty * someFloat, 0.0f, 1.0f, 0.0f);
guMtxCatF(&subroutine_arg36, &subroutine_arg48, &subroutine_arg48);
guMtxCatF(&subroutine_arg48, &subroutine_arg6, &subroutine_arg6);
guTranslateF(&subroutine_arg16, data->unk_C0[i], data->unk_124[i], data->unk_188[i]);
guMtxCatF(&subroutine_arg6, &subroutine_arg16, &subroutine_arg16);
guMtxF2L(&subroutine_arg16, &gDisplayContext->matrixStack[gMatrixListPos]);
gSPMatrix(temp_s2++, &gDisplayContext->matrixStack[++gMatrixListPos], G_MTX_PUSH | G_MTX_MUL | G_MTX_MODELVIEW);
gSPDisplayList(temp_s2++, entity->vertexData + phi_fp->unk_02[i][0]);
gSPPopMatrix(temp_s2++, G_MTX_MODELVIEW);
}
gMasterGfxPos = temp_s2;
}
#else
INCLUDE_ASM(s32, "entity/Switch", entity_shattering_setupGfx);
#endif

View File

@ -27,7 +27,7 @@ s32 get_spirits_rescued(void) {
s32 fio_calc_header_checksum(void) {
u32 sum = 0;
s32* it = D_800D95E8;
s32* it = &D_800D95E8;
u32 i;
for (i = 0; i < 0x20; i++, it++) {
@ -66,16 +66,16 @@ s32 fio_has_valid_backup(void) {
s32 fio_flush_backups(void) {
s32 checksum;
strcpy(D_800D95E8, &magicSaveString);
D_800D95E8[12] = 0;
D_800D95E8[13] = -1;
strcpy(D_800D95E8.magicString, &magicSaveString);
D_800D95E8.crc1 = 0;
D_800D95E8.crc2 = -1;
checksum = fio_calc_header_checksum();
D_800D95E8[12] = checksum;
D_800D95E8[13] = ~checksum;
D_800D95E8.crc1 = checksum;
D_800D95E8.crc2 = ~checksum;
fio_erase_flash(6);
fio_write_flash(6, D_800D95E8, 128);
fio_write_flash(6, &D_800D95E8, 0x80);
fio_erase_flash(7);
fio_write_flash(7, D_800D95E8, 128);
fio_write_flash(7, &D_800D95E8, 0x80);
return 1;
}
@ -84,7 +84,7 @@ s32 fio_calc_file_checksum(SaveData* saveData) {
s32* it = saveData;
u32 i;
for (i = 0; i < 0x4E0; i++, it++) {
for (i = 0; i < sizeof(*saveData) / sizeof(*it); i++, it++) {
sum += *it;
}
return sum;

View File

@ -51,7 +51,7 @@ extern s32 physicalSaveInfo[6][2];
extern s32 nextAvailableSavePage;
extern s32 D_800D95E8[];
extern SaveData D_800D95E8;
extern s32 D_8009A6B0[];

126
src/npc.c
View File

@ -22,7 +22,7 @@ void STUB_npc_callback(Npc* npc) {
}
void mtx_ident_mirror_y(Matrix4f mtx) {
guMtxIdentF(*mtx);
guMtxIdentF(mtx);
mtx[0][0] = 1.0f;
mtx[1][1] = -1.0f;
mtx[2][2] = 1.0f;
@ -575,7 +575,7 @@ void render_npcs(void) {
Npc* npc = (*gCurrentNpcListPtr)[i];
if (npc != NULL) {
if (npc->flags && !(npc->flags & (NPC_FLAG_80000000 | NPC_FLAG_1000000 | NPC_FLAG_4 | NPC_FLAG_2))) {
transform_point(&cam->perspectiveMatrix, npc->pos.x, npc->pos.y, npc->pos.z, 1.0f, &x, &y, &z, &s);
transform_point(cam->perspectiveMatrix, npc->pos.x, npc->pos.y, npc->pos.z, 1.0f, &x, &y, &z, &s);
if (!(s < 0.01) || !(s > -0.01)) {
phi_f20 = ((z * 5000.0f) / s) + 5000.0f;
if (phi_f20 < 0.0f) {
@ -686,7 +686,6 @@ void set_npc_sprite(Npc* npc, s32 anim, s32** extraAnimList) {
ASSERT(npc->spriteInstanceID >= 0);
}
npc->currentAnim.w = anim;
if (!(npc->flags & NPC_FLAG_NO_ANIMS_LOADED)) {
@ -1195,27 +1194,33 @@ Npc* npc_find_closest_simple(f32 x, f32 y, f32 z, f32 radius) {
// Needs work
#ifdef NON_EQUIVALENT
s32 npc_find_standing_on_entity(s32 arg0) {
s32 entityIndex = (arg0 | 0x4000);
s32 yTemp = get_entity_by_index(entityIndex)->position.y - 10.0f;
s32 entityIndex = arg0 | 0x4000;
Entity* entity = get_entity_by_index(entityIndex);
s32 y = entity->position.y - 10.0f;
s32 floorID;
s32 i;
for (i = 0; i < ARRAY_COUNT(*gCurrentNpcListPtr); i++) {
Npc* npc = (*gCurrentNpcListPtr)[i];
if (npc != NULL && npc->flags != 0) {
if (!(npc->flags & (0x80000000 | 0x4))) {
if (!(npc->pos.y < yTemp)) {
s32 temp_v0;
if (npc != NULL) {
if (npc->flags != 0) {
if (!(npc->flags & 0x80000004)) {
if (!(npc->pos.y < y)) {
if (npc->flags & 0x8008) {
floorID = npc_get_collider_below(npc);
if (floorID == 0) {
continue;
}
} else {
floorID = npc->currentFloor;
if (npc->flags & 0x8008) {
temp_v0 = npc_get_collider_below(npc);
if (temp_v0 != 0) {
if (entityIndex == temp_v0) {
return i;
if (!(floorID & 0x4000)) {
continue;
}
}
} else if (npc->unk_84 & 0x4000) {
if (entityIndex == npc->unk_84) {
if (entityIndex == floorID) {
return i;
}
}
@ -1337,14 +1342,12 @@ void func_8003D624(Npc* npc, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5, s
func_8003D3BC(npc);
}
#ifdef NON_EQUIVALENT
// Rodata padding issue. Most likely belongs to a separate TU than the function above with the switch.
void func_8003D660(Npc* npc, s32 arg1) {
PartnerActionStatus* temp = &gPartnerActionStatus;
if ((npc->flags & (NPC_FLAG_400000 | NPC_FLAG_2)) == NPC_FLAG_400000) {
if (npc->moveSpeed != 0.0f) {
switch (get_collider_type_by_id((u16)npc->unk_84) & 0xFF) {
switch (get_collider_type_by_id((u16)npc->currentFloor) & 0xFF) {
case 6:
func_8003DA38(npc, arg1);
return;
@ -1352,7 +1355,7 @@ void func_8003D660(Npc* npc, s32 arg1) {
func_8003DC38(npc, arg1);
return;
case 8:
if ((temp->unk_00 == 0) || (temp->unk_03 != 8)) {
if ((temp->actionState.b[0] == 0) || (temp->actionState.b[3] != 8)) {
func_8003DFA0(npc, arg1);
return;
}
@ -1374,14 +1377,13 @@ void func_8003D660(Npc* npc, s32 arg1) {
}
}
}
#else
INCLUDE_ASM(void, "npc", func_8003D660, Npc* npc, s32 arg1);
#endif
static const f32 padding[2] = { 0.0f, 0.0f }; // todo remove when below funcs are decompiled
void func_8003D788(Npc* npc, s32 arg1) {
s32 phi_a2;
f32 subroutine_argA;
f32 subroutine_argB;
f32 sinTheta;
f32 cosTheta;
phi_a2 = 0;
if (gGameStatusPtr->areaID == 5) {
@ -1402,23 +1404,59 @@ void func_8003D788(Npc* npc, s32 arg1) {
if (D_80077C14++ >= 4) {
D_80077C14 = 0;
if (phi_a2 == 0) {
sin_cos_rad((clamp_angle(-npc->yaw) * TAU) / 360.0f, &subroutine_argA, &subroutine_argB);
fx_walking_dust(0, npc->pos.x + (npc->collisionRadius * subroutine_argA * 0.2f), npc->pos.y + 1.5f,
npc->pos.z + (npc->collisionRadius * subroutine_argB * 0.2f), subroutine_argA, subroutine_argB);
sin_cos_rad((clamp_angle(-npc->yaw) * TAU) / 360.0f, &sinTheta, &cosTheta);
fx_walking_dust(0, npc->pos.x + (npc->collisionRadius * sinTheta * 0.2f), npc->pos.y + 1.5f,
npc->pos.z + (npc->collisionRadius * cosTheta * 0.2f), sinTheta, cosTheta);
} else {
sin_cos_rad((clamp_angle(npc->yaw) * TAU) / 360.0f, &subroutine_argA, &subroutine_argB);
fx_misc_particles(3, npc->pos.x + (npc->collisionRadius * subroutine_argA), npc->pos.y + 1.5f,
npc->pos.z + (npc->collisionRadius * subroutine_argB), 5.0f, 10.0f, 1.0f, 5, 30);
sin_cos_rad((clamp_angle(npc->yaw) * TAU) / 360.0f, &sinTheta, &cosTheta);
fx_misc_particles(3, npc->pos.x + (npc->collisionRadius * sinTheta), npc->pos.y + 1.5f,
npc->pos.z + (npc->collisionRadius * cosTheta), 5.0f, 10.0f, 1.0f, 5, 30);
}
}
}
}
// floats suck
#ifdef NON_MATCHING
void func_8003DA38(Npc* npc, s32 arg1) {
f32 theta;
f32 sinTheta;
f32 cosTheta;
f32 x, y, z;
if (arg1 == 2 && D_80077C1E == 5) {
fx_flower_splash(npc->pos.x, npc->pos.y + 14.0f, npc->pos.z, D_80077C18);
D_80077C18 = clamp_angle(D_80077C18 + 35.0f);
D_80077C1E = 0;
return;
}
D_80077C1E++;
if (D_80077C1E > 5) {
D_80077C1E = 5;
}
if (D_80077C1C++ > 0) {
D_80077C1C = 0;
theta = clamp_angle(-npc->yaw) * TAU / 360.0f;
sinTheta = sin_rad(theta);
cosTheta = cos_rad(theta);
x = npc->pos.x + (npc->collisionRadius * sinTheta * -0.4f);
z = npc->pos.z + (npc->collisionRadius * cosTheta * -0.4f);
y = npc->pos.y + 15.5f;
fx_flower_trail(1, x, y, z, -npc->yaw + rand_int(10) - 5.0f, D_80077C20);
D_80077C20 = D_80077C20 == 0;
}
}
#else
INCLUDE_ASM(void, "npc", func_8003DA38, Npc* npc, s32 arg1);
#endif
INCLUDE_ASM(s32, "npc", func_8003DC38);
void func_8003DFA0(Npc* npc) {
void func_8003DFA0(Npc* npc, s32 arg1) {
if (D_80077C30++ >= 4) {
f32 temp_f20;
f32 x;
@ -1434,7 +1472,7 @@ void func_8003DFA0(Npc* npc) {
}
}
void func_8003E0D4(Npc* npc) {
void func_8003E0D4(Npc* npc, s32 arg1) {
if (D_80077C38++ >= 4) {
f32 theta;
f32 sinTheta;
@ -1449,7 +1487,7 @@ void func_8003E0D4(Npc* npc) {
}
}
void func_8003E1D0(Npc* npc) {
void func_8003E1D0(Npc* npc, s32 arg1) {
if (D_80077C3A++ >= 4) {
f32 temp_f20;
f32 x;
@ -1666,8 +1704,6 @@ s32 kill_encounter(Enemy* enemy) {
}
}
#ifdef NON_EQUIVALENT
// regalloc. s2/s3 switched
void kill_enemy(Enemy* enemy) {
EncounterStatus* encounterStatus = &gCurrentEncounter;
Encounter* encounter = encounterStatus->encounterList[enemy->encounterIndex];
@ -1718,20 +1754,20 @@ void kill_enemy(Enemy* enemy) {
}
}
if (!(enemy->flags & ENEMY_FLAGS_4)) {
if (!(enemy->flags & ENEMY_FLAGS_8) || (enemy == encounterStatus->currentEnemy)) {
if (!(enemy->flags & ENEMY_FLAGS_1)) {
if (!(enemy->flags & ENEMY_FLAGS_10)) {
COPY_set_defeated((s8)encounterStatus->mapID, encounter->encounterID + i);
do {
if (!(enemy->flags & ENEMY_FLAGS_4)) {
if (!(enemy->flags & ENEMY_FLAGS_8) || (enemy == encounterStatus->currentEnemy)) {
if (!(enemy->flags & ENEMY_FLAGS_1)) {
if (!(enemy->flags & ENEMY_FLAGS_10)) {
COPY_set_defeated(encounterStatus->mapID, encounter->encounterID + i);
}
}
}
}
}
} while (0); // required to match
heap_free(enemy);
}
#else
INCLUDE_ASM(void, "npc", kill_enemy);
#endif
s32 bind_enemy_ai(Enemy* enemy, EvtScript* aiScriptBytecode) {
Evt* aiScript;

View File

@ -610,7 +610,7 @@ void pause_init(void) {
posX = 225;
for (i = 6; i > 0; i--) {
if (!gPausePanels[i]->initialized) {
set_window_update(24 + i, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_PAUSE_TUTORIAL + i, WINDOW_UPDATE_HIDE);
} else {
gWindows[WINDOW_ID_PAUSE_TUTORIAL + i].pos.x = posX + 14;
posX -= 45;

View File

@ -242,7 +242,7 @@ void update_merlee_message(PopupMessage* popup) {
}
if (closeMessage) {
set_window_update(9, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_9, WINDOW_UPDATE_HIDE);
D_800A0F40 = 0;
dispose_merlee_message(popup);
}
@ -270,7 +270,7 @@ void draw_merlee_message(PopupMessage* popup) {
width = get_msg_width(messageID, 0) + 30;
xPos = 160 - (width / 2);
set_window_properties(9, xPos, 80, width, D_80078160[get_msg_lines(messageID) - 1], 0, draw_merlee_message_string, popup, -1);
set_window_update(9, WINDOW_UPDATE_SHOW);
set_window_update(WINDOW_ID_9, WINDOW_UPDATE_SHOW);
}
}

View File

@ -3,13 +3,17 @@
extern f32 D_802B6770_E27C80;
//wip - not good yet
#ifdef NON_EQUIVALENT
// the switch
#ifdef NON_MATCHING
void func_802B6000_E28A30(void) {
PlayerStatus* playerStatus = &gPlayerStatus;
s32 oldFlags = playerStatus->flags;
if (playerStatus->flags < 0) {
playerStatus->flags &= 0x7FF7FFF1;
playerStatus->flags &= ~(
PLAYER_STATUS_FLAGS_ACTION_STATE_CHANGED | PLAYER_STATUS_FLAGS_80000 | PLAYER_STATUS_FLAGS_8 |
PLAYER_STATUS_FLAGS_FALLING | PLAYER_STATUS_FLAGS_JUMPING
);
playerStatus->fallState = 0;
playerStatus->framesOnGround = 0;
playerStatus->decorationList = 0;
@ -19,10 +23,13 @@ void func_802B6000_E28A30(void) {
}
if (playerStatus->animFlags & 0x400000) {
if (gPartnerActionStatus.actionState.b[3] == 8) {
func_802BD100_317020(playerStatus->flags);
} else if (gPartnerActionStatus.actionState.b[3] == 7) {
func_802BD100_317020(playerStatus->flags);
switch (gPartnerActionStatus.actionState.b[3]) {
case 8:
func_802BD100_317020(oldFlags);
break;
case 7:
func_802BD100_317020(oldFlags);
break;
}
}
}

View File

@ -12,6 +12,8 @@ typedef struct HammerHitData {
extern HammerHitData* HammerHit;
void func_802B6820_E256F0(void);
s32 action_hammer_is_swinging_away(s32 animID) {
if (animID & 0x1000000) {
return TRUE;
@ -44,17 +46,17 @@ void action_hammer_play_hit_fx(s32 hitID) {
shakeAmt = 1.2f;
time = 1;
radius = 28;
soundID = 0x211A;
soundID = SOUND_211A;
} else if (gPlayerData.hammerLevel == 1) {
shakeAmt = 0.8f;
time = 1;
radius = 16;
soundID = 0x2119;
soundID = SOUND_2119;
} else {
shakeAmt = 0.4f;
time = 1;
radius = 4;
soundID = 0x2118;
soundID = SOUND_2118;
}
theta = (func_800E5348() * TAU) / 360.0f;
@ -79,30 +81,137 @@ void action_hammer_play_hit_fx(s32 hitID) {
switch (is_ability_active(ABILITY_ATTACK_FX)) {
case 1:
soundID = 0x372;
soundID = SOUND_372;
break;
case 2:
soundID = 0xF1;
soundID = SOUND_F1;
break;
case 3:
soundID = 0xDC;
soundID = SOUND_DC;
break;
case 4:
soundID = 0x2072;
soundID = SOUND_2072;
break;
case 5:
soundID = 0x2073;
soundID = SOUND_2073;
break;
case 6:
soundID = 0x205B;
soundID = SOUND_205B;
break;
}
sfx_play_sound_at_player(soundID, 0);
start_rumble(0x100, 0x32);
start_rumble(0x100, 50);
}
INCLUDE_ASM(s32, "world/action/hammer", func_802B62A4_E25174);
s32 func_802B62A4_E25174(void) {
PlayerStatus* playerStatus = &gPlayerStatus;
f32 yaw;
f32 angle;
f32 outSinTheta;
f32 outCosTheta;
f32 playerX, playerY, playerZ;
f32 x, y, z;
s32 ret;
s32 i;
yaw = func_800E5348();
if (action_hammer_is_swinging_away(playerStatus->trueAnimation)) {
angle = clamp_angle(yaw + 90.0f - gCameras[gCurrentCameraID].currentYaw);
if (angle >= 90.0f && angle < 270.0f) {
yaw += -30.0f;
} else {
yaw += 30.0f;
}
}
sin_cos_rad(yaw * TAU / 360.0f, &outSinTheta, &outCosTheta);
playerX = playerStatus->position.x;
playerY = playerStatus->position.y;
playerZ = playerStatus->position.z;
for (i = 1; i < 16; i++) {
x = playerX + (outSinTheta * i);
y = playerY;
z = playerZ - (outCosTheta * i);
ret = player_test_lateral_overlap(3, playerStatus, &x, &y, &z, 4.0f, yaw);
if (ret >= 0) {
HammerHit->hitPos.x = x;
HammerHit->hitPos.y = y;
HammerHit->hitPos.z = z;
break;
}
}
if (i >= 0x10) {
yaw = func_800E5348();
if (!action_hammer_is_swinging_away(playerStatus->trueAnimation)) {
angle = clamp_angle(yaw + 90.0f - gCameras[gCurrentCameraID].currentYaw);
if (angle >= 90.0f && angle < 270.0f) {
yaw += 15.0f;
} else {
yaw += -15.0f;
}
}
sin_cos_rad(yaw * TAU / 360.0f, &outSinTheta, &outCosTheta);
for (i = 1; i < 16; i++) {
x = playerX + (outSinTheta * i);
y = playerY;
z = playerZ - (outCosTheta * i);
ret = player_test_lateral_overlap(3, playerStatus, &x, &y, &z, 4.0f, yaw);
if (ret >= 0) {
HammerHit->hitPos.x = x;
HammerHit->hitPos.y = y;
HammerHit->hitPos.z = z;
break;
}
}
}
if (ret >= 0 && (ret & 0x4000)) {
s32 hammerLevel = gPlayerData.hammerLevel;
switch (get_entity_type(ret)) {
case ENTITY_TYPE_HAMMER1_BLOCK:
case ENTITY_TYPE_HAMMER1_BLOCK_TINY:
if (hammerLevel >= 0) {
ret = -1;
} else {
playerStatus->animFlags |= PLAYER_STATUS_ANIM_FLAGS_SHIVERING;
}
break;
case ENTITY_TYPE_HAMMER2_BLOCK:
case ENTITY_TYPE_HAMMER2_BLOCK_TINY:
if (hammerLevel >= 1) {
ret = -1;
} else {
playerStatus->animFlags |= PLAYER_STATUS_ANIM_FLAGS_SHIVERING;
}
break;
case ENTITY_TYPE_HAMMER3_BLOCK:
case ENTITY_TYPE_HAMMER3_BLOCK_TINY:
if (hammerLevel >= 2) {
ret = -1;
} else {
playerStatus->animFlags |= PLAYER_STATUS_ANIM_FLAGS_SHIVERING;
}
break;
case ENTITY_TYPE_WOODEN_CRATE:
case ENTITY_TYPE_BOMBABLE_ROCK:
playerStatus->animFlags |= PLAYER_STATUS_ANIM_FLAGS_SHIVERING;
break;
case ENTITY_TYPE_BLUE_SWITCH:
case ENTITY_TYPE_RED_SWITCH:
case ENTITY_TYPE_BRICK_BLOCK:
ret = -1;
break;
}
}
return ret;
}
void action_hammer_update(void) {
PlayerStatus* playerStatus = &gPlayerStatus;
@ -119,27 +228,27 @@ void action_hammer_update(void) {
playerStatus->fallState = 0;
playerStatus->currentSpeed = 0.0f;
playerStatus->unk_BC = 0;
HammerHit->hitID = func_802B62A4_E25174(HammerHit);
HammerHit->hitID = func_802B62A4_E25174();
if (gPlayerData.hammerLevel == 2) {
soundID = 0x2117;
soundID = SOUND_2117;
animID = 0x6001A;
if (HammerHit->hitID < 0) {
soundID = 0x2117;
soundID = SOUND_2117;
animID = 0x60018;
}
} else if (gPlayerData.hammerLevel == 1) {
soundID = 0x2116;
soundID = SOUND_2116;
animID = 0x60016;
if (HammerHit->hitID < 0) {
soundID = 0x2116;
soundID = SOUND_2116;
animID = 0x60014;
}
} else {
soundID = 0x2115;
soundID = SOUND_2115;
animID = 0x60012;
if (HammerHit->hitID < 0) {
soundID = 0x2115;
soundID = SOUND_2115;
animID = 0x60010;
}
}
@ -156,8 +265,149 @@ void action_hammer_update(void) {
} else if (HammerHit->timer < 2) {
HammerHit->timer++;
} else {
func_802B6820_E256F0(HammerHit);
func_802B6820_E256F0();
}
}
INCLUDE_ASM(s32, "world/action/hammer", func_802B6820_E256F0);
void func_802B6820_E256F0(void) {
PlayerStatus* playerStatus = &gPlayerStatus;
CollisionStatus* collisionStatus;
f32 yaw;
f32 angle;
f32 outSinTheta;
f32 outCosTheta;
f32 playerX, playerY, playerZ;
f32 x, y, z;
s32 result;
s32 hammerLevel;
s32 soundID;
u32 unk_BC;
s32 ten;
s32 ret;
s32 i;
do {
collisionStatus = &gCollisionStatus;
} while (0); // required to match;
yaw = func_800E5348();
if (action_hammer_is_swinging_away(playerStatus->trueAnimation)) {
angle = clamp_angle(yaw + 90.0f - gCameras[gCurrentCameraID].currentYaw);
if (angle >= 90.0f && angle < 270.0f) {
yaw += -30.0f;
} else {
yaw += 30.0f;
}
}
sin_cos_rad(yaw * TAU / 360.0f, &outSinTheta, &outCosTheta);
playerX = playerStatus->position.x;
playerY = playerStatus->position.y;
playerZ = playerStatus->position.z;
for (i = 1; i < 16; i++) {
x = playerX + (outSinTheta * i);
y = playerY;
z = playerZ - (outCosTheta * i);
result = player_test_lateral_overlap(3, playerStatus, &x, &y, &z, 4.0f, yaw);
if (HammerHit->unk_14 == 0) {
collisionStatus->lastWallHammered = result;
if (result >= 0) {
if (result & 0x4000) {
get_entity_by_index(result)->unk_07 = 0;
}
}
}
if (result >= 0) {
break;
}
}
if (i >= 16) {
yaw = func_800E5348();
if (action_hammer_is_swinging_away(playerStatus->trueAnimation) == 0) {
angle = clamp_angle(yaw + 90.0f - gCameras[gCurrentCameraID].currentYaw);
if (angle >= 90.0f && angle < 270.0f) {
yaw += 15.0f;
} else {
yaw += -15.0f;
}
}
sin_cos_rad(yaw * TAU / 360.0f, &outSinTheta, &outCosTheta);
for (i = 1; i < 16; i++) {
x = playerX + (outSinTheta * i);
y = playerY;
z = playerZ - (outCosTheta * i);
result = player_test_lateral_overlap(3, playerStatus, &x, &y, &z, 4.0f, yaw);
if (HammerHit->unk_14 == 0) {
collisionStatus->lastWallHammered = result;
if (result >= 0) {
if (result & 0x4000) {
get_entity_by_index(result)->unk_07 = 0;
}
}
}
if (result >= 0) {
break;
}
}
}
if (HammerHit->timer == 2) {
hammerLevel = gPlayerData.hammerLevel;
if (hammerLevel == 2) {
soundID = SOUND_2117;
} else if (hammerLevel == 1) {
soundID = SOUND_2116;
} else {
soundID = SOUND_2115;
}
sfx_play_sound_at_player(soundID, 0);
action_hammer_play_hit_fx(HammerHit->hitID);
if (collisionStatus->lastWallHammered >= 0 && (collisionStatus->lastWallHammered & 0x4000)) {
get_entity_by_index(collisionStatus->lastWallHammered)->unk_07 = 0;
playerStatus->flags |= PLAYER_STATUS_FLAGS_1000000;
} else if (HammerHit->hitID < 0) {
playerStatus->flags |= PLAYER_STATUS_FLAGS_1000000;
}
if (HammerHit->hitID < 0 && gPlayerData.hammerLevel >= 2) {
D_8015A578.unk_00 = 1;
D_8015A578.unk_08 = playerStatus->position.y;
}
}
if (playerStatus->fallState == 0 && result >= 0 && HammerHit->unk_14 == 0) {
playerStatus->fallState++;
}
if (playerStatus->fallState == 1 && result < 0) {
playerStatus->fallState = 2;
}
HammerHit->timer += 1;
if (result >= 0) {
HammerHit->unk_14 = 1;
}
if (HammerHit->timer == 6) {
playerStatus->flags &= ~PLAYER_STATUS_FLAGS_200000;
}
unk_BC = playerStatus->unk_BC;
if (unk_BC == 1) {
if (HammerHit->timer >= 7 && (playerStatus->pressedButtons & BUTTON_B)) {
HammerHit->unk_1C = unk_BC;
}
HammerHit->unk_14 = 0;
ten = 10; // required to match
if (HammerHit->unk_1C != 0 || HammerHit->timer > ten) {
playerStatus->flags &= ~PLAYER_STATUS_FLAGS_1000000;
set_action_state(ACTION_STATE_IDLE);
}
playerStatus->flags &= ~PLAYER_STATUS_FLAGS_200000;
}
}

View File

@ -4,14 +4,14 @@ void func_802B62CC_E24BEC(void);
void func_802B644C_E24D6C(void);
void func_802B6000_E24920(void) {
CollisionStatus* currentCollisionStatus = &gCollisionStatus;
CollisionStatus* collisionStatus = &gCollisionStatus;
PlayerStatus* playerStatus = &gPlayerStatus;
Camera* camera = &gCameras[CAM_DEFAULT];
f32 inputMoveMagnitude;
f32 inputMoveAngle;
s32 jumpInputCheck;
s32 phi_a0;
if (playerStatus->animFlags & PLAYER_STATUS_ANIM_FLAGS_USING_PEACH_PHYSICS) {
func_802B62CC_E24BEC();
return;
@ -19,11 +19,11 @@ void func_802B6000_E24920(void) {
if (playerStatus->flags & PLAYER_STATUS_FLAGS_ACTION_STATE_CHANGED) {
playerStatus->flags &= ~(
PLAYER_STATUS_FLAGS_ACTION_STATE_CHANGED |
PLAYER_STATUS_FLAGS_800000 |
PLAYER_STATUS_FLAGS_80000 |
PLAYER_STATUS_FLAGS_ACTION_STATE_CHANGED |
PLAYER_STATUS_FLAGS_800000 |
PLAYER_STATUS_FLAGS_80000 |
PLAYER_STATUS_FLAGS_FLYING |
PLAYER_STATUS_FLAGS_FALLING |
PLAYER_STATUS_FLAGS_FALLING |
PLAYER_STATUS_FLAGS_JUMPING
);
playerStatus->fallState = 0;
@ -33,26 +33,22 @@ void func_802B6000_E24920(void) {
playerStatus->landPos.z = playerStatus->position.z;
if (playerStatus->animFlags & PLAYER_STATUS_ANIM_FLAGS_8BIT_MARIO) {
phi_a0 = 0x90000;
phi_a0 |= 0x2;
phi_a0 = 0x90002;
} else if (!(playerStatus->animFlags & PLAYER_STATUS_ANIM_FLAGS_HOLDING_WATT)) {
phi_a0 = 0x10009;
} else {
phi_a0 = 0x6000B;
if (!(playerStatus->animFlags & 1)) {
phi_a0 = 0x10000;
phi_a0 |= 0x9;
}
}
suggest_player_anim_clearUnkFlag(phi_a0);
sfx_play_sound_at_player(0x8161, 0);
sfx_play_sound_at_player(0x148, 0);
if (!(currentCollisionStatus->currentFloor & 0x4000)) {
if (!(collisionStatus->currentFloor & 0x4000)) {
phys_adjust_cam_on_landing();
}
currentCollisionStatus->lastTouchedFloor = -1;
collisionStatus->lastTouchedFloor = -1;
playerStatus->animFlags &= ~PLAYER_STATUS_ANIM_FLAGS_40000;
camera->moveFlags &= ~0x4;
}
@ -64,7 +60,7 @@ void func_802B6000_E24920(void) {
if (jumpInputCheck != 0 || jumpInputCheck < playerStatus->fallState) {
if (inputMoveMagnitude == 0.0f) {
set_action_state(0);
set_action_state(ACTION_STATE_IDLE);
return;
}
if (inputMoveMagnitude != 0.0f) {
@ -75,7 +71,7 @@ void func_802B6000_E24920(void) {
}
void func_802B61C0_E24AE0(void) {
CollisionStatus* currentCollisionStatus = &gCollisionStatus;
CollisionStatus* collisionStatus = &gCollisionStatus;
PlayerStatus* playerStatus = &gPlayerStatus;
f32 inputMoveMagnitude;
f32 inputMoveAngle;
@ -87,11 +83,11 @@ void func_802B61C0_E24AE0(void) {
if (playerStatus->flags & PLAYER_STATUS_FLAGS_ACTION_STATE_CHANGED) {
playerStatus->flags &= ~(
PLAYER_STATUS_FLAGS_ACTION_STATE_CHANGED |
PLAYER_STATUS_FLAGS_800000 |
PLAYER_STATUS_FLAGS_80000 |
PLAYER_STATUS_FLAGS_ACTION_STATE_CHANGED |
PLAYER_STATUS_FLAGS_800000 |
PLAYER_STATUS_FLAGS_80000 |
PLAYER_STATUS_FLAGS_FLYING |
PLAYER_STATUS_FLAGS_FALLING |
PLAYER_STATUS_FLAGS_FALLING |
PLAYER_STATUS_FLAGS_JUMPING
);
playerStatus->fallState = 0;
@ -100,11 +96,11 @@ void func_802B61C0_E24AE0(void) {
playerStatus->landPos.x = playerStatus->position.x;
playerStatus->landPos.z = playerStatus->position.z;
if (!(currentCollisionStatus->currentFloor & 0x4000)) {
if (!(collisionStatus->currentFloor & 0x4000)) {
phys_adjust_cam_on_landing();
}
currentCollisionStatus->lastTouchedFloor = -1;
collisionStatus->lastTouchedFloor = -1;
}
playerStatus->fallState++;
@ -116,17 +112,15 @@ void func_802B61C0_E24AE0(void) {
if (inputMoveMagnitude != 0.0f) {
playerStatus->targetYaw = inputMoveAngle;
}
update_locomotion_state();
}
void func_802B62CC_E24BEC(void) {
CollisionStatus* currentCollisionStatus = &gCollisionStatus;
CollisionStatus* collisionStatus = &gCollisionStatus;
PlayerStatus* playerStatus = &gPlayerStatus;
f32 inputMoveMagnitude;
f32 inputMoveAngle;
s32 squaredStick0;
s32 squaredStick1;
if (playerStatus->flags & PLAYER_STATUS_FLAGS_ACTION_STATE_CHANGED) {
playerStatus->flags &= ~PLAYER_STATUS_FLAGS_ACTION_STATE_CHANGED;
@ -137,13 +131,13 @@ void func_802B62CC_E24BEC(void) {
playerStatus->landPos.x = playerStatus->position.x;
playerStatus->landPos.z = playerStatus->position.z;
sfx_play_sound_at_player(0x148, 0);
sfx_play_sound_at_player(SOUND_SOFT_LAND, 0);
if (!(currentCollisionStatus->currentFloor & 0x4000)) {
if (!(collisionStatus->currentFloor & 0x4000)) {
phys_adjust_cam_on_landing();
}
currentCollisionStatus->lastTouchedFloor = -1;
collisionStatus->lastTouchedFloor = -1;
}
playerStatus->fallState++;
@ -151,33 +145,27 @@ void func_802B62CC_E24BEC(void) {
player_input_to_move_vector(&inputMoveAngle, &inputMoveMagnitude);
if (inputMoveMagnitude != 0.0f) {
if (inputMoveMagnitude == 0.0f) {
set_action_state(ACTION_STATE_IDLE);
} else {
if (inputMoveMagnitude != 0.0f) {
playerStatus->targetYaw = inputMoveAngle;
}
squaredStick0 = SQ(playerStatus->stickAxis[0]);
squaredStick1 = SQ(playerStatus->stickAxis[1]);
if (!(sqrtf(squaredStick0 + squaredStick1) > 55.0f)) {
if (sqrtf(SQ(playerStatus->stickAxis[0]) + SQ(playerStatus->stickAxis[1])) > 55.0f) {
set_action_state(ACTION_STATE_RUN);
} else {
set_action_state(ACTION_STATE_WALK);
return;
}
set_action_state(ACTION_STATE_RUN);
} else {
set_action_state(ACTION_STATE_IDLE);
}
}
void func_802B644C_E24D6C(void) {
CollisionStatus* currentCollisionStatus = &gCollisionStatus;
CollisionStatus* collisionStatus = &gCollisionStatus;
PlayerStatus* playerStatus = &gPlayerStatus;
f32 inputMoveMagnitude;
f32 inputMoveAngle;
s32 squaredStick0;
s32 squaredStick1;
if (playerStatus->flags & PLAYER_STATUS_FLAGS_ACTION_STATE_CHANGED) {
playerStatus->flags &= ~PLAYER_STATUS_FLAGS_ACTION_STATE_CHANGED;
playerStatus->fallState = 0;
@ -187,26 +175,21 @@ void func_802B644C_E24D6C(void) {
playerStatus->landPos.x = playerStatus->position.x;
playerStatus->landPos.z = playerStatus->position.z;
if (!(currentCollisionStatus->currentFloor & 0x4000)) {
if (!(collisionStatus->currentFloor & 0x4000)) {
phys_adjust_cam_on_landing();
}
currentCollisionStatus->lastTouchedFloor = -1;
collisionStatus->lastTouchedFloor = -1;
}
playerStatus->fallState = playerStatus->fallState + 1;
playerStatus->fallState++;
playerStatus->currentSpeed *= 0.6f;
player_input_to_move_vector(&inputMoveAngle, &inputMoveMagnitude);
if (inputMoveMagnitude != 0.0f) {
playerStatus->targetYaw = inputMoveAngle;
}
squaredStick0 = playerStatus->stickAxis[0] * playerStatus->stickAxis[0];
squaredStick1 = playerStatus->stickAxis[1] * playerStatus->stickAxis[1];
if (sqrtf(squaredStick0 + squaredStick1) > 55.0f) {
if (sqrtf(SQ(playerStatus->stickAxis[0]) + SQ(playerStatus->stickAxis[1])) > 55.0f) {
set_action_state(ACTION_STATE_RUN);
} else {
set_action_state(ACTION_STATE_WALK);

View File

@ -1,7 +1,6 @@
#include "common.h"
extern f32 D_802B6730;
extern struct struct8015A578 D_8015A578;
s32 func_802B6648_E27428(void);
@ -9,7 +8,7 @@ void func_802B6000_E26DE0(void) {
PlayerStatus* playerStatus = &gPlayerStatus;
CollisionStatus* collisionStatus = &gCollisionStatus;
Entity* entity;
struct8015A578* tempStruct;
Struct8015A578* tempStruct;
s32 sp10;
s32 tempCondition;
f32 temp_f20;

View File

@ -3,15 +3,12 @@
extern s32 gSpinHistoryBufferPos;
extern s32 gSpinHistoryPosY[5];
extern s16 gSpinHistoryPosAngle[5];
extern struct struct8015A578 D_8015A578;
s32 func_802B65F8_E26D08(void);
void func_802B6000_E26710(void) {
PlayerStatus* playerStatus = &gPlayerStatus;
CollisionStatus* collisionStatus = &gCollisionStatus;
struct8015A578* tempStruct;
struct8015A578* tempStruct2;
f32 temp_f0;
f32 temp_f20;
u8 colliderType;
@ -116,9 +113,8 @@ void func_802B6000_E26710(void) {
sfx_play_sound_at_player(0x14A, 0);
start_rumble(0x100, 0x32);
tempStruct = &D_8015A578;
tempStruct->unk_00 = 1;
tempStruct->unk_08 = playerStatus->position.y;
D_8015A578.unk_00 = 1;
D_8015A578.unk_08 = playerStatus->position.y;
playerStatus->flags |= 0x400;
return;
}
@ -144,9 +140,8 @@ void func_802B6000_E26710(void) {
sfx_play_sound_at_player(0x14A, 0);
start_rumble(0x100, 0x32);
tempStruct2 = &D_8015A578;
tempStruct2->unk_00 = 1;
tempStruct2->unk_08 = playerStatus->position.y;
D_8015A578.unk_00 = 1;
D_8015A578.unk_08 = playerStatus->position.y;
playerStatus->flags |= 0x400;
}
break;

View File

@ -92,19 +92,13 @@ extern s16 D_8010CFC8;
extern s16 D_8010CFCA;
extern s16 D_8010CFCE;
extern s32 D_802C0000;
extern s32 PlayerMoveHistoryIndex;
extern s32 gPlayerMoveHistoryIndex;
extern s32 D_8010CFBC;
extern s32 D_8010CFCC;
extern s16 D_8010CFCC;
extern struct player_path_element PlayerMoveHistory[40];
extern PlayerPathElement gPlayerMoveHistory[40];
extern EvtScript D_802C05CC_32579C;
typedef struct player_path_element{
/* 0x00 */ s8 isJumping;
/* 0x03 */ char unk_01[3];
/* 0x04 */ Vec3f position;
}player_path_element; // size unknown
s32 partner_is_idle(Npc* partner);
s32 world_partner_can_player_pause_default(Npc* partner);
void _use_partner_ability(void);
@ -330,9 +324,9 @@ WorldPartner wPartners[12] = {
},
};
f32 SavedPartnerPosX = 0;
f32 SavedPartnerPosY = 0;
f32 SavedPartnerPosZ = 0;
f32 wSavedPartnerPosX = 0;
f32 wSavedPartnerPosY = 0;
f32 wSavedPartnerPosZ = 0;
PartnerAnimations gPartnerAnimations[] = {
{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
@ -504,9 +498,9 @@ void switch_to_partner(s32 arg0) {
D_8010CFE8 = 4;
} else {
D_8010CFE8 = 6;
SavedPartnerPosX = playerStatus->position.x;
SavedPartnerPosY = playerStatus->position.y;
SavedPartnerPosZ = playerStatus->position.z;
wSavedPartnerPosX = playerStatus->position.x;
wSavedPartnerPosY = playerStatus->position.y;
wSavedPartnerPosZ = playerStatus->position.z;
}
}
}
@ -527,9 +521,9 @@ void partner_init_after_battle(s32 arg0) {
D_8010CFE8 = 4;
} else {
D_8010CFE8 = 6;
SavedPartnerPosX = playerStatus->position.x;
SavedPartnerPosY = playerStatus->position.y;
SavedPartnerPosZ = playerStatus->position.z;
wSavedPartnerPosX = playerStatus->position.x;
wSavedPartnerPosY = playerStatus->position.y;
wSavedPartnerPosZ = playerStatus->position.z;
}
}
}
@ -598,9 +592,9 @@ void partner_reset_data(void) {
}
wPartner = NULL;
SavedPartnerPosX = playerStatus->position.x;
SavedPartnerPosY = playerStatus->position.y;
SavedPartnerPosZ = playerStatus->position.z;
wSavedPartnerPosX = playerStatus->position.x;
wSavedPartnerPosY = playerStatus->position.y;
wSavedPartnerPosZ = playerStatus->position.z;
if (D_8010CFD8 == 0) {
D_8010CFE8 = 1;
@ -627,9 +621,9 @@ void partner_initialize_data(void) {
actionStatus->unk_358 = 0;
actionStatus->actionState.b[2] = 0;
wPartner = NULL;
SavedPartnerPosX = 0;
SavedPartnerPosY = 0;
SavedPartnerPosZ = 0;
wSavedPartnerPosX = 0;
wSavedPartnerPosY = 0;
wSavedPartnerPosZ = 0;
}
s32 partner_test_enemy_collision(s32 arg0) {
@ -719,30 +713,70 @@ void partner_resume_ability_script(void) {
}
}
INCLUDE_ASM(void, "world/partners", partner_walking_enable, Npc* partner, s32 val);
void partner_walking_enable(Npc* partner, s32 val) {
PlayerStatus* playerStatus = &gPlayerStatus;
PlayerPathElement* it = gPlayerMoveHistory;
s32 i;
partner->pos.x = wSavedPartnerPosX;
partner->pos.y = wSavedPartnerPosY;
partner->pos.z = wSavedPartnerPosZ;
for (i = 0; i < ARRAY_COUNT(gPlayerMoveHistory); i++, it++) {
it->pos.x = playerStatus->position.x;
it->pos.y = playerStatus->position.y;
it->pos.z = playerStatus->position.z;
it->isJumping = FALSE;
}
gPlayerMoveHistoryIndex = 0;
D_8010CFBC = 0;
D_8010CFCA = val ? 2 : 0;
D_8010CFC8 = 0;
if (D_8010CFC4 == 1 || D_8010CFC4 == 3) {
D_8010CFC4 = 0;
D_8010CFCA = 0;
D_8010CFC8 = 0;
} else if (D_8010CFC4 == 2) {
D_8010CFCA = 0;
D_8010CFC8 = 50;
}
D_8010CFCE = 0;
D_8010CFCC = 0;
wPartnerMoveTime = 16;
wPartnerTetherDistance = 40.0f;
partner->currentAnim.w = gPartnerAnimations[D_8010CFD8].anims[5];
func_800EA5B8(&partner->flags);
partner->collisionChannel = 0x10000;
partner->jumpVelocity = 0.0f;
partner->flags |= NPC_FLAG_400000 | NPC_FLAG_GRAVITY | NPC_FLAG_100;
partner->jumpScale = 1.8f;
}
void partner_walking_update_player_tracking(Npc* partner) {
PlayerStatus* playerStatus = &gPlayerStatus;
s32 isPlayerJumping;
player_path_element* currentSnapshot;
PlayerPathElement* currentSnapshot;
if ((playerStatus->flags & 6) != 0) {
isPlayerJumping = (playerStatus->actionState == ACTION_STATE_LAND || playerStatus->actionState == ACTION_STATE_STEP_DOWN) ^ 1;
} else {
isPlayerJumping = FALSE;
}
currentSnapshot = &PlayerMoveHistory[PlayerMoveHistoryIndex];
if (((currentSnapshot->isJumping == 0) || (isPlayerJumping == 0)) &&
((currentSnapshot->position.x != playerStatus->position.x) || (currentSnapshot->position.y != playerStatus->position.y)
|| (currentSnapshot->position.z != playerStatus->position.z))) {
if (D_8010CFBC != PlayerMoveHistoryIndex + 1) {
if (++PlayerMoveHistoryIndex >= ARRAY_COUNT(PlayerMoveHistory)) {
PlayerMoveHistoryIndex = 0;
currentSnapshot = &gPlayerMoveHistory[gPlayerMoveHistoryIndex];
if ((!currentSnapshot->isJumping || !isPlayerJumping) &&
((currentSnapshot->pos.x != playerStatus->position.x) || (currentSnapshot->pos.y != playerStatus->position.y)
|| (currentSnapshot->pos.z != playerStatus->position.z))) {
if (D_8010CFBC != gPlayerMoveHistoryIndex + 1) {
if (++gPlayerMoveHistoryIndex >= ARRAY_COUNT(gPlayerMoveHistory)) {
gPlayerMoveHistoryIndex = 0;
}
currentSnapshot = &PlayerMoveHistory[PlayerMoveHistoryIndex];
currentSnapshot->position.x = playerStatus->position.x;
currentSnapshot->position.y = playerStatus->position.y;
currentSnapshot->position.z = playerStatus->position.z;
currentSnapshot = &gPlayerMoveHistory[gPlayerMoveHistoryIndex];
currentSnapshot->pos.x = playerStatus->position.x;
currentSnapshot->pos.y = playerStatus->position.y;
currentSnapshot->pos.z = playerStatus->position.z;
currentSnapshot->isJumping = isPlayerJumping;
}
}
@ -772,18 +806,61 @@ void partner_walking_update_motion(Npc* partner) {
}
partner_do_player_collision(partner);
SavedPartnerPosX = partner->pos.x;
SavedPartnerPosY = partner->pos.y;
SavedPartnerPosZ = partner->pos.z;
wSavedPartnerPosX = partner->pos.x;
wSavedPartnerPosY = partner->pos.y;
wSavedPartnerPosZ = partner->pos.z;
}
INCLUDE_ASM(void, "world/partners", partner_walking_follow_player, Npc* partner);
INCLUDE_ASM(void, "world/partners", partner_flying_enable, Npc* partner, s32 val);
void partner_flying_enable(Npc* partner, s32 val) {
PlayerStatus* playerStatus = &gPlayerStatus;
PlayerPathElement* it = gPlayerMoveHistory;
s32 i;
partner->pos.x = wSavedPartnerPosX;
partner->pos.y = wSavedPartnerPosY;
partner->pos.z = wSavedPartnerPosZ;
for (i = 0; i < ARRAY_COUNT(gPlayerMoveHistory); i++, it++) {
it->pos.x = wSavedPartnerPosX;
it->pos.y = wSavedPartnerPosY;
it->pos.z = wSavedPartnerPosZ;
it->isJumping = FALSE;
}
gPlayerMoveHistoryIndex = 0;
D_8010CFBC = 0;
if (!val) {
D_8010CFC8 = 0;
D_8010CFCA = 0;
} else if (D_8010CFC4 == 0) {
D_8010CFC8 = 15;
D_8010CFCA = 2;
} else if (D_8010CFC4 == 1 || D_8010CFC4 == 3) {
D_8010CFC4 = 0;
D_8010CFC8 = 0;
D_8010CFCA = 0;
} else if (D_8010CFC4 == 2) {
D_8010CFC8 = 50;
D_8010CFCA = 0;
}
D_8010CFCE = 0;
D_8010CFCC = 0;
wPartnerMoveTime = 16;
wPartnerTetherDistance = 40.0f;
partner->currentAnim.w = gPartnerAnimations[D_8010CFD8].anims[5];
func_800EA5B8(&partner->flags);
partner->collisionChannel = 0x10000;
partner->flags |= NPC_FLAG_100;
partner->flags &= ~NPC_FLAG_GRAVITY;
}
void partner_flying_update_player_tracking(Npc* partner) {
PlayerStatus* playerStatus = &gPlayerStatus;
player_path_element* currentSnapShot;
PlayerPathElement* currentSnapshot;
f32 effectiveY;
s32 zero = 0; // TODO fix this as || zero == 0 is always going to be true as is
@ -791,18 +868,18 @@ void partner_flying_update_player_tracking(Npc* partner) {
if ((playerStatus->actionState == ACTION_STATE_HIT_LAVA) || (playerStatus->actionState == ACTION_STATE_HIT_FIRE)) {
effectiveY = playerStatus->lastGoodPosition.y + partner->collisionHeight + 5;
}
currentSnapShot = &PlayerMoveHistory[PlayerMoveHistoryIndex];
if ((!currentSnapShot->isJumping || zero == 0) && (currentSnapShot->position.x != playerStatus->position.x || currentSnapShot->position.y != effectiveY
|| currentSnapShot->position.z != playerStatus->position.z)) {
if (D_8010CFBC != PlayerMoveHistoryIndex + 1) {
if (++PlayerMoveHistoryIndex >= ARRAY_COUNT(PlayerMoveHistory)) {
PlayerMoveHistoryIndex = 0;
currentSnapshot = &gPlayerMoveHistory[gPlayerMoveHistoryIndex];
if ((!currentSnapshot->isJumping || zero == 0) && (currentSnapshot->pos.x != playerStatus->position.x || currentSnapshot->pos.y != effectiveY
|| currentSnapshot->pos.z != playerStatus->position.z)) {
if (D_8010CFBC != gPlayerMoveHistoryIndex + 1) {
if (++gPlayerMoveHistoryIndex >= ARRAY_COUNT(gPlayerMoveHistory)) {
gPlayerMoveHistoryIndex = 0;
}
currentSnapShot = &PlayerMoveHistory[PlayerMoveHistoryIndex];
currentSnapShot->position.x = playerStatus->position.x;
currentSnapShot->position.y = effectiveY;
currentSnapShot->position.z = playerStatus->position.z;
currentSnapShot->isJumping = zero;
currentSnapshot = &gPlayerMoveHistory[gPlayerMoveHistoryIndex];
currentSnapshot->pos.x = playerStatus->position.x;
currentSnapshot->pos.y = effectiveY;
currentSnapshot->pos.z = playerStatus->position.z;
currentSnapshot->isJumping = zero;
}
}
}
@ -841,9 +918,9 @@ s32 partner_put_away(Npc* partner) {
tempPosY = playerStatus->position.y + (playerStatus->colliderHeight / 2);
partner->moveToPos.y = playerStatus->position.y + (playerStatus->colliderHeight / 2);
tempPosZ = playerStatus->position.z;
SavedPartnerPosX = tempMoveToX;
SavedPartnerPosY = tempMoveToY;
SavedPartnerPosZ = tempMoveToZ;
wSavedPartnerPosX = tempMoveToX;
wSavedPartnerPosY = tempMoveToY;
wSavedPartnerPosZ = tempMoveToZ;
partner->moveSpeed = 4.0f;
partner->jumpScale = 1.6f;
partner->moveToPos.z = tempPosZ;
@ -950,7 +1027,21 @@ void func_800EF43C(void) {
D_8010CFCE = 0;
}
INCLUDE_ASM(void, "world/partners", partner_clear_player_tracking, Npc* partner);
void partner_clear_player_tracking(Npc* partner) {
PlayerPathElement* it = gPlayerMoveHistory;
s32 i;
wSavedPartnerPosX = partner->pos.x;
wSavedPartnerPosY = partner->pos.y;
wSavedPartnerPosZ = partner->pos.z;
for (i = 0; i < ARRAY_COUNT(gPlayerMoveHistory); i++, it++) {
it->pos.x = wSavedPartnerPosX;
it->pos.y = wSavedPartnerPosY;
it->pos.z = wSavedPartnerPosZ;
it->isJumping = FALSE;
}
}
s32 func_800EF4E0(void) {
PlayerStatus* playerStatus = &gPlayerStatus;
@ -960,17 +1051,17 @@ s32 func_800EF4E0(void) {
if (playerStatus->unk_90 == 0.0f) {
if (!(playerStatus->spriteFacingAngle >= 90.0f) || !(playerStatus->spriteFacingAngle < 270.0f)) {
ret = 1;
playerStatus->targetYaw = clamp_angle(cameras[0].currentYaw - 90.0f);
playerStatus->targetYaw = clamp_angle(cameras[CAM_DEFAULT].currentYaw - 90.0f);
} else {
playerStatus->targetYaw = clamp_angle(cameras[0].currentYaw + 90.0f);
playerStatus->targetYaw = clamp_angle(cameras[CAM_DEFAULT].currentYaw + 90.0f);
ret = 0;
}
} else if (get_clamped_angle_diff(cameras[0].currentYaw, playerStatus->targetYaw) < 0.0f) {
} else if (get_clamped_angle_diff(cameras[CAM_DEFAULT].currentYaw, playerStatus->targetYaw) < 0.0f) {
ret = 1;
playerStatus->targetYaw = clamp_angle(cameras[0].currentYaw - 90.0f);
playerStatus->targetYaw = clamp_angle(cameras[CAM_DEFAULT].currentYaw - 90.0f);
} else {
ret = 0;
playerStatus->targetYaw = clamp_angle(cameras[0].currentYaw + 90.0f);
playerStatus->targetYaw = clamp_angle(cameras[CAM_DEFAULT].currentYaw + 90.0f);
}
playerStatus->currentYaw = playerStatus->targetYaw;

View File

@ -769,11 +769,11 @@ void draw_shop_items(void) {
ShopItemEntity* shopItemEntities;
if (shop->flags & SHOP_FLAGS_1) {
set_window_update(10, basic_window_update);
set_window_update(11, basic_window_update);
set_window_update(WINDOW_ID_10, basic_window_update);
set_window_update(WINDOW_ID_11, basic_window_update);
} else {
set_window_update(10, basic_hidden_window_update);
set_window_update(11, basic_hidden_window_update);
set_window_update(WINDOW_ID_10, basic_hidden_window_update);
set_window_update(WINDOW_ID_11, basic_hidden_window_update);
}
if (shop->flags & SHOP_FLAGS_1) {

View File

@ -1,106 +0,0 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
glabel filemenu_update
/* 163A00 802431A0 27BDFFE0 */ addiu $sp, $sp, -0x20
/* 163A04 802431A4 AFB00010 */ sw $s0, 0x10($sp)
/* 163A08 802431A8 2410002C */ addiu $s0, $zero, 0x2c
/* 163A0C 802431AC 2406FFFF */ addiu $a2, $zero, -1
/* 163A10 802431B0 0200282D */ daddu $a1, $s0, $zero
/* 163A14 802431B4 3C028025 */ lui $v0, %hi(filemenu_8024C098)
/* 163A18 802431B8 8042C098 */ lb $v0, %lo(filemenu_8024C098)($v0)
/* 163A1C 802431BC 3C038016 */ lui $v1, %hi(D_8015A2D0)
/* 163A20 802431C0 2463A2D0 */ addiu $v1, $v1, %lo(D_8015A2D0)
/* 163A24 802431C4 AFBF0018 */ sw $ra, 0x18($sp)
/* 163A28 802431C8 AFB10014 */ sw $s1, 0x14($sp)
/* 163A2C 802431CC 00021080 */ sll $v0, $v0, 2
/* 163A30 802431D0 3C048025 */ lui $a0, %hi(filemenu_menus)
/* 163A34 802431D4 00822021 */ addu $a0, $a0, $v0
/* 163A38 802431D8 8C849B84 */ lw $a0, %lo(filemenu_menus)($a0)
.L802431DC:
/* 163A3C 802431DC 80620003 */ lb $v0, 3($v1)
/* 163A40 802431E0 10460003 */ beq $v0, $a2, .L802431F0
/* 163A44 802431E4 00000000 */ nop
/* 163A48 802431E8 54450006 */ bnel $v0, $a1, .L80243204
/* 163A4C 802431EC 26100001 */ addiu $s0, $s0, 1
.L802431F0:
/* 163A50 802431F0 90620000 */ lbu $v0, ($v1)
/* 163A54 802431F4 30420008 */ andi $v0, $v0, 8
/* 163A58 802431F8 14400006 */ bnez $v0, .L80243214
/* 163A5C 802431FC 2A020040 */ slti $v0, $s0, 0x40
/* 163A60 80243200 26100001 */ addiu $s0, $s0, 1
.L80243204:
/* 163A64 80243204 2A020040 */ slti $v0, $s0, 0x40
/* 163A68 80243208 1440FFF4 */ bnez $v0, .L802431DC
/* 163A6C 8024320C 24630020 */ addiu $v1, $v1, 0x20
/* 163A70 80243210 2A020040 */ slti $v0, $s0, 0x40
.L80243214:
/* 163A74 80243214 1440000B */ bnez $v0, .L80243244
/* 163A78 80243218 00000000 */ nop
/* 163A7C 8024321C 3C028007 */ lui $v0, %hi(gGameStatusPtr)
/* 163A80 80243220 8C42419C */ lw $v0, %lo(gGameStatusPtr)($v0)
/* 163A84 80243224 8C430020 */ lw $v1, 0x20($v0)
/* 163A88 80243228 8C420010 */ lw $v0, 0x10($v0)
/* 163A8C 8024322C 3C018025 */ lui $at, %hi(filemenu_heldButtons)
/* 163A90 80243230 AC23C08C */ sw $v1, %lo(filemenu_heldButtons)($at)
/* 163A94 80243234 3C018025 */ lui $at, %hi(filemenu_pressedButtons)
/* 163A98 80243238 AC22C084 */ sw $v0, %lo(filemenu_pressedButtons)($at)
/* 163A9C 8024323C 08090C95 */ j .L80243254
/* 163AA0 80243240 00000000 */ nop
.L80243244:
/* 163AA4 80243244 3C018025 */ lui $at, %hi(filemenu_heldButtons)
/* 163AA8 80243248 AC20C08C */ sw $zero, %lo(filemenu_heldButtons)($at)
/* 163AAC 8024324C 3C018025 */ lui $at, %hi(filemenu_pressedButtons)
/* 163AB0 80243250 AC20C084 */ sw $zero, %lo(filemenu_pressedButtons)($at)
.L80243254:
/* 163AB4 80243254 3C058025 */ lui $a1, %hi(filemenu_pressedButtons)
/* 163AB8 80243258 24A5C084 */ addiu $a1, $a1, %lo(filemenu_pressedButtons)
/* 163ABC 8024325C 8CA30000 */ lw $v1, ($a1)
/* 163AC0 80243260 30624000 */ andi $v0, $v1, 0x4000
/* 163AC4 80243264 10400004 */ beqz $v0, .L80243278
/* 163AC8 80243268 3C02FFFF */ lui $v0, 0xffff
/* 163ACC 8024326C 34427FFF */ ori $v0, $v0, 0x7fff
/* 163AD0 80243270 00621024 */ and $v0, $v1, $v0
/* 163AD4 80243274 ACA20000 */ sw $v0, ($a1)
.L80243278:
/* 163AD8 80243278 3C058025 */ lui $a1, %hi(filemenu_heldButtons)
/* 163ADC 8024327C 24A5C08C */ addiu $a1, $a1, %lo(filemenu_heldButtons)
/* 163AE0 80243280 8CA30000 */ lw $v1, ($a1)
/* 163AE4 80243284 30624000 */ andi $v0, $v1, 0x4000
/* 163AE8 80243288 10400004 */ beqz $v0, .L8024329C
/* 163AEC 8024328C 3C02FFFF */ lui $v0, 0xffff
/* 163AF0 80243290 34427FFF */ ori $v0, $v0, 0x7fff
/* 163AF4 80243294 00621024 */ and $v0, $v1, $v0
/* 163AF8 80243298 ACA20000 */ sw $v0, ($a1)
.L8024329C:
/* 163AFC 8024329C 90820000 */ lbu $v0, ($a0)
/* 163B00 802432A0 10400006 */ beqz $v0, .L802432BC
/* 163B04 802432A4 00000000 */ nop
/* 163B08 802432A8 8C820010 */ lw $v0, 0x10($a0)
/* 163B0C 802432AC 10400003 */ beqz $v0, .L802432BC
/* 163B10 802432B0 00000000 */ nop
/* 163B14 802432B4 0040F809 */ jalr $v0
/* 163B18 802432B8 00000000 */ nop
.L802432BC:
/* 163B1C 802432BC 3C118025 */ lui $s1, %hi(filemenu_menus)
/* 163B20 802432C0 26319B84 */ addiu $s1, $s1, %lo(filemenu_menus)
/* 163B24 802432C4 0000802D */ daddu $s0, $zero, $zero
.L802432C8:
/* 163B28 802432C8 8E240000 */ lw $a0, ($s1)
/* 163B2C 802432CC 90820000 */ lbu $v0, ($a0)
/* 163B30 802432D0 10400006 */ beqz $v0, .L802432EC
/* 163B34 802432D4 26100001 */ addiu $s0, $s0, 1
/* 163B38 802432D8 8C820014 */ lw $v0, 0x14($a0)
/* 163B3C 802432DC 10400003 */ beqz $v0, .L802432EC
/* 163B40 802432E0 00000000 */ nop
/* 163B44 802432E4 0040F809 */ jalr $v0
/* 163B48 802432E8 00000000 */ nop
.L802432EC:
/* 163B4C 802432EC 2A020004 */ slti $v0, $s0, 4
/* 163B50 802432F0 1440FFF5 */ bnez $v0, .L802432C8
/* 163B54 802432F4 26310004 */ addiu $s1, $s1, 4
/* 163B58 802432F8 8FBF0018 */ lw $ra, 0x18($sp)
/* 163B5C 802432FC 8FB10014 */ lw $s1, 0x14($sp)
/* 163B60 80243300 8FB00010 */ lw $s0, 0x10($sp)
/* 163B64 80243304 03E00008 */ jr $ra
/* 163B68 80243308 27BD0020 */ addiu $sp, $sp, 0x20

View File

@ -1,773 +0,0 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
.section .rodata
dlabel jtbl_8024C018
.word .L80247370_167BD0, .L80247664_167EC4, .L802477F8_168058, .L802474E4_167D44, .L80247A3C_16829C, 0
dlabel jtbl_8024C030
.word .L80247AC4_168324, .L80247AC4_168324, .L80247ADC_16833C, .L80247AC4_168324, .L80247AF8_168358, 0
dlabel jtbl_8024C048
.word .L80247C08_168468, .L80247C08_168468, .L80247C20_168480, .L80247C08_168468, .L80247C3C_16849C, 0
.section .text
glabel filemenu_yesno_handle_input
/* 167A4C 802471EC 27BDFFE0 */ addiu $sp, $sp, -0x20
/* 167A50 802471F0 AFB20018 */ sw $s2, 0x18($sp)
/* 167A54 802471F4 0080902D */ daddu $s2, $a0, $zero
/* 167A58 802471F8 3C028025 */ lui $v0, %hi(filemenu_heldButtons)
/* 167A5C 802471FC 8C42C08C */ lw $v0, %lo(filemenu_heldButtons)($v0)
/* 167A60 80247200 3C030001 */ lui $v1, 1
/* 167A64 80247204 AFBF001C */ sw $ra, 0x1c($sp)
/* 167A68 80247208 AFB10014 */ sw $s1, 0x14($sp)
/* 167A6C 8024720C AFB00010 */ sw $s0, 0x10($sp)
/* 167A70 80247210 92450003 */ lbu $a1, 3($s2)
/* 167A74 80247214 00431024 */ and $v0, $v0, $v1
/* 167A78 80247218 10400007 */ beqz $v0, .L80247238
/* 167A7C 8024721C 00000000 */ nop
/* 167A80 80247220 92420002 */ lbu $v0, 2($s2)
/* 167A84 80247224 2442FFFF */ addiu $v0, $v0, -1
/* 167A88 80247228 A2420002 */ sb $v0, 2($s2)
/* 167A8C 8024722C 00021600 */ sll $v0, $v0, 0x18
/* 167A90 80247230 04420001 */ bltzl $v0, .L80247238
/* 167A94 80247234 A2400002 */ sb $zero, 2($s2)
.L80247238:
/* 167A98 80247238 3C028025 */ lui $v0, %hi(filemenu_heldButtons)
/* 167A9C 8024723C 8C42C08C */ lw $v0, %lo(filemenu_heldButtons)($v0)
/* 167AA0 80247240 3C030002 */ lui $v1, 2
/* 167AA4 80247244 00431024 */ and $v0, $v0, $v1
/* 167AA8 80247248 1040000C */ beqz $v0, .L8024727C
/* 167AAC 8024724C 00000000 */ nop
/* 167AB0 80247250 92420002 */ lbu $v0, 2($s2)
/* 167AB4 80247254 82430006 */ lb $v1, 6($s2)
/* 167AB8 80247258 24420001 */ addiu $v0, $v0, 1
/* 167ABC 8024725C A2420002 */ sb $v0, 2($s2)
/* 167AC0 80247260 00021600 */ sll $v0, $v0, 0x18
/* 167AC4 80247264 00021603 */ sra $v0, $v0, 0x18
/* 167AC8 80247268 0043102A */ slt $v0, $v0, $v1
/* 167ACC 8024726C 92430006 */ lbu $v1, 6($s2)
/* 167AD0 80247270 14400002 */ bnez $v0, .L8024727C
/* 167AD4 80247274 2462FFFF */ addiu $v0, $v1, -1
/* 167AD8 80247278 A2420002 */ sb $v0, 2($s2)
.L8024727C:
/* 167ADC 8024727C 82420004 */ lb $v0, 4($s2)
/* 167AE0 80247280 82430005 */ lb $v1, 5($s2)
/* 167AE4 80247284 00430018 */ mult $v0, $v1
/* 167AE8 80247288 00003812 */ mflo $a3
/* 167AEC 8024728C 82420006 */ lb $v0, 6($s2)
/* 167AF0 80247290 00000000 */ nop
/* 167AF4 80247294 00E20018 */ mult $a3, $v0
/* 167AF8 80247298 00002012 */ mflo $a0
/* 167AFC 8024729C 82420002 */ lb $v0, 2($s2)
/* 167B00 802472A0 00000000 */ nop
/* 167B04 802472A4 00620018 */ mult $v1, $v0
/* 167B08 802472A8 00001812 */ mflo $v1
/* 167B0C 802472AC 00831821 */ addu $v1, $a0, $v1
/* 167B10 802472B0 82440001 */ lb $a0, 1($s2)
/* 167B14 802472B4 8E420008 */ lw $v0, 8($s2)
/* 167B18 802472B8 00641821 */ addu $v1, $v1, $a0
/* 167B1C 802472BC 00431021 */ addu $v0, $v0, $v1
/* 167B20 802472C0 90420000 */ lbu $v0, ($v0)
/* 167B24 802472C4 A2420003 */ sb $v0, 3($s2)
/* 167B28 802472C8 304200FF */ andi $v0, $v0, 0xff
/* 167B2C 802472CC 10A20003 */ beq $a1, $v0, .L802472DC
/* 167B30 802472D0 00000000 */ nop
/* 167B34 802472D4 0C05272D */ jal sfx_play_sound
/* 167B38 802472D8 240400C7 */ addiu $a0, $zero, 0xc7
.L802472DC:
/* 167B3C 802472DC 3C108025 */ lui $s0, %hi(filemenu_pressedButtons)
/* 167B40 802472E0 2610C084 */ addiu $s0, $s0, %lo(filemenu_pressedButtons)
/* 167B44 802472E4 8E020000 */ lw $v0, ($s0)
/* 167B48 802472E8 30421000 */ andi $v0, $v0, 0x1000
/* 167B4C 802472EC 10400009 */ beqz $v0, .L80247314
/* 167B50 802472F0 24020004 */ addiu $v0, $zero, 4
/* 167B54 802472F4 82430004 */ lb $v1, 4($s2)
/* 167B58 802472F8 14620006 */ bne $v1, $v0, .L80247314
/* 167B5C 802472FC 0240202D */ daddu $a0, $s2, $zero
/* 167B60 80247300 0000282D */ daddu $a1, $zero, $zero
/* 167B64 80247304 0C090B65 */ jal filemenu_set_selected
/* 167B68 80247308 00A0302D */ daddu $a2, $a1, $zero
/* 167B6C 8024730C 34028000 */ ori $v0, $zero, 0x8000
/* 167B70 80247310 AE020000 */ sw $v0, ($s0)
.L80247314:
/* 167B74 80247314 3C028025 */ lui $v0, %hi(filemenu_pressedButtons)
/* 167B78 80247318 8C42C084 */ lw $v0, %lo(filemenu_pressedButtons)($v0)
/* 167B7C 8024731C 30428000 */ andi $v0, $v0, 0x8000
/* 167B80 80247320 10400225 */ beqz $v0, .L80247BB8
/* 167B84 80247324 00000000 */ nop
/* 167B88 80247328 0C05272D */ jal sfx_play_sound
/* 167B8C 8024732C 240400C9 */ addiu $a0, $zero, 0xc9
/* 167B90 80247330 92430003 */ lbu $v1, 3($s2)
/* 167B94 80247334 10600005 */ beqz $v1, .L8024734C
/* 167B98 80247338 24020001 */ addiu $v0, $zero, 1
/* 167B9C 8024733C 106201D8 */ beq $v1, $v0, .L80247AA0
/* 167BA0 80247340 00000000 */ nop
/* 167BA4 80247344 08091EEE */ j .L80247BB8
/* 167BA8 80247348 00000000 */ nop
.L8024734C:
/* 167BAC 8024734C 82430004 */ lb $v1, 4($s2)
/* 167BB0 80247350 2C620005 */ sltiu $v0, $v1, 5
/* 167BB4 80247354 10400218 */ beqz $v0, .L80247BB8
/* 167BB8 80247358 00031080 */ sll $v0, $v1, 2
/* 167BBC 8024735C 3C018025 */ lui $at, %hi(jtbl_8024C018)
/* 167BC0 80247360 00220821 */ addu $at, $at, $v0
/* 167BC4 80247364 8C22C018 */ lw $v0, %lo(jtbl_8024C018)($at)
/* 167BC8 80247368 00400008 */ jr $v0
/* 167BCC 8024736C 00000000 */ nop
.L80247370_167BD0:
/* 167BD0 80247370 24020002 */ addiu $v0, $zero, 2
/* 167BD4 80247374 3C038025 */ lui $v1, %hi(filemenu_menus + 0x8)
/* 167BD8 80247378 8C639B8C */ lw $v1, %lo(filemenu_menus + 0x8)($v1)
/* 167BDC 8024737C 3C048016 */ lui $a0, %hi(gWindows)
/* 167BE0 80247380 24849D50 */ addiu $a0, $a0, %lo(gWindows)
/* 167BE4 80247384 3C018025 */ lui $at, %hi(filemenu_8024C098)
/* 167BE8 80247388 A022C098 */ sb $v0, %lo(filemenu_8024C098)($at)
/* 167BEC 8024738C 240200B6 */ addiu $v0, $zero, 0xb6
/* 167BF0 80247390 A0600004 */ sb $zero, 4($v1)
/* 167BF4 80247394 808305E3 */ lb $v1, 0x5e3($a0)
/* 167BF8 80247398 A48205F0 */ sh $v0, 0x5f0($a0)
/* 167BFC 8024739C 24020019 */ addiu $v0, $zero, 0x19
/* 167C00 802473A0 A48205F2 */ sh $v0, 0x5f2($a0)
/* 167C04 802473A4 2402FFFF */ addiu $v0, $zero, -1
/* 167C08 802473A8 1062000B */ beq $v1, $v0, .L802473D8
/* 167C0C 802473AC 248505EC */ addiu $a1, $a0, 0x5ec
/* 167C10 802473B0 00031140 */ sll $v0, $v1, 5
/* 167C14 802473B4 00441021 */ addu $v0, $v0, $a0
/* 167C18 802473B8 94420010 */ lhu $v0, 0x10($v0)
/* 167C1C 802473BC 00021400 */ sll $v0, $v0, 0x10
/* 167C20 802473C0 00021C03 */ sra $v1, $v0, 0x10
/* 167C24 802473C4 000217C2 */ srl $v0, $v0, 0x1f
/* 167C28 802473C8 00621821 */ addu $v1, $v1, $v0
/* 167C2C 802473CC 00031843 */ sra $v1, $v1, 1
/* 167C30 802473D0 08091CF9 */ j .L802473E4
/* 167C34 802473D4 2463FFA5 */ addiu $v1, $v1, -0x5b
.L802473D8:
/* 167C38 802473D8 24030045 */ addiu $v1, $zero, 0x45
/* 167C3C 802473DC 3C048016 */ lui $a0, %hi(gWindows)
/* 167C40 802473E0 24849D50 */ addiu $a0, $a0, %lo(gWindows)
.L802473E4:
/* 167C44 802473E4 A4A30000 */ sh $v1, ($a1)
/* 167C48 802473E8 948205F2 */ lhu $v0, 0x5f2($a0)
/* 167C4C 802473EC 00021400 */ sll $v0, $v0, 0x10
/* 167C50 802473F0 00021C03 */ sra $v1, $v0, 0x10
/* 167C54 802473F4 000217C2 */ srl $v0, $v0, 0x1f
/* 167C58 802473F8 00621821 */ addu $v1, $v1, $v0
/* 167C5C 802473FC 00032843 */ sra $a1, $v1, 1
/* 167C60 80247400 808305E3 */ lb $v1, 0x5e3($a0)
/* 167C64 80247404 2402FFFF */ addiu $v0, $zero, -1
/* 167C68 80247408 1062000B */ beq $v1, $v0, .L80247438
/* 167C6C 8024740C 248605EE */ addiu $a2, $a0, 0x5ee
/* 167C70 80247410 00031140 */ sll $v0, $v1, 5
/* 167C74 80247414 00441021 */ addu $v0, $v0, $a0
/* 167C78 80247418 94420012 */ lhu $v0, 0x12($v0)
/* 167C7C 8024741C 00021400 */ sll $v0, $v0, 0x10
/* 167C80 80247420 00021C03 */ sra $v1, $v0, 0x10
/* 167C84 80247424 000217C2 */ srl $v0, $v0, 0x1f
/* 167C88 80247428 00621821 */ addu $v1, $v1, $v0
/* 167C8C 8024742C 00031843 */ sra $v1, $v1, 1
/* 167C90 80247430 08091D10 */ j .L80247440
/* 167C94 80247434 00651023 */ subu $v0, $v1, $a1
.L80247438:
/* 167C98 80247438 24020078 */ addiu $v0, $zero, 0x78
/* 167C9C 8024743C 00451023 */ subu $v0, $v0, $a1
.L80247440:
/* 167CA0 80247440 2404002F */ addiu $a0, $zero, 0x2f
/* 167CA4 80247444 24050001 */ addiu $a1, $zero, 1
/* 167CA8 80247448 0C051F9F */ jal set_window_update
/* 167CAC 8024744C A4C20000 */ sh $v0, ($a2)
/* 167CB0 80247450 3C058024 */ lui $a1, %hi(filemenu_update_hidden_name_confirm)
/* 167CB4 80247454 24A53EEC */ addiu $a1, $a1, %lo(filemenu_update_hidden_name_confirm)
/* 167CB8 80247458 0C051F9F */ jal set_window_update
/* 167CBC 8024745C 24040032 */ addiu $a0, $zero, 0x32
/* 167CC0 80247460 0000202D */ daddu $a0, $zero, $zero
/* 167CC4 80247464 3C028025 */ lui $v0, %hi(filemenu_menus)
/* 167CC8 80247468 8C429B84 */ lw $v0, %lo(filemenu_menus)($v0)
/* 167CCC 8024746C 3C068007 */ lui $a2, %hi(gSaveSlotMetadata)
/* 167CD0 80247470 24C679C4 */ addiu $a2, $a2, %lo(gSaveSlotMetadata)
/* 167CD4 80247474 90500003 */ lbu $s0, 3($v0)
/* 167CD8 80247478 240500F7 */ addiu $a1, $zero, 0xf7
/* 167CDC 8024747C 00101040 */ sll $v0, $s0, 1
/* 167CE0 80247480 00501021 */ addu $v0, $v0, $s0
/* 167CE4 80247484 000218C0 */ sll $v1, $v0, 3
/* 167CE8 80247488 00831021 */ addu $v0, $a0, $v1
.L8024748C:
/* 167CEC 8024748C 00461021 */ addu $v0, $v0, $a2
/* 167CF0 80247490 A0450007 */ sb $a1, 7($v0)
/* 167CF4 80247494 24840001 */ addiu $a0, $a0, 1
/* 167CF8 80247498 28820008 */ slti $v0, $a0, 8
/* 167CFC 8024749C 1440FFFB */ bnez $v0, .L8024748C
/* 167D00 802474A0 00831021 */ addu $v0, $a0, $v1
/* 167D04 802474A4 0200202D */ daddu $a0, $s0, $zero
/* 167D08 802474A8 3C038007 */ lui $v1, %hi(gSaveSlotMetadata)
/* 167D0C 802474AC 246379C4 */ addiu $v1, $v1, %lo(gSaveSlotMetadata)
/* 167D10 802474B0 00101040 */ sll $v0, $s0, 1
/* 167D14 802474B4 00501021 */ addu $v0, $v0, $s0
/* 167D18 802474B8 000210C0 */ sll $v0, $v0, 3
/* 167D1C 802474BC 00431021 */ addu $v0, $v0, $v1
/* 167D20 802474C0 A0400006 */ sb $zero, 6($v0)
/* 167D24 802474C4 AC400000 */ sw $zero, ($v0)
/* 167D28 802474C8 0C00AD0B */ jal fio_erase_game
/* 167D2C 802474CC A0400004 */ sb $zero, 4($v0)
/* 167D30 802474D0 3C018007 */ lui $at, %hi(gSaveSlotHasData)
/* 167D34 802474D4 00300821 */ addu $at, $at, $s0
/* 167D38 802474D8 A0207A24 */ sb $zero, %lo(gSaveSlotHasData)($at)
/* 167D3C 802474DC 08091EEE */ j .L80247BB8
/* 167D40 802474E0 00000000 */ nop
.L802474E4_167D44:
/* 167D44 802474E4 24020002 */ addiu $v0, $zero, 2
/* 167D48 802474E8 3C018025 */ lui $at, %hi(filemenu_8024C098)
/* 167D4C 802474EC A022C098 */ sb $v0, %lo(filemenu_8024C098)($at)
/* 167D50 802474F0 24020002 */ addiu $v0, $zero, 2
/* 167D54 802474F4 3C048016 */ lui $a0, %hi(gWindows)
/* 167D58 802474F8 24849D50 */ addiu $a0, $a0, %lo(gWindows)
/* 167D5C 802474FC 3C038025 */ lui $v1, %hi(filemenu_menus + 0x8)
/* 167D60 80247500 8C639B8C */ lw $v1, %lo(filemenu_menus + 0x8)($v1)
/* 167D64 80247504 A0620004 */ sb $v0, 4($v1)
/* 167D68 80247508 808305E3 */ lb $v1, 0x5e3($a0)
/* 167D6C 8024750C 2402009A */ addiu $v0, $zero, 0x9a
/* 167D70 80247510 A48205F0 */ sh $v0, 0x5f0($a0)
/* 167D74 80247514 24020027 */ addiu $v0, $zero, 0x27
/* 167D78 80247518 A48205F2 */ sh $v0, 0x5f2($a0)
/* 167D7C 8024751C 2402FFFF */ addiu $v0, $zero, -1
/* 167D80 80247520 1062000B */ beq $v1, $v0, .L80247550
/* 167D84 80247524 248505EC */ addiu $a1, $a0, 0x5ec
/* 167D88 80247528 00031140 */ sll $v0, $v1, 5
/* 167D8C 8024752C 00441021 */ addu $v0, $v0, $a0
/* 167D90 80247530 94420010 */ lhu $v0, 0x10($v0)
/* 167D94 80247534 00021400 */ sll $v0, $v0, 0x10
/* 167D98 80247538 00021C03 */ sra $v1, $v0, 0x10
/* 167D9C 8024753C 000217C2 */ srl $v0, $v0, 0x1f
/* 167DA0 80247540 00621821 */ addu $v1, $v1, $v0
/* 167DA4 80247544 00031843 */ sra $v1, $v1, 1
/* 167DA8 80247548 08091D57 */ j .L8024755C
/* 167DAC 8024754C 2463FFB3 */ addiu $v1, $v1, -0x4d
.L80247550:
/* 167DB0 80247550 24030053 */ addiu $v1, $zero, 0x53
/* 167DB4 80247554 3C048016 */ lui $a0, %hi(gWindows)
/* 167DB8 80247558 24849D50 */ addiu $a0, $a0, %lo(gWindows)
.L8024755C:
/* 167DBC 8024755C A4A30000 */ sh $v1, ($a1)
/* 167DC0 80247560 948205F2 */ lhu $v0, 0x5f2($a0)
/* 167DC4 80247564 00021400 */ sll $v0, $v0, 0x10
/* 167DC8 80247568 00021C03 */ sra $v1, $v0, 0x10
/* 167DCC 8024756C 000217C2 */ srl $v0, $v0, 0x1f
/* 167DD0 80247570 00621821 */ addu $v1, $v1, $v0
/* 167DD4 80247574 00032843 */ sra $a1, $v1, 1
/* 167DD8 80247578 808305E3 */ lb $v1, 0x5e3($a0)
/* 167DDC 8024757C 2402FFFF */ addiu $v0, $zero, -1
/* 167DE0 80247580 1062000B */ beq $v1, $v0, .L802475B0
/* 167DE4 80247584 248605EE */ addiu $a2, $a0, 0x5ee
/* 167DE8 80247588 00031140 */ sll $v0, $v1, 5
/* 167DEC 8024758C 00441021 */ addu $v0, $v0, $a0
/* 167DF0 80247590 94420012 */ lhu $v0, 0x12($v0)
/* 167DF4 80247594 00021400 */ sll $v0, $v0, 0x10
/* 167DF8 80247598 00021C03 */ sra $v1, $v0, 0x10
/* 167DFC 8024759C 000217C2 */ srl $v0, $v0, 0x1f
/* 167E00 802475A0 00621821 */ addu $v1, $v1, $v0
/* 167E04 802475A4 00031843 */ sra $v1, $v1, 1
/* 167E08 802475A8 08091D6E */ j .L802475B8
/* 167E0C 802475AC 00651023 */ subu $v0, $v1, $a1
.L802475B0:
/* 167E10 802475B0 24020078 */ addiu $v0, $zero, 0x78
/* 167E14 802475B4 00451023 */ subu $v0, $v0, $a1
.L802475B8:
/* 167E18 802475B8 2404002F */ addiu $a0, $zero, 0x2f
/* 167E1C 802475BC 24050001 */ addiu $a1, $zero, 1
/* 167E20 802475C0 0C051F9F */ jal set_window_update
/* 167E24 802475C4 A4C20000 */ sh $v0, ($a2)
/* 167E28 802475C8 3C058024 */ lui $a1, %hi(filemenu_update_hidden_name_confirm)
/* 167E2C 802475CC 24A53EEC */ addiu $a1, $a1, %lo(filemenu_update_hidden_name_confirm)
/* 167E30 802475D0 0C051F9F */ jal set_window_update
/* 167E34 802475D4 24040032 */ addiu $a0, $zero, 0x32
/* 167E38 802475D8 3C118025 */ lui $s1, %hi(filemenu_loadedFileIdx)
/* 167E3C 802475DC 2631C094 */ addiu $s1, $s1, %lo(filemenu_loadedFileIdx)
/* 167E40 802475E0 0C00ACB4 */ jal fio_load_game
/* 167E44 802475E4 8E240000 */ lw $a0, ($s1)
/* 167E48 802475E8 3C108025 */ lui $s0, %hi(filemenu_iterFileIdx)
/* 167E4C 802475EC 2610C080 */ addiu $s0, $s0, %lo(filemenu_iterFileIdx)
/* 167E50 802475F0 3C068007 */ lui $a2, %hi(gSaveSlotMetadata)
/* 167E54 802475F4 24C679C4 */ addiu $a2, $a2, %lo(gSaveSlotMetadata)
/* 167E58 802475F8 8E040000 */ lw $a0, ($s0)
/* 167E5C 802475FC 8E250000 */ lw $a1, ($s1)
/* 167E60 80247600 0080102D */ daddu $v0, $a0, $zero
/* 167E64 80247604 00021840 */ sll $v1, $v0, 1
/* 167E68 80247608 00621821 */ addu $v1, $v1, $v0
/* 167E6C 8024760C 000318C0 */ sll $v1, $v1, 3
/* 167E70 80247610 00661821 */ addu $v1, $v1, $a2
/* 167E74 80247614 00051040 */ sll $v0, $a1, 1
/* 167E78 80247618 00451021 */ addu $v0, $v0, $a1
/* 167E7C 8024761C 000210C0 */ sll $v0, $v0, 3
/* 167E80 80247620 00461021 */ addu $v0, $v0, $a2
/* 167E84 80247624 8C480000 */ lw $t0, ($v0)
/* 167E88 80247628 8C490004 */ lw $t1, 4($v0)
/* 167E8C 8024762C 8C4A0008 */ lw $t2, 8($v0)
/* 167E90 80247630 8C4B000C */ lw $t3, 0xc($v0)
/* 167E94 80247634 AC680000 */ sw $t0, ($v1)
/* 167E98 80247638 AC690004 */ sw $t1, 4($v1)
/* 167E9C 8024763C AC6A0008 */ sw $t2, 8($v1)
/* 167EA0 80247640 AC6B000C */ sw $t3, 0xc($v1)
/* 167EA4 80247644 8C480010 */ lw $t0, 0x10($v0)
/* 167EA8 80247648 8C490014 */ lw $t1, 0x14($v0)
/* 167EAC 8024764C AC680010 */ sw $t0, 0x10($v1)
/* 167EB0 80247650 0C00ACDD */ jal fio_save_game
/* 167EB4 80247654 AC690014 */ sw $t1, 0x14($v1)
/* 167EB8 80247658 8E030000 */ lw $v1, ($s0)
/* 167EBC 8024765C 08091DF9 */ j .L802477E4
/* 167EC0 80247660 24020001 */ addiu $v0, $zero, 1
.L80247664_167EC4:
/* 167EC4 80247664 24020002 */ addiu $v0, $zero, 2
/* 167EC8 80247668 3C018025 */ lui $at, %hi(filemenu_8024C098)
/* 167ECC 8024766C A022C098 */ sb $v0, %lo(filemenu_8024C098)($at)
/* 167ED0 80247670 24020001 */ addiu $v0, $zero, 1
/* 167ED4 80247674 3C048016 */ lui $a0, %hi(gWindows)
/* 167ED8 80247678 24849D50 */ addiu $a0, $a0, %lo(gWindows)
/* 167EDC 8024767C 3C038025 */ lui $v1, %hi(filemenu_menus + 0x8)
/* 167EE0 80247680 8C639B8C */ lw $v1, %lo(filemenu_menus + 0x8)($v1)
/* 167EE4 80247684 A0620004 */ sb $v0, 4($v1)
/* 167EE8 80247688 808305E3 */ lb $v1, 0x5e3($a0)
/* 167EEC 8024768C 24020099 */ addiu $v0, $zero, 0x99
/* 167EF0 80247690 A48205F0 */ sh $v0, 0x5f0($a0)
/* 167EF4 80247694 24020019 */ addiu $v0, $zero, 0x19
/* 167EF8 80247698 A48205F2 */ sh $v0, 0x5f2($a0)
/* 167EFC 8024769C 2402FFFF */ addiu $v0, $zero, -1
/* 167F00 802476A0 1062000B */ beq $v1, $v0, .L802476D0
/* 167F04 802476A4 248505EC */ addiu $a1, $a0, 0x5ec
/* 167F08 802476A8 00031140 */ sll $v0, $v1, 5
/* 167F0C 802476AC 00441021 */ addu $v0, $v0, $a0
/* 167F10 802476B0 94420010 */ lhu $v0, 0x10($v0)
/* 167F14 802476B4 00021400 */ sll $v0, $v0, 0x10
/* 167F18 802476B8 00021C03 */ sra $v1, $v0, 0x10
/* 167F1C 802476BC 000217C2 */ srl $v0, $v0, 0x1f
/* 167F20 802476C0 00621821 */ addu $v1, $v1, $v0
/* 167F24 802476C4 00031843 */ sra $v1, $v1, 1
/* 167F28 802476C8 08091DB7 */ j .L802476DC
/* 167F2C 802476CC 2463FFB4 */ addiu $v1, $v1, -0x4c
.L802476D0:
/* 167F30 802476D0 24030054 */ addiu $v1, $zero, 0x54
/* 167F34 802476D4 3C048016 */ lui $a0, %hi(gWindows)
/* 167F38 802476D8 24849D50 */ addiu $a0, $a0, %lo(gWindows)
.L802476DC:
/* 167F3C 802476DC A4A30000 */ sh $v1, ($a1)
/* 167F40 802476E0 948205F2 */ lhu $v0, 0x5f2($a0)
/* 167F44 802476E4 00021400 */ sll $v0, $v0, 0x10
/* 167F48 802476E8 00021C03 */ sra $v1, $v0, 0x10
/* 167F4C 802476EC 000217C2 */ srl $v0, $v0, 0x1f
/* 167F50 802476F0 00621821 */ addu $v1, $v1, $v0
/* 167F54 802476F4 00032843 */ sra $a1, $v1, 1
/* 167F58 802476F8 808305E3 */ lb $v1, 0x5e3($a0)
/* 167F5C 802476FC 2402FFFF */ addiu $v0, $zero, -1
/* 167F60 80247700 1062000B */ beq $v1, $v0, .L80247730
/* 167F64 80247704 248605EE */ addiu $a2, $a0, 0x5ee
/* 167F68 80247708 00031140 */ sll $v0, $v1, 5
/* 167F6C 8024770C 00441021 */ addu $v0, $v0, $a0
/* 167F70 80247710 94420012 */ lhu $v0, 0x12($v0)
/* 167F74 80247714 00021400 */ sll $v0, $v0, 0x10
/* 167F78 80247718 00021C03 */ sra $v1, $v0, 0x10
/* 167F7C 8024771C 000217C2 */ srl $v0, $v0, 0x1f
/* 167F80 80247720 00621821 */ addu $v1, $v1, $v0
/* 167F84 80247724 00031843 */ sra $v1, $v1, 1
/* 167F88 80247728 08091DCE */ j .L80247738
/* 167F8C 8024772C 00651023 */ subu $v0, $v1, $a1
.L80247730:
/* 167F90 80247730 24020078 */ addiu $v0, $zero, 0x78
/* 167F94 80247734 00451023 */ subu $v0, $v0, $a1
.L80247738:
/* 167F98 80247738 2404002F */ addiu $a0, $zero, 0x2f
/* 167F9C 8024773C 24050001 */ addiu $a1, $zero, 1
/* 167FA0 80247740 0C051F9F */ jal set_window_update
/* 167FA4 80247744 A4C20000 */ sh $v0, ($a2)
/* 167FA8 80247748 3C058024 */ lui $a1, %hi(filemenu_update_hidden_name_confirm)
/* 167FAC 8024774C 24A53EEC */ addiu $a1, $a1, %lo(filemenu_update_hidden_name_confirm)
/* 167FB0 80247750 0C051F9F */ jal set_window_update
/* 167FB4 80247754 24040032 */ addiu $a0, $zero, 0x32
/* 167FB8 80247758 3C108025 */ lui $s0, %hi(filemenu_menus)
/* 167FBC 8024775C 26109B84 */ addiu $s0, $s0, %lo(filemenu_menus)
/* 167FC0 80247760 8E020000 */ lw $v0, ($s0)
/* 167FC4 80247764 90420003 */ lbu $v0, 3($v0)
/* 167FC8 80247768 3C058007 */ lui $a1, %hi(gSaveSlotMetadata)
/* 167FCC 8024776C 24A579C4 */ addiu $a1, $a1, %lo(gSaveSlotMetadata)
/* 167FD0 80247770 00021840 */ sll $v1, $v0, 1
/* 167FD4 80247774 00621821 */ addu $v1, $v1, $v0
/* 167FD8 80247778 3C028007 */ lui $v0, %hi(gGameStatusPtr)
/* 167FDC 8024777C 8C42419C */ lw $v0, %lo(gGameStatusPtr)($v0)
/* 167FE0 80247780 000318C0 */ sll $v1, $v1, 3
/* 167FE4 80247784 90440166 */ lbu $a0, 0x166($v0)
/* 167FE8 80247788 00651821 */ addu $v1, $v1, $a1
/* 167FEC 8024778C 00041040 */ sll $v0, $a0, 1
/* 167FF0 80247790 00441021 */ addu $v0, $v0, $a0
/* 167FF4 80247794 000210C0 */ sll $v0, $v0, 3
/* 167FF8 80247798 00451021 */ addu $v0, $v0, $a1
/* 167FFC 8024779C 8C480000 */ lw $t0, ($v0)
/* 168000 802477A0 8C490004 */ lw $t1, 4($v0)
/* 168004 802477A4 8C4A0008 */ lw $t2, 8($v0)
/* 168008 802477A8 8C4B000C */ lw $t3, 0xc($v0)
/* 16800C 802477AC AC680000 */ sw $t0, ($v1)
/* 168010 802477B0 AC690004 */ sw $t1, 4($v1)
/* 168014 802477B4 AC6A0008 */ sw $t2, 8($v1)
/* 168018 802477B8 AC6B000C */ sw $t3, 0xc($v1)
/* 16801C 802477BC 8C480010 */ lw $t0, 0x10($v0)
/* 168020 802477C0 8C490014 */ lw $t1, 0x14($v0)
/* 168024 802477C4 AC680010 */ sw $t0, 0x10($v1)
/* 168028 802477C8 AC690014 */ sw $t1, 0x14($v1)
/* 16802C 802477CC 8E020000 */ lw $v0, ($s0)
/* 168030 802477D0 0C00ACDD */ jal fio_save_game
/* 168034 802477D4 90440003 */ lbu $a0, 3($v0)
/* 168038 802477D8 8E020000 */ lw $v0, ($s0)
/* 16803C 802477DC 90430003 */ lbu $v1, 3($v0)
/* 168040 802477E0 24020001 */ addiu $v0, $zero, 1
.L802477E4:
/* 168044 802477E4 3C018007 */ lui $at, %hi(gSaveSlotHasData)
/* 168048 802477E8 00230821 */ addu $at, $at, $v1
/* 16804C 802477EC A0227A24 */ sb $v0, %lo(gSaveSlotHasData)($at)
/* 168050 802477F0 08091EEE */ j .L80247BB8
/* 168054 802477F4 00000000 */ nop
.L802477F8_168058:
/* 168058 802477F8 0C039CE8 */ jal clear_player_data
/* 16805C 802477FC 00000000 */ nop
/* 168060 80247800 0C0514C8 */ jal clear_saved_variables
/* 168064 80247804 00000000 */ nop
/* 168068 80247808 0000202D */ daddu $a0, $zero, $zero
/* 16806C 8024780C 3C05F5DE */ lui $a1, 0xf5de
/* 168070 80247810 34A50180 */ ori $a1, $a1, 0x180
/* 168074 80247814 2406FF80 */ addiu $a2, $zero, -0x80
/* 168078 80247818 3C038007 */ lui $v1, %hi(gGameStatusPtr)
/* 16807C 8024781C 8C63419C */ lw $v1, %lo(gGameStatusPtr)($v1)
/* 168080 80247820 2402000B */ addiu $v0, $zero, 0xb
/* 168084 80247824 A4600086 */ sh $zero, 0x86($v1)
/* 168088 80247828 A462008C */ sh $v0, 0x8c($v1)
/* 16808C 8024782C 0C0B2026 */ jal evt_set_variable
/* 168090 80247830 A460008E */ sh $zero, 0x8e($v1)
/* 168094 80247834 0000202D */ daddu $a0, $zero, $zero
/* 168098 80247838 3C028025 */ lui $v0, %hi(filemenu_menus)
/* 16809C 8024783C 8C429B84 */ lw $v0, %lo(filemenu_menus)($v0)
/* 1680A0 80247840 3C078007 */ lui $a3, %hi(gSaveSlotMetadata)
/* 1680A4 80247844 24E779C4 */ addiu $a3, $a3, %lo(gSaveSlotMetadata)
/* 1680A8 80247848 90510003 */ lbu $s1, 3($v0)
/* 1680AC 8024784C 3C068025 */ lui $a2, %hi(filemenu_8024C110)
/* 1680B0 80247850 24C6C110 */ addiu $a2, $a2, %lo(filemenu_8024C110)
/* 1680B4 80247854 00111040 */ sll $v0, $s1, 1
/* 1680B8 80247858 00511021 */ addu $v0, $v0, $s1
/* 1680BC 8024785C 000228C0 */ sll $a1, $v0, 3
/* 1680C0 80247860 00851021 */ addu $v0, $a0, $a1
.L80247864:
/* 1680C4 80247864 00861821 */ addu $v1, $a0, $a2
/* 1680C8 80247868 24840001 */ addiu $a0, $a0, 1
/* 1680CC 8024786C 90630000 */ lbu $v1, ($v1)
/* 1680D0 80247870 00471021 */ addu $v0, $v0, $a3
/* 1680D4 80247874 A0430007 */ sb $v1, 7($v0)
/* 1680D8 80247878 28820008 */ slti $v0, $a0, 8
/* 1680DC 8024787C 1440FFF9 */ bnez $v0, .L80247864
/* 1680E0 80247880 00851021 */ addu $v0, $a0, $a1
/* 1680E4 80247884 0C00ACDD */ jal fio_save_game
/* 1680E8 80247888 0220202D */ daddu $a0, $s1, $zero
/* 1680EC 8024788C 24040030 */ addiu $a0, $zero, 0x30
/* 1680F0 80247890 3C108024 */ lui $s0, %hi(filemenu_update_hidden_name_input)
/* 1680F4 80247894 26103628 */ addiu $s0, $s0, %lo(filemenu_update_hidden_name_input)
/* 1680F8 80247898 24020001 */ addiu $v0, $zero, 1
/* 1680FC 8024789C 3C018007 */ lui $at, %hi(gSaveSlotHasData)
/* 168100 802478A0 00310821 */ addu $at, $at, $s1
/* 168104 802478A4 A0227A24 */ sb $v0, %lo(gSaveSlotHasData)($at)
/* 168108 802478A8 0C051F9F */ jal set_window_update
/* 16810C 802478AC 0200282D */ daddu $a1, $s0, $zero
/* 168110 802478B0 24040031 */ addiu $a0, $zero, 0x31
/* 168114 802478B4 0C051F9F */ jal set_window_update
/* 168118 802478B8 0200282D */ daddu $a1, $s0, $zero
/* 16811C 802478BC 2404002D */ addiu $a0, $zero, 0x2d
/* 168120 802478C0 3C108024 */ lui $s0, %hi(filemenu_update_show_with_rotation)
/* 168124 802478C4 2610381C */ addiu $s0, $s0, %lo(filemenu_update_show_with_rotation)
/* 168128 802478C8 0C051F9F */ jal set_window_update
/* 16812C 802478CC 0200282D */ daddu $a1, $s0, $zero
/* 168130 802478D0 24040033 */ addiu $a0, $zero, 0x33
/* 168134 802478D4 0C051F9F */ jal set_window_update
/* 168138 802478D8 0200282D */ daddu $a1, $s0, $zero
/* 16813C 802478DC 24040034 */ addiu $a0, $zero, 0x34
/* 168140 802478E0 0C051F9F */ jal set_window_update
/* 168144 802478E4 0200282D */ daddu $a1, $s0, $zero
/* 168148 802478E8 24040035 */ addiu $a0, $zero, 0x35
/* 16814C 802478EC 0C051F9F */ jal set_window_update
/* 168150 802478F0 0200282D */ daddu $a1, $s0, $zero
/* 168154 802478F4 24040036 */ addiu $a0, $zero, 0x36
/* 168158 802478F8 0C051F9F */ jal set_window_update
/* 16815C 802478FC 0200282D */ daddu $a1, $s0, $zero
/* 168160 80247900 24040037 */ addiu $a0, $zero, 0x37
/* 168164 80247904 0C051F9F */ jal set_window_update
/* 168168 80247908 0200282D */ daddu $a1, $s0, $zero
/* 16816C 8024790C 24040035 */ addiu $a0, $zero, 0x35
/* 168170 80247910 0C051F9F */ jal set_window_update
/* 168174 80247914 0200282D */ daddu $a1, $s0, $zero
/* 168178 80247918 24040038 */ addiu $a0, $zero, 0x38
/* 16817C 8024791C 0C051F9F */ jal set_window_update
/* 168180 80247920 0200282D */ daddu $a1, $s0, $zero
/* 168184 80247924 24040039 */ addiu $a0, $zero, 0x39
/* 168188 80247928 0C051F9F */ jal set_window_update
/* 16818C 8024792C 0200282D */ daddu $a1, $s0, $zero
/* 168190 80247930 2404003A */ addiu $a0, $zero, 0x3a
/* 168194 80247934 0C051F9F */ jal set_window_update
/* 168198 80247938 0200282D */ daddu $a1, $s0, $zero
/* 16819C 8024793C 2404003B */ addiu $a0, $zero, 0x3b
/* 1681A0 80247940 0C051F9F */ jal set_window_update
/* 1681A4 80247944 0200282D */ daddu $a1, $s0, $zero
/* 1681A8 80247948 3C058024 */ lui $a1, %hi(filemenu_update_hidden_name_confirm)
/* 1681AC 8024794C 24A53EEC */ addiu $a1, $a1, %lo(filemenu_update_hidden_name_confirm)
/* 1681B0 80247950 0C051F9F */ jal set_window_update
/* 1681B4 80247954 24040032 */ addiu $a0, $zero, 0x32
/* 1681B8 80247958 24020002 */ addiu $v0, $zero, 2
/* 1681BC 8024795C 3C018025 */ lui $at, %hi(filemenu_8024C098)
/* 1681C0 80247960 A022C098 */ sb $v0, %lo(filemenu_8024C098)($at)
/* 1681C4 80247964 24020003 */ addiu $v0, $zero, 3
/* 1681C8 80247968 3C048016 */ lui $a0, %hi(gWindows)
/* 1681CC 8024796C 24849D50 */ addiu $a0, $a0, %lo(gWindows)
/* 1681D0 80247970 3C038025 */ lui $v1, %hi(filemenu_menus + 0x8)
/* 1681D4 80247974 8C639B8C */ lw $v1, %lo(filemenu_menus + 0x8)($v1)
/* 1681D8 80247978 A0620004 */ sb $v0, 4($v1)
/* 1681DC 8024797C 808305E3 */ lb $v1, 0x5e3($a0)
/* 1681E0 80247980 240200B8 */ addiu $v0, $zero, 0xb8
/* 1681E4 80247984 A48205F0 */ sh $v0, 0x5f0($a0)
/* 1681E8 80247988 24020019 */ addiu $v0, $zero, 0x19
/* 1681EC 8024798C A48205F2 */ sh $v0, 0x5f2($a0)
/* 1681F0 80247990 2402FFFF */ addiu $v0, $zero, -1
/* 1681F4 80247994 1062000B */ beq $v1, $v0, .L802479C4
/* 1681F8 80247998 248505EC */ addiu $a1, $a0, 0x5ec
/* 1681FC 8024799C 00031140 */ sll $v0, $v1, 5
/* 168200 802479A0 00441021 */ addu $v0, $v0, $a0
/* 168204 802479A4 94420010 */ lhu $v0, 0x10($v0)
/* 168208 802479A8 00021400 */ sll $v0, $v0, 0x10
/* 16820C 802479AC 00021C03 */ sra $v1, $v0, 0x10
/* 168210 802479B0 000217C2 */ srl $v0, $v0, 0x1f
/* 168214 802479B4 00621821 */ addu $v1, $v1, $v0
/* 168218 802479B8 00031843 */ sra $v1, $v1, 1
/* 16821C 802479BC 08091E74 */ j .L802479D0
/* 168220 802479C0 2463FFA4 */ addiu $v1, $v1, -0x5c
.L802479C4:
/* 168224 802479C4 24030044 */ addiu $v1, $zero, 0x44
/* 168228 802479C8 3C048016 */ lui $a0, %hi(gWindows)
/* 16822C 802479CC 24849D50 */ addiu $a0, $a0, %lo(gWindows)
.L802479D0:
/* 168230 802479D0 A4A30000 */ sh $v1, ($a1)
/* 168234 802479D4 948205F2 */ lhu $v0, 0x5f2($a0)
/* 168238 802479D8 00021400 */ sll $v0, $v0, 0x10
/* 16823C 802479DC 00021C03 */ sra $v1, $v0, 0x10
/* 168240 802479E0 000217C2 */ srl $v0, $v0, 0x1f
/* 168244 802479E4 00621821 */ addu $v1, $v1, $v0
/* 168248 802479E8 00032843 */ sra $a1, $v1, 1
/* 16824C 802479EC 808305E3 */ lb $v1, 0x5e3($a0)
/* 168250 802479F0 2402FFFF */ addiu $v0, $zero, -1
/* 168254 802479F4 1062000B */ beq $v1, $v0, .L80247A24
/* 168258 802479F8 248605EE */ addiu $a2, $a0, 0x5ee
/* 16825C 802479FC 00031140 */ sll $v0, $v1, 5
/* 168260 80247A00 00441021 */ addu $v0, $v0, $a0
/* 168264 80247A04 94420012 */ lhu $v0, 0x12($v0)
/* 168268 80247A08 00021400 */ sll $v0, $v0, 0x10
/* 16826C 80247A0C 00021C03 */ sra $v1, $v0, 0x10
/* 168270 80247A10 000217C2 */ srl $v0, $v0, 0x1f
/* 168274 80247A14 00621821 */ addu $v1, $v1, $v0
/* 168278 80247A18 00031843 */ sra $v1, $v1, 1
/* 16827C 80247A1C 08091E8B */ j .L80247A2C
/* 168280 80247A20 00651023 */ subu $v0, $v1, $a1
.L80247A24:
/* 168284 80247A24 24020078 */ addiu $v0, $zero, 0x78
/* 168288 80247A28 00451023 */ subu $v0, $v0, $a1
.L80247A2C:
/* 16828C 80247A2C A4C20000 */ sh $v0, ($a2)
/* 168290 80247A30 2404002F */ addiu $a0, $zero, 0x2f
/* 168294 80247A34 08091EEC */ j .L80247BB0
/* 168298 80247A38 24050001 */ addiu $a1, $zero, 1
.L80247A3C_16829C:
/* 16829C 80247A3C 3C05800E */ lui $a1, %hi(D_800D95E8)
/* 1682A0 80247A40 24A595E8 */ addiu $a1, $a1, %lo(D_800D95E8)
/* 1682A4 80247A44 24060001 */ addiu $a2, $zero, 1
/* 1682A8 80247A48 8CA20038 */ lw $v0, 0x38($a1)
/* 1682AC 80247A4C 3C038007 */ lui $v1, %hi(gGameStatusPtr)
/* 1682B0 80247A50 8C63419C */ lw $v1, %lo(gGameStatusPtr)($v1)
/* 1682B4 80247A54 3C048025 */ lui $a0, %hi(filemenu_menus)
/* 1682B8 80247A58 8C849B84 */ lw $a0, %lo(filemenu_menus)($a0)
/* 1682BC 80247A5C 00C21023 */ subu $v0, $a2, $v0
/* 1682C0 80247A60 906300AB */ lbu $v1, 0xab($v1)
/* 1682C4 80247A64 90900003 */ lbu $s0, 3($a0)
/* 1682C8 80247A68 14620004 */ bne $v1, $v0, .L80247A7C
/* 1682CC 80247A6C 00C31023 */ subu $v0, $a2, $v1
/* 1682D0 80247A70 90A2003F */ lbu $v0, 0x3f($a1)
/* 1682D4 80247A74 12020004 */ beq $s0, $v0, .L80247A88
/* 1682D8 80247A78 00C31023 */ subu $v0, $a2, $v1
.L80247A7C:
/* 1682DC 80247A7C ACA20038 */ sw $v0, 0x38($a1)
/* 1682E0 80247A80 0C00AC13 */ jal fio_flush_backups
/* 1682E4 80247A84 ACB0003C */ sw $s0, 0x3c($a1)
.L80247A88:
/* 1682E8 80247A88 0C00ACB4 */ jal fio_load_game
/* 1682EC 80247A8C 0200202D */ daddu $a0, $s0, $zero
/* 1682F0 80247A90 0C00CD3C */ jal set_game_mode
/* 1682F4 80247A94 2404000F */ addiu $a0, $zero, 0xf
/* 1682F8 80247A98 08091EEE */ j .L80247BB8
/* 1682FC 80247A9C 00000000 */ nop
.L80247AA0:
/* 168300 80247AA0 82430004 */ lb $v1, 4($s2)
/* 168304 80247AA4 2C620005 */ sltiu $v0, $v1, 5
/* 168308 80247AA8 10400043 */ beqz $v0, .L80247BB8
/* 16830C 80247AAC 00031080 */ sll $v0, $v1, 2
/* 168310 80247AB0 3C018025 */ lui $at, %hi(jtbl_8024C030)
/* 168314 80247AB4 00220821 */ addu $at, $at, $v0
/* 168318 80247AB8 8C22C030 */ lw $v0, %lo(jtbl_8024C030)($at)
/* 16831C 80247ABC 00400008 */ jr $v0
/* 168320 80247AC0 00000000 */ nop
.L80247AC4_168324:
/* 168324 80247AC4 3C018025 */ lui $at, %hi(filemenu_8024C098)
/* 168328 80247AC8 A020C098 */ sb $zero, %lo(filemenu_8024C098)($at)
/* 16832C 80247ACC 3C058024 */ lui $a1, %hi(filemenu_update_hidden_name_confirm)
/* 168330 80247AD0 24A53EEC */ addiu $a1, $a1, %lo(filemenu_update_hidden_name_confirm)
/* 168334 80247AD4 08091EEC */ j .L80247BB0
/* 168338 80247AD8 24040032 */ addiu $a0, $zero, 0x32
.L80247ADC_16833C:
/* 16833C 80247ADC 24020003 */ addiu $v0, $zero, 3
/* 168340 80247AE0 3C018025 */ lui $at, %hi(filemenu_8024C098)
/* 168344 80247AE4 A022C098 */ sb $v0, %lo(filemenu_8024C098)($at)
/* 168348 80247AE8 3C058024 */ lui $a1, %hi(filemenu_update_hidden_name_confirm)
/* 16834C 80247AEC 24A53EEC */ addiu $a1, $a1, %lo(filemenu_update_hidden_name_confirm)
/* 168350 80247AF0 08091EEC */ j .L80247BB0
/* 168354 80247AF4 24040032 */ addiu $a0, $zero, 0x32
.L80247AF8_168358:
/* 168358 80247AF8 2404002D */ addiu $a0, $zero, 0x2d
/* 16835C 80247AFC 3C108024 */ lui $s0, %hi(filemenu_update_show_with_rotation)
/* 168360 80247B00 2610381C */ addiu $s0, $s0, %lo(filemenu_update_show_with_rotation)
/* 168364 80247B04 3C028025 */ lui $v0, %hi(filemenu_menus)
/* 168368 80247B08 8C429B84 */ lw $v0, %lo(filemenu_menus)($v0)
/* 16836C 80247B0C 3C018025 */ lui $at, %hi(filemenu_8024C098)
/* 168370 80247B10 A020C098 */ sb $zero, %lo(filemenu_8024C098)($at)
/* 168374 80247B14 90510003 */ lbu $s1, 3($v0)
/* 168378 80247B18 0C051F9F */ jal set_window_update
/* 16837C 80247B1C 0200282D */ daddu $a1, $s0, $zero
/* 168380 80247B20 24040033 */ addiu $a0, $zero, 0x33
/* 168384 80247B24 0C051F9F */ jal set_window_update
/* 168388 80247B28 0200282D */ daddu $a1, $s0, $zero
/* 16838C 80247B2C 24040034 */ addiu $a0, $zero, 0x34
/* 168390 80247B30 0C051F9F */ jal set_window_update
/* 168394 80247B34 0200282D */ daddu $a1, $s0, $zero
/* 168398 80247B38 24040035 */ addiu $a0, $zero, 0x35
/* 16839C 80247B3C 0C051F9F */ jal set_window_update
/* 1683A0 80247B40 0200282D */ daddu $a1, $s0, $zero
/* 1683A4 80247B44 24040036 */ addiu $a0, $zero, 0x36
/* 1683A8 80247B48 0C051F9F */ jal set_window_update
/* 1683AC 80247B4C 0200282D */ daddu $a1, $s0, $zero
/* 1683B0 80247B50 24040037 */ addiu $a0, $zero, 0x37
/* 1683B4 80247B54 0C051F9F */ jal set_window_update
/* 1683B8 80247B58 0200282D */ daddu $a1, $s0, $zero
/* 1683BC 80247B5C 24040035 */ addiu $a0, $zero, 0x35
/* 1683C0 80247B60 0C051F9F */ jal set_window_update
/* 1683C4 80247B64 0200282D */ daddu $a1, $s0, $zero
/* 1683C8 80247B68 24040038 */ addiu $a0, $zero, 0x38
/* 1683CC 80247B6C 0C051F9F */ jal set_window_update
/* 1683D0 80247B70 0200282D */ daddu $a1, $s0, $zero
/* 1683D4 80247B74 24040039 */ addiu $a0, $zero, 0x39
/* 1683D8 80247B78 0C051F9F */ jal set_window_update
/* 1683DC 80247B7C 0200282D */ daddu $a1, $s0, $zero
/* 1683E0 80247B80 2404003A */ addiu $a0, $zero, 0x3a
/* 1683E4 80247B84 0C051F9F */ jal set_window_update
/* 1683E8 80247B88 0200282D */ daddu $a1, $s0, $zero
/* 1683EC 80247B8C 2404003B */ addiu $a0, $zero, 0x3b
/* 1683F0 80247B90 0C051F9F */ jal set_window_update
/* 1683F4 80247B94 0200282D */ daddu $a1, $s0, $zero
/* 1683F8 80247B98 3C058024 */ lui $a1, %hi(filemenu_update_deselect_file)
/* 1683FC 80247B9C 24A53B10 */ addiu $a1, $a1, %lo(filemenu_update_deselect_file)
/* 168400 80247BA0 0C051F9F */ jal set_window_update
/* 168404 80247BA4 26240038 */ addiu $a0, $s1, 0x38
/* 168408 80247BA8 24040032 */ addiu $a0, $zero, 0x32
/* 16840C 80247BAC 24050002 */ addiu $a1, $zero, 2
.L80247BB0:
/* 168410 80247BB0 0C051F9F */ jal set_window_update
/* 168414 80247BB4 00000000 */ nop
.L80247BB8:
/* 168418 80247BB8 3C028025 */ lui $v0, %hi(filemenu_pressedButtons)
/* 16841C 80247BBC 8C42C084 */ lw $v0, %lo(filemenu_pressedButtons)($v0)
/* 168420 80247BC0 30424000 */ andi $v0, $v0, 0x4000
/* 168424 80247BC4 1040004D */ beqz $v0, .L80247CFC
/* 168428 80247BC8 00000000 */ nop
/* 16842C 80247BCC 0C05272D */ jal sfx_play_sound
/* 168430 80247BD0 240400CA */ addiu $a0, $zero, 0xca
/* 168434 80247BD4 0240202D */ daddu $a0, $s2, $zero
/* 168438 80247BD8 0000282D */ daddu $a1, $zero, $zero
/* 16843C 80247BDC 0C090B65 */ jal filemenu_set_selected
/* 168440 80247BE0 24060001 */ addiu $a2, $zero, 1
/* 168444 80247BE4 82440004 */ lb $a0, 4($s2)
/* 168448 80247BE8 2C820005 */ sltiu $v0, $a0, 5
/* 16844C 80247BEC 10400043 */ beqz $v0, .L80247CFC
/* 168450 80247BF0 00041080 */ sll $v0, $a0, 2
/* 168454 80247BF4 3C018025 */ lui $at, %hi(jtbl_8024C048)
/* 168458 80247BF8 00220821 */ addu $at, $at, $v0
/* 16845C 80247BFC 8C22C048 */ lw $v0, %lo(jtbl_8024C048)($at)
/* 168460 80247C00 00400008 */ jr $v0
/* 168464 80247C04 00000000 */ nop
.L80247C08_168468:
/* 168468 80247C08 3C018025 */ lui $at, %hi(filemenu_8024C098)
/* 16846C 80247C0C A020C098 */ sb $zero, %lo(filemenu_8024C098)($at)
/* 168470 80247C10 3C058024 */ lui $a1, %hi(filemenu_update_hidden_name_confirm)
/* 168474 80247C14 24A53EEC */ addiu $a1, $a1, %lo(filemenu_update_hidden_name_confirm)
/* 168478 80247C18 08091F3D */ j .L80247CF4
/* 16847C 80247C1C 24040032 */ addiu $a0, $zero, 0x32
.L80247C20_168480:
/* 168480 80247C20 24020003 */ addiu $v0, $zero, 3
/* 168484 80247C24 3C018025 */ lui $at, %hi(filemenu_8024C098)
/* 168488 80247C28 A022C098 */ sb $v0, %lo(filemenu_8024C098)($at)
/* 16848C 80247C2C 3C058024 */ lui $a1, %hi(filemenu_update_hidden_name_confirm)
/* 168490 80247C30 24A53EEC */ addiu $a1, $a1, %lo(filemenu_update_hidden_name_confirm)
/* 168494 80247C34 08091F3D */ j .L80247CF4
/* 168498 80247C38 24040032 */ addiu $a0, $zero, 0x32
.L80247C3C_16849C:
/* 16849C 80247C3C 2404002D */ addiu $a0, $zero, 0x2d
/* 1684A0 80247C40 3C108024 */ lui $s0, %hi(filemenu_update_show_with_rotation)
/* 1684A4 80247C44 2610381C */ addiu $s0, $s0, %lo(filemenu_update_show_with_rotation)
/* 1684A8 80247C48 3C028025 */ lui $v0, %hi(filemenu_menus)
/* 1684AC 80247C4C 8C429B84 */ lw $v0, %lo(filemenu_menus)($v0)
/* 1684B0 80247C50 3C018025 */ lui $at, %hi(filemenu_8024C098)
/* 1684B4 80247C54 A020C098 */ sb $zero, %lo(filemenu_8024C098)($at)
/* 1684B8 80247C58 90510003 */ lbu $s1, 3($v0)
/* 1684BC 80247C5C 0C051F9F */ jal set_window_update
/* 1684C0 80247C60 0200282D */ daddu $a1, $s0, $zero
/* 1684C4 80247C64 24040033 */ addiu $a0, $zero, 0x33
/* 1684C8 80247C68 0C051F9F */ jal set_window_update
/* 1684CC 80247C6C 0200282D */ daddu $a1, $s0, $zero
/* 1684D0 80247C70 24040034 */ addiu $a0, $zero, 0x34
/* 1684D4 80247C74 0C051F9F */ jal set_window_update
/* 1684D8 80247C78 0200282D */ daddu $a1, $s0, $zero
/* 1684DC 80247C7C 24040035 */ addiu $a0, $zero, 0x35
/* 1684E0 80247C80 0C051F9F */ jal set_window_update
/* 1684E4 80247C84 0200282D */ daddu $a1, $s0, $zero
/* 1684E8 80247C88 24040036 */ addiu $a0, $zero, 0x36
/* 1684EC 80247C8C 0C051F9F */ jal set_window_update
/* 1684F0 80247C90 0200282D */ daddu $a1, $s0, $zero
/* 1684F4 80247C94 24040037 */ addiu $a0, $zero, 0x37
/* 1684F8 80247C98 0C051F9F */ jal set_window_update
/* 1684FC 80247C9C 0200282D */ daddu $a1, $s0, $zero
/* 168500 80247CA0 24040035 */ addiu $a0, $zero, 0x35
/* 168504 80247CA4 0C051F9F */ jal set_window_update
/* 168508 80247CA8 0200282D */ daddu $a1, $s0, $zero
/* 16850C 80247CAC 24040038 */ addiu $a0, $zero, 0x38
/* 168510 80247CB0 0C051F9F */ jal set_window_update
/* 168514 80247CB4 0200282D */ daddu $a1, $s0, $zero
/* 168518 80247CB8 24040039 */ addiu $a0, $zero, 0x39
/* 16851C 80247CBC 0C051F9F */ jal set_window_update
/* 168520 80247CC0 0200282D */ daddu $a1, $s0, $zero
/* 168524 80247CC4 2404003A */ addiu $a0, $zero, 0x3a
/* 168528 80247CC8 0C051F9F */ jal set_window_update
/* 16852C 80247CCC 0200282D */ daddu $a1, $s0, $zero
/* 168530 80247CD0 2404003B */ addiu $a0, $zero, 0x3b
/* 168534 80247CD4 0C051F9F */ jal set_window_update
/* 168538 80247CD8 0200282D */ daddu $a1, $s0, $zero
/* 16853C 80247CDC 3C058024 */ lui $a1, %hi(filemenu_update_deselect_file)
/* 168540 80247CE0 24A53B10 */ addiu $a1, $a1, %lo(filemenu_update_deselect_file)
/* 168544 80247CE4 0C051F9F */ jal set_window_update
/* 168548 80247CE8 26240038 */ addiu $a0, $s1, 0x38
/* 16854C 80247CEC 24040032 */ addiu $a0, $zero, 0x32
/* 168550 80247CF0 24050002 */ addiu $a1, $zero, 2
.L80247CF4:
/* 168554 80247CF4 0C051F9F */ jal set_window_update
/* 168558 80247CF8 00000000 */ nop
.L80247CFC:
/* 16855C 80247CFC 8FBF001C */ lw $ra, 0x1c($sp)
/* 168560 80247D00 8FB20018 */ lw $s2, 0x18($sp)
/* 168564 80247D04 8FB10014 */ lw $s1, 0x14($sp)
/* 168568 80247D08 8FB00010 */ lw $s0, 0x10($sp)
/* 16856C 80247D0C 03E00008 */ jr $ra
/* 168570 80247D10 27BD0020 */ addiu $sp, $sp, 0x20

View File

@ -1,62 +0,0 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
glabel func_80262130
/* 190A10 80262130 27BDFFB8 */ addiu $sp, $sp, -0x48
/* 190A14 80262134 AFB20038 */ sw $s2, 0x38($sp)
/* 190A18 80262138 0000902D */ daddu $s2, $zero, $zero
/* 190A1C 8026213C AFB00030 */ sw $s0, 0x30($sp)
/* 190A20 80262140 0240802D */ daddu $s0, $s2, $zero
/* 190A24 80262144 0240202D */ daddu $a0, $s2, $zero
/* 190A28 80262148 27A2002C */ addiu $v0, $sp, 0x2c
/* 190A2C 8026214C C7A20058 */ lwc1 $f2, 0x58($sp)
/* 190A30 80262150 27A50020 */ addiu $a1, $sp, 0x20
/* 190A34 80262154 AFA60028 */ sw $a2, 0x28($sp)
/* 190A38 80262158 27A60024 */ addiu $a2, $sp, 0x24
/* 190A3C 8026215C F7B40040 */ sdc1 $f20, 0x40($sp)
/* 190A40 80262160 4487A000 */ mtc1 $a3, $f20
/* 190A44 80262164 3C0142B4 */ lui $at, 0x42b4
/* 190A48 80262168 44810000 */ mtc1 $at, $f0
/* 190A4C 8026216C 27A70028 */ addiu $a3, $sp, 0x28
/* 190A50 80262170 AFBF003C */ sw $ra, 0x3c($sp)
/* 190A54 80262174 AFB10034 */ sw $s1, 0x34($sp)
/* 190A58 80262178 E7AC0020 */ swc1 $f12, 0x20($sp)
/* 190A5C 8026217C E7AE0024 */ swc1 $f14, 0x24($sp)
/* 190A60 80262180 E7B4002C */ swc1 $f20, 0x2c($sp)
/* 190A64 80262184 AFA20010 */ sw $v0, 0x10($sp)
/* 190A68 80262188 E7A00014 */ swc1 $f0, 0x14($sp)
/* 190A6C 8026218C 0C0371DE */ jal npc_raycast_down_around
/* 190A70 80262190 E7A20018 */ swc1 $f2, 0x18($sp)
/* 190A74 80262194 10400013 */ beqz $v0, .L802621E4
/* 190A78 80262198 24020001 */ addiu $v0, $zero, 1
/* 190A7C 8026219C C7A0002C */ lwc1 $f0, 0x2c($sp)
/* 190A80 802621A0 4614003E */ c.le.s $f0, $f20
/* 190A84 802621A4 00000000 */ nop
/* 190A88 802621A8 4500000E */ bc1f .L802621E4
/* 190A8C 802621AC 00000000 */ nop
/* 190A90 802621B0 3C118011 */ lui $s1, %hi(D_8010C98C)
/* 190A94 802621B4 2631C98C */ addiu $s1, $s1, %lo(D_8010C98C)
/* 190A98 802621B8 0C016F6A */ jal get_collider_type_by_id
/* 190A9C 802621BC 92240003 */ lbu $a0, 3($s1)
/* 190AA0 802621C0 3C048011 */ lui $a0, %hi(D_8010C96B)
/* 190AA4 802621C4 9084C96B */ lbu $a0, %lo(D_8010C96B)($a0)
/* 190AA8 802621C8 0C016F6A */ jal get_collider_type_by_id
/* 190AAC 802621CC 0040802D */ daddu $s0, $v0, $zero
/* 190AB0 802621D0 92230003 */ lbu $v1, 3($s1)
/* 190AB4 802621D4 02028024 */ and $s0, $s0, $v0
/* 190AB8 802621D8 56030001 */ bnel $s0, $v1, .L802621E0
/* 190ABC 802621DC 0240802D */ daddu $s0, $s2, $zero
.L802621E0:
/* 190AC0 802621E0 24020001 */ addiu $v0, $zero, 1
.L802621E4:
/* 190AC4 802621E4 52020001 */ beql $s0, $v0, .L802621EC
/* 190AC8 802621E8 0040902D */ daddu $s2, $v0, $zero
.L802621EC:
/* 190ACC 802621EC 0240102D */ daddu $v0, $s2, $zero
/* 190AD0 802621F0 8FBF003C */ lw $ra, 0x3c($sp)
/* 190AD4 802621F4 8FB20038 */ lw $s2, 0x38($sp)
/* 190AD8 802621F8 8FB10034 */ lw $s1, 0x34($sp)
/* 190ADC 802621FC 8FB00030 */ lw $s0, 0x30($sp)
/* 190AE0 80262200 D7B40040 */ ldc1 $f20, 0x40($sp)
/* 190AE4 80262204 03E00008 */ jr $ra
/* 190AE8 80262208 27BD0048 */ addiu $sp, $sp, 0x48

View File

@ -1,202 +0,0 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
.section .rodata
dlabel jtbl_80150BD8
.word .L80131FD8_C86D8, .L80131FE8_C86E8, .L80131FE8_C86E8, .L80131FF8_C86F8, .L80132010_C8710, .L80132010_C8710, .L80132010_C8710, .L80132010_C8710, .L80132010_C8710, .L80132010_C8710, .L80132010_C8710, .L80132010_C8710, .L80131FF8_C86F8, .L80132010_C8710, .L80132010_C8710, .L80132010_C8710, .L80131FF8_C86F8, .L80132010_C8710, .L80132010_C8710, .L80132010_C8710, .L80131FF8_C86F8, .L80132010_C8710, .L80132010_C8710, .L80131FF8_C86F8, .L80132010_C8710, .L80132010_C8710, .L80132010_C8710, .L80132010_C8710, .L80132008_C8708, 0
dlabel jtbl_80150C50
.word .L8013204C_C874C, .L80132140_C8840, .L80132140_C8840, .L8013204C_C874C, .L80132140_C8840, .L80132140_C8840, .L80132140_C8840, .L80132140_C8840, .L80132140_C8840, .L80132140_C8840, .L80132140_C8840, .L80132140_C8840, .L8013204C_C874C, .L80132140_C8840, .L80132140_C8840, .L80132140_C8840, .L8013204C_C874C, .L80132140_C8840, .L80132140_C8840, .L80132140_C8840, .L80132140_C8840, .L80132140_C8840, .L80132140_C8840, .L80132140_C8840, .L80132140_C8840, .L80132140_C8840, .L80132140_C8840, .L80132140_C8840, .L8013204C_C874C, 0
.section .text
glabel update_item_entities
/* C85EC 80131EEC 3C02800A */ lui $v0, %hi(gOverrideFlags)
/* C85F0 80131EF0 8C42A650 */ lw $v0, %lo(gOverrideFlags)($v0)
/* C85F4 80131EF4 27BDFFC0 */ addiu $sp, $sp, -0x40
/* C85F8 80131EF8 AFBF0038 */ sw $ra, 0x38($sp)
/* C85FC 80131EFC AFB30034 */ sw $s3, 0x34($sp)
/* C8600 80131F00 AFB20030 */ sw $s2, 0x30($sp)
/* C8604 80131F04 AFB1002C */ sw $s1, 0x2c($sp)
/* C8608 80131F08 30420C00 */ andi $v0, $v0, 0xc00
/* C860C 80131F0C 1440009E */ bnez $v0, .L80132188
/* C8610 80131F10 AFB00028 */ sw $s0, 0x28($sp)
/* C8614 80131F14 0000982D */ daddu $s3, $zero, $zero
/* C8618 80131F18 0260902D */ daddu $s2, $s3, $zero
.L80131F1C:
/* C861C 80131F1C 3C028015 */ lui $v0, %hi(D_801565A0)
/* C8620 80131F20 8C4265A0 */ lw $v0, %lo(D_801565A0)($v0)
/* C8624 80131F24 02421021 */ addu $v0, $s2, $v0
/* C8628 80131F28 8C510000 */ lw $s1, ($v0)
/* C862C 80131F2C 52200093 */ beql $s1, $zero, .L8013217C
/* C8630 80131F30 26730001 */ addiu $s3, $s3, 1
/* C8634 80131F34 8E220000 */ lw $v0, ($s1)
/* C8638 80131F38 1040008F */ beqz $v0, .L80132178
/* C863C 80131F3C 24020157 */ addiu $v0, $zero, 0x157
/* C8640 80131F40 86230018 */ lh $v1, 0x18($s1)
/* C8644 80131F44 14620019 */ bne $v1, $v0, .L80131FAC
/* C8648 80131F48 00000000 */ nop
/* C864C 80131F4C 0C00A67F */ jal rand_int
/* C8650 80131F50 24040064 */ addiu $a0, $zero, 0x64
/* C8654 80131F54 2842005B */ slti $v0, $v0, 0x5b
/* C8658 80131F58 14400012 */ bnez $v0, .L80131FA4
/* C865C 80131F5C 00000000 */ nop
/* C8660 80131F60 3C058010 */ lui $a1, %hi(SparkleScript_Coin)
/* C8664 80131F64 24A54AC0 */ addiu $a1, $a1, %lo(SparkleScript_Coin)
/* C8668 80131F68 0C04C27C */ jal sparkle_script_init
/* C866C 80131F6C 0220202D */ daddu $a0, $s1, $zero
/* C8670 80131F70 0C00A67F */ jal rand_int
/* C8674 80131F74 24040010 */ addiu $a0, $zero, 0x10
/* C8678 80131F78 2442FFF8 */ addiu $v0, $v0, -8
/* C867C 80131F7C 3C018015 */ lui $at, %hi(D_80155D8C)
/* C8680 80131F80 A4225D8C */ sh $v0, %lo(D_80155D8C)($at)
/* C8684 80131F84 0C00A67F */ jal rand_int
/* C8688 80131F88 24040010 */ addiu $a0, $zero, 0x10
/* C868C 80131F8C 2442FFF8 */ addiu $v0, $v0, -8
/* C8690 80131F90 3C018015 */ lui $at, %hi(D_80155D8E)
/* C8694 80131F94 A4225D8E */ sh $v0, %lo(D_80155D8E)($at)
/* C8698 80131F98 24020005 */ addiu $v0, $zero, 5
/* C869C 80131F9C 3C018015 */ lui $at, %hi(D_80155D90)
/* C86A0 80131FA0 A4225D90 */ sh $v0, %lo(D_80155D90)($at)
.L80131FA4:
/* C86A4 80131FA4 0C04C2B3 */ jal sparkle_script_update
/* C86A8 80131FA8 0220202D */ daddu $a0, $s1, $zero
.L80131FAC:
/* C86AC 80131FAC 0C04C775 */ jal item_entity_update
/* C86B0 80131FB0 0220202D */ daddu $a0, $s1, $zero
/* C86B4 80131FB4 8223001B */ lb $v1, 0x1b($s1)
/* C86B8 80131FB8 2C62001D */ sltiu $v0, $v1, 0x1d
/* C86BC 80131FBC 10400014 */ beqz $v0, .L80132010_C8710
/* C86C0 80131FC0 00031080 */ sll $v0, $v1, 2
/* C86C4 80131FC4 3C018015 */ lui $at, %hi(jtbl_80150BD8)
/* C86C8 80131FC8 00220821 */ addu $at, $at, $v0
/* C86CC 80131FCC 8C220BD8 */ lw $v0, %lo(jtbl_80150BD8)($at)
/* C86D0 80131FD0 00400008 */ jr $v0
/* C86D4 80131FD4 00000000 */ nop
.L80131FD8_C86D8:
/* C86D8 80131FD8 0C04D596 */ jal update_item_entity_static
/* C86DC 80131FDC 0220202D */ daddu $a0, $s1, $zero
/* C86E0 80131FE0 0804C804 */ j .L80132010_C8710
/* C86E4 80131FE4 00000000 */ nop
.L80131FE8_C86E8:
/* C86E8 80131FE8 0C04D5B3 */ jal func_801356CC
/* C86EC 80131FEC 0220202D */ daddu $a0, $s1, $zero
/* C86F0 80131FF0 0804C804 */ j .L80132010_C8710
/* C86F4 80131FF4 00000000 */ nop
.L80131FF8_C86F8:
/* C86F8 80131FF8 0C04D094 */ jal update_item_entity_collectable
/* C86FC 80131FFC 0220202D */ daddu $a0, $s1, $zero
/* C8700 80132000 0804C804 */ j .L80132010_C8710
/* C8704 80132004 00000000 */ nop
.L80132008_C8708:
/* C8708 80132008 0C04D5B7 */ jal update_item_entity_temp
/* C870C 8013200C 0220202D */ daddu $a0, $s1, $zero
.L80132010_C8710:
/* C8710 80132010 3C028015 */ lui $v0, %hi(D_801565A0)
/* C8714 80132014 8C4265A0 */ lw $v0, %lo(D_801565A0)($v0)
/* C8718 80132018 02421021 */ addu $v0, $s2, $v0
/* C871C 8013201C 8C510000 */ lw $s1, ($v0)
/* C8720 80132020 52200056 */ beql $s1, $zero, .L8013217C
/* C8724 80132024 26730001 */ addiu $s3, $s3, 1
/* C8728 80132028 8223001B */ lb $v1, 0x1b($s1)
/* C872C 8013202C 2C62001D */ sltiu $v0, $v1, 0x1d
/* C8730 80132030 10400043 */ beqz $v0, .L80132140_C8840
/* C8734 80132034 00031080 */ sll $v0, $v1, 2
/* C8738 80132038 3C018015 */ lui $at, %hi(jtbl_80150C50)
/* C873C 8013203C 00220821 */ addu $at, $at, $v0
/* C8740 80132040 8C220C50 */ lw $v0, %lo(jtbl_80150C50)($at)
/* C8744 80132044 00400008 */ jr $v0
/* C8748 80132048 00000000 */ nop
.L8013204C_C874C:
/* C874C 8013204C C6200008 */ lwc1 $f0, 8($s1)
/* C8750 80132050 C622000C */ lwc1 $f2, 0xc($s1)
/* C8754 80132054 86220034 */ lh $v0, 0x34($s1)
/* C8758 80132058 4600020D */ trunc.w.s $f8, $f0
/* C875C 8013205C 44034000 */ mfc1 $v1, $f8
/* C8760 80132060 C6200010 */ lwc1 $f0, 0x10($s1)
/* C8764 80132064 4600120D */ trunc.w.s $f8, $f2
/* C8768 80132068 44054000 */ mfc1 $a1, $f8
/* C876C 8013206C 4600020D */ trunc.w.s $f8, $f0
/* C8770 80132070 44044000 */ mfc1 $a0, $f8
/* C8774 80132074 14620007 */ bne $v1, $v0, .L80132094
/* C8778 80132078 00000000 */ nop
/* C877C 8013207C 86220036 */ lh $v0, 0x36($s1)
/* C8780 80132080 14A20004 */ bne $a1, $v0, .L80132094
/* C8784 80132084 00000000 */ nop
/* C8788 80132088 86220038 */ lh $v0, 0x38($s1)
/* C878C 8013208C 1082002C */ beq $a0, $v0, .L80132140_C8840
/* C8790 80132090 00000000 */ nop
.L80132094:
/* C8794 80132094 0C044181 */ jal get_shadow_by_index
/* C8798 80132098 86240020 */ lh $a0, 0x20($s1)
/* C879C 8013209C 3C040002 */ lui $a0, 2
/* C87A0 801320A0 27A50018 */ addiu $a1, $sp, 0x18
/* C87A4 801320A4 27A30024 */ addiu $v1, $sp, 0x24
/* C87A8 801320A8 0040802D */ daddu $s0, $v0, $zero
/* C87AC 801320AC 27A6001C */ addiu $a2, $sp, 0x1c
/* C87B0 801320B0 C6200008 */ lwc1 $f0, 8($s1)
/* C87B4 801320B4 3C014140 */ lui $at, 0x4140
/* C87B8 801320B8 44811000 */ mtc1 $at, $f2
/* C87BC 801320BC 3C01447A */ lui $at, 0x447a
/* C87C0 801320C0 44813000 */ mtc1 $at, $f6
/* C87C4 801320C4 27A70020 */ addiu $a3, $sp, 0x20
/* C87C8 801320C8 E7A00018 */ swc1 $f0, 0x18($sp)
/* C87CC 801320CC C620000C */ lwc1 $f0, 0xc($s1)
/* C87D0 801320D0 C6240010 */ lwc1 $f4, 0x10($s1)
/* C87D4 801320D4 46020000 */ add.s $f0, $f0, $f2
/* C87D8 801320D8 E7A60024 */ swc1 $f6, 0x24($sp)
/* C87DC 801320DC E7A40020 */ swc1 $f4, 0x20($sp)
/* C87E0 801320E0 E7A0001C */ swc1 $f0, 0x1c($sp)
/* C87E4 801320E4 0C0372DF */ jal npc_raycast_down_sides
/* C87E8 801320E8 AFA30010 */ sw $v1, 0x10($sp)
/* C87EC 801320EC C7A00018 */ lwc1 $f0, 0x18($sp)
/* C87F0 801320F0 C7A2001C */ lwc1 $f2, 0x1c($sp)
/* C87F4 801320F4 C7A40020 */ lwc1 $f4, 0x20($sp)
/* C87F8 801320F8 3C028007 */ lui $v0, %hi(gGameStatusPtr)
/* C87FC 801320FC 8C42419C */ lw $v0, %lo(gGameStatusPtr)($v0)
/* C8800 80132100 E6000010 */ swc1 $f0, 0x10($s0)
/* C8804 80132104 E6020014 */ swc1 $f2, 0x14($s0)
/* C8808 80132108 E6040018 */ swc1 $f4, 0x18($s0)
/* C880C 8013210C C7A20024 */ lwc1 $f2, 0x24($sp)
/* C8810 80132110 3C013F00 */ lui $at, 0x3f00
/* C8814 80132114 44810000 */ mtc1 $at, $f0
/* C8818 80132118 C444011C */ lwc1 $f4, 0x11c($v0)
/* C881C 8013211C 46001082 */ mul.s $f2, $f2, $f0
/* C8820 80132120 00000000 */ nop
/* C8824 80132124 AE00002C */ sw $zero, 0x2c($s0)
/* C8828 80132128 E6040028 */ swc1 $f4, 0x28($s0)
/* C882C 8013212C C4400124 */ lwc1 $f0, 0x124($v0)
/* C8830 80132130 44051000 */ mfc1 $a1, $f2
/* C8834 80132134 0200202D */ daddu $a0, $s0, $zero
/* C8838 80132138 0C044A17 */ jal set_standard_shadow_scale
/* C883C 8013213C E4800030 */ swc1 $f0, 0x30($a0)
.L80132140_C8840:
/* C8840 80132140 C6200008 */ lwc1 $f0, 8($s1)
/* C8844 80132144 C6220010 */ lwc1 $f2, 0x10($s1)
/* C8848 80132148 4600020D */ trunc.w.s $f8, $f0
/* C884C 8013214C 44024000 */ mfc1 $v0, $f8
/* C8850 80132150 C620000C */ lwc1 $f0, 0xc($s1)
/* C8854 80132154 A6220034 */ sh $v0, 0x34($s1)
/* C8858 80132158 4600020D */ trunc.w.s $f8, $f0
/* C885C 8013215C 44024000 */ mfc1 $v0, $f8
/* C8860 80132160 00000000 */ nop
/* C8864 80132164 A6220036 */ sh $v0, 0x36($s1)
/* C8868 80132168 4600120D */ trunc.w.s $f8, $f2
/* C886C 8013216C 44024000 */ mfc1 $v0, $f8
/* C8870 80132170 00000000 */ nop
/* C8874 80132174 A6220038 */ sh $v0, 0x38($s1)
.L80132178:
/* C8878 80132178 26730001 */ addiu $s3, $s3, 1
.L8013217C:
/* C887C 8013217C 2A620100 */ slti $v0, $s3, 0x100
/* C8880 80132180 1440FF66 */ bnez $v0, .L80131F1C
/* C8884 80132184 26520004 */ addiu $s2, $s2, 4
.L80132188:
/* C8888 80132188 8FBF0038 */ lw $ra, 0x38($sp)
/* C888C 8013218C 8FB30034 */ lw $s3, 0x34($sp)
/* C8890 80132190 8FB20030 */ lw $s2, 0x30($sp)
/* C8894 80132194 8FB1002C */ lw $s1, 0x2c($sp)
/* C8898 80132198 8FB00028 */ lw $s0, 0x28($sp)
/* C889C 8013219C 03E00008 */ jr $ra
/* C88A0 801321A0 27BD0040 */ addiu $sp, $sp, 0x40

View File

@ -1,19 +0,0 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
glabel mdl_local_gfx_copy_vertices
/* B2830 8011C130 00052900 */ sll $a1, $a1, 4
/* B2834 8011C134 10A00009 */ beqz $a1, .L8011C15C
/* B2838 8011C138 0000382D */ daddu $a3, $zero, $zero
/* B283C 8011C13C 00C71821 */ addu $v1, $a2, $a3
.L8011C140:
/* B2840 8011C140 00871021 */ addu $v0, $a0, $a3
/* B2844 8011C144 90420000 */ lbu $v0, ($v0)
/* B2848 8011C148 24E70001 */ addiu $a3, $a3, 1
/* B284C 8011C14C A0620000 */ sb $v0, ($v1)
/* B2850 8011C150 00E5102B */ sltu $v0, $a3, $a1
/* B2854 8011C154 1440FFFA */ bnez $v0, .L8011C140
/* B2858 8011C158 00C71821 */ addu $v1, $a2, $a3
.L8011C15C:
/* B285C 8011C15C 03E00008 */ jr $ra
/* B2860 8011C160 00000000 */ nop

View File

@ -1,71 +0,0 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
glabel set_next_game_mode
/* A92BC 80112BBC 27BDFFE8 */ addiu $sp, $sp, -0x18
/* A92C0 80112BC0 AFB00010 */ sw $s0, 0x10($sp)
/* A92C4 80112BC4 3C108015 */ lui $s0, %hi(gMainGameState)
/* A92C8 80112BC8 26101700 */ addiu $s0, $s0, %lo(gMainGameState)
/* A92CC 80112BCC 0000182D */ daddu $v1, $zero, $zero
/* A92D0 80112BD0 AFBF0014 */ sw $ra, 0x14($sp)
.L80112BD4:
/* A92D4 80112BD4 96020000 */ lhu $v0, ($s0)
/* A92D8 80112BD8 10400006 */ beqz $v0, .L80112BF4
/* A92DC 80112BDC 28620002 */ slti $v0, $v1, 2
/* A92E0 80112BE0 24630001 */ addiu $v1, $v1, 1
/* A92E4 80112BE4 28620002 */ slti $v0, $v1, 2
/* A92E8 80112BE8 1440FFFA */ bnez $v0, .L80112BD4
/* A92EC 80112BEC 26100018 */ addiu $s0, $s0, 0x18
/* A92F0 80112BF0 28620002 */ slti $v0, $v1, 2
.L80112BF4:
/* A92F4 80112BF4 14400003 */ bnez $v0, .L80112C04
/* A92F8 80112BF8 24020003 */ addiu $v0, $zero, 3
.L80112BFC:
/* A92FC 80112BFC 08044AFF */ j .L80112BFC
/* A9300 80112C00 00000000 */ nop
.L80112C04:
/* A9304 80112C04 A6020000 */ sh $v0, ($s0)
/* A9308 80112C08 8C820004 */ lw $v0, 4($a0)
/* A930C 80112C0C AE020004 */ sw $v0, 4($s0)
/* A9310 80112C10 8C820008 */ lw $v0, 8($a0)
/* A9314 80112C14 8E030004 */ lw $v1, 4($s0)
/* A9318 80112C18 AE020008 */ sw $v0, 8($s0)
/* A931C 80112C1C 8C820010 */ lw $v0, 0x10($a0)
/* A9320 80112C20 AE00000C */ sw $zero, 0xc($s0)
/* A9324 80112C24 14600004 */ bnez $v1, .L80112C38
/* A9328 80112C28 AE020010 */ sw $v0, 0x10($s0)
/* A932C 80112C2C 3C028011 */ lui $v0, %hi(state_delegate_NOP)
/* A9330 80112C30 24422B90 */ addiu $v0, $v0, %lo(state_delegate_NOP)
/* A9334 80112C34 AE020004 */ sw $v0, 4($s0)
.L80112C38:
/* A9338 80112C38 8E020008 */ lw $v0, 8($s0)
/* A933C 80112C3C 14400004 */ bnez $v0, .L80112C50
/* A9340 80112C40 00000000 */ nop
/* A9344 80112C44 3C028011 */ lui $v0, %hi(state_delegate_NOP)
/* A9348 80112C48 24422B90 */ addiu $v0, $v0, %lo(state_delegate_NOP)
/* A934C 80112C4C AE020008 */ sw $v0, 8($s0)
.L80112C50:
/* A9350 80112C50 8E02000C */ lw $v0, 0xc($s0)
/* A9354 80112C54 14400004 */ bnez $v0, .L80112C68
/* A9358 80112C58 00000000 */ nop
/* A935C 80112C5C 3C028011 */ lui $v0, %hi(state_delegate_NOP)
/* A9360 80112C60 24422B90 */ addiu $v0, $v0, %lo(state_delegate_NOP)
/* A9364 80112C64 AE02000C */ sw $v0, 0xc($s0)
.L80112C68:
/* A9368 80112C68 8E020010 */ lw $v0, 0x10($s0)
/* A936C 80112C6C 14400004 */ bnez $v0, .L80112C80
/* A9370 80112C70 00000000 */ nop
/* A9374 80112C74 3C028011 */ lui $v0, %hi(state_delegate_NOP)
/* A9378 80112C78 24422B90 */ addiu $v0, $v0, %lo(state_delegate_NOP)
/* A937C 80112C7C AE020010 */ sw $v0, 0x10($s0)
.L80112C80:
/* A9380 80112C80 8E030004 */ lw $v1, 4($s0)
/* A9384 80112C84 3C028011 */ lui $v0, %hi(state_delegate_NOP)
/* A9388 80112C88 24422B90 */ addiu $v0, $v0, %lo(state_delegate_NOP)
/* A938C 80112C8C 0060F809 */ jalr $v1
/* A9390 80112C90 AE020014 */ sw $v0, 0x14($s0)
/* A9394 80112C94 0200102D */ daddu $v0, $s0, $zero
/* A9398 80112C98 8FBF0014 */ lw $ra, 0x14($sp)
/* A939C 80112C9C 8FB00010 */ lw $s0, 0x10($sp)
/* A93A0 80112CA0 03E00008 */ jr $ra
/* A93A4 80112CA4 27BD0018 */ addiu $sp, $sp, 0x18

View File

@ -1,32 +0,0 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
glabel func_8014AD40
/* E1440 8014AD40 27BDFFE0 */ addiu $sp, $sp, -0x20
/* E1444 8014AD44 AFB00010 */ sw $s0, 0x10($sp)
/* E1448 8014AD48 3C108016 */ lui $s0, %hi(gMusicSettings)
/* E144C 8014AD4C 26109AF0 */ addiu $s0, $s0, %lo(gMusicSettings)
/* E1450 8014AD50 AFB10014 */ sw $s1, 0x14($sp)
/* E1454 8014AD54 0000882D */ daddu $s1, $zero, $zero
/* E1458 8014AD58 AFBF0018 */ sw $ra, 0x18($sp)
.L8014AD5C:
/* E145C 8014AD5C 96020000 */ lhu $v0, ($s0)
/* E1460 8014AD60 30420001 */ andi $v0, $v0, 1
/* E1464 8014AD64 10400006 */ beqz $v0, .L8014AD80
/* E1468 8014AD68 26310001 */ addiu $s1, $s1, 1
/* E146C 8014AD6C 8E040018 */ lw $a0, 0x18($s0)
/* E1470 8014AD70 0C01567F */ jal func_800559FC
/* E1474 8014AD74 00000000 */ nop
/* E1478 8014AD78 14400005 */ bnez $v0, .L8014AD90
/* E147C 8014AD7C 24020001 */ addiu $v0, $zero, 1
.L8014AD80:
/* E1480 8014AD80 2A220002 */ slti $v0, $s1, 2
/* E1484 8014AD84 1440FFF5 */ bnez $v0, .L8014AD5C
/* E1488 8014AD88 26100030 */ addiu $s0, $s0, 0x30
/* E148C 8014AD8C 0000102D */ daddu $v0, $zero, $zero
.L8014AD90:
/* E1490 8014AD90 8FBF0018 */ lw $ra, 0x18($sp)
/* E1494 8014AD94 8FB10014 */ lw $s1, 0x14($sp)
/* E1498 8014AD98 8FB00010 */ lw $s0, 0x10($sp)
/* E149C 8014AD9C 03E00008 */ jr $ra
/* E14A0 8014ADA0 27BD0020 */ addiu $sp, $sp, 0x20

View File

@ -1,93 +0,0 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
.section .rodata
dlabel jtbl_80098590
.word .L8003D750_18B50, .L8003D764_18B64, .L8003D764_18B64, .L8003D764_18B64, .L8003D764_18B64, .L8003D6E8_18AE8, .L8003D6FC_18AFC, .L8003D710_18B10, .L8003D73C_18B3C, 0, 0, 0
.section .text
glabel func_8003D660
/* 18A60 8003D660 27BDFFE0 */ addiu $sp, $sp, -0x20
/* 18A64 8003D664 AFB00010 */ sw $s0, 0x10($sp)
/* 18A68 8003D668 0080802D */ daddu $s0, $a0, $zero
/* 18A6C 8003D66C AFB10014 */ sw $s1, 0x14($sp)
/* 18A70 8003D670 3C020040 */ lui $v0, 0x40
/* 18A74 8003D674 34420002 */ ori $v0, $v0, 2
/* 18A78 8003D678 AFBF001C */ sw $ra, 0x1c($sp)
/* 18A7C 8003D67C AFB20018 */ sw $s2, 0x18($sp)
/* 18A80 8003D680 8E030000 */ lw $v1, ($s0)
/* 18A84 8003D684 3C128011 */ lui $s2, %hi(gPartnerActionStatus)
/* 18A88 8003D688 2652EBB0 */ addiu $s2, $s2, %lo(gPartnerActionStatus)
/* 18A8C 8003D68C 00621824 */ and $v1, $v1, $v0
/* 18A90 8003D690 3C020040 */ lui $v0, 0x40
/* 18A94 8003D694 14620036 */ bne $v1, $v0, .L8003D770
/* 18A98 8003D698 00A0882D */ daddu $s1, $a1, $zero
/* 18A9C 8003D69C C6020018 */ lwc1 $f2, 0x18($s0)
/* 18AA0 8003D6A0 44800000 */ mtc1 $zero, $f0
/* 18AA4 8003D6A4 00000000 */ nop
/* 18AA8 8003D6A8 46001032 */ c.eq.s $f2, $f0
/* 18AAC 8003D6AC 00000000 */ nop
/* 18AB0 8003D6B0 4501002F */ bc1t .L8003D770
/* 18AB4 8003D6B4 00000000 */ nop
/* 18AB8 8003D6B8 0C016F6A */ jal get_collider_type_by_id
/* 18ABC 8003D6BC 96040084 */ lhu $a0, 0x84($s0)
/* 18AC0 8003D6C0 304200FF */ andi $v0, $v0, 0xff
/* 18AC4 8003D6C4 2443FFFF */ addiu $v1, $v0, -1
/* 18AC8 8003D6C8 2C620009 */ sltiu $v0, $v1, 9
/* 18ACC 8003D6CC 10400025 */ beqz $v0, .L8003D764_18B64
/* 18AD0 8003D6D0 00031080 */ sll $v0, $v1, 2
/* 18AD4 8003D6D4 3C01800A */ lui $at, %hi(jtbl_80098590)
/* 18AD8 8003D6D8 00220821 */ addu $at, $at, $v0
/* 18ADC 8003D6DC 8C228590 */ lw $v0, %lo(jtbl_80098590)($at)
/* 18AE0 8003D6E0 00400008 */ jr $v0
/* 18AE4 8003D6E4 00000000 */ nop
.L8003D6E8_18AE8:
/* 18AE8 8003D6E8 0200202D */ daddu $a0, $s0, $zero
/* 18AEC 8003D6EC 0C00F68E */ jal func_8003DA38
/* 18AF0 8003D6F0 0220282D */ daddu $a1, $s1, $zero
/* 18AF4 8003D6F4 0800F5DC */ j .L8003D770
/* 18AF8 8003D6F8 00000000 */ nop
.L8003D6FC_18AFC:
/* 18AFC 8003D6FC 0200202D */ daddu $a0, $s0, $zero
/* 18B00 8003D700 0C00F70E */ jal func_8003DC38
/* 18B04 8003D704 0220282D */ daddu $a1, $s1, $zero
/* 18B08 8003D708 0800F5DC */ j .L8003D770
/* 18B0C 8003D70C 00000000 */ nop
.L8003D710_18B10:
/* 18B10 8003D710 82420000 */ lb $v0, ($s2)
/* 18B14 8003D714 10400004 */ beqz $v0, .L8003D728
/* 18B18 8003D718 24020008 */ addiu $v0, $zero, 8
/* 18B1C 8003D71C 82430003 */ lb $v1, 3($s2)
/* 18B20 8003D720 10620013 */ beq $v1, $v0, .L8003D770
/* 18B24 8003D724 00000000 */ nop
.L8003D728:
/* 18B28 8003D728 0200202D */ daddu $a0, $s0, $zero
/* 18B2C 8003D72C 0C00F7E8 */ jal func_8003DFA0
/* 18B30 8003D730 0220282D */ daddu $a1, $s1, $zero
/* 18B34 8003D734 0800F5DC */ j .L8003D770
/* 18B38 8003D738 00000000 */ nop
.L8003D73C_18B3C:
/* 18B3C 8003D73C 0200202D */ daddu $a0, $s0, $zero
/* 18B40 8003D740 0C00F835 */ jal func_8003E0D4
/* 18B44 8003D744 0220282D */ daddu $a1, $s1, $zero
/* 18B48 8003D748 0800F5DC */ j .L8003D770
/* 18B4C 8003D74C 00000000 */ nop
.L8003D750_18B50:
/* 18B50 8003D750 0200202D */ daddu $a0, $s0, $zero
/* 18B54 8003D754 0C00F874 */ jal func_8003E1D0
/* 18B58 8003D758 0220282D */ daddu $a1, $s1, $zero
/* 18B5C 8003D75C 0800F5DC */ j .L8003D770
/* 18B60 8003D760 00000000 */ nop
.L8003D764_18B64:
/* 18B64 8003D764 0200202D */ daddu $a0, $s0, $zero
/* 18B68 8003D768 0C00F5E2 */ jal func_8003D788
/* 18B6C 8003D76C 0220282D */ daddu $a1, $s1, $zero
.L8003D770:
/* 18B70 8003D770 8FBF001C */ lw $ra, 0x1c($sp)
/* 18B74 8003D774 8FB20018 */ lw $s2, 0x18($sp)
/* 18B78 8003D778 8FB10014 */ lw $s1, 0x14($sp)
/* 18B7C 8003D77C 8FB00010 */ lw $s0, 0x10($sp)
/* 18B80 8003D780 03E00008 */ jr $ra
/* 18B84 8003D784 27BD0020 */ addiu $sp, $sp, 0x20

View File

@ -1,121 +0,0 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
glabel kill_enemy
/* 19BAC 8003E7AC 27BDFFD8 */ addiu $sp, $sp, -0x28
/* 19BB0 8003E7B0 AFB00010 */ sw $s0, 0x10($sp)
/* 19BB4 8003E7B4 0080802D */ daddu $s0, $a0, $zero
/* 19BB8 8003E7B8 AFBF0020 */ sw $ra, 0x20($sp)
/* 19BBC 8003E7BC AFB3001C */ sw $s3, 0x1c($sp)
/* 19BC0 8003E7C0 AFB20018 */ sw $s2, 0x18($sp)
/* 19BC4 8003E7C4 AFB10014 */ sw $s1, 0x14($sp)
/* 19BC8 8003E7C8 82020004 */ lb $v0, 4($s0)
/* 19BCC 8003E7CC 00021080 */ sll $v0, $v0, 2
/* 19BD0 8003E7D0 3C13800B */ lui $s3, %hi(gCurrentEncounter+0x28)
/* 19BD4 8003E7D4 02629821 */ addu $s3, $s3, $v0
/* 19BD8 8003E7D8 8E730F38 */ lw $s3, %lo(gCurrentEncounter+0x28)($s3)
/* 19BDC 8003E7DC 8E640000 */ lw $a0, ($s3)
/* 19BE0 8003E7E0 3C12800B */ lui $s2, %hi(gCurrentEncounter)
/* 19BE4 8003E7E4 26520F10 */ addiu $s2, $s2, %lo(gCurrentEncounter)
/* 19BE8 8003E7E8 18800009 */ blez $a0, .L8003E810
/* 19BEC 8003E7EC 0000882D */ daddu $s1, $zero, $zero
/* 19BF0 8003E7F0 0260182D */ daddu $v1, $s3, $zero
.L8003E7F4:
/* 19BF4 8003E7F4 8C620004 */ lw $v0, 4($v1)
/* 19BF8 8003E7F8 10500005 */ beq $v0, $s0, .L8003E810
/* 19BFC 8003E7FC 00000000 */ nop
/* 19C00 8003E800 26310001 */ addiu $s1, $s1, 1
/* 19C04 8003E804 0224102A */ slt $v0, $s1, $a0
/* 19C08 8003E808 1440FFFA */ bnez $v0, .L8003E7F4
/* 19C0C 8003E80C 24630004 */ addiu $v1, $v1, 4
.L8003E810:
/* 19C10 8003E810 8E020034 */ lw $v0, 0x34($s0)
/* 19C14 8003E814 10400003 */ beqz $v0, .L8003E824
/* 19C18 8003E818 00000000 */ nop
/* 19C1C 8003E81C 0C0B102B */ jal kill_script_by_ID
/* 19C20 8003E820 8E04004C */ lw $a0, 0x4c($s0)
.L8003E824:
/* 19C24 8003E824 8E020038 */ lw $v0, 0x38($s0)
/* 19C28 8003E828 10400003 */ beqz $v0, .L8003E838
/* 19C2C 8003E82C 00000000 */ nop
/* 19C30 8003E830 0C0B102B */ jal kill_script_by_ID
/* 19C34 8003E834 8E040050 */ lw $a0, 0x50($s0)
.L8003E838:
/* 19C38 8003E838 8E02003C */ lw $v0, 0x3c($s0)
/* 19C3C 8003E83C 10400003 */ beqz $v0, .L8003E84C
/* 19C40 8003E840 00000000 */ nop
/* 19C44 8003E844 0C0B102B */ jal kill_script_by_ID
/* 19C48 8003E848 8E040054 */ lw $a0, 0x54($s0)
.L8003E84C:
/* 19C4C 8003E84C 8E020040 */ lw $v0, 0x40($s0)
/* 19C50 8003E850 10400003 */ beqz $v0, .L8003E860
/* 19C54 8003E854 00000000 */ nop
/* 19C58 8003E858 0C0B102B */ jal kill_script_by_ID
/* 19C5C 8003E85C 8E040058 */ lw $a0, 0x58($s0)
.L8003E860:
/* 19C60 8003E860 8E020044 */ lw $v0, 0x44($s0)
/* 19C64 8003E864 10400003 */ beqz $v0, .L8003E874
/* 19C68 8003E868 00000000 */ nop
/* 19C6C 8003E86C 0C0B102B */ jal kill_script_by_ID
/* 19C70 8003E870 8E04005C */ lw $a0, 0x5c($s0)
.L8003E874:
/* 19C74 8003E874 8E020048 */ lw $v0, 0x48($s0)
/* 19C78 8003E878 10400003 */ beqz $v0, .L8003E888
/* 19C7C 8003E87C 00000000 */ nop
/* 19C80 8003E880 0C0B102B */ jal kill_script_by_ID
/* 19C84 8003E884 8E040060 */ lw $a0, 0x60($s0)
.L8003E888:
/* 19C88 8003E888 86040008 */ lh $a0, 8($s0)
/* 19C8C 8003E88C AE000020 */ sw $zero, 0x20($s0)
/* 19C90 8003E890 AE000024 */ sw $zero, 0x24($s0)
/* 19C94 8003E894 AE000028 */ sw $zero, 0x28($s0)
/* 19C98 8003E898 AE00002C */ sw $zero, 0x2c($s0)
/* 19C9C 8003E89C 0C00EABB */ jal get_npc_unsafe
/* 19CA0 8003E8A0 AE000030 */ sw $zero, 0x30($s0)
/* 19CA4 8003E8A4 0C00E273 */ jal free_npc
/* 19CA8 8003E8A8 0040202D */ daddu $a0, $v0, $zero
/* 19CAC 8003E8AC 8E040064 */ lw $a0, 0x64($s0)
/* 19CB0 8003E8B0 50800004 */ beql $a0, $zero, .L8003E8C4
/* 19CB4 8003E8B4 0000202D */ daddu $a0, $zero, $zero
/* 19CB8 8003E8B8 0C00AB4B */ jal heap_free
/* 19CBC 8003E8BC 00000000 */ nop
/* 19CC0 8003E8C0 0000202D */ daddu $a0, $zero, $zero
.L8003E8C4:
/* 19CC4 8003E8C4 0260182D */ daddu $v1, $s3, $zero
.L8003E8C8:
/* 19CC8 8003E8C8 8C620004 */ lw $v0, 4($v1)
/* 19CCC 8003E8CC 50500001 */ beql $v0, $s0, .L8003E8D4
/* 19CD0 8003E8D0 AC600004 */ sw $zero, 4($v1)
.L8003E8D4:
/* 19CD4 8003E8D4 24840001 */ addiu $a0, $a0, 1
/* 19CD8 8003E8D8 28820010 */ slti $v0, $a0, 0x10
/* 19CDC 8003E8DC 1440FFFA */ bnez $v0, .L8003E8C8
/* 19CE0 8003E8E0 24630004 */ addiu $v1, $v1, 4
/* 19CE4 8003E8E4 8E030000 */ lw $v1, ($s0)
/* 19CE8 8003E8E8 30620004 */ andi $v0, $v1, 4
/* 19CEC 8003E8EC 1440000E */ bnez $v0, .L8003E928
/* 19CF0 8003E8F0 30620008 */ andi $v0, $v1, 8
/* 19CF4 8003E8F4 10400004 */ beqz $v0, .L8003E908
/* 19CF8 8003E8F8 30620001 */ andi $v0, $v1, 1
/* 19CFC 8003E8FC 8E42008C */ lw $v0, 0x8c($s2)
/* 19D00 8003E900 16020009 */ bne $s0, $v0, .L8003E928
/* 19D04 8003E904 30620001 */ andi $v0, $v1, 1
.L8003E908:
/* 19D08 8003E908 14400007 */ bnez $v0, .L8003E928
/* 19D0C 8003E90C 30620010 */ andi $v0, $v1, 0x10
/* 19D10 8003E910 14400005 */ bnez $v0, .L8003E928
/* 19D14 8003E914 00000000 */ nop
/* 19D18 8003E918 86650048 */ lh $a1, 0x48($s3)
/* 19D1C 8003E91C 82440020 */ lb $a0, 0x20($s2)
/* 19D20 8003E920 0C00F8B8 */ jal COPY_set_defeated
/* 19D24 8003E924 00B12821 */ addu $a1, $a1, $s1
.L8003E928:
/* 19D28 8003E928 0C00AB4B */ jal heap_free
/* 19D2C 8003E92C 0200202D */ daddu $a0, $s0, $zero
/* 19D30 8003E930 8FBF0020 */ lw $ra, 0x20($sp)
/* 19D34 8003E934 8FB3001C */ lw $s3, 0x1c($sp)
/* 19D38 8003E938 8FB20018 */ lw $s2, 0x18($sp)
/* 19D3C 8003E93C 8FB10014 */ lw $s1, 0x14($sp)
/* 19D40 8003E940 8FB00010 */ lw $s0, 0x10($sp)
/* 19D44 8003E944 03E00008 */ jr $ra
/* 19D48 8003E948 27BD0028 */ addiu $sp, $sp, 0x28

View File

@ -1,287 +0,0 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
.section .rodata
dlabel jtbl_802B6E08_E25CD8
.word .L802B6670_E25540, .L802B6670_E25540, .L802B6674_E25544, .L802B6674_E25544, .L802B6674_E25544, .L802B6674_E25544, .L802B6670_E25540, .L802B6674_E25544, .L802B6674_E25544, .L802B6674_E25544, .L802B6674_E25544, .L802B6674_E25544, .L802B6674_E25544, .L802B6674_E25544, .L802B6634_E25504, .L802B6644_E25514, .L802B6654_E25524, .L802B6634_E25504, .L802B6644_E25514, .L802B6654_E25524, .L802B6674_E25544, .L802B6674_E25544, .L802B6674_E25544, .L802B6674_E25544, .L802B6674_E25544, .L802B6674_E25544, .L802B6674_E25544, .L802B6674_E25544, .L802B6674_E25544, .L802B6660_E25530, .L802B6674_E25544, .L802B6660_E25530, 0, 0
.section .text
glabel func_802B62A4_E25174
/* E25174 802B62A4 27BDFF88 */ addiu $sp, $sp, -0x78
/* E25178 802B62A8 AFBF0048 */ sw $ra, 0x48($sp)
/* E2517C 802B62AC AFB30044 */ sw $s3, 0x44($sp)
/* E25180 802B62B0 AFB20040 */ sw $s2, 0x40($sp)
/* E25184 802B62B4 AFB1003C */ sw $s1, 0x3c($sp)
/* E25188 802B62B8 AFB00038 */ sw $s0, 0x38($sp)
/* E2518C 802B62BC F7BC0070 */ sdc1 $f28, 0x70($sp)
/* E25190 802B62C0 F7BA0068 */ sdc1 $f26, 0x68($sp)
/* E25194 802B62C4 F7B80060 */ sdc1 $f24, 0x60($sp)
/* E25198 802B62C8 F7B60058 */ sdc1 $f22, 0x58($sp)
/* E2519C 802B62CC 0C0394D2 */ jal func_800E5348
/* E251A0 802B62D0 F7B40050 */ sdc1 $f20, 0x50($sp)
/* E251A4 802B62D4 3C128011 */ lui $s2, %hi(gPlayerStatus)
/* E251A8 802B62D8 2652EFC8 */ addiu $s2, $s2, %lo(gPlayerStatus)
/* E251AC 802B62DC 8E4400A4 */ lw $a0, 0xa4($s2)
/* E251B0 802B62E0 0C0AD800 */ jal action_hammer_is_swinging_away
/* E251B4 802B62E4 46000586 */ mov.s $f22, $f0
/* E251B8 802B62E8 10400030 */ beqz $v0, .L802B63AC
/* E251BC 802B62EC 27A50020 */ addiu $a1, $sp, 0x20
/* E251C0 802B62F0 3C038007 */ lui $v1, %hi(gCurrentCameraID)
/* E251C4 802B62F4 8C637410 */ lw $v1, %lo(gCurrentCameraID)($v1)
/* E251C8 802B62F8 3C0142B4 */ lui $at, 0x42b4
/* E251CC 802B62FC 4481A000 */ mtc1 $at, $f20
/* E251D0 802B6300 00031080 */ sll $v0, $v1, 2
/* E251D4 802B6304 00431021 */ addu $v0, $v0, $v1
/* E251D8 802B6308 00021080 */ sll $v0, $v0, 2
/* E251DC 802B630C 00431023 */ subu $v0, $v0, $v1
/* E251E0 802B6310 000218C0 */ sll $v1, $v0, 3
/* E251E4 802B6314 00431021 */ addu $v0, $v0, $v1
/* E251E8 802B6318 000210C0 */ sll $v0, $v0, 3
/* E251EC 802B631C 4614B000 */ add.s $f0, $f22, $f20
/* E251F0 802B6320 3C01800B */ lui $at, %hi(gCameras+0x6C)
/* E251F4 802B6324 00220821 */ addu $at, $at, $v0
/* E251F8 802B6328 C42C1DEC */ lwc1 $f12, %lo(gCameras+0x6C)($at)
/* E251FC 802B632C 0C00A6C9 */ jal clamp_angle
/* E25200 802B6330 460C0301 */ sub.s $f12, $f0, $f12
/* E25204 802B6334 46000086 */ mov.s $f2, $f0
/* E25208 802B6338 4602A03E */ c.le.s $f20, $f2
/* E2520C 802B633C 00000000 */ nop
/* E25210 802B6340 45000015 */ bc1f .L802B6398
/* E25214 802B6344 00000000 */ nop
/* E25218 802B6348 3C014387 */ lui $at, 0x4387
/* E2521C 802B634C 44810000 */ mtc1 $at, $f0
/* E25220 802B6350 00000000 */ nop
/* E25224 802B6354 4600103C */ c.lt.s $f2, $f0
/* E25228 802B6358 00000000 */ nop
/* E2522C 802B635C 4500000E */ bc1f .L802B6398
/* E25230 802B6360 00000000 */ nop
/* E25234 802B6364 3C01C1F0 */ lui $at, 0xc1f0
/* E25238 802B6368 44810000 */ mtc1 $at, $f0
/* E2523C 802B636C 080AD8EA */ j .L802B63A8
/* E25240 802B6370 4600B580 */ add.s $f22, $f22, $f0
.L802B6374:
/* E25244 802B6374 3C02802B */ lui $v0, %hi(HammerHit)
/* E25248 802B6378 8C426DB0 */ lw $v0, %lo(HammerHit)($v0)
/* E2524C 802B637C C7A00028 */ lwc1 $f0, 0x28($sp)
/* E25250 802B6380 C7A2002C */ lwc1 $f2, 0x2c($sp)
/* E25254 802B6384 C7A40030 */ lwc1 $f4, 0x30($sp)
/* E25258 802B6388 E4400000 */ swc1 $f0, ($v0)
/* E2525C 802B638C E4420004 */ swc1 $f2, 4($v0)
/* E25260 802B6390 080AD919 */ j .L802B6464
/* E25264 802B6394 E4440008 */ swc1 $f4, 8($v0)
.L802B6398:
/* E25268 802B6398 3C0141F0 */ lui $at, 0x41f0
/* E2526C 802B639C 44810000 */ mtc1 $at, $f0
/* E25270 802B63A0 00000000 */ nop
/* E25274 802B63A4 4600B580 */ add.s $f22, $f22, $f0
.L802B63A8:
/* E25278 802B63A8 27A50020 */ addiu $a1, $sp, 0x20
.L802B63AC:
/* E2527C 802B63AC 3C0140C9 */ lui $at, 0x40c9
/* E25280 802B63B0 34210FD0 */ ori $at, $at, 0xfd0
/* E25284 802B63B4 44816000 */ mtc1 $at, $f12
/* E25288 802B63B8 27A60024 */ addiu $a2, $sp, 0x24
/* E2528C 802B63BC 460CB302 */ mul.s $f12, $f22, $f12
/* E25290 802B63C0 00000000 */ nop
/* E25294 802B63C4 24100001 */ addiu $s0, $zero, 1
/* E25298 802B63C8 27B30030 */ addiu $s3, $sp, 0x30
/* E2529C 802B63CC 3C0143B4 */ lui $at, 0x43b4
/* E252A0 802B63D0 44810000 */ mtc1 $at, $f0
/* E252A4 802B63D4 3C014080 */ lui $at, 0x4080
/* E252A8 802B63D8 4481A000 */ mtc1 $at, $f20
/* E252AC 802B63DC 0C00A82D */ jal sin_cos_rad
/* E252B0 802B63E0 46006303 */ div.s $f12, $f12, $f0
/* E252B4 802B63E4 C65C0028 */ lwc1 $f28, 0x28($s2)
/* E252B8 802B63E8 C65A002C */ lwc1 $f26, 0x2c($s2)
/* E252BC 802B63EC C6580030 */ lwc1 $f24, 0x30($s2)
.L802B63F0:
/* E252C0 802B63F0 C7A00020 */ lwc1 $f0, 0x20($sp)
/* E252C4 802B63F4 44901000 */ mtc1 $s0, $f2
/* E252C8 802B63F8 00000000 */ nop
/* E252CC 802B63FC 468010A0 */ cvt.s.w $f2, $f2
/* E252D0 802B6400 46020002 */ mul.s $f0, $f0, $f2
/* E252D4 802B6404 00000000 */ nop
/* E252D8 802B6408 C7A40024 */ lwc1 $f4, 0x24($sp)
/* E252DC 802B640C 46022102 */ mul.s $f4, $f4, $f2
/* E252E0 802B6410 00000000 */ nop
/* E252E4 802B6414 24040003 */ addiu $a0, $zero, 3
/* E252E8 802B6418 0240282D */ daddu $a1, $s2, $zero
/* E252EC 802B641C 4600E000 */ add.s $f0, $f28, $f0
/* E252F0 802B6420 27A60028 */ addiu $a2, $sp, 0x28
/* E252F4 802B6424 27A7002C */ addiu $a3, $sp, 0x2c
/* E252F8 802B6428 4604C101 */ sub.s $f4, $f24, $f4
/* E252FC 802B642C E7BA002C */ swc1 $f26, 0x2c($sp)
/* E25300 802B6430 E7A00028 */ swc1 $f0, 0x28($sp)
/* E25304 802B6434 E7A40030 */ swc1 $f4, 0x30($sp)
/* E25308 802B6438 AFB30010 */ sw $s3, 0x10($sp)
/* E2530C 802B643C E7B40014 */ swc1 $f20, 0x14($sp)
/* E25310 802B6440 0C037B01 */ jal player_test_lateral_overlap
/* E25314 802B6444 E7B60018 */ swc1 $f22, 0x18($sp)
/* E25318 802B6448 0040882D */ daddu $s1, $v0, $zero
/* E2531C 802B644C 0621FFC9 */ bgez $s1, .L802B6374
/* E25320 802B6450 00000000 */ nop
/* E25324 802B6454 26100001 */ addiu $s0, $s0, 1
/* E25328 802B6458 2A020010 */ slti $v0, $s0, 0x10
/* E2532C 802B645C 1440FFE4 */ bnez $v0, .L802B63F0
/* E25330 802B6460 00000000 */ nop
.L802B6464:
/* E25334 802B6464 2A020010 */ slti $v0, $s0, 0x10
/* E25338 802B6468 14400061 */ bnez $v0, .L802B65F0
/* E2533C 802B646C 00000000 */ nop
/* E25340 802B6470 0C0394D2 */ jal func_800E5348
/* E25344 802B6474 00000000 */ nop
/* E25348 802B6478 8E4400A4 */ lw $a0, 0xa4($s2)
/* E2534C 802B647C 0C0AD800 */ jal action_hammer_is_swinging_away
/* E25350 802B6480 46000586 */ mov.s $f22, $f0
/* E25354 802B6484 14400030 */ bnez $v0, .L802B6548
/* E25358 802B6488 27A50020 */ addiu $a1, $sp, 0x20
/* E2535C 802B648C 3C038007 */ lui $v1, %hi(gCurrentCameraID)
/* E25360 802B6490 8C637410 */ lw $v1, %lo(gCurrentCameraID)($v1)
/* E25364 802B6494 3C0142B4 */ lui $at, 0x42b4
/* E25368 802B6498 4481A000 */ mtc1 $at, $f20
/* E2536C 802B649C 00031080 */ sll $v0, $v1, 2
/* E25370 802B64A0 00431021 */ addu $v0, $v0, $v1
/* E25374 802B64A4 00021080 */ sll $v0, $v0, 2
/* E25378 802B64A8 00431023 */ subu $v0, $v0, $v1
/* E2537C 802B64AC 000218C0 */ sll $v1, $v0, 3
/* E25380 802B64B0 00431021 */ addu $v0, $v0, $v1
/* E25384 802B64B4 000210C0 */ sll $v0, $v0, 3
/* E25388 802B64B8 4614B000 */ add.s $f0, $f22, $f20
/* E2538C 802B64BC 3C01800B */ lui $at, %hi(gCameras+0x6C)
/* E25390 802B64C0 00220821 */ addu $at, $at, $v0
/* E25394 802B64C4 C42C1DEC */ lwc1 $f12, %lo(gCameras+0x6C)($at)
/* E25398 802B64C8 0C00A6C9 */ jal clamp_angle
/* E2539C 802B64CC 460C0301 */ sub.s $f12, $f0, $f12
/* E253A0 802B64D0 46000086 */ mov.s $f2, $f0
/* E253A4 802B64D4 4602A03E */ c.le.s $f20, $f2
/* E253A8 802B64D8 00000000 */ nop
/* E253AC 802B64DC 45000015 */ bc1f .L802B6534
/* E253B0 802B64E0 00000000 */ nop
/* E253B4 802B64E4 3C014387 */ lui $at, 0x4387
/* E253B8 802B64E8 44810000 */ mtc1 $at, $f0
/* E253BC 802B64EC 00000000 */ nop
/* E253C0 802B64F0 4600103C */ c.lt.s $f2, $f0
/* E253C4 802B64F4 00000000 */ nop
/* E253C8 802B64F8 4500000E */ bc1f .L802B6534
/* E253CC 802B64FC 00000000 */ nop
/* E253D0 802B6500 3C014170 */ lui $at, 0x4170
/* E253D4 802B6504 44810000 */ mtc1 $at, $f0
/* E253D8 802B6508 080AD951 */ j .L802B6544
/* E253DC 802B650C 4600B580 */ add.s $f22, $f22, $f0
.L802B6510:
/* E253E0 802B6510 3C02802B */ lui $v0, %hi(HammerHit)
/* E253E4 802B6514 8C426DB0 */ lw $v0, %lo(HammerHit)($v0)
/* E253E8 802B6518 C7A00028 */ lwc1 $f0, 0x28($sp)
/* E253EC 802B651C C7A2002C */ lwc1 $f2, 0x2c($sp)
/* E253F0 802B6520 C7A40030 */ lwc1 $f4, 0x30($sp)
/* E253F4 802B6524 E4400000 */ swc1 $f0, ($v0)
/* E253F8 802B6528 E4420004 */ swc1 $f2, 4($v0)
/* E253FC 802B652C 080AD97C */ j .L802B65F0
/* E25400 802B6530 E4440008 */ swc1 $f4, 8($v0)
.L802B6534:
/* E25404 802B6534 3C01C170 */ lui $at, 0xc170
/* E25408 802B6538 44810000 */ mtc1 $at, $f0
/* E2540C 802B653C 00000000 */ nop
/* E25410 802B6540 4600B580 */ add.s $f22, $f22, $f0
.L802B6544:
/* E25414 802B6544 27A50020 */ addiu $a1, $sp, 0x20
.L802B6548:
/* E25418 802B6548 3C0140C9 */ lui $at, 0x40c9
/* E2541C 802B654C 34210FD0 */ ori $at, $at, 0xfd0
/* E25420 802B6550 44816000 */ mtc1 $at, $f12
/* E25424 802B6554 27A60024 */ addiu $a2, $sp, 0x24
/* E25428 802B6558 460CB302 */ mul.s $f12, $f22, $f12
/* E2542C 802B655C 00000000 */ nop
/* E25430 802B6560 24100001 */ addiu $s0, $zero, 1
/* E25434 802B6564 27B30030 */ addiu $s3, $sp, 0x30
/* E25438 802B6568 3C0143B4 */ lui $at, 0x43b4
/* E2543C 802B656C 44810000 */ mtc1 $at, $f0
/* E25440 802B6570 3C014080 */ lui $at, 0x4080
/* E25444 802B6574 4481A000 */ mtc1 $at, $f20
/* E25448 802B6578 0C00A82D */ jal sin_cos_rad
/* E2544C 802B657C 46006303 */ div.s $f12, $f12, $f0
.L802B6580:
/* E25450 802B6580 C7A00020 */ lwc1 $f0, 0x20($sp)
/* E25454 802B6584 44901000 */ mtc1 $s0, $f2
/* E25458 802B6588 00000000 */ nop
/* E2545C 802B658C 468010A0 */ cvt.s.w $f2, $f2
/* E25460 802B6590 46020002 */ mul.s $f0, $f0, $f2
/* E25464 802B6594 00000000 */ nop
/* E25468 802B6598 C7A40024 */ lwc1 $f4, 0x24($sp)
/* E2546C 802B659C 46022102 */ mul.s $f4, $f4, $f2
/* E25470 802B65A0 00000000 */ nop
/* E25474 802B65A4 24040003 */ addiu $a0, $zero, 3
/* E25478 802B65A8 0240282D */ daddu $a1, $s2, $zero
/* E2547C 802B65AC 4600E000 */ add.s $f0, $f28, $f0
/* E25480 802B65B0 27A60028 */ addiu $a2, $sp, 0x28
/* E25484 802B65B4 27A7002C */ addiu $a3, $sp, 0x2c
/* E25488 802B65B8 4604C101 */ sub.s $f4, $f24, $f4
/* E2548C 802B65BC E7BA002C */ swc1 $f26, 0x2c($sp)
/* E25490 802B65C0 E7A00028 */ swc1 $f0, 0x28($sp)
/* E25494 802B65C4 E7A40030 */ swc1 $f4, 0x30($sp)
/* E25498 802B65C8 AFB30010 */ sw $s3, 0x10($sp)
/* E2549C 802B65CC E7B40014 */ swc1 $f20, 0x14($sp)
/* E254A0 802B65D0 0C037B01 */ jal player_test_lateral_overlap
/* E254A4 802B65D4 E7B60018 */ swc1 $f22, 0x18($sp)
/* E254A8 802B65D8 0040882D */ daddu $s1, $v0, $zero
/* E254AC 802B65DC 0621FFCC */ bgez $s1, .L802B6510
/* E254B0 802B65E0 26100001 */ addiu $s0, $s0, 1
/* E254B4 802B65E4 2A020010 */ slti $v0, $s0, 0x10
/* E254B8 802B65E8 1440FFE5 */ bnez $v0, .L802B6580
/* E254BC 802B65EC 00000000 */ nop
.L802B65F0:
/* E254C0 802B65F0 06200020 */ bltz $s1, .L802B6674_E25544
/* E254C4 802B65F4 32224000 */ andi $v0, $s1, 0x4000
/* E254C8 802B65F8 1040001F */ beqz $v0, .L802B6678
/* E254CC 802B65FC 0220102D */ daddu $v0, $s1, $zero
/* E254D0 802B6600 3C108011 */ lui $s0, %hi(gPlayerData+0x1)
/* E254D4 802B6604 8210F291 */ lb $s0, %lo(gPlayerData+0x1)($s0)
/* E254D8 802B6608 0C0441A9 */ jal get_entity_type
/* E254DC 802B660C 0220202D */ daddu $a0, $s1, $zero
/* E254E0 802B6610 2443FFF9 */ addiu $v1, $v0, -7
/* E254E4 802B6614 2C620020 */ sltiu $v0, $v1, 0x20
/* E254E8 802B6618 10400016 */ beqz $v0, .L802B6674_E25544
/* E254EC 802B661C 00031080 */ sll $v0, $v1, 2
/* E254F0 802B6620 3C01802B */ lui $at, %hi(jtbl_802B6E08_E25CD8)
/* E254F4 802B6624 00220821 */ addu $at, $at, $v0
/* E254F8 802B6628 8C226E08 */ lw $v0, %lo(jtbl_802B6E08_E25CD8)($at)
/* E254FC 802B662C 00400008 */ jr $v0
/* E25500 802B6630 00000000 */ nop
.L802B6634_E25504:
/* E25504 802B6634 0603000F */ bgezl $s0, .L802B6674_E25544
/* E25508 802B6638 2411FFFF */ addiu $s1, $zero, -1
/* E2550C 802B663C 080AD998 */ j .L802B6660_E25530
/* E25510 802B6640 00000000 */ nop
.L802B6644_E25514:
/* E25514 802B6644 5E00000B */ bgtzl $s0, .L802B6674_E25544
/* E25518 802B6648 2411FFFF */ addiu $s1, $zero, -1
/* E2551C 802B664C 080AD998 */ j .L802B6660_E25530
/* E25520 802B6650 00000000 */ nop
.L802B6654_E25524:
/* E25524 802B6654 2A020002 */ slti $v0, $s0, 2
/* E25528 802B6658 50400006 */ beql $v0, $zero, .L802B6674_E25544
/* E2552C 802B665C 2411FFFF */ addiu $s1, $zero, -1
.L802B6660_E25530:
/* E25530 802B6660 8E420004 */ lw $v0, 4($s2)
/* E25534 802B6664 34420400 */ ori $v0, $v0, 0x400
/* E25538 802B6668 080AD99D */ j .L802B6674_E25544
/* E2553C 802B666C AE420004 */ sw $v0, 4($s2)
.L802B6670_E25540:
/* E25540 802B6670 2411FFFF */ addiu $s1, $zero, -1
.L802B6674_E25544:
/* E25544 802B6674 0220102D */ daddu $v0, $s1, $zero
.L802B6678:
/* E25548 802B6678 8FBF0048 */ lw $ra, 0x48($sp)
/* E2554C 802B667C 8FB30044 */ lw $s3, 0x44($sp)
/* E25550 802B6680 8FB20040 */ lw $s2, 0x40($sp)
/* E25554 802B6684 8FB1003C */ lw $s1, 0x3c($sp)
/* E25558 802B6688 8FB00038 */ lw $s0, 0x38($sp)
/* E2555C 802B668C D7BC0070 */ ldc1 $f28, 0x70($sp)
/* E25560 802B6690 D7BA0068 */ ldc1 $f26, 0x68($sp)
/* E25564 802B6694 D7B80060 */ ldc1 $f24, 0x60($sp)
/* E25568 802B6698 D7B60058 */ ldc1 $f22, 0x58($sp)
/* E2556C 802B669C D7B40050 */ ldc1 $f20, 0x50($sp)
/* E25570 802B66A0 03E00008 */ jr $ra
/* E25574 802B66A4 27BD0078 */ addiu $sp, $sp, 0x78

View File

@ -1,387 +0,0 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
glabel action_hammer_try_hit
/* E256F0 802B6820 27BDFF88 */ addiu $sp, $sp, -0x78
/* E256F4 802B6824 AFB20040 */ sw $s2, 0x40($sp)
/* E256F8 802B6828 3C128011 */ lui $s2, %hi(gPlayerStatus)
/* E256FC 802B682C 2652EFC8 */ addiu $s2, $s2, %lo(gPlayerStatus)
/* E25700 802B6830 AFBF004C */ sw $ra, 0x4c($sp)
/* E25704 802B6834 AFB40048 */ sw $s4, 0x48($sp)
/* E25708 802B6838 AFB30044 */ sw $s3, 0x44($sp)
/* E2570C 802B683C AFB1003C */ sw $s1, 0x3c($sp)
/* E25710 802B6840 AFB00038 */ sw $s0, 0x38($sp)
/* E25714 802B6844 F7BC0070 */ sdc1 $f28, 0x70($sp)
/* E25718 802B6848 F7BA0068 */ sdc1 $f26, 0x68($sp)
/* E2571C 802B684C F7B80060 */ sdc1 $f24, 0x60($sp)
/* E25720 802B6850 F7B60058 */ sdc1 $f22, 0x58($sp)
/* E25724 802B6854 F7B40050 */ sdc1 $f20, 0x50($sp)
/* E25728 802B6858 3C148016 */ lui $s4, %hi(gCollisionStatus)
/* E2572C 802B685C 2694A550 */ addiu $s4, $s4, %lo(gCollisionStatus)
/* E25730 802B6860 0C0394D2 */ jal func_800E5348
/* E25734 802B6864 00000000 */ nop
/* E25738 802B6868 8E4400A4 */ lw $a0, 0xa4($s2)
/* E2573C 802B686C 0C0AD800 */ jal action_hammer_is_swinging_away
/* E25740 802B6870 46000586 */ mov.s $f22, $f0
/* E25744 802B6874 10400024 */ beqz $v0, .L802B6908
/* E25748 802B6878 27A50020 */ addiu $a1, $sp, 0x20
/* E2574C 802B687C 3C038007 */ lui $v1, %hi(gCurrentCameraID)
/* E25750 802B6880 8C637410 */ lw $v1, %lo(gCurrentCameraID)($v1)
/* E25754 802B6884 3C0142B4 */ lui $at, 0x42b4
/* E25758 802B6888 4481A000 */ mtc1 $at, $f20
/* E2575C 802B688C 00031080 */ sll $v0, $v1, 2
/* E25760 802B6890 00431021 */ addu $v0, $v0, $v1
/* E25764 802B6894 00021080 */ sll $v0, $v0, 2
/* E25768 802B6898 00431023 */ subu $v0, $v0, $v1
/* E2576C 802B689C 000218C0 */ sll $v1, $v0, 3
/* E25770 802B68A0 00431021 */ addu $v0, $v0, $v1
/* E25774 802B68A4 000210C0 */ sll $v0, $v0, 3
/* E25778 802B68A8 4614B000 */ add.s $f0, $f22, $f20
/* E2577C 802B68AC 3C01800B */ lui $at, %hi(gCameras+0x6C)
/* E25780 802B68B0 00220821 */ addu $at, $at, $v0
/* E25784 802B68B4 C42C1DEC */ lwc1 $f12, %lo(gCameras+0x6C)($at)
/* E25788 802B68B8 0C00A6C9 */ jal clamp_angle
/* E2578C 802B68BC 460C0301 */ sub.s $f12, $f0, $f12
/* E25790 802B68C0 46000086 */ mov.s $f2, $f0
/* E25794 802B68C4 4602A03E */ c.le.s $f20, $f2
/* E25798 802B68C8 00000000 */ nop
/* E2579C 802B68CC 45000009 */ bc1f .L802B68F4
/* E257A0 802B68D0 00000000 */ nop
/* E257A4 802B68D4 3C014387 */ lui $at, 0x4387
/* E257A8 802B68D8 44810000 */ mtc1 $at, $f0
/* E257AC 802B68DC 00000000 */ nop
/* E257B0 802B68E0 4600103C */ c.lt.s $f2, $f0
/* E257B4 802B68E4 3C01C1F0 */ lui $at, 0xc1f0
/* E257B8 802B68E8 44810000 */ mtc1 $at, $f0
/* E257BC 802B68EC 45030005 */ bc1tl .L802B6904
/* E257C0 802B68F0 4600B580 */ add.s $f22, $f22, $f0
.L802B68F4:
/* E257C4 802B68F4 3C0141F0 */ lui $at, 0x41f0
/* E257C8 802B68F8 44810000 */ mtc1 $at, $f0
/* E257CC 802B68FC 00000000 */ nop
/* E257D0 802B6900 4600B580 */ add.s $f22, $f22, $f0
.L802B6904:
/* E257D4 802B6904 27A50020 */ addiu $a1, $sp, 0x20
.L802B6908:
/* E257D8 802B6908 3C0140C9 */ lui $at, 0x40c9
/* E257DC 802B690C 34210FD0 */ ori $at, $at, 0xfd0
/* E257E0 802B6910 44816000 */ mtc1 $at, $f12
/* E257E4 802B6914 27A60024 */ addiu $a2, $sp, 0x24
/* E257E8 802B6918 460CB302 */ mul.s $f12, $f22, $f12
/* E257EC 802B691C 00000000 */ nop
/* E257F0 802B6920 24110001 */ addiu $s1, $zero, 1
/* E257F4 802B6924 27B30030 */ addiu $s3, $sp, 0x30
/* E257F8 802B6928 3C0143B4 */ lui $at, 0x43b4
/* E257FC 802B692C 44810000 */ mtc1 $at, $f0
/* E25800 802B6930 3C014080 */ lui $at, 0x4080
/* E25804 802B6934 4481A000 */ mtc1 $at, $f20
/* E25808 802B6938 0C00A82D */ jal sin_cos_rad
/* E2580C 802B693C 46006303 */ div.s $f12, $f12, $f0
/* E25810 802B6940 C65C0028 */ lwc1 $f28, 0x28($s2)
/* E25814 802B6944 C65A002C */ lwc1 $f26, 0x2c($s2)
/* E25818 802B6948 C6580030 */ lwc1 $f24, 0x30($s2)
.L802B694C:
/* E2581C 802B694C C7A40020 */ lwc1 $f4, 0x20($sp)
/* E25820 802B6950 44910000 */ mtc1 $s1, $f0
/* E25824 802B6954 00000000 */ nop
/* E25828 802B6958 46800020 */ cvt.s.w $f0, $f0
/* E2582C 802B695C 46002102 */ mul.s $f4, $f4, $f0
/* E25830 802B6960 00000000 */ nop
/* E25834 802B6964 C7A20024 */ lwc1 $f2, 0x24($sp)
/* E25838 802B6968 46001082 */ mul.s $f2, $f2, $f0
/* E2583C 802B696C 00000000 */ nop
/* E25840 802B6970 24040003 */ addiu $a0, $zero, 3
/* E25844 802B6974 0240282D */ daddu $a1, $s2, $zero
/* E25848 802B6978 4604E100 */ add.s $f4, $f28, $f4
/* E2584C 802B697C 27A60028 */ addiu $a2, $sp, 0x28
/* E25850 802B6980 27A7002C */ addiu $a3, $sp, 0x2c
/* E25854 802B6984 4602C081 */ sub.s $f2, $f24, $f2
/* E25858 802B6988 E7BA002C */ swc1 $f26, 0x2c($sp)
/* E2585C 802B698C E7A40028 */ swc1 $f4, 0x28($sp)
/* E25860 802B6990 E7A20030 */ swc1 $f2, 0x30($sp)
/* E25864 802B6994 AFB30010 */ sw $s3, 0x10($sp)
/* E25868 802B6998 E7B40014 */ swc1 $f20, 0x14($sp)
/* E2586C 802B699C 0C037B01 */ jal player_test_lateral_overlap
/* E25870 802B69A0 E7B60018 */ swc1 $f22, 0x18($sp)
/* E25874 802B69A4 3C03802B */ lui $v1, %hi(HammerHit)
/* E25878 802B69A8 8C636DB0 */ lw $v1, %lo(HammerHit)($v1)
/* E2587C 802B69AC 8C630014 */ lw $v1, 0x14($v1)
/* E25880 802B69B0 14600009 */ bnez $v1, .L802B69D8
/* E25884 802B69B4 0040802D */ daddu $s0, $v0, $zero
/* E25888 802B69B8 06000009 */ bltz $s0, .L802B69E0
/* E2588C 802B69BC A6900014 */ sh $s0, 0x14($s4)
/* E25890 802B69C0 32024000 */ andi $v0, $s0, 0x4000
/* E25894 802B69C4 10400004 */ beqz $v0, .L802B69D8
/* E25898 802B69C8 00000000 */ nop
/* E2589C 802B69CC 0C04417A */ jal get_entity_by_index
/* E258A0 802B69D0 0200202D */ daddu $a0, $s0, $zero
/* E258A4 802B69D4 A0400007 */ sb $zero, 7($v0)
.L802B69D8:
/* E258A8 802B69D8 06010005 */ bgez $s0, .L802B69F0
/* E258AC 802B69DC 2A220010 */ slti $v0, $s1, 0x10
.L802B69E0:
/* E258B0 802B69E0 26310001 */ addiu $s1, $s1, 1
/* E258B4 802B69E4 2A220010 */ slti $v0, $s1, 0x10
/* E258B8 802B69E8 1440FFD8 */ bnez $v0, .L802B694C
/* E258BC 802B69EC 00000000 */ nop
.L802B69F0:
/* E258C0 802B69F0 14400062 */ bnez $v0, .L802B6B7C
/* E258C4 802B69F4 00000000 */ nop
/* E258C8 802B69F8 0C0394D2 */ jal func_800E5348
/* E258CC 802B69FC 00000000 */ nop
/* E258D0 802B6A00 8E4400A4 */ lw $a0, 0xa4($s2)
/* E258D4 802B6A04 0C0AD800 */ jal action_hammer_is_swinging_away
/* E258D8 802B6A08 46000586 */ mov.s $f22, $f0
/* E258DC 802B6A0C 14400024 */ bnez $v0, .L802B6AA0
/* E258E0 802B6A10 27A50020 */ addiu $a1, $sp, 0x20
/* E258E4 802B6A14 3C038007 */ lui $v1, %hi(gCurrentCameraID)
/* E258E8 802B6A18 8C637410 */ lw $v1, %lo(gCurrentCameraID)($v1)
/* E258EC 802B6A1C 3C0142B4 */ lui $at, 0x42b4
/* E258F0 802B6A20 4481A000 */ mtc1 $at, $f20
/* E258F4 802B6A24 00031080 */ sll $v0, $v1, 2
/* E258F8 802B6A28 00431021 */ addu $v0, $v0, $v1
/* E258FC 802B6A2C 00021080 */ sll $v0, $v0, 2
/* E25900 802B6A30 00431023 */ subu $v0, $v0, $v1
/* E25904 802B6A34 000218C0 */ sll $v1, $v0, 3
/* E25908 802B6A38 00431021 */ addu $v0, $v0, $v1
/* E2590C 802B6A3C 000210C0 */ sll $v0, $v0, 3
/* E25910 802B6A40 4614B000 */ add.s $f0, $f22, $f20
/* E25914 802B6A44 3C01800B */ lui $at, %hi(gCameras+0x6C)
/* E25918 802B6A48 00220821 */ addu $at, $at, $v0
/* E2591C 802B6A4C C42C1DEC */ lwc1 $f12, %lo(gCameras+0x6C)($at)
/* E25920 802B6A50 0C00A6C9 */ jal clamp_angle
/* E25924 802B6A54 460C0301 */ sub.s $f12, $f0, $f12
/* E25928 802B6A58 46000086 */ mov.s $f2, $f0
/* E2592C 802B6A5C 4602A03E */ c.le.s $f20, $f2
/* E25930 802B6A60 00000000 */ nop
/* E25934 802B6A64 45000009 */ bc1f .L802B6A8C
/* E25938 802B6A68 00000000 */ nop
/* E2593C 802B6A6C 3C014387 */ lui $at, 0x4387
/* E25940 802B6A70 44810000 */ mtc1 $at, $f0
/* E25944 802B6A74 00000000 */ nop
/* E25948 802B6A78 4600103C */ c.lt.s $f2, $f0
/* E2594C 802B6A7C 3C014170 */ lui $at, 0x4170
/* E25950 802B6A80 44810000 */ mtc1 $at, $f0
/* E25954 802B6A84 45030005 */ bc1tl .L802B6A9C
/* E25958 802B6A88 4600B580 */ add.s $f22, $f22, $f0
.L802B6A8C:
/* E2595C 802B6A8C 3C01C170 */ lui $at, 0xc170
/* E25960 802B6A90 44810000 */ mtc1 $at, $f0
/* E25964 802B6A94 00000000 */ nop
/* E25968 802B6A98 4600B580 */ add.s $f22, $f22, $f0
.L802B6A9C:
/* E2596C 802B6A9C 27A50020 */ addiu $a1, $sp, 0x20
.L802B6AA0:
/* E25970 802B6AA0 3C0140C9 */ lui $at, 0x40c9
/* E25974 802B6AA4 34210FD0 */ ori $at, $at, 0xfd0
/* E25978 802B6AA8 44816000 */ mtc1 $at, $f12
/* E2597C 802B6AAC 27A60024 */ addiu $a2, $sp, 0x24
/* E25980 802B6AB0 460CB302 */ mul.s $f12, $f22, $f12
/* E25984 802B6AB4 00000000 */ nop
/* E25988 802B6AB8 24110001 */ addiu $s1, $zero, 1
/* E2598C 802B6ABC 27B30030 */ addiu $s3, $sp, 0x30
/* E25990 802B6AC0 3C0143B4 */ lui $at, 0x43b4
/* E25994 802B6AC4 44810000 */ mtc1 $at, $f0
/* E25998 802B6AC8 3C014080 */ lui $at, 0x4080
/* E2599C 802B6ACC 4481A000 */ mtc1 $at, $f20
/* E259A0 802B6AD0 0C00A82D */ jal sin_cos_rad
/* E259A4 802B6AD4 46006303 */ div.s $f12, $f12, $f0
.L802B6AD8:
/* E259A8 802B6AD8 C7A40020 */ lwc1 $f4, 0x20($sp)
/* E259AC 802B6ADC 44910000 */ mtc1 $s1, $f0
/* E259B0 802B6AE0 00000000 */ nop
/* E259B4 802B6AE4 46800020 */ cvt.s.w $f0, $f0
/* E259B8 802B6AE8 46002102 */ mul.s $f4, $f4, $f0
/* E259BC 802B6AEC 00000000 */ nop
/* E259C0 802B6AF0 C7A20024 */ lwc1 $f2, 0x24($sp)
/* E259C4 802B6AF4 46001082 */ mul.s $f2, $f2, $f0
/* E259C8 802B6AF8 00000000 */ nop
/* E259CC 802B6AFC 24040003 */ addiu $a0, $zero, 3
/* E259D0 802B6B00 0240282D */ daddu $a1, $s2, $zero
/* E259D4 802B6B04 4604E100 */ add.s $f4, $f28, $f4
/* E259D8 802B6B08 27A60028 */ addiu $a2, $sp, 0x28
/* E259DC 802B6B0C 27A7002C */ addiu $a3, $sp, 0x2c
/* E259E0 802B6B10 4602C081 */ sub.s $f2, $f24, $f2
/* E259E4 802B6B14 E7BA002C */ swc1 $f26, 0x2c($sp)
/* E259E8 802B6B18 E7A40028 */ swc1 $f4, 0x28($sp)
/* E259EC 802B6B1C E7A20030 */ swc1 $f2, 0x30($sp)
/* E259F0 802B6B20 AFB30010 */ sw $s3, 0x10($sp)
/* E259F4 802B6B24 E7B40014 */ swc1 $f20, 0x14($sp)
/* E259F8 802B6B28 0C037B01 */ jal player_test_lateral_overlap
/* E259FC 802B6B2C E7B60018 */ swc1 $f22, 0x18($sp)
/* E25A00 802B6B30 3C03802B */ lui $v1, %hi(HammerHit)
/* E25A04 802B6B34 8C636DB0 */ lw $v1, %lo(HammerHit)($v1)
/* E25A08 802B6B38 8C630014 */ lw $v1, 0x14($v1)
/* E25A0C 802B6B3C 14600009 */ bnez $v1, .L802B6B64
/* E25A10 802B6B40 0040802D */ daddu $s0, $v0, $zero
/* E25A14 802B6B44 06000009 */ bltz $s0, .L802B6B6C
/* E25A18 802B6B48 A6900014 */ sh $s0, 0x14($s4)
/* E25A1C 802B6B4C 32024000 */ andi $v0, $s0, 0x4000
/* E25A20 802B6B50 10400004 */ beqz $v0, .L802B6B64
/* E25A24 802B6B54 00000000 */ nop
/* E25A28 802B6B58 0C04417A */ jal get_entity_by_index
/* E25A2C 802B6B5C 0200202D */ daddu $a0, $s0, $zero
/* E25A30 802B6B60 A0400007 */ sb $zero, 7($v0)
.L802B6B64:
/* E25A34 802B6B64 06010005 */ bgez $s0, .L802B6B7C
/* E25A38 802B6B68 00000000 */ nop
.L802B6B6C:
/* E25A3C 802B6B6C 26310001 */ addiu $s1, $s1, 1
/* E25A40 802B6B70 2A220010 */ slti $v0, $s1, 0x10
/* E25A44 802B6B74 1440FFD8 */ bnez $v0, .L802B6AD8
/* E25A48 802B6B78 00000000 */ nop
.L802B6B7C:
/* E25A4C 802B6B7C 3C02802B */ lui $v0, %hi(HammerHit)
/* E25A50 802B6B80 8C426DB0 */ lw $v0, %lo(HammerHit)($v0)
/* E25A54 802B6B84 8C440018 */ lw $a0, 0x18($v0)
/* E25A58 802B6B88 24020002 */ addiu $v0, $zero, 2
/* E25A5C 802B6B8C 14820032 */ bne $a0, $v0, .L802B6C58
/* E25A60 802B6B90 00000000 */ nop
/* E25A64 802B6B94 3C038011 */ lui $v1, %hi(gPlayerData+0x1)
/* E25A68 802B6B98 8063F291 */ lb $v1, %lo(gPlayerData+0x1)($v1)
/* E25A6C 802B6B9C 14640003 */ bne $v1, $a0, .L802B6BAC
/* E25A70 802B6BA0 24020001 */ addiu $v0, $zero, 1
/* E25A74 802B6BA4 080ADAEE */ j .L802B6BB8
/* E25A78 802B6BA8 24042117 */ addiu $a0, $zero, 0x2117
.L802B6BAC:
/* E25A7C 802B6BAC 14620002 */ bne $v1, $v0, .L802B6BB8
/* E25A80 802B6BB0 24042115 */ addiu $a0, $zero, 0x2115
/* E25A84 802B6BB4 24042116 */ addiu $a0, $zero, 0x2116
.L802B6BB8:
/* E25A88 802B6BB8 0C052736 */ jal sfx_play_sound_at_player
/* E25A8C 802B6BBC 0000282D */ daddu $a1, $zero, $zero
/* E25A90 802B6BC0 3C02802B */ lui $v0, %hi(HammerHit)
/* E25A94 802B6BC4 8C426DB0 */ lw $v0, %lo(HammerHit)($v0)
/* E25A98 802B6BC8 0C0AD812 */ jal action_hammer_play_hit_fx
/* E25A9C 802B6BCC 8C440010 */ lw $a0, 0x10($v0)
/* E25AA0 802B6BD0 86840014 */ lh $a0, 0x14($s4)
/* E25AA4 802B6BD4 96820014 */ lhu $v0, 0x14($s4)
/* E25AA8 802B6BD8 04800007 */ bltz $a0, .L802B6BF8
/* E25AAC 802B6BDC 30424000 */ andi $v0, $v0, 0x4000
/* E25AB0 802B6BE0 10400005 */ beqz $v0, .L802B6BF8
/* E25AB4 802B6BE4 00000000 */ nop
/* E25AB8 802B6BE8 0C04417A */ jal get_entity_by_index
/* E25ABC 802B6BEC 00000000 */ nop
/* E25AC0 802B6BF0 080ADB03 */ j .L802B6C0C
/* E25AC4 802B6BF4 A0400007 */ sb $zero, 7($v0)
.L802B6BF8:
/* E25AC8 802B6BF8 3C02802B */ lui $v0, %hi(HammerHit)
/* E25ACC 802B6BFC 8C426DB0 */ lw $v0, %lo(HammerHit)($v0)
/* E25AD0 802B6C00 8C420010 */ lw $v0, 0x10($v0)
/* E25AD4 802B6C04 04410014 */ bgez $v0, .L802B6C58
/* E25AD8 802B6C08 00000000 */ nop
.L802B6C0C:
/* E25ADC 802B6C0C 8E420000 */ lw $v0, ($s2)
/* E25AE0 802B6C10 3C030100 */ lui $v1, 0x100
/* E25AE4 802B6C14 00431025 */ or $v0, $v0, $v1
/* E25AE8 802B6C18 AE420000 */ sw $v0, ($s2)
/* E25AEC 802B6C1C 3C02802B */ lui $v0, %hi(HammerHit)
/* E25AF0 802B6C20 8C426DB0 */ lw $v0, %lo(HammerHit)($v0)
/* E25AF4 802B6C24 8C420010 */ lw $v0, 0x10($v0)
/* E25AF8 802B6C28 0441000B */ bgez $v0, .L802B6C58
/* E25AFC 802B6C2C 00000000 */ nop
/* E25B00 802B6C30 3C028011 */ lui $v0, %hi(gPlayerData+0x1)
/* E25B04 802B6C34 8042F291 */ lb $v0, %lo(gPlayerData+0x1)($v0)
/* E25B08 802B6C38 28420002 */ slti $v0, $v0, 2
/* E25B0C 802B6C3C 14400006 */ bnez $v0, .L802B6C58
/* E25B10 802B6C40 24030001 */ addiu $v1, $zero, 1
/* E25B14 802B6C44 3C028016 */ lui $v0, %hi(D_8015A578)
/* E25B18 802B6C48 2442A578 */ addiu $v0, $v0, %lo(D_8015A578)
/* E25B1C 802B6C4C C640002C */ lwc1 $f0, 0x2c($s2)
/* E25B20 802B6C50 A0430000 */ sb $v1, ($v0)
/* E25B24 802B6C54 E4400008 */ swc1 $f0, 8($v0)
.L802B6C58:
/* E25B28 802B6C58 824200B6 */ lb $v0, 0xb6($s2)
/* E25B2C 802B6C5C 14400009 */ bnez $v0, .L802B6C84
/* E25B30 802B6C60 924300B6 */ lbu $v1, 0xb6($s2)
/* E25B34 802B6C64 06000007 */ bltz $s0, .L802B6C84
/* E25B38 802B6C68 00000000 */ nop
/* E25B3C 802B6C6C 3C02802B */ lui $v0, %hi(HammerHit)
/* E25B40 802B6C70 8C426DB0 */ lw $v0, %lo(HammerHit)($v0)
/* E25B44 802B6C74 8C420014 */ lw $v0, 0x14($v0)
/* E25B48 802B6C78 14400002 */ bnez $v0, .L802B6C84
/* E25B4C 802B6C7C 24620001 */ addiu $v0, $v1, 1
/* E25B50 802B6C80 A24200B6 */ sb $v0, 0xb6($s2)
.L802B6C84:
/* E25B54 802B6C84 824300B6 */ lb $v1, 0xb6($s2)
/* E25B58 802B6C88 24020001 */ addiu $v0, $zero, 1
/* E25B5C 802B6C8C 14620004 */ bne $v1, $v0, .L802B6CA0
/* E25B60 802B6C90 00000000 */ nop
/* E25B64 802B6C94 06010002 */ bgez $s0, .L802B6CA0
/* E25B68 802B6C98 24020002 */ addiu $v0, $zero, 2
/* E25B6C 802B6C9C A24200B6 */ sb $v0, 0xb6($s2)
.L802B6CA0:
/* E25B70 802B6CA0 3C05802B */ lui $a1, %hi(HammerHit)
/* E25B74 802B6CA4 24A56DB0 */ addiu $a1, $a1, %lo(HammerHit)
/* E25B78 802B6CA8 8CA30000 */ lw $v1, ($a1)
/* E25B7C 802B6CAC 8C620018 */ lw $v0, 0x18($v1)
/* E25B80 802B6CB0 24420001 */ addiu $v0, $v0, 1
/* E25B84 802B6CB4 06000003 */ bltz $s0, .L802B6CC4
/* E25B88 802B6CB8 AC620018 */ sw $v0, 0x18($v1)
/* E25B8C 802B6CBC 24020001 */ addiu $v0, $zero, 1
/* E25B90 802B6CC0 AC620014 */ sw $v0, 0x14($v1)
.L802B6CC4:
/* E25B94 802B6CC4 8CA20000 */ lw $v0, ($a1)
/* E25B98 802B6CC8 8C430018 */ lw $v1, 0x18($v0)
/* E25B9C 802B6CCC 24020006 */ addiu $v0, $zero, 6
/* E25BA0 802B6CD0 14620005 */ bne $v1, $v0, .L802B6CE8
/* E25BA4 802B6CD4 3C03FFDF */ lui $v1, 0xffdf
/* E25BA8 802B6CD8 8E420000 */ lw $v0, ($s2)
/* E25BAC 802B6CDC 3463FFFF */ ori $v1, $v1, 0xffff
/* E25BB0 802B6CE0 00431024 */ and $v0, $v0, $v1
/* E25BB4 802B6CE4 AE420000 */ sw $v0, ($s2)
.L802B6CE8:
/* E25BB8 802B6CE8 964400BC */ lhu $a0, 0xbc($s2)
/* E25BBC 802B6CEC 24020001 */ addiu $v0, $zero, 1
/* E25BC0 802B6CF0 14820020 */ bne $a0, $v0, .L802B6D74
/* E25BC4 802B6CF4 00000000 */ nop
/* E25BC8 802B6CF8 8CA30000 */ lw $v1, ($a1)
/* E25BCC 802B6CFC 8C620018 */ lw $v0, 0x18($v1)
/* E25BD0 802B6D00 28420007 */ slti $v0, $v0, 7
/* E25BD4 802B6D04 14400005 */ bnez $v0, .L802B6D1C
/* E25BD8 802B6D08 00000000 */ nop
/* E25BDC 802B6D0C 8E4200E0 */ lw $v0, 0xe0($s2)
/* E25BE0 802B6D10 30424000 */ andi $v0, $v0, 0x4000
/* E25BE4 802B6D14 54400001 */ bnel $v0, $zero, .L802B6D1C
/* E25BE8 802B6D18 AC64001C */ sw $a0, 0x1c($v1)
.L802B6D1C:
/* E25BEC 802B6D1C 3C03802B */ lui $v1, %hi(HammerHit)
/* E25BF0 802B6D20 8C636DB0 */ lw $v1, %lo(HammerHit)($v1)
/* E25BF4 802B6D24 8C62001C */ lw $v0, 0x1c($v1)
/* E25BF8 802B6D28 14400006 */ bnez $v0, .L802B6D44
/* E25BFC 802B6D2C AC600014 */ sw $zero, 0x14($v1)
/* E25C00 802B6D30 8C630018 */ lw $v1, 0x18($v1)
/* E25C04 802B6D34 2402000A */ addiu $v0, $zero, 0xa
/* E25C08 802B6D38 0043102A */ slt $v0, $v0, $v1
/* E25C0C 802B6D3C 10400009 */ beqz $v0, .L802B6D64
/* E25C10 802B6D40 3C03FFDF */ lui $v1, 0xffdf
.L802B6D44:
/* E25C14 802B6D44 3C03FEFF */ lui $v1, 0xfeff
/* E25C18 802B6D48 3463FFFF */ ori $v1, $v1, 0xffff
/* E25C1C 802B6D4C 8E420000 */ lw $v0, ($s2)
/* E25C20 802B6D50 0000202D */ daddu $a0, $zero, $zero
/* E25C24 802B6D54 00431024 */ and $v0, $v0, $v1
/* E25C28 802B6D58 0C039769 */ jal set_action_state
/* E25C2C 802B6D5C AE420000 */ sw $v0, ($s2)
/* E25C30 802B6D60 3C03FFDF */ lui $v1, 0xffdf
.L802B6D64:
/* E25C34 802B6D64 8E420000 */ lw $v0, ($s2)
/* E25C38 802B6D68 3463FFFF */ ori $v1, $v1, 0xffff
/* E25C3C 802B6D6C 00431024 */ and $v0, $v0, $v1
/* E25C40 802B6D70 AE420000 */ sw $v0, ($s2)
.L802B6D74:
/* E25C44 802B6D74 8FBF004C */ lw $ra, 0x4c($sp)
/* E25C48 802B6D78 8FB40048 */ lw $s4, 0x48($sp)
/* E25C4C 802B6D7C 8FB30044 */ lw $s3, 0x44($sp)
/* E25C50 802B6D80 8FB20040 */ lw $s2, 0x40($sp)
/* E25C54 802B6D84 8FB1003C */ lw $s1, 0x3c($sp)
/* E25C58 802B6D88 8FB00038 */ lw $s0, 0x38($sp)
/* E25C5C 802B6D8C D7BC0070 */ ldc1 $f28, 0x70($sp)
/* E25C60 802B6D90 D7BA0068 */ ldc1 $f26, 0x68($sp)
/* E25C64 802B6D94 D7B80060 */ ldc1 $f24, 0x60($sp)
/* E25C68 802B6D98 D7B60058 */ ldc1 $f22, 0x58($sp)
/* E25C6C 802B6D9C D7B40050 */ ldc1 $f20, 0x50($sp)
/* E25C70 802B6DA0 03E00008 */ jr $ra
/* E25C74 802B6DA4 27BD0078 */ addiu $sp, $sp, 0x78
/* E25C78 802B6DA8 00000000 */ nop
/* E25C7C 802B6DAC 00000000 */ nop

View File

@ -285,12 +285,12 @@ glabel _use_partner_ability
/* 83F84 800EAAD4 A2620012 */ sb $v0, 0x12($s3)
/* 83F88 800EAAD8 3C048011 */ lui $a0, %hi(wPartnerNpc)
/* 83F8C 800EAADC 8C84C930 */ lw $a0, %lo(wPartnerNpc)($a0)
/* 83F90 800EAAE0 3C018010 */ lui $at, %hi(SavedPartnerPosX)
/* 83F94 800EAAE4 C422833C */ lwc1 $f2, %lo(SavedPartnerPosX)($at)
/* 83F98 800EAAE8 3C018010 */ lui $at, %hi(SavedPartnerPosY)
/* 83F9C 800EAAEC C4248340 */ lwc1 $f4, %lo(SavedPartnerPosY)($at)
/* 83FA0 800EAAF0 3C018010 */ lui $at, %hi(SavedPartnerPosZ)
/* 83FA4 800EAAF4 C4268344 */ lwc1 $f6, %lo(SavedPartnerPosZ)($at)
/* 83F90 800EAAE0 3C018010 */ lui $at, %hi(wSavedPartnerPosX)
/* 83F94 800EAAE4 C422833C */ lwc1 $f2, %lo(wSavedPartnerPosX)($at)
/* 83F98 800EAAE8 3C018010 */ lui $at, %hi(wSavedPartnerPosY)
/* 83F9C 800EAAEC C4248340 */ lwc1 $f4, %lo(wSavedPartnerPosY)($at)
/* 83FA0 800EAAF0 3C018010 */ lui $at, %hi(wSavedPartnerPosZ)
/* 83FA4 800EAAF4 C4268344 */ lwc1 $f6, %lo(wSavedPartnerPosZ)($at)
/* 83FA8 800EAAF8 3C013F80 */ lui $at, 0x3f80
/* 83FAC 800EAAFC 44810000 */ mtc1 $at, $f0
/* 83FB0 800EAB00 3C028011 */ lui $v0, %hi(wPartner)
@ -503,12 +503,12 @@ glabel _use_partner_ability
/* 842BC 800EAE0C A2620012 */ sb $v0, 0x12($s3)
/* 842C0 800EAE10 3C048011 */ lui $a0, %hi(wPartnerNpc)
/* 842C4 800EAE14 8C84C930 */ lw $a0, %lo(wPartnerNpc)($a0)
/* 842C8 800EAE18 3C018010 */ lui $at, %hi(SavedPartnerPosX)
/* 842CC 800EAE1C C422833C */ lwc1 $f2, %lo(SavedPartnerPosX)($at)
/* 842D0 800EAE20 3C018010 */ lui $at, %hi(SavedPartnerPosY)
/* 842D4 800EAE24 C4248340 */ lwc1 $f4, %lo(SavedPartnerPosY)($at)
/* 842D8 800EAE28 3C018010 */ lui $at, %hi(SavedPartnerPosZ)
/* 842DC 800EAE2C C4268344 */ lwc1 $f6, %lo(SavedPartnerPosZ)($at)
/* 842C8 800EAE18 3C018010 */ lui $at, %hi(wSavedPartnerPosX)
/* 842CC 800EAE1C C422833C */ lwc1 $f2, %lo(wSavedPartnerPosX)($at)
/* 842D0 800EAE20 3C018010 */ lui $at, %hi(wSavedPartnerPosY)
/* 842D4 800EAE24 C4248340 */ lwc1 $f4, %lo(wSavedPartnerPosY)($at)
/* 842D8 800EAE28 3C018010 */ lui $at, %hi(wSavedPartnerPosZ)
/* 842DC 800EAE2C C4268344 */ lwc1 $f6, %lo(wSavedPartnerPosZ)($at)
/* 842E0 800EAE30 3C013F80 */ lui $at, 0x3f80
/* 842E4 800EAE34 44810000 */ mtc1 $at, $f0
/* 842E8 800EAE38 3C028011 */ lui $v0, %hi(wPartner)
@ -669,12 +669,12 @@ glabel _use_partner_ability
/* 84528 800EB078 C4C2002C */ lwc1 $f2, 0x2c($a2)
/* 8452C 800EB07C C4C40030 */ lwc1 $f4, 0x30($a2)
/* 84530 800EB080 8C440018 */ lw $a0, 0x18($v0)
/* 84534 800EB084 3C018010 */ lui $at, %hi(SavedPartnerPosX)
/* 84538 800EB088 E420833C */ swc1 $f0, %lo(SavedPartnerPosX)($at)
/* 8453C 800EB08C 3C018010 */ lui $at, %hi(SavedPartnerPosY)
/* 84540 800EB090 E4228340 */ swc1 $f2, %lo(SavedPartnerPosY)($at)
/* 84544 800EB094 3C018010 */ lui $at, %hi(SavedPartnerPosZ)
/* 84548 800EB098 E4248344 */ swc1 $f4, %lo(SavedPartnerPosZ)($at)
/* 84534 800EB084 3C018010 */ lui $at, %hi(wSavedPartnerPosX)
/* 84538 800EB088 E420833C */ swc1 $f0, %lo(wSavedPartnerPosX)($at)
/* 8453C 800EB08C 3C018010 */ lui $at, %hi(wSavedPartnerPosY)
/* 84540 800EB090 E4228340 */ swc1 $f2, %lo(wSavedPartnerPosY)($at)
/* 84544 800EB094 3C018010 */ lui $at, %hi(wSavedPartnerPosZ)
/* 84548 800EB098 E4248344 */ swc1 $f4, %lo(wSavedPartnerPosZ)($at)
/* 8454C 800EB09C 0C0B0CF8 */ jal start_script
/* 84550 800EB0A0 24060020 */ addiu $a2, $zero, 0x20
/* 84554 800EB0A4 3C038011 */ lui $v1, %hi(wPartnerNpc)

View File

@ -1,38 +0,0 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
glabel partner_clear_player_tracking
/* 8890C 800EF45C 3C058011 */ lui $a1, %hi(PlayerMoveHistory)
/* 88910 800EF460 24A5CD38 */ addiu $a1, $a1, %lo(PlayerMoveHistory)
/* 88914 800EF464 0000302D */ daddu $a2, $zero, $zero
/* 88918 800EF468 3C028010 */ lui $v0, %hi(SavedPartnerPosX)
/* 8891C 800EF46C 2442833C */ addiu $v0, $v0, %lo(SavedPartnerPosX)
/* 88920 800EF470 0040482D */ daddu $t1, $v0, $zero
/* 88924 800EF474 3C028010 */ lui $v0, %hi(SavedPartnerPosY)
/* 88928 800EF478 24428340 */ addiu $v0, $v0, %lo(SavedPartnerPosY)
/* 8892C 800EF47C 0040402D */ daddu $t0, $v0, $zero
/* 88930 800EF480 3C028010 */ lui $v0, %hi(SavedPartnerPosZ)
/* 88934 800EF484 24428344 */ addiu $v0, $v0, %lo(SavedPartnerPosZ)
/* 88938 800EF488 0040382D */ daddu $a3, $v0, $zero
/* 8893C 800EF48C C4800038 */ lwc1 $f0, 0x38($a0)
/* 88940 800EF490 C482003C */ lwc1 $f2, 0x3c($a0)
/* 88944 800EF494 C4840040 */ lwc1 $f4, 0x40($a0)
/* 88948 800EF498 24A3000C */ addiu $v1, $a1, 0xc
/* 8894C 800EF49C E5200000 */ swc1 $f0, ($t1)
/* 88950 800EF4A0 E5020000 */ swc1 $f2, ($t0)
/* 88954 800EF4A4 E4E40000 */ swc1 $f4, ($a3)
.L800EF4A8:
/* 88958 800EF4A8 24C60001 */ addiu $a2, $a2, 1
/* 8895C 800EF4AC C5200000 */ lwc1 $f0, ($t1)
/* 88960 800EF4B0 C5020000 */ lwc1 $f2, ($t0)
/* 88964 800EF4B4 C4E40000 */ lwc1 $f4, ($a3)
/* 88968 800EF4B8 28C20028 */ slti $v0, $a2, 0x28
/* 8896C 800EF4BC E460FFF8 */ swc1 $f0, -8($v1)
/* 88970 800EF4C0 E462FFFC */ swc1 $f2, -4($v1)
/* 88974 800EF4C4 E4640000 */ swc1 $f4, ($v1)
/* 88978 800EF4C8 24630010 */ addiu $v1, $v1, 0x10
/* 8897C 800EF4CC A0A00000 */ sb $zero, ($a1)
/* 88980 800EF4D0 1440FFF5 */ bnez $v0, .L800EF4A8
/* 88984 800EF4D4 24A50010 */ addiu $a1, $a1, 0x10
/* 88988 800EF4D8 03E00008 */ jr $ra
/* 8898C 800EF4DC 00000000 */ nop

View File

@ -1,117 +0,0 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
glabel partner_flying_enable
/* 867C0 800ED310 27BDFFE8 */ addiu $sp, $sp, -0x18
/* 867C4 800ED314 AFB00010 */ sw $s0, 0x10($sp)
/* 867C8 800ED318 0080802D */ daddu $s0, $a0, $zero
/* 867CC 800ED31C 3C048011 */ lui $a0, %hi(PlayerMoveHistory)
/* 867D0 800ED320 2484CD38 */ addiu $a0, $a0, %lo(PlayerMoveHistory)
/* 867D4 800ED324 0000302D */ daddu $a2, $zero, $zero
/* 867D8 800ED328 3C028010 */ lui $v0, %hi(SavedPartnerPosX)
/* 867DC 800ED32C 2442833C */ addiu $v0, $v0, %lo(SavedPartnerPosX)
/* 867E0 800ED330 0040482D */ daddu $t1, $v0, $zero
/* 867E4 800ED334 3C028010 */ lui $v0, %hi(SavedPartnerPosY)
/* 867E8 800ED338 24428340 */ addiu $v0, $v0, %lo(SavedPartnerPosY)
/* 867EC 800ED33C 0040402D */ daddu $t0, $v0, $zero
/* 867F0 800ED340 3C028010 */ lui $v0, %hi(SavedPartnerPosZ)
/* 867F4 800ED344 24428344 */ addiu $v0, $v0, %lo(SavedPartnerPosZ)
/* 867F8 800ED348 0040382D */ daddu $a3, $v0, $zero
/* 867FC 800ED34C AFBF0014 */ sw $ra, 0x14($sp)
/* 86800 800ED350 C5200000 */ lwc1 $f0, ($t1)
/* 86804 800ED354 C5020000 */ lwc1 $f2, ($t0)
/* 86808 800ED358 C4E40000 */ lwc1 $f4, ($a3)
/* 8680C 800ED35C 2483000C */ addiu $v1, $a0, 0xc
/* 86810 800ED360 E6000038 */ swc1 $f0, 0x38($s0)
/* 86814 800ED364 E602003C */ swc1 $f2, 0x3c($s0)
/* 86818 800ED368 E6040040 */ swc1 $f4, 0x40($s0)
.L800ED36C:
/* 8681C 800ED36C 24C60001 */ addiu $a2, $a2, 1
/* 86820 800ED370 C5200000 */ lwc1 $f0, ($t1)
/* 86824 800ED374 C5020000 */ lwc1 $f2, ($t0)
/* 86828 800ED378 C4E40000 */ lwc1 $f4, ($a3)
/* 8682C 800ED37C 28C20028 */ slti $v0, $a2, 0x28
/* 86830 800ED380 E460FFF8 */ swc1 $f0, -8($v1)
/* 86834 800ED384 E462FFFC */ swc1 $f2, -4($v1)
/* 86838 800ED388 E4640000 */ swc1 $f4, ($v1)
/* 8683C 800ED38C 24630010 */ addiu $v1, $v1, 0x10
/* 86840 800ED390 A0800000 */ sb $zero, ($a0)
/* 86844 800ED394 1440FFF5 */ bnez $v0, .L800ED36C
/* 86848 800ED398 24840010 */ addiu $a0, $a0, 0x10
/* 8684C 800ED39C 3C018011 */ lui $at, %hi(PlayerMoveHistoryIndex)
/* 86850 800ED3A0 AC20CFB8 */ sw $zero, %lo(PlayerMoveHistoryIndex)($at)
/* 86854 800ED3A4 3C018011 */ lui $at, %hi(D_8010CFBC)
/* 86858 800ED3A8 AC20CFBC */ sw $zero, %lo(D_8010CFBC)($at)
/* 8685C 800ED3AC 14A00005 */ bnez $a1, .L800ED3C4
/* 86860 800ED3B0 00000000 */ nop
/* 86864 800ED3B4 3C018011 */ lui $at, %hi(D_8010CFC8)
/* 86868 800ED3B8 A420CFC8 */ sh $zero, %lo(D_8010CFC8)($at)
/* 8686C 800ED3BC 0803B50B */ j .L800ED42C
/* 86870 800ED3C0 00000000 */ nop
.L800ED3C4:
/* 86874 800ED3C4 3C048011 */ lui $a0, %hi(D_8010CFC4)
/* 86878 800ED3C8 2484CFC4 */ addiu $a0, $a0, %lo(D_8010CFC4)
/* 8687C 800ED3CC 8C830000 */ lw $v1, ($a0)
/* 86880 800ED3D0 14600009 */ bnez $v1, .L800ED3F8
/* 86884 800ED3D4 24020001 */ addiu $v0, $zero, 1
/* 86888 800ED3D8 2402000F */ addiu $v0, $zero, 0xf
/* 8688C 800ED3DC 3C018011 */ lui $at, %hi(D_8010CFC8)
/* 86890 800ED3E0 A422CFC8 */ sh $v0, %lo(D_8010CFC8)($at)
/* 86894 800ED3E4 24020002 */ addiu $v0, $zero, 2
/* 86898 800ED3E8 3C018011 */ lui $at, %hi(D_8010CFCA)
/* 8689C 800ED3EC A422CFCA */ sh $v0, %lo(D_8010CFCA)($at)
/* 868A0 800ED3F0 0803B50D */ j .L800ED434
/* 868A4 800ED3F4 00000000 */ nop
.L800ED3F8:
/* 868A8 800ED3F8 10620003 */ beq $v1, $v0, .L800ED408
/* 868AC 800ED3FC 24020003 */ addiu $v0, $zero, 3
/* 868B0 800ED400 14620006 */ bne $v1, $v0, .L800ED41C
/* 868B4 800ED404 24020002 */ addiu $v0, $zero, 2
.L800ED408:
/* 868B8 800ED408 AC800000 */ sw $zero, ($a0)
/* 868BC 800ED40C 3C018011 */ lui $at, %hi(D_8010CFC8)
/* 868C0 800ED410 A420CFC8 */ sh $zero, %lo(D_8010CFC8)($at)
/* 868C4 800ED414 0803B50B */ j .L800ED42C
/* 868C8 800ED418 00000000 */ nop
.L800ED41C:
/* 868CC 800ED41C 14620005 */ bne $v1, $v0, .L800ED434
/* 868D0 800ED420 24020032 */ addiu $v0, $zero, 0x32
/* 868D4 800ED424 3C018011 */ lui $at, %hi(D_8010CFC8)
/* 868D8 800ED428 A422CFC8 */ sh $v0, %lo(D_8010CFC8)($at)
.L800ED42C:
/* 868DC 800ED42C 3C018011 */ lui $at, %hi(D_8010CFCA)
/* 868E0 800ED430 A420CFCA */ sh $zero, %lo(D_8010CFCA)($at)
.L800ED434:
/* 868E4 800ED434 3C038011 */ lui $v1, %hi(D_8010CFD8)
/* 868E8 800ED438 8C63CFD8 */ lw $v1, %lo(D_8010CFD8)($v1)
/* 868EC 800ED43C 3C014220 */ lui $at, 0x4220
/* 868F0 800ED440 44810000 */ mtc1 $at, $f0
/* 868F4 800ED444 0200202D */ daddu $a0, $s0, $zero
/* 868F8 800ED448 3C018011 */ lui $at, %hi(D_8010CFCE)
/* 868FC 800ED44C A420CFCE */ sh $zero, %lo(D_8010CFCE)($at)
/* 86900 800ED450 3C018011 */ lui $at, %hi(D_8010CFCC)
/* 86904 800ED454 A420CFCC */ sh $zero, %lo(D_8010CFCC)($at)
/* 86908 800ED458 000310C0 */ sll $v0, $v1, 3
/* 8690C 800ED45C 00431021 */ addu $v0, $v0, $v1
/* 86910 800ED460 00021080 */ sll $v0, $v0, 2
/* 86914 800ED464 3C038010 */ lui $v1, %hi(gPartnerAnimations+0x14)
/* 86918 800ED468 00621821 */ addu $v1, $v1, $v0
/* 8691C 800ED46C 8C63835C */ lw $v1, %lo(gPartnerAnimations+0x14)($v1)
/* 86920 800ED470 24020010 */ addiu $v0, $zero, 0x10
/* 86924 800ED474 3C018010 */ lui $at, %hi(wPartnerMoveTime)
/* 86928 800ED478 AC22802C */ sw $v0, %lo(wPartnerMoveTime)($at)
/* 8692C 800ED47C 3C018011 */ lui $at, %hi(wPartnerTetherDistance)
/* 86930 800ED480 E420CFC0 */ swc1 $f0, %lo(wPartnerTetherDistance)($at)
/* 86934 800ED484 0C03A96E */ jal func_800EA5B8
/* 86938 800ED488 AE030028 */ sw $v1, 0x28($s0)
/* 8693C 800ED48C 8E020000 */ lw $v0, ($s0)
/* 86940 800ED490 3C030001 */ lui $v1, 1
/* 86944 800ED494 AE030080 */ sw $v1, 0x80($s0)
/* 86948 800ED498 2403FDFF */ addiu $v1, $zero, -0x201
/* 8694C 800ED49C 34420100 */ ori $v0, $v0, 0x100
/* 86950 800ED4A0 00431024 */ and $v0, $v0, $v1
/* 86954 800ED4A4 AE020000 */ sw $v0, ($s0)
/* 86958 800ED4A8 8FBF0014 */ lw $ra, 0x14($sp)
/* 8695C 800ED4AC 8FB00010 */ lw $s0, 0x10($sp)
/* 86960 800ED4B0 03E00008 */ jr $ra
/* 86964 800ED4B4 27BD0018 */ addiu $sp, $sp, 0x18

View File

@ -35,8 +35,8 @@ glabel partner_flying_follow_player
/* 86F04 800EDA54 00400008 */ jr $v0
/* 86F08 800EDA58 00000000 */ nop
.L800EDA5C_86F0C:
/* 86F0C 800EDA5C 3C038011 */ lui $v1, %hi(PlayerMoveHistory)
/* 86F10 800EDA60 2463CD38 */ addiu $v1, $v1, %lo(PlayerMoveHistory)
/* 86F0C 800EDA5C 3C038011 */ lui $v1, %hi(gPlayerMoveHistory)
/* 86F10 800EDA60 2463CD38 */ addiu $v1, $v1, %lo(gPlayerMoveHistory)
/* 86F14 800EDA64 44806000 */ mtc1 $zero, $f12
/* 86F18 800EDA68 3C028011 */ lui $v0, %hi(D_8010CFBC)
/* 86F1C 800EDA6C 8C42CFBC */ lw $v0, %lo(D_8010CFBC)($v0)
@ -56,12 +56,12 @@ glabel partner_flying_follow_player
/* 86F54 800EDAA4 E7A20020 */ swc1 $f2, 0x20($sp)
/* 86F58 800EDAA8 E7A40024 */ swc1 $f4, 0x24($sp)
/* 86F5C 800EDAAC E7A00028 */ swc1 $f0, 0x28($sp)
/* 86F60 800EDAB0 3C018010 */ lui $at, %hi(SavedPartnerPosX)
/* 86F64 800EDAB4 E422833C */ swc1 $f2, %lo(SavedPartnerPosX)($at)
/* 86F68 800EDAB8 3C018010 */ lui $at, %hi(SavedPartnerPosY)
/* 86F6C 800EDABC E4248340 */ swc1 $f4, %lo(SavedPartnerPosY)($at)
/* 86F70 800EDAC0 3C018010 */ lui $at, %hi(SavedPartnerPosZ)
/* 86F74 800EDAC4 E4208344 */ swc1 $f0, %lo(SavedPartnerPosZ)($at)
/* 86F60 800EDAB0 3C018010 */ lui $at, %hi(wSavedPartnerPosX)
/* 86F64 800EDAB4 E422833C */ swc1 $f2, %lo(wSavedPartnerPosX)($at)
/* 86F68 800EDAB8 3C018010 */ lui $at, %hi(wSavedPartnerPosY)
/* 86F6C 800EDABC E4248340 */ swc1 $f4, %lo(wSavedPartnerPosY)($at)
/* 86F70 800EDAC0 3C018010 */ lui $at, %hi(wSavedPartnerPosZ)
/* 86F74 800EDAC4 E4208344 */ swc1 $f0, %lo(wSavedPartnerPosZ)($at)
/* 86F78 800EDAC8 45020008 */ bc1fl .L800EDAEC
/* 86F7C 800EDACC 46083000 */ add.s $f0, $f6, $f8
/* 86F80 800EDAD0 460A4081 */ sub.s $f2, $f8, $f10
@ -172,8 +172,8 @@ glabel partner_flying_follow_player
.L800EDC58:
/* 87108 800EDC58 3C128011 */ lui $s2, %hi(D_8010CFBC)
/* 8710C 800EDC5C 2652CFBC */ addiu $s2, $s2, %lo(D_8010CFBC)
/* 87110 800EDC60 3C148011 */ lui $s4, %hi(PlayerMoveHistory)
/* 87114 800EDC64 2694CD38 */ addiu $s4, $s4, %lo(PlayerMoveHistory)
/* 87110 800EDC60 3C148011 */ lui $s4, %hi(gPlayerMoveHistory)
/* 87114 800EDC64 2694CD38 */ addiu $s4, $s4, %lo(gPlayerMoveHistory)
.L800EDC68:
/* 87118 800EDC68 C7AC0020 */ lwc1 $f12, 0x20($sp)
/* 8711C 800EDC6C C7AE0028 */ lwc1 $f14, 0x28($sp)
@ -234,8 +234,8 @@ glabel partner_flying_follow_player
/* 871F4 800EDD44 46200020 */ cvt.s.d $f0, $f0
.L800EDD48:
/* 871F8 800EDD48 8E430000 */ lw $v1, ($s2)
/* 871FC 800EDD4C 3C028011 */ lui $v0, %hi(PlayerMoveHistoryIndex)
/* 87200 800EDD50 8C42CFB8 */ lw $v0, %lo(PlayerMoveHistoryIndex)($v0)
/* 871FC 800EDD4C 3C028011 */ lui $v0, %hi(gPlayerMoveHistoryIndex)
/* 87200 800EDD50 8C42CFB8 */ lw $v0, %lo(gPlayerMoveHistoryIndex)($v0)
/* 87204 800EDD54 1062FF92 */ beq $v1, $v0, .L800EDBA0
/* 87208 800EDD58 00000000 */ nop
/* 8720C 800EDD5C C62C0038 */ lwc1 $f12, 0x38($s1)
@ -280,8 +280,8 @@ glabel partner_flying_follow_player
/* 8729C 800EDDEC 3C048011 */ lui $a0, %hi(D_8010CFBC)
/* 872A0 800EDDF0 2484CFBC */ addiu $a0, $a0, %lo(D_8010CFBC)
/* 872A4 800EDDF4 8C830000 */ lw $v1, ($a0)
/* 872A8 800EDDF8 3C028011 */ lui $v0, %hi(PlayerMoveHistoryIndex)
/* 872AC 800EDDFC 8C42CFB8 */ lw $v0, %lo(PlayerMoveHistoryIndex)($v0)
/* 872A8 800EDDF8 3C028011 */ lui $v0, %hi(gPlayerMoveHistoryIndex)
/* 872AC 800EDDFC 8C42CFB8 */ lw $v0, %lo(gPlayerMoveHistoryIndex)($v0)
/* 872B0 800EDE00 106202D9 */ beq $v1, $v0, .L800EE968_87E18
/* 872B4 800EDE04 24620001 */ addiu $v0, $v1, 1
/* 872B8 800EDE08 AC820000 */ sw $v0, ($a0)
@ -289,8 +289,8 @@ glabel partner_flying_follow_player
/* 872C0 800EDE10 50400001 */ beql $v0, $zero, .L800EDE18
/* 872C4 800EDE14 AC800000 */ sw $zero, ($a0)
.L800EDE18:
/* 872C8 800EDE18 3C038011 */ lui $v1, %hi(PlayerMoveHistory)
/* 872CC 800EDE1C 2463CD38 */ addiu $v1, $v1, %lo(PlayerMoveHistory)
/* 872C8 800EDE18 3C038011 */ lui $v1, %hi(gPlayerMoveHistory)
/* 872CC 800EDE1C 2463CD38 */ addiu $v1, $v1, %lo(gPlayerMoveHistory)
/* 872D0 800EDE20 8C820000 */ lw $v0, ($a0)
/* 872D4 800EDE24 3C013FA6 */ lui $at, 0x3fa6
/* 872D8 800EDE28 34216666 */ ori $at, $at, 0x6666
@ -521,8 +521,8 @@ glabel partner_flying_follow_player
/* 87634 800EE184 0803BA5A */ j .L800EE968_87E18
/* 87638 800EE188 A6020000 */ sh $v0, ($s0)
.L800EE18C_8763C:
/* 8763C 800EE18C 3C038011 */ lui $v1, %hi(PlayerMoveHistory)
/* 87640 800EE190 2463CD38 */ addiu $v1, $v1, %lo(PlayerMoveHistory)
/* 8763C 800EE18C 3C038011 */ lui $v1, %hi(gPlayerMoveHistory)
/* 87640 800EE190 2463CD38 */ addiu $v1, $v1, %lo(gPlayerMoveHistory)
/* 87644 800EE194 C62C0038 */ lwc1 $f12, 0x38($s1)
/* 87648 800EE198 C62E0040 */ lwc1 $f14, 0x40($s1)
/* 8764C 800EE19C 8E660028 */ lw $a2, 0x28($s3)
@ -733,8 +733,8 @@ glabel partner_flying_follow_player
/* 87960 800EE4B0 4481C000 */ mtc1 $at, $f24
/* 87964 800EE4B4 3C128011 */ lui $s2, %hi(D_8010CFBC)
/* 87968 800EE4B8 2652CFBC */ addiu $s2, $s2, %lo(D_8010CFBC)
/* 8796C 800EE4BC 3C148011 */ lui $s4, %hi(PlayerMoveHistory)
/* 87970 800EE4C0 2694CD38 */ addiu $s4, $s4, %lo(PlayerMoveHistory)
/* 8796C 800EE4BC 3C148011 */ lui $s4, %hi(gPlayerMoveHistory)
/* 87970 800EE4C0 2694CD38 */ addiu $s4, $s4, %lo(gPlayerMoveHistory)
.L800EE4C4:
/* 87974 800EE4C4 82020000 */ lb $v0, ($s0)
/* 87978 800EE4C8 14400024 */ bnez $v0, .L800EE55C
@ -760,8 +760,8 @@ glabel partner_flying_follow_player
/* 879C8 800EE518 45010010 */ bc1t .L800EE55C
/* 879CC 800EE51C 00000000 */ nop
/* 879D0 800EE520 8E430000 */ lw $v1, ($s2)
/* 879D4 800EE524 3C028011 */ lui $v0, %hi(PlayerMoveHistoryIndex)
/* 879D8 800EE528 8C42CFB8 */ lw $v0, %lo(PlayerMoveHistoryIndex)($v0)
/* 879D4 800EE524 3C028011 */ lui $v0, %hi(gPlayerMoveHistoryIndex)
/* 879D8 800EE528 8C42CFB8 */ lw $v0, %lo(gPlayerMoveHistoryIndex)($v0)
/* 879DC 800EE52C 1062000B */ beq $v1, $v0, .L800EE55C
/* 879E0 800EE530 24620001 */ addiu $v0, $v1, 1
/* 879E4 800EE534 AE420000 */ sw $v0, ($s2)

View File

@ -268,12 +268,12 @@ glabel partner_flying_update_motion
/* 86E60 800ED9B0 C602003C */ lwc1 $f2, 0x3c($s0)
/* 86E64 800ED9B4 C6040040 */ lwc1 $f4, 0x40($s0)
.L800ED9B8:
/* 86E68 800ED9B8 3C018010 */ lui $at, %hi(SavedPartnerPosX)
/* 86E6C 800ED9BC E420833C */ swc1 $f0, %lo(SavedPartnerPosX)($at)
/* 86E70 800ED9C0 3C018010 */ lui $at, %hi(SavedPartnerPosY)
/* 86E74 800ED9C4 E4228340 */ swc1 $f2, %lo(SavedPartnerPosY)($at)
/* 86E78 800ED9C8 3C018010 */ lui $at, %hi(SavedPartnerPosZ)
/* 86E7C 800ED9CC E4248344 */ swc1 $f4, %lo(SavedPartnerPosZ)($at)
/* 86E68 800ED9B8 3C018010 */ lui $at, %hi(wSavedPartnerPosX)
/* 86E6C 800ED9BC E420833C */ swc1 $f0, %lo(wSavedPartnerPosX)($at)
/* 86E70 800ED9C0 3C018010 */ lui $at, %hi(wSavedPartnerPosY)
/* 86E74 800ED9C4 E4228340 */ swc1 $f2, %lo(wSavedPartnerPosY)($at)
/* 86E78 800ED9C8 3C018010 */ lui $at, %hi(wSavedPartnerPosZ)
/* 86E7C 800ED9CC E4248344 */ swc1 $f4, %lo(wSavedPartnerPosZ)($at)
/* 86E80 800ED9D0 8FBF004C */ lw $ra, 0x4c($sp)
/* 86E84 800ED9D4 8FB60048 */ lw $s6, 0x48($sp)
/* 86E88 800ED9D8 8FB50044 */ lw $s5, 0x44($sp)

View File

@ -1,111 +0,0 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
glabel partner_walking_enable
/* 84D58 800EB8A8 27BDFFE8 */ addiu $sp, $sp, -0x18
/* 84D5C 800EB8AC AFB00010 */ sw $s0, 0x10($sp)
/* 84D60 800EB8B0 0080802D */ daddu $s0, $a0, $zero
/* 84D64 800EB8B4 3C078011 */ lui $a3, %hi(gPlayerStatus)
/* 84D68 800EB8B8 24E7EFC8 */ addiu $a3, $a3, %lo(gPlayerStatus)
/* 84D6C 800EB8BC 3C048011 */ lui $a0, %hi(PlayerMoveHistory)
/* 84D70 800EB8C0 2484CD38 */ addiu $a0, $a0, %lo(PlayerMoveHistory)
/* 84D74 800EB8C4 0000302D */ daddu $a2, $zero, $zero
/* 84D78 800EB8C8 3C018010 */ lui $at, %hi(SavedPartnerPosX)
/* 84D7C 800EB8CC C420833C */ lwc1 $f0, %lo(SavedPartnerPosX)($at)
/* 84D80 800EB8D0 3C018010 */ lui $at, %hi(SavedPartnerPosY)
/* 84D84 800EB8D4 C4228340 */ lwc1 $f2, %lo(SavedPartnerPosY)($at)
/* 84D88 800EB8D8 3C018010 */ lui $at, %hi(SavedPartnerPosZ)
/* 84D8C 800EB8DC C4248344 */ lwc1 $f4, %lo(SavedPartnerPosZ)($at)
/* 84D90 800EB8E0 2483000C */ addiu $v1, $a0, 0xc
/* 84D94 800EB8E4 AFBF0014 */ sw $ra, 0x14($sp)
/* 84D98 800EB8E8 E6000038 */ swc1 $f0, 0x38($s0)
/* 84D9C 800EB8EC E602003C */ swc1 $f2, 0x3c($s0)
/* 84DA0 800EB8F0 E6040040 */ swc1 $f4, 0x40($s0)
.L800EB8F4:
/* 84DA4 800EB8F4 C4E00028 */ lwc1 $f0, 0x28($a3)
/* 84DA8 800EB8F8 E460FFF8 */ swc1 $f0, -8($v1)
/* 84DAC 800EB8FC C4E0002C */ lwc1 $f0, 0x2c($a3)
/* 84DB0 800EB900 24C60001 */ addiu $a2, $a2, 1
/* 84DB4 800EB904 E460FFFC */ swc1 $f0, -4($v1)
/* 84DB8 800EB908 C4E00030 */ lwc1 $f0, 0x30($a3)
/* 84DBC 800EB90C 28C20028 */ slti $v0, $a2, 0x28
/* 84DC0 800EB910 E4600000 */ swc1 $f0, ($v1)
/* 84DC4 800EB914 24630010 */ addiu $v1, $v1, 0x10
/* 84DC8 800EB918 A0800000 */ sb $zero, ($a0)
/* 84DCC 800EB91C 1440FFF5 */ bnez $v0, .L800EB8F4
/* 84DD0 800EB920 24840010 */ addiu $a0, $a0, 0x10
/* 84DD4 800EB924 3C038011 */ lui $v1, %hi(D_8010CFCA)
/* 84DD8 800EB928 2463CFCA */ addiu $v1, $v1, %lo(D_8010CFCA)
/* 84DDC 800EB92C 3C018011 */ lui $at, %hi(PlayerMoveHistoryIndex)
/* 84DE0 800EB930 AC20CFB8 */ sw $zero, %lo(PlayerMoveHistoryIndex)($at)
/* 84DE4 800EB934 3C018011 */ lui $at, %hi(D_8010CFBC)
/* 84DE8 800EB938 AC20CFBC */ sw $zero, %lo(D_8010CFBC)($at)
/* 84DEC 800EB93C 10A00003 */ beqz $a1, .L800EB94C
/* 84DF0 800EB940 24020002 */ addiu $v0, $zero, 2
/* 84DF4 800EB944 0803AE54 */ j .L800EB950
/* 84DF8 800EB948 A4620000 */ sh $v0, ($v1)
.L800EB94C:
/* 84DFC 800EB94C A4600000 */ sh $zero, ($v1)
.L800EB950:
/* 84E00 800EB950 3C048011 */ lui $a0, %hi(D_8010CFC8)
/* 84E04 800EB954 2484CFC8 */ addiu $a0, $a0, %lo(D_8010CFC8)
/* 84E08 800EB958 3C058011 */ lui $a1, %hi(D_8010CFC4)
/* 84E0C 800EB95C 24A5CFC4 */ addiu $a1, $a1, %lo(D_8010CFC4)
/* 84E10 800EB960 A4800000 */ sh $zero, ($a0)
/* 84E14 800EB964 8CA30000 */ lw $v1, ($a1)
/* 84E18 800EB968 24020001 */ addiu $v0, $zero, 1
/* 84E1C 800EB96C 10620003 */ beq $v1, $v0, .L800EB97C
/* 84E20 800EB970 24020003 */ addiu $v0, $zero, 3
/* 84E24 800EB974 14620006 */ bne $v1, $v0, .L800EB990
/* 84E28 800EB978 24020002 */ addiu $v0, $zero, 2
.L800EB97C:
/* 84E2C 800EB97C ACA00000 */ sw $zero, ($a1)
/* 84E30 800EB980 3C018011 */ lui $at, %hi(D_8010CFCA)
/* 84E34 800EB984 A420CFCA */ sh $zero, %lo(D_8010CFCA)($at)
/* 84E38 800EB988 0803AE69 */ j .L800EB9A4
/* 84E3C 800EB98C A4800000 */ sh $zero, ($a0)
.L800EB990:
/* 84E40 800EB990 14620004 */ bne $v1, $v0, .L800EB9A4
/* 84E44 800EB994 24020032 */ addiu $v0, $zero, 0x32
/* 84E48 800EB998 3C018011 */ lui $at, %hi(D_8010CFCA)
/* 84E4C 800EB99C A420CFCA */ sh $zero, %lo(D_8010CFCA)($at)
/* 84E50 800EB9A0 A4820000 */ sh $v0, ($a0)
.L800EB9A4:
/* 84E54 800EB9A4 3C038011 */ lui $v1, %hi(D_8010CFD8)
/* 84E58 800EB9A8 8C63CFD8 */ lw $v1, %lo(D_8010CFD8)($v1)
/* 84E5C 800EB9AC 3C014220 */ lui $at, 0x4220
/* 84E60 800EB9B0 44810000 */ mtc1 $at, $f0
/* 84E64 800EB9B4 0200202D */ daddu $a0, $s0, $zero
/* 84E68 800EB9B8 3C018011 */ lui $at, %hi(D_8010CFCE)
/* 84E6C 800EB9BC A420CFCE */ sh $zero, %lo(D_8010CFCE)($at)
/* 84E70 800EB9C0 3C018011 */ lui $at, %hi(D_8010CFCC)
/* 84E74 800EB9C4 A420CFCC */ sh $zero, %lo(D_8010CFCC)($at)
/* 84E78 800EB9C8 000310C0 */ sll $v0, $v1, 3
/* 84E7C 800EB9CC 00431021 */ addu $v0, $v0, $v1
/* 84E80 800EB9D0 00021080 */ sll $v0, $v0, 2
/* 84E84 800EB9D4 3C038010 */ lui $v1, %hi(gPartnerAnimations+0x14)
/* 84E88 800EB9D8 00621821 */ addu $v1, $v1, $v0
/* 84E8C 800EB9DC 8C63835C */ lw $v1, %lo(gPartnerAnimations+0x14)($v1)
/* 84E90 800EB9E0 24020010 */ addiu $v0, $zero, 0x10
/* 84E94 800EB9E4 3C018010 */ lui $at, %hi(wPartnerMoveTime)
/* 84E98 800EB9E8 AC22802C */ sw $v0, %lo(wPartnerMoveTime)($at)
/* 84E9C 800EB9EC 3C018011 */ lui $at, %hi(wPartnerTetherDistance)
/* 84EA0 800EB9F0 E420CFC0 */ swc1 $f0, %lo(wPartnerTetherDistance)($at)
/* 84EA4 800EB9F4 0C03A96E */ jal func_800EA5B8
/* 84EA8 800EB9F8 AE030028 */ sw $v1, 0x28($s0)
/* 84EAC 800EB9FC 3C030040 */ lui $v1, 0x40
/* 84EB0 800EBA00 3C020001 */ lui $v0, 1
/* 84EB4 800EBA04 AE020080 */ sw $v0, 0x80($s0)
/* 84EB8 800EBA08 8E020000 */ lw $v0, ($s0)
/* 84EBC 800EBA0C 3C013FE6 */ lui $at, 0x3fe6
/* 84EC0 800EBA10 34216666 */ ori $at, $at, 0x6666
/* 84EC4 800EBA14 44810000 */ mtc1 $at, $f0
/* 84EC8 800EBA18 34630300 */ ori $v1, $v1, 0x300
/* 84ECC 800EBA1C AE00001C */ sw $zero, 0x1c($s0)
/* 84ED0 800EBA20 00431025 */ or $v0, $v0, $v1
/* 84ED4 800EBA24 AE020000 */ sw $v0, ($s0)
/* 84ED8 800EBA28 E6000014 */ swc1 $f0, 0x14($s0)
/* 84EDC 800EBA2C 8FBF0014 */ lw $ra, 0x14($sp)
/* 84EE0 800EBA30 8FB00010 */ lw $s0, 0x10($sp)
/* 84EE4 800EBA34 03E00008 */ jr $ra
/* 84EE8 800EBA38 27BD0018 */ addiu $sp, $sp, 0x18

View File

@ -52,8 +52,8 @@ glabel partner_walking_follow_player
/* 851C0 800EBD10 0803B005 */ j .L800EC014
/* 851C4 800EBD14 AE230028 */ sw $v1, 0x28($s1)
.L800EBD18_851C8:
/* 851C8 800EBD18 3C038011 */ lui $v1, %hi(PlayerMoveHistory)
/* 851CC 800EBD1C 2463CD38 */ addiu $v1, $v1, %lo(PlayerMoveHistory)
/* 851C8 800EBD18 3C038011 */ lui $v1, %hi(gPlayerMoveHistory)
/* 851CC 800EBD1C 2463CD38 */ addiu $v1, $v1, %lo(gPlayerMoveHistory)
/* 851D0 800EBD20 C62C0038 */ lwc1 $f12, 0x38($s1)
/* 851D4 800EBD24 C62E0040 */ lwc1 $f14, 0x40($s1)
/* 851D8 800EBD28 3C028011 */ lui $v0, %hi(D_8010CFBC)
@ -129,8 +129,8 @@ glabel partner_walking_follow_player
.L800EBE38:
/* 852E8 800EBE38 3C128011 */ lui $s2, %hi(D_8010CFBC)
/* 852EC 800EBE3C 2652CFBC */ addiu $s2, $s2, %lo(D_8010CFBC)
/* 852F0 800EBE40 3C148011 */ lui $s4, %hi(PlayerMoveHistory)
/* 852F4 800EBE44 2694CD38 */ addiu $s4, $s4, %lo(PlayerMoveHistory)
/* 852F0 800EBE40 3C148011 */ lui $s4, %hi(gPlayerMoveHistory)
/* 852F4 800EBE44 2694CD38 */ addiu $s4, $s4, %lo(gPlayerMoveHistory)
.L800EBE48:
/* 852F8 800EBE48 C7AC0028 */ lwc1 $f12, 0x28($sp)
/* 852FC 800EBE4C C7AE0030 */ lwc1 $f14, 0x30($sp)
@ -211,8 +211,8 @@ glabel partner_walking_follow_player
/* 85420 800EBF70 E620000C */ swc1 $f0, 0xc($s1)
.L800EBF74:
/* 85424 800EBF74 8E430000 */ lw $v1, ($s2)
/* 85428 800EBF78 3C028011 */ lui $v0, %hi(PlayerMoveHistoryIndex)
/* 8542C 800EBF7C 8C42CFB8 */ lw $v0, %lo(PlayerMoveHistoryIndex)($v0)
/* 85428 800EBF78 3C028011 */ lui $v0, %hi(gPlayerMoveHistoryIndex)
/* 8542C 800EBF7C 8C42CFB8 */ lw $v0, %lo(gPlayerMoveHistoryIndex)($v0)
/* 85430 800EBF80 1062FF55 */ beq $v1, $v0, .L800EBCD8
/* 85434 800EBF84 24620001 */ addiu $v0, $v1, 1
/* 85438 800EBF88 AE420000 */ sw $v0, ($s2)
@ -309,8 +309,8 @@ glabel partner_walking_follow_player
/* 8558C 800EC0DC AC600000 */ sw $zero, ($v1)
.L800EC0E0:
/* 85590 800EC0E0 8C620000 */ lw $v0, ($v1)
/* 85594 800EC0E4 3C038011 */ lui $v1, %hi(PlayerMoveHistory)
/* 85598 800EC0E8 2463CD38 */ addiu $v1, $v1, %lo(PlayerMoveHistory)
/* 85594 800EC0E4 3C038011 */ lui $v1, %hi(gPlayerMoveHistory)
/* 85598 800EC0E8 2463CD38 */ addiu $v1, $v1, %lo(gPlayerMoveHistory)
/* 8559C 800EC0EC C62C0038 */ lwc1 $f12, 0x38($s1)
/* 855A0 800EC0F0 C62E0040 */ lwc1 $f14, 0x40($s1)
/* 855A4 800EC0F4 00021100 */ sll $v0, $v0, 4
@ -340,8 +340,8 @@ glabel partner_walking_follow_player
/* 85600 800EC150 3C058011 */ lui $a1, %hi(D_8010CFBC)
/* 85604 800EC154 24A5CFBC */ addiu $a1, $a1, %lo(D_8010CFBC)
/* 85608 800EC158 8CA40000 */ lw $a0, ($a1)
/* 8560C 800EC15C 3C038011 */ lui $v1, %hi(PlayerMoveHistoryIndex)
/* 85610 800EC160 8C63CFB8 */ lw $v1, %lo(PlayerMoveHistoryIndex)($v1)
/* 8560C 800EC15C 3C038011 */ lui $v1, %hi(gPlayerMoveHistoryIndex)
/* 85610 800EC160 8C63CFB8 */ lw $v1, %lo(gPlayerMoveHistoryIndex)($v1)
/* 85614 800EC164 14830016 */ bne $a0, $v1, .L800EC1C0
/* 85618 800EC168 0040902D */ daddu $s2, $v0, $zero
/* 8561C 800EC16C 2642FFFE */ addiu $v0, $s2, -2
@ -373,8 +373,8 @@ glabel partner_walking_follow_player
/* 85680 800EC1D0 ACA00000 */ sw $zero, ($a1)
.L800EC1D4:
/* 85684 800EC1D4 8CA20000 */ lw $v0, ($a1)
/* 85688 800EC1D8 3C038011 */ lui $v1, %hi(PlayerMoveHistory)
/* 8568C 800EC1DC 2463CD38 */ addiu $v1, $v1, %lo(PlayerMoveHistory)
/* 85688 800EC1D8 3C038011 */ lui $v1, %hi(gPlayerMoveHistory)
/* 8568C 800EC1DC 2463CD38 */ addiu $v1, $v1, %lo(gPlayerMoveHistory)
/* 85690 800EC1E0 00021100 */ sll $v0, $v0, 4
/* 85694 800EC1E4 00438021 */ addu $s0, $v0, $v1
/* 85698 800EC1E8 C6000004 */ lwc1 $f0, 4($s0)
@ -716,8 +716,8 @@ glabel partner_walking_follow_player
/* 85BA4 800EC6F4 0803B4B9 */ j .L800ED2E4_86794
/* 85BA8 800EC6F8 00000000 */ nop
.L800EC6FC_85BAC:
/* 85BAC 800EC6FC 3C038011 */ lui $v1, %hi(PlayerMoveHistory)
/* 85BB0 800EC700 2463CD38 */ addiu $v1, $v1, %lo(PlayerMoveHistory)
/* 85BAC 800EC6FC 3C038011 */ lui $v1, %hi(gPlayerMoveHistory)
/* 85BB0 800EC700 2463CD38 */ addiu $v1, $v1, %lo(gPlayerMoveHistory)
/* 85BB4 800EC704 C62C0038 */ lwc1 $f12, 0x38($s1)
/* 85BB8 800EC708 C62E0040 */ lwc1 $f14, 0x40($s1)
/* 85BBC 800EC70C 8E660028 */ lw $a2, 0x28($s3)
@ -1007,8 +1007,8 @@ glabel partner_walking_follow_player
/* 85FF8 800ECB48 4481B000 */ mtc1 $at, $f22
/* 85FFC 800ECB4C 3C128011 */ lui $s2, %hi(D_8010CFBC)
/* 86000 800ECB50 2652CFBC */ addiu $s2, $s2, %lo(D_8010CFBC)
/* 86004 800ECB54 3C148011 */ lui $s4, %hi(PlayerMoveHistory)
/* 86008 800ECB58 2694CD38 */ addiu $s4, $s4, %lo(PlayerMoveHistory)
/* 86004 800ECB54 3C148011 */ lui $s4, %hi(gPlayerMoveHistory)
/* 86008 800ECB58 2694CD38 */ addiu $s4, $s4, %lo(gPlayerMoveHistory)
.L800ECB5C:
/* 8600C 800ECB5C 82020000 */ lb $v0, ($s0)
/* 86010 800ECB60 14400028 */ bnez $v0, .L800ECC04
@ -1033,8 +1033,8 @@ glabel partner_walking_follow_player
/* 8605C 800ECBAC 45010012 */ bc1t .L800ECBF8
/* 86060 800ECBB0 00000000 */ nop
/* 86064 800ECBB4 8E430000 */ lw $v1, ($s2)
/* 86068 800ECBB8 3C028011 */ lui $v0, %hi(PlayerMoveHistoryIndex)
/* 8606C 800ECBBC 8C42CFB8 */ lw $v0, %lo(PlayerMoveHistoryIndex)($v0)
/* 86068 800ECBB8 3C028011 */ lui $v0, %hi(gPlayerMoveHistoryIndex)
/* 8606C 800ECBBC 8C42CFB8 */ lw $v0, %lo(gPlayerMoveHistoryIndex)($v0)
/* 86070 800ECBC0 1062000D */ beq $v1, $v0, .L800ECBF8
/* 86074 800ECBC4 24620001 */ addiu $v0, $v1, 1
/* 86078 800ECBC8 AE420000 */ sw $v0, ($s2)
@ -1059,8 +1059,8 @@ glabel partner_walking_follow_player
/* 860B8 800ECC08 4481B000 */ mtc1 $at, $f22
/* 860BC 800ECC0C 3C128011 */ lui $s2, %hi(D_8010CFBC)
/* 860C0 800ECC10 2652CFBC */ addiu $s2, $s2, %lo(D_8010CFBC)
/* 860C4 800ECC14 3C148011 */ lui $s4, %hi(PlayerMoveHistory)
/* 860C8 800ECC18 2694CD38 */ addiu $s4, $s4, %lo(PlayerMoveHistory)
/* 860C4 800ECC14 3C148011 */ lui $s4, %hi(gPlayerMoveHistory)
/* 860C8 800ECC18 2694CD38 */ addiu $s4, $s4, %lo(gPlayerMoveHistory)
.L800ECC1C:
/* 860CC 800ECC1C 82020000 */ lb $v0, ($s0)
/* 860D0 800ECC20 104001AE */ beqz $v0, .L800ED2DC
@ -1085,8 +1085,8 @@ glabel partner_walking_follow_player
/* 8611C 800ECC6C 4501019B */ bc1t .L800ED2DC
/* 86120 800ECC70 24020001 */ addiu $v0, $zero, 1
/* 86124 800ECC74 8E430000 */ lw $v1, ($s2)
/* 86128 800ECC78 3C028011 */ lui $v0, %hi(PlayerMoveHistoryIndex)
/* 8612C 800ECC7C 8C42CFB8 */ lw $v0, %lo(PlayerMoveHistoryIndex)($v0)
/* 86128 800ECC78 3C028011 */ lui $v0, %hi(gPlayerMoveHistoryIndex)
/* 8612C 800ECC7C 8C42CFB8 */ lw $v0, %lo(gPlayerMoveHistoryIndex)($v0)
/* 86130 800ECC80 1062000D */ beq $v1, $v0, .L800ECCB8
/* 86134 800ECC84 24620001 */ addiu $v0, $v1, 1
/* 86138 800ECC88 AE420000 */ sw $v0, ($s2)

View File

@ -770,7 +770,8 @@ segments:
subsegments:
- [0x102610, c, entity/SaveBlock]
- [0x102C80, c, entity/Switch]
- [0x104730, c, 104730]
- [0x103CD0, c, entity/103CD0]
- [0x104730, c, entity/104730]
- [0x104940, c, entity/Block]
- [0x105700, c, entity/ItemBlock]
- [0x105F90, c, entity/HeartBlock]
@ -786,7 +787,7 @@ segments:
- [0x10AAF0, data]
#- [0x10AB70, i4, shadow/10AB70, 32, 32]
#- [0x10AD70, i4, shadow/10AD70, 32, 32]
- [0x10AF70, .data, 104730]
- [0x10AF70, .data, entity/104730]
- [0x10B610, data]
- [0x10C880]
- type: code

View File

@ -2240,9 +2240,9 @@ wPartnerMoveSpeed = 0x800F8030; // type:data rom:0x914E0
D_800F8034 = 0x800F8034; // type:data rom:0x914E4
D_800F803A = 0x800F803A; // type:data rom:0x914EA
wPartners = 0x800F803C; // type:data rom:0x914EC size:0x300
SavedPartnerPosX = 0x800F833C; // type:data rom:0x917EC
SavedPartnerPosY = 0x800F8340; // type:data rom:0x917F0
SavedPartnerPosZ = 0x800F8344; // type:data rom:0x917F4
wSavedPartnerPosX = 0x800F833C; // type:data rom:0x917EC
wSavedPartnerPosY = 0x800F8340; // type:data rom:0x917F0
wSavedPartnerPosZ = 0x800F8344; // type:data rom:0x917F4
gPartnerAnimations = 0x800F8348; // rom:0x917F8 size:0x1B0
D_800B6590 = 0x800B6590; // type:data rom:0x91990
D_800F84F8 = 0x800F84F8; // type:data rom:0x919A8
@ -2292,9 +2292,6 @@ D_8010C95C = 0x8010C95C; // type:data rom:0xA5E0C
D_8010C960 = 0x8010C960; // type:data rom:0xA5E10
D_8010C964 = 0x8010C964; // type:data rom:0xA5E14
D_8010C968 = 0x8010C968; // type:data rom:0xA5E18
D_8010C969 = 0x8010C969; // type:data rom:0xA5E19
D_8010C96A = 0x8010C96A; // type:data rom:0xA5E1A
D_8010C96B = 0x8010C96B; // type:data rom:0xA5E1B
D_8010C96C = 0x8010C96C; // type:data rom:0xA5E1C
D_8010C970 = 0x8010C970; // type:data rom:0xA5E20
D_8010C974 = 0x8010C974; // type:data rom:0xA5E24
@ -19746,7 +19743,6 @@ D_8010C95C = 0x8010C95C; // type:data
D_8010C960 = 0x8010C960; // type:data
D_8010C964 = 0x8010C964; // type:data
D_8010C968 = 0x8010C968; // type:data
D_8010C96B = 0x8010C96B; // type:data
D_8010C96C = 0x8010C96C; // type:data
D_8010C970 = 0x8010C970; // type:data
D_8010C974 = 0x8010C974; // type:data
@ -19771,8 +19767,8 @@ D_8010CD12 = 0x8010CD12; // type:data
D_8010CD20 = 0x8010CD20; // type:data
D_8010CD30 = 0x8010CD30; // type:data
D_8010CD34 = 0x8010CD34; // type:data
PlayerMoveHistory = 0x8010CD38; // type:data
PlayerMoveHistoryIndex = 0x8010CFB8; // type:data
gPlayerMoveHistory = 0x8010CD38; // type:data
gPlayerMoveHistoryIndex = 0x8010CFB8; // type:data
D_8010CFBC = 0x8010CFBC; // type:data
wPartnerTetherDistance = 0x8010CFC0; // type:data
D_8010CFC4 = 0x8010CFC4; // type:data