Custom Sprite Clipping

geschrieben am 18.04.2012 16:42:20
( Link )
Hi ich will das das mein Custom Sprite Solid für Mario ist
So wie JSL $01B44F nur für dieses Sprite clipping
(das sprite soll von allen seiten sollid sein)
Code
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; sprite clipping routine
; ripped and modified by Roy, then modified more by Sonikku
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
GetSpriteClippingB:
PHY
PHX
TXY
LDA $00E4,y
CLC
ADC #$08 ; Starting X pos of sprite clipping = sprite center position - $0C ($0C pixels to the left)
STA $04
LDA $14E0,y
ADC #$00
STA $0A
LDA #$38 ; Width of sprite clipping
STA $06
LDA $00D8,y
STA $05
LDA $14D4,y
STA $0B
LDA #$40 ; Height of sprite clipping
STA $07
PLX
PLY
RTS


hab schon das hier versucht:
aber dann ist das sprite von der seite nicht wirklich fest...
Code

JSL $03B664
JSR GetSpriteClippingB
JSL $03B72B
BCC NotSolid
PHB
PHK
PLB
JSR CODE_01B45C
PLB
NotSolid:
[...]


CODE_01B45C: LDA $D8,X
CODE_01B45E: SEC
CODE_01B45F: SBC $1C
CODE_01B461: STA $00
CODE_01B463: LDA $80
CODE_01B465: CLC
CODE_01B466: ADC #$18
CODE_01B468: CMP $00
CODE_01B46A: BPL CODE_01B4B4
CODE_01B46C: LDA $7D
CODE_01B46E: BMI CODE_01B4B2
CODE_01B470: LDA $77
CODE_01B472: AND #$08
CODE_01B474: BNE CODE_01B4B2
CODE_01B476: LDA #$10
CODE_01B478: STA $7D
CODE_01B47A: LDA #$01
CODE_01B47C: STA $1471
CODE_01B47F: LDA #$1F
CODE_01B481: LDY $187A
CODE_01B484: BEQ CODE_01B488
CODE_01B486: LDA #$2F
CODE_01B488: STA $01
CODE_01B48A: LDA $D8,X
CODE_01B48C: SEC
CODE_01B48D: SBC $01
CODE_01B48F: STA $96
CODE_01B491: LDA $14D4,X
CODE_01B494: SBC #$00
CODE_01B496: STA $97
CODE_01B498: LDA $77
CODE_01B49A: AND #$03
CODE_01B49C: BNE CODE_01B4B0
CODE_01B49E: LDY #$00
CODE_01B4A0: LDA $1528,X
CODE_01B4A3: BPL CODE_01B4A6
CODE_01B4A5: DEY
CODE_01B4A6: CLC
CODE_01B4A7: ADC $94
CODE_01B4A9: STA $94
CODE_01B4AB: TYA
CODE_01B4AC: ADC $95
CODE_01B4AE: STA $95
CODE_01B4B0: SEC
Return01B4B1: RTS ; Return

CODE_01B4B2: CLC
Return01B4B3: RTS ; Return

CODE_01B4B4: LDA $190F,X ; \ Branch if "Make Platform Passable" is set
CODE_01B4B7: LSR ; |
CODE_01B4B8: BCS CODE_01B4B2 ; /
CODE_01B4BA: LDA #$00
CODE_01B4BC: LDY $73
CODE_01B4BE: BNE CODE_01B4C4
CODE_01B4C0: LDY $19
CODE_01B4C2: BNE CODE_01B4C6
CODE_01B4C4: LDA #$08
CODE_01B4C6: LDY $187A
CODE_01B4C9: BEQ CODE_01B4CD
CODE_01B4CB: ADC #$08
CODE_01B4CD: CLC
CODE_01B4CE: ADC $80
CODE_01B4D0: CMP $00
CODE_01B4D2: BCC CODE_01B505
CODE_01B4D4: LDA $7D
CODE_01B4D6: BPL CODE_01B4F7
CODE_01B4D8: LDA #$10
CODE_01B4DA: STA $7D
CODE_01B4DC: LDA $9E,X
CODE_01B4DE: CMP #$83
CODE_01B4E0: BCC CODE_01B4F2
CODE_01B4E2: LDA #$0F
CODE_01B4E4: STA $1564,X
CODE_01B4E7: LDA $C2,X
CODE_01B4E9: BNE CODE_01B4F2
CODE_01B4EB: INC $C2,X
CODE_01B4ED: LDA #$10
CODE_01B4EF: STA $1558,X
CODE_01B4F2: LDA #$01
CODE_01B4F4: STA $1DF9 ; / Play sound effect
CODE_01B4F7: CLC
Return01B4F8: RTS ; Return

