SlideShare uma empresa Scribd logo
1 de 42
Baixar para ler offline
Retro Rio 2019
Desenvolvimento de jogos para MSX
Giovanni Nunes
O que você aprenderá nesta tarde?
Como o software para MSX costumava ser escrito.
Algumas ferramentas úteis para auxiliar no desenvolvimento.
Uma forma de organizar o código para facilitar a programação.
Desenvolvimento de jogos para MSX 2
O que você não aprenderá!
A linguagem assembly para Z80 ou qualquer outro processador.
Como funcionam as entranhas do MSX.
Uma receita mágica para escrever jogos em um click.
Desenvolvimento de jogos para MSX 3
Um pouco de história
Desenvolvimento de jogos para MSX 4
Como o software para MSX era escrito?
Desenvolvimento nativo
Contando apenas com um MSX, drive de disquetes e um assembler.
Em alguns casos tão somente o cartucho do Mega Assembler e um
gravador cassete.
Ou seja, programar, testar e depurar o código diretamente "no
metal".
A solução de custo mais baixo.
Desenvolvimento de jogos para MSX 5
Desenvolvimento cruzado
Escrever, depurar e, em alguns casos, executar o software
utilizando outro equipamento.
Mais complexo e também custoso (requer mais equipamentos).
Soa moderno mas foi mais comum do que imaginávamos.
HP 64000 Logic Development System.
Philips Microprocessor Development System.
Programmers Development System.
Desenvolvimento de jogos para MSX 6
Um pouco mais sobre o PDS
O PDS foi criado por Andy Glaister e outros em 1984 para o
desenvolvimento do jogo Skyline Attack para o Commodore 64 na
Argonaut Games.
Solução que permitia programar e desenhar usando um IBM PC e
enviar o resultado à máquina de destino para execução e
depuração.
A transferência era feita com hardware próprio que permitia a
interligação dos computadores utilizando um pequeno programa de
carga.
Desenvolvimento de jogos para MSX 7
Skyline Attack
Desenvolvimento de jogos para MSX 8
(continuação)
Porteriormente fundaram a PD Systems para comercializar a
solução.
Além de IBM PC, também se podia utilizar um Atari ST e em ambos
era possível conectar até dois computadores simultaneamente.
Fora o C64 o PDS também suportava o desenvolvimento para
Amstrad CPC, MSX, SAM Coupé e ZX Spectrum.
Desenvolvimento de jogos para MSX 9
(continuação)
Michael Archer liberou recentemente no GitHub o código fonte
das versões de C64 dos jogos Alien3, Altered Beast, Rampage e
outros. Todos desenvolvidos utilizando o PDS.
A versão de R-Type do ZX Spectrum, escrita por Bob Pape, foi
finalizada no PDS.
No livro IT'S BEHIND YOU ele conta como fez para conseguir um
PC-AT e o PDS para finalizar o jogo.
Desenvolvimento de jogos para MSX 10
Caixa de ferramentas
Desenvolvimento de jogos para MSX 11
Principais ferramentas
O conjunto básico é composto por três tipos de ferramentas:
Um editor de textos para escrever os programas.
O montador cruzado para gerar o código e
Um emulador para executá-lo.
Desenvolvimento de jogos para MSX 12
Editor de Programas
Atom https://www.atom.io
Utilize aquele no qual você se sente confortável, lembre-se que
passará bastante tempo nele.
Algumas vezes também uso o Vim.
Tem uma interface limpa, se integra com o git e pode ser extendido
facilmente.
Extensões recomendadas: editorconfig, language-z80asm,
minimap e pigments.
Desenvolvimento de jogos para MSX 13
Atom
Desenvolvimento de jogos para MSX 14
Montador cruzado
Pasmo http://pasmo.speccy.org/
Montador escrito em C++ por Julian Albo.
Monta código de Z80, suporta todos os opcodes (inclusive os
"secretos"), gera executáveis nativos de diversas plataformas.
Segue a sintaxe do Macro Assembler da Digital Research.
Tem uma documentação ruim e bugs curiosos.
É utilizado no desenvolvimento da C-BIOS.
Desenvolvimento de jogos para MSX 15
Emulador
OpenMSX http://openmsx.org/
Emula com perfeição, ou quase, os MSX, MSX2, MSX2+ e MSX
turbo R.
Para o básico a C-BIOS é mais que suficiente mas, cuidado, ela as
vezes se comporta de forma estranha.
Portanto, vale a pena ter um conjunto de ROM oficiais.
Ele te economiza tempo.
Desenvolvimento de jogos para MSX 16
Ferramentas de apoio
Calma que tem mais!
GNU Bash, GNU Make e outras ferramentas.
Git para controlar a versão do código.
Gimp, MSX Screen Converter e Tiny Sprite para os gráficos
Um pouco de Python e MSX-BASIC para o resto.
As vezes é necessário escrever programas para se escrever um
programa.
Desenvolvimento de jogos para MSX 17
Modelo de Desenvolvimento
Desenvolvimento de jogos para MSX 18
A experiência do Flappybird
Meu primeiro jogo escrito inteiramente em assembly.
Inicialmente em MSX-BASIC mas recebeu tantas rotinas em
linguagem de máquina que ficou mais fácil codificá-lo em
assembly.
A primeira versão pública era uma "tripa" com 1.500 linhas de
código!
Sem uma separação clara entre os componentes, acrescentar
ou remover funcionalidades é um pesadelo.
Desenvolvimento de jogos para MSX 19
Flappybird
Desenvolvimento de jogos para MSX 20
Pensando na arquitetura
O Model-View-Controller (MVC) é um padrão de arquitetura de
software onde representação da informação e interação do usuário
estão separadas.
Mas isto se adequaria ao desenvolvimento de jogos?
Create a Platformer Game with JavaScript - Full Tutorial, do
Frank Poth trabalhando com uma arquitetura de Controller,
Display, Game e Engine.
Game Architecture: Model-View-Controller do Koen Witters
trabalhando com o MVC tradicional.
Desenvolvimento de jogos para MSX 21
(continuação)
Acabei utilizando uma arquitetura um pouco mais simplificada.
Display : Contém tudo que efetivamente escreve na tela. É quem
inicializa o vídeo, desenha os tiles e posiciona os sprites.
Controller : Cuida de manipular os objetos dentro do jogo e da
interação entre eles.
Engine : Orquestra a lógica do jogo como um todo.
Enquanto escrevia esta apresentação comecei a considerar que
mover partes de Controller e Engine para criar Game uma boa
ideia.
Desenvolvimento de jogos para MSX 22
Colocando em prática
Comecei a adaptando o código da minha versão para MSX do
Scutlebutt mas modificar algo existente pareceu arriscado e
trabalhoso.
E se era para experimentar, então era melhor com um projeto
começado do zero.
Desenvolvimento de jogos para MSX 23
Nohzdyve
Desenvolvimento de jogos para MSX 24
Nohzdyve
No final de 2018 o episódio Black Mirror: Bandersnatch foi "ao ar"
e, entre os diversos easter eggs disponíveis, estava um jogo de ZX
Spectrum, o Nohzdyve.
Ele foi escrito por Matt Wescott seguindo as especificações do
mockup apresentado no episódio.
No jogo você está despencando do céu e deve colecionar os globos
oculares enquanto evitar as paredes dos prédios e outros
obstáculos.
Desenvolvimento de jogos para MSX 25
Nohzdyve em Black Mirror: Bandersnatch
Desenvolvimento de jogos para MSX 26
Tela de abertura
Desenvolvimento de jogos para MSX 27
Durante o jogo
Desenvolvimento de jogos para MSX 28
A versão de MSX
Baseado na versão de ZX Spectrum mas não é uma conversão
direta.
Exceto pelos gráficos, nada mais do jogo foi utilizado.
Jogo de 8 KiB disponível tanto em ROM como binário.
Requer MSX com o mínimo 16 KiB de memória RAM e pode ser
jogado por teclado ou joystick.
Desenvolvimento de jogos para MSX 29
Tela de Abertura
Desenvolvimento de jogos para MSX 30
Iniciando a queda
Desenvolvimento de jogos para MSX 31
Durante o jogo
Desenvolvimento de jogos para MSX 32
Fim do jogo
Desenvolvimento de jogos para MSX 33
Arquitetura do código
Componente Elementos
display/
Aircon Clothes Eyeball Man Screen Teeth Vase
Wall Window
controller/
Aircon Clothes Eyeball Man Score Screen Teeth
Vase Wall
engine/ Aircon Clothes Eyeball Man Teeth Vase
Desenvolvimento de jogos para MSX 34
Arquivos auxiliares
Arquivo Descrição
__binary.asm
Encapsula main() para criar a versão binária
(BLOAD)
__cartridge.asm Encapsula main() para criar a versão em ROM
__config.asm Permite configurar os parâmetros do jogo
__macros.asm Macros
__variables.asm "Variáveis" (arquivo gerado dinamicamente)
main.asm Função main() do programa
Desenvolvimento de jogos para MSX 35
Encapsuladores
Os arquivos "__binary.asm" e "__cartridge.asm" encapsulam a rotina
principal.
São eles que tem o conhecimento da estrutura de um BIN ou ROM.
Permite que outros formatos de distribuição sejam criados sem a
necessidade de alterações no código.
Desenvolvimento de jogos para MSX 36
Configuração
Uma forma de colocar em um único lugar os parâmetros do jogo.
Ajustanto o valor de SET_EYE_COLOR é possível definir se globos
oculares serão exibidos em duas cores (como no programa de TV)
ou com cores aleatórias (versão do speccy).
Desenvolvimento de jogos para MSX 37
Sobre as "variáveis"
Claro, não existem variáveis em assembly.
O que existem são os rótulos.
Você "aponta" um endereço de memória e usa para suas
necessidades.
O controle é manual, portanto passível de acidentes.
Para facilitar, criei uma notação para variáveis (inócua dentro do
Pasmo) e um programa para transformar isto no arquivo
"variables.asm".
Desenvolvimento de jogos para MSX 38
A função main()
main:
proc
include "__variables.asm"
call INITIO
call GICINI
call engine_init
__loop:
jr __loop
endp
include "controller/__main.asm"
include "display/__main.asm"
include "engine/__main.asm"
Desenvolvimento de jogos para MSX 39
Nohzdyve
Uma rápida passagem pelo código...
Desenvolvimento de jogos para MSX 40
Perguntas?
Desenvolvimento de jogos para MSX 41
E este é o fim!
Obrigado

