Air Meter

geschrieben am 02.12.2010 20:47:46
( Link )
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
( Link )
kann mir da keiner helfen :l ?
#
geschrieben am 04.12.2010 12:01:54
( Link )
So wie ich das sehe, musst du
Code
   LDA $75
BEQ CountUp
CountDown:


umändern in

Code
CountDown:


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
( Link )
danke , ich werde es gleich mal ausprobiern.
#
geschrieben am 04.12.2010 14:02:19
( Link )
habs ausprobiert , der Air meter ist jetzt garnich erschienen.
#
geschrieben am 04.12.2010 14:12:28
( Link )
Das einzige, was ich mir dann noch vorstellen könnte, wäre

Code
   LDA $75
BEQ CountUp
CountDown:


in

Code
  BRA CountUp
CountDown:


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
( Link )
erscheint immernoch nicht , aber dennoch danke für die mühe
#
geschrieben am 19.12.2010 14:50:07
( Link )
Du kannst bei SMWCentral nen Air-Meter Sprite runterladen der auch an Land geht.