DATA_01B4F9: db $0E,$F1,$10,$E0,$1F,$F1

DATA_01B4FF: db $00,$FF,$00,$FF,$00,$FF

CODE_01B505: JSR SUB_HORZ_POS
CODE_01B508: LDA $9E,X
CODE_01B50A: CMP #$A9
CODE_01B50C: BEQ CODE_01B520
CODE_01B50E: CMP #$9C
CODE_01B510: BEQ CODE_01B51E
CODE_01B512: CMP #$BB
CODE_01B514: BEQ CODE_01B51E
CODE_01B516: CMP #$60
CODE_01B518: BEQ CODE_01B51E
CODE_01B51A: CMP #$49
CODE_01B51C: BNE CODE_01B522
CODE_01B51E: INY
CODE_01B51F: INY
CODE_01B520: INY
CODE_01B521: INY
CODE_01B522: LDA DATA_01B4F9,Y
CODE_01B525: CLC
CODE_01B526: ADC $E4,X
CODE_01B528: STA $94
CODE_01B52A: LDA DATA_01B4FF,Y
CODE_01B52D: ADC $14E0,X
CODE_01B530: STA $95
CODE_01B532: STZ $7B
CODE_01B534: CLC
Return01B535: RTS ; Return
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 07.06.2012 21:45:40
( Link )
Ich bin seit Tagen drauf und dran, die beweglichen braunen Plattformen, die sich in der Luft hin- und herbewegen, von allen Seiten solid zu machen, und allmählich mache ich Fortschritte, komme jetzt allerdings nicht weiter. Mein Stand:

Von unten:
Gut: Wenn Mario groß ist, kann er von unten nicht mehr durchspringen (es macht sogar den typischen "Solid-Sound")
Schlecht: Wenn Mario klein ist, kann er leider noch von unten durchspringen. Wie löse ich das ??
Hat Mario, wenn er klein ist, eine andere Y-Position im Verhältnis zum Sprite als wenn er groß ist?

Von der Seite:
Gut: Wenn sich die Plattform seitlich auf Mario zubewegt, wird er bei Berührung weggedrückt (wie beim Autoscrolling).
Schlecht: Wenn sich die Plattform von Mario seitlich wegbewegt, kann er seitlich durchspringen/durchlaufen. Es muss irgendwie gelingen, dass Marios Geschwindigkeit bei Berührung nicht höher ist als die der Plattform, er darf sie nicht "überholen".

Hier der bisherige Code:
Code
SOLIDBLOCK	 	JSL $01A7DC		; check for Mario - sprite contact
BCC RETURN3 ; if not, return
LDA $0E ; Mario's y-position relative to sprite's y-position
CMP #$EC
BPL RANGEOUT ; branch if not touching sprite from above
RETURN3 RTS

RANGEOUT LDA $0E ;Mario Y - Sprite Y. positive if sprite is above mario.
CMP #$02 ;branch if high enough (underflows). Mario's position is higher than it looks
BMI TESTSIDE

LDA $7D ;the following only occurs when he's rising
BPL RETURN3

LDA #$08
STA $7D ;set mario speed to falling
LDA #$35 ;hit head
STA $1DFC
RTS ;return

TESTSIDE JSR SUB_HORZ_POS ;different clipping depending on what side mario is on
BEQ ONRIGHT ;branch if touching sprite from right side

LDA $B6,x ;touching from left side - load sprite x-speed
BPL LEFTRIGHT ;branch if sprite is moving right
STA $7B ;if moving left, sprite's speed = Mario's speed
RTS

LEFTRIGHT (MARIO BERÜHRT SEITLICH LINKS DIE PLATTFORM: HIER MUSS GEREGELT WERDEN, DASS MARIOS GESCHWINDINGKEIT
NICHT HÖHER IST ALS DIE DER PLATTFORM, WENN SIE SICH VON IHM HORIZONTAL WEGBEWEGT, ALSO NACH RECHTS!)

ONRIGHT LDA $B6,x ;touching from right side - load sprite x-speed
BMI RIGHTLEFT ;branch if sprite is moving left
STA $7B ; if moving right, sprite's speed = Mario's speed
RTS
RIGHTLEFT (MARIO BERÜHRT SEITLICH RECHTS DIE PLATTFORM: HIER MUSS GEREGELT WERDEN, DASS MARIOS GESCHWINDINGKEIT
NICHT HÖHER IST ALS DIE DER PLATTFORM, WENN SIE SICH VON IHM HORIZONTAL WEGBEWEGT, ALSO NACH LINKS!)

DONTCLIP RTS