Ich bin da anders. Ich mag mein Assembler ein wenig versüsst durch Hochsprachenkonstrukte, z.b. { } Klammer Scopes mit impliziten break/continue labels, ein bisschen wie in C/C++. Ausserdem verwende ich viel automatisch generierte Makros, um mit Gameplay Objekten zu hantieren. Und lange, aussagekräftige Namen. Ich hab kein Problem mit tippen.
Hier ein Beispiel aus Canabalt:
Code
placeDoves:
{
lda CurrentBuildingStarts
bne dontPlaceDove
lda CurrentBuildingLength
cmp #$08
bcc dontPlaceDove
jsr getRandomByte
and #$07
cmp #$05
bne dontPlaceDove
ldx #DoveCount-1
{
lda DovesActive
and DoveIndexToSpriteBit,x
beq foundFreeDove
dex
bpl _cont
}
dontPlaceDove:
rts
foundFreeDove:
RTS_IF_MUTEX_NOT_LOCKED_BY(AuxSpritesMutex, LockedByDoves)
RTS_IF_MUTEX_NOT_LOCKED_BY(MainSpritesMutex, LockedByDoves)
LOCK_MUTEX(AuxSpritesMutex, LockedByDoves)
LOCK_MUTEX(MainSpritesMutex, LockedByDoves)
; claim the slot for this dove
lda DovesActive
ora DoveIndexToSpriteBit,x
sta DovesActive
lda #$00
sta OBJ_ATTR(Dove, CurrentAnimFrame),x
sta OBJ_ATTR(Dove, PositionYLo),x
sta OBJ_ATTR(Dove, VelocityXLo),x
sta OBJ_ATTR(Dove, VelocityXHi),x
sta OBJ_ATTR(Dove, VelocityYLo),x
sta OBJ_ATTR(Dove, VelocityYHi),x
sta OBJ_ATTR(Dove, AccelerationY),x
lda #DoveIdleFrame
sta Dove1SpritePtr,x
; set initial x position (off the right screen edge)
lda #<InitialDoveXPosition
sta OBJ_ATTR(Dove, PositionXLo),x
lda #>InitialDoveXPosition
sta OBJ_ATTR(Dove, PositionXHi),x
; set initial y position (on top of current building)
lda #ScreenHeight
sec
sbc CurrentRunningHeight
clc
adc #SkyTop
asl
asl
asl
clc
adc #(50-21)
sta OBJ_ATTR(Dove, PositionYHi),x
; set sprite color of dove
lda ColorWhite
sta Dove1SpriteColor,x
; doves are not multicolor
lda $d01c
and #(AllDovesMask ^ $ff)
sta $d01c
; doves are not expanded
lda $d017
and #(AllDovesMask ^ $ff)
sta $d017
lda $d01d
and #(AllDovesMask ^ $ff)
sta $d01d
rts
}
Alles anzeigen