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)
							 |