ORIGM by Renato Murta de Rezende
A downloadable game
ORIGM
Softby Renato Murta de Rezende
renatomdr@gmail.com
To play:
use the arrow keys:
left and right to move the ship horizontally
up and down to select the color of the laser
use the space bar to shoot
list 1 BLOAD"x.b",R:DEFINTA-Z:Y=RND(-TIME):COLOR8,1,1:SCREEN1,1,0:WIDTH28:KEYOFF:CLS:FORT=0TO5:B=200+T*8:VPOKEBASE(5)+574+(T*32),B:FORY=0TO7:VPOKEBASE(7)+B*8+Y,SGN(YMOD7)*126:NEXTY,T:FORY=0TO13:READI:SOUNDY,I:NEXT:FORY=1TO22:LOCATERND(1)*29,23:PRINT"ø":NEXT 2 FORP=0TO6:READH,V$:FORT=1TOLEN(V$)STEP2:VPOKEH,VAL("&H"+MID$(V$,T,2)):H=H+1:NEXTT,P:COLOR=RESTORE:_TURBOON:DIMA(9),S(9),D(9),F(9),G(9),H(9),J(9):R#=0:DATA0,0,0,1,0,0,31,220,0,0,0,255,50,0,8228,07020707000570067000670071,8217,213141516171E1 3 LOCATE12,11:PRINT"ORIGM":FORN=0TO1:N=ABS(STRIG(0)):NEXTN:V#=0:LOCATE0,0:PRINTV#;" ":LOCATE20,0:PRINTR#;:FORN=19TO31:PUTSPRITEN,(0,-17),0,0:A(NMOD10)=0:NEXTN:Q=124:W=5:I=100:O=0:P=0:R=0:Z=0:VPOKE6913,Q:VPOKE6914,1:VPOKE6916,173:FORN=0TO1:TIME=0 4 N=0:E=STICK(0):Q=Q+(-(E>1ANDE<5ANDQ<222)+(E>5ANDE<9ANDQ>16))*3:VPOKE6913,Q:E$=INKEY$:A$=CHR$(30):B$=CHR$(31):W=(W+6+(E$=A$)-(E$=B$))MOD6:VPOKE6916,133+(W*8):I=(I+1)MOD(120\(P+1)):IFE$=A$ORE$=B$THENSOUND0,255:SOUND8,15:AA=1ELSEIFAA=1THENSOUND8,0:AA=0 5 IFSTRIG(0)ANDR=0THENR=1:T=Q:Y=183:U=W+2:GOTO5ELSEIFR>0THENY=Y-24:IFY<0THENR=0:PUTSPRITE19,(0,-17):PUTSPRITE18,(0,-17):SOUND8,0ELSEPUTSPRITE19,(T,Y-16),U,3:PUTSPRITE18,(T,Y),U,3:SOUND0,255-(Y+24):SOUND8,(Y+24)\13:DATA6912,AF7C010FADEC060F 6 E=PEEK(&HF3E7)AND32:BB=0:FORL=0TO9:A=A(L):S=S(L):D=D(L):F=F(L):G=G(L):H=H(L):J=J(L):BL=31-L:B=6914+BL*4:S=S+G:VS=P+1:IFI=0ANDA=0THENI=1:A=1:S=RND(1)*200+20:D=80:F=S:G=0:O=(O+1)MOD(2+P):P=P-(O=0):J=PMOD6+2:H=(P*2)+1:IFP>29THENP=30:J=RND(1)*6+2 7 IFA=1THEND=D+H:K=D/10:PUTSPRITEBL,(S,K),J,2:IFK>192THENA=0ELSEIFEANDR=1ANDABS(S-T)<8ANDABS(K-Y)<32ANDU=JTHENA=2:VPOKEB,5:SOUND13,0:SOUND10,16:LOCATE(S-16)\8,K\8:PRINTVSELSEIFS=FTHENF=RND(1)*200+20:G=SGN(F-S)ELSEELSEIFA=2THENA=0:VPOKEB,0:V#=V#+VS 8 IFEANDA=1ANDABS(S-Q)<12ANDK\8=21THENN=1ELSEIFK<64ANDZ=0ANDA=1THENZ=1:X=S*10:C=K:VV=(Q*10-X)\((175-C)\3):SOUND2,255:SOUND9,15ELSEIFEANDZ=1ANDABS(Q-(X\10))<8ANDC\8=22THENN=1ELSEIFA=1ANDK>BBTHENBB=K:DATA14344,1010382844FEFE28000000384454FE38101010101010 9 A(L)=A:S(L)=S:D(L)=D:F(L)=F:G(L)=G:H(L)=H:J(L)=J:NEXTL:SOUND2,RND(1)*255:SOUND9,(BB+16)/13:LOCATE0,1:PRINTCHR$(27)+"L":LOCATERND(1)*29,1:PRINT"ø";:IFZ=1THENX=X+VV:C=C+3:PUTSPRITE20,(X\10,C),RND(1)*13+2,4:IFC>192THENZ=0:DATA1984,0000103810000000 10 LOCATE0,0:PRINTV#;:FORL=0TO3:L=TIME:NEXTL,N:SOUND8,0:SOUND9,0:SOUND12,200:SOUND13,1:SOUND10,16:VPOKE6914,5:TIME=0:FORN=0TO300:N=TIME:NEXTN:SOUND12,50:IFV#>R#THENR#=V#:GOTO3ELSE3:DATA14366,10100000103810000000105438FE385410007E42C3C3427E0000,8198,A1A1
( Description translated by Google Translate )
Note: this game was produced in basic to run under the Xbasic interpreter
machine: MSX2 or higher
1-------------------------------------
BLOAD"x.b",R // loads the Xbasic interpreter (only necessary for performance, the program works without this feature, to eliminate Xbasic just delete this command and the _TURBOON command on line 2
DEFINTA-Z // sets all numeric variables to integer type
Y=RND(-TIME) // defines the Randon seed by the computer clock
COLOR8,1,1 // sets the color red for text and black for the screen
SCREEN1,1,0 // define graphic text mode
WIDTH28 // defines 28 columns of text
KEYOFF // clears the display of the function keys
CLS // clean the screen
FORT=0TO5 // matches 6 characters for laser selection interface
B=200+T*8 // defines the character in the ASCII table
VPOKEBASE(5)+574+(T*32),B // prints the character at the screen position
FORY=0TO7 // matches the 8bytes of the character graph
VPOKEBASE(7)+B*8+Y,SGN(YMOD7)*126 // changes the character graph
NEXTY,T // closes the graphic layout of the laser selection interface
FORY=0TO13:READI:SOUNDY,I:NEXTY // configure the 3 audio channels
FORY=1TO22 // corresponds to the initial stars of the starfield
LOCATERND(1)*29,23 // draw position for printing on line 23
PRINT"ø" // prints star character
NEXTY fecha estrelas iniciais //
2------------------------------------- //
FORP=0TO6 // corresponds to sequences of bytes to be inserted in the VRAM
READH,V$ // loads Vram and String start address with Hex string
FORT=1TOLEN(V$)STEP2 // counts the length of the hex string string jumping in 2
VPOKEH,VAL("&H"+MID$(V$,T,2)) // prints in hex the hex value identified in the string fragment at address H
H=H+1 // update address to next byte
NEXTT,P // completes reading the string and starts a new sequence
COLOR=RESTORE // activates the rgb change of the color palette (The only justification for using MSX2 or> is the change of the palette)
_TURBOON // activates the Xbasic interpreter (this command only exists in the ORIGM_X.BAS version because MSXbasic does not recognize it)
DIMA(9),S(9),D(9),F(9),G(9),H(9),J(9) // prepares the matrix variables used in the UFOS algorithm
R#=0 // variable for the Record
DATA0,0,0,1,0,0,31,220,0,0,0,255,50,0,8228,07020707000570067000670071,8217,213141516171E1 // audio channel values , palette configuration and character colors
3------------------------------------- //
LOCATE12,11 // position for printing the title on the screen
PRINT"ORIGM" // prints the game title
FORN=0TO1 // counter N from 0 to 1
N=ABS(STRIG(0)) // value of N is defined by the state of the keyboard fire button (Space)
NEXTN // keep loop until N = 1
V#=0 // variable for the Score
LOCATE0,0 // position to print the score
PRINTV#;" " // prints score and sequence of spaces to delete the previous score
LOCATE20,0 // record printing position
PRINTR#; // prints record
FORN=19TO31 // corresponds to theUFOand shot sprite layers
PUTSPRITEN,(0,-17),0,0 // reposition the sprites off the screen
A(NMOD10)=0 // reset ufos states to inactive
NEXTN //
Q=124 // player X position
W=5 // selected laser
I=100 // UFOspam time
O=0 // amount ofUFOper wave
P=0 // wave counter
R=0 // laser status
Z=0 // UFOshot status
VPOKE6913,Q // position the player
VPOKE6914,1 // adjust the player sprite
VPOKE6916,173 // position the laser selector
FORN=0TO1 // starts gameplay loop
TIME=0 // starts computer clock counter
4------------------------------------- //
N=0 // keep gameplay loop
E=STICK(0) // reading the keyboard joystick status (arrows)
Q=Q+(-(E>1ANDE<5ANDQ<222)+(E>5ANDE<9ANDQ>16))*3 // calculates player movement
VPOKE6913,Q // updates the position of the player
E$=INKEY$ // keyboard reading
A$=CHR$(30) // character corresponding to the up arrow
B$=CHR$(31) // character corresponding to the down arrow
W=(W+6+(E$=A$)-(E$=B$))MOD6 // calculates laser selection
VPOKE6916,133+(W*8) // updates the position of the laser selection
I=(I+1)MOD(120\(P+1)) // ufos spam counter
IFE$=A$ORE$=B$THEN // checks whether the up or down keys have been pressed
SOUND0,255 // sets frequency on channel A
SOUND8,15 // sets volume on channel A
AA=1 // active beep status
ELSE
IFAA=1THEN // if active beep status
SOUND8,0 // cancels volume of channel A
AA=0 // beep status inactive
5------------------------------------- //
IFSTRIG(0)ANDR=0THEN // checks if keyboard shot was pressed and laser status is inactive
R=1 // active laser status
T=Q // set laser X position
Y=183 // set laser Y position
U=W+2 // set laser color
GOTO5 // execute line 5 again
ELSE
IFR>0THEN // if active laser status
Y=Y-24 // moves the laser up
IFY<0THEN // if the laser's Y position is less than 0
R=0 // laser status inactive
PUTSPRITE19,(0,-17) // erases laser sprite1
PUTSPRITE18,(0,-17) // erases laser sprite2
SOUND8,0 // cancels volume of channel A
ELSE
PUTSPRITE19,(T,Y-16),U,3 // prints laser sprite1
PUTSPRITE18,(T,Y),U,3 // prints laser sprite2
SOUND0,255-(Y+24) // sets frequency on channel A
SOUND8,(y+24)\13 // sets volume on channel A
DATA6912,AF7C010FADEC060F,8217,213141516171E1 // sprites attributes values ??and character colors
6------------------------------------- //
E=PEEK(&HF3E7)AND32 // checks if there was a collision between sprites
BB=0 // B channel volume regulator
//
FORL=0TO9 // UFOS controller loop
A=A(L):S=S(L):D=D(L):F=F(L):G=G(L):H=H(L):J=J(L) // transfer of values ??from ufos matrix variables to simple variables
// description of variables
A: status
S: X position
D: Y position
F: position X destination
G: increment of X
H: increasing Y
J: color
BL=31-L // UFOsprite layer calculation
B=6914+BL*4 // calculation of the position in the VRAM of the sprite attributes
S=S+G // movement X (S) ofUFOby increment G
VS=P+1 // UFOScore Value
IFI=0ANDA=0THEN // checks if the spawn time and if theUFOis inactive if yes, starts an ufo
I=1 // increment spawn counter to not create more than one ufo
A=1 // activeUFOstatus
S=RND(1)*200+20 // set random X position
D=80 // define Y position
F=S // equals target X position with current X position
G=0 // neutralizes the increment of movement in X
O=(O+1)MOD(2+P) // UFOquantity counter per wave
P=P-(O=0) // wave counter
J=PMOD6+2 // define the color of theUFOby the wave
H=(P*2)+1 // sets theUFOY movement increment (2 can regulate game difficulty)
IFP>29THEN // define the final wave
P=30 // keeps the final wave eternal
J=RND(1)*6+2 // makes eachUFOof the final wave a different color
7------------------------------------- //
IFA=1THEN // checksUFOactive status
D=D+H // UFOY movement
K=D/10 // UFOu position on the screen
PUTSPRITEBL,(S,K),J,2 // printsUFOsprite
IFK>192THEN // checks if theUFOcame out from under the screen
A=0 // disablesUFOstatus
ELSE
IFEANDR=1ANDABS(S-T)<8ANDABS(K-Y)<32ANDU=JTHEN verifica se houve colisão de sprite, status ativo do laser, e se oUFOestá dentro da área de colisão com o laser //
A=2 // explodingUFOstatus
VPOKEB,5 // explodingUFOsprite
SOUND13,0 // sets sound effect envelope
SOUND10,16 // triggers sound effect on channel C (set for noise on line1)
LOCATE(S-16)\8,K\8 // calculates position on the screen to print theUFOScore value
PRINTVS // printsUFOScore value
ELSE
IFS=FTHEN // checks whether the current X position of theUFOis equal to the target X position
F=RND(1)*200+20 // draw new position X destination
G=SGN(F-S) // calculates the increment for movement in X
ELSE
ELSE
IFA=2THEN // checkUFOstatus in explosion
A=0 // UFOstatus inactive
VPOKEB,0 // UFOsprite graphic is erased
V#=V#+VS // score is added to theUFOscore value
//
8------------------------------------- //
IFEANDA=1ANDABS(S-Q)<12ANDK\8=21THEN // checks if there was a sprite collision,UFOactive status, and if theUFOis within the collision area with the player
N=1 // ends the gameplay loop
ELSE
IFK<64ANDZ=0ANDA=1THEN // checksUFOY position on top of third of screen,UFOshot off status,UFOactive status
Z=1 // activeUFOshooting status
X=S*10 // sets X position of theUFOshot
C=K // sets Y position of the shot
VV=(Q*10-X)\((175-C)\3) // calculates X increment to move theUFOshot
SOUND2,255 // sets frequency on channel B
SOUND9,15 // sets volume on channel B
ELSE
IFEANDZ=1ANDABS(Q-(X\10))<8ANDC\8=22THEN // checks if there was a sprite collision, activeUFOshot status, and if theUFOshot is within the collision area with the player
N=1 // ends the gameplay loop
ELSE
IFA=1ANDK>BBTHEN // checks ufo's active status and whether ufo's Y position is greater than channel B's volume regulator
BB=K // volume regulator of channel B equalsUFOposition Y
DATA14344,1010382844FEFE28000000384454FE38101010101010 // graphic values ??of the sprites
//
9------------------------------------- //
A(L)=A:S(L)=S:D(L)=D:F(L)=F:G(L)=G:H(L)=H:J(L)=J // transfer of values ??from simple variables to variables in the ufos matrix
NEXTL // ends UFOS controller loop
SOUND2,RND(1)*255 // sets random frequency on channel B
SOUND9,(BB+16)\13 // sets volume on channel B
LOCATE0,1 // sets print position on line 1
PRINTCHR$(27)+"L" // insert line in line1
LOCATERND(1)*29,1 // sets random column printing on row1
PRINT"ø"; // prints star character
IFZ=1THEN // checks activeUFOshooting status
X=X+VV // updates X move fromUFOshot
C=C+3 // updates Y move fromUFOshot
PUTSPRITE20,(X\10,C),RND(1)*13+2,4 // printsUFOshot sprite with random color
IFC>192THEN // checks if theUFOshot went under the screen
Z=0 // UFOshot inactive status
DATA1984,0000103810000000 // star character chart values
10------------------------------------ //
LOCATE0,0 // sets print position on the screen
PRINTV#; // print score
FORL=0TO3 // loop to adjust the framerate
L=TIME // framerate adjustment
NEXTL,N // ends the framerate and gameplay loops
SOUND8,0 // mutes channel A
SOUND9,0 // mutes channel B
SOUND12,200 // increases the duration of the audio effect
SOUND13,1 // sets the audio effect
SOUND10,16 // triggers the audio effect on channel C
VPOKE6914,5 // changes the player's graphic to explosion
TIME=0 // reset computer clock count
FORN=0TO300 // 10 second pause loop
N=TIME // waiting 10 seconds
NEXTN // end loop pause
SOUND12,50 // returns the duration of the audio effect to the normal game
IFV#>R#THEN // checks if Score was higher than Record
R#=V# // Record equals Score
GOTO3 // go to line 3
ELSE3 // go to line 3
DATA14366,10100000103810000000105438FE385410007E42C3C3427E0000,8198,A1A1 // graphic values ??of sprites and yellow color for number characters
( Descrição original em Português )
Nota: este jogo foi produzido em basic para rodar sob o interpretador Xbasic
maquina: MSX2 ou superior
para jogar
use as setas do teclado:
esquerda e direita para mover a nave na horizontal
cima em abaixo para selecionar a cor do laser
use a barra de espaço para atirar
1-------------------------------------
BLOAD"x.b",R // carrega o interpretador Xbasic (só necessário para performance, o programa funciona sem esse recurso, para eliminar o Xbasic basta deletar esse comando e o comando _TURBOON na linha 2
DEFINTA-Z // define todas as variáveis numéricas para tipo inteiro
Y=RND(-TIME) // define a semente do Randon pelo clock do computador
COLOR8,1,1 // define a cor vermelha para texto e preto para a tela
SCREEN1,1,0 // define modo de texto gráfico
WIDTH28 // define 28 colunas de texto
KEYOFF // apaga o mostrador das teclas de função
CLS // apaga a tela
FORT=0TO5 // corresponde aos 6 caracteres para interface de seleção do laser
B=200+T*8 // define o caractere na tabela ASCII
VPOKEBASE(5)+574+(T*32),B // imprime o caractere na posição da tela
FORY=0TO7 // corresponde aos 8bytes do gráfico do caractere
VPOKEBASE(7)+B*8+Y,SGN(YMOD7)*126 // altera o gráfico do caractere
NEXTY,T // encerra o layout gráfico da interface de seleção do laser
FORY=0TO13:READI:SOUNDY,I:NEXTY // configura os 3 canais de áudio
FORY=1TO22 // corresponde às estrelas iniciais do starfield
LOCATERND(1)*29,23 // sorteia posição para impressão na linha 23
PRINT"ø" // imprime caractere de estrela
NEXTY fecha estrelas iniciais //
2------------------------------------- //
FORP=0TO6 // corresponde a sequencias de bytes a serem inseridos na VRAM
READH,V$ // carrega endereço inicial da Vram e String com sequência de Hexa
FORT=1TOLEN(V$)STEP2 // conta o comprimento da string de sequência de hexa pulando em 2
VPOKEH,VAL("&H"+MID$(V$,T,2)) // imprime na vram o valor hexa identificado no fragmento da string no endereço H
H=H+1 // atualiza endereço para próximo byte
NEXTT,P // completa a leitura da string e inicia nova sequencia
COLOR=RESTORE // ativa a mudança de rgb da paleta de cores (A única justificativa pra usar o MSX2 ou > é a alteração da paleta)
_TURBOON // ativa o interpretador Xbasic (este comando só existe na versão ORIGM_X.BAS pois o MSXbasic não o reconhece)
DIMA(9),S(9),D(9),F(9),G(9),H(9),J(9) // prepara as variáveis de matriz utilizadas no algoritmo dos UFOS
R#=0 // variável para o Recorde
DATA0,0,0,1,0,0,31,220,0,0,0,255,50,0,8228,07020707000570067000670071,8217,213141516171E1 // valores dos canais de áudio, configuração da paleta e cores dos caracteres
3------------------------------------- //
LOCATE12,11 // posição para impressão do título na tela
PRINT"ORIGM" // imprime o título do jogo
FORN=0TO1 // contador N de 0 a 1
N=ABS(STRIG(0)) // valor de N é definido pelo estado do botão de tiro do teclado (Space)
NEXTN // mantem o loop até N=1
V#=0 // variável para o Score
LOCATE0,0 // posição para impressão do score
PRINTV#;" " // imprime score e sequencia de espaços para apagar o score anterior
LOCATE20,0 // posição para impressão do recorde
PRINTR#; // imprime recorde
FORN=19TO31 // corresponde às camadas de sprites dos ufos e tiros
PUTSPRITEN,(0,-17),0,0 // reposiciona os sprites para fora da tela
A(NMOD10)=0 // zera os estados dos ufos para inativos
NEXTN //
Q=124 // posição X do player
W=5 // laser selecionado
I=100 // tempo de spam do ufo
O=0 // quantidade deUFOpor onda
P=0 // contador de ondas
R=0 // status do laser
Z=0 // status do tiro do ufo
VPOKE6913,Q // posiciona o player
VPOKE6914,1 // ajusta o sprite do player
VPOKE6916,173 // posiciona o seletor do laser
FORN=0TO1 // inicia loop do gameplay
TIME=0 // inicia contador do clock do computador
4------------------------------------- //
N=0 // mantem loop do gameplay
E=STICK(0) // leitura do estado do joystick do teclado (setas)
Q=Q+(-(E>1ANDE<5ANDQ<222)+(E>5ANDE<9ANDQ>16))*3 // calcula movimento do player
VPOKE6913,Q // atualiza a posição do player
E$=INKEY$ // leitura do teclado
A$=CHR$(30) // caractere correspondente à seta pra cima
B$=CHR$(31) // caractere correspondente à seta pra baixo
W=(W+6+(E$=A$)-(E$=B$))MOD6 // calcula seleção de laser
VPOKE6916,133+(W*8) // atualiza a posição da seleção do laser
I=(I+1)MOD(120\(P+1)) // contador de spam dos ufos
IFE$=A$ORE$=B$THEN // verifica se as teclas cima ou baixo foram pressionadas
SOUND0,255 // define frequência no canal A
SOUND8,15 // define volume no canal A
AA=1 // status de beep ativo
ELSE
IFAA=1THEN // se status de beep ativo
SOUND8,0 // cancela volume do canal A
AA=0 // status de beep inativo
5------------------------------------- //
IFSTRIG(0)ANDR=0THEN // verifica se tiro do teclado foi pressionado e status do laser é inativo
R=1 // status do laser ativo
T=Q // define posição X do laser
Y=183 // define posição Y do laser
U=W+2 // define cor do laser
GOTO5 // volta a executar a linha 5
ELSE
IFR>0THEN // se status do laser ativo
Y=Y-24 // movimenta o laser para cima
IFY<0THEN // se posição Y do laser for menor que 0
R=0 // status do laser desativo
PUTSPRITE19,(0,-17) // apaga sprite1 do laser
PUTSPRITE18,(0,-17) // apaga sprite2 do laser
SOUND8,0 // cancela volume do canal A
ELSE
PUTSPRITE19,(T,Y-16),U,3 // imprime sprite1 to laser
PUTSPRITE18,(T,Y),U,3 // imprime sprite2 to laser
SOUND0,255-(Y+24) // define frequência no canal A
SOUND8,(y+24)\13 // define volume no canal A
DATA6912,AF7C010FADEC060F // valores atributos dos sprites
6------------------------------------- //
E=PEEK(&HF3E7)AND32 // verifica se houve colisão entre sprites
BB=0 // regulador de volume do canal B
//
FORL=0TO9 // loop controlador dos UFOS
A=A(L):S=S(L):D=D(L):F=F(L):G=G(L):H=H(L):J=J(L) // transferência de valores das variáveis de matriz dos ufos para variáveis simples
// descrição das variáveis //
A,status //
S,posição X //
D,posição Y //
F,posição X destino //
G,incremento de X //
H,incremendo de Y //
J,cor //
BL=31-L // cálculo do layer do sprite do ufo
B=6914+BL*4 // cálculo da posição na VRAM dos atributos do sprite
S=S+G // movimento X (S) doUFOpelo incremento G
VS=P+1 // Valor de Score do UFO
IFI=0ANDA=0THEN // verifica se o tempo de spawn e se oUFOestá inativo caso sim, inicia um ufo
I=1 // incrementa contador de spawn para não criar mais de umUFO
A=1 // status doUFOativo
S=RND(1)*200+20 // define posição X aleatória
D=80 // define posição Y
F=S // iguala posição X destino com posição X atual
G=0 // neutraliza o incremento de movimentação em X
O=(O+1)MOD(2+P) // contador de quantidade deUFOpor onda
P=P-(O=0) // contador de ondas
J=PMOD6+2 // define a cor doUFOpela onda
H=(P*2)+1 // define o incremento de movimento Y doUFO(o 2 pode regular dificuldade do jogo)
IFP>29THEN // define a onda final
P=30 // mantem a onda final eterna
J=RND(1)*6+2 // faz cadaUFOda onda final com uma cor diferente
7------------------------------------- //
IFA=1THEN // verifica status ativo do ufo
D=D+H // movimento Y do ufo
K=D/10 // posição Y doUFOna tela
PUTSPRITEBL,(S,K),J,2 // imprime sprite do ufo
IFK>192THEN // verifica se oUFOsaiu por baixo da tela
A=0 // desativa o status doUFO
ELSE
IFEANDR=1ANDABS(S-T)<8ANDABS(K-Y)<32ANDU=JTHEN verifica se houve colisão de sprite, status ativo do laser, e se oUFOestá dentro da área de colisão com o laser //
A=2 // status doUFOem explosão
VPOKEB,5 // sprite doUFOem explosão
SOUND13,0 // define envelope de efeito sonoro
SOUND10,16 // dispara efeito sonoro no canal C (definido para ruídos na linha1)
LOCATE(S-16)\8,K\8 // calcula posição na tela para impressão do valor de Score do UFO
PRINTVS // imprime valor de Score do UFO
ELSE
IFS=FTHEN // verifica se a posição X atual doUFOé igual à posição X destino
F=RND(1)*200+20 // sorteia nova posição X destino
G=SGN(F-S) // calcula o incremento para movimento em X
ELSE
ELSE
IFA=2THEN // verifica status doUFOem explosão
A=0 // status doUFOinativo
VPOKEB,0 // gráfico do sprite doUFOé apagado
V#=V#+VS // score é somado pelo valor de Score do UFO
//
8------------------------------------- //
IFEANDA=1ANDABS(S-Q)<12ANDK\8=21THEN // verifica se houve colisão de sprite, status ativo do ufo, e se oUFOestá dentro da área de colisão com o player
N=1 // encerra o loop gameplay
ELSE
IFK<64ANDZ=0ANDA=1THEN // verifica posição Y doUFOem um terço de cima da tela, status desativado do tiro do ufo, status ativo do ufo
Z=1 // status do tiro doUFOativo
X=S*10 // define posição X do tiro do ufo
C=K // define posição Y do tiro
VV=(Q*10-X)\((175-C)\3) // calcula incremento de X para movimentar o tiro do ufo
SOUND2,255 // define frequencia no canal B
SOUND9,15 // define volume no canal B
ELSE
IFEANDZ=1ANDABS(Q-(X\10))<8ANDC\8=22THEN // verifica se houve colisão de sprite, status ativo do tiro do ufo, e se o tiro doUFOestá dentro da área de colisão com o player
N=1 // encerra o loop gameplay
ELSE
IFA=1ANDK>BBTHEN // verifica status ativo doUFOe se posição Y doUFOé maior que o regulador de volume do canal B
BB=K // regulador de volume do canal B se iguala à posição Y do ufo
DATA14344,1010382844FEFE28000000384454FE38101010101010 // valores gráficos dos sprites
//
9------------------------------------- //
A(L)=A:S(L)=S:D(L)=D:F(L)=F:G(L)=G:H(L)=H:J(L)=J // transferência dos valores de variáveis simples para variáveis na matriz dos ufos
NEXTL // encerra loop controlador dos UFOS
SOUND2,RND(1)*255 // define frequência aleatória no canal B
SOUND9,(BB+16)\13 // define volume no canal B
LOCATE0,1 // define posição de impressão na linha 1
PRINTCHR$(27)+"L" // insere linha na linha1
LOCATERND(1)*29,1 // define impressão em coluna aleatória na linha1
PRINT"ø"; // imprime caractere de estrela
IFZ=1THEN // verifica status ativo do tiro do ufo
X=X+VV // atualiza movimento X do tiro do ufo
C=C+3 // atualiza movimento Y do tiro do ufo
PUTSPRITE20,(X\10,C),RND(1)*13+2,4 // imprime sprite do tiro doUFOcom cor aleatória
IFC>192THEN // verifica se o tiro doUFOsaiu por baixo da tela
Z=0 // status inativo do tiro doUFO
DATA1984,0000103810000000 // valores do gráfico do caractere estrela
10------------------------------------ //
LOCATE0,0 // define posição de impressão na tela
PRINTV#; // imprime score
FORL=0TO3 // loop para regular o framerate
L=TIME // regulagem de framerate
NEXTL,N // encerra os loops de framerate e gameplay
SOUND8,0 // silencia o canal A
SOUND9,0 // silencia o canal B
SOUND12,200 // aumenta a duração do efeito de áudio
SOUND13,1 // define o efeito de áudio
SOUND10,16 // dispara o efeito de áudio no canal C
VPOKE6914,5 // altera o gráfico do player para explosão
TIME=0 // zera contagem do clock do computador
FORN=0TO300 // loop pausa de 10 segundos
N=TIME // esperando 10 segundos
NEXTN // encerra loop pausa
SOUND12,50 // volta a duração do efeito de áudio para o normal do jogo
IFV#>R#THEN // verifica se Score foi maior que Recorde
R#=V# // Recorde iguala a Score
GOTO3 // vai para a linha 3
ELSE3 // vai para a linha 3
DATA14366,10100000103810000000105438FE385410007E42C3C3427E0000,8198,A1A1 // valores gráficos de sprites e cor amarela para os caracteres de números
Status | Released |
Author | BASIC 10Liner |
Genre | Shooter |
Tags | 8-Bit, basic, basic10liner, MSX |
Leave a comment
Log in with itch.io to leave a comment.