Urchins Geschwindigkeit ändern

geschrieben am 01.05.2013 23:36:38
( Link )
Ich lebe noch. Und heute habe ich auch mal wieder Zeit und Motivation für SMW Hacking gefunden!

Ich bräuchte mal wieder Hilfe mit ASM, und zwar habe ich die Urchin disassembly (wall following) von der SMWC Sprite Section runtergeladen und will ihn als Custom Sprite einfügen. Ich will aber einen etwas schnelleren Urchin als der originale Sprite, kann aber in der Datei nichts von "speed" finden, und der Code sagt mir nichts.

Hier ist der Code, und danke für eure Hilfe!


Code

LABEL03 dcb $08
LABEL04 dcb $00,$08

dcb "INIT"
INC $D8,X
BNE LABEL01
INC $14D4,X
LABEL01 LDA $E4,X
LDY #$00
AND #%00010000
STA $151C,X
BNE LABEL02
INY
LABEL02 LDA LABEL03,Y
STA $B6,X
LDA LABEL04,Y
STA $AA,X
INC.W $164A,X
LDA $151C,X
EOR #%00010000
STA $151C,X
LSR A
LSR A
STA $C2,X
RTL

LABEL18 dcb $08,$00,$F8,$00,$F8,$00,$08,$00
LABEL17 dcb $00,$08,$00,$F8,$00,$08,$00,$F8
LABEL10 dcb $01,$FF,$FF,$01,$FF,$01,$01,$FF
LABEL09 dcb $01,$01,$FF,$FF,$01,$01,$FF,$FF
LABEL13 dcb $01,$04,$02,$08,$02,$04,$01,$08
LABEL20 dcb $00,$01,$02,$01

dcb "MAIN"
PHB
PHK
PLB
JSR SPRITE_CODE_START
PLB
RTL

SPRITE_CODE_START
JSL $018032
JSL $01ACF9
AND #%11111111
ORA $9D
BNE LABEL05
LDA #$0C
STA $1558,X
LABEL05 JSR SUB_GFX
LDA $14C8,X
CMP #$08
BEQ LABEL06
STZ $1528,X
LDA #$FF
STA $1558,X
LABEL07 RTS

LABEL06 LDA $9D
BNE LABEL07
JSR SUB_OFF_SCREEN_X0
JSL $01A7DC
LDA $1540,X
BNE LABEL08
LDY $C2,X
LDA LABEL09,Y
STA $AA,X
LDA LABEL10,Y
STA $B6,X
JSL $019138
LDA $1588,X
AND #%00001111
BNE LABEL08
LDA #$08
STA $1564,X
LDA #$38
STA $1540,X
LABEL08 LDA #$20
CMP $1540,X
BNE LABEL11
INC $C2,X
LDA $C2,X
CMP #$04
BNE LABEL12
STZ $C2,X
LABEL12 CMP #$08
BNE LABEL11
LDA #$04
STA $C2,X
LABEL11 LDY $C2,X
LDA $1588,X
AND LABEL13,Y
BEQ LABEL14
LDA #$08
STA $1564,X
DEC $C2,X
LDA $C2,X
BPL LABEL15
LDA #$03
BRA LABEL16
LABEL15 CMP #$03
BNE LABEL14
LDA #$07
LABEL16 STA $C2,X
LABEL14 LDY $C2,X
LDA LABEL17,Y
STA $AA,X
LDA LABEL18,Y
STA $B6,X
JSL $018022
JSL $01801A
RTS


UrchinXPos dcb $08,$00,$10,$00,$10
UrchinYPos dcb $08,$00,$00,$10,$10
UrchinProp dcb $37,$37,$77,$B7,$F7
UrchinTiles dcb $C4,$C6,$C8,$C6

SUB_GFX LDA $163E,X
BNE LABEL19
INC $1528,X
LDA #$0C
STA $163E,X
LABEL19 LDA $1528,X
AND #%00000011
TAY
LDA LABEL20,Y
STA $1602,X
JSR GET_DRAW_INFO
STZ $05
LDA $1602,X
STA $02
LDA $1558,X
STA $03
LABEL24 LDX $05
LDA $00
CLC
ADC UrchinXPos,X
STA $0300,Y
LDA $01
CLC
ADC UrchinYPos,X
STA $0301,Y
LDA UrchinProp,X
STA $0303,Y
CPX #$00
BNE LABEL21
LDA #$CA
LDX $03
BEQ LABEL22
LDA #$CC
LABEL22 BRA LABEL23
LABEL21 LDX $02
LDA UrchinTiles,X
LABEL23 STA $0302,Y
INY
INY
INY
INY
INC $05
LDA $05
CMP #$05
BNE LABEL24
LDX $15E9
LDY #$02
LDA #$04
JSL $01B7B3
RTS