Mais conteúdo relacionado

Mais procurados

Mini-curso de linux básico
Mini-curso de linux básicoMini-curso de linux básico
Mini-curso de linux básicoAdriano Melo
 
Tutorial do shell script para criar imagens de HDs Win7 usando Linux
Tutorial do shell script para criar imagens de HDs Win7 usando LinuxTutorial do shell script para criar imagens de HDs Win7 usando Linux
Tutorial do shell script para criar imagens de HDs Win7 usando LinuxLuiz Francisco Bozo
 
Windows 7 Por Welton Matos
Windows 7 Por Welton MatosWindows 7 Por Welton Matos
Windows 7 Por Welton MatosWelton Matos
 
Windows Vista - Sistema Operacional
Windows Vista - Sistema OperacionalWindows Vista - Sistema Operacional
Windows Vista - Sistema OperacionalAnderson Favaro
 
Jogos eletronicos
Jogos eletronicosJogos eletronicos
Jogos eletronicosrhayraerick
 
Caixa Mágica 15 Technology Preview
Caixa Mágica 15 Technology PreviewCaixa Mágica 15 Technology Preview
Caixa Mágica 15 Technology PreviewLuis Medinas
 
ISD 2015 - Interfaces de Games para Diferentes Telas
ISD 2015 - Interfaces de Games para Diferentes TelasISD 2015 - Interfaces de Games para Diferentes Telas
ISD 2015 - Interfaces de Games para Diferentes TelasPedro Kayatt
 
