Added Cold Fairy Statue to bonkable locations
This commit is contained in:
1
Items.py
1
Items.py
@@ -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'),
|
||||||
|
|||||||
@@ -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
15
Rom.py
@@ -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'):
|
||||||
|
|||||||
4
Rules.py
4
Rules.py
@@ -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))
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
146
asm/owrando.asm
146
asm/owrando.asm
@@ -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.
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user