From 9263c80cce3a788d3f81ae465e0ada4bfb89d8c1 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Fri, 4 Feb 2022 06:10:57 -0600 Subject: [PATCH 01/13] Merged in Upstream ER changes -Fixed Witch invisible item bug -Added new font changes, not enabled yet --- Rom.py | 2 +- data/base2current.bps | Bin 87439 -> 87473 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Rom.py b/Rom.py index a71c1a72..a4c2cb04 100644 --- a/Rom.py +++ b/Rom.py @@ -33,7 +33,7 @@ from source.classes.SFX import randomize_sfx JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = '9ff49ef63fdddeb32de09646bd459bf8' +RANDOMIZERBASEHASH = 'e4d9784d6bb96d86193dfca4d4675838' class JsonRom(object): diff --git a/data/base2current.bps b/data/base2current.bps index d588f66b3b9c808ccf8ec17e3a8522db9a3095ca..85f47b5253770a30102cdd95017a3a39c9275660 100644 GIT binary patch delta 10124 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 QKU@V}ds_Bk`~1KEKWYvGF8}}l delta 9835 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 CgKSR# From a7a148ed1807effd1b24ce534bb50db9804c1827 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Fri, 4 Feb 2022 06:47:33 -0600 Subject: [PATCH 02/13] Adding 'O' to ROM header to indicate a seed from OWR branch --- Rom.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Rom.py b/Rom.py index a4c2cb04..d34b65de 100644 --- a/Rom.py +++ b/Rom.py @@ -1674,7 +1674,7 @@ def patch_rom(world, rom, player, team, enemized, is_mystery=False): from Main import __version__ seedstring = f'{world.seed:09}' if isinstance(world.seed, int) else world.seed # todo: change to DR when Enemizer is okay with DR - rom.name = bytearray(f'ER{__version__.split("-")[0].replace(".","")[0:3]}_{team+1}_{player}_{seedstring}\0', 'utf8')[:21] + rom.name = bytearray(f'ER{__version__.split("-")[0].replace(".","")[0:3]}_{team+1}_{player}_{seedstring}O\0', 'utf8')[:21] rom.name.extend([0] * (21 - len(rom.name))) rom.write_bytes(0x7FC0, rom.name) From 90484ac6c4b5f97d18666d607623cd1c4c719604 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Fri, 4 Feb 2022 16:08:12 -0600 Subject: [PATCH 03/13] Enabled new text font --- Rom.py | 2 +- data/base2current.bps | Bin 87473 -> 91685 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Rom.py b/Rom.py index d34b65de..6e5a2dfb 100644 --- a/Rom.py +++ b/Rom.py @@ -33,7 +33,7 @@ from source.classes.SFX import randomize_sfx JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = 'e4d9784d6bb96d86193dfca4d4675838' +RANDOMIZERBASEHASH = '87b41e582793f55739afa43e811b2919' class JsonRom(object): diff --git a/data/base2current.bps b/data/base2current.bps index 85f47b5253770a30102cdd95017a3a39c9275660..c8e8cbb4c4d9264203601dd8adf818b9abb45977 100644 GIT binary patch delta 4623 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 a)Z`TozaK@vvQ=b>WR~r<#Q$@X>i+?&hPPh; delta 356 zcmZ2_hIQj=)(x(VEXP(_hHds_oF?da>e&L7?#ceqlPvmsm7d&NkkAUI0vf>7gUvq0 zlR_HSFF3LLok`dH1r;;;8JkpkCp$MWG)(U1Xqv1sW3#t#_f?U`jPi;$si=?QvYkcw zosBNjl&u;!hrbpPd(@8)phP$m*`zF3-%kg^6>Uf?$Jk zL$Nr^^gFDKHq4bujoYQ!7!BCP#3V%;rm8V8Fe)(4D|B48yryxww#km^@w|+Z%x5OA znO@J!n5v%Hx>6sg#FPOD7|kYgwa=2{S<%X9*xx>t(SXs2(R_06Y|e^3(}nmLd$Dv5$*~TYMsG>C|GOiPan(+g&6XB{-Nh**620!yE#s@Y-nd}SKI>t0hoZ> From d3bf6883b7938bfe0ad62113b9e4f554d83952ce Mon Sep 17 00:00:00 2001 From: codemann8 Date: Sun, 6 Feb 2022 07:41:06 -0600 Subject: [PATCH 04/13] Enabled new font + lowercase hint text updates --- Items.py | 56 +++++++++++++++++++++--------------------- Regions.py | 36 +++++++++++++-------------- Rom.py | 6 ++--- Text.py | 29 +++++++++++++++------- data/base2current.bps | Bin 91685 -> 91683 bytes 5 files changed, 69 insertions(+), 58 deletions(-) diff --git a/Items.py b/Items.py index fd7fa0f9..6d7f9627 100644 --- a/Items.py +++ b/Items.py @@ -27,24 +27,24 @@ item_table = {'Bow': (True, False, None, 0x0B, 200, 'You have\nchosen the\narche 'Progressive Bow': (True, False, None, 0x64, 150, 'You have\nchosen the\narcher class.', 'the stick and twine', 'arrow-slinging kid', 'arrow sling for sale', 'witch and robin hood', 'archer boy shoots again', 'a Bow'), 'Progressive Bow (Alt)': (True, False, None, 0x65, 150, 'You have\nchosen the\narcher class.', 'the stick and twine', 'arrow-slinging kid', 'arrow sling for sale', 'witch and robin hood', 'archer boy shoots again', 'a Bow'), 'Book of Mudora': (True, False, None, 0x1D, 150, 'This is a\nparadox?!', 'and the story book', 'the scholarly kid', 'moon runes for sale', 'drugs for literacy', 'book-worm boy can read again', 'the Book'), - 'Hammer': (True, False, None, 0x09, 250, 'stop\nhammer time!', 'and m c hammer', 'hammer-smashing kid', 'm c hammer for sale', 'stop... hammer time', 'stop, hammer time', 'the hammer'), + 'Hammer': (True, False, None, 0x09, 250, 'stop\nhammer time!', 'and m c hammer', 'hammer-smashing kid', 'm c hammer for sale', 'stop... hammer time', 'stop, hammer time', 'the Hammer'), 'Hookshot': (True, False, None, 0x0A, 250, 'BOING!!!\nBOING!!!\nBOING!!!', 'and the tickle beam', 'tickle-monster kid', 'tickle beam for sale', 'witch and tickle boy', 'beam boy tickles again', 'the Hookshot'), 'Magic Mirror': (True, False, None, 0x1A, 250, 'Isn\'t your\nreflection so\npretty?', 'the face reflector', 'the narcissistic kid', 'your face for sale', 'trades looking-glass', 'narcissistic boy is happy again', 'the Mirror'), 'Ocarina': (True, False, None, 0x14, 250, 'Save the duck\nand fly to\nfreedom!', 'and the duck call', 'the duck-call kid', 'duck call for sale', 'duck-calls for trade', 'ocarina boy plays again', 'the Flute'), 'Ocarina (Activated)': (True, False, None, 0x4A, 250, 'Save the duck\nand fly to\nfreedom!', 'and the duck call', 'the duck-call kid', 'duck call for sale', 'duck-calls for trade', 'ocarina boy plays again', 'the Flute'), 'Pegasus Boots': (True, False, None, 0x4B, 250, 'Gotta go fast!', 'and the sprint shoes', 'the running-man kid', 'sprint shoe for sale', 'shrooms for speed', 'gotta-go-fast boy runs again', 'the Boots'), - 'Power Glove': (True, False, None, 0x1B, 100, 'Now you can\nlift weak\nstuff!', 'and the grey mittens', 'body-building kid', 'lift glove for sale', 'fungus for gloves', 'body-building boy lifts again', 'the glove'), - 'Cape': (True, False, None, 0x19, 50, 'Wear this to\nbecome\ninvisible!', 'the camouflage cape', 'red riding-hood kid', 'red hood for sale', 'hood from a hood', 'dapper boy hides again', 'the cape'), - 'Mushroom': (True, False, None, 0x29, 50, 'I\'m a fun guy!\n\nI\'m a funghi!', 'and the legal drugs', 'the drug-dealing kid', 'legal drugs for sale', 'shroom swap', 'shroom boy sells drugs again', 'the mushroom'), - 'Shovel': (True, False, None, 0x13, 50, 'Can\n You\n Dig it?', 'and the spade', 'archaeologist kid', 'dirt spade for sale', 'can you dig it', 'shovel boy digs again', 'the shovel'), - 'Lamp': (True, False, None, 0x12, 150, 'Baby, baby,\nbaby.\nLight my way!', 'and the flashlight', 'light-shining kid', 'flashlight for sale', 'fungus for illumination', 'illuminated boy can see again', 'the lamp'), - 'Magic Powder': (True, False, None, 0x0D, 50, 'you can turn\nanti-faeries\ninto faeries', 'and the magic sack', 'the sack-holding kid', 'magic sack for sale', 'the witch and assistant', 'magic boy plays marbles again', 'the powder'), - 'Moon Pearl': (True, False, None, 0x1F, 200, ' Bunny Link\n be\n gone!', 'and the jaw breaker', 'fortune-telling kid', 'lunar orb for sale', 'shrooms for moon rock', 'moon boy plays ball again', 'the moon pearl'), - 'Cane of Somaria': (True, False, None, 0x15, 250, 'I make blocks\nto hold down\nswitches!', 'and the red blocks', 'the block-making kid', 'block stick for sale', 'block stick for trade', 'cane boy makes blocks again', 'the red cane'), - 'Fire Rod': (True, False, None, 0x07, 250, 'I\'m the hot\nrod. I make\nthings burn!', 'and the flamethrower', 'fire-starting kid', 'rage rod for sale', 'fungus for rage-rod', 'firestarter boy burns again', 'the fire rod'), + 'Power Glove': (True, False, None, 0x1B, 100, 'Now you can\nlift weak\nstuff!', 'and the grey mittens', 'body-building kid', 'lift glove for sale', 'fungus for gloves', 'body-building boy lifts again', 'the Glove'), + 'Cape': (True, False, None, 0x19, 50, 'Wear this to\nbecome\ninvisible!', 'the camouflage cape', 'red riding-hood kid', 'red hood for sale', 'hood from a hood', 'dapper boy hides again', 'the Cape'), + 'Mushroom': (True, False, None, 0x29, 50, 'I\'m a fun guy!\n\nI\'m a funghi!', 'and the legal drugs', 'the drug-dealing kid', 'legal drugs for sale', 'shroom swap', 'shroom boy sells drugs again', 'the Mushroom'), + 'Shovel': (True, False, None, 0x13, 50, 'Can\n You\n Dig it?', 'and the spade', 'archaeologist kid', 'dirt spade for sale', 'can you dig it', 'shovel boy digs again', 'the Shovel'), + 'Lamp': (True, False, None, 0x12, 150, 'Baby, baby,\nbaby.\nLight my way!', 'and the flashlight', 'light-shining kid', 'flashlight for sale', 'fungus for illumination', 'illuminated boy can see again', 'the Lamp'), + 'Magic Powder': (True, False, None, 0x0D, 50, 'you can turn\nanti-faeries\ninto faeries', 'and the magic sack', 'the sack-holding kid', 'magic sack for sale', 'the witch and assistant', 'magic boy plays marbles again', 'the Powder'), + 'Moon Pearl': (True, False, None, 0x1F, 200, ' Bunny Link\n be\n gone!', 'and the jaw breaker', 'fortune-telling kid', 'lunar orb for sale', 'shrooms for moon rock', 'moon boy plays ball again', 'the Moon Pearl'), + 'Cane of Somaria': (True, False, None, 0x15, 250, 'I make blocks\nto hold down\nswitches!', 'and the red blocks', 'the block-making kid', 'block stick for sale', 'block stick for trade', 'cane boy makes blocks again', 'the Red Cane'), + 'Fire Rod': (True, False, None, 0x07, 250, 'I\'m the hot\nrod. I make\nthings burn!', 'and the flamethrower', 'fire-starting kid', 'rage rod for sale', 'fungus for rage-rod', 'firestarter boy burns again', 'the Fire Rod'), 'Flippers': (True, False, None, 0x1E, 250, 'fancy a swim?', 'and the toewebs', 'the swimming kid', 'finger webs for sale', 'shrooms let you swim', 'swimming boy swims again', 'the flippers'), - 'Ice Rod': (True, False, None, 0x08, 250, 'I\'m the cold\nrod. I make\nthings freeze!', 'and the freeze ray', 'the ice-bending kid', 'freeze ray for sale', 'fungus for ice-rod', 'ice-cube boy freezes again', 'the ice rod'), - 'Titans Mitts': (True, False, None, 0x1C, 200, 'Now you can\nlift heavy\nstuff!', 'and the golden glove', 'body-building kid', 'carry glove for sale', 'fungus for bling-gloves', 'body-building boy has gold again', 'the mitts'), + 'Ice Rod': (True, False, None, 0x08, 250, 'I\'m the cold\nrod. I make\nthings freeze!', 'and the freeze ray', 'the ice-bending kid', 'freeze ray for sale', 'fungus for ice-rod', 'ice-cube boy freezes again', 'the Ice Rod'), + 'Titans Mitts': (True, False, None, 0x1C, 200, 'Now you can\nlift heavy\nstuff!', 'and the golden glove', 'body-building kid', 'carry glove for sale', 'fungus for bling-gloves', 'body-building boy has gold again', 'the Mitts'), 'Bombos': (True, False, None, 0x0F, 100, 'Burn, baby,\nburn! Fear my\nring of fire!', 'and the swirly coin', 'coin-collecting kid', 'swirly coin for sale', 'shrooms for swirly-coin', 'medallion boy melts room again', 'Bombos'), 'Ether': (True, False, None, 0x10, 100, 'This magic\ncoin freezes\neverything!', 'and the bolt coin', 'coin-collecting kid', 'bolt coin for sale', 'shrooms for bolt-coin', 'medallion boy sees floor again', 'Ether'), 'Quake': (True, False, None, 0x11, 100, 'Maxing out the\nRichter scale\nis what I do!', 'and the wavy coin', 'coin-collecting kid', 'wavy coin for sale', 'shrooms for wavy-coin', 'medallion boy shakes dirt again', 'Quake'), @@ -57,11 +57,11 @@ item_table = {'Bow': (True, False, None, 0x0B, 200, 'You have\nchosen the\narche 'Bottle (Good Bee)': (True, False, None, 0x48, 60, 'I will sting your foes a whole lot!', 'and the sparkle sting', 'the beekeeper kid', 'insect for sale', 'shroom pollenation', 'bottle boy has beetor again', 'a Bottle'), 'Master Sword': (True, False, 'Sword', 0x50, 100, 'I beat barries and pigs alike', 'and the master sword', 'sword-wielding kid', 'glow sword for sale', 'fungus for blue slasher', 'sword boy fights again', 'the Master Sword'), 'Tempered Sword': (True, False, 'Sword', 0x02, 150, 'I stole the\nblacksmith\'s\njob!', 'the tempered sword', 'sword-wielding kid', 'flame sword for sale', 'fungus for red slasher', 'sword boy fights again', 'the Tempered Sword'), - 'Fighter Sword': (True, False, 'Sword', 0x49, 50, 'A pathetic\nsword rests\nhere!', 'the tiny sword', 'sword-wielding kid', 'tiny sword for sale', 'fungus for tiny slasher', 'sword boy fights again', 'the small sword'), + 'Fighter Sword': (True, False, 'Sword', 0x49, 50, 'A pathetic\nsword rests\nhere!', 'the tiny sword', 'sword-wielding kid', 'tiny sword for sale', 'fungus for tiny slasher', 'sword boy fights again', 'the Fighter Sword'), 'Golden Sword': (True, False, 'Sword', 0x03, 200, 'The butter\nsword rests\nhere!', 'and the butter sword', 'sword-wielding kid', 'butter for sale', 'cap churned to butter', 'sword boy fights again', 'the Golden Sword'), - 'Progressive Sword': (True, False, 'Sword', 0x5E, 150, 'a better copy\nof your sword\nfor your time', 'the unknown sword', 'sword-wielding kid', 'sword for sale', 'fungus for some slasher', 'sword boy fights again', 'a sword'), - 'Progressive Glove': (True, False, None, 0x61, 150, 'a way to lift\nheavier things', 'and the lift upgrade', 'body-building kid', 'some glove for sale', 'fungus for gloves', 'body-building boy lifts again', 'a glove'), - 'Silver Arrows': (True, False, None, 0x58, 100, 'Do you fancy\nsilver tipped\narrows?', 'and the ganonsbane', 'ganon-killing kid', 'ganon doom for sale', 'fungus for pork', 'archer boy shines again', 'the silver arrows'), + 'Progressive Sword': (True, False, 'Sword', 0x5E, 150, 'a better copy\nof your sword\nfor your time', 'the unknown sword', 'sword-wielding kid', 'sword for sale', 'fungus for some slasher', 'sword boy fights again', 'a Sword'), + 'Progressive Glove': (True, False, None, 0x61, 150, 'a way to lift\nheavier things', 'and the lift upgrade', 'body-building kid', 'some glove for sale', 'fungus for gloves', 'body-building boy lifts again', 'a Glove'), + 'Silver Arrows': (True, False, None, 0x58, 100, 'Do you fancy\nsilver tipped\narrows?', 'and the ganonsbane', 'ganon-killing kid', 'ganon doom for sale', 'fungus for pork', 'archer boy shines again', 'the Silver Arrows'), 'Green Pendant': (True, False, 'Crystal', [0x04, 0x38, 0x62, 0x00, 0x69, 0x01], 999, None, None, None, None, None, None, None), 'Blue Pendant': (True, False, 'Crystal', [0x02, 0x34, 0x60, 0x00, 0x69, 0x02], 999, None, None, None, None, None, None, None), 'Red Pendant': (True, False, 'Crystal', [0x01, 0x32, 0x60, 0x00, 0x69, 0x03], 999, None, None, None, None, None, None, None), @@ -84,17 +84,17 @@ item_table = {'Bow': (True, False, None, 0x0B, 200, 'You have\nchosen the\narche 'Bombs (10)': (False, False, None, 0x31, 50, 'I make things\ngo BOOM! Ten\ntimes!', 'and the explosions', 'the bomb-holding kid', 'firecrackers for sale', 'blend fungus into bombs', '\'splosion boy explodes again', 'ten bombs'), 'Bomb Upgrade (+10)': (False, False, None, 0x52, 100, 'increase bomb\nstorage, low\nlow price', 'and the bomb bag', 'boom-enlarging kid', 'bomb boost for sale', 'the shroom goes boom', 'upgrade boy explodes more again', 'bomb capacity'), 'Bomb Upgrade (+5)': (False, False, None, 0x51, 100, 'increase bomb\nstorage, low\nlow price', 'and the bomb bag', 'boom-enlarging kid', 'bomb boost for sale', 'the shroom goes boom', 'upgrade boy explodes more again', 'bomb capacity'), - 'Blue Mail': (False, True, None, 0x22, 50, 'Now you\'re a\nblue elf!', 'and the banana hat', 'the protected kid', 'banana hat for sale', 'the clothing store', 'tailor boy banana hatted again', 'the blue mail'), - 'Red Mail': (False, True, None, 0x23, 100, 'Now you\'re a\nred elf!', 'and the eggplant hat', 'well-protected kid', 'purple hat for sale', 'the nice clothing store', 'tailor boy fears nothing again', 'the red mail'), + 'Blue Mail': (False, True, None, 0x22, 50, 'Now you\'re a\nblue elf!', 'and the banana hat', 'the protected kid', 'banana hat for sale', 'the clothing store', 'tailor boy banana hatted again', 'the Blue Mail'), + 'Red Mail': (False, True, None, 0x23, 100, 'Now you\'re a\nred elf!', 'and the eggplant hat', 'well-protected kid', 'purple hat for sale', 'the nice clothing store', 'tailor boy fears nothing again', 'the Red Mail'), 'Progressive Armor': (False, True, None, 0x60, 50, 'time for a\nchange of\nclothes?', 'and the unknown hat', 'the protected kid', 'new hat for sale', 'the clothing store', 'tailor boy has threads again', 'some armor'), - 'Blue Boomerang': (True, False, None, 0x0C, 50, 'No matter what\nyou do, blue\nreturns to you', 'and the bluemarang', 'the bat-throwing kid', 'bent stick for sale', 'fungus for puma-stick', 'throwing boy plays fetch again', 'the blue boomerang'), - 'Red Boomerang': (True, False, None, 0x2A, 50, 'No matter what\nyou do, red\nreturns to you', 'and the badmarang', 'the bat-throwing kid', 'air foil for sale', 'fungus for return-stick', 'magical boy plays fetch again', 'the red boomerang'), - 'Blue Shield': (False, True, None, 0x04, 50, 'Now you can\ndefend against\npebbles!', 'and the stone blocker', 'shield-wielding kid', 'shield for sale', 'fungus for shield', 'shield boy defends again', 'the blue shield'), - 'Red Shield': (False, True, None, 0x05, 500, 'Now you can\ndefend against\nfireballs!', 'and the shot blocker', 'shield-wielding kid', 'fire shield for sale', 'fungus for fire shield', 'shield boy defends again', 'the red shield'), - 'Mirror Shield': (True, False, None, 0x06, 200, 'Now you can\ndefend against\nlasers!', 'and the laser blocker', 'shield-wielding kid', 'face shield for sale', 'fungus for face shield', 'shield boy defends again', 'the mirror shield'), + 'Blue Boomerang': (True, False, None, 0x0C, 50, 'No matter what\nyou do, blue\nreturns to you', 'and the bluemarang', 'the bat-throwing kid', 'bent stick for sale', 'fungus for puma-stick', 'throwing boy plays fetch again', 'the Blue Boomerang'), + 'Red Boomerang': (True, False, None, 0x2A, 50, 'No matter what\nyou do, red\nreturns to you', 'and the badmarang', 'the bat-throwing kid', 'air foil for sale', 'fungus for return-stick', 'magical boy plays fetch again', 'the Red Boomerang'), + 'Blue Shield': (False, True, None, 0x04, 50, 'Now you can\ndefend against\npebbles!', 'and the stone blocker', 'shield-wielding kid', 'shield for sale', 'fungus for shield', 'shield boy defends again', 'the Blue Shield'), + 'Red Shield': (False, True, None, 0x05, 500, 'Now you can\ndefend against\nfireballs!', 'and the shot blocker', 'shield-wielding kid', 'fire shield for sale', 'fungus for fire shield', 'shield boy defends again', 'the Red Shield'), + 'Mirror Shield': (True, False, None, 0x06, 200, 'Now you can\ndefend against\nlasers!', 'and the laser blocker', 'shield-wielding kid', 'face shield for sale', 'fungus for face shield', 'shield boy defends again', 'the Mirror Shield'), 'Progressive Shield': (True, False, None, 0x5F, 50, 'have a better\nblocker in\nfront of you', 'and the new shield', 'shield-wielding kid', 'shield for sale', 'fungus for shield', 'shield boy defends again', 'a shield'), - 'Bug Catching Net': (True, False, None, 0x21, 50, 'Let\'s catch\nsome bees and\nfaeries!', 'and the bee catcher', 'the bug-catching kid', 'stick web for sale', 'fungus for butterflies', 'wrong boy catches bees again', 'the bug net'), - 'Cane of Byrna': (True, False, None, 0x18, 50, 'Use this to\nbecome\ninvincible!', 'and the bad cane', 'the spark-making kid', 'spark stick for sale', 'spark-stick for trade', 'cane boy encircles again', 'the blue cane'), + 'Bug Catching Net': (True, False, None, 0x21, 50, 'Let\'s catch\nsome bees and\nfaeries!', 'and the bee catcher', 'the bug-catching kid', 'stick web for sale', 'fungus for butterflies', 'wrong boy catches bees again', 'the Bug Net'), + 'Cane of Byrna': (True, False, None, 0x18, 50, 'Use this to\nbecome\ninvincible!', 'and the bad cane', 'the spark-making kid', 'spark stick for sale', 'spark-stick for trade', 'cane boy encircles again', 'the Blue Cane'), 'Boss Heart Container': (False, False, None, 0x3E, 40, 'Maximum health\nincreased!\nYeah!', 'and the full heart', 'the life-giving kid', 'love for sale', 'fungus for life', 'life boy feels love again', 'a heart'), 'Sanctuary Heart Container': (False, False, None, 0x3F, 50, 'Maximum health\nincreased!\nYeah!', 'and the full heart', 'the life-giving kid', 'love for sale', 'fungus for life', 'life boy feels love again', 'a heart'), 'Piece of Heart': (False, False, None, 0x17, 10, 'Just a little\npiece of love!', 'and the broken heart', 'the life-giving kid', 'little love for sale', 'fungus for life', 'life boy feels some love again', 'a heart piece'), @@ -110,8 +110,8 @@ item_table = {'Bow': (True, False, None, 0x0B, 200, 'You have\nchosen the\narche 'Green Clock': (False, True, None, 0x5D, 200, 'a lot of time', 'the emerald clock', 'the emerald-time kid', 'green time for sale', 'for emerald time', 'moment boy adjusts time again', 'a red clock'), 'Single RNG': (False, True, None, 0x62, 300, 'something you don\'t yet have', None, None, None, None, 'unknown boy somethings again', 'a new mystery'), 'Multi RNG': (False, True, None, 0x63, 100, 'something you may already have', None, None, None, None, 'unknown boy somethings again', 'a total mystery'), - 'Magic Upgrade (1/2)': (True, False, None, 0x4E, 50, 'Your magic\npower has been\ndoubled!', 'and the spell power', 'the magic-saving kid', 'wizardry for sale', 'mekalekahi mekahiney ho', 'magic boy saves magic again', 'half magic'), # can be required to beat mothula in an open seed in very very rare circumstance - 'Magic Upgrade (1/4)': (True, False, None, 0x4F, 100, 'Your magic\npower has been\nquadrupled!', 'and the spell power', 'the magic-saving kid', 'wizardry for sale', 'mekalekahi mekahiney ho', 'magic boy saves magic again', 'quarter magic'), # can be required to beat mothula in an open seed in very very rare circumstance + 'Magic Upgrade (1/2)': (True, False, None, 0x4E, 50, 'Your magic\npower has been\ndoubled!', 'and the spell power', 'the magic-saving kid', 'wizardry for sale', 'mekalekahi mekahiney ho', 'magic boy saves magic again', 'Half magic'), # can be required to beat mothula in an open seed in very very rare circumstance + 'Magic Upgrade (1/4)': (True, False, None, 0x4F, 100, 'Your magic\npower has been\nquadrupled!', 'and the spell power', 'the magic-saving kid', 'wizardry for sale', 'mekalekahi mekahiney ho', 'magic boy saves magic again', 'Quarter magic'), # can be required to beat mothula in an open seed in very very rare circumstance 'Small Key (Eastern Palace)': (False, False, 'SmallKey', 0xA2, 40, 'A small key to Armos Knights', 'and the key', 'the unlocking kid', 'keys for sale', 'unlock the fungus', 'key boy opens door again', 'a small key to Eastern Palace'), 'Big Key (Eastern Palace)': (False, False, 'BigKey', 0x9D, 60, 'A big key to Armos Knights', 'and the big key', 'the big-unlock kid', 'big key for sale', 'face key fungus', 'key boy opens chest again', 'a big key to Eastern Palace'), 'Compass (Eastern Palace)': (False, True, 'Compass', 0x8D, 10, 'Now you can find the Armos Knights!', 'and the compass', 'the magnetic kid', 'compass for sale', 'magnetic fungus', 'compass boy finds boss again', 'a compass to Eastern Palace'), @@ -162,7 +162,7 @@ item_table = {'Bow': (True, False, None, 0x0B, 200, 'You have\nchosen the\narche 'Map (Turtle Rock)': (False, True, 'Map', 0x73, 20, 'A tightly folded map rests here', 'and the map', 'cartography kid', 'map for sale', 'a map to shrooms', 'map boy navigates again', 'a map to Turtle Rock'), 'Small Key (Ganons Tower)': (False, False, 'SmallKey', 0xAD, 40, 'A small key to the evil tower', 'and the key', 'the unlocking kid', 'keys for sale', 'unlock the fungus', 'key boy opens door again', 'a small key to Ganon\'s Tower'), 'Big Key (Ganons Tower)': (False, False, 'BigKey', 0x92, 60, 'A big key to the evil tower', 'and the big key', 'the big-unlock kid', 'big key for sale', 'face key fungus', 'key boy opens chest again', 'a big key to Ganon\'s Tower'), - 'Compass (Ganons Tower)': (False, True, 'Compass', 0x82, 10, 'Now you can find Agahnim!', 'and the compass', 'the magnetic kid', 'compass for sale', 'magnetic fungus', 'compass boy finds boss again', 'a comapss to Ganon\'s Tower'), + 'Compass (Ganons Tower)': (False, True, 'Compass', 0x82, 10, 'Now you can find Agahnim!', 'and the compass', 'the magnetic kid', 'compass for sale', 'magnetic fungus', 'compass boy finds boss again', 'a compass to Ganon\'s Tower'), 'Map (Ganons Tower)': (False, True, 'Map', 0x72, 10, 'A tightly folded map rests here', 'and the map', 'cartography kid', 'map for sale', 'a map to shrooms', 'map boy navigates again', 'a map to Ganon\'s Tower'), 'Small Key (Universal)': (False, True, None, 0xAF, 100, 'A small key for any door', 'and the key', 'the unlocking kid', 'keys for sale', 'unlock the fungus', 'key boy opens door again', 'a small key'), 'Nothing': (False, False, None, 0x5A, 1, 'Some Hot Air', 'and the Nothing', 'the zen kid', 'outright theft', 'shroom theft', 'empty boy is bored again', 'nothing'), diff --git a/Regions.py b/Regions.py index f94599a8..98548c9d 100644 --- a/Regions.py +++ b/Regions.py @@ -1242,8 +1242,8 @@ key_drop_data = { 'Swamp Palace - Waterway Pot Key': [0x140009, 0x14000a, 'in Swamp Palace', 'Small Key (Swamp Palace)'], 'Skull Woods - West Lobby Pot Key': [0x14002d, 0x14002e, 'in Skull Woods', 'Small Key (Skull Woods)'], 'Skull Woods - Spike Corner Key Drop': [0x14001b, 0x14001c, 'near Mothula', 'Small Key (Skull Woods)'], - "Thieves' Town - Hallway Pot Key": [0x14005d, 0x14005e, "in Thieves' Town", 'Small Key (Thieves Town)'], - "Thieves' Town - Spike Switch Pot Key": [0x14004e, 0x14004f, "in Thieves' Town", 'Small Key (Thieves Town)'], + "Thieves' Town - Hallway Pot Key": [0x14005d, 0x14005e, "in Thieves Town", 'Small Key (Thieves Town)'], + "Thieves' Town - Spike Switch Pot Key": [0x14004e, 0x14004f, "in Thieves Town", 'Small Key (Thieves Town)'], 'Ice Palace - Jelly Key Drop': [0x140003, 0x140004, 'in Ice Palace', 'Small Key (Ice Palace)'], 'Ice Palace - Conveyor Key Drop': [0x140021, 0x140022, 'in Ice Palace', 'Small Key (Ice Palace)'], 'Ice Palace - Hammer Block Key Drop': [0x140024, 0x140025, 'in Ice Palace', 'Small Key (Ice Palace)'], @@ -1306,10 +1306,10 @@ location_table = {'Mushroom': (0x180013, 0x186338, False, 'in the woods'), 'Kakariko Well - Middle': (0xea94, 0x186268, False, 'in a well'), 'Kakariko Well - Right': (0xea97, 0x18626b, False, 'in a well'), 'Kakariko Well - Bottom': (0xea9a, 0x18626e, False, 'in a well'), - 'Blacksmith': (0x18002a, 0x186366, False, 'with the smith'), - 'Magic Bat': (0x180015, 0x18635e, False, 'with the bat'), + 'Blacksmith': (0x18002a, 0x186366, False, 'with the Smith'), + 'Magic Bat': (0x180015, 0x18635e, False, 'with the Bat'), 'Sick Kid': (0x339cf, 0x186367, False, 'with the sick'), - 'Hobo': (0x33e7d, 0x186368, False, 'with the hobo'), + 'Hobo': (0x33e7d, 0x186368, False, 'with the Hobo'), 'Lost Woods Hideout': (0x180000, 0x186348, False, 'near a thief'), 'Lumberjack Tree': (0x180001, 0x186349, False, 'in a hole'), 'Cave 45': (0x180003, 0x18634b, False, 'alone in a cave'), @@ -1339,7 +1339,7 @@ location_table = {'Mushroom': (0x180013, 0x186338, False, 'in the woods'), 'Eastern Palace - Big Key Chest': (0xe9b9, 0x18618d, False, 'in Eastern Palace'), 'Eastern Palace - Map Chest': (0xe9f5, 0x1861c9, False, 'in Eastern Palace'), 'Eastern Palace - Boss': (0x180150, 0x18633e, False, 'with the Armos'), - 'Master Sword Pedestal': (0x289b0, 0x186369, False, 'at the pedestal'), + 'Master Sword Pedestal': (0x289b0, 0x186369, False, 'at the Pedestal'), 'Hyrule Castle - Boomerang Chest': (0xe974, 0x186148, False, 'in Hyrule Castle'), 'Hyrule Castle - Map Chest': (0xeb0c, 0x1862e0, False, 'in Hyrule Castle'), "Hyrule Castle - Zelda's Chest": (0xeb09, 0x1862dd, False, 'in Hyrule Castle'), @@ -1350,7 +1350,7 @@ location_table = {'Mushroom': (0x180013, 0x186338, False, 'in the woods'), 'Sanctuary': (0xea79, 0x18624d, False, 'in Sanctuary'), 'Castle Tower - Room 03': (0xeab5, 0x186289, False, 'in Castle Tower'), 'Castle Tower - Dark Maze': (0xeab2, 0x186286, False, 'in Castle Tower'), - 'Old Man': (0xf69fa, 0x186364, False, 'with the old man'), + 'Old Man': (0xf69fa, 0x186364, False, 'with the Old Man'), 'Spectacle Rock Cave': (0x180002, 0x18634a, False, 'alone in a cave'), 'Paradox Cave Lower - Far Left': (0xeb2a, 0x1862fe, False, 'in a cave with seven chests'), 'Paradox Cave Lower - Left': (0xeb2d, 0x186301, False, 'in a cave with seven chests'), @@ -1359,7 +1359,7 @@ location_table = {'Mushroom': (0x180013, 0x186338, False, 'in the woods'), 'Paradox Cave Lower - Middle': (0xeb36, 0x18630a, False, 'in a cave with seven chests'), 'Paradox Cave Upper - Left': (0xeb39, 0x18630d, False, 'in a cave with seven chests'), 'Paradox Cave Upper - Right': (0xeb3c, 0x186310, False, 'in a cave with seven chests'), - 'Spiral Cave': (0xe9bf, 0x186193, False, 'in spiral cave'), + 'Spiral Cave': (0xe9bf, 0x186193, False, 'in Spiral Cave'), 'Ether Tablet': (0x180016, 0x18633b, False, 'at a monolith'), 'Spectacle Rock': (0x180140, 0x18634f, False, 'atop a rock'), 'Tower of Hera - Basement Cage': (0x180162, 0x18633a, False, 'in Tower of Hera'), @@ -1368,9 +1368,9 @@ location_table = {'Mushroom': (0x180013, 0x186338, False, 'in the woods'), 'Tower of Hera - Compass Chest': (0xe9fb, 0x1861cf, False, 'in Tower of Hera'), 'Tower of Hera - Big Chest': (0xe9f8, 0x1861cc, False, 'in Tower of Hera'), 'Tower of Hera - Boss': (0x180152, 0x186340, False, 'with Moldorm'), - 'Pyramid': (0x180147, 0x186356, False, 'on the pyramid'), + 'Pyramid': (0x180147, 0x186356, False, 'on the Pyramid'), 'Catfish': (0xee185, 0x186361, False, 'with a catfish'), - 'Stumpy': (0x330c7, 0x18636a, False, 'with tree boy'), + 'Stumpy': (0x330c7, 0x18636a, False, 'with Tree Boy'), 'Digging Game': (0x180148, 0x186357, False, 'underground'), 'Bombos Tablet': (0x180017, 0x18633c, False, 'at a monolith'), 'Hype Cave - Top': (0xeb1e, 0x1862f2, False, 'near a bat-like man'), @@ -1406,13 +1406,13 @@ location_table = {'Mushroom': (0x180013, 0x186338, False, 'in the woods'), 'Swamp Palace - Flooded Room - Right': (0xeaac, 0x186280, False, 'in Swamp Palace'), 'Swamp Palace - Waterfall Room': (0xeaaf, 0x186283, False, 'in Swamp Palace'), 'Swamp Palace - Boss': (0x180154, 0x186342, False, 'with Arrghus'), - "Thieves' Town - Big Key Chest": (0xea04, 0x1861d8, False, "in Thieves' Town"), - "Thieves' Town - Map Chest": (0xea01, 0x1861d5, False, "in Thieves' Town"), - "Thieves' Town - Compass Chest": (0xea07, 0x1861db, False, "in Thieves' Town"), - "Thieves' Town - Ambush Chest": (0xea0a, 0x1861de, False, "in Thieves' Town"), - "Thieves' Town - Attic": (0xea0d, 0x1861e1, False, "in Thieves' Town"), - "Thieves' Town - Big Chest": (0xea10, 0x1861e4, False, "in Thieves' Town"), - "Thieves' Town - Blind's Cell": (0xea13, 0x1861e7, False, "in Thieves' Town"), + "Thieves' Town - Big Key Chest": (0xea04, 0x1861d8, False, "in Thieves Town"), + "Thieves' Town - Map Chest": (0xea01, 0x1861d5, False, "in Thieves Town"), + "Thieves' Town - Compass Chest": (0xea07, 0x1861db, False, "in Thieves Town"), + "Thieves' Town - Ambush Chest": (0xea0a, 0x1861de, False, "in Thieves Town"), + "Thieves' Town - Attic": (0xea0d, 0x1861e1, False, "in Thieves Town"), + "Thieves' Town - Big Chest": (0xea10, 0x1861e4, False, "in Thieves Town"), + "Thieves' Town - Blind's Cell": (0xea13, 0x1861e7, False, "in Thieves Town"), "Thieves' Town - Boss": (0x180156, 0x186344, False, 'with Blind'), 'Skull Woods - Compass Chest': (0xe992, 0x186166, False, 'in Skull Woods'), 'Skull Woods - Map Chest': (0xe99b, 0x18616f, False, 'in Skull Woods'), @@ -1515,7 +1515,7 @@ location_table = {'Mushroom': (0x180013, 0x186338, False, 'in the woods'), 'Tower of Hera - Prize': ([0x120A5, 0x53F0A, 0x53F0B, 0x18005A, 0x18007A, 0xC706], None, True, 'Tower of Hera'), 'Palace of Darkness - Prize': ([0x120A1, 0x53F00, 0x53F01, 0x180056, 0x18007D, 0xC702], None, True, 'Palace of Darkness'), 'Swamp Palace - Prize': ([0x120A0, 0x53F6C, 0x53F6D, 0x180055, 0x180071, 0xC701], None, True, 'Swamp Palace'), - 'Thieves\' Town - Prize': ([0x120A6, 0x53F36, 0x53F37, 0x18005B, 0x180077, 0xC707], None, True, 'Thieves\' Town'), + 'Thieves\' Town - Prize': ([0x120A6, 0x53F36, 0x53F37, 0x18005B, 0x180077, 0xC707], None, True, 'Thieves Town'), 'Skull Woods - Prize': ([0x120A3, 0x53F12, 0x53F13, 0x180058, 0x18007B, 0xC704], None, True, 'Skull Woods'), 'Ice Palace - Prize': ([0x120A4, 0x53F5A, 0x53F5B, 0x180059, 0x180073, 0xC705], None, True, 'Ice Palace'), 'Misery Mire - Prize': ([0x120A2, 0x53F48, 0x53F49, 0x180057, 0x180075, 0xC703], None, True, 'Misery Mire'), diff --git a/Rom.py b/Rom.py index 6e5a2dfb..3d910b80 100644 --- a/Rom.py +++ b/Rom.py @@ -33,7 +33,7 @@ from source.classes.SFX import randomize_sfx JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = '87b41e582793f55739afa43e811b2919' +RANDOMIZERBASEHASH = '57d36048e54cd5a281f1dbf66f2bc9c2' class JsonRom(object): @@ -2439,8 +2439,8 @@ def write_strings(rom, world, player, team): # inverted spawn menu changes if world.mode[player] == 'inverted': - tt['menu_start_2'] = "{MENU}\n{SPEED0}\n≥@'s house\n Dark Chapel\n{CHOICE3}" - tt['menu_start_3'] = "{MENU}\n{SPEED0}\n≥@'s house\n Dark Chapel\n Mountain Cave\n{CHOICE2}" + tt['menu_start_2'] = "{MENU}\n{SPEED0}\n≥@'s House\n Dark Chapel\n{CHOICE3}" + tt['menu_start_3'] = "{MENU}\n{SPEED0}\n≥@'s House\n Dark Chapel\n Mountain Cave\n{CHOICE2}" tt['intro_main'] = CompressedTextMapper.convert( "{INTRO}\n Episode III\n{PAUSE3}\n A Link to\n the Past\n" + "{PAUSE3}\nInverted\n Randomizer\n{PAUSE3}\nAfter mostly disregarding what happened in the first two games.\n" diff --git a/Text.py b/Text.py index c84a202c..76d94586 100644 --- a/Text.py +++ b/Text.py @@ -628,7 +628,7 @@ class MultiByteCoreTextMapper(object): @classmethod def convert(cls, text, pause=True, wrap=14): - text = text.upper() + #text = text.upper() lines = text.split('\n') outbuf = bytearray() lineindex = 0 @@ -772,20 +772,24 @@ class CompressedTextMapper(object): class CharTextMapper(object): number_offset = None alpha_offset = 0 + alpha_lower_offset = 0 char_map = {} @classmethod def map_char(cls, char): if cls.number_offset is not None: if 0x30 <= ord(char) <= 0x39: return ord(char) + cls.number_offset + if 0x41 <= ord(char) <= 0x5A: + return ord(char) + 0x20 + cls.alpha_offset if 0x61 <= ord(char) <= 0x7A: - return ord(char) + cls.alpha_offset + return ord(char) + cls.alpha_lower_offset return cls.char_map.get(char, cls.char_map[' ']) @classmethod def convert(cls, text): buf = bytearray() - for char in text.lower(): + #for char in text.lower(): + for char in text: buf.append(cls.map_char(char)) return buf @@ -1240,6 +1244,7 @@ class RawMBTextMapper(CharTextMapper): "月": 0xFE, "姫": 0xFF} alpha_offset = 0x49 + alpha_lower_offset = -0x31 number_offset = 0x70 @classmethod @@ -1251,7 +1256,8 @@ class RawMBTextMapper(CharTextMapper): @classmethod def convert(cls, text): buf = bytearray() - for char in text.lower(): + #for char in text.lower(): + for char in text: res = cls.map_char(char) if isinstance(res, int): buf.extend([0x00, res]) @@ -1267,16 +1273,19 @@ class GoldCreditMapper(CharTextMapper): '-': 0x36, '.': 0x37,} alpha_offset = -0x47 + alpha_lower_offset = -0x47 class GreenCreditMapper(CharTextMapper): char_map = {' ': 0x9F, '·': 0x52} alpha_offset = -0x29 + alpha_lower_offset = -0x29 class RedCreditMapper(CharTextMapper): char_map = {' ': 0x9F} alpha_offset = -0x61 + alpha_lower_offset = -0x61 class LargeCreditTopMapper(CharTextMapper): char_map = {' ': 0x9F, @@ -1296,6 +1305,7 @@ class LargeCreditTopMapper(CharTextMapper): '◢': 0xAA, '◣': 0xAB,} alpha_offset = -0x04 + alpha_lower_offset = -0x04 number_offset = 0x23 @@ -1317,6 +1327,7 @@ class LargeCreditBottomMapper(CharTextMapper): '◢': 0xCA, '◣': 0xCB,} alpha_offset = 0x22 + alpha_lower_offset = 0x22 number_offset = 0x49 class TextTable(object): @@ -1903,7 +1914,7 @@ class TextTable(object): text['pond_of_wishing_good_luck'] = CompressedTextMapper.convert("\n is good luck") text['pond_of_wishing_meh_luck'] = CompressedTextMapper.convert("\n is meh luck") # Repurposed to no items in Randomizer - text['pond_of_wishing_bad_luck'] = CompressedTextMapper.convert("Why you come in here and pretend like you have something this fountain wants? Come back with bottles!") + text['pond_of_wishing_bad_luck'] = CompressedTextMapper.convert("Why come in here and pretend like you have something this fountain wants? Come back with bottles!") text['pond_of_wishing_fortune'] = CompressedTextMapper.convert("by the way, your fortune,") text['item_get_14_heart'] = CompressedTextMapper.convert("3 more to go\n ¼\nYay!") text['item_get_24_heart'] = CompressedTextMapper.convert("2 more to go\n ½\nWhee!") @@ -1955,16 +1966,16 @@ class TextTable(object): text['game_chest_lost_woods'] = CompressedTextMapper.convert("Pay 100 rupees open 1 chest. Are you lucky?\nSo, Play game?\n ≥ play\n never!\n{CHOICE}") text['kakariko_flophouse_man_no_flippers'] = CompressedTextMapper.convert("I really hate mowing my yard.\nI moved my house and everyone else's to avoid it.\n{PAGEBREAK}\nI hope you don't mind.") text['kakariko_flophouse_man'] = CompressedTextMapper.convert("I really hate mowing my yard.\nI moved my house and everyone else's to avoid it.\n{PAGEBREAK}\nI hope you don't mind.") - text['menu_start_2'] = CompressedTextMapper.convert("{MENU}\n{SPEED0}\n≥@'s house\n Sanctuary\n{CHOICE3}", False) - text['menu_start_3'] = CompressedTextMapper.convert("{MENU}\n{SPEED0}\n≥@'s house\n Sanctuary\n Mountain Cave\n{CHOICE2}", False) - text['menu_pause'] = CompressedTextMapper.convert("{SPEED0}\n≥continue\n save and quit\n{CHOICE3}", False) + text['menu_start_2'] = CompressedTextMapper.convert("{MENU}\n{SPEED0}\n≥@'s House\n Sanctuary\n{CHOICE3}", False) + text['menu_start_3'] = CompressedTextMapper.convert("{MENU}\n{SPEED0}\n≥@'s House\n Sanctuary\n Mountain Cave\n{CHOICE2}", False) + text['menu_pause'] = CompressedTextMapper.convert("{SPEED0}\n≥Continue\n Save and Quit\n{CHOICE3}", False) text['game_digging_choice'] = CompressedTextMapper.convert("Have 80 Rupees? Want to play digging game?\n ≥yes\n no\n{CHOICE}") text['game_digging_start'] = CompressedTextMapper.convert("Okay, use the shovel with Y!") text['game_digging_no_cash'] = CompressedTextMapper.convert("Shovel rental is 80 rupees.\nI have all day") text['game_digging_end_time'] = CompressedTextMapper.convert("Time's up!\nTime for you to go.") text['game_digging_come_back_later'] = CompressedTextMapper.convert("Come back later, I have to bury things.") text['game_digging_no_follower'] = CompressedTextMapper.convert("Something is following you. I don't like.") - text['menu_start_4'] = CompressedTextMapper.convert("{MENU}\n{SPEED0}\n≥@'s house\n Mountain Cave\n{CHOICE3}", False) + text['menu_start_4'] = CompressedTextMapper.convert("{MENU}\n{SPEED0}\n≥@'s House\n Mountain Cave\n{CHOICE3}", False) # Start of new text data text['ganon_fall_in_alt'] = CompressedTextMapper.convert("You think you\nare ready to\nface me?\n\nI will not die\n\nunless you\ncomplete your\ngoals. Dingus!") text['ganon_phase_3_alt'] = CompressedTextMapper.convert("Got wax in\nyour ears?\nI cannot die!") diff --git a/data/base2current.bps b/data/base2current.bps index c8e8cbb4c4d9264203601dd8adf818b9abb45977..82223df24a7456e2e40e35b6862203f12b23f6a3 100644 GIT binary patch delta 418 zcmWlT%}WAN6vgk9LbR%&pls73XgN84G2@KP_`ztjh@xc#ErNDox}En7Bn27lEd~(@ zDRCiz6QoH=K?^tj0qv?y3GUlYcUJG*-#PEx+Zuas$KGy|^Q<2HbS~3eKh1Ibx}iV< z90&ssNeG|{f=gr&au7%Cq9~d%d=&^9hL37y5^1{Z1#eE&Jvf@ZmI4B3F72_YnV}^e9OfZZ zwMOkAeV?JF6!6wG!)o5S_sd@>-(V{?ssi& LvUfMlt>h>F9N>+c delta 420 zcmWlTKTE?<6vc1+hd2o$h`KoFCUj5=3c4s*MO2*a<_9QRoh0uySWwX*j}l4;5s^S_ z(xfzhBuQH;(xo53O&p|?pP`;i@4nwX=iKws8-4AK+S}4duKzHjWF$W$Nyj^KKusEu zLk6|T!c?P#_+;iO22PNNS7^w5nd%Lff0H)D;rGpJ_9s}66Qe~CFjI6Q->5DYF&Mm ze+==PHW^xfS6W>1yXzb$JJ1xhE9E71J`DFE@u%g};?&L1A4v{(QD From b13712aabf3912c0cba13dd89616e74872da8b44 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Sun, 6 Feb 2022 15:39:07 -0600 Subject: [PATCH 05/13] Enabled new font + lowercase hint text updates --- Text.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Text.py b/Text.py index 76d94586..e63926f3 100644 --- a/Text.py +++ b/Text.py @@ -627,7 +627,7 @@ class MultiByteCoreTextMapper(object): } @classmethod - def convert(cls, text, pause=True, wrap=14): + def convert(cls, text, pause=True, wrap=19): #text = text.upper() lines = text.split('\n') outbuf = bytearray() @@ -736,7 +736,7 @@ class CompressedTextMapper(object): } @classmethod - def convert(cls, text, pause=True, max_bytes_expanded=0x800, wrap=14): + def convert(cls, text, pause=True, max_bytes_expanded=0x800, wrap=19): inbuf = MultiByteCoreTextMapper.convert(text, pause, wrap) # Links name will need 8 bytes in the target buffer From 05a7a99115b436ad308ad9fe631910af050693ff Mon Sep 17 00:00:00 2001 From: codemann8 Date: Sun, 6 Feb 2022 21:43:50 -0600 Subject: [PATCH 06/13] Enabled new font + lowercase hint text updates --- Text.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Text.py b/Text.py index e63926f3..5257dc40 100644 --- a/Text.py +++ b/Text.py @@ -655,7 +655,7 @@ class MultiByteCoreTextMapper(object): pending_space = False while words: word = words.pop(0) - # sanity check: if the word we have is more than 14 characters, we take as much as we can still fit and push the rest back for later + # sanity check: if the word we have is more than 19 characters, we take as much as we can still fit and push the rest back for later if cls.wordlen(word) > wrap: (word_first, word_rest) = cls.splitword(word, linespace) words.insert(0, word_rest) From 85bdc93a5a14510ad45d3403304e39ea3e6b3657 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Mon, 7 Feb 2022 15:32:40 -0600 Subject: [PATCH 07/13] Fixed issue with OWR Layout+Shopsanity --- OverworldShuffle.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OverworldShuffle.py b/OverworldShuffle.py index e535366f..a995e09f 100644 --- a/OverworldShuffle.py +++ b/OverworldShuffle.py @@ -1110,7 +1110,7 @@ def validate_layout(world, player): if entrance.name not in drop_entrances \ and ((entrance.name in dungeon_entrances and world.shuffle[player] not in ['dungeonssimple', 'simple', 'restricted']) \ or (entrance.name in connector_entrances and world.shuffle[player] not in ['dungeonssimple', 'dungeonsfull', 'simple']) \ - or (entrance.name in item_entrances + ([] if world.shopsanity[player] else shop_entrances) and world.shuffle[player] not in ['dungeonssimple', 'dungeonsfull', 'lite', 'lean'])): + or (entrance.name in item_entrances + (tuple() if world.shopsanity[player] else shop_entrances) and world.shuffle[player] not in ['dungeonssimple', 'dungeonsfull', 'lite', 'lean'])): unreachable_regions.pop(region_name) explore_region(region_name) break From f07ea8126c911bf5d95021bdf2344011b90b6265 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Mon, 7 Feb 2022 15:32:58 -0600 Subject: [PATCH 08/13] Fixed issue with OWR Layout + Insanity ER --- OverworldShuffle.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/OverworldShuffle.py b/OverworldShuffle.py index a995e09f..03eb7375 100644 --- a/OverworldShuffle.py +++ b/OverworldShuffle.py @@ -1083,7 +1083,8 @@ def validate_layout(world, player): flat_sectors = [[r for l in s for r in l] for s in world.owsectors[player]] for sector in flat_sectors: for region_name in sector: - if region_name not in explored_regions and region_name not in isolated_regions: + if region_name not in explored_regions and region_name not in isolated_regions \ + and not (region_name == 'Pyramid Exit Ledge' and world.shuffle[player] == 'insanity'): region = base_world.get_region(region_name, player) unreachable_regions[region_name] = region From b04968beeecc74bf58b8fbe292ccae39ceb2dc20 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Mon, 7 Feb 2022 15:37:12 -0600 Subject: [PATCH 09/13] Fixed issue with OWR Layout + Insanity ER --- OverworldShuffle.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/OverworldShuffle.py b/OverworldShuffle.py index 03eb7375..bef894a3 100644 --- a/OverworldShuffle.py +++ b/OverworldShuffle.py @@ -1083,8 +1083,7 @@ def validate_layout(world, player): flat_sectors = [[r for l in s for r in l] for s in world.owsectors[player]] for sector in flat_sectors: for region_name in sector: - if region_name not in explored_regions and region_name not in isolated_regions \ - and not (region_name == 'Pyramid Exit Ledge' and world.shuffle[player] == 'insanity'): + if region_name not in explored_regions and region_name not in isolated_regions: region = base_world.get_region(region_name, player) unreachable_regions[region_name] = region @@ -1895,7 +1894,8 @@ isolated_regions = [ 'Dark Death Mountain Floating Island', 'Dark Death Mountain Ledge', 'Dark Death Mountain Isolated Ledge', - 'Bumper Cave Ledge' + 'Bumper Cave Ledge', + 'Pyramid Exit Ledge' ] flute_data = { From c375c120e94d742488e4abd59e426c75e4931310 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Mon, 7 Feb 2022 18:00:31 -0600 Subject: [PATCH 10/13] Fixed issue with TR Peg Puzzle Portal not working --- Rom.py | 2 +- data/base2current.bps | Bin 91683 -> 91666 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Rom.py b/Rom.py index 3d910b80..f999192e 100644 --- a/Rom.py +++ b/Rom.py @@ -33,7 +33,7 @@ from source.classes.SFX import randomize_sfx JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = '57d36048e54cd5a281f1dbf66f2bc9c2' +RANDOMIZERBASEHASH = 'b373b217fbbb529636f3bf507b8879b3' class JsonRom(object): diff --git a/data/base2current.bps b/data/base2current.bps index 82223df24a7456e2e40e35b6862203f12b23f6a3..9ccd929c92479775ba957f72f3156f5f538d97e7 100644 GIT binary patch delta 2953 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 From 46cf11e8a37869089e52a00cdccd51cdae04d88e Mon Sep 17 00:00:00 2001 From: codemann8 Date: Mon, 7 Feb 2022 19:21:04 -0600 Subject: [PATCH 11/13] Fixed issue with TR Peg Puzzle Portal not working --- Rom.py | 2 +- data/base2current.bps | Bin 91666 -> 91653 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Rom.py b/Rom.py index f999192e..a714cb16 100644 --- a/Rom.py +++ b/Rom.py @@ -33,7 +33,7 @@ from source.classes.SFX import randomize_sfx JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = 'b373b217fbbb529636f3bf507b8879b3' +RANDOMIZERBASEHASH = 'b46e08bfb572876dd51dc3108e7b9292' class JsonRom(object): diff --git a/data/base2current.bps b/data/base2current.bps index 9ccd929c92479775ba957f72f3156f5f538d97e7..b1c892c64de471dd24da8364acc172f3914a3e78 100644 GIT binary patch delta 2831 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 ciwQ Date: Thu, 10 Feb 2022 21:05:42 -0600 Subject: [PATCH 12/13] Capitalizing first letter of hint tiles --- Rom.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Rom.py b/Rom.py index a714cb16..a9e807cd 100644 --- a/Rom.py +++ b/Rom.py @@ -2304,6 +2304,7 @@ def write_strings(rom, world, player, team): this_location = world.find_items_not_key_only(flute_item, player) if this_location: this_hint = this_location[0].item.hint_text + ' can be found ' + hint_text(this_location[0]) + '.' + this_hint = this_hint.capitalize() tt[hint_locations.pop(0)] = this_hint items_to_hint.remove(flute_item) if world.keyshuffle[player]: @@ -2320,6 +2321,7 @@ def write_strings(rom, world, player, team): random.shuffle(this_location) if this_location: this_hint = this_location[0].item.hint_text + ' can be found ' + hint_text(this_location[0]) + '.' + this_hint = this_hint.capitalize() tt[hint_locations.pop(0)] = this_hint hint_count -= 1 From 4bbf0f6d4fc6d3db59703210b7019a1b1b61e5db Mon Sep 17 00:00:00 2001 From: codemann8 Date: Thu, 10 Feb 2022 21:22:53 -0600 Subject: [PATCH 13/13] Version bump 0.2.6.0 --- CHANGELOG.md | 8 ++++++++ OverworldShuffle.py | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2ef9d2a1..0d41ef2a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +### 0.2.6.0 +- New text engine font! +- Fixed invisible Witch item bug +- Added 'O' to ROM Header for autotrackers +- Fixed generation error with Shopsanity + OWR Layout +- Fixed OWR validation error with Insanity ER + OWR Layout +- Fixed issue with TR Peg Puzzle not spawning a valid portal + ### 0.2.5.3 - Changed AT/GT Swap to favor vanilla, only swapping if GT entrance is the only choice in starting world - Fixed issue with Links House not swapping in OW Mixed diff --git a/OverworldShuffle.py b/OverworldShuffle.py index bef894a3..ed5e914b 100644 --- a/OverworldShuffle.py +++ b/OverworldShuffle.py @@ -5,7 +5,7 @@ from BaseClasses import OWEdge, WorldType, RegionType, Direction, Terrain, PolSl from Regions import mark_dark_world_regions, mark_light_world_regions from OWEdges import OWTileRegions, OWTileGroups, OWEdgeGroups, OWExitTypes, OpenStd, parallel_links, IsParallel -__version__ = '0.2.5.3-u' +__version__ = '0.2.6.0-u' def link_overworld(world, player): # setup mandatory connections