Alfa con 3 -sistemas-operacionais-caracteristicas
Alfa con 3 -sistemas-operacionais-caracteristicasAlfa con 3 -sistemas-operacionais-caracteristicas
Alfa con 3 -sistemas-operacionais-caracteristicasJane Cesca
 
Workshop Slackware 12.1 - Tiago Biazus
Workshop Slackware 12.1 - Tiago BiazusWorkshop Slackware 12.1 - Tiago Biazus
Workshop Slackware 12.1 - Tiago BiazusTchelinux
 
SP DevFest 2014 - Interfaces de Games para Diferentes Telas
SP DevFest 2014 - Interfaces de Games para Diferentes TelasSP DevFest 2014 - Interfaces de Games para Diferentes Telas
SP DevFest 2014 - Interfaces de Games para Diferentes TelasPedro Kayatt
 
Palestra Teched Brasil 2010 - Sessão INT301 - Linux no Hyper-V
Palestra Teched Brasil 2010 - Sessão INT301 - Linux no Hyper-VPalestra Teched Brasil 2010 - Sessão INT301 - Linux no Hyper-V
Palestra Teched Brasil 2010 - Sessão INT301 - Linux no Hyper-VGBanin
 
Instalando debian gnu linux 2.2 para intel x86
Instalando debian gnu linux 2.2 para intel x86Instalando debian gnu linux 2.2 para intel x86
Instalando debian gnu linux 2.2 para intel x86Alvaro Gomes
 