"Routines from the library which one shouldn't have to modify" hab ich mal rausgelassen.

Exits done: 42, Overworld: 80%

To do list: Castle #5... fast fertig... Danach gibts endlich die Demo
geschrieben am 01.05.2013 23:57:28
( Link )
so wie ich das sehe stehen bei Label17/18 die speed pare für x/y speed
WAS, WIE, WO???? Ne, Ne ich bin nicht die Signatur ...
Ich putze hier nur.

Mein Hack:
<!-- m --><a class="postlink" href="http://www.youtube.com/user/conankun88#p/a/u/0/8vdcyGylrg0">http://www.youtube.com/user/conankun88# ... vdcyGylrg0</a><!-- m -->
geschrieben am 02.05.2013 17:26:13
( Link )
Ja sieht ganz danach aus, aber wie soll ich denn die Values ändern, und welche?
Ich meine, soll ich einfach mal die 08 zu "0E machen und die F8 zu F0?

EDIT: Habe das jetzt mal ausprobiert, daudrch wird der Sprite zwar schneller, aber irgendwie checkt er es nicht mehr, der Wand zu folgen, sondern schwimmt komisch umher und auch durch Wände etc.
EDIT 2: Das passiert egal in welche ich diese Zahlen ändere. Der Sprite wird schneller/langsamer, aber schwimmt durch Wände.. Hat es noch was mit den ganzen 00 zu tun?

Exits done: 42, Overworld: 80%

