Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
…elago into smw-main
  • Loading branch information
PoryGone committed Jan 18, 2024
2 parents 5be46e3 + e530202 commit 5142739
Show file tree
Hide file tree
Showing 12 changed files with 1,210 additions and 1,016 deletions.
22 changes: 16 additions & 6 deletions worlds/smw/Client.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,8 @@
SMW_SFX_ADDR = WRAM_START + 0x1DFC
SMW_PAUSE_ADDR = WRAM_START + 0x13D4
SMW_MESSAGE_QUEUE_ADDR = WRAM_START + 0xC391
SMW_ACTIVE_THWIMP_ADDR = WRAM_START + 0x0F3C
SMW_GOAL_ITEM_COUNT = WRAM_START + 0x1A01E

SMW_RECV_PROGRESS_ADDR = WRAM_START + 0x1A00E

Expand Down Expand Up @@ -235,6 +237,13 @@ async def handle_trap_queue(self, ctx):
self.add_trap_to_queue(next_trap, message)
return
else:
if next_trap.item == 0xBC001D:
# Special case thwimp trap
# Do not fire if the previous thwimp hasn't reached the player's Y pos
active_thwimp = await snes_read(ctx, SMW_ACTIVE_THWIMP_ADDR, 0x1)
if active_thwimp[0] != 0xFF:
self.add_trap_to_queue(next_trap, message)
return
verify_game_state = await snes_read(ctx, SMW_GAME_STATE_ADDR, 0x1)
if verify_game_state[0] == 0x14 and len(trap_rom_data[next_trap.item]) > 2:
snes_buffered_write(ctx, SMW_SFX_ADDR, bytes([trap_rom_data[next_trap.item][2]]))
Expand Down Expand Up @@ -518,12 +527,13 @@ async def game_watcher(self, ctx):

snes_buffered_write(ctx, WRAM_START + item_rom_data[item.item][0], bytes([new_item_count]))
elif item.item in icon_rom_data:
if verify_game_state[0] == 0x14:
queue_addr = await snes_read(ctx, WRAM_START + icon_rom_data[item.item][0], 2)
queue_addr = queue_addr[0]+(queue_addr[1]<<8)
queue_addr += 1
snes_buffered_write(ctx, WRAM_START + icon_rom_data[item.item][0], bytes([queue_addr&0xFF, (queue_addr>>8)&0xFF]))

queue_addr = await snes_read(ctx, WRAM_START + icon_rom_data[item.item][0], 2)
queue_addr = queue_addr[0]+(queue_addr[1]<<8)
queue_addr += 1
snes_buffered_write(ctx, WRAM_START + icon_rom_data[item.item][0], bytes([queue_addr&0xFF, (queue_addr>>8)&0xFF]))
if (goal[0] == 0 and item.item == 0xBC0012) or (goal[0] == 1 and item.item == 0xBC0002):
goal_item_count = await snes_read(ctx, SMW_GOAL_ITEM_COUNT, 1)
snes_buffered_write(ctx, SMW_GOAL_ITEM_COUNT, bytes([goal_item_count[0] + 1]))

elif item.item in ability_rom_data:
# Handle Upgrades
Expand Down
10 changes: 6 additions & 4 deletions worlds/smw/Items.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,10 +51,12 @@ class SMWItem(Item):
}

trap_table = {
ItemName.ice_trap: ItemData(0xBC0013, False, True),
ItemName.stun_trap: ItemData(0xBC0014, False, True),
ItemName.literature_trap: ItemData(0xBC0015, False, True),
ItemName.timer_trap: ItemData(0xBC0016, False, True),
ItemName.ice_trap: ItemData(0xBC0013, False, True),
ItemName.stun_trap: ItemData(0xBC0014, False, True),
ItemName.literature_trap: ItemData(0xBC0015, False, True),
ItemName.timer_trap: ItemData(0xBC0016, False, True),
ItemName.reverse_controls_trap: ItemData(0xBC001C, False, True),
ItemName.thwimp_trap: ItemData(0xBC001D, False, True),
}