Mais procurados (16)

Mini-curso de linux básico
Mini-curso de linux básicoMini-curso de linux básico
Mini-curso de linux básico
 
Tutorial do shell script para criar imagens de HDs Win7 usando Linux
Tutorial do shell script para criar imagens de HDs Win7 usando LinuxTutorial do shell script para criar imagens de HDs Win7 usando Linux
Tutorial do shell script para criar imagens de HDs Win7 usando Linux
 
Windows 7 Por Welton Matos
Windows 7 Por Welton MatosWindows 7 Por Welton Matos
Windows 7 Por Welton Matos
 
Evolução games
Evolução gamesEvolução games
Evolução games
 
Windows Vista - Sistema Operacional
Windows Vista - Sistema OperacionalWindows Vista - Sistema Operacional
Windows Vista - Sistema Operacional
 
TotalCross Mini Curso
TotalCross Mini Curso TotalCross Mini Curso
TotalCross Mini Curso
 
Jogos eletronicos
Jogos eletronicosJogos eletronicos
Jogos eletronicos
 
Xtop Servers
Xtop ServersXtop Servers
Xtop Servers
 
Caixa Mágica 15 Technology Preview
Caixa Mágica 15 Technology PreviewCaixa Mágica 15 Technology Preview
Caixa Mágica 15 Technology Preview
 
ISD 2015 - Interfaces de Games para Diferentes Telas
ISD 2015 - Interfaces de Games para Diferentes TelasISD 2015 - Interfaces de Games para Diferentes Telas
ISD 2015 - Interfaces de Games para Diferentes Telas
 
Alfa con 3 -sistemas-operacionais-caracteristicas
Alfa con 3 -sistemas-operacionais-caracteristicasAlfa con 3 -sistemas-operacionais-caracteristicas
Alfa con 3 -sistemas-operacionais-caracteristicas
 
Workshop Slackware 12.1 - Tiago Biazus
Workshop Slackware 12.1 - Tiago BiazusWorkshop Slackware 12.1 - Tiago Biazus
Workshop Slackware 12.1 - Tiago Biazus
 
SP DevFest 2014 - Interfaces de Games para Diferentes Telas
SP DevFest 2014 - Interfaces de Games para Diferentes TelasSP DevFest 2014 - Interfaces de Games para Diferentes Telas
SP DevFest 2014 - Interfaces de Games para Diferentes Telas
 
Palestra Teched Brasil 2010 - Sessão INT301 - Linux no Hyper-V
Palestra Teched Brasil 2010 - Sessão INT301 - Linux no Hyper-VPalestra Teched Brasil 2010 - Sessão INT301 - Linux no Hyper-V
Palestra Teched Brasil 2010 - Sessão INT301 - Linux no Hyper-V
 
Instalando debian gnu linux 2.2 para intel x86
Instalando debian gnu linux 2.2 para intel x86Instalando debian gnu linux 2.2 para intel x86
Instalando debian gnu linux 2.2 para intel x86
 
