Overworld lost woods
Zeldix :: Zelda III Hacking :: Patches :: ASM
Page 1 of 1
20131011

Overworld lost woods
This assembly is a guide only - you need to cater it for your own hack in terms of the movement combinations/exit areas. The meat of the code is all the increment/decrement of ram addresses in the different cases where the same area needs to be loaded.
PW uses a similar but little bit more inefficient version of this - so don't be surprised if the code doesn't match PW exactly.
Edit by Conn:
This code should be easier to use and implement:
PW uses a similar but little bit more inefficient version of this - so don't be surprised if the code doesn't match PW exactly.
- Code:
.zram counter ; stores the combination # the player is up to.
.equ/= areaup=area-7
.equ/= areadown=area+7
.equ/= arealeft=area-1
.equ/= arearight=area+1
.equ/= areaout=arealeft ; which area can you exit?
.code
begin:
; Note at this stage the accumulator contains junk, and X contains the area you're moving to.
AND #$3F ; NOTE: comment this line out for specified area only
; this will make it affect dark and light world.
CMP area ; are we in the right area?
BEQ begincode
normalfinish:
LDA $02A5EC,x ; not right area so return.
STZ counter
RTL
begincode:
CPX areaout
BEQ normalfinish
; from here onwards, use the ram address to determine which combo you're up to
; this code is pretty repeatable
LDA counter
CMP #00
BNE combo1
CPX areadown ; did you get it right?
BEQ case down correct
BRA case down incorrect
combo1:
CMP #01
BNE combo2
CPX areaup ; did you get it right?
BEQ case up correct
BRA case up incorrect
combo2:
CMP #02
BNE combo3
CPX arearight ; did you get it right?
BEQ case right correct
BRA case right incorrect
combo3:
CPX areadown; did you get it right?
BEQ normalfinish ; we want to load the down area, since we complete the combos
BRA case down incorrect
case right incorrect:
STZ counter
BRA case right
case right correct:
INC counter
case right:
DEC $23
DEC $23
DEC $E1
DEC $E1
DEC $E3
DEC $E3
DEC $615
DEC $615
DEC $617
DEC $617
DEC $700
DEC $700
BRA all
case down incorrect:
STZ counter
BRA case down
case down correct:
INC counter
case down:
DEC $21
DEC $21
DEC $E7
DEC $E7
DEC $E9
DEC $E9
DEC $611
DEC $611
DEC $613
DEC $613
LDA $700
SEC
SBC #$10
STA $700
BRA all
case up incorrect:
STZ counter
BRA case up
case up correct:
INC counter
case up:
INC $21
INC $21
INC $E7
INC $E7
INC $E9
INC $E9
INC $611
INC $611
INC $613
INC $613
LDA $700
CLC
ADC #$10
STA $700
BRA all
case left incorrect:
STZ counter
BRA case left
case left correct:
INC counter
case left:
INC $23
INC $23
INC $E1
INC $E1
INC $E3
INC $E3
INC $615
INC $615
INC $617
INC $617
INC $700
INC $700
all:
LDA area ; load the same area.
RTL
.end
.ORG $02AA7D
JSL.l begin
.end
Edit by Conn:
This code should be easier to use and implement:
- Code:
;Lost Woods ASM, adapted from Euclid
;$1CF4 counter
; This example is for screen #$3f with exit screen left
; Correct Combo up, down, right, up
lorom
;----------------EDIT YOUR AREA
!area = #$3F ;change this to your area
;----------------------------------
!left = !area-#$01;
!right = !area+#$01;
!up = !area-#$08;
!down = !area+#$08;
;----------------EDIT YOUR EXIT SCREEN and number of correct screens in your combination to pass
!leave = !left ;exit screen
!screens = #$06 ; amount of combinations,
;eg.: !up,!down,!right,!up=04
;eg.: !up,!down,!right,!up,!right,!up=06
;-------------------------------------
org $82AA7D; hook to asm
JSL LWcode
org $A48000; some free space
;-------------EDIT YOUR COMBINATION
db !up,!down,!right,!up,!right,!up ;your combination here
;----------------------------------
LWcode:
CMP.b !area ;check area
BEQ lostWoods
end:
LDA $82A5EC,x ; not right area so return.
STZ $1CF4
RTL
lostWoods:
CPX.b !leave ; want to leave by going left?
BEQ end
TXA
LDX $1CF4
CMP $A48000,x
BNE $06
INX
STX $1CF4
BRA $03
STZ $1CF4
CPX.b !screens ; number of correct screens to pass
BNE $03
JMP success
cmp.b !left ; left correct (area-1)
BNE $03
JMP left
cmp.b !right ; right correct (area+1)
BNE $03
JMP right
cmp.b !down ; down correct (area+8)
BNE $03
JMP down
cmp.b !up ; up correct (area-8)
BNE $03
JMP up
BRA end ;security
left:
INC $23
INC $23
INC $E1
INC $E1
INC $E3
INC $E3
INC $615
INC $615
INC $617
INC $617
INC $700
INC $700
jmp all
right:
DEC $23
DEC $23
DEC $E1
DEC $E1
DEC $E3
DEC $E3
DEC $615
DEC $615
DEC $617
DEC $617
DEC $700
DEC $700
jmp all
down:
DEC $21
DEC $21
DEC $E7
DEC $E7
DEC $E9
DEC $E9
DEC $611
DEC $611
DEC $613
DEC $613
LDA $700
SEC
SBC #$10
STA $700
jmp all
up:
INC $21
INC $21
INC $E7
INC $E7
INC $E9
INC $E9
INC $611
INC $611
INC $613
INC $613
LDA $700
CLC
ADC #$10
STA $700
BRA all
all:
LDX #$3F
LDA $82A5EC,x
RTL
success:
LDA #$1B
STA $012f ;success SFX
LDX #$37
LDA $82A5EC,x
RTL
Euclid- Since : 2012-06-21
Overworld lost woods :: Comments

