Jump to content
vhzc

Knight Guy in Low Res World - platformer for atari 2600

Recommended Posts

Hi Guys. I'm new here and I want to share a game that I am developing.

 

It has 28 screens and is a 16k game. Is practically finished, I only have some room for corrections/debug.

 

I don't have a Harmony cart, so I would really appreciate if somebody could test this version on real hardware.

 

 

http://www.youtube.com/watch?v=cMClj5B85Vg

 

knightguy2018-10-28.bin <- Change the score system, now the score you receive when you leave a room is based both in the number of lives and the time.

 

knightguy2018-10-14.bin <- Corrects bug in screen 16

 

knightguy2018-10-07b.bin <- No music if Difficulty is set in A

knightguy2018-10-07.bin

knightguy2018-10-06.bin

 

knightguy-e1538882839912.png

 

 

 

Regards from Chile

Edited by vhzc
  • Like 10

Share this post


Link to post
Share on other sites

Welcome to AtariAge!

 

All I have to say is WOW. That is an impressive game you have there! I have to run to work in a few, but I will definitely be testing this out on my HarmonyCart. I have a few different versions of Atari 2600's I will be testing it on, as well.

 

The only thing I can say about possible improvements is to make the game song a little longer, at least the main one you hear most of the time. It gets a little bit repetitive after a minute or so. If you don't have room to do this, you could also add an option to mute the music, perhaps using one of the difficulty switches.

  • Like 1

Share this post


Link to post
Share on other sites

Welcome to AtariAge!

 

All I have to say is WOW. That is an impressive game you have there! I have to run to work in a few, but I will definitely be testing this out on my HarmonyCart. I have a few different versions of Atari 2600's I will be testing it on, as well.

 

The only thing I can say about possible improvements is to make the game song a little longer, at least the main one you hear most of the time. It gets a little bit repetitive after a minute or so. If you don't have room to do this, you could also add an option to mute the music, perhaps using one of the difficulty switches.

 

Hi

Thanks for your suggestion, the last version I added to the post (2018-10-07b) now includes the option to mute the music if Left Difficulty is set to A

  • Like 2

Share this post


Link to post
Share on other sites

 

Hi

Thanks for your suggestion, the last version I added to the post (2018-10-07b) now includes the option to mute the music if Left Difficulty is set to A

Reminds me as I programmed my first game, simple concept with a lot of different rooms. I absolutely love it, especially the seaweed/tentacle part! :)

Share this post


Link to post
Share on other sites

It looks pretty good. It's a matter of personal taste, but I'd prefer the knight to be a different color than the playfield, even if it's something subtle like a dark gray.

  • Like 2

Share this post


Link to post
Share on other sites

I followed this game on the zero page home-brew channel, very fun.

Did you make it in batari Basic? if so would you be open to sharing the code? I'm curious as to how you did some of the things.

 

Also if its bB then it should be in that forum. :P

  • Like 1

Share this post


Link to post
Share on other sites

Yes, I made it in Batari Basic, but for now I am not sharing the code, it is just my second game and I started with batari just two or three months ago, so surely it's not a pretty code. But I can tell you how I did the things that are you curious about.

Share this post


Link to post
Share on other sites

Playtested on both of my 4-switch consoles, no issues. I like this game, the difficulty ramps nicely, and it's not too hard at first. :-D

Edited by JeremiahK
  • Like 1

Share this post


Link to post
Share on other sites

How did you manage to squeeze so many rooms in 16k including code and graphics? From what i can tell your using Asymmetrical playfields, which use 1k of data each(192[number of scanlines is playfield height]*3[pf0,pf1,pf2]*2[left side, right side]). Doing the math, your a genius at making all those room fit in such a tight space! :)

 

Sent from my Z798BL using Tapatalk

Share this post


Link to post
Share on other sites

There is 28 screens/rooms in the game, but only 12 playfields, some playfilelds are simply re utilized without change and the other elements are modified, other are changed drawing PFHLines at the start of the level. One of the bugs that I had to correct was the right moment to use PFHlines, if I use incorrectly then the screen can jitter when the collision routine is on.

Edited by vhzc

Share this post


Link to post
Share on other sites

By default, there are only 11 playfield changes on the visible screen using bB, and only PF1 and PF2 are used (PF0 is a special case, and can only be used for screen borders). The playfield graphics for each screen should only take up 44 bytes each.

