Jump to content

Leonardo Santiago

New Members
  • Content Count

  • Joined

  • Last visited

Community Reputation

97 Excellent


About Leonardo Santiago

  • Rank
    Space Invader
  • Birthday 08/13/1981

Profile Information

  • Gender
  • Location
    São Carlos - SP - Brazil

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Hello everybody. Last Friday was the premiere of my new game "Razor's Edge" on the ZeroPage Homebrew channel. The game is a Beat'em Up style where the player controls Sarah Stone, a reporter and expert fighter who decides to rescue her sister Vanessa who was kidnapped by the evil David Scarblade's gang. Here is the story of the game. The game logic was done in bB but I made a custom kernel in Assembly so I could have the graphical elements I wanted, thanks to the rich tutorials by Andrew Davie, Darrell Spice, Jr. (SpiceWare), numerous tips from here on the forum and all the material provided by Duane Hahn (RandomTerrain) on his website. To create the game's soundtrack, I had the help of my friend Leandro Camara (Rally Racer and Zarkstars Saga) who majestically showed me the path to follow, allowing me to "compose" my own loops. Luciano Clemente was the official beta tester and for the graphic material I had Cláudia Maria (who made the drawings for K-Jo Chases the Cheese) For those who want to test the game, here is the small demo. Use the joystick to move the character to all sides. Button = Alternate punches Button + Up = Jump Kick Button + Down = Defense RazorsDemo.bin Play Razor's Edge on Javatari The game is finished and anyone who wants to buy it contact: [email protected]
  2. Wow. I've been away from the forum for some time and when I came back I saw this! ... Amazing! Nice score!!! For who are interested in the game, I increased the CIB copies from 50 to 80 and I have about 10 copies left. Send an email to [email protected]
  3. For about a month I have been studying a little bit of Assembly through the great material gathered on the Random Terrain website. (https://www.randomterrain.com/atari-2600-memories.html#assembly_language) Although I managed to create my own kernel, several parts of it I still don't understand. And instead of spending effort with such deep learning, I researched if it was possible to simply create a kernel for batariBasic and continue programming in bB. I found this post which presents a way to use a custom kernel. With some modifications I got to this version below. It's a 2LK and I'm trying to use the same variables as bB to control the players, but this is the problem: I can't (I don't have enough knowledge) use the players pointer correctly. Could anyone clarify my ideas? Player0Draw = $A4 ; I'm not using the vars (0-47) Player1Draw = $A5 BackgroundPtr = $A6 ; $A7 .customdrawscreen custom_eat_overscan ;bB code runs during overscan. We wait for overscan to finish so the ;frame timing doesn't get screwed up. lda INTIM bmi custom_eat_overscan custom_do_vertical_sync ;just a standard vsync lda #2 sta WSYNC ;one line with VSYNC sta VSYNC ;enable VSYNC sta WSYNC ;one line with VSYNC sta WSYNC ;one line with VSYNC lda #0 sta WSYNC ;one line with VSYNC sta VSYNC ;turn off VSYNC custom_setup_vblank_timing ;use bB timing variables so it should work with both PAL and NTSC ifnconst vblank_time lda #42+128 else lda #vblank_time+128 endif sta TIM64T ; feel free to throw useful pre-kernel code in here, so long as it ; completes before vblank is over. custom_eat_vblank ;wait for vblank to complete lda INTIM bmi custom_eat_vblank lda #0 sta WSYNC sta VBLANK custom_setup_visible_timing ;my preference is to use TIM64T to ensure a full screen is drawn. lda #230 sta TIM64T ;------------------------------------------------------------------------------ ; Desenha a parte superior da tela ; 192 - 22 scanlines = 192 - (11*2) = 170 lda #$02 ; Cor cinza no PF sta COLUPF ; COR no PF lda #1 ; sta CTRLPF ; Liga o REFLECT ldx #11 UpperSection: sta WSYNC lda customPFPattern,x sta PF0 sta PF1 sta PF2 lda customPFColor,x sta COLUBK sta WSYNC dex bne UpperSection stx PF0 stx PF1 stx PF2 ; y position lda #80 adc player0height sbc player0y sta Player0Draw ;------------------------------------------------------------------------------ ;-- AREA DE JOGO ;------------------------------------------------------------------------------ ; Desenha a área de jogo ; 170 - 160 scanlines = 170 - (80*2) = 10 (base ... not implemented) ldy #80 ; Carrega o y com o tamanho da área de jogo KernelLoop: ; 15 - todal de 15 ciclos, vindos do bne KernelLoop ; Continuação da segunda linha do 2LK ; precalcula os dados usados na primeiralinha do 2LK lda player0height ; 2 17 - altura do Player0 - IMPORTANTE!! este valor deve ser altura-1 dcp Player0Draw ; 5 22 - Decrementa Player0Draw e compara com a altura bcs DoDrawGrp0 ; 2 24 - (3 25) se o Carry estiver setado, player0 está na scanline atual lda #0 ; 2 27 - caso contrário, desliga o player0 .byte $2C ; 4 31 - $2C = BIT with absolute addressing, trick that ; causes the lda (HumanPtr),y to be skipped DoDrawGrp0: ; 25 - 25 ciclos do pior caso na linha bcs DoDrawGrp0 lda (player0pointer),y ; 5 30 - carrega o formato do player0 <<----------------------------- It's not working sta WSYNC ; 3 33 - Aguarda o fim da scanline ;------------------------------------------------- ; começo da primeira linha do 2LK sta GRP0 ; 3 3 - @ 0-22, desenha o player0 efetivamente (entre os ciclos 0 e 22) lda (BackgroundPtr),y ; 5 8 - Atualizo a linha do BG sta COLUBK ; 3 11 - guardo o valor do BG no resitrador COLUPF lda (player0color),y ; 5 16 - Pega a cor do Player0 sta COLUP0 ; 3 19 - seta a cor do Player0 ; todo esse código acima precisa estar entre o ciclo 0 e 22 ; para adicionar mais alguma coisa neste scanline, é preciso liberar algo acima ; sobraram apenas 3 ciclos ... é possível ainda colocar algum padrão de PF em PF1 e PF2 ;-------------------------------------------------- ; pre calcula os dados necessáriso para a segunda linha do 2LK ; lda player1height ; 2 21 - altura do Player0 - IMPORTANTE!! este valor deve ser altura-1 ; dcp player1y ; 5 26 - Decrementa Player1Draw e compara com a altura ; bcs DoDrawGrp1 ; 2 28 - (3 18) se o Carry estiver setado, player1 está na scanline atual ; lda #0 ; 2 31 - caso contrário, use 0 para desligar o player1 ; .byte $2C ; 4 35 - $2C = BIT with absolute addressing, trick that ; causes the lda (BoxPtr),y to be skipped DoDrawGrp1: ; 28 - 28 ciclos vindo do bcs DoDrawGRP1 ; lda (player1pointer),y ; 5 32 - Carrega a aparencia do player1 sta WSYNC ; 3 35 - Aguarda o inicio de uma nova scanline ;--------------------------------------- ; inicio da segunda linha do 2LK ; sta GRP1 ; 3 3 - @0-22, desenha o player1 efetivamente (entre os ciclos 0 e 22) ; lda (player1color),y ; 5 8 - Pega a cor do Player1 ; sta COLUP1 ; 3 11 - seta a cor do Player1 ; todo o codigo acima precisa estar entre os ciclos 0 e 22. ; ainda há 11 ciclos sobrando, talvez um playfield ou ball, ou missile ; possa entrar aqui neste ponto. dey ; 2 13 - decrementa o y bne KernelLoop ; 2 15 - se não for igual a zero, pula plá pra cima ;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------ sty COLUBK custom_eat_visible ;wait for the visible display to complete lda INTIM bne custom_eat_visible custom_setup_overscan_timing ifnconst overscan_time lda #35+128 else lda #overscan_time+128-3-1 endif sta TIM64T lda #%11000010 sta WSYNC sta VBLANK ;bB macro to return from a bank-switch gosub or from a regular gosub. RETURN customPFPattern .byte %11011001 .byte %11111111 .byte %11011001 .byte %11001001 .byte %11011111 .byte %11011001 .byte %11011001 .byte %11001001 .byte %01001001 .byte %01001001 .byte %01001001 .byte %01001001 .byte %11001001 .byte %00001000 .byte %00001000 .byte %11001001 .byte %11011001 customPFColor: .byte $00, $AA, $00, $AA, $00, $AA, $00, $AA, $00, $AA, $00, $AA, $00 Thanks in advance.
  4. This is just a demo, the full game has a total of 60 levels and was designed to fit in 4kb. I have only 16 free bytes. 😁
  5. Hi everyone. I have been working on a game with only 4k that was challenging, fun and that looked like games from the 70s and 80s. So "K-Jo chases the cheeses" was born! The biggest challenge was to put all the concepts imagined in just 4kb, using batariBasic as the main programming language. For that I had to adapt some functions, rewriting them in Assembly, which made me learn more about the language and optimized the game in size and performance. There are 60 stages with 10 different mazes. Every 10 stages, the color of the walls changes, characterizing a new house. There are 6 houses with 10 stages each, totaling 60 stages. The amount of cheese to be collected starts at 4 (at the first stage), and at each new house (10 stages) is increased by one. The time you have to complete the stage is always the same: 40 seconds. [ UPDATE ] Hi guys! K-Jo chases the cheeses will be released here in Brazil. If you are interested in the game, please send me an email ([email protected]) so that I can put your name on a pre-order list. As soon as the game is officially released I will contact you. Please put as subject the word "K-Jo". Thanks! [ UPDATE ] Very limited demo version: 10 levels 4 cheeses on all levels All available game challenges K-Jo_Demo.bin or Play K-Jo on Javatari Advertisement : Promotional Vídeo: You can also watch James and Tanya playing the full version at ZeroPage Homebrew. Leo
  6. Very cool! I hope you're playing and drinking one of those wines back there. 🤪
  7. Thank you! Unholy will be distributed by AtariAge soon. It was scheduled to be released at the end of last year, but due to the large volume of games, we prefer to release it earlier this year. It will soon be published in the store.
  8. Man, I can't believe we had the same idea in the mechanics of our games! LOL! 😄 😅 This is the "K-Jo in: Chasing the cheese" that is about to be released here in Brazil. I've been working on it since September and is currently in the "Release Candidate 01" version. I will make a topic of it soon.
  9. Very nice! Great job on the music, the graphics and the gameplay as well! 😁
  10. What's up guys? I returned to the topic to inform that the game is finished!! 😁😆 I am trying to release the game later this year. Thanks to everyone who helped me during development.
  11. Yes, it was the end of the demo. Was it hard to get there? Well, I'd left it as a punishment, or an advantage, depending the way you are navigating, but now I changed, if you are on that unreachable place and die for any reason, you start over on the center of the screen (sometimes the enemies could be there also 😁) I also fixed that line count issue and I'm improving the performance. Thanks for the feedback!
  12. Thanks a lot. Castlevania was one of my references when I started this project. I love this kind of game. Your game is amazing too. You almost forget you are playing on an Atari 2600. Obrigado Marco
  • Create New...