Looks more complicated then I thought, I wonder how a 100 digit combination would look in coding lol
I'll probably need to save my coordinates somewhere or you include them in your patch in a text file so I know where to go! Do you need my latest rom to work this out or you can make an ips patch for it?
I'll probably need to save my coordinates somewhere or you include them in your patch in a text file so I know where to go! Do you need my latest rom to work this out or you can make an ips patch for it?

I have a question regarding the lost woods asm Euclid! Is it working on big areas also?

That code up there won't work for big areas, however it can be done since we can control the area via performing extra maths on the scrolling and position variables.
Those memory addresses, take the case right example:
DEC $23
DEC $23
DEC $E1
DEC $E1
DEC $E3
DEC $E3
DEC $615
DEC $615
DEC $617
DEC $617
DEC $700
DEC $700
What i'm doing there is moving link so the game thinks link's on the screen to the left of the current area, thus the next area to load is the same area (thus lost woods).
Reposition link using theses addresses
$20-$21 Link’s Y-Coordinate (mirrored at $0FC4)
$22-$23 Link’s X-Coordinate (mirrored at $0FC2)
Reposition screen scrolling (so the right area loads)
$E0-$E1 BG0 horizontal scroll register ($210F)
$E2-$E3 BG1 horizontal scroll register ($210D)
$E6-$E7 BG0 vertical scroll register ($2110)
$E8-$E9 BG1 vertical scroll register ($210E)
$615-617 - also have to do with scrolling
$700 - i think (this is from memory) last area link's in * 2
Those memory addresses, take the case right example:
DEC $23
DEC $23
DEC $E1
DEC $E1
DEC $E3
DEC $E3
DEC $615
DEC $615
DEC $617
DEC $617
DEC $700
DEC $700
What i'm doing there is moving link so the game thinks link's on the screen to the left of the current area, thus the next area to load is the same area (thus lost woods).
Reposition link using theses addresses
$20-$21 Link’s Y-Coordinate (mirrored at $0FC4)
$22-$23 Link’s X-Coordinate (mirrored at $0FC2)
Reposition screen scrolling (so the right area loads)
$E0-$E1 BG0 horizontal scroll register ($210F)
$E2-$E3 BG1 horizontal scroll register ($210D)
$E6-$E7 BG0 vertical scroll register ($2110)
$E8-$E9 BG1 vertical scroll register ($210E)
$615-617 - also have to do with scrolling
$700 - i think (this is from memory) last area link's in * 2

