Problem mit dem No Overworld Patch

geschrieben am 09.10.2012 11:41:33
( Link )
So. Ich melde mich aus den Untiefen der Inaktivität auch mal wieder zurück mit einem Problem (Als ob ihr nicht schon genug mit den Problemen anderer Hacker zu tun hättet, haha )

Vorraussetzungen:
Addmusic 405
MLP.smc (das ist die ROM)
Xkas GUI.exe
Lunar Magic... welche war's noch mal? 1.9? Ist auch glaube ich nicht weiter wichtig. Hoffentlich. Ich kann auch nochmal nachschauen, falls es wichtig sein sollte.
> Will den No Overworld (Noow.asm) Patch installieren.

Patches auf der Rom:
1 Player, 1 File
32x32 character Tilemap Kit
Numeric Health Bar
More.asm (duh)

Weiterhin wird die Intro Cutscene (Level C5) übersprungen (per Hex Edit)

Der Noow.asm Patch macht, dass *Captain Obvious* im Hack jegliche Overworld umgangen wird.

Hier ist der dazugehörige ASM-Code:

Code
header
lorom

!FinalLevel = $010D;Set this to the level that triggers the credits scene. This level will repeat forever. Defaults to Front Door.
;To disable (if you, for example, want to leave some extra content after beating the final boss), set it to 0000.

!Freeram = $1F12;how unusual, it needs freeram but not freerom. this one is, by default, luigi's current submap.
;this patch isn't compatible with two player games, nor are submaps used anymore, so this is freeram and can be used as such.

!FinalLevel13BF = !FinalLevel/$100*$24+!FinalLevel&$FF;this might look ugly, but it works

;sram map (unlike the original SMW, the three files are interlaced):
;$700000: "file exists" flag - 69 is true, anything else is false
;$700003: level number, copied to $13BF
;$700006: levels beaten, shown on intro screen. it is safe to create multiple paths with custom blocks to store to $13BF
;$700009, $70000C, $70000F, $700012: switch palace flags

org $009BC9;save game routine - never used though
db $00
Mymainc:
macro check()
LDA $13BF
CMP.b #!FinalLevel13BF
BEQ .Return
endmacro
rep !FinalLevel13BF-1 : %check()

INC !Freeram
PHX
LDX $010A
INC $13BF
LDA $13BF
STA $700003,x
LDA $700006,x
INC A
STA $700006,x

macro svswitch(id)
LDA.w $1F27+
STA.l *3+$700009,x
endmacro
%svswitch(0)
%svswitch(1)
%svswitch(2)
%svswitch(3)
PLX
.Return
RTL
warnpc $009C13

org $009DB5;check if file is clear routine. Z=0 = file=OK. also loads X with the pointer to the data, input value of X is the file ID.
LDA $700000,x
CMP #$69
RTS

Mymain3:
LDX #$08
LDA $13BF
DEC A
RTL

Mymain:
STA $0DD5
JSL Mymainc
LDA $13C6
JML $00CA04

Mymain4:
LDY #$0B
LDA $0DBE
BPL +
LDY #$02
+
JML $009C8B

FixMusic:
LDA #$3F
STA $0DDA
STZ $2143
PLP
JML $0080E7

warnpc $009DFA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

org $009D66
LDA $700006,x;levels beaten

org $05D9C6
BRA $01
org $05D9D4;fix midways
LDA $13CE
BRA $03

org $009CF7;load game routine
STZ $0109
LDA $700003,x
STA $13BF

macro ldswitch(id)
LDA.l *3+$700009,x
STA.w $1FCE+;I'd use $1F27, but for some reason that's overwritten, so I'll send it to the place where it's saved to.
endmacro
%ldswitch(0)
%ldswitch(1)
%ldswitch(2)
%ldswitch(3)
JMP.w $009D22

warnpc $009D22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

org $00A099
BEQ $00;make the OW never appear, load the level directly

org $00C9FE
JML Mymain;level beaten (both goal tape and keyhole)

org $00CA06
JSL Mymain3
NOP

org $0CCFF1
JSL Mymain2;castle destruction sequence
RTS

org $05B150;switch palace
STZ $13D2
JML Mymain2

org $009B48
TYX
LDA #$00
STA $700000,x;erase file routine
JMP.w $009B67

org $009E65;go to title screen, not overworld, on game over
JML Mymain4

org $0080E3;This fixes a bug where the music stops when Mario dies (and probably other conditions too).
JML FixMusic;The game thinks the music is still playing since the currently playing music address ($0DDA) is equal to what it should be,
;but it recently uploaded the level music bank so nothing is playing. This resets that address and forces it to replay the music.

org $05D83E
LoadLevel:
LDA !Freeram
BEQ +
STZ !Freeram
STZ $13CE;this fixes some various stuff, like midways carrying over between levels
STZ $13C6;and Mario stopping moving during the victory marsh after a boss
STZ $13D2
+
STZ $0F
LDX $0100
CPX #$03
BNE .NotIntro
LDA $0109
JMP.w LoadEnd3
.NotIntro
LDX $010A
LDA $0109
BNE .Init
LDA $13BF
BNE +
INC A
STA $13BF
+
JMP.w LoadEnd

.Init
LDA #$69
STA $700000,x
LDA #$01
STA $700003,x
STZ $13BF
DEC A
STA $700006,x
LDA $0109
JMP.w LoadEnd3

;using this as freespace again
Mymain2:
LDA #$0B
STA $0100
JML Mymainc

warnpc $05D89F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
org $05D89F
LoadEnd:
CMP #$25
BCC LoadEnd2
INC $0F
LoadEnd3:
SEC
SBC #$24
BRA $00
LoadEnd2:
STA $0E


org $05D8AE
BRA $07;nuke something with checking the current submap. useless


Fänd' ich schon ganz super, nur gibt es folgendes Problem:
Wenn ich das nun patche, passiert vor allem eins; wenn ich sterbe, gibt's nen Blackscreen und die Rom friert ein.

Was ist zu tun? Selbst, wenn mir keiner "helfen" kann, hätte ich trotzdem gerne eine Erklärung... Vielen Dank an alle möglichen zukünftigen Helfer!

[Tim]
I'm a Brony and I'm proud!



Hier gibt's nette 8bit Remixes, Klavierzeugs und Acapella: <!-- m --><a class="postlink" href="http://www.youtube.com/user/timmifutzelchen">http://www.youtube.com/user/timmifutzelchen</a><!-- m -->
geschrieben am 09.10.2012 21:11:35
( Link )
Ich nehme mal an, das hat mit dem Health-Bar-Patch zu tun. Wende mal alle anderen Patches bis auf den an, und wenn der NoOW-Patch dann funktioniert, weißt du, dass es an den beiden liegt.

Helfen kann ich dir allerdings nicht bei der Lösung. Zeitmangel, nicht wahr.
geschrieben am 10.10.2012 16:18:13
( Link )
Okay, ich probier's mal beizeiten.

In jedem Fall, danke für die Hilfe

[Tim]
I'm a Brony and I'm proud!



Hier gibt's nette 8bit Remixes, Klavierzeugs und Acapella: <!-- m --><a class="postlink" href="http://www.youtube.com/user/timmifutzelchen">http://www.youtube.com/user/timmifutzelchen</a><!-- m -->