Gentoo
GentooGentoo
Gentoo
 

Semelhante a Desenvolvimento de jogos para MSX

IntroduçãO Ao Xna Campus Party
IntroduçãO Ao Xna  Campus PartyIntroduçãO Ao Xna  Campus Party
IntroduçãO Ao Xna Campus PartyJosé Farias
 
Utilização da Engine de Jogos CryENGINE para o Desenvolvimento de Aplicativos...
Utilização da Engine de Jogos CryENGINE para o Desenvolvimento de Aplicativos...Utilização da Engine de Jogos CryENGINE para o Desenvolvimento de Aplicativos...
Utilização da Engine de Jogos CryENGINE para o Desenvolvimento de Aplicativos...Leonardo Dalmina
 
Evolução dos games e introdução ao desenvolvimento com unity
Evolução dos games e introdução ao desenvolvimento com unityEvolução dos games e introdução ao desenvolvimento com unity
Evolução dos games e introdução ao desenvolvimento com unityAnderson Molina
 
Palestra Introdução ao Game Design
Palestra Introdução ao Game DesignPalestra Introdução ao Game Design
Palestra Introdução ao Game DesignLeonardo Zamprogno
 
Palestra Game Engines para Windows 8
Palestra Game Engines para Windows 8Palestra Game Engines para Windows 8
Palestra Game Engines para Windows 8Felipe Pedroso
 
Slide blender 3 d apresentação
Slide blender 3 d apresentaçãoSlide blender 3 d apresentação
Slide blender 3 d apresentaçãoJosé Nascimento
 
Assembly para pc-25paginas
Assembly para pc-25paginasAssembly para pc-25paginas
Assembly para pc-25paginasMikeNandes
 
Palestra “UDK no Brasil e os Caminhos para Design e Desenvolvimento de games ...
Palestra “UDK no Brasil e os Caminhos para Design e Desenvolvimento de games ...Palestra “UDK no Brasil e os Caminhos para Design e Desenvolvimento de games ...
Palestra “UDK no Brasil e os Caminhos para Design e Desenvolvimento de games ...Impacta Eventos
 
Introdução ao Desenvolvimento de Jogos
Introdução ao Desenvolvimento de JogosIntrodução ao Desenvolvimento de Jogos
Introdução ao Desenvolvimento de JogosGabriel Giordano Medina
 
Advanced topics for game developers
Advanced topics for game developersAdvanced topics for game developers
Advanced topics for game developersjuliocoopergames
 
Motor de renderização
Motor de renderizaçãoMotor de renderização
Motor de renderizaçãovascocenoura
 
Curso (2010) - Desenvolvimento de Jogos 2D com XNA
Curso (2010) - Desenvolvimento de Jogos 2D  com XNACurso (2010) - Desenvolvimento de Jogos 2D  com XNA
Curso (2010) - Desenvolvimento de Jogos 2D com XNAKleber de Oliveira Andrade
 

Semelhante a Desenvolvimento de jogos para MSX (20)

Game programming
Game programmingGame programming
Game programming
 
Game programming
Game programmingGame programming
Game programming
 
IntroduçãO Ao Xna Campus Party
IntroduçãO Ao Xna  Campus PartyIntroduçãO Ao Xna  Campus Party
IntroduçãO Ao Xna Campus Party
 
Utilização da Engine de Jogos CryENGINE para o Desenvolvimento de Aplicativos...
Utilização da Engine de Jogos CryENGINE para o Desenvolvimento de Aplicativos...Utilização da Engine de Jogos CryENGINE para o Desenvolvimento de Aplicativos...
Utilização da Engine de Jogos CryENGINE para o Desenvolvimento de Aplicativos...
 
Evolução dos games e introdução ao desenvolvimento com unity
Evolução dos games e introdução ao desenvolvimento com unityEvolução dos games e introdução ao desenvolvimento com unity
Evolução dos games e introdução ao desenvolvimento com unity
 
Palestra Introdução ao Game Design
Palestra Introdução ao Game DesignPalestra Introdução ao Game Design
Palestra Introdução ao Game Design
 