To do list: Castle #5... fast fertig... Danach gibts endlich die Demo
geschrieben am 02.05.2013 20:15:51
( Link )
Wahrscheinlich hilft dir dass nicht und es ist der größte Bockmist, aber schaden kann es nicht.
Was passiert denn, wenn du Bei Label14 in die Zeile zwischen LDY $C2,x und LDA Label17,y LDY $157C,x schreibst und dann die Zahlen der Tabellen abänderst?
Wie gesagt, kann der größte Scheiß sein, aber probieren schadet nicht ^^
geschrieben am 02.05.2013 20:59:02
( Link )
vllt musst du auch noch den wert bei label 03 und 04 abändern
und so musst du es abändern:(bei den labels3/4/17/18
-die 00 bleiben wie sie siend (sonst schwimt der urchin schräg)
-die 08 ersetzt du durch den gewollten speed
-die F8 ersetzt du durch das zweierkomplement des speeds (EOR #$FF +1)
WAS, WIE, WO???? Ne, Ne ich bin nicht die Signatur ...
Ich putze hier nur.

Mein Hack:
<!-- m --><a class="postlink" href="http://www.youtube.com/user/conankun88#p/a/u/0/8vdcyGylrg0">http://www.youtube.com/user/conankun88# ... vdcyGylrg0</a><!-- m -->
geschrieben am 02.05.2013 22:43:30
( Link )
@ kooooopa: Wenn ich das tue, schwimmt der Urchin nur nach rechts und durch alles durch

@ mzünni: Bringt leider nichts, der Sprite handelt unverändert (ist schneller, aber folgt der Wand nicht mehr)

Exits done: 42, Overworld: 80%

To do list: Castle #5... fast fertig... Danach gibts endlich die Demo
geschrieben am 03.05.2013 20:31:42
( Link )
Ich hatte das selbe Problem mal mit Sparky/Fuzzball, doch ich konnte es lösen:

Beim Label14 schreibst du unter
Code
		STA $AA,X

einfach
Code
		ASL $AA,x
.

Und unter
Code
		STA $B6,X

schreibst du
Code
		ASL $B6,x
.
Damit verdoppelst du die Geschwindigkeit.

Dann ersetzt du im Label6 die letzten beiden Zeilen
Code
		LDA #$38
STA $1540,X

durch
Code
		LDA #$1C
STA $1540,X
.
Das sollte klappen. Hab ich eigentlich nur durch Probieren rausbekommen (hab mir gedacht, wenn man die Geschwindigkeit verdoppelt und dann Probleme mit der Wand auftreten, muss woanders bestimmt irgendwas halbiert werden, damit es wieder klappt ).
geschrieben am 04.05.2013 12:16:53
( Link )
hm ja anscheinend wird der Wand kontakt nur überprüft wenn der Timer 0 ereicht
aber ich würde lieber die speedTables erhöhen wie oben beschrieben und dann
die konstante hinter Zeile 76 (LDA #$38) durch #$1C0/newSpeed zu ersetzten
und hinterZeile 78 (LDA #$20) durch #$100/newSpped zu ersetzten
also z.b. mit dem 1,5 fachen des speeds müsste das dann so aussehen:
Code
    LABEL03      dcb $0C
LABEL04 dcb $00,$0C

dcb "INIT"
INC $D8,X
BNE LABEL01
INC $14D4,X
LABEL01 LDA $E4,X
LDY #$00
AND #%00010000
STA $151C,X
BNE LABEL02
INY
LABEL02 LDA LABEL03,Y
STA $B6,X
LDA LABEL04,Y
STA $AA,X
INC.W $164A,X
LDA $151C,X
EOR #%00010000
STA $151C,X
LSR A
LSR A
STA $C2,X
RTL

LABEL18 dcb $0C,$00,$F3,$00,$F3,$00,$0C,$00
LABEL17 dcb $00,$0C,$00,$F3,$00,$0C,$00,$F3
LABEL10 dcb $01,$FF,$FF,$01,$FF,$01,$01,$FF
LABEL09 dcb $01,$01,$FF,$FF,$01,$01,$FF,$FF
LABEL13 dcb $01,$04,$02,$08,$02,$04,$01,$08
LABEL20 dcb $00,$01,$02,$01

dcb "MAIN"
PHB
PHK
PLB
JSR SPRITE_CODE_START
PLB
RTL

SPRITE_CODE_START
JSL $018032
JSL $01ACF9
AND #%11111111
ORA $9D
BNE LABEL05
LDA #$0C
STA $1558,X
LABEL05 JSR SUB_GFX
LDA $14C8,X
CMP #$08
BEQ LABEL06
STZ $1528,X
LDA #$FF
STA $1558,X
LABEL07 RTS

LABEL06 LDA $9D
BNE LABEL07
JSR SUB_OFF_SCREEN_X0
JSL $01A7DC
LDA $1540,X
BNE LABEL08
LDY $C2,X
LDA LABEL09,Y
STA $AA,X
LDA LABEL10,Y
STA $B6,X
JSL $019138
LDA $1588,X
AND #%00001111
BNE LABEL08
LDA #$08
STA $1564,X
LDA #$25
STA $1540,X
LABEL08 LDA #$15
CMP $1540,X
BNE LABEL11
INC $C2,X
LDA $C2,X
CMP #$04
BNE LABEL12
STZ $C2,X
LABEL12 CMP #$08
BNE LABEL11
LDA #$04
STA $C2,X
LABEL11 LDY $C2,X
LDA $1588,X
AND LABEL13,Y
BEQ LABEL14
LDA #$08
STA $1564,X
DEC $C2,X
LDA $C2,X
BPL LABEL15
LDA #$03
BRA LABEL16
LABEL15 CMP #$03
BNE LABEL14
LDA #$07
LABEL16 STA $C2,X
LABEL14 LDY $C2,X
LDA LABEL17,Y
STA $AA,X
LDA LABEL18,Y
STA $B6,X
JSL $018022
JSL $01801A
RTS


UrchinXPos dcb $08,$00,$10,$00,$10
UrchinYPos dcb $08,$00,$00,$10,$10
UrchinProp dcb $37,$37,$77,$B7,$F7
UrchinTiles dcb $C4,$C6,$C8,$C6

SUB_GFX LDA $163E,X
BNE LABEL19
INC $1528,X
LDA #$0C
STA $163E,X
LABEL19 LDA $1528,X
AND #%00000011
TAY
LDA LABEL20,Y
STA $1602,X
JSR GET_DRAW_INFO
STZ $05
LDA $1602,X
STA $02
LDA $1558,X
STA $03
LABEL24 LDX $05
LDA $00
CLC
ADC UrchinXPos,X
STA $0300,Y
LDA $01
CLC
ADC UrchinYPos,X
STA $0301,Y
LDA UrchinProp,X
STA $0303,Y
CPX #$00
BNE LABEL21
LDA #$CA
LDX $03
BEQ LABEL22
LDA #$CC
LABEL22 BRA LABEL23
LABEL21 LDX $02
LDA UrchinTiles,X
LABEL23 STA $0302,Y
INY
INY
INY
INY
INC $05
LDA $05
CMP #$05
BNE LABEL24
LDX $15E9
LDY #$02
LDA #$04
JSL $01B7B3
RTS
WAS, WIE, WO???? Ne, Ne ich bin nicht die Signatur ...
Ich putze hier nur.

Mein Hack:
<!-- m --><a class="postlink" href="http://www.youtube.com/user/conankun88#p/a/u/0/8vdcyGylrg0">http://www.youtube.com/user/conankun88# ... vdcyGylrg0</a><!-- m -->
geschrieben am 04.05.2013 13:32:17
( Link )
Danke, mzünni, das klappt! :)
Hab es getestet, aber kann es sein, dass der Sprite in der vertikalen Richtung etwas langsamer schwimmt als in der horizontalen?

Exits done: 42, Overworld: 80%

To do list: Castle #5... fast fertig... Danach gibts endlich die Demo
geschrieben am 04.05.2013 13:40:17
( Link )
*zu blöd um eignen text richtig zu lesen*
so müsste es richtig sein XD
Code
        LABEL03      dcb $0C
LABEL04 dcb $00,$0C

dcb "INIT"
INC $D8,X
BNE LABEL01
INC $14D4,X
LABEL01 LDA $E4,X
LDY #$00
AND #%00010000
STA $151C,X
BNE LABEL02
INY
LABEL02 LDA LABEL03,Y
STA $B6,X
LDA LABEL04,Y
STA $AA,X
INC.W $164A,X
LDA $151C,X
EOR #%00010000
STA $151C,X
LSR A
LSR A
STA $C2,X
RTL

LABEL18 dcb $0C,$00,$F4,$00,$F4,$00,$0C,$00
LABEL17 dcb $00,$0C,$00,$F4,$00,$0C,$00,$F4
LABEL10 dcb $01,$FF,$FF,$01,$FF,$01,$01,$FF
LABEL09 dcb $01,$01,$FF,$FF,$01,$01,$FF,$FF
LABEL13 dcb $01,$04,$02,$08,$02,$04,$01,$08
LABEL20 dcb $00,$01,$02,$01

dcb "MAIN"
PHB
PHK
PLB
JSR SPRITE_CODE_START
PLB
RTL

SPRITE_CODE_START
JSL $018032
JSL $01ACF9
AND #%11111111
ORA $9D
BNE LABEL05
LDA #$0C
STA $1558,X
LABEL05 JSR SUB_GFX
LDA $14C8,X
CMP #$08
BEQ LABEL06
STZ $1528,X
LDA #$FF
STA $1558,X
LABEL07 RTS

LABEL06 LDA $9D
BNE LABEL07
JSR SUB_OFF_SCREEN_X0
JSL $01A7DC
LDA $1540,X
BNE LABEL08
LDY $C2,X
LDA LABEL09,Y
STA $AA,X
LDA LABEL10,Y
STA $B6,X
JSL $019138
LDA $1588,X
AND #%00001111
BNE LABEL08
LDA #$08
STA $1564,X
LDA #$25
STA $1540,X
LABEL08 LDA #$15
CMP $1540,X
BNE LABEL11
INC $C2,X
LDA $C2,X
CMP #$04
BNE LABEL12
STZ $C2,X
LABEL12 CMP #$08
BNE LABEL11
LDA #$04
STA $C2,X
LABEL11 LDY $C2,X
LDA $1588,X
AND LABEL13,Y
BEQ LABEL14
LDA #$08
STA $1564,X
DEC $C2,X
LDA $C2,X
BPL LABEL15
LDA #$03
BRA LABEL16
LABEL15 CMP #$03
BNE LABEL14
LDA #$07
LABEL16 STA $C2,X
LABEL14 LDY $C2,X
LDA LABEL17,Y
STA $AA,X
LDA LABEL18,Y
STA $B6,X
JSL $018022
JSL $01801A
RTS


UrchinXPos dcb $08,$00,$10,$00,$10
UrchinYPos dcb $08,$00,$00,$10,$10
UrchinProp dcb $37,$37,$77,$B7,$F7
UrchinTiles dcb $C4,$C6,$C8,$C6

SUB_GFX LDA $163E,X
BNE LABEL19
INC $1528,X
LDA #$0C
STA $163E,X
LABEL19 LDA $1528,X
AND #%00000011
TAY
LDA LABEL20,Y
STA $1602,X
JSR GET_DRAW_INFO
STZ $05
LDA $1602,X
STA $02
LDA $1558,X
STA $03
LABEL24 LDX $05
LDA $00
CLC
ADC UrchinXPos,X
STA $0300,Y
LDA $01
CLC
ADC UrchinYPos,X
STA $0301,Y
LDA UrchinProp,X
STA $0303,Y
CPX #$00
BNE LABEL21
LDA #$CA
LDX $03
BEQ LABEL22
LDA #$CC
LABEL22 BRA LABEL23
LABEL21 LDX $02
LDA UrchinTiles,X
LABEL23 STA $0302,Y
INY
INY
INY
INY
INC $05
LDA $05
CMP #$05
BNE LABEL24
LDX $15E9
LDY #$02
LDA #$04
JSL $01B7B3
RTS
WAS, WIE, WO???? Ne, Ne ich bin nicht die Signatur ...
Ich putze hier nur.

Mein Hack:
<!-- m --><a class="postlink" href="http://www.youtube.com/user/conankun88#p/a/u/0/8vdcyGylrg0">http://www.youtube.com/user/conankun88# ... vdcyGylrg0</a><!-- m -->
geschrieben am 04.05.2013 15:03:07
( Link )
Perfect, danke an alle!

Exits done: 42, Overworld: 80%

To do list: Castle #5... fast fertig... Danach gibts endlich die Demo