mirror of
https://github.com/MarioSpore/Grinch-AP.git
synced 2025-10-21 20:21:32 -06:00
SoE: use new AP API and naming and make APworld (#2701)
* SoE: new file naming also fixes test base deprecation * SoE: use options_dataclass * SoE: moar typing * SoE: no more multiworld.random * SoE: replace LogicMixin by SoEPlayerLogic object * SoE: add test that rocket parts always exist * SoE: Even moar typing * SoE: can haz apworld now * SoE: pep up test naming * SoE: use self.options for trap chances * SoE: remove unused import with outdated comment * SoE: move flag and trap extraction to dataclass as suggested by beauxq * SoE: test trap option parsing and item generation
This commit is contained in:
44
worlds/soe/patch.py
Normal file
44
worlds/soe/patch.py
Normal file
@@ -0,0 +1,44 @@
|
||||
import os
|
||||
from typing import BinaryIO, Optional
|
||||
|
||||
import Utils
|
||||
from worlds.Files import APDeltaPatch
|
||||
|
||||
|
||||
USHASH = '6e9c94511d04fac6e0a1e582c170be3a'
|
||||
|
||||
|
||||
class SoEDeltaPatch(APDeltaPatch):
|
||||
hash = USHASH
|
||||
game = "Secret of Evermore"
|
||||
patch_file_ending = ".apsoe"
|
||||
|
||||
@classmethod
|
||||
def get_source_data(cls) -> bytes:
|
||||
with open(get_base_rom_path(), "rb") as stream:
|
||||
return read_rom(stream)
|
||||
|
||||
|
||||
def get_base_rom_path(file_name: Optional[str] = None) -> str:
|
||||
options = Utils.get_options()
|
||||
if not file_name:
|
||||
file_name = options["soe_options"]["rom_file"]
|
||||
if not file_name:
|
||||
raise ValueError("Missing soe_options -> rom_file from host.yaml")
|
||||
if not os.path.exists(file_name):
|
||||
file_name = Utils.user_path(file_name)
|
||||
return file_name
|
||||
|
||||
|
||||
def read_rom(stream: BinaryIO, strip_header: bool=True) -> bytes:
|
||||
"""Reads rom into bytearray and optionally strips off any smc header"""
|
||||
data = stream.read()
|
||||
if strip_header and len(data) % 0x400 == 0x200:
|
||||
return data[0x200:]
|
||||
return data
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
import sys
|
||||
print('Please use ../../patch.py', file=sys.stderr)
|
||||
sys.exit(1)
|
||||
Reference in New Issue
Block a user