2023-03-21 01:26:03 +09:00
from . requirements import *
from . location import Location
from . . locations . all import *
class Dungeon1 :
def __init__ ( self , options , world_setup , r ) :
entrance = Location ( dungeon = 1 )
entrance . add ( DungeonChest ( 0x113 ) , DungeonChest ( 0x115 ) , DungeonChest ( 0x10E ) )
Location ( dungeon = 1 ) . add ( DroppedKey ( 0x116 ) ) . connect ( entrance , OR ( BOMB , r . push_hardhat ) ) # hardhat beetles (can kill with bomb)
Location ( dungeon = 1 ) . add ( DungeonChest ( 0x10D ) ) . connect ( entrance , OR ( r . attack_hookshot_powder , SHIELD ) ) # moldorm spawn chest
2024-12-05 10:32:45 -05:00
stalfos_keese_room = Location ( dungeon = 1 ) . add ( DungeonChest ( 0x114 ) ) . connect ( entrance , AND ( OR ( r . attack_skeleton , SHIELD ) , r . attack_hookshot_powder ) ) # 2 stalfos 2 keese room
2023-03-21 01:26:03 +09:00
Location ( dungeon = 1 ) . add ( DungeonChest ( 0x10C ) ) . connect ( entrance , BOMB ) # hidden seashell room
dungeon1_upper_left = Location ( dungeon = 1 ) . connect ( entrance , AND ( KEY1 , FOUND ( KEY1 , 3 ) ) )
if options . owlstatues == " both " or options . owlstatues == " dungeon " :
Location ( dungeon = 1 ) . add ( OwlStatue ( 0x103 ) , OwlStatue ( 0x104 ) ) . connect ( dungeon1_upper_left , STONE_BEAK1 )
feather_chest = Location ( dungeon = 1 ) . add ( DungeonChest ( 0x11D ) ) . connect ( dungeon1_upper_left , SHIELD ) # feather location, behind spike enemies. can shield bump into pit (only shield works)
boss_key = Location ( dungeon = 1 ) . add ( DungeonChest ( 0x108 ) ) . connect ( entrance , AND ( FEATHER , KEY1 , FOUND ( KEY1 , 3 ) ) ) # boss key
dungeon1_right_side = Location ( dungeon = 1 ) . connect ( entrance , AND ( KEY1 , FOUND ( KEY1 , 3 ) ) )
if options . owlstatues == " both " or options . owlstatues == " dungeon " :
Location ( dungeon = 1 ) . add ( OwlStatue ( 0x10A ) ) . connect ( dungeon1_right_side , STONE_BEAK1 )
2024-12-05 10:32:45 -05:00
dungeon1_3_of_a_kind = Location ( dungeon = 1 ) . add ( DungeonChest ( 0x10A ) ) . connect ( dungeon1_right_side , OR ( r . attack_hookshot_no_bomb , SHIELD ) ) # three of a kind, shield stops the suit from changing
2023-03-21 01:26:03 +09:00
dungeon1_miniboss = Location ( dungeon = 1 ) . connect ( dungeon1_right_side , AND ( r . miniboss_requirements [ world_setup . miniboss_mapping [ 0 ] ] , FEATHER ) )
dungeon1_boss = Location ( dungeon = 1 ) . connect ( dungeon1_miniboss , NIGHTMARE_KEY1 )
2024-12-05 10:32:45 -05:00
boss = Location ( dungeon = 1 ) . add ( HeartContainer ( 0x106 ) , Instrument ( 0x102 ) ) . connect ( dungeon1_boss , r . boss_requirements [ world_setup . boss_mapping [ 0 ] ] )
2023-03-21 01:26:03 +09:00
2024-12-05 10:32:45 -05:00
if options . logic == ' hard ' or options . logic == ' glitched ' or options . logic == ' hell ' :
2023-03-21 01:26:03 +09:00
stalfos_keese_room . connect ( entrance , r . attack_hookshot_powder ) # stalfos jump away when you press a button.
2024-12-05 10:32:45 -05:00
dungeon1_3_of_a_kind . connect ( dungeon1_right_side , BOMB ) # use timed bombs to match the 3 of a kinds
2023-03-21 01:26:03 +09:00
if options . logic == ' glitched ' or options . logic == ' hell ' :
2024-12-05 10:32:45 -05:00
boss_key . connect ( entrance , r . super_jump_feather ) # super jump
2023-03-21 01:26:03 +09:00
dungeon1_miniboss . connect ( dungeon1_right_side , r . miniboss_requirements [ world_setup . miniboss_mapping [ 0 ] ] ) # damage boost or buffer pause over the pit to cross or mushroom
if options . logic == ' hell ' :
feather_chest . connect ( dungeon1_upper_left , SWORD ) # keep slashing the spiked beetles until they keep moving 1 pixel close towards you and the pit, to get them to fall
2024-12-05 10:32:45 -05:00
boss_key . connect ( entrance , AND ( r . damage_boost , FOUND ( KEY1 , 3 ) ) ) # damage boost off the hardhat to cross the pit
2023-03-21 01:26:03 +09:00
self . entrance = entrance
class NoDungeon1 :
def __init__ ( self , options , world_setup , r ) :
entrance = Location ( dungeon = 1 )
Location ( dungeon = 1 ) . add ( HeartContainer ( 0x106 ) , Instrument ( 0x102 ) ) . connect ( entrance , r . boss_requirements [
world_setup . boss_mapping [ 0 ] ] )
self . entrance = entrance