17 Commits

Author SHA1 Message Date
1d4a77b8e7 Update baserom 2026-06-08 16:15:01 -05:00
1e10673e31 Update baserom, fix starting value for PikitItem 2026-06-07 13:38:38 -05:00
f1374daf96 Update baserom 2026-06-07 01:36:17 -05:00
bcdc8ce726 Merge branch 'beta' into pikit 2026-06-07 01:35:50 -05:00
4415ef5cfb Merge branch 'beta' into pikit 2026-06-06 12:56:24 -05:00
db87f57c4f Update intro check 2026-06-05 19:33:02 -05:00
626a37ea4b Update baserom 2026-06-05 01:07:07 -05:00
be35ed4451 Update baserom 2026-02-08 00:33:43 -06:00
0a18bda341 Update baserom 2026-02-07 23:53:17 -06:00
1e2097c3dc Update baserom 2026-02-07 21:23:53 -06:00
f4e6308a5d Enemy shuffle working 2026-02-07 18:13:47 -06:00
2738f61c0d Update baserom 2026-02-07 16:52:00 -06:00
b189de00c6 Update baserom 2026-02-07 14:18:11 -06:00
f3dd0319ed Merge branch 'beta' into pikit 2026-02-03 17:48:52 -06:00
077ba85e9d Update baserom 2026-02-03 17:45:20 -06:00
3c6239fe95 Update baserom 2026-02-01 23:17:04 -06:00
3bb0d82cab Start of pikit mode 2026-02-01 21:42:11 -06:00
8 changed files with 28 additions and 27 deletions

View File

@@ -65,6 +65,7 @@ class InitialSram:
equip[0x36C] = 0x18
equip[0x36D] = 0x18
equip[0x379] = 0x68
self._initial_sram_bytes[0x3C0] = 0x04 # PikitItem starts as shield
starting_bomb_cap_upgrades = 10 if not world.bombbag[player] else 0
starting_arrow_cap_upgrades = 30
starting_bombs = 0

View File

