De volta ao hello world.
Muito tempo atrás fiz um post sobre o Basiegaxorz, um compilador basic que permite programar jogos/programas para o Sega Mega Drive/Genesis e seus complementos, como o Sega CD e o 32X. O post em si era bem simplificado mas mostrava os comandos básicos do dialeto basic para manipular frases, a paleta de cor e a posição da letras. Nada muito complicado. Na época frisei que iria postar mais algum tutorial sobre a liguagem, expandindo o que havia sido feito.
Mas quem acompanha o blog já deve saber que não sou lá muito bom de cumprir promessas. O tempo passou, muitas coisas aconteceram e terminei por deixar o tutorial de programação para o Mega Drive/Genesis esquecido. Agora muito tempo depois tento remediar, um pouco, a situação. Não, este aqui não é o tutorial prometido, mas uma pequena idéia que já tenho há algum tempo - junto com a vontade de tirar a ferrugem do Basiegaxorz.
A premissa seria a criação de um adventure para o Mega Drive. Nada muito extravagante e cheio de pirotecnia. Apenas um jogo baseado no "modo texto/linha de comando" que se consegue com a manipulação de frases, laços de execução, paletas de cores e uma estória minimamente interessante. O que acredito ser teoricamente possível com uns poucos comando de print, ink e goto no Basiegaxorz. A título de informação um adventure basicamente é um estória "guiada". O jogador assume o papel de protagonista em uma ficção interativa. Um exemplo de adventure, ou melhor de graphic adventure na plataforma seria o jogo Snatcher, para o Sega CD.
O primeiro esqueleto de código. 30 minutos muito bem empregados..
As vantagens em se criar um jogo desta natureza seriam a simplicidade do código e o foco voltado na estória. Contudo, os aspectos negativos, tinha que existir alguma coisa em contrário ou não teria graça, seriam profundidade da estória elaborada, o gerenciamento de itens e a questão mais complicada de todas - a interface com o usuário. Abaixo segue um código de teste escrito e desenvolvido em um espaço de uns 30 minutos com o Basiegaxorz versão 1.37. Para testar basta copiar, colar na IDE do compilador, dar F5 e usar um emulador para ver o resultado.
Atenção: exceto pelas labels todo o resto deve ter um espaço ou TAB de distância da margem esquerda da tela para funcionar corretamente. Isso é exigência do compilador.
'teste de um adventure. teresina, 27 de novembro de 2010.
dim loc as integer
dim opt as integer
dim opt2 as integer
loc = 5
inicio:
'isso define os locais onde o jogador está
ink 1
if loc = 1 then
print " voce esta em frente ao cemiterio"
endif
if loc = 2 then
print " voce esta em frente ao hospital"
endif
if loc = 3 then
print " voce esta em frente a uma praca"
endif
if loc = 4 then
print " voce esta em frente ao ferro-velho"
endif
if loc = 5 then
print " voce esta em frente a prefeitura"
endif
if loc = 6 then
print " voce esta em frente ao armazem"
endif
if loc = 7 then
print " voce esta em frente a um shopping"
endif
if loc = 8 then
print " voce esta em frente a banco"
endif
if loc = 9 then
print " voce esta em frente ao lixao da cidade"
endif
tela_de_opcoes:
' a tela geral do jogo
ink 0
print ""
print " O que voce deseja fazer?"
print " 1 - Observar o lugar?"
print " 2 - vasculhar o lugar?"
print " 3 - ir para outro lugar"
input opt
if opt = 1 then
goto observar
endif
if opt = 2 then
goto vasculhar
endif
if opt = 3 then
goto ir
endif
if opt < 1 [or] opt > 3 then
'goto inicio
goto tela_de_opcoes
endif
observar:
' isso define o que o jogador vê em cada lugar
ink 1
if loc = 1 then
'cemitério
print " Esta escuro e voce escuta sons de grito longe."
goto tela_de_opcoes
endif
'hospital
if loc = 2 then
print " o hospital esta destruido."
goto tela_de_opcoes
endif
'praça
if loc = 3 then
print " a praca esta deserta"
goto tela_de_opcoes
endif
'ferro velho
if loc = 4 then
print " o lugar parece esta abandonado"
goto tela_de_opcoes
endif
'prefeitura
if loc = 5 then
print " parece uma zona de guerra"
goto tela_de_opcoes
endif
'armazém
if loc = 6 then
print " ninguem vem a este lugar faz tempo"
goto tela_de_opcoes
endif
'shopping
if loc = 7 then
print " o shopping foi arrasado"
goto tela_de_opcoes
endif
'banco
if loc = 8 then
print " o banco foi assaltado"
goto tela_de_opcoes
endif
'lixão
if loc = 9 then
print " muito lixo por toda parte."
goto tela_de_opcoes
endif
vasculhar:
' isso define o que o jogador encontra em cada lugar
ink 1
if loc = 1 then
'cemitério
print " existem covas abertas recentemente."
goto tela_de_opcoes
endif
'hospital
if loc = 2 then
print " tem sacos de corpos etiquetados por toda parte."
goto tela_de_opcoes
endif
'praça
if loc = 3 then
print " barricadas improvisadas fecham os acessos a a outras ruas."
goto tela_de_opcoes
endif
'ferro velho
if loc = 4 then
print " maquinario pesado e velho abandonado por toda parte"
goto tela_de_opcoes
endif
'prefeitura
if loc = 5 then
print " tem um mural com varias mensagens escritas."
goto tela_de_opcoes
endif
'armazém
if loc = 6 then
print " engradados e conteineres estao espalhados"
goto tela_de_opcoes
endif
'shopping
if loc = 7 then
print " varias lojas foram saqueadas."
goto tela_de_opcoes
endif
'banco
if loc = 8 then
print " o banco esta com as portas arrombadas."
goto tela_de_opcoes
endif
'lixão
if loc = 9 then
print " sacos de corpos e fogueiras estao por toda parte."
goto tela_de_opcoes
endif
ir:
' tela onde o jogo define para onde vai.
' cls
ink 1
print ""
print " para onde voce deseja ir?"
ink 0
print " 1 - cemiterio?"
print " 2 - hospital?"
print " 3 - praca?"
print " 4 - ferro-velho?"
print " 5 - prefeitura?"
print " 6 - armazem?"
print " 7 - shopping?"
print " 8 - lixao?"
input opt2
if opt2 = loc then
ink 2
print " voce ja esta neste lugar."
goto ir
endif
'cemiterio
if opt2 = 1 then
loc = 1
goto tela_de_opcoes
endif
'hospital
if opt2 = 2 then
loc = 2
goto tela_de_opcoes
endif
'praca
if opt2 = 3 then
loc = 3
goto tela_de_opcoes
endif
'ferro velho
if opt2 = 4 then
loc = 4
goto tela_de_opcoes
endif
'prefeitura
if opt2 = 5 then
loc = 5
goto tela_de_opcoes
endif
'armazém
if opt2 = 6 then
loc = 6
goto tela_de_opcoes
endif
'shopping
if opt2 = 7 then
loc = 7
goto tela_de_opcoes
endif
'banco
if opt2 = 8 then
loc = 8
goto tela_de_opcoes
endif
'lixao
if opt2 = 9 then
loc = 9
goto tela_de_opcoes
endif
if opt2 < 1 [or] opt2 > 9 then
goto ir
endif
Como é possível observar este esqueleto de código é funcional, mas apresenta o defeito em relação a interface que relatei acima. O uso do comando input engessa por demais o sistema e num jogo/programa mais longo simplesmente iria torrar a paciência do usuário. Obviamente isso tem de ser retrabalhado e como ainda estou em fase "pre-alpha" do código, posso me dar ao luxo de ficar com esta solução capenga por hora.
Bom não é exatamente um tutorial. Mas demonstra que não esqueci o Basiegaxorz. Também demonstra que que tenho interesse em criar algo para o Mega Drive, mas não espero ter algo pronto em pouco tempo. Ainda tenho de tirar a poeira e as teias de aranha dos comandos que aprendi. Caso alguém deseje se aventurar na criação de um adventure o site MSX Adventure é um uma boa pedida para começar.