mirror of
https://github.com/izzy2lost/2ship2harkinian-Android.git
synced 2026-06-19 01:20:08 -07:00
Macros for weekEventReg and eventInf (#984)
* make macros * script * Use the script on the whole codebase * fix script * Rename GET to CHECk * More replacements * Update weekeventflags on schedule scripts * eventinf defines * eventinfconvert * run the scripts on the codebase * format * RACE_FLAGS * format * remove redundant parenthesis * format * add macros to permuter_settings * comments on WEEKEVENTREG_ * format * CHECK_WEEKEVENTREG_ALT * don't automatically generate the macros on the script to allow naming them * format D_801C66D0 a bit * add TODOs * Update src/overlays/actors/ovl_Boss_03/z_boss_03.c Co-authored-by: Derek Hensley <hensley.derek58@gmail.com> * Update src/overlays/actors/ovl_En_Baisen/z_en_baisen.c Co-authored-by: Derek Hensley <hensley.derek58@gmail.com> * Update src/overlays/actors/ovl_Boss_06/z_boss_06.c Co-authored-by: Derek Hensley <hensley.derek58@gmail.com> * Update src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.c Co-authored-by: Derek Hensley <hensley.derek58@gmail.com> * Update src/overlays/actors/ovl_En_Raf/z_en_raf.c Co-authored-by: Derek Hensley <hensley.derek58@gmail.com> * review Co-authored-by: Derek Hensley <hensley.derek58@gmail.com> * new files * format * weekeventreg * review Co-authored-by: Derek Hensley <hensley.derek58@gmail.com> * review Co-authored-by: EllipticEllipsis <elliptic.ellipsis@gmail.com> * update * format * review Co-authored-by: EllipticEllipsis <elliptic.ellipsis@gmail.com> * flags * a * eventinf stuff * format * EnGakufu * flags * run the script * format * whoops * cleanup * fix * update weekeventregs * format * format * review * format Co-authored-by: Derek Hensley <hensley.derek58@gmail.com> Co-authored-by: EllipticEllipsis <elliptic.ellipsis@gmail.com>
This commit is contained in:
co-authored by
Derek Hensley
EllipticEllipsis
parent
baaa79b979
commit
ba4368d0e8
Executable
+91
@@ -0,0 +1,91 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import argparse
|
||||
import math
|
||||
import re
|
||||
|
||||
def isValid(index: int, mask: int) -> bool:
|
||||
if index < 0 or index > 7:
|
||||
return False
|
||||
if mask != (1 << int(math.log2(mask))):
|
||||
return False
|
||||
return True
|
||||
|
||||
def getFlagMacro(index: int, mask: int) -> str:
|
||||
return f"EVENTINF_{index}{int(math.log2(mask))}"
|
||||
|
||||
def getCheckMacro(index: int, mask: int) -> str:
|
||||
return f"CHECK_EVENTINF({getFlagMacro(index, mask)})"
|
||||
|
||||
def getSetMacro(index: int, mask: int) -> str:
|
||||
return f"SET_EVENTINF({getFlagMacro(index, mask)})"
|
||||
|
||||
def getClearMacro(index: int, mask: int) -> str:
|
||||
return f"CLEAR_EVENTINF({getFlagMacro(index, mask)})"
|
||||
|
||||
NUMBER_PATTERN = r"(0[xX])?[0-9a-fA-F]+"
|
||||
|
||||
def applyChange(fileContents: str, compiledRegex: re.Pattern, callback) -> str:
|
||||
parsedContents = ""
|
||||
|
||||
match = compiledRegex.search(fileContents)
|
||||
while match:
|
||||
index = int(match.group("index"), 0)
|
||||
mask = int(match.group("mask"), 0)
|
||||
|
||||
start, end = match.span()
|
||||
parsedContents += fileContents[:start]
|
||||
if isValid(index, mask):
|
||||
parsedContents += callback(index, mask)
|
||||
else:
|
||||
parsedContents += fileContents[start:end]
|
||||
|
||||
fileContents = fileContents[end:]
|
||||
match = compiledRegex.search(fileContents)
|
||||
|
||||
parsedContents += fileContents
|
||||
return parsedContents
|
||||
|
||||
|
||||
def updateCheck(fileContents: str) -> str:
|
||||
checkRegex = re.compile(rf"gSaveContext.eventInf\[(?P<index>{NUMBER_PATTERN})\]\s*\&\s*(?P<mask>{NUMBER_PATTERN})")
|
||||
|
||||
return applyChange(fileContents, checkRegex, getCheckMacro)
|
||||
|
||||
def updateSet(fileContents: str) -> str:
|
||||
setRegex = re.compile(rf"gSaveContext.eventInf\[(?P<index>{NUMBER_PATTERN})\]\s*\|=\s*(?P<mask>{NUMBER_PATTERN})")
|
||||
|
||||
return applyChange(fileContents, setRegex, getSetMacro)
|
||||
|
||||
def updateClear(fileContents: str) -> str:
|
||||
clearRegex = re.compile(rf"gSaveContext.eventInf\[(?P<index>{NUMBER_PATTERN})\]\s*\&=\s*(\(u8\))?~(?P<mask>{NUMBER_PATTERN})")
|
||||
|
||||
return applyChange(fileContents, clearRegex, getClearMacro)
|
||||
|
||||
|
||||
def read_file(filename):
|
||||
with open(filename) as src_file:
|
||||
return src_file.read()
|
||||
|
||||
def write_file(filename, contents):
|
||||
with open(filename, "w") as f:
|
||||
f.write(contents)
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description="Converts a eventInf access to a macro")
|
||||
|
||||
parser.add_argument("filename", help="Replace every occurrence of numeric eventInf on this file to the corresponding macro")
|
||||
args = parser.parse_args()
|
||||
|
||||
fileContents = read_file(args.filename)
|
||||
|
||||
parsedContents = updateCheck(fileContents)
|
||||
parsedContents = updateSet(parsedContents)
|
||||
parsedContents = updateClear(parsedContents)
|
||||
|
||||
if fileContents != parsedContents:
|
||||
write_file(args.filename, parsedContents)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -7,8 +7,8 @@ import argparse, os, struct, math
|
||||
from actor_symbols import resolve_symbol
|
||||
|
||||
cmd_info = [
|
||||
('SCHEDULE_CMD_CHECK_FLAG_S', 0x04, '>BBb', (2, )),
|
||||
('SCHEDULE_CMD_CHECK_FLAG_L', 0x05, '>BBh', (2, )),
|
||||
('SCHEDULE_CMD_CHECK_FLAG_S', 0x04, '>Hb', (1, )),
|
||||
('SCHEDULE_CMD_CHECK_FLAG_L', 0x05, '>Hh', (1, )),
|
||||
('SCHEDULE_CMD_CHECK_TIME_RANGE_S', 0x06, '>BBBBb', (4, )),
|
||||
('SCHEDULE_CMD_CHECK_TIME_RANGE_L', 0x07, '>BBBBh', (4, )),
|
||||
('SCHEDULE_CMD_RET_VAL_L', 0x03, '>H', ( )),
|
||||
@@ -198,6 +198,8 @@ def disassemble_unk_script(data_file, offset):
|
||||
elif arg_type == "H":
|
||||
if (cmd == 0x0A or cmd == 0x0B) and (arg_value < len(scene_names)):
|
||||
arg_formatted = scene_names[arg_value]
|
||||
elif cmd == 0x00 or cmd == 0x01:
|
||||
arg_formatted = f"WEEKEVENTREG_{arg_value>>8:02}_{arg_value&0xFF:02X}"
|
||||
else:
|
||||
arg_formatted = f"{arg_value}"
|
||||
elif arg_type == "B":
|
||||
|
||||
@@ -20,6 +20,16 @@ CLOCK_TIME = "int"
|
||||
CURRENT_DAY = "int"
|
||||
CHECK_NEWF = "int"
|
||||
NULL = "int"
|
||||
CHECK_WEEKEVENTREG = "int"
|
||||
SET_WEEKEVENTREG = "int"
|
||||
CLEAR_WEEKEVENTREG = "int"
|
||||
"WEEKEVENTREG_.+" = "int"
|
||||
CHECK_EVENTINF = "int"
|
||||
SET_EVENTINF = "int"
|
||||
CLEAR_EVENTINF = "int"
|
||||
CLEAR_EVENTINF_ALT = "int"
|
||||
"EVENTINF_.*" = "int"
|
||||
".+REG" = "int"
|
||||
|
||||
[decompme.compilers]
|
||||
"tools/ido_recomp/linux/7.1/cc" = "ido7.1"
|
||||
|
||||
Executable
+889
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user