Files
alttpr-python/DamageTable.py
2025-07-22 12:44:57 -05:00

50 lines
1.4 KiB
Python

from dataclasses import dataclass, field
from typing import List
import RaceRandom as random
def _load_entries():
entries = []
with open("data/damage_table.bin", 'rb') as stream:
for sprite in range(0x100):
entries.append([])
for pair in range(8):
byte = stream.read(1)[0]
entries[sprite].append(byte >> 4)
entries[sprite].append(byte & 0x0F)
return entries
@dataclass
class DamageTable:
_entries: List[int] = field(default_factory=_load_entries)
def randomize_sword_subclasses(self):
for sprite in range(0xD8):
for dclass in range(1, 6):
if self._entries[sprite][dclass] > 0:
self._entries[sprite][dclass] = random.randint(1, 7)
def get_bytes(self):
values = []
for sprite in range(0x100):
for dclass in range(0, 16, 2):
cur = self._entries[sprite][dclass] & 0xF
nex = self._entries[sprite][dclass + 1] & 0xF
values.append((cur << 4) | nex)
return values
if __name__ == '__main__':
def print_table(table):
bytelist = table.get_bytes()
for sprite in range(0x100):
for byte in range(8):
print(format(bytelist.pop(0), "02X"), end=" ")
print()
print()
dmg = DamageTable()
print_table(dmg)
dmg.randomize_sword_subclasses()
print_table(dmg)