★ APPLICATIONS ★ DIVERS ★ Uma “spriteadela” noCPC464 ★ |
Desenhador de sprites (Amstrad Magazine) | Applications Divers |
O CPC 464, apesar de mais limitado do que os seus sucessores, é um computador muito bem concebido e extremamente poderoso em todas as áreas com excepção de uma única: a dos gráficos. Com efeito o 464 apenas dispõe das vulgares instruções PLOT e DRAW, ignorando pura e simplesmente os sprites, as instruções FILL, ou instruções SCROLL, tão comuns em muitas máquinas da sua geração, e em quase todas as que lhe foram posteriores. Este artigo tem o intuito de rectificar a deficiência que apontámos, acrescentando cinco novas instruções ao BASIC do CPC 464. Na realidade, trata-se de acrescentar mesmo novas instruções ao BASIC através de algumas rotinas em assembler, e não de aproveitar pequenas sequências de POKE's e CALL's. A listagem 1, quando introduzida e executada, tornará disponiveis estas instruções, porém, antes de qualquer uma delas poder ser utilizada, tem de se activar o novo conjunto de instruções através de CALL 37000. As instruções agora adicionadas são as seguintes: SPRITEON, X, Y, Z - Só funciona em modo 0. X é a coordenada do eixo X (valor situado entre 0 e 143), Y é a coordenada do eixo Y (valor situado entre 0 e 183), e Z o número do sprite (1 a 15). Se algum destes valores não se encontrar dentro dos limites acima especificados, a rotina devolverá o controlo ao interpretador de BASIC, sem ter efectuado qualquer tarefa. SPRITEOFF,X,Y - Funciona em moldes idênticos aos da instrução SPRITEON retirando um sprite do ecrã em vez de o imprimir. Não é necessário indicar o número do sprite a retirar. FILL,X,Y,Z - X é a coordenada do eixo X, e Y a coordenada do eixo Y (utilizando ambas as coordenadas os valores já referidos em SPRITEON), indicando o valor Z a cor em que o preenchimento da área especificada deve ser efectuado. Esta instrução funciona em qualquer modo de vídeo. SCROLLU - Executa um scroll de uma linha para cima. SCROLLD - Executa um scroll de uma linha para baixo. Todas as novas instruções agora adicionadas necessitam de ter como perfi-xo o caracter “|”, comum aos comandos RSX, e conseguido através de SHIFT+"@". Este é o método que o programa interprete inclui para dizer ao CPC que os comandos novos existem sobre a forma de Extensões Residentes do Sistema. Depois de ter introduzido a listagem 1 no computador e de a ter executado correctamente, guarde o programa-máqui-na resultante através de SAVE “comandos”, b, 37000,500 e, sempre que necessitar destes comandos, carregue-os em memória através de 36999: LOAD “”: CALL 37000. A segunda listagem apresentada (listagem 2), é um editor de sprites que cria os códigos necessários para que estes posteriormente se possam reconstituir. Sem ele os dois primeiros comandos seriam quase inúteis. Assim, para concluir a sua nova pac-kage de gráficos conseguida em estilo de “faça você mesmo”, introduza e execute a listagem 2, e crie tantos spri-tes quantos desejar. Para esse efeito ser-lhe-à apresentada uma grelha com uma lista de cores de um lado e uma lista de comandos no topo. O cursor que pode ser movido na grelha - com o joystick 1, ou com as teclas de cursor -pode fixar ou apagar a cor, utilizando, respectivamente, a cor de tinta, ou cor de fundo, através da tecla “COPY”, ou do botão de disparo. Desenhar com este editor é relativamente simples: ao premir a tecla “COPY” ou ou botão de disparo do joystick, a célula ocupada pelo cursor aparece preenchida pela cor de tinta activa, voltando novamente à antiga cor de fundo depois de premida a mesma tecla, ou botão. Os comandos disponiveis no topo da grelha são os seguintes:
Utilizando todos estes comandos po-, demos desenhar e gravar em cassete inúmeros sprites, por mais complexos que estes possam ser. Posteriormente todos eles podem ser carregados em memória através de LOAD “”, e utilizados pelas instruções SPRITEON e SPRITEOFF, tal como referimos no inicio do artigo. A última listagem deste artigo (a listagem 3), é uma simples demonstração das instruções criadas. Para observar a demonstração, introduza a listagem em causa carregando de seguida as novas instruções em memória, através de 36999: LOAD “” : CALL 37000, e execute-a normalmente. Esta demonstração explica como usartodas as novas instruções. Contudo, a parte mais interessante é, sem dúvida, a demonstração das instruções directamente ligadas aos sprites. Utilizando uma das interrupções do Z80, as rotinas usadas conseguem movimentar o sprite no ecrã a uma velocidade constante, movendo-o um pouco e trazendo-o de novo ao lugar, conseguindo com isso o efeito de animação que permite, por exemplo, conceber “jogos de naves” em BASIC com uma velocidade satisfatória. Se, contudo, forem utilizados vários sprites e/ou forem deslocadas grandes porções de memória, o movimento torna-se irregular, podendo mesmo tornar-se muito pouco estético - ver a primeira demonstração de deslocação de sprites. Por outro lado, se se utilizar um número limitado de sprites e uma deslocação de, por exemplo, 1 pixel de cada vez, o movimento é extraordinariamente suave - ver a segunda demonstração de movimento de sprites. Para finalizar deve referir-se que os comandos FILL e SPRITEON pressupõem uma cor de fundo em caneta 0, sendo imprevisível o que poderá acontecer numa outra situação, em todo o caso isto não deve constituir problema de maior dado que, ao ligar o computador este utiliza imediatamente uma cor da caneta 0 como cor do papel.
|