33 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			33 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | from .droppedKey import DroppedKey | ||
|  | from .items import * | ||
|  | from ..roomEditor import RoomEditor | ||
|  | from ..assembler import ASM | ||
|  | from typing import Optional | ||
|  | from ..rom import ROM | ||
|  | 
 | ||
|  | 
 | ||
|  | class BeachSword(DroppedKey): | ||
|  |     def __init__(self) -> None: | ||
|  |         super().__init__(0x0F2) | ||
|  | 
 | ||
|  |     def patch(self, rom: ROM, option: str, *, multiworld: Optional[int] = None) -> None: | ||
|  |         if option != SWORD or multiworld is not None: | ||
|  |             # Set the heart piece data | ||
|  |             super().patch(rom, option, multiworld=multiworld) | ||
|  | 
 | ||
|  |             # Patch the room to contain a heart piece instead of the sword on the beach | ||
|  |             re = RoomEditor(rom, 0x0F2) | ||
|  |             re.removeEntities(0x31)  # remove sword | ||
|  |             re.addEntity(5, 5, 0x35)  # add heart piece | ||
|  |             re.store(rom) | ||
|  | 
 | ||
|  |             # Prevent shield drops from the like-like from turning into swords. | ||
|  |             rom.patch(0x03, 0x1B9C, ASM("ld a, [$DB4E]"), ASM("ld a, $01"), fill_nop=True) | ||
|  |             rom.patch(0x03, 0x244D, ASM("ld a, [$DB4E]"), ASM("ld a, $01"), fill_nop=True) | ||
|  | 
 | ||
|  |     def read(self, rom: ROM) -> str: | ||
|  |         re = RoomEditor(rom, 0x0F2) | ||
|  |         if re.hasEntity(0x31): | ||
|  |             return SWORD | ||
|  |         return super().read(rom) |