160 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			160 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | from ..assembler import ASM | ||
|  | 
 | ||
|  | 
 | ||
|  | def upgradeMarin(rom): | ||
|  |     # Show marin outside, even without a sword. | ||
|  |     rom.patch(0x05, 0x0E78, ASM("ld a, [$DB4E]"), ASM("ld a, $01"), fill_nop=True) | ||
|  |     # Make marin ignore the fact that you did not save the tarin yet, and allowing getting her song | ||
|  |     rom.patch(0x05, 0x0E87, ASM("ld a, [$D808]"), ASM("ld a, $10"), fill_nop=True) | ||
|  |     rom.patch(0x05, 0x0F73, ASM("ld a, [$D808]"), ASM("ld a, $10"), fill_nop=True) | ||
|  |     rom.patch(0x05, 0x0FB0, ASM("ld a, [$DB48]"), ASM("ld a, $01"), fill_nop=True) | ||
|  |     # Show marin in the animal village | ||
|  |     rom.patch(0x03, 0x0A86, ASM("ld a, [$DB74]"), ASM("ld a, $01"), fill_nop=True) | ||
|  |     rom.patch(0x05, 0x3F2E, ASM("ld a, [$DB74]"), ASM("ld a, $01"), fill_nop=True)  # animal d0 | ||
|  |     rom.patch(0x15, 0x3F96, ASM("ld a, [$DB74]"), ASM("ld a, $01"), fill_nop=True)  # animal d1 | ||
|  |     rom.patch(0x18, 0x11B0, ASM("ld a, [$DB74]"), ASM("ld a, $01"), fill_nop=True)  # animal d2 | ||
|  | 
 | ||
|  |     # Instead of checking if we have the ballad, check if we have a specific room flag set | ||
|  |     rom.patch(0x05, 0x0F89, ASM("""
 | ||
|  |         ld   a, [$DB49] | ||
|  |         and  $04 | ||
|  |     """), ASM(""" | ||
|  |         ld   a, [$D892] | ||
|  |         and  $10 | ||
|  |     """), fill_nop=True)
 | ||
|  |     rom.patch(0x05, 0x0FDF, ASM("""
 | ||
|  |         ld   a, [$DB49] | ||
|  |         and  $04 | ||
|  |     """), ASM(""" | ||
|  |         ld   a, [$D892] | ||
|  |         and  $10 | ||
|  |     """), fill_nop=True)
 | ||
|  |     rom.patch(0x05, 0x1042, ASM("""
 | ||
|  |         ld   a, [$DB49] | ||
|  |         and  $04 | ||
|  |     """), ASM(""" | ||
|  |         ld   a, [$D892] | ||
|  |         and  $10 | ||
|  |     """), fill_nop=True)
 | ||
|  | 
 | ||
|  |     # Patch that we call our specific handler instead of giving the song | ||
|  |     rom.patch(0x05, 0x1170, ASM("""
 | ||
|  |         ld   hl, $DB49 | ||
|  |         set  2, [hl] | ||
|  |         xor  a | ||
|  |         ld   [$DB4A], a | ||
|  |     """), ASM(""" | ||
|  |         ; Mark Marin as done. | ||
|  |         ld   a, [$D892] | ||
|  |         or   $10 | ||
|  |         ld   [$D892], a | ||
|  |     """), fill_nop=True)
 | ||
|  | 
 | ||
|  | 
 | ||
|  |     # Show the right item instead of the ocerina | ||
|  |     rom.patch(0x05, 0x11B3, ASM("""
 | ||
|  |         ld   de, $515F | ||
|  |         xor  a | ||
|  |         ldh  [$F1], a | ||
|  |         jp   $3C77 | ||
|  |     """), ASM(""" | ||
|  |         ld   a, $0C | ||
|  |         rst  8 | ||
|  |         ret | ||
|  |     """), fill_nop=True)
 | ||
|  | 
 | ||
|  |     # Patch the message that tells we got the song, to give the item and show the right message | ||
|  |     rom.patch(0x05, 0x119C, ASM("""
 | ||
|  |         ld   a, $13 | ||
|  |         call $2385 | ||
|  |     """), ASM(""" | ||
|  |         ld   a, $0E | ||
|  |         rst  8 | ||
|  |     """), fill_nop=True)
 | ||
