Jump to content

Leonardo Santiago

Members
  • Posts

    27
  • Joined

  • Last visited

Posts posted by Leonardo Santiago

  1. Hi everyone,

     

    I've been working on developing my programming skills, and with each new milestone, I strive to apply what I've learned to create a new game. This time was no different. My challenge was to create a one-line kernel with beautiful graphics for a simple and fun game under 4kb. I'm not sure if I achieved what I aimed for, but at least the game is almost done.

     

    I present to you Flippets:

     

    In a distant land, concealed within the mystical forests of the north, there exists a magical place known as the Mushroom Grove. In this enchanted realm, dwell the adorable Flippets, small green beings who serve as the guardians of the forest's secrets.

    One day, the Flippets decided to create an intriguing game to test their skills against each other. This game involved a special formation where all the Flippets stood aligned, except for one who turned away from the others. This small challenge became a fun tradition among the Flippets, known as "Find Me."

     

    The player takes on the role of a fearless Flippet explorer, embarking on an exciting journey to locate the Flippet who chose to turn their back to the group. Do you have the dexterity and keen insight required to find the intrepid Flippet? The Mushroom Grove awaits you, filled with mysteries and unparalleled fun!


    The idea of the game is to find the Flippet that is turned away from the others in a grid of 36 of them. To do this, the player needs to move the cursor below the Flippet and press the red button.

     

    In the first level, the player needs to find 5 Flippets sequentially within a total time of 50 seconds, which is relatively easy. In the second level, the Flippets start blinking, increasing the difficulty. In the third level, the mischievous Flippets change positions, so be careful not to make a mistake. Besides losing 5 points, you'll also lose 3 seconds from the clock. In the fourth level, they not only change positions but also blink. After that comes a bonus level, and everything repeats.

    Scoring:

     

    Found Flippet: 10 points
    Wrong selection: -5 points and -3 seconds on the clock
    At the end of the level, the remaining time is converted into points.
    In the bonus level:
    2 identical Flippets: 20 points
    3 identical Flippets: 90 points

    The DEMO has 7 levels to reach the end.

    There will be a 2-player mode, where the player who finds 50 Flippets first wins.


    The game is in the final debugging stage and we hope to release it soon.

     

    Have fun!

     

    flippets_demo.asm_dbg_f0ea9cc7.png.6870439247c3d57e725ee5eb23f587e6.png flippets_demo.asm_dbg_f0eacaef.png.e918a6caf8ac94904790318866936535.png flippets_demo.asm_dbg_f0ec0a72.png.2eb975b4c3ca339593ff747edb776529.png

     

    flippets_demo_001.bin

     

    Play Online

    • Like 11
  2. On 9/29/2022 at 10:58 AM, LatchKeyKid said:

    I'm late to the party but only recently (this Spring) got into 2600 retrogaming and even more recently discovered your game.  Great job!   I was hoping to ask you a question or two regarding the programming choices you made with the game.  I saw you used flicker and the same sprite for the cross shooting weapon, the jars, and the enemies.  Would it have instead been possible to use the ball sprite instead for the cross (admittedly forming a lower case t instead if you didn't use flicker to alternate the crossed portion via lengthening the ball width) or would using that take up too many cycles?   How would the game have changed if you had used the standard kernel instead (other than not allowing multiple enemy sprites on the same line other than doubling/tripling identical ones)?  I apologize if some of the questions seem basic (pun intended) or silly but I'm very new to 2600 programming.  Thanks in advance and great job!

    You are not late. All the subjects here are atemporal. 😁

     

    That was my first game, I was just figuring things out so I used DPC+ which was an easier development option.
    It would have been possible to use the ball as a cross, just like using the standard kernel, although it would have graphical limitations but the gameplay would be there. (using flicker on P1 or doubles)

     

    Nowadays, I would do it very differently, developing directly in assembly, but it's nice to have this game as a photograph of the "old Leonardo"😝

    • Like 2
  3. 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: contact@redbuttongames.com.br

     

    3d_front.thumb.png.b517be2ec3856a9257c2db6548f92cfb.png  Bruce.png.11a23321fa46c83561e9201c8acbfde7.png RazorsEdge.bas_dbg_add4e5c0.png.4edfebe944ebd0a1cbc6734f78c3f233.png 

     

    IMG_20220404_172102125_MF_PORTRAIT.jpg

    IMG_20220404_172639175.jpg

    • Like 16
  4. On 2/21/2021 at 9:55 AM, Leonardo Santiago said:

    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 (leocsantiago@yahoo.com.br) 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!

    K-Jo is about to be released! ?

    • Like 3
    • Thanks 1
  5.  

    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.

     

     

  6. 7 hours ago, Bomberman94 said:

    Games played well - fast and addictive! Sometimes I think the dot that occasionally blocks a way is a bit unfair/not avoidable. Maybe some more „bells and whistles“ and of course more levels and we are there ??

     

    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. ?

    • Like 4
  7. On 2/21/2021 at 9:55 AM, Leonardo Santiago said:

    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.

     

     

    Very limited demo version:

     

    • 10 levels
    • 4 cheeses on all levels
    • All available game challenges

     

    K-Jo_Demo.bin 4 kB · 1 download

     

    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

     

     

    Now a demo and an Exclusive Advertisement ?

    • Like 8
  8. 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 (leocsantiago@yahoo.com.br) 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

     

    • Like 18
  9. 2 hours ago, insertclevernamehere said:

    Cool, atmospheric looking game.  There's a lot of talk about this and other games I've checked out on here being given a physical release but not much detail in terms of where.  Through AtariAge store or are there many more physical releases I'm unaware of available elsewhere?  Directly through the forums?  I should "follow" the games I'm interested in and there will eventually be release details?  Not being a programmer and just a gamer, I've not really checked out the "programming" sections before.


    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.

    • Like 3
  10. 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.

     

     

     

    main.bas_dbg_74cc43eb.png

    main.bas_dbg_74cf347b.png

    main.bas_dbg_74d27130.png

    • Like 8
  11. 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.

    • Like 9
  12. 11 hours ago, slacker said:

    I really enjoyed the 2020_07_06 build of the game. The overall look and feel of the game is great. I was able to get the key to the big red door and after entering I was given a game over screen. I'm guessing that was the end of the build. :)

    Yes, it was the end of the demo. Was it hard to get there?

     

    11 hours ago, slacker said:

    One thing I did notice is that if I entered a room and there was no exit off the platform (pits surrounding where the player enters the room), you can jump down the pit if you have a life and then you'll spawn on the unreachable area of the screen on the other side of the pit.

     

    1 hour ago, ZeroPage Homebrew said:

    We didn't give it a try during our stream of the game but I saw that effect happen during one of our deaths and assumed it would spawn in a previously unreachable place on a platform screen.

     

    - James

    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!

     

    • Like 2
  13. 2 hours ago, MarcoJ said:

    Saw this on ZPH today. It's an exciting development. The detail on some of those playfield patterns is amazing. It has that "Castlevania factor" where I constantly want to explore new areas, who knows what is lurking. Keep on going...parabens Leo.

    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

    • Like 1
    • Thanks 1
  14. On 6/14/2020 at 12:09 AM, The Eyeball Mural said:

    I've played both demo roms so far. Here is my feedback:

     

    With both roms I have experienced screen rolling or vertical hold issues, running Stella 6.0. Maybe I need to update?

     

    The sprite for Bro. Sancti is well done and nicely animated. I do miss the "gradient" coloring from the earlier version however.

     

    I wonder if some of the holes or pits could be changed to solid obstructions, so that I don't always fall to my death when I make a mistake. Instead I could just be hindered by the obstruction. You could change the color from black to some other contrasting color and make them "no go" areas, with no need to change anything else. Then there would be two kinds of hazards, one dangerous, the other lethal. This would make the gameplay more diverse and nuanced, and less repetitive and less frustrating.

     

    I hope the sounds are developed further. They are basic and a tad harsh. I like the little bit of music. More music here and there would be good!

     

    I love the ghost and skull sprites. and their movement.

     

    I would like the game more if the navigation of the rooms was a tad less punishing, and the ghosts were a tad more challenging. The ghosts are usually not too tricky to deal with, while walking around is a bit like playing E.T.

     

    I think this game has much potential, and I am excited to see it develop. I am anxious to explore more rooms and meet that devil!

     

     

    Thanks for the feedback. 

     

    I'm trying to improve the rooms and turn them less frustrating.

     

    All the suggestions are good, I'll try some on this way. 

     

    For now, I have a new video made exclusively to Homebrew Brasil Facebook page.

     

     

    • Like 1
  15. 3 hours ago, vhzc said:

    The game looks cool!

    Nice concept and gameplay.

     

    I made a version of your label art in case you want to use it:

    unholy.png

     

    Really nice. I don't have artistic skills ... that I've done was my best. (haha)

     

    ?

  16. The YouTube videos was uploaded after I started the design. Firstly I was sharing some short videos and images on my Instagram. (Just some context)

     

    I think I found better sprites for Sancti, but it works better with a dark background than that colored one I have, but i think it's ok. About the Devil, I know I have to improve it, and the "final battle" also.

     

    The game has a good amount of screens (I thought better not say how much ...) but you have to pass each one at least twice to complete the journey, then the enemies have to be always there. You can "kill" them once, but they are ghosts, they can come back to disturb you again ... ? ... That was always the intention.

     

    Other considerations, what do you guys think about the score? Is it needed? ... Sometimes I miss it.

    monk.gif

    • Like 5
×
×
  • Create New...