Usecode pseudocode

This commit is contained in:
MaddoScientisto 2026-03-26 00:37:17 +01:00
commit c12bb39437
1362 changed files with 71072 additions and 38056 deletions

View file

@ -12,19 +12,16 @@ if str(REPO_ROOT) not in sys.path:
sys.path.insert(0, str(REPO_ROOT))
from tools.poc_crusader_usecode_parser import CLASS_LAYOUT_INDEX, EXTRACTED_ROOT, parse_body_ir, render_pseudocode
from tools.poc_crusader_usecode_parser import EXTRACTED_ROOT, parse_body_ir, render_pseudocode
CLASS_EVENT_INDEX = EXTRACTED_ROOT / "class_event_index.tsv"
def load_rows() -> list[dict[str, str]]:
with CLASS_EVENT_INDEX.open("r", encoding="utf-8", newline="") as handle:
def load_rows(class_event_index: Path) -> list[dict[str, str]]:
with class_event_index.open("r", encoding="utf-8", newline="") as handle:
return list(csv.DictReader(handle, delimiter="\t"))
def load_layout_by_entry() -> dict[int, dict[str, str]]:
with CLASS_LAYOUT_INDEX.open("r", encoding="utf-8", newline="") as handle:
def load_layout_by_entry(class_layout_index: Path) -> dict[int, dict[str, str]]:
with class_layout_index.open("r", encoding="utf-8", newline="") as handle:
rows = list(csv.DictReader(handle, delimiter="\t"))
layout_by_entry: dict[int, dict[str, str]] = {}
for row in rows:
@ -107,18 +104,31 @@ def write_readme(output_root: Path, export_count: int) -> None:
def main() -> None:
parser = argparse.ArgumentParser(description="Export pseudocode for all decoded Crusader USECODE bodies")
parser.add_argument(
"--extracted-root",
default=str(EXTRACTED_ROOT),
help="Extracted USECODE root containing class_event_index.tsv and chunks/",
)
parser.add_argument(
"--output-dir",
default=str(EXTRACTED_ROOT / "pseudocode"),
help="Output directory for pseudocode files (default: USECODE/EUSECODE_extracted/pseudocode)",
help="Output directory for pseudocode files (default: <extracted-root>/pseudocode)",
)
parser.add_argument(
"--variant",
choices=["auto", "regret", "remorse"],
default="auto",
help="Crusader intrinsic numbering to apply during export (default: auto, fallback regret)",
)
args = parser.parse_args()
output_root = Path(args.output_dir)
extracted_root = Path(args.extracted_root)
class_event_index = extracted_root / "class_event_index.tsv"
class_layout_index = extracted_root / "class_layout_index.tsv"
output_root = Path(args.output_dir) if args.output_dir else extracted_root / "pseudocode"
output_root.mkdir(parents=True, exist_ok=True)
rows = load_rows()
layout_by_entry = load_layout_by_entry()
rows = load_rows(class_event_index)
layout_by_entry = load_layout_by_entry(class_layout_index)
index_rows: list[dict[str, str]] = []
exported = 0
@ -130,7 +140,7 @@ def main() -> None:
layout_row = layout_by_entry.get(entry_index)
if layout_row is None:
continue
ir = parse_body_ir(row, layout_row)
ir = parse_body_ir(row, layout_row, None if args.variant == "auto" else args.variant, extracted_root)
pseudocode = render_pseudocode(ir)
path = output_path_for_row(output_root, row)

View file

