Added Cold Fairy Statue to bonkable locations

This commit is contained in:
codemann8
2023-03-09 20:35:39 -06:00
parent 252f9ba1a7
commit 93eea0b40f
8 changed files with 153 additions and 21 deletions

View File

@@ -175,6 +175,7 @@ item_table = {'Bow': (True, False, None, 0x0B, 200, 'You have\nchosen the\narche
'Green Potion': (False, False, None, 0x2F, 60, 'Refreshing green goop!', 'and the green goo', 'the liquid kid', 'potion for sale', 'free samples', 'bottle boy has green goo again', 'a green potion'), 'Green Potion': (False, False, None, 0x2F, 60, 'Refreshing green goop!', 'and the green goo', 'the liquid kid', 'potion for sale', 'free samples', 'bottle boy has green goo again', 'a green potion'),
'Blue Potion': (False, False, None, 0x30, 160, 'Delicious blue goop!', 'and the blue goo', 'the liquid kid', 'potion for sale', 'free samples', 'bottle boy has blue goo again', 'a blue potion'), 'Blue Potion': (False, False, None, 0x30, 160, 'Delicious blue goop!', 'and the blue goo', 'the liquid kid', 'potion for sale', 'free samples', 'bottle boy has blue goo again', 'a blue potion'),
'Bee': (False, False, None, 0x0E, 10, 'I will sting your foes a few times', 'and the sting buddy', 'the beekeeper kid', 'insect for sale', 'shroom pollenation', 'bottle boy has mad bee again', 'a bee'), 'Bee': (False, False, None, 0x0E, 10, 'I will sting your foes a few times', 'and the sting buddy', 'the beekeeper kid', 'insect for sale', 'shroom pollenation', 'bottle boy has mad bee again', 'a bee'),
'Good Bee': (False, False, None, 0xB5, 10, 'I will sting your foes a lot', 'and the cold buddy', 'the beekeeper kid', 'cold insect for sale', 'shroom pollenation', 'bottle boy has cold bee again', 'a good bee'),
'Small Heart': (False, False, None, 0x42, 10, 'Just a little\npiece of love!', 'and the heart', 'the life-giving kid', 'little love for sale', 'fungus for life', 'life boy feels some love again', 'a heart'), 'Small Heart': (False, False, None, 0x42, 10, 'Just a little\npiece of love!', 'and the heart', 'the life-giving kid', 'little love for sale', 'fungus for life', 'life boy feels some love again', 'a heart'),
'Apples': (False, False, None, 0xB1, 30, 'Just a few pieces of fruit!', 'and the juicy fruit', 'the fruity kid', 'the fruit stand', 'expired fruit', 'bottle boy has fruit again', 'an apple hoard'), 'Apples': (False, False, None, 0xB1, 30, 'Just a few pieces of fruit!', 'and the juicy fruit', 'the fruity kid', 'the fruit stand', 'expired fruit', 'bottle boy has fruit again', 'an apple hoard'),
'Fairy': (False, False, None, 0xB2, 50, 'Just a pixie!', 'and the pixie', 'the pixie kid', 'pixie for sale', 'pixie fungus', 'bottle boy has pixie again', 'a pixie'), 'Fairy': (False, False, None, 0xB2, 50, 'Just a pixie!', 'and the pixie', 'the pixie kid', 'pixie for sale', 'pixie fungus', 'bottle boy has pixie again', 'a pixie'),

View File

@@ -688,6 +688,8 @@ def create_dungeon_regions(world, player):
create_dungeon_region(player, 'Thieves Big Chest Nook', 'Thieves\' Town', ['Thieves\' Town - Big Key Chest'], ['Thieves Big Chest Nook ES Edge']), create_dungeon_region(player, 'Thieves Big Chest Nook', 'Thieves\' Town', ['Thieves\' Town - Big Key Chest'], ['Thieves Big Chest Nook ES Edge']),
create_dungeon_region(player, 'Thieves Hallway', 'Thieves\' Town', ['Thieves\' Town - Hallway Pot Key'], ['Thieves Hallway SE', 'Thieves Hallway NE', 'Thieves Hallway WN', 'Thieves Hallway WS']), create_dungeon_region(player, 'Thieves Hallway', 'Thieves\' Town', ['Thieves\' Town - Hallway Pot Key'], ['Thieves Hallway SE', 'Thieves Hallway NE', 'Thieves Hallway WN', 'Thieves Hallway WS']),
create_dungeon_region(player, 'Thieves Boss', 'Thieves\' Town', ['Revealing Light', 'Thieves\' Town - Boss', 'Thieves\' Town - Prize'], ['Thieves Boss SE']), create_dungeon_region(player, 'Thieves Boss', 'Thieves\' Town', ['Revealing Light', 'Thieves\' Town - Boss', 'Thieves\' Town - Prize'], ['Thieves Boss SE']),
#create_dungeon_region(player, 'Thieves Boss', 'Thieves\' Town', ['Thieves\' Town - Boss', 'Thieves\' Town - Prize'], ['Revealing Light', 'Thieves Boss SE']),
#create_dungeon_region(player, 'Thieves Revealing Light', 'Thieves\' Town', ['Revealing Light'], ['Thieves Boss Room']),
create_dungeon_region(player, 'Thieves Pot Alcove Mid', 'Thieves\' Town', None, ['Thieves Pot Alcove Mid ES', 'Thieves Pot Alcove Mid WS']), create_dungeon_region(player, 'Thieves Pot Alcove Mid', 'Thieves\' Town', None, ['Thieves Pot Alcove Mid ES', 'Thieves Pot Alcove Mid WS']),
create_dungeon_region(player, 'Thieves Pot Alcove Bottom', 'Thieves\' Town', None, ['Thieves Pot Alcove Bottom SW']), create_dungeon_region(player, 'Thieves Pot Alcove Bottom', 'Thieves\' Town', None, ['Thieves Pot Alcove Bottom SW']),
create_dungeon_region(player, 'Thieves Pot Alcove Top', 'Thieves\' Town', None, ['Thieves Pot Alcove Top NW']), create_dungeon_region(player, 'Thieves Pot Alcove Top', 'Thieves\' Town', None, ['Thieves Pot Alcove Top NW']),
@@ -1304,7 +1306,8 @@ bonk_prize_table = {
'Dark Tree Line Tree 2': (0x26, 0x10, False, '', 'Dark Tree Line Area', 'in a tree'), 'Dark Tree Line Tree 2': (0x26, 0x10, False, '', 'Dark Tree Line Area', 'in a tree'),
'Dark Tree Line Tree 3': (0x27, 0x08, False, '', 'Dark Tree Line Area', 'in a tree'), 'Dark Tree Line Tree 3': (0x27, 0x08, False, '', 'Dark Tree Line Area', 'in a tree'),
'Dark Tree Line Tree 4': (0x28, 0x04, False, '', 'Dark Tree Line Area', 'in a tree'), 'Dark Tree Line Tree 4': (0x28, 0x04, False, '', 'Dark Tree Line Area', 'in a tree'),
'Hype Cave Statue': (0x29, 0x10, False, '', 'Hype Cave Area', 'encased in stone') 'Hype Cave Statue': (0x29, 0x10, False, '', 'Hype Cave Area', 'encased in stone'),
'Cold Fairy Statue': (0x2a, 0x02, False, '', 'Good Bee Cave', 'encased in stone')
} }
bonk_table_by_location_id = {0x2ABB00+(data[0]*6)+3: name for name, data in bonk_prize_table.items()} bonk_table_by_location_id = {0x2ABB00+(data[0]*6)+3: name for name, data in bonk_prize_table.items()}

15
Rom.py
View File

@@ -38,7 +38,7 @@ from source.dungeon.RoomList import Room0127
JAP10HASH = '03a63945398191337e896e5771f77173' JAP10HASH = '03a63945398191337e896e5771f77173'
RANDOMIZERBASEHASH = '2b14cd0bbab8a7fb943c8bc1ca75ed1f' RANDOMIZERBASEHASH = '4458a348e3040d79d0e28d572579fcb5'
class JsonRom(object): class JsonRom(object):
@@ -686,7 +686,7 @@ def patch_rom(world, rom, player, team, enemized, is_mystery=False):
flute_spots = default_flute_connections flute_spots = default_flute_connections
else: else:
flute_spots = world.owflutespots[player] flute_spots = world.owflutespots[player]
owFlags |= 0x100 owFlags |= 0x0100
for o in range(0, len(flute_spots)): for o in range(0, len(flute_spots)):
owslot = flute_spots[o] owslot = flute_spots[o]
@@ -740,12 +740,12 @@ def patch_rom(world, rom, player, team, enemized, is_mystery=False):
owMode = 2 owMode = 2
if world.owKeepSimilar[player] and (world.owShuffle[player] != 'vanilla' or world.owCrossed[player] in ['limited', 'chaos']): if world.owKeepSimilar[player] and (world.owShuffle[player] != 'vanilla' or world.owCrossed[player] in ['limited', 'chaos']):
owMode |= 0x100 owMode |= 0x0100
if world.owCrossed[player] != 'none' and (world.owCrossed[player] != 'polar' or world.owMixed[player]): if world.owCrossed[player] != 'none' and (world.owCrossed[player] != 'polar' or world.owMixed[player]):
owMode |= 0x200 owMode |= 0x0200
world.fix_fake_world[player] = True world.fix_fake_world[player] = True
if world.owMixed[player]: if world.owMixed[player]:
owMode |= 0x400 owMode |= 0x0400
# patches map data specific for OW Shuffle # patches map data specific for OW Shuffle
#inverted_buffer[0x03] = inverted_buffer[0x03] | 0x2 # convenient portal on WDM #inverted_buffer[0x03] = inverted_buffer[0x03] | 0x2 # convenient portal on WDM
@@ -793,7 +793,7 @@ def patch_rom(world, rom, player, team, enemized, is_mystery=False):
# for prize, address in zip(bonk_prizes, bonk_addresses): # for prize, address in zip(bonk_prizes, bonk_addresses):
# rom.write_byte(address, prize) # rom.write_byte(address, prize)
owFlags |= 0x200 owFlags |= 0x0200
# setting spriteID to D8, a placeholder sprite we use to inform ROM to spawn a dynamic item # setting spriteID to D8, a placeholder sprite we use to inform ROM to spawn a dynamic item
#for address in bonk_addresses: #for address in bonk_addresses:
@@ -803,6 +803,8 @@ def patch_rom(world, rom, player, team, enemized, is_mystery=False):
rom.write_byte(snes_to_pc(0x09AE32), 0xD8) rom.write_byte(snes_to_pc(0x09AE32), 0xD8)
rom.write_byte(snes_to_pc(0x09AE35), 0xD8) rom.write_byte(snes_to_pc(0x09AE35), 0xD8)
rom.write_byte(snes_to_pc(0x06918E), 0x80) # skip good bee bottle check
write_int16(rom, 0x150002, owMode) write_int16(rom, 0x150002, owMode)
write_int16(rom, 0x150004, owFlags) write_int16(rom, 0x150004, owFlags)
@@ -1649,6 +1651,7 @@ def patch_rom(world, rom, player, team, enemized, is_mystery=False):
if world.shuffle_bonk_drops[player]: if world.shuffle_bonk_drops[player]:
# warning, this temporary patch might cause fairies to respawn differently?, limiting this to bonk drop mode only # warning, this temporary patch might cause fairies to respawn differently?, limiting this to bonk drop mode only
rom.write_byte(snes_to_pc(0x0DB808), 0x03) # patch fairies sprites to not permadeath like enemies rom.write_byte(snes_to_pc(0x0DB808), 0x03) # patch fairies sprites to not permadeath like enemies
rom.write_byte(snes_to_pc(0x1DF6D8), 0) # allows sprites to travel across water / same flag as write_enemizer_tweaks
# allow smith into multi-entrance caves in appropriate shuffles # allow smith into multi-entrance caves in appropriate shuffles
if world.shuffle[player] in ['restricted', 'full', 'lite', 'lean', 'crossed', 'insanity'] or (world.shuffle[player] == 'simple' and world.mode[player] == 'inverted'): if world.shuffle[player] in ['restricted', 'full', 'lite', 'lean', 'crossed', 'insanity'] or (world.shuffle[player] == 'simple' and world.mode[player] == 'inverted'):

View File

@@ -862,7 +862,9 @@ def default_rules(world, player):
from Regions import bonk_prize_table from Regions import bonk_prize_table
for location_name, (_, _, aga_required, _, _, _) in bonk_prize_table.items(): for location_name, (_, _, aga_required, _, _, _) in bonk_prize_table.items():
loc = world.get_location(location_name, player) loc = world.get_location(location_name, player)
if not aga_required: if location_name == 'Cold Fairy Statue':
set_rule(loc, lambda state: state.can_use_bombs(player) and state.can_collect_bonkdrops(player))
elif not aga_required:
set_rule(loc, lambda state: state.can_collect_bonkdrops(player)) set_rule(loc, lambda state: state.can_collect_bonkdrops(player))
else: else:
set_rule(loc, lambda state: state.can_collect_bonkdrops(player) and state.has_beaten_aga(player)) set_rule(loc, lambda state: state.can_collect_bonkdrops(player) and state.has_beaten_aga(player))

View File

@@ -130,6 +130,7 @@ bonk_prize_lookup = {
'Chicken': (0x0b, 0, None), 'Chicken': (0x0b, 0, None),
'Bee Trap': (0x79, 6, None), 'Bee Trap': (0x79, 6, None),
'Apples': (0xac, 8, None), 'Apples': (0xac, 8, None),
'Good Bee': (0xb2, 1, None),
'Small Heart': (0xd8, 2, None), 'Small Heart': (0xd8, 2, None),
'Rupee (1)': (0xd9, 0, None), 'Rupee (1)': (0xd9, 0, None),
'Rupees (5)': (0xda, 3, None), # TODO: add in murahdahla tree rupee 'Rupees (5)': (0xda, 3, None), # TODO: add in murahdahla tree rupee

View File

@@ -157,6 +157,14 @@ and #$7f : eor #$40 : nop #2
org $06AD4C org $06AD4C
jsl.l OWBonkDrops : nop #4 jsl.l OWBonkDrops : nop #4
org $1EDE6F
jsl.l OWBonkGoodBeeDrop : bra +
GoldBee_SpawnSelf_SetProperties:
phb : lda.b #$1E : pha : plb ; switch to bank 1E
jsr GoldBee_SpawnSelf+12
plb : rtl
nop #3
+
;Code ;Code
org $aa8800 org $aa8800
@@ -395,6 +403,112 @@ LoadMapDarkOrMixed:
dw $0400+$0210 ; bottom right dw $0400+$0210 ; bottom right
} }
OWBonkGoodBeeDrop:
{
LDA.l OWFlags+1 : AND.b #$02 : BNE .shuffled
.vanilla ; what we wrote over
STZ.w $0DD0,X
LDA.l BottleContentsOne : ORA.l BottleContentsTwo
ORA.l BottleContentsThree : ORA.l BottleContentsFour
RTL
.shuffled
PHY : TXY
LDA.l RoomDataWRAM[$0120].high : AND.b #$02 : PHA : BNE + ; check if collected
LDA.b #$1B : STA $12F ; JSL Sound_SetSfx3PanLong ; seems that when you bonk, there is a pending bonk sfx, so we clear that out and replace with reveal secret sfx
+
LDA.l OWBonkPrizeData+(42*6+4) : BEQ + ; multiworld item
LDA.l OWBonkPrizeData+(42*6+3)
JMP .spawn_item
+
.determine_type ; S = Collected, FlagBitmask, X (row + 2)
LDA.l OWBonkPrizeData+(42*6+3) ; A = item id
CMP.b #$B0 : BNE +
LDA.b #$79 : JMP .sprite_transform ; transform to bees
+ CMP.b #$42 : BNE +
JSL.l Sprite_TransmuteToBomb ; transform a heart to bomb, vanilla behavior
JMP .mark_collected
+ CMP.b #$34 : BNE +
LDA.b #$D9 : JMP .sprite_transform ; transform to single rupee
+ CMP.b #$35 : BNE +
LDA.b #$DA : JMP .sprite_transform ; transform to blue rupee
+ CMP.b #$36 : BNE +
LDA.b #$DB : BRA .sprite_transform ; transform to red rupee
+ CMP.b #$27 : BNE +
LDA.b #$DC : BRA .sprite_transform ; transform to 1 bomb
+ CMP.b #$28 : BNE +
LDA.b #$DD : BRA .sprite_transform ; transform to 4 bombs
+ CMP.b #$31 : BNE +
LDA.b #$DE : BRA .sprite_transform ; transform to 8 bombs
+ CMP.b #$45 : BNE +
LDA.b #$DF : BRA .sprite_transform ; transform to small magic
+ CMP.b #$B4 : BNE +
LDA.b #$E0 : BRA .sprite_transform ; transform to big magic
+ CMP.b #$B5 : BNE +
LDA.b #$79 : JSL.l OWBonkSpritePrep
JSL.l GoldBee_SpawnSelf_SetProperties ; transform to good bee
BRA .mark_collected
+ CMP.b #$44 : BNE +
LDA.b #$E2 : BRA .sprite_transform ; transform to 10 arrows
+ CMP.b #$B1 : BNE +
LDA.b #$AC : BRA .sprite_transform ; transform to apples
+ CMP.b #$B2 : BNE +
LDA.b #$E3 : BRA .sprite_transform ; transform to fairy
+ CMP.b #$B3 : BNE .spawn_item
INX : INX : LDA.l OWBonkPrizeData+(42*6+5)
CLC : ADC.b #$08 : PHA
LDA.w $0D00,Y : SEC : SBC.b 1,S : STA.w $0D00,Y
LDA.w $0D20,Y : SBC.b #$00 : STA.w $0D20,Y : PLX
LDA.b #$0B : SEC ; BRA .sprite_transform ; transform to chicken
.sprite_transform
JSL.l OWBonkSpritePrep
.mark_collected ; S = Collected
PLA : BNE .return
LDA.l RoomDataWRAM[$0120].high : ORA.b #$02 : STA.l RoomDataWRAM[$0120].high
REP #$20
LDA.l TotalItemCounter : INC : STA.l TotalItemCounter
SEP #$20
BRA .return
; spawn itemget item
.spawn_item ; A = item id ; Y = bonk sprite slot ; S = Collected
PLX : BEQ + : LDA.b #$00 : STA.w $0DD0,Y : BRA .return
+ LDA.l OWBonkPrizeData+(42*6+4) : STA.l !MULTIWORLD_SPRITEITEM_PLAYER_ID
LDA.b #$01 : STA !REDRAW
LDA.b #$EB : STA.l $7FFE00
JSL Sprite_SpawnDynamically+15 ; +15 to skip finding a new slot, use existing sprite
; affects the rate the item moves in the Y/X direction
LDA.b #$00 : STA.w $0D40,Y
LDA.b #$0A : STA.w $0D50,Y
LDA.b #$20 : STA.w $0F80,Y ; amount of force (gives height to the arch)
LDA.b #$FF : STA.w $0B58,Y ; stun timer
LDA.b #$30 : STA.w $0F10,Y ; aux delay timer 4 ?? dunno what that means
LDA.b #$00 : STA.w $0F20,Y ; layer the sprite is on
; sets OW event bitmask flag, uses free RAM
LDA.l OWBonkPrizeData+(42*6+2) : STA.w $0ED0,Y
; determines the initial spawn point of item
LDA.w $0D00,Y : SEC : SBC.l OWBonkPrizeData+(42*6+5) : STA.w $0D00,Y
LDA.w $0D20,Y : SBC #$00 : STA.w $0D20,Y
LDA.b #$01 : STA !REDRAW : STA !FORCE_HEART_SPAWN
.return
PLY
LDA #$08 ; makes original good bee not spawn
RTL
nop #20
}
; Y = sprite slot index of bonk sprite ; Y = sprite slot index of bonk sprite
OWBonkDrops: OWBonkDrops:
{ {
@@ -439,7 +553,7 @@ OWBonkDrops:
+ CMP.b #$34 : BNE + + CMP.b #$34 : BNE +
LDA.b #$D9 : CLC : JMP .sprite_transform ; transform to single rupee LDA.b #$D9 : CLC : JMP .sprite_transform ; transform to single rupee
+ CMP.b #$35 : BNE + + CMP.b #$35 : BNE +
LDA.b #$DA : CLC : BRA .sprite_transform ; transform to blue rupee LDA.b #$DA : CLC : JMP .sprite_transform ; transform to blue rupee
+ CMP.b #$36 : BNE + + CMP.b #$36 : BNE +
LDA.b #$DB : CLC : BRA .sprite_transform ; transform to red rupee LDA.b #$DB : CLC : BRA .sprite_transform ; transform to red rupee
+ CMP.b #$27 : BNE + + CMP.b #$27 : BNE +
@@ -453,7 +567,9 @@ OWBonkDrops:
+ CMP.b #$B4 : BNE + + CMP.b #$B4 : BNE +
LDA.b #$E0 : CLC : BRA .sprite_transform ; transform to big magic LDA.b #$E0 : CLC : BRA .sprite_transform ; transform to big magic
+ CMP.b #$B5 : BNE + + CMP.b #$B5 : BNE +
LDA.b #$E1 : CLC : BRA .sprite_transform ; transform to 5 arrows LDA.b #$79 : JSL.l OWBonkSpritePrep
JSL.l GoldBee_SpawnSelf_SetProperties ; transform to good bee
BRA .mark_collected
+ CMP.b #$44 : BNE + + CMP.b #$44 : BNE +
LDA.b #$E2 : CLC : BRA .sprite_transform ; transform to 10 arrows LDA.b #$E2 : CLC : BRA .sprite_transform ; transform to 10 arrows
+ CMP.b #$B1 : BNE + + CMP.b #$B1 : BNE +
@@ -468,14 +584,7 @@ OWBonkDrops:
LDA.b #$0B : SEC ; BRA .sprite_transform ; transform to chicken LDA.b #$0B : SEC ; BRA .sprite_transform ; transform to chicken
.sprite_transform .sprite_transform
STA.w $0E20,Y JSL.l OWBonkSpritePrep
TYX : JSL.l Sprite_LoadProperties
BEQ +
; these are sprite properties that make it fall out of the tree to the east
LDA #$30 : STA $0F80,Y ; amount of force (related to speed)
LDA #$10 : STA $0D50,Y ; eastward rate of speed
LDA #$FF : STA $0B58,Y ; expiration timer
+
.mark_collected ; S = Collected, FlagBitmask, X (row + 2) .mark_collected ; S = Collected, FlagBitmask, X (row + 2)
PLA : BNE + ; S = FlagBitmask, X (row + 2) PLA : BNE + ; S = FlagBitmask, X (row + 2)
@@ -495,8 +604,7 @@ OWBonkDrops:
LDA.b #$01 : STA !REDRAW LDA.b #$01 : STA !REDRAW
LDA.b #$EB LDA.b #$EB : STA.l $7FFE00
STA.l $7FFE00
JSL Sprite_SpawnDynamically+15 ; +15 to skip finding a new slot, use existing sprite JSL Sprite_SpawnDynamically+15 ; +15 to skip finding a new slot, use existing sprite
; affects the rate the item moves in the Y/X direction ; affects the rate the item moves in the Y/X direction
@@ -525,6 +633,19 @@ OWBonkDrops:
PLA : PLA : PLB : RTL PLA : PLA : PLB : RTL
} }
; A = SpriteID, Y = Sprite Slot Index, X = free/overwritten
OWBonkSpritePrep:
{
STA.w $0E20,Y
TYX : JSL.l Sprite_LoadProperties
BEQ +
; these are sprite properties that make it fall out of the tree to the east
LDA #$30 : STA $0F80,Y ; amount of force (related to speed)
LDA #$10 : STA $0D50,Y ; eastward rate of speed
LDA #$FF : STA $0B58,Y ; expiration timer
+ RTL
}
org $aa9000 org $aa9000
OWDetectEdgeTransition: OWDetectEdgeTransition:
{ {
@@ -1539,6 +1660,7 @@ db $6e, $8c, $10, $35, $00, $10
db $6e, $90, $08, $b0, $00, $10 db $6e, $90, $08, $b0, $00, $10
db $6e, $a4, $04, $b1, $00, $10 db $6e, $a4, $04, $b1, $00, $10
db $74, $4e, $10, $b1, $00, $1c db $74, $4e, $10, $b1, $00, $1c
db $ff, $00, $02, $b5, $00, $08
; temporary fix - murahdahla replaces one of the bonk tree prizes ; temporary fix - murahdahla replaces one of the bonk tree prizes
; so we copy the sprite table here and update the pointer ; so we copy the sprite table here and update the pointer

Binary file not shown.

View File

@@ -821,7 +821,7 @@ trash_items = {
'Nothing': -1, 'Nothing': -1,
'Bee Trap': 0, 'Bee Trap': 0,
'Rupee (1)': 1, 'Rupees (5)': 1, 'Small Heart': 1, 'Bee': 1, 'Arrows (5)': 1, 'Chicken': 1, 'Single Bomb': 1, 'Rupee (1)': 1, 'Rupees (5)': 1, 'Small Heart': 1, 'Bee': 1, 'Arrows (5)': 1, 'Chicken': 1, 'Single Bomb': 1,
'Rupees (20)': 2, 'Small Magic': 2, 'Rupees (20)': 2, 'Small Magic': 2, 'Good Bee': 2,
'Bombs (3)': 3, 'Arrows (10)': 3, 'Bombs (10)': 3, 'Apples': 3, 'Bombs (3)': 3, 'Arrows (10)': 3, 'Bombs (10)': 3, 'Apples': 3,
'Fairy': 4, 'Big Magic': 4, 'Red Potion': 4, 'Blue Shield': 4, 'Rupees (50)': 4, 'Rupees (100)': 4, 'Fairy': 4, 'Big Magic': 4, 'Red Potion': 4, 'Blue Shield': 4, 'Rupees (50)': 4, 'Rupees (100)': 4,
'Rupees (300)': 5, 'Rupees (300)': 5,