|  | 
 | ||
|  | 
 | ||
|  | def upgradeManbo(rom): | ||
|  |     # Instead of checking if we have the song, check if we have a specific room flag set | ||
|  |     rom.patch(0x18, 0x0536, ASM("""
 | ||
|  |         ld   a, [$DB49] | ||
|  |         and  $02 | ||
|  |     """), ASM(""" | ||
|  |         ld   a, [$DAFD] | ||
|  |         and  $20 | ||
|  |     """), fill_nop=True)
 | ||
|  | 
 | ||
|  |     # Show the right item instead of the ocerina | ||
|  |     rom.patch(0x18, 0x0786, ASM("""
 | ||
|  |         ld   de, $474D | ||
|  |         xor  a | ||
|  |         ldh  [$F1], a | ||
|  |         jp   $3C77 | ||
|  |     """), ASM(""" | ||
|  |         ld   a, $0C | ||
|  |         rst  8 | ||
|  |         ret | ||
|  |     """), fill_nop=True)
 | ||
|  | 
 | ||
|  |     # Patch to replace song giving to give the right item | ||
|  |     rom.patch(0x18, 0x0757, ASM("""
 | ||
|  |         ld   a, $01 | ||
|  |         ld   [$DB4A], a | ||
|  |         ld   hl, $DB49 | ||
|  |         set  1, [hl] | ||
|  |     """), ASM(""" | ||
|  |         ; Mark Manbo as done. | ||
|  |         ld   hl, $DAFD | ||
|  |         set  5, [hl] | ||
|  |         ; Show item message and give item | ||
|  |         ld   a, $0E | ||
|  |         rst  8 | ||
|  |     """), fill_nop=True)
 | ||
|  |     # Remove the normal "got song message") | ||
|  |     rom.patch(0x18, 0x076F, 0x0774, "", fill_nop=True) | ||
|  | 
 | ||
|  | def upgradeMamu(rom): | ||
|  |     # Always allow the sign maze instead of only allowing the sign maze if you do not have song3 | ||
|  |     rom.patch(0x00, 0x2057, ASM("ld a, [$DB49]"), ASM("ld a, $00"), fill_nop=True) | ||
|  | 
 | ||
|  |     # Patch the condition at which Mamu gives you the option to listen to him | ||
|  |     rom.patch(0x18, 0x0031, ASM("""
 | ||
|  |         ld   a, [$DB49] | ||
|  |         and  $01 | ||
|  |     """), ASM(""" | ||
|  |         ld   a, [$DAFB] ; load room flag of the Mamu room | ||
|  |         and  $10 | ||
|  |     """), fill_nop=True)
 | ||
|  | 
 | ||
|  |     # Show the right item instead of the ocerina | ||
|  |     rom.patch(0x18, 0x0299, ASM("""
 | ||
|  |         ld   de, $474D | ||
|  |         xor  a | ||
|  |         ldh  [$F1], a | ||
|  |         call $3C77 | ||
|  |     """), ASM(""" | ||
|  |         ld   a, $0C | ||
|  |         rst  8 | ||
|  |     """), fill_nop=True)
 | ||
|  | 
 | ||
|  |     # Patch given an item | ||
|  |     rom.patch(0x18, 0x0270, ASM("""
 | ||
|  |         ld   a, $02 | ||
|  |         ld   [$DB4A], a | ||
|  |         ld   hl, $DB49 | ||
|  |         set  0, [hl] | ||
|  |     """), ASM(""" | ||
|  |         ; Set the room complete flag. | ||
|  |         ld   hl, $DAFB | ||
|  |         set  4, [hl] | ||
|  |     """), fill_nop=True)
 | ||
|  | 
 | ||
|  |     # Patch to show the right message for the item | ||
|  |     rom.patch(0x18, 0x0282, ASM("""
 | ||
|  |         ld   a, $DF | ||
|  |         call $4087 | ||
|  |     """), ASM(""" | ||
|  |         ; Give item and message for room. | ||
|  |         ld   a, $0E | ||
|  |         rst  8 | ||
|  |     """), fill_nop=True)
 |