Here's Euclid code adjusted for Lyra Island. I post it in addition to Euclid's initial asm, maybe it is for some people easier to adjust for use in their hacks
- Code:
;Lost Woods ASM, adapted from Euclid
;$1CF4 counter
; This example is for screen #$3f with exit screen left
; Correct Combo up, down, right, up
lorom
;----------------EDIT YOUR AREA
!area = #$3F ;change this to your area
;----------------------------------
!left = !area-#$01;
!right = !area+#$01;
!up = !area-#$08;
!down = !area+#$08;
;----------------EDIT YOUR EXIT SCREEN and number of correct screens in your combination to pass
!leave = !left ;exit screen
!screens = #$06 ; amount of combinations,
;eg.: !up,!down,!right,!up=04
;eg.: !up,!down,!right,!up,!right,!up=06
;-------------------------------------
org $82AA7D; hook to asm
JSL LWcode
org $A48000; some free space
;-------------EDIT YOUR COMBINATION
db !up,!down,!right,!up,!right,!up ;your combination here
;----------------------------------
LWcode:
CMP.b !area ;check area
BEQ lostWoods
end:
LDA $82A5EC,x ; not right area so return.
STZ $1CF4
RTL
lostWoods:
CPX.b !leave ; want to leave by going left?
BEQ end
TXA
LDX $1CF4
CMP $A48000,x
BNE $06
INX
STX $1CF4
BRA $03
STZ $1CF4
CPX.b !screens ; number of correct screens to pass
BNE $03
JMP success
cmp.b !left ; left correct (area-1)
BNE $03
JMP left
cmp.b !right ; right correct (area+1)
BNE $03
JMP right
cmp.b !down ; down correct (area+8)
BNE $03
JMP down
cmp.b !up ; up correct (area-8)
BNE $03
JMP up
BRA end ;security
left:
INC $23
INC $23
INC $E1
INC $E1
INC $E3
INC $E3
INC $615
INC $615
INC $617
INC $617
INC $700
INC $700
jmp all
right:
DEC $23
DEC $23
DEC $E1
DEC $E1
DEC $E3
DEC $E3
DEC $615
DEC $615
DEC $617
DEC $617
DEC $700
DEC $700
jmp all
down:
DEC $21
DEC $21
DEC $E7
DEC $E7
DEC $E9
DEC $E9
DEC $611
DEC $611
DEC $613
DEC $613
LDA $700
SEC
SBC #$10
STA $700
jmp all
up:
INC $21
INC $21
INC $E7
INC $E7
INC $E9
INC $E9
INC $611
INC $611
INC $613
INC $613
LDA $700
CLC
ADC #$10
STA $700
BRA all
all:
LDX #$3F
LDA $82A5EC,x
RTL
success:
LDA #$1B
STA $012f ;success SFX
LDX #$37
LDA $82A5EC,x
RTL

» overworld lost woods
» How to move fog overlay in lost woods
» Overworld ~ Special overworld areas additional changes
» Skull Woods
» Ys V - Lost Kefin, Kingdom of Sand
» How to move fog overlay in lost woods
» Overworld ~ Special overworld areas additional changes
» Skull Woods
» Ys V - Lost Kefin, Kingdom of Sand
Permissions in this forum:
You cannot reply to topics in this forum