Comparativo entre Engines de Jogos em 3d
Comparativo entre Engines de Jogos em 3dComparativo entre Engines de Jogos em 3d
Comparativo entre Engines de Jogos em 3d
 
Palestra Game Engines para Windows 8
Palestra Game Engines para Windows 8Palestra Game Engines para Windows 8
Palestra Game Engines para Windows 8
 
Slide blender 3 d apresentação
Slide blender 3 d apresentaçãoSlide blender 3 d apresentação
Slide blender 3 d apresentação
 
Inteligência Artificial em Jogos
Inteligência Artificial em JogosInteligência Artificial em Jogos
Inteligência Artificial em Jogos
 
X BOX 360
X BOX 360X BOX 360
X BOX 360
 
Assembly para pc-25paginas
Assembly para pc-25paginasAssembly para pc-25paginas
Assembly para pc-25paginas
 
Microsoft XNA
Microsoft XNAMicrosoft XNA
Microsoft XNA
 
Palestra “UDK no Brasil e os Caminhos para Design e Desenvolvimento de games ...
Palestra “UDK no Brasil e os Caminhos para Design e Desenvolvimento de games ...Palestra “UDK no Brasil e os Caminhos para Design e Desenvolvimento de games ...
Palestra “UDK no Brasil e os Caminhos para Design e Desenvolvimento de games ...
 
Introdução ao Desenvolvimento de Jogos
Introdução ao Desenvolvimento de JogosIntrodução ao Desenvolvimento de Jogos
Introdução ao Desenvolvimento de Jogos
 
Semcomp
SemcompSemcomp
Semcomp
 
Inteligência Artificial em Jogos
Inteligência Artificial em JogosInteligência Artificial em Jogos
Inteligência Artificial em Jogos
 
Advanced topics for game developers
Advanced topics for game developersAdvanced topics for game developers
Advanced topics for game developers
 
Motor de renderização
Motor de renderizaçãoMotor de renderização
Motor de renderização
 
Curso (2010) - Desenvolvimento de Jogos 2D com XNA
Curso (2010) - Desenvolvimento de Jogos 2D  com XNACurso (2010) - Desenvolvimento de Jogos 2D  com XNA
Curso (2010) - Desenvolvimento de Jogos 2D com XNA
 