event_table = {
Expand Down
396 changes: 195 additions & 201 deletions worlds/smw/Levels.py

Large diffs are not rendered by default.

200 changes: 100 additions & 100 deletions worlds/smw/Locations.py
Original file line number Diff line number Diff line change
Expand Up @@ -460,106 +460,106 @@ def __init__(self, player: int, name: str = '', address: int = None, parent=None
LocationName.yoshis_island_3_yellow_block_10: 0xBC06E2,
LocationName.yoshis_island_3_yellow_block_11: 0xBC06E3,
LocationName.yoshis_island_3_yellow_block_12: 0xBC06E4,
LocationName.yoshis_island_3_yellow_block_13: 0xBC06E5,
LocationName.yoshis_island_3_bonus_block_1: 0xBC06E6,
LocationName.yoshis_island_1_flying_block_1: 0xBC06E7,
LocationName.yoshis_island_1_yellow_block_1: 0xBC06E8,
LocationName.yoshis_island_1_life_block_1: 0xBC06E9,
LocationName.yoshis_island_1_powerup_block_1: 0xBC06EA,
LocationName.yoshis_island_2_flying_block_1: 0xBC06EB,
LocationName.yoshis_island_2_flying_block_2: 0xBC06EC,
LocationName.yoshis_island_2_flying_block_3: 0xBC06ED,
LocationName.yoshis_island_2_flying_block_4: 0xBC06EE,
LocationName.yoshis_island_2_flying_block_5: 0xBC06EF,
LocationName.yoshis_island_2_flying_block_6: 0xBC06F0,
LocationName.yoshis_island_2_coin_block_1: 0xBC06F1,
LocationName.yoshis_island_2_yellow_block_1: 0xBC06F2,
LocationName.yoshis_island_2_coin_block_2: 0xBC06F3,
LocationName.yoshis_island_2_coin_block_3: 0xBC06F4,
LocationName.yoshis_island_2_yoshi_block_1: 0xBC06F5,
LocationName.yoshis_island_2_coin_block_4: 0xBC06F6,
LocationName.yoshis_island_2_yoshi_block_2: 0xBC06F7,
LocationName.yoshis_island_2_coin_block_5: 0xBC06F8,
LocationName.yoshis_island_2_vine_block_1: 0xBC06F9,
LocationName.yoshis_island_2_yellow_block_2: 0xBC06FA,
LocationName.vanilla_ghost_house_powerup_block_1: 0xBC06FB,
LocationName.vanilla_ghost_house_vine_block_1: 0xBC06FC,
LocationName.vanilla_ghost_house_powerup_block_2: 0xBC06FD,
LocationName.vanilla_ghost_house_multi_coin_block_1: 0xBC06FE,
LocationName.vanilla_ghost_house_blue_pow_block_1: 0xBC06FF,
LocationName.vanilla_secret_1_coin_block_1: 0xBC0700,
LocationName.vanilla_secret_1_powerup_block_1: 0xBC0701,
LocationName.vanilla_secret_1_multi_coin_block_1: 0xBC0702,
LocationName.vanilla_secret_1_vine_block_1: 0xBC0703,
LocationName.vanilla_secret_1_vine_block_2: 0xBC0704,
LocationName.vanilla_secret_1_coin_block_2: 0xBC0705,
LocationName.vanilla_secret_1_coin_block_3: 0xBC0706,
LocationName.vanilla_secret_1_powerup_block_2: 0xBC0707,
LocationName.vanilla_dome_3_coin_block_1: 0xBC0708,
LocationName.vanilla_dome_3_flying_block_1: 0xBC0709,
LocationName.vanilla_dome_3_flying_block_2: 0xBC070A,
LocationName.vanilla_dome_3_powerup_block_1: 0xBC070B,
LocationName.vanilla_dome_3_flying_block_3: 0xBC070C,
LocationName.vanilla_dome_3_invis_coin_block_1: 0xBC070D,
LocationName.vanilla_dome_3_powerup_block_2: 0xBC070E,
LocationName.vanilla_dome_3_multi_coin_block_1: 0xBC070F,
LocationName.vanilla_dome_3_powerup_block_3: 0xBC0710,
LocationName.vanilla_dome_3_yoshi_block_1: 0xBC0711,
LocationName.vanilla_dome_3_powerup_block_4: 0xBC0712,
LocationName.vanilla_dome_3_pswitch_coin_block_1: 0xBC0713,
LocationName.vanilla_dome_3_pswitch_coin_block_2: 0xBC0714,
LocationName.vanilla_dome_3_pswitch_coin_block_3: 0xBC0715,
LocationName.vanilla_dome_3_pswitch_coin_block_4: 0xBC0716,
LocationName.vanilla_dome_3_pswitch_coin_block_5: 0xBC0717,
LocationName.vanilla_dome_3_pswitch_coin_block_6: 0xBC0718,
LocationName.donut_secret_2_directional_coin_block_1: 0xBC0719,
LocationName.donut_secret_2_vine_block_1: 0xBC071A,
LocationName.donut_secret_2_star_block_1: 0xBC071B,
LocationName.donut_secret_2_powerup_block_1: 0xBC071C,
LocationName.donut_secret_2_star_block_2: 0xBC071D,
LocationName.valley_of_bowser_4_yellow_block_1: 0xBC071E,
LocationName.valley_of_bowser_4_powerup_block_1: 0xBC071F,
LocationName.valley_of_bowser_4_vine_block_1: 0xBC0720,
LocationName.valley_of_bowser_4_yoshi_block_1: 0xBC0721,
LocationName.valley_of_bowser_4_life_block_1: 0xBC0722,
LocationName.valley_of_bowser_4_powerup_block_2: 0xBC0723,
LocationName.valley_castle_yellow_block_1: 0xBC0724,
LocationName.valley_castle_yellow_block_2: 0xBC0725,
LocationName.valley_castle_green_block_1: 0xBC0726,
LocationName.valley_fortress_green_block_1: 0xBC0727,
LocationName.valley_fortress_yellow_block_1: 0xBC0728,
LocationName.valley_of_bowser_3_powerup_block_1: 0xBC0729,
LocationName.valley_of_bowser_3_powerup_block_2: 0xBC072A,
LocationName.valley_ghost_house_pswitch_coin_block_1: 0xBC072B,
LocationName.valley_ghost_house_multi_coin_block_1: 0xBC072C,
LocationName.valley_ghost_house_powerup_block_1: 0xBC072D,
LocationName.valley_ghost_house_directional_coin_block_1: 0xBC072E,
LocationName.valley_of_bowser_2_powerup_block_1: 0xBC072F,
LocationName.valley_of_bowser_2_yellow_block_1: 0xBC0730,
LocationName.valley_of_bowser_2_powerup_block_2: 0xBC0731,
LocationName.valley_of_bowser_2_wings_block_1: 0xBC0732,
LocationName.valley_of_bowser_1_green_block_1: 0xBC0733,
LocationName.valley_of_bowser_1_invis_coin_block_1: 0xBC0734,
LocationName.valley_of_bowser_1_invis_coin_block_2: 0xBC0735,
LocationName.valley_of_bowser_1_invis_coin_block_3: 0xBC0736,
LocationName.valley_of_bowser_1_yellow_block_1: 0xBC0737,
LocationName.valley_of_bowser_1_yellow_block_2: 0xBC0738,
LocationName.valley_of_bowser_1_yellow_block_3: 0xBC0739,
LocationName.valley_of_bowser_1_yellow_block_4: 0xBC073A,
LocationName.valley_of_bowser_1_vine_block_1: 0xBC073B,
LocationName.chocolate_secret_powerup_block_1: 0xBC073C,
LocationName.chocolate_secret_powerup_block_2: 0xBC073D,
LocationName.vanilla_dome_2_coin_block_1: 0xBC073E,
LocationName.vanilla_dome_2_powerup_block_1: 0xBC073F,
LocationName.vanilla_dome_2_coin_block_2: 0xBC0740,
LocationName.vanilla_dome_2_coin_block_3: 0xBC0741,
LocationName.vanilla_dome_2_vine_block_1: 0xBC0742,
LocationName.vanilla_dome_2_invis_life_block_1: 0xBC0743,
LocationName.vanilla_dome_2_coin_block_4: 0xBC0744,
LocationName.vanilla_dome_2_coin_block_5: 0xBC0745,
LocationName.vanilla_dome_2_powerup_block_2: 0xBC0746,
LocationName.vanilla_dome_2_powerup_block_3: 0xBC0747,
LocationName.vanilla_dome_2_powerup_block_4: 0xBC0748,
LocationName.yoshis_island_3_bonus_block_1: 0xBC06E5,
LocationName.yoshis_island_1_flying_block_1: 0xBC06E6,
LocationName.yoshis_island_1_yellow_block_1: 0xBC06E7,
LocationName.yoshis_island_1_life_block_1: 0xBC06E8,
LocationName.yoshis_island_1_powerup_block_1: 0xBC06E9,
LocationName.yoshis_island_2_flying_block_1: 0xBC06EA,
LocationName.yoshis_island_2_flying_block_2: 0xBC06EB,
LocationName.yoshis_island_2_flying_block_3: 0xBC06EC,
LocationName.yoshis_island_2_flying_block_4: 0xBC06ED,
LocationName.yoshis_island_2_flying_block_5: 0xBC06EE,
LocationName.yoshis_island_2_flying_block_6: 0xBC06EF,
LocationName.yoshis_island_2_coin_block_1: 0xBC06F0,
LocationName.yoshis_island_2_yellow_block_1: 0xBC06F1,
LocationName.yoshis_island_2_coin_block_2: 0xBC06F2,
LocationName.yoshis_island_2_coin_block_3: 0xBC06F3,
LocationName.yoshis_island_2_yoshi_block_1: 0xBC06F4,
LocationName.yoshis_island_2_coin_block_4: 0xBC06F5,
LocationName.yoshis_island_2_yoshi_block_2: 0xBC06F6,
LocationName.yoshis_island_2_coin_block_5: 0xBC06F7,
LocationName.yoshis_island_2_vine_block_1: 0xBC06F8,
LocationName.yoshis_island_2_yellow_block_2: 0xBC06F9,
LocationName.vanilla_ghost_house_powerup_block_1: 0xBC06FA,
LocationName.vanilla_ghost_house_vine_block_1: 0xBC06FB,
LocationName.vanilla_ghost_house_powerup_block_2: 0xBC06FC,
LocationName.vanilla_ghost_house_multi_coin_block_1: 0xBC06FD,
LocationName.vanilla_ghost_house_blue_pow_block_1: 0xBC06FE,
LocationName.vanilla_secret_1_coin_block_1: 0xBC06FF,
LocationName.vanilla_secret_1_powerup_block_1: 0xBC0700,
LocationName.vanilla_secret_1_multi_coin_block_1: 0xBC0701,
LocationName.vanilla_secret_1_vine_block_1: 0xBC0702,
LocationName.vanilla_secret_1_vine_block_2: 0xBC0703,
LocationName.vanilla_secret_1_coin_block_2: 0xBC0704,
LocationName.vanilla_secret_1_coin_block_3: 0xBC0705,
LocationName.vanilla_secret_1_powerup_block_2: 0xBC0706,
LocationName.vanilla_dome_3_coin_block_1: 0xBC0707,
LocationName.vanilla_dome_3_flying_block_1: 0xBC0708,
LocationName.vanilla_dome_3_flying_block_2: 0xBC0709,
LocationName.vanilla_dome_3_powerup_block_1: 0xBC070A,
LocationName.vanilla_dome_3_flying_block_3: 0xBC070B,
LocationName.vanilla_dome_3_invis_coin_block_1: 0xBC070C,
LocationName.vanilla_dome_3_powerup_block_2: 0xBC070D,
LocationName.vanilla_dome_3_multi_coin_block_1: 0xBC070E,
LocationName.vanilla_dome_3_powerup_block_3: 0xBC070F,
LocationName.vanilla_dome_3_yoshi_block_1: 0xBC0710,
LocationName.vanilla_dome_3_powerup_block_4: 0xBC0711,
LocationName.vanilla_dome_3_pswitch_coin_block_1: 0xBC0712,
LocationName.vanilla_dome_3_pswitch_coin_block_2: 0xBC0713,
LocationName.vanilla_dome_3_pswitch_coin_block_3: 0xBC0714,
LocationName.vanilla_dome_3_pswitch_coin_block_4: 0xBC0715,
LocationName.vanilla_dome_3_pswitch_coin_block_5: 0xBC0716,
LocationName.vanilla_dome_3_pswitch_coin_block_6: 0xBC0717,
LocationName.donut_secret_2_directional_coin_block_1: 0xBC0718,
LocationName.donut_secret_2_vine_block_1: 0xBC0719,
LocationName.donut_secret_2_star_block_1: 0xBC071A,
LocationName.donut_secret_2_powerup_block_1: 0xBC071B,
LocationName.donut_secret_2_star_block_2: 0xBC071C,
LocationName.valley_of_bowser_4_yellow_block_1: 0xBC071D,
LocationName.valley_of_bowser_4_powerup_block_1: 0xBC071E,
LocationName.valley_of_bowser_4_vine_block_1: 0xBC071F,
LocationName.valley_of_bowser_4_yoshi_block_1: 0xBC0720,
LocationName.valley_of_bowser_4_life_block_1: 0xBC0721,
LocationName.valley_of_bowser_4_powerup_block_2: 0xBC0722,
LocationName.valley_castle_yellow_block_1: 0xBC0723,
LocationName.valley_castle_yellow_block_2: 0xBC0724,
LocationName.valley_castle_green_block_1: 0xBC0725,
LocationName.valley_fortress_green_block_1: 0xBC0726,
LocationName.valley_fortress_yellow_block_1: 0xBC0727,
LocationName.valley_of_bowser_3_powerup_block_1: 0xBC0728,
LocationName.valley_of_bowser_3_powerup_block_2: 0xBC0729,
LocationName.valley_ghost_house_pswitch_coin_block_1: 0xBC072A,
LocationName.valley_ghost_house_multi_coin_block_1: 0xBC072B,
LocationName.valley_ghost_house_powerup_block_1: 0xBC072C,
LocationName.valley_ghost_house_directional_coin_block_1: 0xBC072D,
LocationName.valley_of_bowser_2_powerup_block_1: 0xBC072E,
LocationName.valley_of_bowser_2_yellow_block_1: 0xBC072F,
LocationName.valley_of_bowser_2_powerup_block_2: 0xBC0730,
LocationName.valley_of_bowser_2_wings_block_1: 0xBC0731,
LocationName.valley_of_bowser_1_green_block_1: 0xBC0732,
LocationName.valley_of_bowser_1_invis_coin_block_1: 0xBC0733,
LocationName.valley_of_bowser_1_invis_coin_block_2: 0xBC0734,
LocationName.valley_of_bowser_1_invis_coin_block_3: 0xBC0735,
LocationName.valley_of_bowser_1_yellow_block_1: 0xBC0736,
LocationName.valley_of_bowser_1_yellow_block_2: 0xBC0737,
LocationName.valley_of_bowser_1_yellow_block_3: 0xBC0738,
LocationName.valley_of_bowser_1_yellow_block_4: 0xBC0739,
LocationName.valley_of_bowser_1_vine_block_1: 0xBC073A,
LocationName.chocolate_secret_powerup_block_1: 0xBC073B,
LocationName.chocolate_secret_powerup_block_2: 0xBC073C,
LocationName.vanilla_dome_2_coin_block_1: 0xBC073D,
LocationName.vanilla_dome_2_powerup_block_1: 0xBC073E,
LocationName.vanilla_dome_2_coin_block_2: 0xBC073F,
LocationName.vanilla_dome_2_coin_block_3: 0xBC0740,
LocationName.vanilla_dome_2_vine_block_1: 0xBC0741,
LocationName.vanilla_dome_2_invis_life_block_1: 0xBC0742,
LocationName.vanilla_dome_2_coin_block_4: 0xBC0743,
LocationName.vanilla_dome_2_coin_block_5: 0xBC0744,
LocationName.vanilla_dome_2_powerup_block_2: 0xBC0745,
LocationName.vanilla_dome_2_powerup_block_3: 0xBC0746,
LocationName.vanilla_dome_2_powerup_block_4: 0xBC0747,
LocationName.vanilla_dome_2_powerup_block_5: 0xBC0748,
LocationName.vanilla_dome_2_multi_coin_block_1: 0xBC0749,
LocationName.vanilla_dome_2_multi_coin_block_2: 0xBC074A,
LocationName.vanilla_dome_4_powerup_block_1: 0xBC074B,
Expand Down
10 changes: 6 additions & 4 deletions worlds/smw/Names/ItemName.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,12 @@
special_world_clear = "Special Zone Clear"

# Trap Definitions
ice_trap = "Ice Trap"
stun_trap = "Stun Trap"
literature_trap = "Literature Trap"
timer_trap = "Timer Trap"
ice_trap = "Ice Trap"
stun_trap = "Stun Trap"
literature_trap = "Literature Trap"
timer_trap = "Timer Trap"
reverse_controls_trap = "Reverse Controls Trap"
thwimp_trap = "Thwimp Trap"

# Other Definitions
victory = "The Princess"
Expand Down
4 changes: 2 additions & 2 deletions worlds/smw/Names/LocationName.py
Original file line number Diff line number Diff line change
Expand Up @@ -617,7 +617,6 @@
yoshis_island_3_yellow_block_10 = "Yoshi's Island 3 - Yellow Switch Palace Block #10"
yoshis_island_3_yellow_block_11 = "Yoshi's Island 3 - Yellow Switch Palace Block #11"
yoshis_island_3_yellow_block_12 = "Yoshi's Island 3 - Yellow Switch Palace Block #12"
yoshis_island_3_yellow_block_13 = "Yoshi's Island 3 - Yellow Switch Palace Block #13"
yoshis_island_3_bonus_block_1 = "Yoshi's Island 3 - Bonus Block #1"
yoshis_island_1_flying_block_1 = "Yoshi's Island 1 - Flying Question Block #1"
yoshis_island_1_yellow_block_1 = "Yoshi's Island 1 - Yellow Switch Palace Block #1"
Expand Down Expand Up @@ -717,6 +716,7 @@
vanilla_dome_2_powerup_block_2 = "Vanilla Dome 2 - Powerup Block #2"
vanilla_dome_2_powerup_block_3 = "Vanilla Dome 2 - Powerup Block #3"
vanilla_dome_2_powerup_block_4 = "Vanilla Dome 2 - Powerup Block #4"
vanilla_dome_2_powerup_block_5 = "Vanilla Dome 2 - Powerup Block #5"
vanilla_dome_2_multi_coin_block_1 = "Vanilla Dome 2 - Multi Coin Block #1"
vanilla_dome_2_multi_coin_block_2 = "Vanilla Dome 2 - Multi Coin Block #2"
vanilla_dome_4_powerup_block_1 = "Vanilla Dome 4 - Powerup Block #1"
Expand Down Expand Up @@ -969,4 +969,4 @@
star_road_5_green_block_17 = "Star Road 5 - Green Switch Palace Block #17"
star_road_5_green_block_18 = "Star Road 5 - Green Switch Palace Block #18"
star_road_5_green_block_19 = "Star Road 5 - Green Switch Palace Block #19"
star_road_5_green_block_20 = "Star Road 5 - Green Switch Palace Block #20"
star_road_5_green_block_20 = "Star Road 5 - Green Switch Palace Block #20"
16 changes: 16 additions & 0 deletions worlds/smw/Options.py
Original file line number Diff line number Diff line change
Expand Up @@ -244,6 +244,20 @@ class TimerTrapWeight(BaseTrapWeight):
display_name = "Timer Trap Weight"


class ReverseControlsTrapWeight(BaseTrapWeight):
"""
Likelihood of a receiving a trap which causes the controls to be reversed in the current level
"""
display_name = "Reverse Controls Trap Weight"


class ThwimpTrapWeight(BaseTrapWeight):
"""
Likelihood of a receiving a trap which causes a Thwimp to spawn above the player
"""
display_name = "Thwimp Trap Weight"


class Autosave(DefaultOnToggle):
"""
Whether a save prompt will appear after every level
Expand Down Expand Up @@ -382,6 +396,8 @@ class SMWOptions(PerGameCommonOptions):
stun_trap_weight: StunTrapWeight
literature_trap_weight: LiteratureTrapWeight
timer_trap_weight: TimerTrapWeight
reverse_controls_trap_weight: ReverseControlsTrapWeight
thwimp_trap_weight: ThwimpTrapWeight
autosave: Autosave
early_climb: EarlyClimb
overworld_speed: OverworldSpeed
Expand Down
Loading

0 comments on commit 5142739

Please sign in to comment.