Minilop Retroware

MPAGD Avançado

Interruptores simples para os teus jogos de MPAGD

16 de novembro de 2020

Os interruptores são úteis. Imagina uma chaleira elétrica sem um, que triste, não é?

Acrescentar interruptores aos teus jogos abre um monte de possibilidades: talvez abram portas, ativem um dispositivo ou façam surgir um bicho. Seja o que for que queiras que o jogador faça, este código simples de interruptor ajuda-te a começar.

Primeiro vamos desenhar um sprite de interruptor. Se andas com pouca memória disponível, talvez baste uma única frame (podemos usar SPRITEINK para colorir consoante esteja ligado ou desligado)... ou então podes ter uma frame ON e outra OFF. Neste exemplo vou usar duas frames e cor.

Este é o meu sprite de interruptor de 24 Hour Parsley People: Episode 1:

Captura de ecrã do tutorialCaptura de ecrã do tutorial

Depois de desenhares o interruptor, vamos precisar de escrever um pouco de código que controle o jogador a ligá-lo e desligá-lo ao colidir com ele. Quando tentei isto pela primeira vez, fiz uma grande confusão: como a troca é acionada quando o jogador colide com o interruptor, ele alternava entre ON e OFF durante a colisão. A solução foi usar um parâmetro do sprite (usei SETTINGA) para guardar se havia uma colisão ativa ou não e, se houvesse, só mudar do estado atual para o contrário (ON/OFF). Simples!

Aqui está o código em ação: quando o jogador toca no interruptor, liga (ON) o dispositivo elétrico da direita... e, se já estava ligado (ON), desliga-o (OFF) (hoje não vamos preocupar-nos com

o código do dispositivo elétrico... apenas com o facto de o podermos ligar (ON) ou desligar (OFF))

Este é o código do SWITCH:

IF IMAGE 12			; am I a switch?
   IF E = 0                     ; is the electricity OFF?
      SPRITEINK 2               ; be red when OFF
      LET FRAME = 1             ; display the OFF frame
   ELSE                         ; otherwise I must be ON
      SPRITEINK 4               ; be green when ON
      LET FRAME = 0             ; display the ON frame
   ENDIF           
   IF COLLISION 0               ; is the player touching the switch?
      IF SETTINGA = 0           ; were they NOT already touching it ?
         IF E = 1               ; if electricity is ON
            LET E = 0           ; switch it off
         ELSE                   ; otherwise its OFF
            LET E = 1           ; so we'll switch it ON
         ENDIF
         BEEP 20                ; make a sound
         LET SETTINGA = 1       ; remember the player is touching the switch
      ENDIF
   ELSE                         ; if the player isn't colliding with the switch
      LET SETTINGA = 0          ; remember we are not touching it
   ENDIF
ENDIF

Por fim, para garantir que o interruptor aparece de forma suave e correta quando o jogador entra num ecrã que tem um, vamos acrescentar algumas regras ao evento SPRITE INITIALISATION:

IF TYPE 8                  ; or wherever your switch code is
   IF IMAGE 12             ; SWITCH
      IF E = 0             ; if electricity is off
         LET FRAME = 1     ; display the OFF frame
         SPRITEINK 2       ; and make it RED
      ELSE                 ; otherwise electricity is ON
         LET FRAME = 0     ; so display the ON frame
         SPRITEINK 4       ; make it green
      ENDIF
      LET SETTINGA = 0     ; to start with there is no active collision
   ENDIF
ENDIF

Pronto: interruptores rápidos e fáceis, com uma variável que podemos usar noutras partes para o que acontece quando há energia. (IF E = 1 ... faz coisas realmente malvadas!)

Espero que isto ajude!

Todo o MPAGD Avançado