@@ -872,7 +872,7 @@ def set_up_shops(world, player):
rss.locked = True
cap_shop = world.get_region('Capacity Upgrade', player).shop
cap_shop.inventory[1] = None # remove arrow capacity upgrades in retro
for shop in random.sample([s for s in world.shops[player] if not s.locked and s.region.name != "Red Shield Shop" and s.region.player == player], 5):
for shop in random.sample([s for s in world.shops[player] if not s.locked and s.region.player == player], 5):
shop.custom = True
shop.locked = True
if retro_bow:
@@ -1191,10 +1191,10 @@ def get_pool_core(world, player, progressive, shuffle, difficulty, treasure_hunt
thisbottle = random.choice(diff.bottles)
pool.append(thisbottle)
if want_progressives():
pool.extend(diff.progressiveshield)
else:
pool.extend(diff.basicshield)
# if want_progressives():
# pool.extend(diff.progressiveshield)
# else:
# pool.extend(diff.basicshield)
if want_progressives():
pool.extend(diff.progressivearmor)

View File

@@ -1178,7 +1178,7 @@ def create_shops(world, player):
if (world.is_tile_swapped(0x35, player) and region_name == 'Dark Lake Hylia Shop') \
or (not world.is_tile_swapped(0x35, player) and region_name == 'Lake Hylia Shop'):
locked = True
inventory = [('Blue Potion', 160), ('Blue Shield', 50), ('Bombs (10)', 50)]
inventory = [('Blue Potion', 160), ('Small Heart', 10), ('Bombs (10)', 50)]
custom = True
region = world.get_region(region_name, player)
shop = Shop(region, room_id, type, shopkeeper, custom, locked, sram)
@@ -1366,11 +1366,11 @@ bonk_table_by_location = {y: x for x, y in bonk_table_by_location_id.items()}
# (room_id, type, shopkeeper, custom, locked, [items])
# item = (item, price, max=0, replacement=None, replacement_price=0)
_basic_shop_defaults = [('Red Potion', 150), ('Small Heart', 10), ('Bombs (10)', 50)]
_dark_world_shop_defaults = [('Red Potion', 150), ('Blue Shield', 50), ('Bombs (10)', 50)]
_dark_world_shop_defaults = [('Red Potion', 150), ('Small Heart', 10), ('Bombs (10)', 50)]
shop_table = {
'Dark Death Mountain Shop': (0x0112, ShopType.Shop, 0xC1, False, False, _basic_shop_defaults, 0),
'Red Shield Shop': (0x0110, ShopType.Shop, 0xC1, False, False,
[('Red Shield', 500), ('Bee', 10), ('Arrows (10)', 30)], 3),
[('Bombs (10)', 50), ('Bee', 10), ('Arrows (10)', 30)], 3),
'Dark Lake Hylia Shop': (0x010F, ShopType.Shop, 0xC1, False, False, _dark_world_shop_defaults, 6),
'Dark Lumberjack Shop': (0x010F, ShopType.Shop, 0xC1, False, False, _dark_world_shop_defaults, 9),
'Village of Outcasts Shop': (0x010F, ShopType.Shop, 0xC1, False, False, _dark_world_shop_defaults, 12),

14
Rom.py
View File

@@ -85,7 +85,7 @@ from Utils import int16_as_bytes, int32_as_bytes, local_path, snes_to_pc
from Versions import DRVersion, GKVersion, ORVersion
JAP10HASH = '03a63945398191337e896e5771f77173'
RANDOMIZERBASEHASH = 'abaa7ce289fd18e0ab898f2ca1263db1'
RANDOMIZERBASEHASH = '13a0b87bf037dbc378073f6b5b97d297'
class JsonRom(object):
@@ -737,8 +737,8 @@ def patch_rom(world, rom, player, team, is_mystery=False, rom_header=None):
dr_flags = DROptions.NoOptions
if world.mirrorscroll[player] or world.doorShuffle[player] != 'vanilla':
dr_flags |= DROptions.Town_Portal
if world.doorShuffle[player] == 'vanilla':
dr_flags |= DROptions.Eternal_Mini_Bosses
# if world.doorShuffle[player] == 'vanilla':
# dr_flags |= DROptions.Eternal_Mini_Bosses
if world.doorShuffle[player] not in ['vanilla', 'basic']:
dr_flags |= DROptions.Map_Info
if ((world.collection_rate[player] or world.goal[player] == 'completionist')
@@ -948,7 +948,7 @@ def patch_rom(world, rom, player, team, is_mystery=False, rom_header=None):
rom.write_byte(cr_pc+0x1e, 0xEE) # slash
rom.write_byte(cr_pc+0x1f, thousands_bot)
# modify stat config
stat_address = 0xA39895
stat_address = 0x2398B0
stat_pc = snes_to_pc(stat_address)
rom.write_byte(stat_pc, 0xa9) # change to pos 21 (from b1)
rom.write_byte(stat_pc+2, 0xc0) # change to 12 bits (from a0)
@@ -3053,9 +3053,9 @@ def text_for_item(item, world, player, team):
def init_open_mode_sram(rom):
rom.initial_sram.pre_open_castle_gate()
rom.initial_sram.set_progress_indicator(0x02)
rom.initial_sram.set_progress_flags(0x14)
rom.initial_sram.set_starting_entrance(0x01)
rom.initial_sram.set_progress_indicator(0x00)
rom.initial_sram.set_progress_flags(0x04)
rom.initial_sram.set_starting_entrance(0x00)
def init_standard_mode_sram(rom):
rom.initial_sram.set_progress_indicator(0x00)

18
Text.py
View File

@@ -1565,7 +1565,6 @@ class TextTable(object):
'hylian_text_2',
'desert_entry_translated',
'uncle_dying_sewer',
'telepathic_intro',
'desert_thief_sitting',
'desert_thief_following',
'desert_thief_question',
@@ -1609,7 +1608,7 @@ class TextTable(object):
text['zelda_save_sewers'] = CompressedTextMapper.convert("You saved me!")
text['priest_info'] = CompressedTextMapper.convert("So, I'm the dude that will protect Zelda. Don't worry, I got this covered.")
text['zelda_sanctuary_before_leave'] = CompressedTextMapper.convert("Be careful!")
text['telepathic_intro'] = CompressedTextMapper.convert("{NOBORDER}\n{SPEED6}\nHey, come find me and help me!")
text['telepathic_intro'] = CompressedTextMapper.convert("{NOBORDER}\n{SPEED6}\n\nBring me shields...")
# 20
text['telepathic_reminder'] = CompressedTextMapper.convert("{NOBORDER}\n{SPEED6}\nI'm in the castle basement.")
text['zelda_go_to_throne'] = CompressedTextMapper.convert("Go north to the throne.")
@@ -1896,13 +1895,13 @@ class TextTable(object):
+ "{PAUSE3}\n A Link to the Past"
+ "{PAUSE3}\n Randomizer"
+ "{PAUSE3}\n\n\n"
+ "{PAUSE3}\nAfter mostly disregarding what happened in the first two games,"
+ "{PAUSE3}\nLink awakens to his uncle leaving the house."
+ "{PAUSE3}\nHe just runs out the door, into the rainy night."
+ "{PAUSE3} {CHANGEPIC}\nGanon has moved around all the items in Hyrule."
+ "{PAUSE7}\nYou will have to find all the items necessary to beat Ganon."
+ "{PAUSE7}\nThis is your chance to be a hero."
+ "{PAUSE3} {CHANGEPIC}\nYou must get the 7 crystals to beat Ganon."
+ "{PAUSE3}\nAfter mostly disregarding and abandoning all sense of reason,"
+ "{PAUSE3}\nLink awakens to find a hungry pikit."
+ "{PAUSE3}\n\nHe must go look for shields, out in the rainy night."
+ "{PAUSE3} {CHANGEPIC}\n\nGanon has hidden all the items inside shields."
+ "{PAUSE7}\n\nYou will have to collect the shields to feed your pikit."
+ "{PAUSE7}\n\nThis is your chance to be a hero.\n"
+ "{PAUSE3} {CHANGEPIC}\nYou must keep your pikit well-fed.\n\n"
+ "{PAUSE9} {CHANGEPIC}", False)
text['intro_throne_room'] = CompressedTextMapper.convert("{IBOX}\nLook at this Stalfos on the throne.", False)
text['intro_zelda_cell'] = CompressedTextMapper.convert("{IBOX}\nIt is your time to shine!", False)
@@ -2057,5 +2056,6 @@ class TextTable(object):
text['ganon_phase_3_silvers'] = CompressedTextMapper.convert("Oh no! Silver! My one true weakness!")
text['murahdahla'] = CompressedTextMapper.convert("Hello @. I\nam Murahdahla, brother of\nSahasrahla and Aginah. Behold the power of\ninvisibility.\n{PAUSE3}\n… … …\nWait! You can see me? I knew I should have\nhidden in a hollow tree.")
text['mastersword_pedestal_goal'] = CompressedTextMapper.convert("To claim thy reward, you must present all 3 Pendants of Virtue.")
text['already_have_shield'] = CompressedTextMapper.convert("You can't carry another shield...\nCome back later.")
text['end_pad_data'] = bytearray([0xfb])
text['terminator'] = bytearray([0xFF, 0xFF])

Binary file not shown.

View File

@@ -1998,7 +1998,7 @@ def init_vanilla_sprites():
create_sprite(0x0103, EnemySprite.Drunkard, 0x00, 0, 0x06, 0x15)
create_sprite(0x0103, EnemySprite.AdultNpc, 0x00, 0, 0x0a, 0x1b)
create_sprite(0x0103, EnemySprite.Innkeeper, 0x00, 0, 0x17, 0x17)
create_sprite(0x0104, EnemySprite.UnclePriest, 0x00, 0, 0x1a, 0x17)
create_sprite(0x0104, EnemySprite.Pikit, 0x00, 0, 0x1a, 0x18, never_drop=True, fix=True)
create_sprite(0x0105, EnemySprite.Wiseman, 0x00, 0, 0x07, 0x18)
create_sprite(0x0106, EnemySprite.Shopkeeper, 0x00, 0, 0x08, 0x1b)
create_sprite(0x0107, EnemySprite.BonkItem, 0x00, 0, 0x03, 0x15)

View File

@@ -456,7 +456,7 @@ vanilla_sheets = [
(0x47, 0x49, 0x2B, 0x2D), (0x46, 0x49, 0x1C, 0x52), (0x00, 0x49, 0x1C, 0x52), (0x5D, 0x49, 0x00, 0x52),
(0x46, 0x49, 0x13, 0x52), (0x4B, 0x4D, 0x4A, 0x5A), (0x47, 0x49, 0x1C, 0x52), (0x4B, 0x4D, 0x39, 0x36),
(0x1F, 0x2C, 0x2E, 0x52), (0x1F, 0x2C, 0x2E, 0x1D), (0x2F, 0x2C, 0x2E, 0x52), (0x2F, 0x2C, 0x2E, 0x31),
(0x1F, 0x1E, 0x30, 0x52), (0x51, 0x49, 0x13, 0x00), (0x4F, 0x49, 0x13, 0x50), (0x4F, 0x4D, 0x4A, 0x50),
(0x1F, 0x1E, 0x30, 0x52), (0x51, 0x49, 0x13, 0x1B), (0x4F, 0x49, 0x13, 0x50), (0x4F, 0x4D, 0x4A, 0x50),
(0x4B, 0x49, 0x4C, 0x2B), (0x1F, 0x20, 0x22, 0x53), (0x55, 0x3D, 0x42, 0x43), (0x1F, 0x1E, 0x23, 0x52),
(0x1F, 0x1E, 0x39, 0x3A), (0x1F, 0x1E, 0x3A, 0x3E), (0x1F, 0x1E, 0x3C, 0x3D), (0x40, 0x1E, 0x27, 0x3F),
@@ -566,7 +566,7 @@ def setup_required_dungeon_groups(sheets, data_tables):
sheets[did(5)].add_sprite_to_sheet([75, 77, 74, 90], {0xf3, 0xff, 0x109, 0x10e, 0x10f, 0x110, 0x111, 0x112,
0x11a, 0x11c, 0x11f, 0x122})
sheets[did(7)].add_sprite_to_sheet([75, 77, 57, 54], {0x8, 0x2c, 0x114, 0x115, 0x116}) # big fairies
sheets[did(13)].add_sprite_to_sheet([81, None, None, None], {0x55, 0x102, 0x104}) # uncle, sick kid
sheets[did(13)].add_sprite_to_sheet([81, None, None, 27], {0x55, 0x102, 0x104}) # uncle, sick kid
sheets[did(14)].add_sprite_to_sheet([71, 73, 76, 80], {0x12, 0x105, 0x10a}) # wisemen
sheets[did(15)].add_sprite_to_sheet([79, 77, 74, 80], {0xf4, 0xf5, 0x101, 0x103, 0x106, 0x118, 0x119}) # more npcs
sheets[did(18)].add_sprite_to_sheet([85, 61, 66, 67], {0x20, 0x30}) # aga alter, aga1