Share this post


Link to post
Share on other sites

By default, there are only 11 playfield changes on the visible screen using bB, and only PF1 and PF2 are used (PF0 is a special case, and can only be used for screen borders). The playfield graphics for each screen should only take up 44 bytes each.

 

Yes, there is a 12th line, but is only visible when the screen scrolls vertically.

Share this post


Link to post
Share on other sites

By default, there are only 11 playfield changes on the visible screen using bB, and only PF1 and PF2 are used (PF0 is a special case, and can only be used for screen borders). The playfield graphics for each screen should only take up 44 bytes each.

Can anyone please translate this to the assembly language equalivent pretty please? My understanding is there are {scanline} .byte statements for each of the playfield registers per {side}, per {room}. Also do you plan on doing a full release with box, manual, cart?

 

Sent from my Z798BL using Tapatalk

Share this post


Link to post
Share on other sites

Can anyone please translate this to the assembly language equalivent pretty please? My understanding is there are {scanline} .byte statements for each of the playfield registers per {side}, per {room}. Also do you plan on doing a full release with box, manual, cart?

 

Sent from my Z798BL using Tapatalk

 

The definition of the playfield looks like this:

 

playfield:

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

end

 

Every X represent a block of 4x8 pixels and the playfield is 32 blocks width and 11 blocks height. Every block can be an X (on) or a "." (off) so every block is a bit.

11x32=352

352/8=44

 

So every playfield should take 44bytes

Share this post


Link to post
Share on other sites

 

The definition of the playfield looks like this:

 

playfield:

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

end

 

Every X represent a block of 4x8 pixels and the playfield is 32 blocks width and 11 blocks height. Every block can be an X (on) or a "." (off) so every block is a bit.

11x32=352

352/8=44

 

So every playfield should take 44bytes

And this is what it looks like in assembly language:

PFData0   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000   .byte #%00010000PFData1   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000   .byte #%00000000PFData2   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000   .byte #%10000000
Am i missing something? Sorry if i'm derailing the topic, i can move it to it's own topic if you like. Edited by Heroes & Shadows

Share this post


Link to post
Share on other sites

You don't have to update the values of the PF registers if the playfield doesn't change on a particular line. The same playfield pixels will be displayed over and over again until the values in the PF registers is updated again. If this happens every 16 scanlines, then you can read from data tables that are significantly smaller than 192 entries each.

Share this post


Link to post
Share on other sites

I think there is a small bug between these two screens:

 

I lose a life although there is no clear enemy that may attack.

 

by the way, I think the original presentation screen was better, it has a medieval style.

 

 

knightguy2018-10-07b_1.png

 

 

knightguy2018-10-07b_2.png

Edited by devwebcl

Share this post


Link to post
Share on other sites

I think there is a small bug between these two screens:

 

I lose a life although there is no clear enemy that may attack.

 

by the way, I think the original presentation screen was better, it has a medieval style.

 

 

Hi. Thanks for locate and let me know about that bug. I updated the original post with a new release that corrects it.

 

About the presentation, there was a practical reason for the change: the original medieval-like title uses two sprites of 8x73 pixels and the new presentation uses only one sprite of 7x73.

Share this post


Link to post
Share on other sites

 

Hi. Thanks for locate and let me know about that bug. I updated the original post with a new release that corrects it.

 

About the presentation, there was a practical reason for the change: the original medieval-like title uses two sprites of 8x73 pixels and the new presentation uses only one sprite of 7x73.

 

Thanks for the quick answer... and now the bug is gone, although I haven't tested it in my Harmony yet.

Share this post


Link to post
Share on other sites

Any plans to upgrade it to a 32k game, with more screens? It wouldn't cost anything to add another 16k of rom if your planning on selling it https://atariage.com/store/index.php?l=product_detail&p=949.

Quote:

Legacy 2600 Board: Supports 4K, 8K Atari (F8), 16K Atari (F6), and 32K Atari (F4) bankswitching methods.

 

Melody Board: Supports all known bankswitching methods including SARA on-board RAM. Melody boards can be reprogrammed in the future if you'd like to order a new game or the author makes an update to the binary you send us.

 

Edited by Heroes & Shadows

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...