Desenvolvimento de jogos para MSX

  • 1. Retro Rio 2019 Desenvolvimento de jogos para MSX Giovanni Nunes
  • 2. O que você aprenderá nesta tarde? Como o software para MSX costumava ser escrito. Algumas ferramentas úteis para auxiliar no desenvolvimento. Uma forma de organizar o código para facilitar a programação. Desenvolvimento de jogos para MSX 2
  • 3. O que você não aprenderá! A linguagem assembly para Z80 ou qualquer outro processador. Como funcionam as entranhas do MSX. Uma receita mágica para escrever jogos em um click. Desenvolvimento de jogos para MSX 3
  • 4. Um pouco de história Desenvolvimento de jogos para MSX 4
  • 5. Como o software para MSX era escrito? Desenvolvimento nativo Contando apenas com um MSX, drive de disquetes e um assembler. Em alguns casos tão somente o cartucho do Mega Assembler e um gravador cassete. Ou seja, programar, testar e depurar o código diretamente "no metal". A solução de custo mais baixo. Desenvolvimento de jogos para MSX 5
  • 6. Desenvolvimento cruzado Escrever, depurar e, em alguns casos, executar o software utilizando outro equipamento. Mais complexo e também custoso (requer mais equipamentos). Soa moderno mas foi mais comum do que imaginávamos. HP 64000 Logic Development System. Philips Microprocessor Development System. Programmers Development System. Desenvolvimento de jogos para MSX 6
  • 7. Um pouco mais sobre o PDS O PDS foi criado por Andy Glaister e outros em 1984 para o desenvolvimento do jogo Skyline Attack para o Commodore 64 na Argonaut Games. Solução que permitia programar e desenhar usando um IBM PC e enviar o resultado à máquina de destino para execução e depuração. A transferência era feita com hardware próprio que permitia a interligação dos computadores utilizando um pequeno programa de carga. Desenvolvimento de jogos para MSX 7
  • 9. (continuação) Porteriormente fundaram a PD Systems para comercializar a solução. Além de IBM PC, também se podia utilizar um Atari ST e em ambos era possível conectar até dois computadores simultaneamente. Fora o C64 o PDS também suportava o desenvolvimento para Amstrad CPC, MSX, SAM Coupé e ZX Spectrum. Desenvolvimento de jogos para MSX 9
  • 10. (continuação) Michael Archer liberou recentemente no GitHub o código fonte das versões de C64 dos jogos Alien3, Altered Beast, Rampage e outros. Todos desenvolvidos utilizando o PDS. A versão de R-Type do ZX Spectrum, escrita por Bob Pape, foi finalizada no PDS. No livro IT'S BEHIND YOU ele conta como fez para conseguir um PC-AT e o PDS para finalizar o jogo. Desenvolvimento de jogos para MSX 10
  • 11. Caixa de ferramentas Desenvolvimento de jogos para MSX 11
  • 12. Principais ferramentas O conjunto básico é composto por três tipos de ferramentas: Um editor de textos para escrever os programas. O montador cruzado para gerar o código e Um emulador para executá-lo. Desenvolvimento de jogos para MSX 12
  • 13. Editor de Programas Atom https://www.atom.io Utilize aquele no qual você se sente confortável, lembre-se que passará bastante tempo nele. Algumas vezes também uso o Vim. Tem uma interface limpa, se integra com o git e pode ser extendido facilmente. Extensões recomendadas: editorconfig, language-z80asm, minimap e pigments. Desenvolvimento de jogos para MSX 13
  • 15. Montador cruzado Pasmo http://pasmo.speccy.org/ Montador escrito em C++ por Julian Albo. Monta código de Z80, suporta todos os opcodes (inclusive os "secretos"), gera executáveis nativos de diversas plataformas. Segue a sintaxe do Macro Assembler da Digital Research. Tem uma documentação ruim e bugs curiosos. É utilizado no desenvolvimento da C-BIOS. Desenvolvimento de jogos para MSX 15
  • 16. Emulador OpenMSX http://openmsx.org/ Emula com perfeição, ou quase, os MSX, MSX2, MSX2+ e MSX turbo R. Para o básico a C-BIOS é mais que suficiente mas, cuidado, ela as vezes se comporta de forma estranha. Portanto, vale a pena ter um conjunto de ROM oficiais. Ele te economiza tempo. Desenvolvimento de jogos para MSX 16
  • 17. Ferramentas de apoio Calma que tem mais! GNU Bash, GNU Make e outras ferramentas. Git para controlar a versão do código. Gimp, MSX Screen Converter e Tiny Sprite para os gráficos Um pouco de Python e MSX-BASIC para o resto. As vezes é necessário escrever programas para se escrever um programa. Desenvolvimento de jogos para MSX 17
  • 19. A experiência do Flappybird Meu primeiro jogo escrito inteiramente em assembly. Inicialmente em MSX-BASIC mas recebeu tantas rotinas em linguagem de máquina que ficou mais fácil codificá-lo em assembly. A primeira versão pública era uma "tripa" com 1.500 linhas de código! Sem uma separação clara entre os componentes, acrescentar ou remover funcionalidades é um pesadelo. Desenvolvimento de jogos para MSX 19
  • 21. Pensando na arquitetura O Model-View-Controller (MVC) é um padrão de arquitetura de software onde representação da informação e interação do usuário estão separadas. Mas isto se adequaria ao desenvolvimento de jogos? Create a Platformer Game with JavaScript - Full Tutorial, do Frank Poth trabalhando com uma arquitetura de Controller, Display, Game e Engine. Game Architecture: Model-View-Controller do Koen Witters trabalhando com o MVC tradicional. Desenvolvimento de jogos para MSX 21
  • 22. (continuação) Acabei utilizando uma arquitetura um pouco mais simplificada. Display : Contém tudo que efetivamente escreve na tela. É quem inicializa o vídeo, desenha os tiles e posiciona os sprites. Controller : Cuida de manipular os objetos dentro do jogo e da interação entre eles. Engine : Orquestra a lógica do jogo como um todo. Enquanto escrevia esta apresentação comecei a considerar que mover partes de Controller e Engine para criar Game uma boa ideia. Desenvolvimento de jogos para MSX 22
  • 23. Colocando em prática Comecei a adaptando o código da minha versão para MSX do Scutlebutt mas modificar algo existente pareceu arriscado e trabalhoso. E se era para experimentar, então era melhor com um projeto começado do zero. Desenvolvimento de jogos para MSX 23
  • 25. Nohzdyve No final de 2018 o episódio Black Mirror: Bandersnatch foi "ao ar" e, entre os diversos easter eggs disponíveis, estava um jogo de ZX Spectrum, o Nohzdyve. Ele foi escrito por Matt Wescott seguindo as especificações do mockup apresentado no episódio. No jogo você está despencando do céu e deve colecionar os globos oculares enquanto evitar as paredes dos prédios e outros obstáculos. Desenvolvimento de jogos para MSX 25
  • 26. Nohzdyve em Black Mirror: Bandersnatch Desenvolvimento de jogos para MSX 26
  • 27. Tela de abertura Desenvolvimento de jogos para MSX 27
  • 28. Durante o jogo Desenvolvimento de jogos para MSX 28
  • 29. A versão de MSX Baseado na versão de ZX Spectrum mas não é uma conversão direta. Exceto pelos gráficos, nada mais do jogo foi utilizado. Jogo de 8 KiB disponível tanto em ROM como binário. Requer MSX com o mínimo 16 KiB de memória RAM e pode ser jogado por teclado ou joystick. Desenvolvimento de jogos para MSX 29
  • 30. Tela de Abertura Desenvolvimento de jogos para MSX 30
  • 31. Iniciando a queda Desenvolvimento de jogos para MSX 31
  • 32. Durante o jogo Desenvolvimento de jogos para MSX 32
  • 33. Fim do jogo Desenvolvimento de jogos para MSX 33
  • 34. Arquitetura do código Componente Elementos display/ Aircon Clothes Eyeball Man Screen Teeth Vase Wall Window controller/ Aircon Clothes Eyeball Man Score Screen Teeth Vase Wall engine/ Aircon Clothes Eyeball Man Teeth Vase Desenvolvimento de jogos para MSX 34
  • 35. Arquivos auxiliares Arquivo Descrição __binary.asm Encapsula main() para criar a versão binária (BLOAD) __cartridge.asm Encapsula main() para criar a versão em ROM __config.asm Permite configurar os parâmetros do jogo __macros.asm Macros __variables.asm "Variáveis" (arquivo gerado dinamicamente) main.asm Função main() do programa Desenvolvimento de jogos para MSX 35
  • 36. Encapsuladores Os arquivos "__binary.asm" e "__cartridge.asm" encapsulam a rotina principal. São eles que tem o conhecimento da estrutura de um BIN ou ROM. Permite que outros formatos de distribuição sejam criados sem a necessidade de alterações no código. Desenvolvimento de jogos para MSX 36
  • 37. Configuração Uma forma de colocar em um único lugar os parâmetros do jogo. Ajustanto o valor de SET_EYE_COLOR é possível definir se globos oculares serão exibidos em duas cores (como no programa de TV) ou com cores aleatórias (versão do speccy). Desenvolvimento de jogos para MSX 37
  • 38. Sobre as "variáveis" Claro, não existem variáveis em assembly. O que existem são os rótulos. Você "aponta" um endereço de memória e usa para suas necessidades. O controle é manual, portanto passível de acidentes. Para facilitar, criei uma notação para variáveis (inócua dentro do Pasmo) e um programa para transformar isto no arquivo "variables.asm". Desenvolvimento de jogos para MSX 38
  • 39. A função main() main: proc include "__variables.asm" call INITIO call GICINI call engine_init __loop: jr __loop endp include "controller/__main.asm" include "display/__main.asm" include "engine/__main.asm" Desenvolvimento de jogos para MSX 39
  • 40. Nohzdyve Uma rápida passagem pelo código... Desenvolvimento de jogos para MSX 40
  • 42. E este é o fim! Obrigado