Shop-sanity shops now marked as counting towards end-game credits.

Retro single arrow now marks itself as purchased from every single shop location on initial purchase.  (Nothing prevents you from buying your 'first' quiver if you already have one, however, its 6 hint points for the price of one in shop sanity.)
This commit is contained in:
CaitSith2 2021-01-29 00:25:13 -08:00
parent ca4758d1c2
commit 96e12088d7
2 changed files with 25 additions and 3 deletions

28
Rom.py
View File

@ -1,7 +1,7 @@
from __future__ import annotations from __future__ import annotations
JAP10HASH = '03a63945398191337e896e5771f77173' JAP10HASH = '03a63945398191337e896e5771f77173'
RANDOMIZERBASEHASH = '93538d51eb018955a90181600e3384ba' RANDOMIZERBASEHASH = '5d109c62f73966de1fe65751fc876778'
import io import io
import json import json
@ -1560,6 +1560,7 @@ def write_custom_shops(rom, world, player):
shop_data = bytearray() shop_data = bytearray()
items_data = bytearray() items_data = bytearray()
retro_shop_slots = bytearray()
for shop_id, shop in enumerate(shops): for shop_id, shop in enumerate(shops):
if shop_id == len(shops) - 1: if shop_id == len(shops) - 1:
@ -1568,10 +1569,27 @@ def write_custom_shops(rom, world, player):
bytes[0] = shop_id bytes[0] = shop_id
bytes[-1] = shop.sram_offset bytes[-1] = shop.sram_offset
shop_data.extend(bytes) shop_data.extend(bytes)
# [id][item][price-low][price-high][max][repl_id][repl_price-low][repl_price-high][player]
for item in shop.inventory: arrow_mask = 0x00
for index, item in enumerate(shop.inventory):
slot = 0 if shop.type == ShopType.TakeAny else index
if item is None: if item is None:
break break
if world.shop_shuffle_slots[player]:
count_shop = (shop.region.name != 'Potion Shop' or 'w' in world.shop_shuffle[player]) and \
shop.region.name != 'Capacity Upgrade'
rom.write_byte(0x186560 + shop.sram_offset + slot, 1 if count_shop else 0)
if item['item'] == 'Single Arrow' and item['player'] == 0:
arrow_mask |= 1 << index
retro_shop_slots.append(shop.sram_offset + slot)
# [id][item][price-low][price-high][max][repl_id][repl_price-low][repl_price-high][player]
for index, item in enumerate(shop.inventory):
slot = 0 if shop.type == ShopType.TakeAny else index
if item is None:
break
if item['item'] == 'Single Arrow' and item['player'] == 0 and world.retro[player]:
rom.write_byte(0x186500 + shop.sram_offset + slot, arrow_mask)
item_data = [shop_id, ItemFactory(item['item'], player).code] + int16_as_bytes(item['price']) + \ item_data = [shop_id, ItemFactory(item['item'], player).code] + int16_as_bytes(item['price']) + \
[item['max'], ItemFactory(item['replacement'], player).code if item['replacement'] else 0xFF] + \ [item['max'], ItemFactory(item['replacement'], player).code if item['replacement'] else 0xFF] + \
int16_as_bytes(item['replacement_price']) + [0 if item['player'] == player else item['player']] int16_as_bytes(item['replacement_price']) + [0 if item['player'] == player else item['player']]
@ -1582,6 +1600,10 @@ def write_custom_shops(rom, world, player):
items_data.extend([0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]) items_data.extend([0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF])
rom.write_bytes(0x184900, items_data) rom.write_bytes(0x184900, items_data)
if world.retro[player]:
retro_shop_slots.append(0xFF)
rom.write_bytes(0x186540, retro_shop_slots)
def hud_format_text(text): def hud_format_text(text):
output = bytes() output = bytes()

Binary file not shown.