@ -24,6 +24,7 @@ from dataclasses import asdict, dataclass
DEFAULT_INPUT = pathlib.Path(r"k:\ghidra\Crusader_Decomp\USECODE\EUSECODE.FLX")
DEFAULT_OUTPUT = pathlib.Path(r"k:\ghidra\Crusader_Decomp\USECODE\EUSECODE_extracted")
DEFAULT_VALIDATION_PROFILE = "auto"
@dataclass(frozen=True)
@ -258,6 +259,29 @@ def classify_event_family(chunk: ExtractedChunk) -> str:
return "environmental-event"
if "typeNpc" in chunk.field_names:
return "npc-trigger"
def normalize_validation_profile(value: str | None) -> str:
if value is None:
return DEFAULT_VALIDATION_PROFILE
normalized = value.strip().lower()
if normalized not in {"auto", "remorse", "regret", "none"}:
raise ValueError(f"unsupported validation profile: {value}")
return normalized
def infer_validation_profile(input_path: pathlib.Path, output_path: pathlib.Path) -> str:
combined_parts = [part.upper() for part in (*input_path.parts, *output_path.parts)]
if "REGRET" in combined_parts:
return "regret"
return "remorse"
def resolve_validation_profile(input_path: pathlib.Path, output_path: pathlib.Path, requested: str | None) -> str:
normalized = normalize_validation_profile(requested)
if normalized == "auto":
return infer_validation_profile(input_path, output_path)
return normalized
return "specialized-event"
@ -549,44 +573,59 @@ IMMORTALITY_BODY_MOTIFS: tuple[tuple[str, bytes], ...] = (
)
VERIFIED_REPEATED_FAMILY_ROW_EXPECTATIONS: tuple[RepeatedFamilyRowExpectation, ...] = (
RepeatedFamilyRowExpectation("JELYHACK", 0x01, 0x002A, 0x00000001, 0x00D4, 0x00FE, 42, "referent-anchor-twin/shared-slot-0x01/same-length-template"),
RepeatedFamilyRowExpectation("JELYH2", 0x01, 0x002A, 0x00000001, 0x00D4, 0x00FE, 42, "referent-anchor-twin/shared-slot-0x01/same-length-template"),
RepeatedFamilyRowExpectation("AND_BOOT", 0x0A, 0x0253, 0x00000001, 0x00D4, 0x0327, 595, "boot-event-core/shared-slot-0x0A/shared-slot-template"),
RepeatedFamilyRowExpectation("AND_BOOT", 0x0F, 0x0237, 0x00000254, 0x0327, 0x055E, 567, "boot-event-core/shared-slot-0x0F/shared-slot-template"),
RepeatedFamilyRowExpectation("AND_BOOT", 0x10, 0x003B, 0x0000048B, 0x055E, 0x0599, 59, "boot-event-core/shared-slot-0x10/same-length-template"),
RepeatedFamilyRowExpectation("BRO_BOOT", 0x0A, 0x02D5, 0x00000001, 0x00D4, 0x03A9, 725, "boot-event-core/shared-slot-0x0A/shared-slot-template"),
RepeatedFamilyRowExpectation("BRO_BOOT", 0x0F, 0x024C, 0x000002D6, 0x03A9, 0x05F5, 588, "boot-event-core/shared-slot-0x0F/shared-slot-template"),
RepeatedFamilyRowExpectation("BRO_BOOT", 0x10, 0x003B, 0x00000522, 0x05F5, 0x0630, 59, "boot-event-core/shared-slot-0x10/same-length-template"),
RepeatedFamilyRowExpectation("COR_BOOT", 0x0A, 0x0227, 0x00000001, 0x00D4, 0x02FB, 551, "boot-event-core/shared-slot-0x0A/shared-slot-template"),
RepeatedFamilyRowExpectation("COR_BOOT", 0x0F, 0x0234, 0x00000228, 0x02FB, 0x052F, 564, "boot-event-core/shared-slot-0x0F/shared-slot-template"),
RepeatedFamilyRowExpectation("COR_BOOT", 0x10, 0x003B, 0x0000045C, 0x052F, 0x056A, 59, "boot-event-core/shared-slot-0x10/same-length-template"),
RepeatedFamilyRowExpectation("REE_BOOT", 0x0A, 0x034B, 0x00000001, 0x00D4, 0x041F, 843, "boot-event-core/shared-slot-0x0A/shared-slot-template"),
RepeatedFamilyRowExpectation("REE_BOOT", 0x0F, 0x025C, 0x0000034C, 0x041F, 0x067B, 604, "boot-event-core/shared-slot-0x0F/shared-slot-template"),
RepeatedFamilyRowExpectation("REE_BOOT", 0x10, 0x003B, 0x000005A8, 0x067B, 0x06B6, 59, "boot-event-core/shared-slot-0x10/same-length-template"),
RepeatedFamilyRowExpectation("VAR_BOOT", 0x0A, 0x029A, 0x00000001, 0x00D4, 0x036E, 666, "boot-event-core/shared-slot-0x0A/shared-slot-template"),
RepeatedFamilyRowExpectation("VAR_BOOT", 0x0F, 0x0244, 0x0000029B, 0x036E, 0x05B2, 580, "boot-event-core/shared-slot-0x0F/shared-slot-template"),
RepeatedFamilyRowExpectation("VAR_BOOT", 0x10, 0x003B, 0x000004DF, 0x05B2, 0x05ED, 59, "boot-event-core/shared-slot-0x10/same-length-template"),
RepeatedFamilyRowExpectation("SURCAMNS", 0x01, 0x0051, 0x000000D2, 0x01B7, 0x0208, 81, "callback-eventtrigger/shared-slot-0x01/shared-slot-template"),
RepeatedFamilyRowExpectation("SURCAMNS", 0x0A, 0x00D1, 0x00000001, 0x00E6, 0x01B7, 209, "callback-eventtrigger/shared-slot-0x0A/same-length-template"),
RepeatedFamilyRowExpectation("SURCAMNS", 0x20, 0x02BA, 0x00000123, 0x0208, 0x04C2, 698, "callback-eventtrigger/shared-slot-0x20/same-length-template"),
RepeatedFamilyRowExpectation("SURCAMNS", 0x21, 0x0709, 0x000003DD, 0x04C2, 0x0BCB, 1801, "callback-eventtrigger/shared-slot-0x21/shared-slot-template"),
RepeatedFamilyRowExpectation("SURCAMNS", 0x22, 0x01A3, 0x00000AE6, 0x0BCB, 0x0D6E, 419, "callback-eventtrigger/shared-slot-0x22/same-length-template"),
RepeatedFamilyRowExpectation("SURCAMEW", 0x01, 0x00F7, 0x000000D2, 0x01B7, 0x02AE, 247, "callback-eventtrigger/shared-slot-0x01/shared-slot-template"),
RepeatedFamilyRowExpectation("SURCAMEW", 0x0A, 0x00D1, 0x00000001, 0x00E6, 0x01B7, 209, "callback-eventtrigger/shared-slot-0x0A/same-length-template"),
RepeatedFamilyRowExpectation("SURCAMEW", 0x20, 0x02BA, 0x000001C9, 0x02AE, 0x0568, 698, "callback-eventtrigger/shared-slot-0x20/same-length-template"),
RepeatedFamilyRowExpectation("SURCAMEW", 0x21, 0x0655, 0x00000483, 0x0568, 0x0BBD, 1621, "callback-eventtrigger/shared-slot-0x21/shared-slot-template"),
RepeatedFamilyRowExpectation("SURCAMEW", 0x22, 0x01A3, 0x00000AD8, 0x0BBD, 0x0D60, 419, "callback-eventtrigger/shared-slot-0x22/same-length-template"),
RepeatedFamilyRowExpectation("FLAMEBOX", 0x0A, 0x026A, 0x00000001, 0x00E0, 0x034A, 618, "environmental-event/shared-slot-0x0A/shared-slot-template"),
RepeatedFamilyRowExpectation("FLAMEBOX", 0x20, 0x01AC, 0x0000026B, 0x034A, 0x04F6, 428, "environmental-event/shared-slot-0x20/shared-slot-template"),
RepeatedFamilyRowExpectation("FLAMEBOX", 0x21, 0x029A, 0x00000417, 0x04F6, 0x0790, 666, "environmental-event/shared-slot-0x21/shared-slot-template"),
RepeatedFamilyRowExpectation("NOSTRIL", 0x0A, 0x00C0, 0x00000001, 0x00E0, 0x01A0, 192, "environmental-event/shared-slot-0x0A/shared-slot-template"),
RepeatedFamilyRowExpectation("NOSTRIL", 0x20, 0x0129, 0x000000C1, 0x01A0, 0x02C9, 297, "environmental-event/shared-slot-0x20/shared-slot-template"),
RepeatedFamilyRowExpectation("NOSTRIL", 0x21, 0x01BE, 0x000001EA, 0x02C9, 0x0487, 446, "environmental-event/shared-slot-0x21/shared-slot-template"),
RepeatedFamilyRowExpectation("STEAMBOX", 0x0A, 0x0266, 0x00000001, 0x00E0, 0x0346, 614, "environmental-event/shared-slot-0x0A/shared-slot-template"),
RepeatedFamilyRowExpectation("STEAMBOX", 0x20, 0x01F6, 0x00000267, 0x0346, 0x053C, 502, "environmental-event/shared-slot-0x20/shared-slot-template"),
RepeatedFamilyRowExpectation("STEAMBOX", 0x21, 0x02A7, 0x0000045D, 0x053C, 0x07E3, 679, "environmental-event/shared-slot-0x21/shared-slot-template"),
)
VERIFIED_REPEATED_FAMILY_ROW_EXPECTATIONS_BY_PROFILE: dict[str, tuple[RepeatedFamilyRowExpectation, ...]] = {
"remorse": (
RepeatedFamilyRowExpectation("JELYHACK", 0x01, 0x002A, 0x00000001, 0x00D4, 0x00FE, 42, "referent-anchor-twin/shared-slot-0x01/same-length-template"),
RepeatedFamilyRowExpectation("JELYH2", 0x01, 0x002A, 0x00000001, 0x00D4, 0x00FE, 42, "referent-anchor-twin/shared-slot-0x01/same-length-template"),
RepeatedFamilyRowExpectation("AND_BOOT", 0x0A, 0x0253, 0x00000001, 0x00D4, 0x0327, 595, "boot-event-core/shared-slot-0x0A/shared-slot-template"),
RepeatedFamilyRowExpectation("AND_BOOT", 0x0F, 0x0237, 0x00000254, 0x0327, 0x055E, 567, "boot-event-core/shared-slot-0x0F/shared-slot-template"),
RepeatedFamilyRowExpectation("AND_BOOT", 0x10, 0x003B, 0x0000048B, 0x055E, 0x0599, 59, "boot-event-core/shared-slot-0x10/same-length-template"),
RepeatedFamilyRowExpectation("BRO_BOOT", 0x0A, 0x02D5, 0x00000001, 0x00D4, 0x03A9, 725, "boot-event-core/shared-slot-0x0A/shared-slot-template"),
RepeatedFamilyRowExpectation("BRO_BOOT", 0x0F, 0x024C, 0x000002D6, 0x03A9, 0x05F5, 588, "boot-event-core/shared-slot-0x0F/shared-slot-template"),
RepeatedFamilyRowExpectation("BRO_BOOT", 0x10, 0x003B, 0x00000522, 0x05F5, 0x0630, 59, "boot-event-core/shared-slot-0x10/same-length-template"),
RepeatedFamilyRowExpectation("COR_BOOT", 0x0A, 0x0227, 0x00000001, 0x00D4, 0x02FB, 551, "boot-event-core/shared-slot-0x0A/shared-slot-template"),
RepeatedFamilyRowExpectation("COR_BOOT", 0x0F, 0x0234, 0x00000228, 0x02FB, 0x052F, 564, "boot-event-core/shared-slot-0x0F/shared-slot-template"),
RepeatedFamilyRowExpectation("COR_BOOT", 0x10, 0x003B, 0x0000045C, 0x052F, 0x056A, 59, "boot-event-core/shared-slot-0x10/same-length-template"),
RepeatedFamilyRowExpectation("REE_BOOT", 0x0A, 0x034B, 0x00000001, 0x00D4, 0x041F, 843, "boot-event-core/shared-slot-0x0A/shared-slot-template"),
RepeatedFamilyRowExpectation("REE_BOOT", 0x0F, 0x025C, 0x0000034C, 0x041F, 0x067B, 604, "boot-event-core/shared-slot-0x0F/shared-slot-template"),
RepeatedFamilyRowExpectation("REE_BOOT", 0x10, 0x003B, 0x000005A8, 0x067B, 0x06B6, 59, "boot-event-core/shared-slot-0x10/same-length-template"),
RepeatedFamilyRowExpectation("VAR_BOOT", 0x0A, 0x029A, 0x00000001, 0x00D4, 0x036E, 666, "boot-event-core/shared-slot-0x0A/shared-slot-template"),
RepeatedFamilyRowExpectation("VAR_BOOT", 0x0F, 0x0244, 0x0000029B, 0x036E, 0x05B2, 580, "boot-event-core/shared-slot-0x0F/shared-slot-template"),
RepeatedFamilyRowExpectation("VAR_BOOT", 0x10, 0x003B, 0x000004DF, 0x05B2, 0x05ED, 59, "boot-event-core/shared-slot-0x10/same-length-template"),
RepeatedFamilyRowExpectation("SURCAMNS", 0x01, 0x0051, 0x000000D2, 0x01B7, 0x0208, 81, "callback-eventtrigger/shared-slot-0x01/shared-slot-template"),
RepeatedFamilyRowExpectation("SURCAMNS", 0x0A, 0x00D1, 0x00000001, 0x00E6, 0x01B7, 209, "callback-eventtrigger/shared-slot-0x0A/same-length-template"),
RepeatedFamilyRowExpectation("SURCAMNS", 0x20, 0x02BA, 0x00000123, 0x0208, 0x04C2, 698, "callback-eventtrigger/shared-slot-0x20/same-length-template"),
RepeatedFamilyRowExpectation("SURCAMNS", 0x21, 0x0709, 0x000003DD, 0x04C2, 0x0BCB, 1801, "callback-eventtrigger/shared-slot-0x21/shared-slot-template"),
RepeatedFamilyRowExpectation("SURCAMNS", 0x22, 0x01A3, 0x00000AE6, 0x0BCB, 0x0D6E, 419, "callback-eventtrigger/shared-slot-0x22/same-length-template"),
RepeatedFamilyRowExpectation("SURCAMEW", 0x01, 0x00F7, 0x000000D2, 0x01B7, 0x02AE, 247, "callback-eventtrigger/shared-slot-0x01/shared-slot-template"),
RepeatedFamilyRowExpectation("SURCAMEW", 0x0A, 0x00D1, 0x00000001, 0x00E6, 0x01B7, 209, "callback-eventtrigger/shared-slot-0x0A/same-length-template"),
RepeatedFamilyRowExpectation("SURCAMEW", 0x20, 0x02BA, 0x000001C9, 0x02AE, 0x0568, 698, "callback-eventtrigger/shared-slot-0x20/same-length-template"),
RepeatedFamilyRowExpectation("SURCAMEW", 0x21, 0x0655, 0x00000483, 0x0568, 0x0BBD, 1621, "callback-eventtrigger/shared-slot-0x21/shared-slot-template"),
RepeatedFamilyRowExpectation("SURCAMEW", 0x22, 0x01A3, 0x00000AD8, 0x0BBD, 0x0D60, 419, "callback-eventtrigger/shared-slot-0x22/same-length-template"),
RepeatedFamilyRowExpectation("FLAMEBOX", 0x0A, 0x026A, 0x00000001, 0x00E0, 0x034A, 618, "environmental-event/shared-slot-0x0A/shared-slot-template"),
RepeatedFamilyRowExpectation("FLAMEBOX", 0x20, 0x01AC, 0x0000026B, 0x034A, 0x04F6, 428, "environmental-event/shared-slot-0x20/shared-slot-template"),
RepeatedFamilyRowExpectation("FLAMEBOX", 0x21, 0x029A, 0x00000417, 0x04F6, 0x0790, 666, "environmental-event/shared-slot-0x21/shared-slot-template"),
RepeatedFamilyRowExpectation("NOSTRIL", 0x0A, 0x00C0, 0x00000001, 0x00E0, 0x01A0, 192, "environmental-event/shared-slot-0x0A/shared-slot-template"),
RepeatedFamilyRowExpectation("NOSTRIL", 0x20, 0x0129, 0x000000C1, 0x01A0, 0x02C9, 297, "environmental-event/shared-slot-0x20/shared-slot-template"),
RepeatedFamilyRowExpectation("NOSTRIL", 0x21, 0x01BE, 0x000001EA, 0x02C9, 0x0487, 446, "environmental-event/shared-slot-0x21/shared-slot-template"),
RepeatedFamilyRowExpectation("STEAMBOX", 0x0A, 0x0266, 0x00000001, 0x00E0, 0x0346, 614, "environmental-event/shared-slot-0x0A/shared-slot-template"),
RepeatedFamilyRowExpectation("STEAMBOX", 0x20, 0x01F6, 0x00000267, 0x0346, 0x053C, 502, "environmental-event/shared-slot-0x20/shared-slot-template"),
RepeatedFamilyRowExpectation("STEAMBOX", 0x21, 0x02A7, 0x0000045D, 0x053C, 0x07E3, 679, "environmental-event/shared-slot-0x21/shared-slot-template"),
),
"regret": (
RepeatedFamilyRowExpectation("JELYHACK", 0x01, 0x000D, 0x00000001, 0x00D4, 0x00E1, 13, ""),
RepeatedFamilyRowExpectation("JELYH2", 0x01, 0x000D, 0x00000001, 0x00D4, 0x00E1, 13, ""),
RepeatedFamilyRowExpectation("FLAMEBOX", 0x0A, 0x01D8, 0x00000001, 0x00E0, 0x02B8, 472, ""),
RepeatedFamilyRowExpectation("FLAMEBOX", 0x20, 0x011D, 0x000001D9, 0x02B8, 0x03D5, 285, ""),
RepeatedFamilyRowExpectation("FLAMEBOX", 0x21, 0x01BD, 0x000002F6, 0x03D5, 0x0592, 445, ""),
RepeatedFamilyRowExpectation("NOSTRIL", 0x0A, 0x007B, 0x00000001, 0x00E0, 0x015B, 123, ""),
RepeatedFamilyRowExpectation("NOSTRIL", 0x20, 0x00BE, 0x0000007C, 0x015B, 0x0219, 190, ""),
RepeatedFamilyRowExpectation("NOSTRIL", 0x21, 0x013B, 0x0000013A, 0x0219, 0x0354, 315, ""),
RepeatedFamilyRowExpectation("STEAMBOX", 0x0A, 0x01D7, 0x00000001, 0x00E0, 0x02B7, 471, ""),
RepeatedFamilyRowExpectation("STEAMBOX", 0x20, 0x014F, 0x000001D8, 0x02B7, 0x0406, 335, ""),
RepeatedFamilyRowExpectation("STEAMBOX", 0x21, 0x01CD, 0x00000327, 0x0406, 0x05D3, 461, ""),
),
}
def scummvm_event_name_hint(slot: int) -> str | None:
@ -936,19 +975,28 @@ def validate_verified_repeated_family_regressions(
parsed_class_chunks: list[ExtractedChunk],
rows_by_entry: dict[int, list[ClassEventRow]],
repeated_status_by_row: dict[tuple[int, int], str],
validation_profile: str,
) -> list[str]:
chunk_by_label = {
chunk.primary_label: chunk
for chunk in parsed_class_chunks
if chunk.primary_label
}
expected_slots_by_class: dict[str, set[int]] = {}
for expectation in VERIFIED_REPEATED_FAMILY_ROW_EXPECTATIONS:
expected_slots_by_class.setdefault(expectation.class_name, set()).add(expectation.slot)
report_lines = [
"record_type\tclass_name\tslot\texpected\tactual\tstatus"
]
expectations = VERIFIED_REPEATED_FAMILY_ROW_EXPECTATIONS_BY_PROFILE.get(validation_profile)
if not expectations:
report_lines.append(
f"meta\t*\t*\tprofile-baseline\t{validation_profile}\tskipped"
)
return report_lines
chunk_by_label: dict[str, ExtractedChunk] = {}
for chunk in parsed_class_chunks:
if chunk.primary_label:
chunk_by_label.setdefault(chunk.primary_label, chunk)
if chunk.class_name_hint:
chunk_by_label.setdefault(chunk.class_name_hint, chunk)
expected_slots_by_class: dict[str, set[int]] = {}
for expectation in expectations:
expected_slots_by_class.setdefault(expectation.class_name, set()).add(expectation.slot)
errors: list[str] = []
for class_name, expected_slots in sorted(expected_slots_by_class.items()):
@ -974,7 +1022,7 @@ def validate_verified_repeated_family_regressions(
f"{class_name}: expected non-zero slots {sorted(expected_slots)}, found {sorted(actual_slots)}"
)
for expectation in VERIFIED_REPEATED_FAMILY_ROW_EXPECTATIONS:
for expectation in expectations:
chunk = chunk_by_label.get(expectation.class_name)
if chunk is None:
errors.append(f"missing repeated-family class {expectation.class_name}")
@ -2686,9 +2734,17 @@ def extract_candidates(data: bytes, out_dir: pathlib.Path, entries: list[Candida
return extracted
def write_summary(out_dir: pathlib.Path, input_path: pathlib.Path, data: bytes, entries: list[CandidateEntry], chunks: list[ExtractedChunk]) -> None:
def write_summary(
out_dir: pathlib.Path,
input_path: pathlib.Path,
data: bytes,
entries: list[CandidateEntry],
chunks: list[ExtractedChunk],
validation_profile: str,
) -> None:
summary = {
"input_path": str(input_path),
"validation_profile": validation_profile,
"file_size": len(data),
"header_preview_hex": data[:128].hex(),
"header_preview_ascii": ascii_preview(data[:128], 128),
@ -2767,6 +2823,7 @@ def write_summary(out_dir: pathlib.Path, input_path: pathlib.Path, data: bytes,
parsed_class_chunks,
rows_by_entry,
repeated_status_by_row,
validation_profile,
)
for chunk in parsed_class_chunks:
class_layout_lines.append(
@ -3021,21 +3078,30 @@ def parse_args() -> argparse.Namespace:
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("input", nargs="?", type=pathlib.Path, default=DEFAULT_INPUT)
parser.add_argument("output", nargs="?", type=pathlib.Path, default=DEFAULT_OUTPUT)
parser.add_argument(
"--validation-profile",
choices=["auto", "remorse", "regret", "none"],
default=DEFAULT_VALIDATION_PROFILE,
help="Repeated-family regression baseline to enforce (default: auto)",
)
return parser.parse_args()
def main() -> int:
args = parse_args()
validation_profile = resolve_validation_profile(args.input, args.output, args.validation_profile)
data = args.input.read_bytes()
args.output.mkdir(parents=True, exist_ok=True)
flx_table = parse_flx_table(data)
entries = flx_table.entries
chunks = extract_candidates(data, args.output, entries)
write_summary(args.output, args.input, data, entries, chunks)
write_summary(args.output, args.input, data, entries, chunks, validation_profile)
print(
f"Parsed {flx_table.entry_count} table slots with {len(chunks)} non-zero entries; extracted to {args.output}"
"Parsed "
f"{flx_table.entry_count} table slots with {len(chunks)} non-zero entries; "
f"validation profile {validation_profile}; extracted to {args.output}"
)
return 0

View file

@ -1,6 +1,7 @@
from __future__ import annotations
import argparse
import ast
import csv
import hashlib
import json
@ -16,6 +17,43 @@ CLASS_EVENT_INDEX = EXTRACTED_ROOT / "class_event_index.tsv"
CLASS_LAYOUT_INDEX = EXTRACTED_ROOT / "class_layout_index.tsv"
RUNTIME_VM_IR_INDEX = EXTRACTED_ROOT / "runtime_vm_ir.tsv"
CHUNKS_DIR = EXTRACTED_ROOT / "chunks"
UNKCOFFS_DIR = REPO_ROOT / "tools" / "unkcoffs"
DEFAULT_GAME_VARIANT = "regret"
INTRINSIC_HINT_PATHS = {
"regret": UNKCOFFS_DIR / "regret_ints.py",
"remorse": UNKCOFFS_DIR / "remorse_ints.py",
}
def resolve_extracted_root(extracted_root: Path | str | None = None) -> Path:
if extracted_root is None:
return EXTRACTED_ROOT
return Path(extracted_root)
def extracted_root_paths(extracted_root: Path | str | None = None) -> tuple[Path, Path, Path, Path]:
root = resolve_extracted_root(extracted_root)
return (
root / "class_event_index.tsv",
root / "class_layout_index.tsv",
root / "runtime_vm_ir.tsv",
root / "chunks",
)
def repo_relative_path(path: Path) -> str:
try:
return str(path.relative_to(REPO_ROOT)).replace("\\", "/")
except ValueError:
return str(path).replace("\\", "/")
def infer_flex_path(extracted_root: Path | str | None = None) -> str:
root = resolve_extracted_root(extracted_root)
parent = root.parent
if parent == REPO_ROOT:
return "EUSECODE.FLX"
return f"{repo_relative_path(parent)}/EUSECODE.FLX"
EVENT_NAME_HINTS = {
@ -57,7 +95,7 @@ EVENT_NAME_HINTS = {
# Intrinsic table extracted from Pentagram ConvertUsecodeCrusader.h
# Source note: "current discovered intrinsics are for regret1.21 only"
# This is used as a hint only ordinal mapping may differ between builds.
INTRINSIC_HINTS: dict[int, str] = {
BASE_INTRINSIC_HINTS: dict[int, str] = {
0x0000: "Intrinsic0000()",
0x0001: "Item::getFrame(void)",
0x0002: "Item::setFrame(uint16)",
@ -411,6 +449,117 @@ INTRINSIC_HINTS: dict[int, str] = {
}
VARIANT_INTRINSIC_CALLSITE_HINTS: dict[str, dict[tuple[int, int], str]] = {
"regret": {
(0x001E, 0x10): "Item::I_fireWeapon(Item *, x, y, z, byte, int, byte)",
},
"remorse": {},
}
def normalize_game_variant(value: str | None) -> str | None:
if value is None:
return None
normalized = value.strip().lower()
if not normalized or normalized == "auto":
return None
if normalized not in INTRINSIC_HINT_PATHS:
raise ValueError(f"Unsupported Crusader variant: {value}")
return normalized
def infer_game_variant_from_path(path: Path | None) -> str | None:
if path is None:
return None
lowered_parts = [part.lower() for part in path.parts]
if any("regret" in part for part in lowered_parts):
return "regret"
if any("remorse" in part for part in lowered_parts):
return "remorse"
return None
def resolve_game_variant(game_variant: str | None = None, source_root: Path | None = None) -> str:
normalized = normalize_game_variant(game_variant)
if normalized is not None:
return normalized
inferred = infer_game_variant_from_path(source_root)
if inferred is not None:
return inferred
return DEFAULT_GAME_VARIANT
def load_intrinsic_hints_from_file(path: Path) -> dict[int, str]:
if not path.exists():
return {}
try:
module = ast.parse(path.read_text(encoding="utf-8"), filename=str(path))
except (OSError, SyntaxError):
return {}
for node in module.body:
if not isinstance(node, ast.Assign):
continue
if len(node.targets) != 1 or not isinstance(node.targets[0], ast.Name):
continue
if node.targets[0].id != "intrinsics":
continue
try:
values = ast.literal_eval(node.value)
except (SyntaxError, ValueError):
return {}
if not isinstance(values, list):
return {}
return {
index: str(value)
for index, value in enumerate(values)
if isinstance(value, str) and value.strip()
}
return {}
def normalize_intrinsic_hint(name: str) -> str:
normalized = name.strip()
normalized = re.sub(r"^(?:unsigned|signed|void|byte|char|short|long|int\d+|uint\d+|sint\d+)\s+(?=[A-Za-z_])", "", normalized)
normalized = re.sub(r"(?<![A-Za-z])udioProcess::", "AudioProcess::", normalized)
normalized = normalized.replace("MusicProcess:I_", "MusicProcess::I_")
normalized = normalized.replace("Somehting", "Something")
normalized = normalized.replace("Actor::I_setDead())", "Actor::I_setDead()")
return normalized
def build_intrinsic_hints(game_variant: str | None = None, source_root: Path | None = None) -> dict[int, str]:
variant = resolve_game_variant(game_variant, source_root)
hints = {index: normalize_intrinsic_hint(name) for index, name in BASE_INTRINSIC_HINTS.items()}
for index, name in load_intrinsic_hints_from_file(INTRINSIC_HINT_PATHS[variant]).items():
normalized = normalize_intrinsic_hint(name)
existing = hints.get(index)
if existing is None or not normalized.startswith("Intrinsic") or existing.startswith("Intrinsic"):
hints[index] = normalized
return hints
_INTRINSIC_HINTS_CACHE: dict[str, dict[int, str]] = {}
def get_intrinsic_hints(game_variant: str | None = None, source_root: Path | None = None) -> dict[int, str]:
variant = resolve_game_variant(game_variant, source_root)
cached = _INTRINSIC_HINTS_CACHE.get(variant)
if cached is None:
cached = build_intrinsic_hints(variant)
_INTRINSIC_HINTS_CACHE[variant] = cached
return cached
def get_intrinsic_callsite_hints(game_variant: str | None = None, source_root: Path | None = None) -> dict[tuple[int, int], str]:
variant = resolve_game_variant(game_variant, source_root)
return VARIANT_INTRINSIC_CALLSITE_HINTS.get(variant, {})
INTRINSIC_HINTS = get_intrinsic_hints(DEFAULT_GAME_VARIANT)
NO_ARG_MNEMONICS = {
0x08: "pop_result",
0x12: "pop_temp",
@ -587,11 +736,18 @@ def op_record(start: int, absolute_start: int, opcode: int, raw_bytes: bytes, mn
}
def parse_one_op(body: bytes, start: int) -> ParseResult:
def parse_one_op(
body: bytes,
start: int,
intrinsic_hints: dict[int, str] | None = None,
intrinsic_callsite_hints: dict[tuple[int, int], str] | None = None,
) -> ParseResult:
reader = BodyReader(body, start)
opcode = reader.read_u8()
operands: dict[str, Any] = {}
mnemonic = NO_ARG_MNEMONICS.get(opcode)
active_intrinsic_hints = intrinsic_hints or INTRINSIC_HINTS
active_callsite_hints = intrinsic_callsite_hints or get_intrinsic_callsite_hints(DEFAULT_GAME_VARIANT)
if opcode == 0x00:
operands = {"bp_offset": reader.read_u8(), "target": bp_repr(body[start + 1])}
@ -656,9 +812,9 @@ def parse_one_op(body: bytes, start: int) -> ParseResult:
arg_bytes = reader.read_u8()
intrinsic_ordinal = reader.read_u16()
operands = {
"arg_bytes": arg_bytes,
"intrinsic_ordinal": intrinsic_ordinal,
"intrinsic_name_hint": INTRINSIC_HINTS.get(intrinsic_ordinal),
"arg_bytes": arg_bytes,
"intrinsic_name_hint": active_callsite_hints.get((intrinsic_ordinal, arg_bytes), active_intrinsic_hints.get(intrinsic_ordinal)),
}
mnemonic = "call_intrinsic"
elif opcode == 0x10:
@ -842,18 +998,20 @@ def load_tsv_rows(path: Path) -> list[dict[str, str]]:
return list(csv.DictReader(handle, delimiter="\t"))
def find_chunk_file(entry_index: int) -> Path:
matches = sorted(CHUNKS_DIR.glob(f"chunk_{entry_index:03d}_*.bin"))
def find_chunk_file(entry_index: int, extracted_root: Path | str | None = None) -> Path:
_, _, _, chunks_dir = extracted_root_paths(extracted_root)
matches = sorted(chunks_dir.glob(f"chunk_{entry_index:03d}_*.bin"))
if not matches:
matches = sorted(CHUNKS_DIR.glob(f"chunk_{entry_index}_*.bin"))
matches = sorted(chunks_dir.glob(f"chunk_{entry_index}_*.bin"))
if not matches:
raise FileNotFoundError(f"No chunk file found for entry_index={entry_index}")
return matches[0]
def select_rows(class_name: str, slot: int) -> tuple[dict[str, str], dict[str, str]]:
event_rows = load_tsv_rows(CLASS_EVENT_INDEX)
layout_rows = load_tsv_rows(CLASS_LAYOUT_INDEX)
def select_rows(class_name: str, slot: int, extracted_root: Path | str | None = None) -> tuple[dict[str, str], dict[str, str]]:
class_event_index, class_layout_index, _, _ = extracted_root_paths(extracted_root)
event_rows = load_tsv_rows(class_event_index)
layout_rows = load_tsv_rows(class_layout_index)
event_row = next(
(
@ -879,14 +1037,15 @@ def select_rows(class_name: str, slot: int) -> tuple[dict[str, str], dict[str, s
return event_row, layout_row
def load_runtime_ir_rows() -> list[dict[str, str]]:
return load_tsv_rows(RUNTIME_VM_IR_INDEX)
def load_runtime_ir_rows(extracted_root: Path | str | None = None) -> list[dict[str, str]]:
_, _, runtime_vm_ir_index, _ = extracted_root_paths(extracted_root)
return load_tsv_rows(runtime_vm_ir_index)
def runtime_stage_hints(ops: list[dict[str, Any]]) -> list[dict[str, str]]:
def runtime_stage_hints(ops: list[dict[str, Any]], extracted_root: Path | str | None = None) -> list[dict[str, str]]:
opcode_values = {op["opcode"] for op in ops}
hints: list[dict[str, str]] = []
for row in load_runtime_ir_rows():
for row in load_runtime_ir_rows(extracted_root):
opcode_or_lane = row.get("opcode_or_lane", "")
if opcode_or_lane.lower().startswith("opcode 0x"):
opcode_value = try_parse_int(opcode_or_lane.split()[1])
@ -898,7 +1057,7 @@ def runtime_stage_hints(ops: list[dict[str, Any]]) -> list[dict[str, str]]:
return hints
def annotation_hints(event_row: dict[str, str], payload_shape_hint: str, ops: list[dict[str, Any]]) -> dict[str, Any]:
def annotation_hints(event_row: dict[str, str], payload_shape_hint: str, ops: list[dict[str, Any]], extracted_root: Path | str | None = None) -> dict[str, Any]:
slot = parse_int(event_row["slot"])
return {
"runtime_family": "slot-backed-owner-loaded-body",
@ -914,7 +1073,7 @@ def annotation_hints(event_row: dict[str, str], payload_shape_hint: str, ops: li
{"address": "000d:2104", "role": "finalize_to_outptr"},
{"address": "000d:ebe3", "role": "opcode_sequence_run"},
],
"runtime_stage_hints": runtime_stage_hints(ops),
"runtime_stage_hints": runtime_stage_hints(ops, extracted_root),
"slot_taxonomy": {"slot": slot, "event_name_hint": event_row["event_name_hint"] or EVENT_NAME_HINTS.get(slot)},
}
@ -1002,10 +1161,19 @@ def parse_field_tags(body: bytes, start: int) -> FieldTagParseResult | None:
return FieldTagParseResult(field_tags=field_tags, end_offset=end_offset, trailing_bytes=body[end_offset:])
def parse_body_ir(event_row: dict[str, str], layout_row: dict[str, str]) -> dict[str, Any]:
def parse_body_ir(
event_row: dict[str, str],
layout_row: dict[str, str],
game_variant: str | None = None,
extracted_root: Path | str | None = None,
) -> dict[str, Any]:
resolved_extracted_root = resolve_extracted_root(extracted_root)
entry_index = parse_int(event_row["entry_index"])
chunk_file = find_chunk_file(entry_index)
chunk_file = find_chunk_file(entry_index, resolved_extracted_root)
chunk_bytes = chunk_file.read_bytes()
resolved_game_variant = resolve_game_variant(game_variant, chunk_file)
intrinsic_hints = get_intrinsic_hints(resolved_game_variant, chunk_file)
intrinsic_callsite_hints = get_intrinsic_callsite_hints(resolved_game_variant, chunk_file)
body_start = parse_int(event_row["derived_body_start"])
body_end = parse_int(event_row["derived_body_end"])
@ -1020,7 +1188,7 @@ def parse_body_ir(event_row: dict[str, str], layout_row: dict[str, str]) -> dict
field_tags: list[dict[str, Any]] = []
while offset < len(body):
result = parse_one_op(body, offset)
result = parse_one_op(body, offset, intrinsic_hints, intrinsic_callsite_hints)
if result.op is not None:
result.op["absolute_body_offset"] = body_start + result.op["offset"]
ops.append(result.op)
@ -1121,9 +1289,10 @@ def parse_body_ir(event_row: dict[str, str], layout_row: dict[str, str]) -> dict
return {
"schema_version": "crusader-usecode-ir-v1-poc",
"source": {
"flex_path": "USECODE/EUSECODE.FLX",
"extracted_root": "USECODE/EUSECODE_extracted",
"chunk_file": str(chunk_file.relative_to(REPO_ROOT)).replace("\\", "/"),
"game_variant": resolved_game_variant,
"flex_path": infer_flex_path(resolved_extracted_root),
"extracted_root": repo_relative_path(resolved_extracted_root),
"chunk_file": repo_relative_path(chunk_file),
},
"class": {
"entry_index": entry_index,
@ -1156,7 +1325,7 @@ def parse_body_ir(event_row: dict[str, str], layout_row: dict[str, str]) -> dict
"ops": ops,
"debug_symbols": debug_symbols,
"field_tags": field_tags,
"annotation_hints": annotation_hints(event_row, payload_shape, ops),
"annotation_hints": annotation_hints(event_row, payload_shape, ops, resolved_extracted_root),
}
@ -1181,7 +1350,7 @@ def _common_suffix_len(a: bytes, b: bytes, prefix_len: int) -> int:
return limit
def compute_family_diff(class_name: str, slot: int) -> dict[str, Any]:
def compute_family_diff(class_name: str, slot: int, extracted_root: Path | str | None = None) -> dict[str, Any]:
"""
Find all event rows that share the same repeated_template_status family tag
as the named class/slot row, then decode each body and compute pairwise diff
@ -1193,8 +1362,9 @@ def compute_family_diff(class_name: str, slot: int) -> dict[str, Any]:
sibling_count number of additional rows in the same family
members list of per-member records (entry, class, body stats, diff vs ref)
"""
event_rows = load_tsv_rows(CLASS_EVENT_INDEX)
layout_rows = load_tsv_rows(CLASS_LAYOUT_INDEX)
class_event_index, class_layout_index, _, _ = extracted_root_paths(extracted_root)
event_rows = load_tsv_rows(class_event_index)
layout_rows = load_tsv_rows(class_layout_index)
layout_by_entry: dict[int, dict[str, str]] = {}
for row in layout_rows:
idx = try_parse_int(row.get("entry_index", ""))
@ -1239,7 +1409,7 @@ def compute_family_diff(class_name: str, slot: int) -> dict[str, Any]:
if not body_start_str or not body_end_str:
return None
try:
chunk = find_chunk_file(parse_int(row["entry_index"]))
chunk = find_chunk_file(parse_int(row["entry_index"]), extracted_root)
data = chunk.read_bytes()
return data[parse_int(body_start_str):parse_int(body_end_str)]
except (FileNotFoundError, ValueError):
@ -1551,6 +1721,9 @@ def intrinsic_display_name(name_hint: str | None, ordinal: int) -> str:
if not name_hint:
return f"intrinsic_{ordinal:04X}"
display = name_hint.replace("::", ".")
display = re.sub(r"(?<=\.)I_", "", display)
if display.startswith("I_"):
display = display[2:]
paren = display.find("(")
if paren != -1:
display = display[:paren]
@ -1962,13 +2135,123 @@ def detect_noop_compare_chain(
return None
def last_nonempty_block_index(
blocks: list[tuple[str, list[str]]],
start_index: int,
end_index: int,
) -> int | None:
for index in range(end_index - 1, start_index - 1, -1):
if blocks[index][1]:
return index
return None
def parse_selector_condition(condition: str) -> tuple[str, str] | None:
expr = strip_outer_parens(condition)
match = re.fullmatch(r"(.+?)\s*!=\s*(.+)", expr)
if match is None:
return None
return match.group(1).strip(), match.group(2).strip()
def render_selector_chain(
blocks: list[tuple[str, list[str]]],
label_to_index: dict[str, int],
start_index: int,
end_index: int,
return_labels: set[str],
) -> tuple[list[str], int] | None:
if not blocks[start_index][1]:
return None
base_terminal = parse_terminal_statement(blocks[start_index][1][-1])
if base_terminal is None or base_terminal.kind != "if":
return None
selector = parse_selector_condition(base_terminal.condition or "")
if selector is None:
return None
selector_expr, _ = selector
cursor = start_index
join_label: str | None = None
branches: list[tuple[str, list[str]]] = []
while cursor < end_index:
_, statements = blocks[cursor]
if not statements:
return None
terminal = parse_terminal_statement(statements[-1])
if terminal is None or terminal.kind != "if":
return None
parsed = parse_selector_condition(terminal.condition or "")
if parsed is None or parsed[0] != selector_expr:
return None
target_label = terminal.target or ""
target_index = label_to_index.get(target_label)
if target_index is None or target_index <= cursor + 1 or target_index > end_index:
return None
body_tail_index = last_nonempty_block_index(blocks, cursor + 1, target_index)
if body_tail_index is None:
return None
body_tail_terminal = parse_terminal_statement(blocks[body_tail_index][1][-1])
if body_tail_terminal is None or body_tail_terminal.kind != "goto":
return None
current_join = body_tail_terminal.target or ""
current_join_index = label_to_index.get(current_join)
if current_join_index is None or current_join_index > end_index:
return None
if current_join_index < target_index:
return None
if current_join_index == target_index and target_label != current_join:
return None
if join_label is None:
join_label = current_join
elif current_join != join_label:
return None
body_result = render_structured_region(
blocks,
label_to_index,
cursor + 1,
target_index,
return_labels,
{join_label},
)
if body_result is None:
return None
body_lines, _ = body_result
branches.append((invert_condition_text(terminal.condition or "condition"), body_lines))
if target_label == join_label:
break
cursor = target_index
if join_label is None:
return None
rendered: list[str] = []
for index, (condition, body_lines) in enumerate(branches):
branch_head = "if" if index == 0 else "else if"
rendered.append(f"{branch_head} ({condition}) {{")
rendered.extend(indent_lines(body_lines))
rendered.append("}")
return rendered, label_to_index[join_label]
def render_structured_region(
blocks: list[tuple[str, list[str]]],
label_to_index: dict[str, int],
start_index: int,
end_index: int,
return_labels: set[str],
exit_labels: set[str] | None = None,
) -> tuple[list[str], bool] | None:
allowed_exit_labels = set(exit_labels or ())
lines: list[str] = []
index = start_index
@ -2001,6 +2284,8 @@ def render_structured_region(
if target_label in return_labels:
lines.append("return;")
return lines, False
if target_label in allowed_exit_labels:
return lines, False
if target_index is None:
return None
if target_index == index + 1:
@ -2019,6 +2304,74 @@ def render_structured_region(
index += 1
continue
selector_chain = render_selector_chain(blocks, label_to_index, index, end_index, return_labels)
if selector_chain is not None:
selector_lines, selector_join_index = selector_chain
lines.extend(selector_lines)
index = selector_join_index
continue
if target_index <= end_index:
loop_tail_index = last_nonempty_block_index(blocks, index + 1, target_index)
if loop_tail_index is not None:
loop_tail_terminal = parse_terminal_statement(blocks[loop_tail_index][1][-1])
if loop_tail_terminal is not None and loop_tail_terminal.kind == "goto" and loop_tail_terminal.target == blocks[index][0]:
loop_body = render_structured_region(
blocks,
label_to_index,
index + 1,
target_index,
return_labels,
{blocks[index][0]},
)
if loop_body is not None:
loop_lines, _ = loop_body
lines.append(f"while ({invert_condition_text(terminal.condition or 'condition')}) {{")
lines.extend(indent_lines(loop_lines))
lines.append("}")
index = target_index
continue
true_tail_index = last_nonempty_block_index(blocks, index + 1, target_index)
if true_tail_index is not None:
true_tail_terminal = parse_terminal_statement(blocks[true_tail_index][1][-1])
if true_tail_terminal is not None and true_tail_terminal.kind == "goto":
join_label = true_tail_terminal.target or ""
join_index = label_to_index.get(join_label)
if join_index is not None and join_index > target_index and join_index <= end_index:
true_result = render_structured_region(
blocks,
label_to_index,
index + 1,
target_index,
return_labels,
{join_label},
)
false_result = render_structured_region(
blocks,
label_to_index,
target_index,
join_index,
return_labels,
{join_label},
)
if true_result is not None and false_result is not None:
true_lines, _ = true_result
false_lines, _ = false_result
lines.append(f"if ({invert_condition_text(terminal.condition or 'condition')}) {{")
lines.extend(indent_lines(true_lines))
lines.append("}")
if false_lines:
if false_lines[0].startswith("if "):
lines.append(f"else {false_lines[0]}")
lines.extend(false_lines[1:])
else:
lines.append("else {")
lines.extend(indent_lines(false_lines))
lines.append("}")
index = join_index
continue
inner_result = render_structured_region(blocks, label_to_index, index + 1, target_index, return_labels)
if inner_result is None:
return None
@ -2053,6 +2406,40 @@ def render_structured_pseudocode(blocks: list[tuple[str, list[str]]]) -> list[st
return structured[0]
def render_partially_structured_blocks(blocks: list[tuple[str, list[str]]]) -> list[str]:
if not blocks:
return []
label_to_index = {label: index for index, (label, _) in enumerate(blocks)}
return_labels = {
label
for label, statements in blocks
if len(statements) == 1 and statements[0] == "return;"
}
lines: list[str] = []
index = 0
while index < len(blocks):
label, statements = blocks[index]
selector_chain = render_selector_chain(blocks, label_to_index, index, len(blocks), return_labels)
if selector_chain is not None:
selector_lines, selector_join_index = selector_chain
lines.append(f" {label}:")
for statement in selector_lines:
lines.append(f" {statement}" if statement else "")
lines.append("")
index = selector_join_index
continue
lines.append(f" {label}:")
for statement in statements:
lines.append(f" {statement}")
lines.append("")
index += 1
return lines
def render_pseudocode(ir: dict[str, Any]) -> str:
slot_name = sanitize_identifier(ir["event"]["event_name_hint"] or f"slot_{ir['event']['slot']:02X}")
lines = [
@ -2076,11 +2463,7 @@ def render_pseudocode(ir: dict[str, Any]) -> str:
for statement in structured_lines:
lines.append(f" {statement}" if statement else "")
else:
for label, statements in rendered_blocks:
lines.append(f" {label}:")
for statement in statements:
lines.append(f" {statement}")
lines.append("")
lines.extend(render_partially_structured_blocks(rendered_blocks))
lines.append("}")
return "\n".join(lines) + "\n"
@ -2140,6 +2523,8 @@ def main() -> None:
parser = argparse.ArgumentParser(description="Proof-of-concept Crusader USECODE parser over extracted owner-loaded artifacts")
parser.add_argument("--class", dest="class_name", required=True, help="Class name from class_event_index.tsv, for example NPCTRIG")
parser.add_argument("--slot", required=True, help="Event slot, for example 0x0A")
parser.add_argument("--extracted-root", default=str(EXTRACTED_ROOT), help="Extracted USECODE root containing class_event_index.tsv and chunks/")
parser.add_argument("--variant", choices=["auto", "regret", "remorse"], default="auto", help="Crusader intrinsic numbering to apply (default: auto, fallback regret)")
parser.add_argument("--output", help="Write IR JSON to this file instead of stdout")
parser.add_argument("--emit-text", action="store_true", help="Emit a readable text listing beside the JSON")
parser.add_argument("--text-output", help="Write the text listing to this file")
@ -2153,8 +2538,9 @@ def main() -> None:
args = parser.parse_args()
slot = parse_int(args.slot)
event_row, layout_row = select_rows(args.class_name, slot)
ir = parse_body_ir(event_row, layout_row)
extracted_root = Path(args.extracted_root)
event_row, layout_row = select_rows(args.class_name, slot, extracted_root)
ir = parse_body_ir(event_row, layout_row, None if args.variant == "auto" else args.variant, extracted_root)
rendered_json = json.dumps(ir, indent=2)
if args.output:
@ -2184,7 +2570,7 @@ def main() -> None:
print(rendered_pseudocode)
if args.family_diff:
diff = compute_family_diff(args.class_name, slot)
diff = compute_family_diff(args.class_name, slot, extracted_root)
diff_json = json.dumps(diff, indent=2)
if args.family_diff_output:
Path(args.family_diff_output).write_text(diff_json + "\n", encoding="utf-8")

View file

@ -2,7 +2,12 @@ from __future__ import annotations
import unittest
from tools.poc_crusader_usecode_parser import render_structured_pseudocode
from tools.poc_crusader_usecode_parser import (
get_intrinsic_hints,
intrinsic_display_name,
render_partially_structured_blocks,
render_structured_pseudocode,
)
class UsecodeStructuringTests(unittest.TestCase):
@ -49,6 +54,100 @@ class UsecodeStructuringTests(unittest.TestCase):
self.assertIsNone(render_structured_pseudocode(blocks))
def test_if_else_branch_renders_as_structured_else(self) -> None:
blocks = [
("entry", ["if (Item.getMapNum(arg_06) != 0) goto block_015C;"]),
("block_00FD", ["if Intrinsic0000() goto block_0132;"]),
("block_0108", ["spawn class_0A18_slot_20(pid, 0, *(arg_06), arg_06);", "suspend;", "goto block_01C0;"]),
("block_0132", ["spawn class_0A18_slot_20(pid, 1, *(arg_06), arg_06);", "suspend;", "goto block_01C0;"]),
("block_015C", ["if Intrinsic0000() goto block_0195;"]),
("block_0167", ["spawn class_0A18_slot_20(pid, (0 + 0x0080), *(arg_06), arg_06);", "suspend;", "goto block_01C0;"]),
("block_0195", ["spawn class_0A18_slot_20(pid, (1 + 0x0080), *(arg_06), arg_06);", "suspend;"]),
("block_01C0", ["return;"]),
]
rendered = render_structured_pseudocode(blocks)
self.assertIsNotNone(rendered)
text = "\n".join(rendered or [])
self.assertIn("if (Item.getMapNum(arg_06) == 0) {", text)
self.assertIn("else {", text)
self.assertNotIn("goto block_01C0;", text)
def test_loop_header_and_back_edge_render_as_while(self) -> None:
blocks = [
("entry", ["/* loopscr value_u8=0x24 */"]),
("block_0118", ["if condition goto block_0151;"]),
("block_011B", ["if (Item.getFrame(item) != 0) goto block_014D;"]),
("block_012D", ["suspend;"]),
("block_014D", ["/* loopnext */", "goto block_0118;"]),
("block_0151", ["return;"]),
]
rendered = render_structured_pseudocode(blocks)
self.assertIsNotNone(rendered)
text = "\n".join(rendered or [])
self.assertIn("while (!condition) {", text)
self.assertNotIn("goto block_0118;", text)
def test_selector_ladder_renders_as_else_if_chain(self) -> None:
blocks = [
("entry", ["if (dir != 0) goto block_0358;"]),
("block_0339", ["x = 0;", "y = -1;", "goto block_0469;"]),
("block_0358", ["if (dir != 1) goto block_037F;"]),
("block_0360", ["x = 1;", "y = -1;", "goto block_0469;"]),
("block_037F", ["if (dir != 2) goto block_03A6;"]),
("block_0387", ["x = 1;", "y = 0;", "goto block_0469;"]),
("block_03A6", ["if (dir != 3) goto block_0469;"]),
("block_03AE", ["x = 1;", "y = 1;", "goto block_0469;"]),
("block_0469", ["return;"]),
]
rendered = render_structured_pseudocode(blocks)
self.assertIsNotNone(rendered)
text = "\n".join(rendered or [])
self.assertIn("if (dir == 0) {", text)
self.assertIn("else if (dir == 1) {", text)
self.assertIn("else if (dir == 2) {", text)
self.assertIn("else if (dir == 3) {", text)
self.assertNotIn("goto block_0469;", text)
def test_intrinsic_overlay_prefers_crusader_specific_names(self) -> None:
regret_intrinsics = get_intrinsic_hints("regret")
self.assertEqual(intrinsic_display_name(regret_intrinsics.get(0x0013), 0x0013), "UCMachine.rndRange")
self.assertEqual(intrinsic_display_name(regret_intrinsics.get(0x0027), 0x0027), "SpriteProcess.createSprite")
def test_remorse_intrinsic_overlay_uses_local_table(self) -> None:
remorse_intrinsics = get_intrinsic_hints("remorse")
self.assertEqual(intrinsic_display_name(remorse_intrinsics.get(0x0018), 0x0018), "UCMachine.rndRange")
self.assertEqual(intrinsic_display_name(remorse_intrinsics.get(0x0015), 0x0015), "AudioProcess.playSFXCru")
def test_selector_ladder_renders_in_raw_fallback(self) -> None:
blocks = [
("entry", ["goto block_0331;"]),
("block_0331", ["if (dir != 0) goto block_0358;"]),
("block_0339", ["x = 0;", "y = -1;", "goto block_0469;"]),
("block_0358", ["if (dir != 1) goto block_037F;"]),
("block_0360", ["x = 1;", "y = -1;", "goto block_0469;"]),
("block_037F", ["if (dir != 2) goto block_0469;"]),
("block_0387", ["x = 1;", "y = 0;", "goto block_0469;"]),
("block_0469", ["return;"]),
]
rendered = render_partially_structured_blocks(blocks)
text = "\n".join(rendered)
self.assertIn("block_0331:", text)
self.assertIn("if (dir == 0) {", text)
self.assertIn("else if (dir == 1) {", text)
self.assertIn("else if (dir == 2) {", text)
self.assertNotIn("block_0358:", text)
self.assertNotIn("goto block_0469;", text)
if __name__ == "__main__":
unittest.main()

View file

@ -0,0 +1,56 @@
#!/usr/bin/env python
from struct import unpack
from collections import defaultdict
#mode = 'u8'
#mode = 'remorse'
mode = 'regret'
if mode == 'u8':
from u8_ints import intrinsics
off_file = 'u8_UNKCOFF.DAT'
elif mode == 'remorse':
from remorse_ints import intrinsics
off_file = 'remorse_UNKCOFF.DAT'
#off_file = 'rem_es_UNKCOFF.DAT'
else:
off_file = 'regret_UNKCOFF.DAT'
from regret_ints import intrinsics
def print_dupes(ostrs):
vals = defaultdict(list)
for i, ostr in enumerate(ostrs):
vals[ostr].append(i)
lists = list(vals.values())
lists.sort()
for l in lists:
if len(l) > 1:
print(", ".join('%03X' % x for x in l))
def print_compare(vals):
for ino, (v, i) in enumerate(zip(vals, intrinsics)):
print("%s: (Int%03X) %s" % (v, ino, i))
def load_vals():
f = open(off_file, "rb")
offsets = f.read()
nints = len(offsets)/4
ioff = unpack('i' * nints, offsets)
ostrs = []
for i in ioff:
seg = (i & 0xffff0000) >> 16
off = i & 0xffff
ostr = 'Code%03d %04x:%04x' % (seg, 0x1000 + (seg - 1)*8, off)
ostrs.append(ostr)
return ostrs
def main():
vals = load_vals()
#print_dupes(vals)
print_compare(vals)
main()

View file

@ -0,0 +1,350 @@
World::I_getAlertActive
Item::I_getFrame
Item::I_setFrame
Item::I_getMapArray
Item::I_getStatus
Item::I_orStatus
Item::I_equip
Item::I_isPartlyOnScreen
Actor::I_isNPC
Item::I_getZ
World::I_gameDifficulty
Item::I_getQLo
Item::I_destroy
Actor::I_getUnkByte
Item::I_getX
Item::I_getY
AudioProcess::I_playSFXCru
Item::I_getShape
Item::I_explode
UCMachine::I_rndRange
Item::I_legalCreateAtCoords
Item::I_andStatus
World::I_getControlledNPCNum
Actor::I_getDir
Actor::I_getLastAnimSet
Item::I_fireWeapon
Item::I_create
Item::I_popToCoords
Actor::I_setDead
Item::I_push
Item::I_getEtherealTop
Item::I_getQLo
Item::I_setQLo
Item::I_getQHi
Item::I_setQHi
Item::I_getClosestDirectionInRange
Item::I_hurl
Item::I_getCY
Item::I_getCX
SpriteProcess::I_createSprite
Item::I_setNpcNum
AudioProcess::I_playSFXCru
Item::I_setShape
Item::I_pop
AudioProcess::I_stopSFXCru
Item::I_isCompletelyOn
Item::I_popToContainer
Actor::I_getHp
MainActor::I_getMana
Item::I_getFamily
Actor::I_destroyContents
SETVOLFORITEMSFX
Item::I_getDirToItem
AudioProcess::I_isSFXPlayingForObject
Item::I_getRangeIfVisible
AudioProcess::I_playSFXCru
Item::I_andStatus
Kernel::I_resetRef
Item::I_touch
Egg::I_getEggId
MainActor::I_addItemCru
Actor::I_getMap
Item::I_cast
0
AudioProcess::I_stopSFXCru
Item::I_isOn
Item::I_getQHi
Item::I_isOn
Item::I_getQHi
Item::I_isOn
Item::I_getQHi
Item::I_isOn
Item::I_getQHi
Item::I_isOn
Item::I_getQHi
Item::I_isOn
Item::I_getQHi
Actor::I_getCurrentActivityNo
Actor::I_isDead
Actor::I_clrInCombat
Actor::I_setDefaultActivity0
Actor::I_setDefaultActivity1
Actor::I_setDefaultActivity2
Actor::I_setActivity
World::I_setControlledNPCNum
Item::I_receiveHit
UCMachine::I_true
MainActor::I_setMana
Item::I_use
Item::I_setUnkEggType
MusicProcess::I_playMusic
Item::I_getSurfaceWeight
Item::I_isCentreOn
Item::I_setFrame
Actor::I_getLastAnimSet
Ultima8Engine::I_setAvatarInStasis
Actor::I_isBusy
Actor::I_getField0x13Flag2()
Actor::I_doAnim
Item::I_legalCreateAtPoint
Item::I_getPoint
Item::I_legalMoveToPoint
Item::I_fall
Item::I_hurl
Kernel::I_getNumProcesses
Item::I_getCY
0
0
MusicProcess::I_pauseMusic
MovieGump::I_playMovieCutsceneRegret
MusicProcess::I_unpauseMusic
Item::I_isInNpc
Ultima8Engine::I_setCruStasis
Ultima8Engine::I_clrCruStasis
PaletteFaderProcess::I_jumpToAllGivenColor
PaletteFaderProcess::I_fadeToGamePal
Actor::I_isDead
Actor::I_getNpcNum
UCMachine::I_false
UCMachine::I_true
Item::I_unequip
Item::I_andStatus
Item::I_move
Ultima8Engine::I_getUnkCrusaderFlag
Ultima8Engine::I_setUnkCrusaderFlag
Ultima8Engine::I_clrUnkCrusaderFlag
Actor::I_turnToward
PaletteFaderProcess::I_fadeToBlack
MainActor::I_clrKeycards
MusicProcess::I_stopMusic
PaletteFaderProcess::I_jumpToAllBlack
I_setUnkFlagA4()
I_clearUnkFlagA4()
MainActor::I_switchMap
MainActor::I_teleportToEgg
PaletteFaderProcess::I_fadeToGamePal
Actor::I_clrImmortal
Actor::I_setActivity
Item::I_getQuality
Item::I_setQuality
MainActor::I_getMaxEnergy
CameraProcess::I_moveTo
Actor::I_setImmortal
CameraProcess::I_getCameraX
CameraProcess::I_getCameraY
Item::I_setMapArray
Actor::I_getNpcNum
Item::I_shoot
CameraProcess::I_setCenterOn
Item::I_enterFastArea
Item::I_setBroken
Item::I_hurl
Actor::I_getNpcNum
Ultima8Engine::I_moveKeyDownRecently
MainActor::I_teleportToEgg
Actor::I_createActor
Actor::I_clrInCombat
PaletteFaderProcess::I_jumpToGreyScale
PaletteFaderProcess::I_jumpToNormalPalette
CruStatusGump::I_showStatusGump
Item::I_andStatus
Egg::I_getUnkEggType
Egg::I_setEggXRange
Item::I_setFrame
Item::I_overlaps
Item::I_isOn
Item::I_getQHi
Actor::I_getLastAnimSet
Item::I_getCY
CurrentMap::I_canExistAt
Item::I_isOn
Actor::I_isDead
Item::I_hurl
Item::I_inFastArea
Item::I_getQHi
Item::I_andStatus
Item::I_hurl
Item::I_andStatus
Item::I_hurl
Item::I_andStatus
Item::I_getDirToCoords
MainActor::I_removeItemCru
UCMachine::I_true
Actor::I_getNpcNum
Item::I_getCY
Item::I_isOn
Item::I_getFootpadData
Actor::I_isDead
Actor::I_createActorCru
Actor::I_setActivity
KeypadGump::I_showKeypad
Item::I_andStatus
ComputerGump::I_readComputer
UCMachine::I_numToStr
UCMachine::I_false
Actor::I_getDir
Item::I_getQHi
Item::I_setQuality
Item::I_hurl
Actor::I_addHp
CruHealerProcess::I_create
Item::I_equip
Item::I_setBroken
Item::I_isOn
Actor::I_teleport
Item::I_getDirFromTo16
Item::I_getQHi
Item::I_isOn
Actor::I_isInCombat
Actor::I_getLastActivityNo
Actor::I_setCombatTactic
Actor::I_setDead
CameraProcess::I_getCameraY
Actor::I_getEquip
Actor::I_setEquip
Actor::I_getDefaultActivity0
Actor::I_getDefaultActivity1
Actor::I_getDefaultActivity2
Actor::I_getLastAnimSet
Actor::I_isFalling
Item::I_getQLo
Item::I_getQHi
Actor::I_getNpcNum
Actor::I_setUnkByte
Item::I_hurl
Actor::I_setDead
Item::I_getQLo
Item::I_getCY
Actor::I_getNpcNum
Item::I_hurl
Actor::I_getNpcNum
Item::I_hurl
Actor::I_getNpcNum
Item::I_hurl
Actor::I_getNpcNum
Item::I_hurl
Actor::I_getNpcNum
Item::I_hurl
Actor::I_getNpcNum
Item::I_hurl
Actor::I_getNpcNum
Item::I_hurl
Actor::I_getNpcNum
Item::I_hurl
Actor::I_getNpcNum
Item::I_hurl
Actor::I_getNpcNum
Item::I_andStatus
Actor::I_setDead
Item::I_getQLo
Actor::I_setDead
Actor::I_getMaxHp
Actor::I_setHp
Item::I_getQLo
BatteryChargerProcess::I_create
Item::I_hurl
Item::I_andStatus
Item::I_isOn
Actor::I_isDead
Actor::I_setActivity
Item::I_getQHi
Actor::I_getLastAnimSet
Actor::I_setDead
Item::I_getQLo
Item::I_isOn
Item::I_getQHi
Item::I_isOn
Item::I_getQHi
Item::I_hurl
Actor::I_getNpcNum
Item::I_getCY
Item::I_hurl
Item::I_isOn
MainActor::I_hasKeycard
UCMachine::I_false
Actor::I_isDead
Actor::I_clrImmortal
UCMachine::I_numToStr
Item::I_getQHi
Actor::I_setActivity
Item::I_andStatus
Actor::I_getNpcNum
Item::I_andStatus
Actor::I_getNpcNum
Item::I_isCrusTypeNPC
Item::I_andStatus
Actor::I_getNpcNum
Item::I_avatarStoleSomething
Item::I_andStatus
Actor::I_getNpcNum
Item::I_getQ
Item::I_setQ
Item::I_andStatus
Actor::I_getNpcNum
Item::I_andStatus
Actor::I_getNpcNum
Item::I_andStatus
Actor::I_getNpcNum
Item::I_andStatus
Actor::I_getNpcNum
Item::I_andStatus
Actor::I_getNpcNum
Actor::I_getDir
Item::I_andStatus
Actor::I_getNpcNum
Item::I_fireDistance
Item::I_andStatus
Item::I_hurl
Item::I_andStatus
CameraProcess::I_getCameraY
CameraProcess::I_getCameraZ
CruStatusGump::I_hideStatusGump
Actor::I_clrInCombat
Item::I_getTypeFlag
Actor::I_getNpcNum
Item::I_hurl
Item::I_getCY
Item::I_getCZ
Item::I_setFrame
AudioProcess::I_playSFX
AudioProcess::I_isSFXPlaying
World::I_clrAlertActive
PaletteFaderProcess::I_fadeToGivenColor
Actor::I_isDead
Actor::I_setDead
Game::I_playCredits
PaletteFaderProcess::I_jumpToAllWhite
Item::I_getFamilyOfType
Actor::I_getNpcNum
Item::I_getQLo
Item::I_andStatus
Ultima8Engine::I_getCurrentTimerTick
World::I_setAlertActive
Ultima8Engine::I_getAvatarInStasis
MainActor::I_addItemCru
Egg::I_getEggXRange
Actor::I_clrInCombat
PaletteFaderProcess::I_jumpToAllGivenColor
Item::I_setFrame
UCMachine::I_numToStr
Actor::I_getDir
UCMachine::I_numToStr
Item::I_isOn
Actor::I_getDir
Actor::I_setDead
Item::I_getQHi
Item::I_getQLo
UCMachine::I_numToStr
Actor::I_getDir
UNUSED15D

View file

@ -0,0 +1,350 @@
Code002 1008:005d: (Int0B6) Intrinsic00B6()
Code002 1008:0090: (Int083) I_setUnkFlagA4()
Code002 1008:0096: (Int084) I_clearUnkFlagA4()
Code002 1008:009c: (Int145) Intrinsic0145()
Code002 1008:00e7: (Int070) Ultima8Engine::I_setCruStasis()
Code002 1008:00ed: (Int071) Ultima8Engine::I_clrCruStasis()
Code002 1008:0123: (Int06B) Intrinsic006B()
Code002 1008:0134: (Int06A) Intrinsic006A()
Code002 1008:03ab: (Int03C) MainActor::I_addItemCru()
Code002 1008:03ab: (Int14E) MainActor::I_addItemCru()
Code002 1008:0b7f: (Int0B5) Intrinsic00B5()
Code002 1008:0f16: (Int07D) Ultima8Engine::I_clrUnkCrusaderFlag()
Code002 1008:0f1c: (Int07B) Ultima8Engine::I_getUnkCrusaderFlag()
Code002 1008:0f20: (Int07C) Ultima8Engine::I_setUnkCrusaderFlag()
Code007 1030:0c60: (Int085) Intrinsic0085()
Code008 1038:0605: (Int09D) PaletteFaderProcess::I_jumpToGreyScale()
Code009 1040:03b8: (Int14B) Ultima8Engine::getCurrentTimerTick()
Code010 1048:134f: (Int024) Item::hurl(sint16,sint16,sint16,sint16)
Code010 1048:134f: (Int067) Item::hurl(sint16,sint16,sint16,sint16)
Code010 1048:134f: (Int097) Item::hurl(sint16,sint16,sint16,sint16)
Code010 1048:134f: (Int0AC) Item::hurl(sint16,sint16,sint16,sint16)
Code010 1048:134f: (Int0B0) Item::hurl(sint16,sint16,sint16,sint16)
Code010 1048:134f: (Int0B2) Item::hurl(sint16,sint16,sint16,sint16)
Code010 1048:134f: (Int0C6) Item::hurl(sint16,sint16,sint16,sint16)
Code010 1048:134f: (Int0E0) Item::hurl(sint16,sint16,sint16,sint16)
Code010 1048:134f: (Int0E5) Item::hurl(sint16,sint16,sint16,sint16)
Code010 1048:134f: (Int0E7) Item::hurl(sint16,sint16,sint16,sint16)
Code010 1048:134f: (Int0E9) Item::hurl(sint16,sint16,sint16,sint16)
Code010 1048:134f: (Int0EB) Item::hurl(sint16,sint16,sint16,sint16)
Code010 1048:134f: (Int0ED) Item::hurl(sint16,sint16,sint16,sint16)
Code010 1048:134f: (Int0EF) Item::hurl(sint16,sint16,sint16,sint16)
Code010 1048:134f: (Int0F1) Item::hurl(sint16,sint16,sint16,sint16)
Code010 1048:134f: (Int0F3) Item::hurl(sint16,sint16,sint16,sint16)
Code010 1048:134f: (Int0F5) Item::hurl(sint16,sint16,sint16,sint16)
Code010 1048:134f: (Int0FF) Item::hurl(sint16,sint16,sint16,sint16)
Code010 1048:134f: (Int10C) Item::hurl(sint16,sint16,sint16,sint16)
Code010 1048:134f: (Int10F) Item::hurl(sint16,sint16,sint16,sint16)
Code010 1048:134f: (Int133) Item::hurl(sint16,sint16,sint16,sint16)
Code010 1048:134f: (Int13B) Item::hurl(sint16,sint16,sint16,sint16)
Code010 1048:13eb: (Int066) Item::fall(void)
Code011 1050:0079: (Int15D) Intrinsic015D()
Code012 1058:00a1: (Int077) Game::I_isViolenceEnabled()
Code012 1058:00c1: (Int056) Game::I_isReleaseBuild()
Code021 10a0:04c4: (Int086) teleportToEgg(sint16,int,uint8)
Code021 10a0:04ed: (Int09A) teleportToEgg(sint16,uint8)
Code021 10a0:0513: (Int14F) Egg::getEggXRange(void)
Code021 10a0:0551: (Int0A2) Egg::setEggXRange(uint16)
Code021 10a0:05bb: (Int03B) Egg::getEggId(void)
Code023 10b0:013e: (Int00E) Item::getX(void)
Code023 10b0:0176: (Int00F) Item::getY(void)
Code023 10b0:0266: (Int009) Item::getZ(void)
Code023 10b0:029a: (Int026) Item::getCX(void)
Code023 10b0:02de: (Int025) Item::getCY(void)
Code023 10b0:02de: (Int069) Item::getCY(void)
Code023 10b0:02de: (Int0A8) Item::getCY(void)
Code023 10b0:02de: (Int0B8) Item::getCY(void)
Code023 10b0:02de: (Int0E3) Item::getCY(void)
Code023 10b0:02de: (Int10E) Item::getCY(void)
Code023 10b0:02de: (Int13C) Item::getCY(void)
Code023 10b0:0322: (Int13D) Item::getCZ(void)
Code023 10b0:0602: (Int05B) Item::getSurfaceWeight(void)
Code023 10b0:068f: (Int011) Item::getShape(void)
Code023 10b0:0717: (Int02A) Item::setShape()
Code023 10b0:0826: (Int001) Item::getFrame(void)
Code023 10b0:0882: (Int002) Item::setFrame(uint16)
Code023 10b0:0882: (Int05D) Item::setFrame(uint16)
Code023 10b0:0882: (Int0A3) Item::setFrame(uint16)
Code023 10b0:0882: (Int13E) Item::setFrame(uint16)
Code023 10b0:0882: (Int152) Item::setFrame(uint16)
Code023 10b0:0c96: (Int028) Item::setNpcNum(sint16)
Code023 10b0:0cb2: (Int075) Item::getNpcNum(void)
Code023 10b0:0cb2: (Int092) Item::getNpcNum(void)
Code023 10b0:0cb2: (Int098) Item::getNpcNum(void)
Code023 10b0:0cb2: (Int0B7) Item::getNpcNum(void)
Code023 10b0:0cb2: (Int0DE) Item::getNpcNum(void)
Code023 10b0:0cb2: (Int0E4) Item::getNpcNum(void)
Code023 10b0:0cb2: (Int0E6) Item::getNpcNum(void)
Code023 10b0:0cb2: (Int0E8) Item::getNpcNum(void)
Code023 10b0:0cb2: (Int0EA) Item::getNpcNum(void)
Code023 10b0:0cb2: (Int0EC) Item::getNpcNum(void)
Code023 10b0:0cb2: (Int0EE) Item::getNpcNum(void)
Code023 10b0:0cb2: (Int0F0) Item::getNpcNum(void)
Code023 10b0:0cb2: (Int0F2) Item::getNpcNum(void)
Code023 10b0:0cb2: (Int0F4) Item::getNpcNum(void)
Code023 10b0:0cb2: (Int0F6) Item::getNpcNum(void)
Code023 10b0:0cb2: (Int10D) Item::getNpcNum(void)
Code023 10b0:0cb2: (Int119) Item::getNpcNum(void)
Code023 10b0:0cb2: (Int11B) Item::getNpcNum(void)
Code023 10b0:0cb2: (Int11E) Item::getNpcNum(void)
Code023 10b0:0cb2: (Int121) Item::getNpcNum(void)
Code023 10b0:0cb2: (Int125) Item::getNpcNum(void)
Code023 10b0:0cb2: (Int127) Item::getNpcNum(void)
Code023 10b0:0cb2: (Int129) Item::getNpcNum(void)
Code023 10b0:0cb2: (Int12B) Item::getNpcNum(void)
Code023 10b0:0cb2: (Int12D) Item::getNpcNum(void)
Code023 10b0:0cb2: (Int130) Item::getNpcNum(void)
Code023 10b0:0cb2: (Int13A) Item::getNpcNum(void)
Code023 10b0:0cb2: (Int148) Item::getNpcNum(void)
Code023 10b0:0cce: (Int091) Item::setMapNum(sint16)
Code023 10b0:0cea: (Int003) Item::getMapNum(void)
Code023 10b0:0d06: (Int122) Item::getQ(void)
Code023 10b0:0d1c: (Int08A) Item::getQuality(void)
Code023 10b0:0d60: (Int08B) Item::setQuality(sint16)
Code023 10b0:0d60: (Int0C5) Item::setQuality(sint16)
Code023 10b0:0da3: (Int0A1) Item::getUnkEggType(void)
Code023 10b0:0e43: (Int059) Item::setUnkEggType(sint16)
Code023 10b0:0fd1: (Int123) Item::setQ(uint)
Code023 10b0:1036: (Int031) Item::getFamily(void)
Code023 10b0:1061: (Int139) Item::getTypeFlagCrusader(sint16)
Code023 10b0:10aa: (Int004) Item::getStatus(void)
Code023 10b0:10c0: (Int063) Item::legalCreateAtPoint(uint16,uint16,WorldPoint&)
Code023 10b0:114d: (Int014) Item::legalCreateAtCoords(uint16,uint16,uint16,uint16,uint16)
Code023 10b0:1259: (Int01A) Item::create(uint16,uint16)
Code023 10b0:1383: (Int01B) Item::popToCoords(uint16,uint16,uint8)
Code023 10b0:139a: (Int02E) Item::popToContainer(uint16)
Code023 10b0:13aa: (Int02B) Item::pop(void)
Code023 10b0:13c4: (Int01D) Item::push(void)
Code023 10b0:13d7: (Int00C) Item::destroy(void)
Code023 10b0:14f3: (Int032) Actor::destroyContents(void)
Code023 10b0:1575: (Int07A) Item::move(uint16,uint16,uint8)
Code023 10b0:1791: (Int065) Item::legalMoveToPoint(WorldPoint&,uint16,uint16)
Code023 10b0:1a2d: (Int0B4) Item::getDirToCoords(uint16,uint16)
Code023 10b0:1ab8: (Int034) Item::getDirToItem(uint16)
Code023 10b0:1aed: (Int0BA) Item::getFootpad(sint16&,sint16&,sint16&)
Code023 10b0:1d09: (Int0A4) Item::overlaps(uint16)
Code023 10b0:1f2e: (Int041) Item::isOn(uint16)
Code023 10b0:1f2e: (Int043) Item::isOn(uint16)
Code023 10b0:1f2e: (Int045) Item::isOn(uint16)
Code023 10b0:1f2e: (Int047) Item::isOn(uint16)
Code023 10b0:1f2e: (Int049) Item::isOn(uint16)
Code023 10b0:1f2e: (Int04B) Item::isOn(uint16)
Code023 10b0:1f2e: (Int0A5) Item::isOn(uint16)
Code023 10b0:1f2e: (Int0AA) Item::isOn(uint16)
Code023 10b0:1f2e: (Int0B9) Item::isOn(uint16)
Code023 10b0:1f2e: (Int0CB) Item::isOn(uint16)
Code023 10b0:1f2e: (Int0CF) Item::isOn(uint16)
Code023 10b0:1f2e: (Int101) Item::isOn(uint16)
Code023 10b0:1f2e: (Int108) Item::isOn(uint16)
Code023 10b0:1f2e: (Int10A) Item::isOn(uint16)
Code023 10b0:1f2e: (Int110) Item::isOn(uint16)
Code023 10b0:1f2e: (Int156) Item::isOn(uint16)
Code023 10b0:1fa3: (Int02D) Item::isCompletelyOn(uint16)
Code023 10b0:247a: (Int064) Item::getPoint(WorldPoint&)
Code023 10b0:24ca: (Int008) Item::isNpc(void)
Code023 10b0:24f9: (Int06F) Item::isInNpc(void)
Code023 10b0:2558: (Int03A) Item::touch(void)
Code023 10b0:25b6: (Int005) Item::orStatus(sint16)
Code023 10b0:25cf: (Int015) Item::andStatus(void)
Code023 10b0:25cf: (Int038) Item::andStatus(void)
Code023 10b0:25cf: (Int079) Item::andStatus(void)
Code023 10b0:25cf: (Int0A0) Item::andStatus(void)
Code023 10b0:25cf: (Int0AF) Item::andStatus(void)
Code023 10b0:25cf: (Int0B1) Item::andStatus(void)
Code023 10b0:25cf: (Int0B3) Item::andStatus(void)
Code023 10b0:25cf: (Int0BF) Item::andStatus(void)
Code023 10b0:25cf: (Int0F7) Item::andStatus(void)
Code023 10b0:25cf: (Int100) Item::andStatus(void)
Code023 10b0:25cf: (Int118) Item::andStatus(void)
Code023 10b0:25cf: (Int11A) Item::andStatus(void)
Code023 10b0:25cf: (Int11D) Item::andStatus(void)
Code023 10b0:25cf: (Int120) Item::andStatus(void)
Code023 10b0:25cf: (Int124) Item::andStatus(void)
Code023 10b0:25cf: (Int126) Item::andStatus(void)
Code023 10b0:25cf: (Int128) Item::andStatus(void)
Code023 10b0:25cf: (Int12A) Item::andStatus(void)
Code023 10b0:25cf: (Int12C) Item::andStatus(void)
Code023 10b0:25cf: (Int12F) Item::andStatus(void)
Code023 10b0:25cf: (Int132) Item::andStatus(void)
Code023 10b0:25cf: (Int134) Item::andStatus(void)
Code023 10b0:25cf: (Int14A) Item::andStatus(void)
Code023 10b0:2614: (Int096) Item::setBroken()
Code023 10b0:2614: (Int0CA) Item::setBroken()
Code023 10b0:26ab: (Int058) Item::use(void)
Code023 10b0:2952: (Int076) IntrinsicReturn0
Code023 10b0:2952: (Int0C2) IntrinsicReturn0
Code023 10b0:2952: (Int112) IntrinsicReturn0
Code023 10b0:2a1e: (Int006) Item::equip(sint16)
Code023 10b0:2a1e: (Int0C9) Item::callEvent0A(sint16)
Code023 10b0:2a51: (Int078) Item::unequip(sint16)
Code023 10b0:2b34: (Int095) Item::enterFastArea(void)
Code023 10b0:2f5e: (Int03E) Item::callEvent11(sint16)
Code023 10b0:2ffa: (Int11F) Item::AvatarStoleSomehting(uint16)
Code023 10b0:385e: (Int021) Item::getQHi(void)
Code023 10b0:385e: (Int042) Item::getQHi(void)
Code023 10b0:385e: (Int044) Item::getQHi(void)
Code023 10b0:385e: (Int046) Item::getQHi(void)
Code023 10b0:385e: (Int048) Item::getQHi(void)
Code023 10b0:385e: (Int04A) Item::getQHi(void)
Code023 10b0:385e: (Int04C) Item::getQHi(void)
Code023 10b0:385e: (Int0A6) Item::getQHi(void)
Code023 10b0:385e: (Int0AE) Item::getQHi(void)
Code023 10b0:385e: (Int0C4) Item::getQHi(void)
Code023 10b0:385e: (Int0CE) Item::getQHi(void)
Code023 10b0:385e: (Int0DD) Item::getQHi(void)
Code023 10b0:385e: (Int104) Item::getQHi(void)
Code023 10b0:385e: (Int109) Item::getQHi(void)
Code023 10b0:385e: (Int10B) Item::getQHi(void)
Code023 10b0:385e: (Int116) Item::getQHi(void)
Code023 10b0:385e: (Int159) Item::getQHi(void)
Code023 10b0:387a: (Int022) Item::setQHi(sint16)
Code023 10b0:38a9: (Int00B) Item::getQLo(void)
Code023 10b0:38a9: (Int01F) Item::getQLo(void)
Code023 10b0:38a9: (Int0DC) Item::getQLo(void)
Code023 10b0:38a9: (Int0E2) Item::getQLo(void)
Code023 10b0:38a9: (Int0F9) Item::getQLo(void)
Code023 10b0:38a9: (Int0FD) Item::getQLo(void)
Code023 10b0:38a9: (Int107) Item::getQLo(void)
Code023 10b0:38a9: (Int149) Item::getQLo(void)
Code023 10b0:38a9: (Int15A) Item::getQLo(void)
Code023 10b0:38c2: (Int020) Item::setQLo(sint16)
Code023 10b0:38f1: (Int093) Item::shoot(WorldPoint&,sint16,sint16)
Code023 10b0:3954: (Int010) Item::playSfxCru()
Code023 10b0:3973: (Int029) AudioProcess::I_playSFXCru()
Code023 10b0:39b1: (Int037) udioProcess::I_playSFXCru()
Code023 10b0:39d0: (Int040) AudioProcess::I_stopSFXCru()
Code023 10b0:39ef: (Int02C) AudioProcess::I_stopSFXCru()
Code023 10b0:3a0b: (Int035) AudioProcess::I_getUnknown()
Code023 10b0:3a33: (Int033) AudioProcess::I_setVolumeForItemSFX()
Code023 10b0:3a56: (Int0AD) Item::I_inFastArea()
Code023 10b0:3cd8: (Int0BC) Actor::createNPCCru()
Code023 10b0:41c1: (Int007) Item::isEntirelyOnScreen()
Code023 10b0:4437: (Int099) Ultima8Engine::I_moveKeyDownRecently()
Code023 10b0:443f: (Int11C) Item::I_isCrusTypeNPC()
Code023 10b0:446e: (Int05C) Item::I_isCentreOn()
Code024 10b8:26f8: (Int01E) Item::I_getEtherealTop()
Code029 10e0:0000: (Int023) Item::I_getClosestDirectionInRange()
Code029 10e0:01c7: (Int0CD) Item::I_getDirFromTo16()
Code030 10e8:0000: (Int14C) World::I_setAlertActiveRegret()
Code030 10e8:0247: (Int141) World::I_clrAlertActiveRegret()
Code030 10e8:048d: (Int000) World::I_getAlertActive()
Code032 10f8:0261: (Int060) Actor::I_isBusy()
Code032 10f8:039a: (Int062) Actor::I_doAnim()
Code032 10f8:2198: (Int0DB) Actor::I_isInCombat()
Code032 10f8:21b7: (Int0D0) Actor::I_isInCombat()
Code032 10f8:2278: (Int04E) Actor::isDead(void)
Code032 10f8:2278: (Int074) Actor::isDead(void)
Code032 10f8:2278: (Int0AB) Actor::isDead(void)
Code032 10f8:2278: (Int0BB) Actor::isDead(void)
Code032 10f8:2278: (Int102) Actor::isDead(void)
Code032 10f8:2278: (Int113) Actor::isDead(void)
Code032 10f8:2278: (Int143) Actor::isDead(void)
Code032 10f8:22a8: (Int01C) Actor::I_setDead()
Code032 10f8:22a8: (Int0D3) Actor::I_setDead())
Code032 10f8:22a8: (Int0E1) Actor::I_setDead()
Code032 10f8:22a8: (Int0F8) Actor::I_setDead()
Code032 10f8:22a8: (Int0FA) Actor::I_setDead()
Code032 10f8:22a8: (Int106) Actor::I_setDead()
Code032 10f8:22a8: (Int144) Actor::I_setDead()
Code032 10f8:22a8: (Int158) Actor::I_setDead()
Code032 10f8:2403: (Int08E) Actor::I_setImmortal()
Code032 10f8:241e: (Int088) Actor::I_clrImmortal()
Code032 10f8:241e: (Int114) Actor::I_clrImmortal()
Code032 10f8:2499: (Int061) Intrinsic0061()
Code032 10f8:280e: (Int09B) Actor::I_createActor()
Code032 10f8:2e86: (Int0D5) Actor::I_getEquip()
Code032 10f8:2eb9: (Int0D6) Actor::I_setEquip()
Code032 10f8:30b8: (Int0CC) Actor::I_teleport()
Code032 10f8:3243: (Int03D) Actor::I_getMap()
Code032 10f8:329d: (Int050) Actor::I_setDefaultActivity0
Code032 10f8:32ba: (Int051) Actor::I_setDefaultActivity1
Code032 10f8:32d7: (Int052) Actor::I_setDefaultActivity2
Code032 10f8:332b: (Int0D7) Actor::I_getDefaultActivity0()
Code032 10f8:3345: (Int0D8) Actor::I_getDefaultActivity1()
Code032 10f8:335f: (Int0D9) Actor::I_getDefaultActivity2()
Code032 10f8:33b5: (Int053) Actor::I_setActivity
Code032 10f8:33b5: (Int089) Actor::I_setActivity()
Code032 10f8:33b5: (Int0BD) Actor::I_setActivity()
Code032 10f8:33b5: (Int103) Actor::I_setActivity()
Code032 10f8:33b5: (Int117) Actor::I_setActivity()
Code032 10f8:389f: (Int04F) Actor::I_clrInCombat()
Code032 10f8:389f: (Int09C) Actor::I_clrInCombat()
Code032 10f8:389f: (Int138) Actor::I_clrInCombat()
Code032 10f8:389f: (Int150) Actor::I_clrInCombat()
Code032 10f8:3961: (Int07E) Actor::I_turnToward()
Code032 10f8:39ea: (Int02F) Actor::I_getHp()
Code032 10f8:3a03: (Int04D) Actor::I_getCurrentActivityNo()
Code032 10f8:3a6b: (Int0FB) Dtable::I_getMaxHPForNPC()
Code032 10f8:3b4a: (Int030) Actor::I_getMana()
Code032 10f8:3b64: (Int057) MainActor::I_setMana()
Code032 10f8:3b81: (Int08C) MainActor::I_getMaxEnergy()
Code032 10f8:3c56: (Int0FC) Actor::I_setHP()
Code032 10f8:3c8c: (Int0D2) Actor::I_setCombatTactic()
Code032 10f8:3d8e: (Int14D) Ultima8Engine::I_getAvatarInStasis()
Code032 10f8:3d96: (Int05F) Ultima8Engine::I_setAvatarInStasis()
Code032 10f8:3e0c: (Int017) Actor::I_getDir()
Code032 10f8:3e0c: (Int0C3) Actor::I_getDir()
Code032 10f8:3e0c: (Int12E) Actor::I_getDir()
Code032 10f8:3e0c: (Int154) Actor::I_getDir()
Code032 10f8:3e0c: (Int157) Actor::I_getDir()
Code032 10f8:3e0c: (Int15C) Actor::I_getDir()
Code032 10f8:3e26: (Int018) Actor::I_getLastAnimSet()
Code032 10f8:3e26: (Int05E) Actor::I_getLastAnimSet()
Code032 10f8:3e26: (Int0A7) Actor::I_getLastAnimSet()
Code032 10f8:3e26: (Int0DA) Actor::I_getLastAnimSet()
Code032 10f8:3e26: (Int105) Actor::I_getLastAnimSet()
Code032 10f8:3e40: (Int0C7) Actor::I_addHp()
Code032 10f8:3fcd: (Int00A) World::I_gameDifficulty()
Code032 10f8:43e0: (Int111) MainActor::I_hasKeycard()
Code032 10f8:4443: (Int080) MainActor::I_clrKeycards()
Code032 10f8:44f4: (Int00D) Intrinsic000D()
Code032 10f8:4511: (Int0DF) Intrinsic00DF()
Code032 10f8:452f: (Int0D1) Actor::I_getNPCDataField0x4()
Code035 1110:03ec: (Int147) Item::I_getFamilyOfType()
Code041 1140:04cb: (Int055) Intrinsic0055()
Code041 1140:1a86: (Int019) Intrinsic0019()
Code041 1140:20cb: (Int131) Intrinsic0131()
Code041 1140:258e: (Int036) Intrinsic0036()
Code041 1140:2a78: (Int0FE) Intrinsic00FE()
Code041 1140:2a98: (Int0C8) Intrinsic00C8()
Code042 1148:0038: (Int054) World::I_setControlledNPCNum
Code042 1148:0048: (Int016) World::I_getControlledNPCNum()
Code043 1150:00de: (Int027) SpriteProcess::I_createSprite()
Code045 1160:0a77: (Int012) Item::I_explode()
Code045 1160:0d96: (Int0A9) Intrinsic00A9()
Code052 1198:0013: (Int03F) Intrinsic003F()
Code052 1198:0ce8: (Int08D) CameraProcess::I_moveTo(x,y,z)
Code052 1198:1ae6: (Int094) CameraProcess::I_setCenterOn(objid)
Code052 1198:1d06: (Int08F) Camera::getX(void)
Code052 1198:1d0e: (Int090) Camera::getY(void)
Code052 1198:1d0e: (Int0D4) CameraProcess::I_getCameraY()
Code052 1198:1d0e: (Int135) Camera::getY(void)
Code052 1198:1d16: (Int136) Camera::getZ(void)
Code058 11c8:0000: (Int137) Intrinsic0137()
Code058 11c8:0006: (Int09F) Intrinsic009F()
Code062 11e8:0977: (Int068) Kernel::getNumProcesses(uint16,ProcessType)
Code062 11e8:0c63: (Int039) Kernel::resetRef(uint16,ProcessType)
Code067 1210:01a2: (Int05A) MusicProcess::I_playMusic()
Code067 1210:02a3: (Int06C) MusicProcess::I_pauseMusic()
Code067 1210:02c1: (Int06E) MusicProcess::I_unpauseMusic()
Code067 1210:02df: (Int081) MusicProcess::I_stopMusic()
Code092 12d8:0293: (Int013) UCMachine::I_rndRange()
Code092 12d8:04d0: (Int13F) AudioProcess::I_playAmbientSFX()
Code092 12d8:05ba: (Int140) AudioProcess::I_isSFXPlaying()
Code115 1390:0005: (Int0C0) ComputerGump::I_readComputer()
Code119 13b0:00fe: (Int0BE) KeypadGump::I_showKeypad()
Code127 13f0:0073: (Int0C1) UCMachine::I_numToStr()
Code127 13f0:0073: (Int115) UCMachine::I_numToStr()
Code127 13f0:0073: (Int153) UCMachine::I_numToStr()
Code127 13f0:0073: (Int155) UCMachine::I_numToStr()
Code127 13f0:0073: (Int15B) UCMachine::I_numToStr()
Code132 1418:071b: (Int07F) PaletteFaderProcess::I_fadeToBlack()
Code132 1418:0729: (Int073) PaletteFaderProcess::I_fadeFromBlack()
Code132 1418:0801: (Int087) PaletteFaderProcess::I_fadeFromBlack()
Code132 1418:080f: (Int082) PaletteFaderProcess::I_jumpToAllBlack()
Code132 1418:0899: (Int146) PaletteFaderProcess::I_jumpToAllGrey()
Code132 1418:0923: (Int072) Intrinsic0072()
Code132 1418:0923: (Int151) Intrinsic0072()
Code132 1418:0b05: (Int09E) PaletteFaderProcess::I_jumpToNormalPalette()
Code132 1418:0b3b: (Int142) PaletteFaderProcess::I_fadeToGivenColor()
Code138 1448:0b5a: (Int06D) Intrinsic006D()

View file

@ -0,0 +1,375 @@
intrinsics = [
"World::I_getAlertActive()",
"Item::getFrame(void)",
"Item::setFrame(uint16)",
"Item::getMapNum(void)",
"Item::getStatus(void)",
"Item::orStatus(sint16)",
"Item::equip(sint16)",
"Item::isEntirelyOnScreen()",
"Item::isNpc(void)",
"Item::getZ(void)",
"World::I_gameDifficulty()",
"Item::getQLo(void)",
"Item::destroy(void)",
"Intrinsic000D()",
"Item::getX(void)",
"Item::getY(void)",
"Item::playSfxCru()",
"Item::getShape(void)",
"Item::I_explode()",
"UCMachine::I_rndRange()",
"Item::legalCreateAtCoords(uint16,uint16,uint16,uint16,uint16)",
"Item::andStatus(void)",
"World::I_getControlledNPCNum()",
"Actor::I_getDir()",
"Actor::I_getLastAnimSet()",
"Intrinsic0019()",
"Item::create(uint16,uint16)",
"Item::popToCoords(uint16,uint16,uint8)",
"Actor::I_setDead()",
"Item::push(void)",
"Item::I_getEtherealTop()",
"Item::getQLo(void)",
"Item::setQLo(sint16)",
"Item::getQHi(void)",
"Item::setQHi(sint16)",
"Item::I_getClosestDirectionInRange()",
"Item::hurl(sint16,sint16,sint16,sint16)",
"Item::getCY(void)",
"Item::getCX(void)",
"SpriteProcess::I_createSprite()",
"Item::setNpcNum(sint16)",
"AudioProcess::I_playSFXCru()",
"Item::setShape()",
"Item::pop(void)",
"AudioProcess::I_stopSFXCru()",
"Item::isCompletelyOn(uint16)",
"Item::popToContainer(uint16)",
"Actor::I_getHp()",
"Actor::I_getMana()",
"Item::getFamily(void)",
"Actor::destroyContents(void)",
"Intrinsic0033()",
"Item::getDirToItem(uint16)",
"Intrinsic0035()",
"Intrinsic0036()",
"udioProcess::I_playSFXCru()",
"Item::andStatus(void)",
"Kernel::resetRef(uint16,ProcessType)",
"Item::touch(void)",
"Egg::getEggId(void)",
"MainActor::I_addItemCru()",
"Actor::I_getMap()",
"Item::callEvent11(sint16)",
"Intrinsic003F()",
"AudioProcess::I_stopSFXCru()",
"Item::isOn(uint16)",
"Item::getQHi(void)",
"Item::isOn(uint16)",
"Item::getQHi(void)",
"Item::isOn(uint16)",
"Item::getQHi(void)",
"Item::isOn(uint16)",
"Item::getQHi(void)",
"Item::isOn(uint16)",
"Item::getQHi(void)",
"Item::isOn(uint16)",
"Item::getQHi(void)",
"Actor::I_getCurrentActivityNo()",
"Actor::isDead(void)",
"Actor::I_clrInCombat()",
"Actor::I_setDefaultActivity0",
"Actor::I_setDefaultActivity1",
"Actor::I_setDefaultActivity2",
"Actor::I_setActivity",
"World::I_setControlledNPCNum",
"Intrinsic0055()",
"Game::I_isReleaseBuild()",
"MainActor::I_setMana()",
"Item::use(void)",
"Item::setUnkEggType(sint16)",
"MusicProcess::I_playMusic()",
"Item::getSurfaceWeight(void)",
"Item::I_isCentreOn()",
"Item::setFrame(uint16)",
"Actor::I_getLastAnimSet()",
"Ultima8Engine::I_setAvatarInStasis()",
"Actor::I_isBusy()",
"Intrinsic0061()",
"Actor::I_doAnim()",
"Item::legalCreateAtPoint(uint16,uint16,WorldPoint&)",
"Item::getPoint(WorldPoint&)",
"Item::legalMoveToPoint(WorldPoint&,uint16,uint16)",
"Item::fall(void)",
"Item::hurl(sint16,sint16,sint16,sint16)",
"Kernel::getNumProcesses(uint16,ProcessType)",
"Item::getCY(void)",
"Intrinsic006A()",
"Intrinsic006B()",
"MusicProcess::I_pauseMusic()",
"Intrinsic006D()",
"MusicProcess::I_unpauseMusic()",
"Item::isInNpc(void)",
"Ultima8Engine::I_setCruStasis()",
"Ultima8Engine::I_clrCruStasis()",
"Intrinsic0072()",
"PaletteFaderProcess::I_fadeFromBlack()",
"Actor::isDead(void)",
"Item::getNpcNum(void)",
"IntrinsicReturn0",
"Game::I_isViolenceEnabled()",
"Item::unequip(sint16)",
"Item::andStatus(void)",
"Item::move(uint16,uint16,uint8)",
"Ultima8Engine::I_getUnkCrusaderFlag()",
"Ultima8Engine::I_setUnkCrusaderFlag()",
"Ultima8Engine::I_clrUnkCrusaderFlag()",
"Actor::I_turnToward()",
"PaletteFaderProcess::I_fadeToBlack()",
"MainActor::I_clrKeycards()",
"MusicProcess::I_stopMusic()",
"PaletteFaderProcess::I_jumpToAllBlack()",
"I_setUnkFlagA4()",
"I_clearUnkFlagA4()",
"Intrinsic0085()",
"teleportToEgg(sint16,int,uint8)",
"PaletteFaderProcess::I_fadeFromBlack()",
"Actor::I_clrImmortal()",
"Actor::I_setActivity()",
"Item::getQuality(void)",
"Item::setQuality(sint16)",
"MainActor::I_getMaxEnergy()",
"CameraProcess::I_moveTo(x,y,z)",
"Actor::I_setImmortal()",
"Camera::getX(void)",
"Camera::getY(void)",
"Item::setMapNum(sint16)",
"Item::getNpcNum(void)",
"Item::shoot(WorldPoint&,sint16,sint16)",
"Intrinsic0094()",
"Item::enterFastArea(void)",
"Item::setBroken()",
"Item::hurl(sint16,sint16,sint16,sint16)",
"Item::getNpcNum(void)",
"Ultima8Engine::I_moveKeyDownRecently()",
"teleportToEgg(sint16,uint8)",
"Actor::I_createActor()",
"Actor::I_clrInCombat()",
"PaletteFaderProcess::I_jumpToGreyScale()",
"PaletteFaderProcess::I_jumpToNormalPalette()",
"Intrinsic009F()",
"Item::andStatus(void)",
"Item::getUnkEggType(void)",
"Egg::setEggXRange(uint16)",
"Item::setFrame(uint16)",
"Item::overlaps(uint16)",
"Item::isOn(uint16)",
"Item::getQHi(void)",
"Actor::I_getLastAnimSet()",
"Item::getCY(void)",
"Intrinsic00A9()",
"Item::isOn(uint16)",
"Actor::isDead(void)",
"Item::hurl(sint16,sint16,sint16,sint16)",
"Intrinsic00AD()",
"Item::getQHi(void)",
"Item::andStatus(void)",
"Item::hurl(sint16,sint16,sint16,sint16)",
"Item::andStatus(void)",
"Item::hurl(sint16,sint16,sint16,sint16)",
"Item::andStatus(void)",
"Item::getDirToCoords(uint16,uint16)",
"Intrinsic00B5()",
"Intrinsic00B6()",
"Item::getNpcNum(void)",
"Item::getCY(void)",
"Item::isOn(uint16)",
"Item::getFootpad(sint16&,sint16&,sint16&)",
"Actor::isDead(void)",
"Actor::createNPCCru()",
"Actor::I_setActivity()",
"KeypadGump::I_showKeypad()",
"Item::andStatus(void)",
"ComputerGump::I_readComputer()",
"UCMachine::I_numToStr()",
"IntrinsicReturn0",
"Actor::I_getDir()",
"Item::getQHi(void)",
"Item::setQuality(sint16)",
"Item::hurl(sint16,sint16,sint16,sint16)",
"Actor::I_addHp()",
"Intrinsic00C8()",
"Item::callEvent0A(sint16)",
"Item::setBroken()",
"Item::isOn(uint16)",
"Actor::I_teleport()",
"Item::I_getDirFromTo16()",
"Item::getQHi(void)",
"Item::isOn(uint16)",
"Actor::I_isInCombat()",
"Actor::I_getNPCDataField0x4()",
"Actor::I_setCombatTactic()",
"Actor::I_setDead())",
"CameraProcess::I_getCameraY()",
"Actor::I_getEquip()",
"Actor::I_setEquip()",
"Actor::I_getDefaultActivity0()",
"Actor::I_getDefaultActivity1()",
"Actor::I_getDefaultActivity2()",
"Actor::I_getLastAnimSet()",
"Actor::I_isInCombat()",
"Item::getQLo(void)",
"Item::getQHi(void)",
"Item::getNpcNum(void)",
"Intrinsic00DF()",
"Item::hurl(sint16,sint16,sint16,sint16)",
"Actor::I_setDead()",
"Item::getQLo(void)",
"Item::getCY(void)",
"Item::getNpcNum(void)",
"Item::hurl(sint16,sint16,sint16,sint16)",
"Item::getNpcNum(void)",
"Item::hurl(sint16,sint16,sint16,sint16)",
"Item::getNpcNum(void)",
"Item::hurl(sint16,sint16,sint16,sint16)",
"Item::getNpcNum(void)",
"Item::hurl(sint16,sint16,sint16,sint16)",
"Item::getNpcNum(void)",
"Item::hurl(sint16,sint16,sint16,sint16)",
"Item::getNpcNum(void)",
"Item::hurl(sint16,sint16,sint16,sint16)",
"Item::getNpcNum(void)",
"Item::hurl(sint16,sint16,sint16,sint16)",
"Item::getNpcNum(void)",
"Item::hurl(sint16,sint16,sint16,sint16)",
"Item::getNpcNum(void)",
"Item::hurl(sint16,sint16,sint16,sint16)",
"Item::getNpcNum(void)",
"Item::andStatus(void)",
"Actor::I_setDead()",
"Item::getQLo(void)",
"Actor::I_setDead()",
"Dtable::I_getMaxHPForNPC()",
"Actor::I_setHP()",
"Item::getQLo(void)",
"Intrinsic00FE()",
"Item::hurl(sint16,sint16,sint16,sint16)",
"Item::andStatus(void)",
"Item::isOn(uint16)",
"Actor::isDead(void)",
"Actor::I_setActivity()",
"Item::getQHi(void)",
"Actor::I_getLastAnimSet()",
"Actor::I_setDead()",
"Item::getQLo(void)",
"Item::isOn(uint16)",
"Item::getQHi(void)",
"Item::isOn(uint16)",
"Item::getQHi(void)",
"Item::hurl(sint16,sint16,sint16,sint16)",
"Item::getNpcNum(void)",
"Item::getCY(void)",
"Item::hurl(sint16,sint16,sint16,sint16)",
"Item::isOn(uint16)",
"MainActor::I_hasKeycard()",
"IntrinsicReturn0",
"Actor::isDead(void)",
"Actor::I_clrImmortal()",
"UCMachine::I_numToStr()",
"Item::getQHi(void)",
"Actor::I_setActivity()",
"Item::andStatus(void)",
"Item::getNpcNum(void)",
"Item::andStatus(void)",
"Item::getNpcNum(void)",
"Item::I_isCrusTypeNPC()",
"Item::andStatus(void)",
"Item::getNpcNum(void)",
"Item::AvatarStoleSomehting(uint16)",
"Item::andStatus(void)",
"Item::getNpcNum(void)",
"Item::getQ(void)",
"Item::setQ(uint)",
"Item::andStatus(void)",
"Item::getNpcNum(void)",
"Item::andStatus(void)",
"Item::getNpcNum(void)",
"Item::andStatus(void)",
"Item::getNpcNum(void)",
"Item::andStatus(void)",
"Item::getNpcNum(void)",
"Item::andStatus(void)",
"Item::getNpcNum(void)",
"Actor::I_getDir()",
"Item::andStatus(void)",
"Item::getNpcNum(void)",
"Intrinsic0131()",
"Item::andStatus(void)",
"Item::hurl(sint16,sint16,sint16,sint16)",
"Item::andStatus(void)",
"Camera::getY(void)",
"Camera::getZ(void)",
"Intrinsic0137()",
"Actor::I_clrInCombat()",
"Item::getTypeFlagCrusader(sint16)",
"Item::getNpcNum(void)",
"Item::hurl(sint16,sint16,sint16,sint16)",
"Item::getCY(void)",
"Item::getCZ(void)",
"Item::setFrame(uint16)",
"AudioProcess::I_playAmbientSFX()",
"AudioProcess::I_isSFXPlaying()",
"World::I_clrAlertActiveRegret()",
"PaletteFaderProcess::I_fadeToGivenColor()",
"Actor::isDead(void)",
"Actor::I_setDead()",
"Intrinsic0145()",
"PaletteFaderProcess::I_jumpToAllGrey()",
"Item::I_getFamilyOfType()",
"Item::getNpcNum(void)",
"Item::getQLo(void)",
"Item::andStatus(void)",
"Ultima8Engine::getCurrentTimerTick()",
"World::I_setAlertActiveRegret()",
"Ultima8Engine::I_getAvatarInStasis()",
"MainActor::I_addItemCru()",
"Egg::getEggXRange(void)",
"Actor::I_clrInCombat()",
"Intrinsic0072()",
"Item::setFrame(uint16)",
"UCMachine::I_numToStr()",
"Actor::I_getDir()",
"UCMachine::I_numToStr()",
"Item::isOn(uint16)",
"Actor::I_getDir()",
"Actor::I_setDead()",
"Item::getQHi(void)",
"Item::getQLo(void)",
"UCMachine::I_numToStr()",
"Actor::I_getDir()",
"Intrinsic015D()",
]

View file

@ -0,0 +1,312 @@
World::I_getAlertActive
Item::I_getFrame
Item::I_setFrame
Item::I_getMapArray
Item::I_getStatus
Item::I_orStatus
Item::I_equip
Item::I_isPartlyOnScreen
Actor::I_isNPC
Item::I_getZ
Item::I_destroy
Actor::I_getUnkByte
Ultima8Engine::I_setAvatarInStasis
Item::I_getDirToItem
Actor::I_turnToward
MovieGump::I_playMovieCutsceneAlt
Item::I_getQLo
Actor::I_getMap
MusicProcess::I_playMusic
Item::I_getX
Item::I_getY
AudioProcess::I_playSFXCru
Item::I_getShape
Item::I_explode
UCMachine::I_rndRange
Item::I_legalCreateAtCoords
Item::I_andStatus
World::I_getControlledNPCNum
Actor::I_getDir
Actor::I_getLastAnimSet
Item::I_fireWeapon
Item::I_create
Item::I_popToCoords
Actor::I_setDead
Item::I_push
Item::I_getEtherealTop
Item::I_setShape
Item::I_touch
Item::I_getQHi
Item::I_getClosestDirectionInRange
Item::I_hurl
World::I_gameDifficulty
AudioProcess::I_playAmbientSFXCru
Item::I_getQLo
Item::I_inFastArea
Item::I_setQHi
Item::I_legalMoveToPoint
CurrentMap::I_canExistAtPoint
Item::I_pop
Item::I_andStatus
Item::I_receiveHit
Actor::I_isBusy
Item::I_getDirFromTo16
Actor::I_isKneeling
Actor::I_doAnim
MainActor::I_addItemCru
AudioProcess::I_stopSFXCru
Actor::I_isDead
AudioProcess::I_isSFXPlayingForObject
Item::I_setQLo
Item::I_getFamily
Container::I_destroyContents
Item::I_fall
Egg::I_getEggId
CameraProcess::I_moveTo
CameraProcess::I_setCenterOn
Item::I_getRangeIfVisible
AudioProcess::I_playSFXCru
Item::I_isOn
Item::I_getQHi
Item::I_isOn
Item::I_getQHi
Item::I_isOn
Item::I_getQHi
Item::I_isOn
Item::I_getQHi
Item::I_isOn
Item::I_getQHi
Item::I_isOn
Item::I_getQHi
Actor::I_getCurrentActivityNo
Actor::I_clrInCombat
Actor::I_setDefaultActivity0
Actor::I_setDefaultActivity1
Actor::I_setDefaultActivity2
Actor::I_setActivity
World::I_setControlledNPCNum
Item::I_getSurfaceWeight
Item::I_isCentreOn
Item::I_setFrame
Actor::I_getLastAnimSet
Item::I_legalCreateAtPoint
Item::I_getPoint
CruStatusGump::I_hideStatusGump
MovieGump::I_playMovieOverlay
CruStatusGump::I_showStatusGump
Actor::I_setDead
Actor::I_createActor
I_forceCameraUpdate
Actor::I_teleport
Item::I_getFootpadData
Item::I_isInNpc
Item::I_getQLo
Item::I_getNpcNum
Item::I_setNpcNum
Item::I_andStatus
Item::I_move
UCMachine::I_true
Kernel::I_resetRef
Item::I_getNpcNum
Item::I_andStatus
Item::I_isCompletelyOn
Ultima8Engine::I_getUnkCrusaderFlag
Ultima8Engine::I_setUnkCrusaderFlag
Ultima8Engine::I_setCruStasis
Actor::I_setDead
Ultima8Engine::I_clrUnkCrusaderFlag
Ultima8Engine::I_clrCruStasis
AudioProcess::I_stopSFXCru
PaletteFaderProcess::I_fadeToBlack
MainActor::I_clrKeycards
MainActor::I_teleportToEgg
PaletteFaderProcess::I_fadeToGamePal
Actor::I_clrImmortal
Actor::I_getHp
Actor::I_setActivity
Item::I_getQuality
Item::I_setQuality
Item::I_use
MainActor::I_getMaxEnergy
Actor::I_getMana
Actor::I_setMana
Item::I_getQLo
Actor::I_setImmortal
CameraProcess::I_getCameraX
CameraProcess::I_getCameraY
Item::I_setMapArray
Item::I_getNpcNum
Item::I_shoot
Item::I_enterFastArea
Item::I_setBroken
Item::I_hurl
Item::I_getNpcNum
PaletteFaderProcess::I_jumpToAllBlack
MusicProcess::I_stopMusic
I_PauseCycler
MovieGump::I_playMovieCutsceneAlt
I_ResumeCycler
Game::I_playCredits
Ultima8Engine::I_moveKeyDownRecently
MainActor::I_teleportToEgg
PaletteFaderProcess::I_jumpToGreyScale
World::I_resetVargasShield
Item::I_andStatus
PaletteFaderProcess::I_jumpToNormalPalette
PaletteFaderProcess::I_fadeToGamePal
PaletteFaderProcess::I_fadeToGamePal
PaletteFaderProcess::I_fadeToBlack
PaletteFaderProcess::I_fadeToBlack
PaletteFaderProcess::I_fadeToGivenColor
Actor::I_setDead
Item::I_getQLo
Item::I_getUnkEggType
Egg::I_setEggXRange
Item::I_overlaps
Item::I_isOn
UCMachine::I_true
Egg::I_getEggXRange
Actor::I_setDead
MovieGump::I_playMovieCutsceneAlt
AudioProcess::I_playSFX
Actor::I_isFalling
Item::I_getFamilyOfType
Item::I_getNpcNum
Item::I_getQLo
Item::I_getQHi
Item::I_unequip
Item::I_avatarStoleSomething
Item::I_andStatus
Ultima8Engine::I_getCurrentTimerTick
World::I_setAlertActive
Item::I_equip
World::I_clrAlertActive
Ultima8Engine::I_getAvatarInStasis
MainActor::I_addItemCru
Actor::I_getLastAnimSet
Item::I_setQuality
CurrentMap::I_canExistAt
Item::I_isOn
Item::I_hurl
Item::I_getQHi
Item::I_andStatus
Item::I_hurl
Item::I_andStatus
Item::I_hurl
Item::I_andStatus
KeypadGump::I_showKeypad
Item::I_isOn
SpriteProcess::I_createSprite
Item::I_getDirFromItem
Item::I_hurl
Item::I_getQHi
Actor::I_addHp
MainActor::I_switchMap
Actor::I_isInCombat
Actor::I_setActivity
UCMachine::I_true
Item::I_setQAndCombine
Item::I_use
AudioProcess::I_stopAllSFX
MovieGump::I_playMovieCutscene
I_clearKeyboardState
AudioProcess::I_playSFX
Item::I_use
CameraProcess::I_getCameraZ
Actor::I_getLastAnimSet
Actor::I_setDead
Item::I_getQLo
PaletteFaderProcess::I_jumpToAllWhite
Actor::I_setActivity
Item::I_isOn
Actor::I_getLastActivityNo
Actor::I_setCombatTactic
Actor::I_getEquip
Actor::I_setEquip
Actor::I_getDefaultActivity0
Actor::I_getDefaultActivity1
Actor::I_getDefaultActivity2
Actor::I_getLastAnimSet
Actor::I_setTarget
Actor::I_setUnkByte
Actor::I_setDead
Item::I_cast
Item::I_andStatus
Item::I_getQLo
MainActor::I_getNumberOfCredits
Item::I_popToEnd
Item::I_popToContainer
BatteryChargerProcess::I_create
Kernel::I_getNumProcesses
Item::I_getQHi
Item::I_isOn
Actor::I_setActivity
Item::I_getQHi
Item::I_getQ
Item::I_setQ
CruHealerProcess::I_create
Item::I_hurl
Item::I_getNpcNum
Item::I_hurl
Item::I_isOn
Item::I_getQHi
Item::I_andStatus
MainActor::I_hasKeycard
ComputerGump::I_readComputer
UCMachine::I_numToStr
Item::I_getNpcNum
Item::I_andStatus
Item::I_getNpcNum
Item::I_isCrusTypeNPC
Item::I_andStatus
Item::I_getNpcNum
Item::I_andStatus
Item::I_getNpcNum
Item::I_andStatus
Item::I_getNpcNum
Item::I_andStatus
Item::I_getNpcNum
Item::I_andStatus
Item::I_getNpcNum
Item::I_andStatus
Item::I_getNpcNum
Item::I_andStatus
Item::I_getNpcNum
Actor::I_getDir
UCMachine::I_numToStr
Item::I_andStatus
Item::I_getNpcNum
Item::I_fireDistance
Item::I_andStatus
Item::I_hurl
Item::I_setBroken
Item::I_andStatus
Item::I_getTypeFlag
Item::I_getNpcNum
Item::I_hurl
Item::I_getCY
Item::I_getCZ
Item::I_getCX
Actor::I_getDir
Actor::I_isDead
Item::I_getNpcNum
Actor::I_getLastAnimSet
Item::I_setQuality
UCMachine::I_numToStr
Item::I_getDirToCoords
Item::I_andStatus
Item::I_getNpcNum
Item::I_setBroken
Item::I_getCY
Item::I_isOn
Item::I_getFootpadData
Actor::I_isDead
Actor::I_createActorCru
Actor::I_clrImmortal
Actor::I_setActivity
Item::I_andStatus
Item::I_getQHi
WeaselGump::I_showWeaselGump
Actor::I_setDead
UNUSEDInt136
UNUSEDInt137

View file

@ -0,0 +1,314 @@
Code005 1020:0861: (Int0CB) void I_createMapJumpProcess(int16 mapnum)
Code006 1028:0605: (Int097) void PaletteFaderProcess:I_setScreenGreyscale(void)
Code007 1030:03b8: (Int0B3) int32 I_getCurrentTimerTick(void)
Code008 1038:12a6: (Int028) int16 Item::I_hurl(Item *,8 bytes)
Code008 1038:12a6: (Int08D) int16 Item::I_hurl(Item *,8 bytes)
Code008 1038:12a6: (Int0BD) int16 Item::I_hurl(Item *,8 bytes)
Code008 1038:12a6: (Int0C0) int16 Item::I_hurl(Item *,8 bytes)
Code008 1038:12a6: (Int0C2) int16 Item::I_hurl(Item *,8 bytes)
Code008 1038:12a6: (Int0C8) int16 Item::I_hurl(Item *,8 bytes)
Code008 1038:12a6: (Int0F7) int16 Item::I_hurl(Item *,8 bytes)
Code008 1038:12a6: (Int0F9) int16 Item::I_hurl(Item *,8 bytes)
Code008 1038:12a6: (Int118) int16 Item::I_hurl(Item *,8 bytes)
Code008 1038:12a6: (Int11D) int16 Item::I_hurl(Item *,8 bytes)
Code008 1038:1334: (Int03E) void Item::I_fallProbably_03E(Item *)
Code009 1040:0079: (Int136) void UNUSEDInt136()
Code010 1048:00a1: (Int06B) int16 Game::I_isViolenceEnabled(void)
Code010 1048:00c1: (Int0CE) int16 Game::I_isReleaseBuild(void)
Code019 1090:04ce: (Int079) int16 MainActor::I_teleportToEgg(int, int, int)
Code019 1090:04f7: (Int096) int16 MainActor::I_teleportToEgg(int, int)
Code019 1090:051d: (Int0A7) int16 Egg::I_getEggXRange(Egg *)
Code019 1090:055b: (Int0A3) void Egg::I_setEggXRange(Egg *, int)
Code019 1090:05c5: (Int03F) int16 Egg::I_getEggId(Item *)
Code021 10a0:013e: (Int013) int16 Item::I_getX(Item *)
Code021 10a0:0176: (Int014) int16 Item::I_getY(Item *)
Code021 10a0:0266: (Int009) byte Item::I_getZ(Item *)
Code021 10a0:029a: (Int120) int16 Item::I_getCX(Item *)
Code021 10a0:02de: (Int11E) int16 Item::I_getCY(Item *)
Code021 10a0:02de: (Int12B) int16 IItem::I_getCY(Item *)
Code021 10a0:0322: (Int11F) byte Item::I_getCZ(Item *)
Code021 10a0:0602: (Int057) int16 Item::I_getSurfaceWeight(Item *)
Code021 10a0:068f: (Int016) int16 Item::I_getShape(Item *)
Code021 10a0:06a5: (Int024) void Item::I_setShape(Item *, int16 shapeno)
Code021 10a0:07b4: (Int001) int16 Item::I_getFrame(Item *)
Code021 10a0:0810: (Int002) void Item::I_setFrame(Item *, frame)
Code021 10a0:0810: (Int059) void Item::I_setFrame(Item *, frame)
Code021 10a0:0c24: (Int068) void Item::I_setNpcNum(Item *, uint16 npcnum)
Code021 10a0:0c40: (Int067) int16 Item::I_getNPCNum(Item *)
Code021 10a0:0c40: (Int06D) int16 Item::I_getNPCNum(Item *)
Code021 10a0:0c40: (Int089) int16 Item::I_getNpcNum(Item *)
Code021 10a0:0c40: (Int08E) int16 Item::I_getNPCNum(Item *)
Code021 10a0:0c40: (Int0AD) int16 Item::I_getNPCNum(Item *)
Code021 10a0:0c40: (Int0F8) int16 Item::I_getNPCNum(Item *)
Code021 10a0:0c40: (Int100) int16 Item::I_getNPCNum(Item *)
Code021 10a0:0c40: (Int102) int16 Item::I_getNPCNum(Item *)
Code021 10a0:0c40: (Int105) int16 Item::I_getNPCNum(Item *)
Code021 10a0:0c40: (Int107) int16 Item::I_getNPCNum(Item *)
Code021 10a0:0c40: (Int109) int16 Item::I_getNPCNum(Item *)
Code021 10a0:0c40: (Int10B) int16 Item::I_getNPCNum(Item *)
Code021 10a0:0c40: (Int10D) int16 Item::I_getNPCNum(Item *)
Code021 10a0:0c40: (Int10F) int16 Item::I_getNPCNum(Item *)
Code021 10a0:0c40: (Int111) int16 Item::I_getNPCNum(Item *)
Code021 10a0:0c40: (Int115) int16 Item::I_getNPCNum(Item *)
Code021 10a0:0c40: (Int11C) int16 Item::I_getNPCNum(Item *)
Code021 10a0:0c40: (Int123) int16 Item::I_getNPCNum(Item *)
Code021 10a0:0c40: (Int129) int16 Item::I_getNPCNum(Item *)
Code021 10a0:0c5c: (Int088) void Item::I_setMapArray(Item *, uint16 maparray)
Code021 10a0:0c78: (Int003) int16 Item::I_getMapArray(Item *)
Code021 10a0:0c94: (Int0F4) int16 Item::I_getQ(Item *)
Code021 10a0:0caa: (Int07E) int16 Item::I_getQuality(Item *)
Code021 10a0:0cee: (Int07F) void Item::I_setQuality(Item *, int)
Code021 10a0:0cee: (Int0BA) void Item::I_setQuality(Item *, int)
Code021 10a0:0cee: (Int125) void Item::I_setQuality(Item *, int)
Code021 10a0:0d31: (Int0A2) int16 Item::I_getUnkEggType(Item *)
Code021 10a0:0dd1: (Int0CF) void Item::I_setQAndCombine(Item *, int16 q)
Code021 10a0:0f5f: (Int0F5) void Item::I_setQ(Item *, uint16 q)
Code021 10a0:0fc4: (Int03C) int16 Item::I_getItemFamily(Item *)
Code021 10a0:0fef: (Int11B) byte Item::I_getTypeFlag(Item *, uint16 shift)
Code021 10a0:1038: (Int004) int16 Item::I_getStatus(Item *)
Code021 10a0:104e: (Int05B) byte Item::I_legalCreateAtPoint(Item *, int16 shape, int16 frame, Point *)
Code021 10a0:10db: (Int019) byte Item::I_legalCreateAtCoords(Item *, int16 shapeno, int16 frame, int16 x, int16 y, int16 z)
Code021 10a0:11e7: (Int01F) byte Item::I_create(Item *, uint16 shapenum, uint16 framenum)
Code021 10a0:1311: (Int020) void Item::I_popToCoords(Item *, uint16 x, uint16 y, uint16 z)
Code021 10a0:1328: (Int0ED) void Item::I_popToContainer(Item*, int)
Code021 10a0:1338: (Int030) void Item::I_pop(Item *)
Code021 10a0:1342: (Int0EC) void Item::I_popToEnd(Item*, int)
Code021 10a0:1352: (Int022) void I_push(Item *)
Code021 10a0:1365: (Int00A) void Item::I_destroy(Item *)
Code021 10a0:14af: (Int03D) void Container::I_destroyContents(Item *)
Code021 10a0:1531: (Int06A) void Item::I_move(Item *, int16 x, int16 y, uint16 z)
Code021 10a0:174d: (Int02E) byte I_legalMoveToPoint(Item *, Point *, int16 force)
Code021 10a0:19e9: (Int127) byte Item::I_getDirToCoords(Item *, uin16 x, uint16 y)
Code021 10a0:1a3f: (Int0C7) byte Item::I_getDirFromItem(Item *, itemno)
Code021 10a0:1a74: (Int00D) byte Item::I_getDirToItem(Item *, itemno)
Code021 10a0:1aa9: (Int064) void Item::I_getFootpad(Item *, uint *, uint *, uint *)
Code021 10a0:1aa9: (Int12D) void Item::I_getFootpadData(Item *, uint *, uint *, uint *)
Code021 10a0:1cc5: (Int0A4) byte Item::I_overlaps(Item *, uint16 unk)
Code021 10a0:1eea: (Int044) byte Item::I_IsOn(Item *, uint16 itemno)
Code021 10a0:1eea: (Int046) byte Item::I_IsOn(Item *, uint16 itemno))
Code021 10a0:1eea: (Int048) byte Item::I_IsOn(Item *, uint16 itemno)
Code021 10a0:1eea: (Int04A) byte Item::I_IsOn(Item *, uint16 itemno)
Code021 10a0:1eea: (Int04C) byte Item::I_IsOn(Item *, uint16 itemno)
Code021 10a0:1eea: (Int04E) byte Item::I_IsOn(Item *, uint16 itemno)
Code021 10a0:1eea: (Int0A5) byte Item::I_isOn(Item *, itemno)
Code021 10a0:1eea: (Int0BC) byte Item::I_isOn(Item *, itemno)
Code021 10a0:1eea: (Int0C5) byte Item::I_isOn(Item *, itemno)
Code021 10a0:1eea: (Int0DC) byte Item::I_isOn(Item *, itemno)
Code021 10a0:1eea: (Int0F1) byte Item::I_isOn(Item *, itemno)
Code021 10a0:1eea: (Int0FA) byte Item::I_isOn(Item *, itemno)
Code021 10a0:1eea: (Int12C) byte Item::I_isOn(Item *, itemno)
Code021 10a0:1f5f: (Int06F) byte Item::I_isCompletelyOn(Item *, uint16 other)
Code021 10a0:2436: (Int05C) void Item::I_getPoint(Item *, Point *)
Code021 10a0:2486: (Int008) byte Actor::I_isNPC(Item *)
Code021 10a0:24b5: (Int065) byte Item::I_isInNPC(Item *)
Code021 10a0:2514: (Int025) void Item::I_touch(Item *)
Code021 10a0:2572: (Int005) void Item::I_orStatus(Item *, uint16 flags)
Code021 10a0:258b: (Int01A) void Item::I_andStatus(Item *, uint16 status)
Code021 10a0:258b: (Int031) void Item::I_andStatus(Item *, uint16 status)
Code021 10a0:258b: (Int069) void Item::I_andStatus(Item *, uint16 status)
Code021 10a0:258b: (Int06E) void Item::I_andStatus(Item *, uint16 status)
Code021 10a0:258b: (Int099) void Item::I_andStatus(Item *, uint16 status)
Code021 10a0:258b: (Int0B2) void Item::I_andStatus(Item *, uint16 status)
Code021 10a0:258b: (Int0BF) void Item::I_andStatus(Item *, uint16 status)
Code021 10a0:258b: (Int0C1) void Item::I_andStatus(Item *, uint16 status)
Code021 10a0:258b: (Int0C3) void Item::I_andStatus(Item *, uint16 status)
Code021 10a0:258b: (Int0E9) void Item::I_andStatus(Item *, uint16 status)
Code021 10a0:258b: (Int0FC) void Item::I_andStatus(Item *, uint16 status)
Code021 10a0:258b: (Int101) void Item::I_andStatus(Item *, uint16 status)
Code021 10a0:258b: (Int104) void Item::I_andStatus(Item *, uint16 status)
Code021 10a0:258b: (Int106) void Item::I_andStatus(Item *, uint16 status)
Code021 10a0:258b: (Int108) void Item::I_andStatus(Item *, uint16 status)
Code021 10a0:258b: (Int10A) void Item::I_andStatus(Item *, uint16 status)
Code021 10a0:258b: (Int10C) void Item::I_andStatus(Item *, uint16 status)
Code021 10a0:258b: (Int10E) void Item::I_andStatus(Item *, uint16 status)
Code021 10a0:258b: (Int110) void Item::I_andStatus(Item *, uint16 status)
Code021 10a0:258b: (Int114) void Item::I_andStatus(Item *, uint16 status)
Code021 10a0:258b: (Int117) void Item::I_andStatus(Item *, uint16 status)
Code021 10a0:258b: (Int11A) void Item::I_andStatus(Item *, uint16 status)
Code021 10a0:258b: (Int128) void Item::I_andStatus(Item *, uint16 status)
Code021 10a0:258b: (Int132) void Item::I_andStatus(Item *, int16 status)
Code021 10a0:25d0: (Int08C) void Item::I_setIsBroken(Item *)
Code021 10a0:25d0: (Int119) void Item::I_setIsBroken(Item *)
Code021 10a0:25d0: (Int12A) void Item::I_setIsBroken(Item *)
Code021 10a0:2667: (Int080) int16 Item::I_use(Item *)
Code021 10a0:2667: (Int0D0) int16 Item::I_use(Item *)
Code021 10a0:2667: (Int0D5) int16 Item::I_use(Item *)
Code021 10a0:2a35: (Int006) int16 Item::I_equip(6 bytes)
Code021 10a0:2a35: (Int0B5) int16 Item::I_equip(6 bytes)
Code021 10a0:2a68: (Int0B0) int16 Item::I_unequip(6 bytes)
Code021 10a0:2b30: (Int08B) int16 Item::I_enterFastArea(Item *)
Code021 10a0:2f3e: (Int0E8) int16 Item::I_cast(6 bytes)
Code021 10a0:2fda: (Int0B1) int16 Item::I_spawnUsecodeEvent0x13(Item *, 2 bytes)
Code021 10a0:383e: (Int026) int16 Item::I_getQHi(Item *)
Code021 10a0:383e: (Int045) int16 Item::I_getQHi(Item *)
Code021 10a0:383e: (Int047) int16 Item::I_getQHi(Item *)
Code021 10a0:383e: (Int049) int16 Item::I_getQHi(Item *)
Code021 10a0:383e: (Int04B) int16 Item::I_getQHi(Item *)
Code021 10a0:383e: (Int04D) int16 Item::I_getQHi(Item *)
Code021 10a0:383e: (Int04F) int16 Item::I_getQHi(Item *)
Code021 10a0:383e: (Int0AF) int16 Item::I_getQHi(Item *)
Code021 10a0:383e: (Int0BE) int16 Item::I_getQHi(Item *)
Code021 10a0:383e: (Int0C9) int16 Item::I_getQHi(Item *)
Code021 10a0:383e: (Int0F0) int16 Item::I_getQHi(Item *)
Code021 10a0:383e: (Int0F3) int16 Item::I_getQHi(Item *)
Code021 10a0:383e: (Int0FB) int16 Item::I_getQHi(Item *)
Code021 10a0:383e: (Int133) int16 Item::I_getQHi(Item *)
Code021 10a0:385a: (Int02D) void Item::I_setQHi(Item *, uint16 qhi)
Code021 10a0:3889: (Int010) int16 Item::I_getQLo(Item *)
Code021 10a0:3889: (Int02B) int16 Item::I_getQLo(Item *)
Code021 10a0:3889: (Int066) int16 Item::I_getQLo(Item *)
Code021 10a0:3889: (Int084) int16 Item::I_getQLo(Item *)
Code021 10a0:3889: (Int0A1) int16 Item::I_getQLo(Item *)
Code021 10a0:3889: (Int0AE) int16 Item::I_getQLo(Item *)
Code021 10a0:3889: (Int0D9) int16 Item::I_getQLo(Item *)
Code021 10a0:3889: (Int0EA) int16 Item::I_getQLo(Item *)
Code021 10a0:38a2: (Int03B) void Item::I_setQLo(Item *, int16 qlo)
Code021 10a0:38d1: (Int08A) void Intrinsic08A(12 bytes)
Code021 10a0:3934: (Int015) void AudioProcess::I_playSFXCru(Item *, uint16 sfxnum)
Code021 10a0:3953: (Int02A) void AudioProcess::I_playAmbientSFXCru(Item *, sndno)
Code021 10a0:3991: (Int043) void AudioProcess::I_playSFXCru(Item *, soundno)
Code021 10a0:39b0: (Int038) void AudioProcess::I_stopSFXCru(Item *, int16 sndno)
Code021 10a0:39cf: (Int076) void AudioProcess::I_stopSFX(Item *)
Code021 10a0:39eb: (Int03A) byte AudioProcess::I_isSFXPlayingForObject(Item *, int16 unk)
Code021 10a0:3a5b: (Int0D2) void I_playFlic0D2(int *item,char *flicname,word sizex,word sizey)
Code021 10a0:3a9f: (Int092) void I_playFlic092(char *)
Code021 10a0:3a9f: (Int0A9) void I_playFlic0A9(char *)
Code021 10a0:3abb: (Int00F) void I_playFlic(void), int16 I_playFlic(Item *, char *name, int16 sizex, int16 sizey)
Code021 10a0:3ad7: (Int05E) int16 I_playFlicsomething(uint32, char *, int16 a, int16 b)
Code021 10a0:3af5: (Int02C) byte Item::I_inFastArea(Item *)
Code021 10a0:3d3f: (Int12F) int16 Actor::I_createActorCru(Item *, uint16 other_itemno)
Code021 10a0:406b: (Int02F) byte Intrinsic02F(int, int, shapeno, Point *)
Code021 10a0:40c8: (Int007) byte Item::I_isOnScreen(Item *)
Code021 10a0:433a: (Int095) byte Kernel::I_getCurrentKeyDown(void)
Code021 10a0:4342: (Int103) byte Item::I_isCrusTypeNPC(uint16 shapenum)
Code021 10a0:4371: (Int058) byte Item::I_isCentreOn(Item *, uint16 other)
Code022 10a8:26ee: (Int023) int16 Item::I_getEtherealTop(void)
Code027 10d0:0000: (Int027) int16 I_getClosestDirectionInRange(x1, y1, x2, y2, numdirs, mindir, maxdir)
Code027 10d0:01c7: (Int034) int16 Item::I_getDirFromTo16(x1, y1, x2, y2)
Code028 10d8:0000: (Int0B4) void Ultima8Engine::I_setAlertActive(void)
Code028 10d8:0121: (Int0B6) void Ultima8Engine::I_clrAlertActive(void)
Code028 10d8:0243: (Int000) byte World::I_getAlertActive(void)
Code030 10e8:0119: (Int033) byte Actor::I_isBusy(4 bytes)
Code030 10e8:0252: (Int036) int16 Actor::I_doAnim(12 bytes)
Code030 10e8:1e7e: (Int0E5) void Actor::I_attack(Actor *, uint16 target)
Code030 10e8:1f0e: (Int0AB) byte Actor::I_NPCGetField0x59Flag1_0AB(Actor *)
Code030 10e8:1f2d: (Int0CC) byte Actor::I_getInCombat(Actor *)
Code030 10e8:1fed: (Int039) byte Actor::I_isDead(Item *)
Code030 10e8:1fed: (Int122) byte Actor::I_isDead(Item *)
Code030 10e8:1fed: (Int12E) byte Actor::I_isDead(Item *)
Code030 10e8:201d: (Int021) void Actor::I_setDead(4 bytes)
Code030 10e8:201d: (Int060) void Actor::I_setDead(4 bytes)
Code030 10e8:201d: (Int073) void Actor::I_setDead(4 bytes)
Code030 10e8:201d: (Int0A0) void Actor::I_setDead(Actor *)
Code030 10e8:201d: (Int0A8) void Actor::I_setDead(Actor *)
Code030 10e8:201d: (Int0D8) void Actor::I_setDead(4 bytes)
Code030 10e8:201d: (Int0E7) void Actor::I_setDead(4 bytes)
Code030 10e8:201d: (Int135) void Actor::I_setDead(Actor *)
Code030 10e8:2177: (Int085) void Actor::I_setImmortal(Actor *)
Code030 10e8:2192: (Int07B) void Actor::I_clrImmortal(Actor *)
Code030 10e8:2192: (Int130) void Actor::I_clrImmortal(Actor *)
Code030 10e8:2208: (Int035) byte Actor::I_getSomeFlagProbablyCrouch(Item *)
Code030 10e8:25b1: (Int061) void Actor::I_create(8 bytes)
Code030 10e8:27c0: (Int0DF) int16 Actor::I_getEquip(6 bytes)
Code030 10e8:27f3: (Int0E0) void Actor::I_setEquip(8 bytes)
Code030 10e8:29f2: (Int063) void Actor::I_teleport(12 bytes)
Code030 10e8:2b88: (Int011) int16 Actor::I_getMap(4 bytes)
Code030 10e8:2be2: (Int052) void Actor::I_setDefaultActivity0(Actor *, int)
Code030 10e8:2bff: (Int053) void Actor::I_setDefaultActivity1(Actor *, int)
Code030 10e8:2c1c: (Int054) void Actor::I_setDefaultActivity2(Actor *, int)
Code030 10e8:2c70: (Int0E1) int16 Actor::I_getDefaultActivity0(Actor *)
Code030 10e8:2c8a: (Int0E2) int16 Actor::I_getDefaultActivity1(Actor *)
Code030 10e8:2ca4: (Int0E3) int16 Actor::I_getDefaultActivity2(Actor *)
Code030 10e8:2cfa: (Int055) void Actor::I_setActivity(Actor *, int)
Code030 10e8:2cfa: (Int07D) void Actor::I_setActivity(Actor *, int)
Code030 10e8:2cfa: (Int0CD) void Actor::I_setActivity(Actor *, int)
Code030 10e8:2cfa: (Int0DB) void Actor::I_setActivity(Actor *, int)
Code030 10e8:2cfa: (Int0F2) void Actor::I_setActivity(Actor *, int)
Code030 10e8:2cfa: (Int131) void Actor::I_setActivity(Actor *, int)
Code030 10e8:31a1: (Int051) void Actor::I_clrInCombat(Actor *)
Code030 10e8:3263: (Int00E) int16 Actor::I_turnToward(Actor *, direction, unk)
Code030 10e8:32ec: (Int07C) int16 Actor::I_getHp(Actor *)
Code030 10e8:3305: (Int050) int16 I_GetNPCDataField0x2_050(Actor *)
Code030 10e8:344c: (Int082) int16 Actor::I_getMana(Actor *)
Code030 10e8:3466: (Int083) void Actor::I_setMana(Actor *, int)
Code030 10e8:3483: (Int081) int16 MainActor::I_getMaxEnergy(Actor *)
Code030 10e8:358c: (Int0DE) void Actor::I_setCombatTactic(Actor *, int)
Code030 10e8:368e: (Int0B7) int16 Ultima8Engine::I_getAvatarInStasis(void)
Code030 10e8:3696: (Int00C) void Ultima8Engine::I_setAvatarInStasis(int)
Code030 10e8:370c: (Int01C) byte Actor::I_getDir(4 bytes)
Code030 10e8:370c: (Int112) byte Actor::I_getDir(Actor *)
Code030 10e8:370c: (Int121) byte Actor::I_getDir(4 bytes)
Code030 10e8:3726: (Int01D) int16 Actor::I_getLastAnimSet(4 bytes)
Code030 10e8:3726: (Int05A) int16 Actor::I_getLastAnimSet(4 bytes)
Code030 10e8:3726: (Int0B9) int16 Actor::I_getLastAnimSet(4 bytes)
Code030 10e8:3726: (Int0D7) int16 Actor::I_getLastAnimSet(4 bytes)
Code030 10e8:3726: (Int0E4) int16 Actor::I_getLastAnimSet(4 bytes)
Code030 10e8:3726: (Int124) int16 Actor::I_getLastAnimSet(4 bytes)
Code030 10e8:3740: (Int0CA) byte Actor::I_addHp(Actor *, int)
Code030 10e8:382b: (Int0EB) int16 I_GetQOfAvatarInventoryItem0x4ed_0EB(void)
Code030 10e8:38cd: (Int029) int16 Game::I_getDifficultyLevel(void)
Code030 10e8:3ce0: (Int0FD) byte MainActor::I_hasKeycard(int)
Code030 10e8:3d43: (Int078) void MainActor::I_clrKeycards(void)
Code030 10e8:3df4: (Int00B) int16 Actor::I_GetNPCDataField0x63_00B(Actor *)
Code030 10e8:3e10: (Int0E6) void Actor::I_SetNPCDataField0x63_0E6(Actor *, int)
Code030 10e8:3e2d: (Int0DD) int16 Actor::I_GetNPCDataField0x4_0DD(Actor *)
Code032 10f8:054d: (Int0AC) int16 Item::I_getFamilyOfType(Item *)
Code038 1128:0000: (Int098) void I_resetVargasHealthTo500(void)
Code038 1128:0247: (Int032) void Item::I_receiveHit(Item *, other, dir, damage, damagetype)
Code038 1128:11da: (Int01E) int16 Actor::I_maybeFire(Actor *, x, y, z, byte, int, byte)
Code038 1128:1755: (Int116) byte Intrinsic116(14 bytes)
Code038 1128:1c01: (Int042) byte Item::I_getRangeIfVisible(Item *, otheritem)
Code038 1128:20c5: (Int0EE) void BatteryChargerProcess::I_create(void)
Code038 1128:20e5: (Int0F6) void CruHealer::I_create_0F6(void)
Code039 1130:0000: (Int056) void Intrinsic056(int itemno)
Code039 1130:0010: (Int01B) int16 I_getTargetNPCNumMaybe(void)
Code040 1138:00de: (Int0C6) void SpriteProcess::I_createSprite(word, word, word, word, uword, uword, ubyte)
Code042 1148:0859: (Int017) void Item::I_explode(Item *, exptype, destroy_item)
Code042 1148:0b67: (Int0BB) byte Intrinsic0BB(8 bytes)
Code049 1180:0013: (Int062) void CameraProcess::I_somethingAboutCameraUpdate(void)
Code049 1180:0cba: (Int040) void CameraProcess::I_moveTo(x, y, z)
Code049 1180:1aa5: (Int041) void CameraProcess::I_setCenterOn(objid)
Code049 1180:1cc5: (Int086) int16 CameraProcess::I_getCameraX(void)
Code049 1180:1ccd: (Int087) int16 CameraProcess::I_getCameraY(void)
Code049 1180:1cd5: (Int0D6) byte CameraProcess::I_getCameraZ(void)
Code055 11b0:0000: (Int05D) void I_mouseSomethingOffMaybe05D(void)
Code055 11b0:0006: (Int05F) void I_mouseSomethingResume05F(void)
Code059 11d0:0977: (Int0EF) int16 Kernel::I_getNumProcesses(int, int)
Code059 11d0:0c63: (Int06C) void Kernel::I_resetRef(int16, int16)
Code064 11f8:0143: (Int012) void MusicProcess:I_playMusic(int trackno)
Code064 11f8:0223: (Int090) void MusicProcess::I_musicStop(void)
Code092 12d8:0293: (Int018) int16 UCMachine::I_rndRange(uint16 x, uint16 y)
Code092 12d8:0476: (Int0AA) void I_playSFX(2 bytes)
Code092 12d8:0476: (Int0D4) void I_playSFX(2 bytes)
Code092 12d8:054a: (Int0D1) void AudioProcess:I_stopAllSFX(void)
Code116 1398:0005: (Int0FE) void ComputerGump::I_readComputer(char *)
Code121 13c0:00fe: (Int0C4) int16 KeypadGump::I_showKeypad(int targetCode)
Code125 13e0:0000: (Int134) void Intrinsic134(2 bytes)
Code126 13e8:0033: (Int091) void I_setSomeMovieGlobal(void)
Code126 13e8:0039: (Int093) void I_clearSomeMovieGlobal(void)
Code126 13e8:003f: (Int094) void Game::I_playCredits(void)
Code126 13e8:0071: (Int072) void Ultima8Engine::I_setCruStasis(void)
Code126 13e8:0077: (Int075) void Ultima8Engine::I_clrCruStasis(void)
Code126 13e8:00a8: (Int0D3) void Intrinsic0D3(void)
Code126 13e8:00b9: (Int0A6) int16 I_getAnimationsDisabled(void)
Code126 13e8:0330: (Int037) byte MainActor::I_addItemCru(4 bytes)
Code126 13e8:0330: (Int0B8) byte MainActor::I_addItemCru(4 bytes)
Code126 13e8:0e21: (Int074) void Ultima8Engine::I_clrUnkCrusaderFlag(void)
Code126 13e8:0e27: (Int070) byte Ultima8Engine::I_getUnkCrusaderFlag(void)
Code126 13e8:0e2b: (Int071) void Ultima8Engine::I_setUnkCrusaderFlag(void)
Code132 1418:0073: (Int0FF) int16 UCMachine::I_numToStr(int16 num)
Code132 1418:0073: (Int113) int16 UCMachine::I_numToStr(int16 num)
Code132 1418:0073: (Int126) int16 UCMachine::I_numToStr(int16 num)
Code137 1440:04ea: (Int09D) int16 PaletteFaderProcess::I_fadeToBlack(nsteps)
Code137 1440:06e6: (Int077) int16 PaletteFaderProcess::I_fadeToBlack(void)
Code137 1440:06f4: (Int09B) int16 PaletteFaderProcess::I_fadeFromBlack(nsteps)
Code137 1440:07cc: (Int07A) int16 PaletteFaderProcess::I_fadeFromBlack(void)
Code137 1440:07da: (Int08F) void PaletteFaderProcess::I_setPalToAllBlack(void)
Code137 1440:0853: (Int0DA) void PaletteFaderProcess::I_setPalToAllGrey(void)
Code137 1440:0a7c: (Int09A) void PaletteFaderProcess::I_stopFadesAndResetToGamePal(void)
Code137 1440:0ab2: (Int09F) int16 PaletteFaderProcess::I_fadeToColor(r, g, b, nsteps, unk)
Code137 1440:0bc6: (Int09C) int16 PaletteFaderProcess::I_fadeFromBlackWithParam(nsteps, unk)
Code137 1440:0c47: (Int09E) int16 PaletteFaderProcess::I_fadeToBlackWithParam(nsteps, unk)

View file

@ -0,0 +1,334 @@
intrinsics = [
"byte World::I_getAlertActive(void)",
"int16 Item::I_getFrame(Item *)",
"void Item::I_setFrame(Item *, frame)",
"int16 Item::I_getMapArray(Item *)",
"int16 Item::I_getStatus(Item *)",
"void Item::I_orStatus(Item *, uint16 flags)",
"int16 Item::I_equip(6 bytes)",
"byte Item::I_isOnScreen(Item *)",
"byte Actor::I_isNPC(Item *)",
"byte Item::I_getZ(Item *)",
"void Item::I_destroy(Item *)",
"int16 Actor::I_GetNPCDataField0x63_00B(Actor *)",
"void Ultima8Engine::I_setAvatarInStasis(int)",
"byte Item::I_getDirToItem(Item *, itemno)",
"int16 Actor::I_turnToward(Actor *, direction, unk)",
"void I_playFlic(void), int16 I_playFlic(Item *, char *name, int16 sizex, int16 sizey)",
"int16 Item::I_getQLo(Item *)",
"int16 Actor::I_getMap(4 bytes)",
"void MusicProcess:I_playMusic(int trackno)",
"int16 Item::I_getX(Item *)",
"int16 Item::I_getY(Item *)",
"void AudioProcess::I_playSFXCru(Item *, uint16 sfxnum)",
"int16 Item::I_getShape(Item *)",
"void Item::I_explode(Item *, exptype, destroy_item)",
"int16 UCMachine::I_rndRange(uint16 x, uint16 y)",
"byte Item::I_legalCreateAtCoords(Item *, int16 shapeno, int16 frame, int16 x, int16 y, int16 z)",
"void Item::I_andStatus(Item *, uint16 status)",
"int16 I_getTargetNPCNumMaybe(void)",
"byte Actor::I_getDir(4 bytes)",
"int16 Actor::I_getLastAnimSet(4 bytes)",
"int16 Actor::I_maybeFire(Actor *, x, y, z, byte, int, byte)",
"byte Item::I_create(Item *, uint16 shapenum, uint16 framenum)",
"void Item::I_popToCoords(Item *, uint16 x, uint16 y, uint16 z)",
"void Actor::I_setDead(4 bytes)",
"void I_push(Item *)",
"int16 Item::I_getEtherealTop(void)",
"void Item::I_setShape(Item *, int16 shapeno)",
"void Item::I_touch(Item *)",
"int16 Item::I_getQHi(Item *)",
"int16 I_getClosestDirectionInRange(x1, y1, x2, y2, numdirs, mindir, maxdir)",
"int16 Item::I_hurl(Item *,8 bytes)",
"int16 Game::I_getDifficultyLevel(void)",
"void AudioProcess::I_playAmbientSFXCru(Item *, sndno)",
"int16 Item::I_getQLo(Item *)",
"byte Item::I_inFastArea(Item *)",
"void Item::I_setQHi(Item *, uint16 qhi)",
"byte I_legalMoveToPoint(Item *, Point *, int16 force)",
"byte Intrinsic02F(int, int, shapeno, Point *)",
"void Item::I_pop(Item *)",
"void Item::I_andStatus(Item *, uint16 status)",
"void Item::I_receiveHit(Item *, other, dir, damage, damagetype)",
"byte Actor::I_isBusy(4 bytes)",
"int16 Item::I_getDirFromTo16(x1, y1, x2, y2)",
"byte Actor::I_getSomeFlagProbablyCrouch(Item *)",
"int16 Actor::I_doAnim(12 bytes)",
"byte MainActor::I_addItemCru(4 bytes)",
"void AudioProcess::I_stopSFXCru(Item *, int16 sndno)",
"byte Actor::I_isDead(Item *)",
"byte AudioProcess::I_isSFXPlayingForObject(Item *, int16 unk)",
"void Item::I_setQLo(Item *, int16 qlo)",
"int16 Item::I_getItemFamily(Item *)",
"void Container::I_destroyContents(Item *)",
"void Item::I_fallProbably_03E(Item *)",
"int16 Egg::I_getEggId(Item *)",
"void CameraProcess::I_moveTo(x, y, z)",
"void CameraProcess::I_setCenterOn(objid)",
"byte Item::I_getRangeIfVisible(Item *, otheritem)",
"void AudioProcess::I_playSFXCru(Item *, soundno)",
"byte Item::I_IsOn(Item *, uint16 itemno)",
"int16 Item::I_getQHi(Item *)",
"byte Item::I_IsOn(Item *, uint16 itemno))",
"int16 Item::I_getQHi(Item *)",
"byte Item::I_IsOn(Item *, uint16 itemno)",
"int16 Item::I_getQHi(Item *)",
"byte Item::I_IsOn(Item *, uint16 itemno)",
"int16 Item::I_getQHi(Item *)",
"byte Item::I_IsOn(Item *, uint16 itemno)",
"int16 Item::I_getQHi(Item *)",
"byte Item::I_IsOn(Item *, uint16 itemno)",
"int16 Item::I_getQHi(Item *)",
"int16 I_GetNPCDataField0x2_050(Actor *)",
"void Actor::I_clrInCombat(Actor *)",
"void Actor::I_setDefaultActivity0(Actor *, int)",
"void Actor::I_setDefaultActivity1(Actor *, int)",
"void Actor::I_setDefaultActivity2(Actor *, int)",
"void Actor::I_setActivity(Actor *, int)",
"void Intrinsic056(int itemno)",
"int16 Item::I_getSurfaceWeight(Item *)",
"byte Item::I_isCentreOn(Item *, uint16 other)",
"void Item::I_setFrame(Item *, frame)",
"int16 Actor::I_getLastAnimSet(4 bytes)",
"byte Item::I_legalCreateAtPoint(Item *, int16 shape, int16 frame, Point *)",
"void Item::I_getPoint(Item *, Point *)",
"void I_mouseSomethingOffMaybe05D(void)",
"int16 I_playFlicsomething(uint32, char *, int16 a, int16 b)",
"void I_mouseSomethingResume05F(void)",
"void Actor::I_setDead(4 bytes)",
"void Actor::I_create(8 bytes)",
"void CameraProcess::I_somethingAboutCameraUpdate(void)",
"void Actor::I_teleport(12 bytes)",
"void Item::I_getFootpad(Item *, uint *, uint *, uint *)",
"byte Item::I_isInNPC(Item *)",
"int16 Item::I_getQLo(Item *)",
"int16 Item::I_getNPCNum(Item *)",
"void Item::I_setNpcNum(Item *, uint16 npcnum)",
"void Item::I_andStatus(Item *, uint16 status)",
"void Item::I_move(Item *, int16 x, int16 y, uint16 z)",
"int16 Game::I_isViolenceEnabled(void)",
"void Kernel::I_resetRef(int16, int16)",
"int16 Item::I_getNPCNum(Item *)",
"void Item::I_andStatus(Item *, uint16 status)",
"byte Item::I_isCompletelyOn(Item *, uint16 other)",
"byte Ultima8Engine::I_getUnkCrusaderFlag(void)",
"void Ultima8Engine::I_setUnkCrusaderFlag(void)",
"void Ultima8Engine::I_setCruStasis(void)",
"void Actor::I_setDead(4 bytes)",
"void Ultima8Engine::I_clrUnkCrusaderFlag(void)",
"void Ultima8Engine::I_clrCruStasis(void)",
"void AudioProcess::I_stopSFX(Item *)",
"int16 PaletteFaderProcess::I_fadeToBlack(void)",
"void MainActor::I_clrKeycards(void)",
"int16 MainActor::I_teleportToEgg(int, int, int)",
"int16 PaletteFaderProcess::I_fadeFromBlack(void)",
"void Actor::I_clrImmortal(Actor *)",
"int16 Actor::I_getHp(Actor *)",
"void Actor::I_setActivity(Actor *, int)",
"int16 Item::I_getQuality(Item *)",
"void Item::I_setQuality(Item *, int)",
"int16 Item::I_use(Item *)",
"int16 MainActor::I_getMaxEnergy(Actor *)",
"int16 Actor::I_getMana(Actor *)",
"void Actor::I_setMana(Actor *, int)",
"int16 Item::I_getQLo(Item *)",
"void Actor::I_setImmortal(Actor *)",
"int16 CameraProcess::I_getCameraX(void)",
"int16 CameraProcess::I_getCameraY(void)",
"void Item::I_setMapArray(Item *, uint16 maparray)",
"int16 Item::I_getNpcNum(Item *)",
"void Intrinsic08A(12 bytes)",
"int16 Item::I_enterFastArea(Item *)",
"void Item::I_setIsBroken(Item *)",
"int16 Item::I_hurl(Item *,8 bytes)",
"int16 Item::I_getNPCNum(Item *)",
"void PaletteFaderProcess::I_setPalToAllBlack(void)",
"void MusicProcess::I_musicStop(void)",
"void I_setSomeMovieGlobal(void)",
"void I_playFlic092(char *)",
"void I_clearSomeMovieGlobal(void)",
"void Game::I_playCredits(void)",
"byte Kernel::I_getCurrentKeyDown(void)",
"int16 MainActor::I_teleportToEgg(int, int)",
"void PaletteFaderProcess:I_setScreenGreyscale(void)",
"void I_resetVargasHealthTo500(void)",
"void Item::I_andStatus(Item *, uint16 status)",
"void PaletteFaderProcess::I_stopFadesAndResetToGamePal(void)",
"int16 PaletteFaderProcess::I_fadeFromBlack(nsteps)",
"int16 PaletteFaderProcess::I_fadeFromBlackWithParam(nsteps, unk)",
"int16 PaletteFaderProcess::I_fadeToBlack(nsteps)",
"int16 PaletteFaderProcess::I_fadeToBlackWithParam(nsteps, unk)",
"int16 PaletteFaderProcess::I_fadeToColor(r, g, b, nsteps, unk)",
"void Actor::I_setDead(Actor *)",
"int16 Item::I_getQLo(Item *)",
"int16 Item::I_getUnkEggType(Item *)",
"void Egg::I_setEggXRange(Egg *, int)",
"byte Item::I_overlaps(Item *, uint16 unk)",
"byte Item::I_isOn(Item *, itemno)",
"int16 I_getAnimationsDisabled(void)",
"int16 Egg::I_getEggXRange(Egg *)",
"void Actor::I_setDead(Actor *)",
"void I_playFlic0A9(char *)",
"void I_playSFX(2 bytes)",
"byte Actor::I_NPCGetField0x59Flag1_0AB(Actor *)",
"int16 Item::I_getFamilyOfType(Item *)",
"int16 Item::I_getNPCNum(Item *)",
"int16 Item::I_getQLo(Item *)",
"int16 Item::I_getQHi(Item *)",
"int16 Item::I_unequip(6 bytes)",
"int16 Item::I_spawnUsecodeEvent0x13(Item *, 2 bytes)",
"void Item::I_andStatus(Item *, uint16 status)",
"int32 I_getCurrentTimerTick(void)",
"void Ultima8Engine::I_setAlertActive(void)",
"int16 Item::I_equip(6 bytes)",
"void Ultima8Engine::I_clrAlertActive(void)",
"int16 Ultima8Engine::I_getAvatarInStasis(void)",
"byte MainActor::I_addItemCru(4 bytes)",
"int16 Actor::I_getLastAnimSet(4 bytes)",
"void Item::I_setQuality(Item *, int)",
"byte Intrinsic0BB(8 bytes)",
"byte Item::I_isOn(Item *, itemno)",
"int16 Item::I_hurl(Item *,8 bytes)",
"int16 Item::I_getQHi(Item *)",
"void Item::I_andStatus(Item *, uint16 status)",
"int16 Item::I_hurl(Item *,8 bytes)",
"void Item::I_andStatus(Item *, uint16 status)",
"int16 Item::I_hurl(Item *,8 bytes)",
"void Item::I_andStatus(Item *, uint16 status)",
"int16 KeypadGump::I_showKeypad(int targetCode)",
"byte Item::I_isOn(Item *, itemno)",
"void SpriteProcess::I_createSprite(word, word, word, word, uword, uword, ubyte)",
"byte Item::I_getDirFromItem(Item *, itemno)",
"int16 Item::I_hurl(Item *,8 bytes)",
"int16 Item::I_getQHi(Item *)",
"byte Actor::I_addHp(Actor *, int)",
"void I_createMapJumpProcess(int16 mapnum)",
"byte Actor::I_getInCombat(Actor *)",
"void Actor::I_setActivity(Actor *, int)",
"int16 Game::I_isReleaseBuild(void)",
"void Item::I_setQAndCombine(Item *, int16 q)",
"int16 Item::I_use(Item *)",
"void AudioProcess:I_stopAllSFX(void)",
"void I_playFlic0D2(int *item,char *flicname,word sizex,word sizey)",
"void Intrinsic0D3(void)",
"void I_playSFX(2 bytes)",
"int16 Item::I_use(Item *)",
"byte CameraProcess::I_getCameraZ(void)",
"int16 Actor::I_getLastAnimSet(4 bytes)",
"void Actor::I_setDead(4 bytes)",
"int16 Item::I_getQLo(Item *)",
"void PaletteFaderProcess::I_setPalToAllGrey(void)",
"void Actor::I_setActivity(Actor *, int)",
"byte Item::I_isOn(Item *, itemno)",
"int16 Actor::I_GetNPCDataField0x4_0DD(Actor *)",
"void Actor::I_setCombatTactic(Actor *, int)",
"int16 Actor::I_getEquip(6 bytes)",
"void Actor::I_setEquip(8 bytes)",
"int16 Actor::I_getDefaultActivity0(Actor *)",
"int16 Actor::I_getDefaultActivity1(Actor *)",
"int16 Actor::I_getDefaultActivity2(Actor *)",
"int16 Actor::I_getLastAnimSet(4 bytes)",
"void Actor::I_attack(Actor *, uint16 target)",
"void Actor::I_SetNPCDataField0x63_0E6(Actor *, int)",
"void Actor::I_setDead(4 bytes)",
"int16 Item::I_cast(6 bytes)",
"void Item::I_andStatus(Item *, uint16 status)",
"int16 Item::I_getQLo(Item *)",
"int16 I_GetQOfAvatarInventoryItem0x4ed_0EB(void)",
"void Item::I_popToEnd(Item*, int)",
"void Item::I_popToContainer(Item*, int)",
"void BatteryChargerProcess::I_create(void)",
"int16 Kernel::I_getNumProcesses(int, int)",
"int16 Item::I_getQHi(Item *)",
"byte Item::I_isOn(Item *, itemno)",
"void Actor::I_setActivity(Actor *, int)",
"int16 Item::I_getQHi(Item *)",
"int16 Item::I_getQ(Item *)",
"void Item::I_setQ(Item *, uint16 q)",
"void CruHealer::I_create_0F6(void)",
"int16 Item::I_hurl(Item *,8 bytes)",
"int16 Item::I_getNPCNum(Item *)",
"int16 Item::I_hurl(Item *,8 bytes)",
"byte Item::I_isOn(Item *, itemno)",
"int16 Item::I_getQHi(Item *)",
"void Item::I_andStatus(Item *, uint16 status)",
"byte MainActor::I_hasKeycard(int)",
"void ComputerGump::I_readComputer(char *)",
"int16 UCMachine::I_numToStr(int16 num)",
"int16 Item::I_getNPCNum(Item *)",
"void Item::I_andStatus(Item *, uint16 status)",
"int16 Item::I_getNPCNum(Item *)",
"byte Item::I_isCrusTypeNPC(uint16 shapenum)",
"void Item::I_andStatus(Item *, uint16 status)",
"int16 Item::I_getNPCNum(Item *)",
"void Item::I_andStatus(Item *, uint16 status)",
"int16 Item::I_getNPCNum(Item *)",
"void Item::I_andStatus(Item *, uint16 status)",
"int16 Item::I_getNPCNum(Item *)",
"void Item::I_andStatus(Item *, uint16 status)",
"int16 Item::I_getNPCNum(Item *)",
"void Item::I_andStatus(Item *, uint16 status)",
"int16 Item::I_getNPCNum(Item *)",
"void Item::I_andStatus(Item *, uint16 status)",
"int16 Item::I_getNPCNum(Item *)",
"void Item::I_andStatus(Item *, uint16 status)",
"int16 Item::I_getNPCNum(Item *)",
"byte Actor::I_getDir(Actor *)",
"int16 UCMachine::I_numToStr(int16 num)",
"void Item::I_andStatus(Item *, uint16 status)",
"int16 Item::I_getNPCNum(Item *)",
"byte Intrinsic116(14 bytes)",
"void Item::I_andStatus(Item *, uint16 status)",
"int16 Item::I_hurl(Item *,8 bytes)",
"void Item::I_setIsBroken(Item *)",
"void Item::I_andStatus(Item *, uint16 status)",
"byte Item::I_getTypeFlag(Item *, uint16 shift)",
"int16 Item::I_getNPCNum(Item *)",
"int16 Item::I_hurl(Item *,8 bytes)",
"int16 Item::I_getCY(Item *)",
"byte Item::I_getCZ(Item *)",
"int16 Item::I_getCX(Item *)",
"byte Actor::I_getDir(4 bytes)",
"byte Actor::I_isDead(Item *)",
"int16 Item::I_getNPCNum(Item *)",
"int16 Actor::I_getLastAnimSet(4 bytes)",
"void Item::I_setQuality(Item *, int)",
"int16 UCMachine::I_numToStr(int16 num)",
"byte Item::I_getDirToCoords(Item *, uin16 x, uint16 y)",
"void Item::I_andStatus(Item *, uint16 status)",
"int16 Item::I_getNPCNum(Item *)",
"void Item::I_setIsBroken(Item *)",
"int16 IItem::I_getCY(Item *)",
"byte Item::I_isOn(Item *, itemno)",
"void Item::I_getFootpadData(Item *, uint *, uint *, uint *)",
"byte Actor::I_isDead(Item *)",
"int16 Actor::I_createActorCru(Item *, uint16 other_itemno)",
"void Actor::I_clrImmortal(Actor *)",
"void Actor::I_setActivity(Actor *, int)",
"void Item::I_andStatus(Item *, int16 status)",
"int16 Item::I_getQHi(Item *)",
"void Intrinsic134(2 bytes)",
"void Actor::I_setDead(Actor *)",
"void UNUSEDInt136()",
"void UNUSEDInt137()"
]

View file

@ -0,0 +1,245 @@
Code003 1010:01d5: (Int0E5) FeedAvatar(word)
Code003 1010:0393: (Int0B6) urandom(word)
Code003 1010:03b2: (Int0B7) rndRange(word,word)
Code005 1020:032f: (Int0DA) TimeInSeconds()
Code005 1020:0349: (Int0D9) TimeInMinutes()
Code005 1020:0363: (Int0D8) TimeInGameHours()
Code005 1020:0372: (Int0DD) SetTimeInSeconds(long)
Code005 1020:038f: (Int0DC) SetTimeInMinutes(long)
Code005 1020:03af: (Int0DB) SetTimeInGameHours(word)
Code009 1040:16a8: (Int044) process Item::hurl(word, word, word, word)
Code009 1040:179f: (Int046) Item::fall()
Code010 1048:0000: (Int0D2) getCurrentTimerTick()
Code012 1058:0439: (Int0FF) unused
Code013 1060:10c9: (Int0D4) canExistAt(uword, uword, uword, uword, ubyte, uword, word)
Code016 1078:1047: (Int0DE) process FadeToBlack()
Code016 1078:107b: (Int0DF) process FadeFromBlack()
Code016 1078:10a5: (Int0E0) process FadeToPalette(word, word)
Code016 1078:10d0: (Int0E1) process LightningBolt()
Code016 1078:11c9: (Int0E2) process FadeToWhite()
Code016 1078:11fd: (Int0E3) process FadeFromWhite()
Code020 1098:06f5: (Int070) process Grave::read(word,char*)
Code020 1098:073a: (Int071) process Plaque::read(word,char*)
Code021 10a0:077a: (Int06E) process Book::read(char*)
Code021 10a0:07be: (Int06F) process Scroll::read(char*)
Code022 10a8:0587: (Int075) Egg::setEggYRange(uword)
Code022 10a8:05bc: (Int076) Egg::getEggId()
Code022 10a8:05d8: (Int077) Egg::setEggId(uword)
Code022 10a8:05f4: (Int078) Egg::hatch()
Code028 10d8:01ac: (Int003) word Item::getX()
Code028 10d8:01f0: (Int004) word Item::getY()
Code028 10d8:0234: (Int009) word Item::Ultima8::getGumpX()
Code028 10d8:026d: (Int00A) word Item::Ultima8::getGumpY()
Code028 10d8:02a7: (Int00B) void Item::setGumpXY(word x, word y)
Code028 10d8:02fa: (Int005) word Item::getZ()
Code028 10d8:033a: (Int006) word Item::getCX()
Code028 10d8:0387: (Int007) word Item::getCY()
Code028 10d8:03d1: (Int008) word Item::getCZ()
Code028 10d8:0503: (Int001) Item::getNext()
Code028 10d8:0519: (Int02C) Item::getWeight()
Code028 10d8:0603: (Int02D) Item::getWeightIncludingContents()
Code028 10d8:0658: (Int02F) Item::getVolume()
Code028 10d8:0712: (Int030) Item::getCapacity()
Code028 10d8:0768: (Int02E) Item::getSurfaceWeight()
Code028 10d8:07f8: (Int00D) uword Item::getShape()
Code028 10d8:080e: (Int00E) void Item::setShape(uword type)
Code028 10d8:0827: (Int00F) uword Item::getFrame()
Code028 10d8:0884: (Int010) void Item::setFrame(uword frame)
Code028 10d8:096b: (Int051) Item::setNpcArray(word)
Code028 10d8:0987: (Int04F) Item::getNpcArray()
Code028 10d8:09a3: (Int052) Item::setMapArray(word)
Code028 10d8:09bf: (Int050) Item::getMapArray()
Code028 10d8:09db: (Int019) uword Item::getQ()
Code028 10d8:09f1: (Int011) uword Item::getQuality()
Code028 10d8:0a33: (Int01B) void Item::setQuality(word value)
Code028 10d8:0a74: (Int012) uword Item::getUnkEggType()
Code028 10d8:0ab6: (Int01C) void Item::setUnkEggType(word value)
Code028 10d8:0af7: (Int013) uword Item::getQuantity()
Code028 10d8:0b44: (Int01D) void Item::setQuantity(word value)
Code028 10d8:0b9b: (Int014) Item::getContents()
Code028 10d8:0bdd: (Int015) Item::getContainer()
Code028 10d8:0c0b: (Int016) Item::getRootContainer()
Code028 10d8:0c81: (Int017) uword Item::getGlobNum()
Code028 10d8:0cc3: (Int018) void Item::setGlobNum(uword)
Code028 10d8:0d04: (Int01A) void Item::setQ(uword)
Code028 10d8:0d5e: (Int01E) word Item::getFamily()
Code028 10d8:0d87: (Int01F) bool Item::getTypeFlag(word bit)
Code028 10d8:0dce: (Int020) word Item::getStatus()
Code028 10d8:0de4: (Int033) Item::legal_create(uword, uword, WorldPoint*)
Code028 10d8:0e6f: (Int031) Item::legal_create(uword, uword, uword, uword, uword)
Code028 10d8:0f18: (Int034) Item::legal_create(uword, uword, uword, word)
Code028 10d8:0f72: (Int032) Item::create(uword, uword)
Code028 10d8:1009: (Int036) Item::pop(uword, uword, ubyte)
Code028 10d8:1020: (Int037) Item::pop(uword)
Code028 10d8:1030: (Int038) Item::pop()
Code028 10d8:103a: (Int039) Item::popToEnd(uword)
Code028 10d8:104a: (Int035) Item::push()
Code028 10d8:105d: (Int03A) Item::destroy()
Code028 10d8:1095: (Int03C) Item::destroyContents()
Code028 10d8:10c6: (Int03B) Item::removeContents()
Code028 10d8:10f7: (Int03E) Item::move(uword, uword, ubyte)
Code028 10d8:1167: (Int040) Item::legal_movetopoint(WorldPoint*, uword, uword)
Code028 10d8:120b: (Int041) Item::legal_move(uword*, uword)
Code028 10d8:1372: (Int03F) Item::move(WorldPoint*)
Code028 10d8:1406: (Int058) Item::getDirToCoords(uword, uword)
Code028 10d8:1431: (Int059) Item::getDirFromCoords(uword, uword)
Code028 10d8:1453: (Int05B) Item::getDirFromItem(uword)
Code028 10d8:1489: (Int05A) Item::getDirToItem(uword)
Code028 10d8:14bf: (Int023) Item::getFootpad(word*, word*, word*)
Code028 10d8:155a: (Int024) Item::touches(uword)
Code028 10d8:16fa: (Int025) Item::overlaps(uword)
Code028 10d8:1841: (Int026) Item::overlapsXY(uword)
Code028 10d8:1936: (Int027) Item::isOn(uword)
Code028 10d8:19a8: (Int028) Item::isCompletelyOn(uword)
Code028 10d8:1acf: (Int029) Item::isAbove(uword)
Code028 10d8:1b41: (Int02A) Item::isUnder(uword)
Code028 10d8:1ba9: (Int02B) Item::ascend(word)
Code028 10d8:1e82: (Int00C) Item::getPoint(WorldPoint*)
Code028 10d8:1ebc: (Int042) Item::isNpc()
Code028 10d8:1ed8: (Int043) Item::isInNpc()
Code028 10d8:1f3f: (Int002) Item::touch()
Code028 10d8:1f9d: (Int021) void Item::orStatus(word mask)
Code028 10d8:1fb6: (Int022) void Item::andStatus(word mask)
Code028 10d8:1fcf: (Int05C) process Item::look()
Code028 10d8:1ffb: (Int05D) process Item::use()
Code028 10d8:20d3: (Int060) Item::hit(uword, word)
Code028 10d8:211a: (Int061) process Item::gotHit(uword, word)
Code028 10d8:2161: (Int05E) process Item::anim()
Code028 10d8:2291: (Int049) process Item::bark(char* str)
Code028 10d8:23bf: (Int047) Item::grab()
Code028 10d8:2455: (Int062) process Item::release()
Code028 10d8:2484: (Int063) process Item::equip()
Code028 10d8:24b3: (Int064) process Item::unequip()
Code028 10d8:24e2: (Int05F) process Item::cachein()
Code028 10d8:2519: (Int065) process Item::combine()
Code028 10d8:2548: (Int066) process Item::calledFromAnim()
Code028 10d8:2577: (Int067) process Item::enterFastArea()
Code028 10d8:26b3: (Int068) process Item::leaveFastArea()
Code028 10d8:280b: (Int069) process Item::cast(uword)
Code028 10d8:283e: (Int06A) process Item::justMoved()
Code028 10d8:286d: (Int06C) process Item::animGetHit(uword)
Code028 10d8:28a0: (Int06D) process Item::guardianBark(word)
Code028 10d8:28dd: (Int06B) process Item::AvatarStoleSomething(uword)
Code028 10d8:2945: (Int048) Item::findTarget(word, word)
Code028 10d8:29c5: (Int04B) word Item::getSliderInput(word min, word max, word step)
Code028 10d8:29e1: (Int04A) strptr process Item::ask(uword slist)
Code028 10d8:29f7: (Int04C) Item::openGump(word)
Code028 10d8:2a91: (Int04D) Item::closeGump()
Code028 10d8:2b9a: (Int04E) Item::isGumpOpen()
Code028 10d8:329e: (Int053) Item::receiveHit(uword, byte, word, uword)
Code028 10d8:4380: (Int03D) Item::isExplosive()
Code028 10d8:43d9: (Int054) Item::explode()
Code028 10d8:4994: (Int055) Item::canReach(uword, word)
Code028 10d8:49d9: (Int056) Item::getRange(uword)
Code028 10d8:4b65: (Int057) Item::getRange(uword, uword, uword)
Code028 10d8:4e53: (Int045) Item::shoot(WorldPoint*, word, word)
Code029 10e0:2c23: (Int0D1) getEtherealTop()
Code031 10f0:0000: (Int079) MonsterEgg::hatch()
Code031 10f0:01e9: (Int07A) MonsterEgg::getMonId()
Code031 10f0:01fd: (Int07D) MonsterEgg::setMonId(word)
Code031 10f0:022f: (Int07B) MonsterEgg::getActivity()
Code031 10f0:0243: (Int07E) MonsterEgg::setActivity(word)
Code031 10f0:0272: (Int07C) MonsterEgg::getShapeType()
Code031 10f0:0286: (Int07F) MonsterEgg::setShapeType(word)
Code032 10f8:0260: (Int080) Npc::isBusy()
Code032 10f8:0276: (Int09F) process Npc::doAnim(AnimSet, word, word, ubyte)
Code032 10f8:1908: (Int085) Npc::setTarget(uword)
Code032 10f8:198d: (Int086) Npc::getTarget()
Code032 10f8:19cf: (Int081) Npc::areEnemiesNear()
Code032 10f8:1ac9: (Int082) Npc::isInCombat()
Code032 10f8:1ae9: (Int087) Npc::setAlignment(ubyte)
Code032 10f8:1b29: (Int088) Npc::getAlignment()
Code032 10f8:1b45: (Int089) Npc::setEnemyAlignment(ubyte)
Code032 10f8:1b85: (Int08A) Npc::getEnemyAlignment()
Code032 10f8:1ba1: (Int08C) Npc::isDead()
Code032 10f8:1bd2: (Int08D) Npc::setDead()
Code032 10f8:1bed: (Int08E) Npc::clrDead()
Code032 10f8:1c08: (Int0A1) process Npc::pathfind(uword, uword, uword, uword)
Code032 10f8:1c5c: (Int0A2) process Npc::pathfind(uword, uword)
Code032 10f8:1c8a: (Int09A) Npc::getNpcSlot()
Code032 10f8:1cde: (Int09B) Npc::freeNpcSlot()
Code032 10f8:1cf9: (Int0AF) Npc::setAirWalkEnabled(ubyte)
Code032 10f8:1d22: (Int0B0) Npc::getAirWalkEnabled()
Code032 10f8:1d3f: (Int08F) Npc::isImmortal()
Code032 10f8:1d5f: (Int090) Npc::setImmortal()
Code032 10f8:1d86: (Int091) Npc::clrImmortal()
Code032 10f8:1e64: (Int095) Npc::isFeignDeath()
Code032 10f8:1e84: (Int096) Npc::setFeignDeath()
Code032 10f8:1f2c: (Int097) Npc::clrFeignDeath()
Code032 10f8:21d2: (Int092) Npc::isWithstandDeath()
Code032 10f8:21f2: (Int093) Npc::setWithstandDeath()
Code032 10f8:220d: (Int094) Npc::clrWithstandDeath()
Code032 10f8:2228: (Int08B) Npc::isEnemy(uword)
Code032 10f8:230f: (Int0AD) Npc::create(uword, uword)
Code032 10f8:2591: (Int0B2) Npc::getEquip(word)
Code032 10f8:25c4: (Int0B3) Npc::setEquip(word, uword)
Code032 10f8:2696: (Int098) Npc::freeEquip(uword)
Code032 10f8:2736: (Int099) Npc::clearEquip()
Code032 10f8:276b: (Int09E) Npc::teleport(uword, uword, ubyte, ubyte)
Code032 10f8:288c: (Int09D) Npc::getMap()
Code032 10f8:28e4: (Int0AE) process Npc::cSetActivity(Activity)
Code032 10f8:296e: (Int0B1) Npc::schedule(ulong)
Code032 10f8:2f83: (Int083) Npc::setInCombat()
Code032 10f8:303c: (Int084) Npc::clrInCombat()
Code032 10f8:32f9: (Int0EA) SetAvatarInCombat()
Code032 10f8:3309: (Int0E9) ClrAvatarInCombat()
Code032 10f8:3319: (Int0EB) IsAvatarInCombat()
Code032 10f8:332b: (Int0A3) byte Npc::getStr()
Code032 10f8:3344: (Int0A5) byte Npc::getDex()
Code032 10f8:335e: (Int0A4) byte Npc::getInt()
Code032 10f8:3378: (Int0A6) ubyte Npc::getHp()
Code032 10f8:3392: (Int0A7) word Npc::getMana()
Code032 10f8:33ac: (Int0A8) void Npc::setStr(byte str)
Code032 10f8:33c8: (Int0AA) void Npc::setDex(byte dex)
Code032 10f8:33e5: (Int0A9) void Npc::setInt(byte int)
Code032 10f8:3402: (Int0AB) void Npc::setHp(ubyte hp)
Code032 10f8:341f: (Int0AC) void Npc::setMana(word mana)
Code032 10f8:343c: (Int0BC) getName()
Code032 10f8:3455: (Int0CF) getAvatarInStasis()
Code032 10f8:345d: (Int0D0) setAvatarInStasis(word)
Code032 10f8:349a: (Int09C) Npc::getDir()
Code032 10f8:34b4: (Int0A0) Npc::getLastAnimSet()
Code032 10f8:36ba: (Int0E6) AccumulateStrength(word)
Code032 10f8:36cd: (Int0E7) AccumulateIntelligence(word)
Code032 10f8:36e0: (Int0E8) AccumulateDexterity(word)
Code032 10f8:36f3: (Int0FC) AvatarCanCheat()
Code032 10f8:36fb: (Int0FD) MakeAvatarACheater()
Code033 1100:05df: (Int0D7) word getFamilyOfType(uword type)
Code038 1128:0b61: (Int0FB) TonysBalls(word, word, uword, uword, uword)
Code041 1140:19d9: (Int0FA) musicPlay(word)
Code041 1140:19fc: (Int0F8) musicStop()
Code041 1140:1a01: (Int0F9) musicSlowStop()
Code073 1240:0f6b: (Int0F6) soundInit(word, word, word)
Code073 1240:1083: (Int0F7) soundDeInit()
Code073 1240:16f4: (Int0EC) playSFX(word)
Code073 1240:170c: (Int0ED) playSFX(word, ubyte)
Code073 1240:176b: (Int0EE) playSFX(word, word, uword)
Code073 1240:1786: (Int0EF) playAmbientSFX(word)
Code073 1240:179e: (Int0F0) playAmbientSFX(word, word)
Code073 1240:17b8: (Int0F1) playAmbientSFX(word, word, uword)
Code073 1240:17d3: (Int0F5) stopSFX(word, uword)
Code073 1240:17f9: (Int0F4) stopSFX(word)
Code073 1240:1840: (Int0F3) setVolumeSFX(word, word)
Code073 1240:18b7: (Int0F2) isSFXPlaying(word)
Code073 1240:1a6d: (Int0BB) playMusic(byte)
Code105 1340:0000: (Int0B4) closeAllGumps()
Code107 1350:1101: (Int0E4) playEndgame()
Code117 13a0:062e: (Int0C9) U8MousePointer::getDir()
Code120 13b8:5795: (Int000) process target()
Code125 13e0:0000: (Int0B9) numToStr(uword)
Code125 13e0:0027: (Int0BA) strToNum(char*)
Code126 13e8:151a: (Int0CD) resetRef(uword, uword)
Code126 13e8:152d: (Int0CE) setRef(uword, uword, uword)
Code135 1430:0000: (Int0D5) createSprite(word, word, word, word, word, word, uword, uword, ubyte)
Code135 1430:005a: (Int0D6) createSprite(word, word, word, word, uword, uword, ubyte)
Code137 1440:1552: (Int0BD) igniteChaos(uword, uword, ubyte)
Code143 1470:05d4: (Int0B8) castGrantPeaceSpell()
Code144 1478:0d78: (Int0D3) canGetThere(uword, uword, uword)

275
tools/unkcoffs/u8_ints.py Normal file
View file

@ -0,0 +1,275 @@
intrinsics = [
"process target()",
"Item::getNext()",
"Item::touch()",
"word Item::getX()",
"word Item::getY()",
"word Item::getZ()",
"word Item::getCX()",
"word Item::getCY()",
"word Item::getCZ()",
"word Item::Ultima8::getGumpX()",
"word Item::Ultima8::getGumpY()",
"void Item::setGumpXY(word x, word y)",
"Item::getPoint(WorldPoint*)",
"uword Item::getType()",
"void Item::setType(uword type)",
"uword Item::getFrame()",
"void Item::setFrame(uword frame)",
"uword Item::getQuality()",
"uword Item::getUnkEggType()",
"uword Item::getQuantity()",
"Item::getContents()",
"Item::getContainer()",
"Item::getRootContainer()",
"uword Item::getGlobNum()",
"void Item::setGlobNum(uword)",
"uword Item::getQ()",
"void Item::setQ(uword)",
"void Item::setQuality(word value)",
"void Item::setUnkEggType(word value)",
"void Item::setQuantity(word value)",
"word Item::getFamily()",
"bool Item::getTypeFlag(word bit)",
"word Item::getStatus()",
"void Item::orStatus(word mask)",
"void Item::andStatus(word mask)",
"Item::getFootpad(word*, word*, word*)",
"Item::touches(uword)",
"Item::overlaps(uword)",
"Item::overlapsXY(uword)",
"Item::isOn(uword)",
"Item::isCompletelyOn(uword)",
"Item::isAbove(uword)",
"Item::isUnder(uword)",
"Item::ascend(word)",
"Item::getWeight()",
"Item::getWeightIncludingContents()",
"Item::getSurfaceWeight()",
"Item::getVolume()",
"Item::getCapacity()",
"Item::legal_create(uword, uword, uword, uword, uword)",
"Item::create(uword, uword)",
"Item::legal_create(uword, uword, WorldPoint*)",
"Item::legal_create(uword, uword, uword, word)",
"Item::push()",
"Item::pop(uword, uword, ubyte)",
"Item::pop(uword)",
"Item::pop()",
"Item::popToEnd(uword)",
"Item::destroy()",
"Item::removeContents()",
"Item::destroyContents()",
"Item::isExplosive()",
"Item::move(uword, uword, ubyte)",
"Item::move(WorldPoint*)",
"Item::legal_move(WorldPoint*, uword, uword)",
"Item::legal_move(uword*, uword)",
"Item::isNpc()",
"Item::isInNpc()",
"process Item::hurl(word, word, word, word)",
"Item::shoot(WorldPoint*, word, word)",
"Item::fall()",
"Item::grab()",
"Item::findTarget(word, word)",
"process Item::bark(char* str)",
"strptr process Item::ask(uword slist)",
"word Item::getSliderInput(word min, word max, word step)",
"Item::openGump(word)",
"Item::closeGump()",
"Item::isGumpOpen()",
"Item::getNpcArray()",
"Item::getMapArray()",
"Item::setNpcArray(word)",
"Item::setMapArray(word)",
"Item::receiveHit(uword, byte, word, uword)",
"Item::explode()",
"Item::canReach(uword, word)",
"Item::getRange(uword)",
"Item::getRange(uword, uword, uword)",
"Item::getDirToCoords(uword, uword)",
"Item::getDirFromCoords(uword, uword)",
"Item::getDirToItem(uword)",
"Item::getDirFromItem(uword)",
"process Item::look()",
"process Item::use()",
"process Item::anim()",
"process Item::cachein()",
"Item::hit(uword, word)",
"process Item::gotHit(uword, word)",
"process Item::release()",
"process Item::equip()",
"process Item::unequip()",
"process Item::combine()",
"process Item::calledFromAnim()",
"process Item::enterFastArea()",
"process Item::leaveFastArea()",
"process Item::cast(uword)",
"process Item::justMoved()",
"process Item::AvatarStoleSomething(uword)",
"process Item::animGetHit(uword)",
"process Item::guardianBark(word)",
"process Book::read(char*)",
"process Scroll::read(char*)",
"process Grave::read(word,char*)",
"process Plaque::read(word,char*)",
"Egg::getEggXRange()",
"Egg::getEggYRange()",
"Egg::setEggXRange(uword)",
"Egg::setEggYRange(uword)",
"Egg::getEggId()",
"Egg::setEggId(uword)",
"Egg::hatch()",
"MonsterEgg::hatch()",
"MonsterEgg::getMonId()",
"MonsterEgg::getActivity()",
"MonsterEgg::getShapeType()",
"MonsterEgg::setMonId(word)",
"MonsterEgg::setActivity(word)",
"MonsterEgg::setShapeType(word)",
"Npc::isBusy()",
"Npc::areEnemiesNear()",
"Npc::isInCombat()",
"Npc::setInCombat()",
"Npc::clrInCombat()",
"Npc::setTarget(uword)",
"Npc::getTarget()",
"Npc::setAlignment(ubyte)",
"Npc::getAlignment()",
"Npc::setEnemyAlignment(ubyte)",
"Npc::getEnemyAlignment()",
"Npc::isEnemy(uword)",
"Npc::isDead()",
"Npc::setDead()",
"Npc::clrDead()",
"Npc::isImmortal()",
"Npc::setImmortal()",
"Npc::clrImmortal()",
"Npc::isWithstandDeath()",
"Npc::setWithstandDeath()",
"Npc::clrWithstandDeath()",
"Npc::isFeignDeath()",
"Npc::setFeignDeath()",
"Npc::clrFeignDeath()",
"Npc::freeEquip(uword)",
"Npc::clearEquip()",
"Npc::getNpcSlot()",
"Npc::freeNpcSlot()",
"Npc::getDir()",
"Npc::getMap()",
"Npc::teleport(uword, uword, ubyte, ubyte)",
"process Npc::doAnim(AnimSet, word, word, ubyte)",
"Npc::getLastAnimSet()",
"process Npc::pathfind(uword, uword, uword, uword)",
"process Npc::pathfind(uword, uword)",
"byte Npc::getStr()",
"byte Npc::getInt()",
"byte Npc::getDex()",
"ubyte Npc::getHp()",
"word Npc::getMana()",
"void Npc::setStr(byte str)",
"void Npc::setInt(byte int)",
"void Npc::setDex(byte dex)",
"void Npc::setHp(ubyte hp)",
"void Npc::setMana(word mana)",
"Npc::create(uword, uword)",
"process Npc::cSetActivity(Activity)",
"Npc::setAirWalkEnabled(ubyte)",
"Npc::getAirWalkEnabled()",
"Npc::schedule(ulong)",
"Npc::getEquip(word)",
"Npc::setEquip(word, uword)",
"closeAllGumps()",
"process Camera::scrollTo(uword, uword, ubyte, word)",
"urandom(word)",
"rndRange(word,word)",
"castGrantPeaceSpell()",
"numToStr(uword)",
"strToNum(char*)",
"playMusic(byte)",
"getName()",
"igniteChaos(uword, uword, ubyte)",
"Camera::setCenterOn(uword)",
"Camera::move_to(uword, uword, ubyte, word)",
"Camera::move_rel(word, word, word)",
"Camera::set_roof(word)",
"Camera::roof()",
"Camera::getX()",
"Camera::getY()",
"Camera::getZ()",
"Camera::startQuake(word)",
"Camera::stopQuake()",
"Camera::invertScreen(ubyte)",
"U8MousePointer::getDir()",
"Kernel::getNumProcesses(uword, ProcessType)",
"Kernel::resetRef(uword, ProcessType)",
"process teleportToEgg(word, word, ubyte)",
"resetRef(uword, uword)",
"setRef(uword, uword, uword)",
"getAvatarInStasis()",
"setAvatarInStasis(word)",
"getEtherealTop()",
"getCurrentTimerTick()",
"canGetThere(uword, uword, uword)",
"canExistAt(uword, uword, uword, uword, ubyte, uword, word)",
"createSprite(word, word, word, word, word, word, uword, uword, ubyte)",
"createSprite(word, word, word, word, uword, uword, ubyte)",
"word getFamilyOfType(uword type)",
"TimeInGameHours()",
"TimeInMinutes()",
"TimeInSeconds()",
"SetTimeInGameHours(word)",
"SetTimeInMinutes(long)",
"SetTimeInSeconds(long)",
"process FadeToBlack()",
"process FadeFromBlack()",
"process FadeToPalette(word, word)",
"process LightningBolt()",
"process FadeToWhite()",
"process FadeFromWhite()",
"playEndgame()",
"FeedAvatar(word)",
"AccumulateStrength(word)",
"AccumulateIntelligence(word)",
"AccumulateDexterity(word)",
"ClrAvatarInCombat()",
"SetAvatarInCombat()",
"IsAvatarInCombat()",
"playSFX(word)",
"playSFX(word, ubyte)",
"playSFX(word, word, uword)",
"playAmbientSFX(word)",
"playAmbientSFX(word, word)",
"playAmbientSFX(word, word, uword)",
"isSFXPlaying(word)",
"setVolumeSFX(word, word)",
"stopSFX(word)",
"stopSFX(word, uword)",
"soundInit(word, word, word)",
"soundDeInit()",
"musicStop()",
"musicSlowStop()",
"musicPlay(word)",
"TonysBalls(word, word, uword, uword, uword)",
"AvatarCanCheat()",
"MakeAvatarACheater()",
"isGameRunning()",
"unused",
"unused",
]

View file

@ -0,0 +1,73 @@
#!/usr/bin/env python
from struct import unpack
from collections import defaultdict
def print_compare(vals):
for ino, (v, i) in enumerate(zip(vals, intrinsics)):
print("%s: (Int%03X) %s" % (v, ino, i))
def load_vals(off_file):
f = open(off_file, "rb")
offsets = f.read()
nints = len(offsets)/4
ioff = unpack('i' * nints, offsets)
data = []
n = 0
for i in ioff:
seg = (i & 0xffff0000) >> 16
off = i & 0xffff
data.append((seg, off, n))
n = n + 1
return data
def main():
#new_data = load_vals("remorse_fr_UNKCOFF.DAT")
#old_data = load_vals("remorse_UNKCOFF.DAT")
#fn_names = open('rem_functions.txt').readlines()
new_data = load_vals("regret_demo_UNKCOFF.DAT")
old_data = load_vals("regret_UNKCOFF.DAT")
fn_names = open('reg_functions.txt').readlines()
seg_off = 0
fn_lookup = {(seg, off): n for seg, off, n in old_data}
used = { }
j = 0
for seg, off, n in new_data:
if n % 16 == 0:
print('// 0x%03X' % n)
x = None
if x is None:
x = fn_lookup.get((seg + seg_off, off))
if x is None:
x = fn_lookup.get((seg, off))
if x is None:
for i in range(-5, 5):
x = fn_lookup.get((seg + seg_off, off + i))
if x:
break
if x is None:
for i in range(-15, 15):
x = fn_lookup.get((seg + seg_off, off + i))
if x:
break
seg_pretty = 0x1000 + (seg - 1)*8
if x is None:
print('Intrinsic%03X %04x:%04x' % (n, seg_pretty, off))
else:
if x in used and used[x] != (seg_pretty, off):
print('** WARNING: %04x:%04x looked up to %s already used by %04x:%04x' %
(seg_pretty, off, fn_names[x].strip(), used[x][0], used[x][1]))
used[x] = (seg_pretty, off)
print('%-31s // Intrinsic%03X %04x:%04x' % (fn_names[x].strip() + ',', n, seg_pretty, off))
main()