geschrieben am 02.12.2010 20:47:46
Hey weiß jemand zufällig wie man diesen Sprite (also das ist der Air meter) so ändert , dass er auch ohne wasser sinkt ?
Code;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
RAM_AirMeter = $7F8827
;; Where to place the meter relative to the screen boarder
MeterPositionX = $E8
MeterPositionY = $1E
;; Possible values for the below variables:
;; (fast) $00, $01, $03, $07, $0f, $1f, $3f, $7f, $ff (slow)
CountDownFrequency = $03
CountUpFrequency = $00
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; INIT and MAIN routines
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DCB "INIT"
LDA #$FF
STA RAM_AirMeter
RTL
DCB "MAIN"
PHB
PHK
PLB
JSR MainSub
PLB
RTL
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Sprite Main
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MainSub:
LDA RAM_AirMeter ; Play warning sounds
CMP #$1C
BEQ Sound
CMP #$14
BEQ Sound
CMP #$0C
BNE NoSound
Sound:
LDA #$2a
STA $1DFC
NoSound:
;; LDA RAM_AirMeter ; Change Mario's face blue
;; CMP #$30
;; BCS NoChangePal
;;
;; LDY #$86
;; STY $2121
;;
;; LDA #$31
;; STA $2122
;; LDA #$7e
;; STA $2122
;;
;; LDY #$8e
;; STY $2121
;;
;; LDA #$ad
;; STA $2122
;; LDA #$6d
;; STA $2122
;; NoPalChange:
LDA RAM_AirMeter ; If the meter is full...
CMP #$FF ;
BNE Gfx ; ...and it has been for some time...
LDA $1540,x ;
BEQ NoGfx ; ...then skip the graphics routine
Gfx:
JSR SubGfx ; Draw the sprite
NoGfx:
LDA $9D ; Return if sprites are locked
BNE Return0
LDA $75
BEQ CountUp
CountDown:
LDA $13
AND #CountDownFrequency
BNE SkipMeter
LDA RAM_AirMeter
DEC A
BNE SetMeter
BRA KillMario
CountUp:
LDA $13
AND #CountUpFrequency
BNE SkipMeter
LDA RAM_AirMeter
CMP #$FF
BEQ SkipMeter
LDA #$48
STA $1540,x
LDA RAM_AirMeter
INC A
;; LDA #$FF ; NOTE: Reinstate to make the meter instantly reset when not in water
SetMeter:
STA RAM_AirMeter
SkipMeter:
LDA $1a ; Position = Screen boundary
CLC
ADC #$80
STA $E4,x ; This is done so the sprite stays on screen
LDA $1b
ADC #$00
STA $14E0,x
LDA $1c
STA $D8,x
LDA $1d
STA $14D4,x
Return0:
RTS
KillMario:
LDA #$90
STA $7D
LDA #$09 ; Set death animation
STA $71
STA $1DFB ; Set death music
LDA #$FF
STA $0DDA
LDA #$30 ; Set time until we return to the OW
STA $1496
STA $9D
STZ $140D
STZ $1407
STZ $188A
RTS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Graphics Routine
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
NumTiles = $05
SpriteTileDispX: dcb $00,$08,$10,$18,$20,$27
SpriteTileDispY: dcb $28,$20,$18,$10,$08,$01
SpriteGfxProp: dcb $80,$00,$00,$00,$00,$00
Palettes: dcb $09,$05,$0B
SubGfx:
JSR GetPalette
;; LDA $15F6,x ; NOTE: Reinstate to use the palette from the cfg file
STA $02
LDA RAM_AirMeter ; Load address to be timed
LSR
LSR
LSR
STA $03
LDY $15EA,x ; get offset to sprite OAM
PHX
LDX #NumTiles
GfxLoopStart:
LDA #MeterPositionX
STA $0300,Y
LDA #MeterPositionY
CLC
ADC SpriteTileDispY,x
STA $0301,Y
LDA $03
JSR CalculateTile
STA $0302,Y
LDA $02
ORA SpriteGfxProp,x
ORA #$20
STA $0303,Y
INY
INY
INY
INY
DEX
BPL GfxLoopStart
PLX
LDY #$00
LDA #NumTiles
JSL $01B7B3
RTS
GetPalette:
LDY #$00
LDA RAM_AirMeter
CMP #$55
BCC LoadPalette
INY
CMP #$AA
BCC LoadPalette
INY
LoadPalette:
LDA Palettes,y
RTS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CalculateTile:
CPX #$00
BEQ EndPiece
CPX #NumTiles
BEQ EndPiece
PHA
TXA
DEC A
ASL
ASL
ASL
STA $00
PLA
SEC
SBC $00
BMI EmptyTile
CMP #$08
BCS FullTile
AND #$07
CLC
ADC #$47
CMP #$4B
BCC Return
CLC
ADC #$0C
Return:
RTS
FullTile:
LDA #$46
RTS
EmptyTile:
LDA #$47
RTS
EndPiece:
LDA #$56
RTS
#
geschrieben am 04.12.2010 11:55:03
kann mir da keiner helfen :l ?
#
geschrieben am 04.12.2010 12:01:54
So wie ich das sehe, musst du
Code LDA $75
BEQ CountUp
CountDown:
umändern in
Hab's aber nicht ausprobiert.
-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 04.12.2010 12:16:28
danke , ich werde es gleich mal ausprobiern.
#
geschrieben am 04.12.2010 14:02:19
habs ausprobiert , der Air meter ist jetzt garnich erschienen.
#
geschrieben am 04.12.2010 14:12:28
Das einzige, was ich mir dann noch vorstellen könnte, wäre
Code LDA $75
BEQ CountUp
CountDown:
in
umzuändern. Wenn das nicht funktioniert, habe ich keinen Plan.
-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 04.12.2010 14:26:49
erscheint immernoch nicht , aber dennoch danke für die mühe
#
geschrieben am 19.12.2010 14:50:07
Du kannst bei SMWCentral nen Air-Meter Sprite runterladen der auch an Land geht.