Sprite-Generator (Generic)

geschrieben am 03.10.2010 16:30:04
( Link )
Mir fällt gerade auf, dass es noch keinen Fragen-Thread zu Hex und ASM gibt. Ich müsste mal was fragen, was eher nicht zum Anfänger-Hacking passt:

Ich verwende einen Sprite-Generator, bei dem zu bestimmende Sprites von rechts und links kommen:

Code
                    SPRITE_TO_GEN = $C2         ;only used if first extra bit is clear
CUST_SPRITE_TO_GEN = $6D ;only used if first extra bit is set

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; sprite code JSL
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

dcb "INIT" ;generators don't have an init routine
dcb "MAIN"
PHB
PHK
PLB
JSR SPRITE_CODE_START
PLB
RTL

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; main sprite code
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

EXTRA_BITS = $7FAB10
NEW_SPRITE_NUM = $7FAB9E

TBL_B2D0 dcb $F0,$FF
TBL_B2D2 dcb $FF,$00
TBL_B2D4 dcb $10,$F0

SPRITE_CODE_START
PHX
PHY

LDY #$00
LDX #$0B
Loop:
LDA $9E,x
CMP #$C2
BNE KeinBlurp
INY
KeinBlurp:
DEX
CPX #$FF
BNE Loop

CPY #10 ;Max. Blurps
BCC Weitermachen
PLY
PLX
RTS

Weitermachen:
PLY
PLX
LDA $14
AND #$3F
ORA $9D
BNE RETURN
JSL $02A9DE
BMI RETURN
TYX

LDA #$01 ; store sprite status
STA $14C8,x

LDA $18B9 ; check if first extra bit is set
AND #$40
BNE CUST

NORMAL LDA #SPRITE_TO_GEN ; store sprite number
STA $9E,x
JSL $07F7D2 ; reset sprite properties
BRA SHARED

CUST LDA #CUST_SPRITE_TO_GEN ; store custom sprite number
STA NEW_SPRITE_NUM,x
JSL $07F7D2 ; reset sprite properties
JSL $0187A7 ; get table values for custom sprite
LDA #$08 ; mark as initialized
STA EXTRA_BITS,x



SHARED JSL $01ACF9
AND #$7F
ADC #$40
ADC $1C
STA $D8,x
LDA $1D
ADC #$00
STA $14D4,x
LDA $148E
AND #$01
TAY
LDA TBL_B2D0,y
CLC
ADC $1A
STA $E4,x
LDA $1B
ADC TBL_B2D2,y
STA $14E0,x
LDA TBL_B2D4,y
STA $B6,x
RETURN RTS


Kann man hier irgendwo einen zeitlichen Abstand festlegen, wann ein neuer Sprite erscheint, also ein Intervall? Die Sprites erscheinen mir viel zu schnell hintereinander.
geschrieben am 03.10.2010 16:40:39
zuletzt bearbeitet von RPG Hacker am 03.10.2010 19:06:42.
( Link )
Steht denn nichts in der Readme?
-Das quadratische Rad neu erfinden-
Mit das quadratische Rad neu erfinden (englisch Reinventing the square wheel) bezeichnet man die Bereitstellung einer schlechten Lösung, wenn eine gute Lösung bereits existiert.

-Slowsort-
Slowsort (von engl. slow: langsam) ist ein langsamer, rekursiver Sortieralgorithmus, der nach dem Prinzip Vervielfache und kapituliere (engl. Multiply and surrender, eine Parodie auf Teile und herrsche) arbeitet.

geschrieben am 03.10.2010 17:48:06
( Link )
Ich glaube, du musst den code hier ändern:
Code
LDA $14 
AND #$3F
ORA $9D
BNE RETURN


Aber ich weiß nicht wie Sprite Adressen (so wie $9D) funktionieren. =/

Du kannst versuchen, AND #$7F statt #$3F zu benutzen.
geschrieben am 03.10.2010 22:08:04
( Link )
Danke, Sind, dein Vorschlag klappt super!