diff --git a/BaseClasses.py b/BaseClasses.py index 7b07ded2..8a3da107 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -3309,8 +3309,8 @@ e_dmg = {"default": 0, "shuffled": 1, "random": 2} # byte 8: RRAA A??? (restrict boss mode, algorithm, ? = unused) rb_mode = {"none": 0, "mapcompass": 1, "dungeon": 2} -# algorithm: todo with "biased shuffles" -algo_mode = {"balanced": 0, "equitable": 1, "vanilla_fill": 2, "dungeon_only": 3, "district": 4} +# algorithm: +algo_mode = {"balanced": 0, "equitable": 1, "vanilla_fill": 2, "dungeon_only": 3, "district": 4, 'major_only': 5} # additions # psuedoboots does not effect code diff --git a/CHANGELOG.md b/CHANGELOG.md index 78de0226..4acbd0e7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +### 0.2.7.1 +- Map checks in Mixed OWR now will show the proper tile images when screens are swapped (ie. Pyramid shows in the LW if that screen is swapped) +- Added mystery seed number to spoiler log, so it is easier to match a spoiler log to a rom filename +- Added proper branch-specific versioning (ie. Dev branch has '-u' suffixing the version number while Release/Main branch does not) + ### 0.2.7.0 - ~~Merged DR v1.0.0.3 - MANY changes, major things listed below~~ - New Item Fills (Districts/Vanilla/Major Location/Dungeon) diff --git a/EntranceShuffle.py b/EntranceShuffle.py index 900d0764..ed6653b4 100644 --- a/EntranceShuffle.py +++ b/EntranceShuffle.py @@ -4,6 +4,7 @@ import RaceRandom as random from BaseClasses import CollectionState, RegionType from OverworldShuffle import build_accessible_region_list from OWEdges import OWTileRegions +from Utils import stack_size3a entrance_pool = list() exit_pool = list() @@ -1481,6 +1482,10 @@ def junk_fill_inaccessible(world, player): def connect_inaccessible_regions(world, lw_entrances, dw_entrances, caves, player, ignore_list=[]): invFlag = world.mode[player] == 'inverted' + if stack_size3a() > 500: + from DungeonGenerator import GenerationException + raise GenerationException(f'Infinite loop detected at \'connect_inaccessible_regions\'') + random.shuffle(lw_entrances) random.shuffle(dw_entrances) diff --git a/Main.py b/Main.py index 5064acc2..0489b8bd 100644 --- a/Main.py +++ b/Main.py @@ -119,7 +119,7 @@ def main(args, seed=None, fish=None): logger.info( world.fish.translate("cli","cli","app.title") + "\n", ORVersion, - world.seed, + "%s (%s)" % (world.seed, str(args.outputname)) if str(args.outputname).startswith('M') else world.seed, Settings.make_code(world, 1) if world.players == 1 else '' ) diff --git a/OverworldShuffle.py b/OverworldShuffle.py index 410ee7f8..bd855436 100644 --- a/OverworldShuffle.py +++ b/OverworldShuffle.py @@ -5,7 +5,9 @@ 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.7.0-u' +version_number = '0.2.7.1' +version_branch = '-u' +__version__ = '%s%s' % (version_number, version_branch) def link_overworld(world, player): # setup mandatory connections diff --git a/Rom.py b/Rom.py index 7c4b6041..d2bd5930 100644 --- a/Rom.py +++ b/Rom.py @@ -33,7 +33,7 @@ from source.classes.SFX import randomize_sfx JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = '786c28c4735da56f0dbca879d02b22f6' +RANDOMIZERBASEHASH = '4a1dfc4fa793b8659a95d579f6a5a925' class JsonRom(object): diff --git a/asm/owrando.asm b/asm/owrando.asm index c1415483..717890bd 100644 --- a/asm/owrando.asm +++ b/asm/owrando.asm @@ -56,6 +56,20 @@ jsl.l OWLightWorldOrCrossed org $0aba6c ; < ? - Bank0a.asm:474 () jsl.l OWMapWorldCheck16 : nop +; Mixed Overworld Map +org $0ABA99 +WorldMap_LoadDarkWorldMap: +LDA.b $10 : CMP.b #$14 ; attract module +BEQ .vanilla_light + LDA.l OWMode+1 : AND.b #$04 : BNE .mixed + LDA.b $8A : AND.b #$40 + BEQ .vanilla_light + .mixed + PHB : PHK : PLB + JSL LoadMapDarkOrMixed + PLB +.vanilla_light ; $0ABAB5 + ;(replacing -> LDA $8A : AND.b #$40) org $00d8c4 ; < ? - Bank00.asm:4068 () jsl.l OWWorldCheck @@ -81,8 +95,6 @@ org $07aa34 ; < ? - Bank07.asm:6718 () jsl.l OWWorldCheck org $08d408 ; < ? - ancilla_morph_poof.asm:48 () jsl.l OWWorldCheck -org $0aba99 ; < ? - Bank0a.asm:515 () -jsl.l OWWorldCheck org $0bfeab ; < ? - Bank0b.asm:36 () jsl.l OWWorldCheck16 : nop org $0cffb6 ; < ? - ?.asm ? () @@ -241,6 +253,60 @@ OWOldManSpeed: rtl } +LoadMapDarkOrMixed: +{ + CMP.b #$04 : REP #$30 : BEQ .mixed + LDX.w #$03FE ; draw vanilla Dark World (what we wrote over) + .copy_next + LDA.w $D739,X : STA.w $1000,X ; DB is $0A + DEX : DEX : BPL .copy_next + BRL .end + .mixed + LDX.b $8A + LDA.l OWTileWorldAssoc,X + STA.b $00 + LDY.w #$139C + LDX.w #$003F + .next_screen + PHX + LDA.l OWTileWorldAssoc,X + EOR.b $00 + AND.w #$0040 + BEQ .light + TYX : BRA .copy_screen + .light + TXA : AND.w #$0024 : LSR : TAX + TYA : SEC : SBC.l LWQuadrantOffsets,X + TYX : TAY + .copy_screen ; more efficient to have X on the right side + LDA.w $C739+$00,Y : STA.b $00,X + LDA.w $C739+$02,Y : STA.b $02,X + LDA.w $C739+$20,Y : STA.b $20,X + LDA.w $C739+$22,Y : STA.b $22,X + LDA.w $C739+$40,Y : STA.b $40,X + LDA.w $C739+$42,Y : STA.b $42,X + LDA.w $C739+$60,Y : STA.b $60,X + LDA.w $C739+$62,Y : STA.b $62,X + TXY : PLX + DEY : DEY : DEY : DEY ; move one screen left + TXA : AND.w #$0007 : BNE .same_row + TYA : SEC : SBC.w #$0060 : TAY ; move one screen row up + .same_row + DEX + BPL .next_screen + .end + SEP #$30 + LDA.b #$15 : STA.b $17 ; what we wrote over + RTL + + LWQuadrantOffsets: + dw $1000-$0210 ; top left + dw $0C00-$01F0 ; top right + dw 0,0,0,0,0,0 + dw $0800+$01F0 ; bottom left + dw $0400+$0210 ; bottom +} + org $aa9000 OWEdgeTransition: { diff --git a/data/base2current.bps b/data/base2current.bps index 533f39c2..277b30a0 100644 Binary files a/data/base2current.bps and b/data/base2current.bps differ