Post by ramon on Nov 14, 2020 10:08:12 GMT
Gracias a la rutina "Rotational Controls and Sprite Movement" que ha resuelto gran parte del VIPER MARK II PLAYER.
EVENT PLAYER
; VIPER MARK II
; variables:
; S = Spin (giro).
; A = frame. Más adelante Angulo de giro.
; F = retardo de disparo.
; M = munición.
; L = nivel de velocidad.
; P = retardo cambio de velocidad.
IF KEY LEFT
SUBTRACT 4 FROM S
ENDIF
IF KEY RIGHT
ADD 4 TO S
ENDIF
LET A = S
DIVIDE A BY 32
LET FRAME = A
IF KEY FIRE
IF F = 0
IF M > 0 ; hay municion?
SPAWN 1 1
SPAWNED
LET DIRECTION = S
ENDSPRITE
LET F = 10 ; retardo disparo
SUBTRACT 1 TO M ; gastamos 1 municion
BEEP 1
ENDIF
ELSE
SUBTRACT 1 TO F
ENDIF
ELSE
LET F = 0
ENDIF
IF KEY UP
IF S < DIRECTION
LET A = DIRECTION
SUBTRACT S FROM A
ELSE
IF S > DIRECTION
LET A = S
SUBTRACT DIRECTION FROM A
ELSE
LET A = 0
ENDIF
ENDIF
IF A > 64
IF A < 192 ; ATRAS 3*45
IF P > 0
SUBTRACT 1 FROM P ; INERCIA
ELSE
LET P = 6
IF L > 0 ; FRENA
SUBTRACT 1 FROM L
ELSE ; GIRA
LET DIRECTION = S
ENDIF
ENDIF
ELSE ; ADELANTE 67
IF P < 6
ADD 1 TO P ; INERCIA
ELSE
LET P = 0
IF L < 5 ; ACELERA Y
ADD 1 TO L
LET DIRECTION = S ; GIRA
ELSE
LET DIRECTION = S
ENDIF
ENDIF
ENDIF
ELSE ; ADELANTE 01*2*
IF P < 10
ADD 1 TO P ; INERCIA
ELSE
LET P = 0
IF L < 5 ; ACELERA Y
ADD 1 TO L
LET DIRECTION = S
ELSE ; GIRA
LET DIRECTION = S
ENDIF
ENDIF
ENDIF
ENDIF
IF X > RIGHTEDGE
LET X = LEFTEDGE
ENDIF
IF X < LEFTEDGE
LET X = RIGHTEDGE
ENDIF
IF Y > BOTTOMEDGE
LET Y = TOPEDGE
ENDIF
IF Y < TOPEDGE
LET Y = BOTTOMEDGE
ENDIF
; Move player.
USER L
EVENT PLAYER
; VIPER MARK II
; variables:
; S = Spin (giro).
; A = frame. Más adelante Angulo de giro.
; F = retardo de disparo.
; M = munición.
; L = nivel de velocidad.
; P = retardo cambio de velocidad.
IF KEY LEFT
SUBTRACT 4 FROM S
ENDIF
IF KEY RIGHT
ADD 4 TO S
ENDIF
LET A = S
DIVIDE A BY 32
LET FRAME = A
IF KEY FIRE
IF F = 0
IF M > 0 ; hay municion?
SPAWN 1 1
SPAWNED
LET DIRECTION = S
ENDSPRITE
LET F = 10 ; retardo disparo
SUBTRACT 1 TO M ; gastamos 1 municion
BEEP 1
ENDIF
ELSE
SUBTRACT 1 TO F
ENDIF
ELSE
LET F = 0
ENDIF
IF KEY UP
IF S < DIRECTION
LET A = DIRECTION
SUBTRACT S FROM A
ELSE
IF S > DIRECTION
LET A = S
SUBTRACT DIRECTION FROM A
ELSE
LET A = 0
ENDIF
ENDIF
IF A > 64
IF A < 192 ; ATRAS 3*45
IF P > 0
SUBTRACT 1 FROM P ; INERCIA
ELSE
LET P = 6
IF L > 0 ; FRENA
SUBTRACT 1 FROM L
ELSE ; GIRA
LET DIRECTION = S
ENDIF
ENDIF
ELSE ; ADELANTE 67
IF P < 6
ADD 1 TO P ; INERCIA
ELSE
LET P = 0
IF L < 5 ; ACELERA Y
ADD 1 TO L
LET DIRECTION = S ; GIRA
ELSE
LET DIRECTION = S
ENDIF
ENDIF
ENDIF
ELSE ; ADELANTE 01*2*
IF P < 10
ADD 1 TO P ; INERCIA
ELSE
LET P = 0
IF L < 5 ; ACELERA Y
ADD 1 TO L
LET DIRECTION = S
ELSE ; GIRA
LET DIRECTION = S
ENDIF
ENDIF
ENDIF
ENDIF
IF X > RIGHTEDGE
LET X = LEFTEDGE
ENDIF
IF X < LEFTEDGE
LET X = RIGHTEDGE
ENDIF
IF Y > BOTTOMEDGE
LET Y = TOPEDGE
ENDIF
IF Y < TOPEDGE
LET Y = BOTTOMEDGE
ENDIF
; Move player.
USER L