Jump to content
IGNORED

My 7800 Vertical Shooter - Heofonfīr


Recommended Posts

I finally decided to announce something that I have been working on: Heofonfīr. (O. E. for Heaven Fire)

Genre: Space Shooter (Vertical)

Levels: 5

 

I was thinking about Sting's Baroque spinoff called Baroque Shooting, and decided to do something similar for the 7800. So, I decided to re-read Steve Engelhart's 7800Basic tutorials, and started to code. However, I hit numerous roadblocks during the process, such as figuring out how to do vertical scrolling, enemies that attack, power-ups, bosses, endings, and other things not covered in the 7800 Basic tutorial. To prove that I am not pulling people's chains, I'll even post some of my graphics.

heofonfir_fyryrblaest.png

heofonfir_grass_stage.png

heofonfir_push_fire_banner.png

heofonfir_stone_stage.png

heofonfir_tallfont.png

Update: Functioning ROM file can be found in the last two posts. After loading it up in your favorite emulator, push fire and try it out.

 

Update 02: The latest version of the ROM can be found in the latest post.

Edited by SlidellMan
Finally got a functioning ROM file.
  • Like 16
Link to comment
Share on other sites

13 hours ago, Jinks said:

Cool will be excited to see more.  As I can not think of any other vertical shooters besides Plutos and Xevious. 

 

Moon Cresta, Space Invaders, Meteor Shower, Astro Blaster, Astro Fighter...  :ponder: 

Ok, you meant *moving* vertical shooters.

 

@SlidellMan Graphics look interesting!  It will be nice to see them in context! :) *subscribes to thread

Edited by PacManPlus
  • Thanks 1
Link to comment
Share on other sites

30 minutes ago, PacManPlus said:

Moon Cresta, Space Invaders, Meteor Shower, Astro Blaster, Astro Fighter...  :ponder: 

Ok, you meant *moving* vertical shooters.

 

@SlidellMan Graphics look interesting!  It will be nice to see them in context! :) *subscribes to thread

Yeah that is what I mean. A vertical scrolling shooter.

 

Sorry if this sounded unappreciative of any of your work as I absolutely think you have provided a ton of great games to the 7800 both ports and originals. :)

 

Link to comment
Share on other sites

I have been working on this for over a week, and normally I keep my projects under wraps. However, I decided to start this thread just to keep myself motivated to see this to completion. Here's the original file before I decided to rewrite it into something more manageable. You guys are free to look at this just to see what I got right and what I have got wrong.

main.heofonfir.bas

  • Like 3
Link to comment
Share on other sites

Don't worry people, I am still working on this game. Example:

character_select
if joy0left then plotchars 'Lucelia Iustitia' 0 
else if joy0right then plotchars 'Aeris Vis' 0 
if joy0fire then 
return

; Player movement
if joy0up then angel1_y=angel1_y-1:joyposup=1:joyposdown=0:joyposleft=0:joyposright=0
else if joy0down angel1_y=angel1_y+1:joyposup=0:joyposdown=1:joyposleft=0:joyposright=0
if joy0left then angel1_x=angel1_x-1:joyposup=0:joyposdown=0:joyposleft=1:joyposright=0
else if joy0right then angel1_x=angel1_x+1:joyposup=0:joyposdown=0:joyposleft=0:joyposright=1
if joy0fire0 then bullet_y=bullet_y-8
else if !joy0fire0 then bullet_y=0
if joy0fire1 then leohtning_y=leohtning_y-12
else if !joy0fire1 then leohtning_y=0
if joy0fire1 then fyryrblaest_y=fyryrblaest_y-10
else if !joy0fire1 then fyryrblaest_y=0
if joy0fire1 then yicel_y=yicel_y-8
else if !joy0fire1 then yicel_y=0

if joy0up then angel2_y=angel2_y-1:joyposup=1:joyposdown=0:joyposleft=0:joyposright=0
else if joy0down angel2_y=angel2_y+1:joyposup=0:joyposdown=1:joyposleft=0:joyposright=0
if joy0left then angel2_x=angel2_x-1:joyposup=0:joyposdown=0:joyposleft=1:joyposright=0
else if joy0right then angel2_x=angel2_x+1:joyposup=0:joyposdown=0:joyposleft=0:joyposright=1
if joy0fire0 then bullet_y=bullet_y-8
else if !joy0fire0 then bullet_y=0
if joy0fire1 then leohtning_y=leohtning_y-12
else if !joy0fire1 then leohtning_y=0
if joy0fire1 then fyryrblaest_y=fyryrblaest_y-10
else if !joy0fire1 then fyryrblaest_y=0
if joy0fire1 then yicel_y=yicel_y-8
else if !joy0fire1 then yicel_y=0

if joy1up then angel1_y=angel1_y-1:joyposup=1:joyposdown=0:joyposleft=0:joyposright=0
else if joy1down angel1_y=angel1_y+1:joyposup=0:joyposdown=1:joyposleft=0:joyposright=0
if joy1left then angel1_x=angel1_x-1:joyposup=0:joyposdown=0:joyposleft=1:joyposright=0
else if joy1right then angel1_x=angel1_x+1:joyposup=0:joyposdown=0:joyposleft=0:joyposright=1
if joy1fire0 then  bullet_y=bullet_y-8
else if !joy1fire0 then bullet_y=0
if joy0fire1 then leohtning_y=leohtning_y-12
else if !joy0fire1 then leohtning_y=0
if joy0fire1 then fyryrblaest_y=fyryrblaest_y-10
else if !joy0fire1 then fyryrblaest_y=0
if joy0fire1 then yicel_y=yicel_y-8
else if !joy0fire1 then yicel_y=0

if joy1up then angel2_y=angel2_y-1:joyposup=1:joyposdown=0:joyposleft=0:joyposright=0
else if joy1down angel2_y=angel2_y+1:joyposup=0:joyposdown=1:joyposleft=0:joyposright=0
if joy1left then angel2_x=angel2_x-1:joyposup=0:joyposdown=0:joyposleft=1:joyposright=0
else if joy1right then angel2_x=angel2_x+1:joyposup=0:joyposdown=0:joyposleft=0:joyposright=1
if joy1fire0 then  bullet_y=bullet_y-8
else if !joy1fire0 then bullet_y=0
if joy0fire1 then leohtning_y=leohtning_y-12
else if !joy0fire1 then leohtning_y=0
if joy0fire1 then fyryrblaest_y=fyryrblaest_y-10
else if !joy0fire1 then fyryrblaest_y=0
if joy0fire1 then yicel_y=yicel_y-8
else if !joy0fire1 then yicel_y=0

 

  • Like 2
Link to comment
Share on other sites

For some befuddling reason, I tried to compile what I have written so far, and got an unrecognized keyword error with collisionwrap. As in, Error: Unknown Keyword. Just how do I correct this?

Edited by SlidellMan
Added a much-needed question.
Link to comment
Share on other sites

Ah, I see. Earlier I was looking at your excerpt, and didn't notice you posted the whole file earlier.

 

7800basic (and bB, and assembly) requires white-space before commands. I.e. you need a space or tab before any command. If there's no white-space, then the thing that's against the left-margin is considered to be a label. So your source code presently has a bunch of commands that the parser thinks are labels.

 

Also, "else" doesn't work on a brand new line - it needs to be part of the original "if" line.

 

  • Like 1
Link to comment
Share on other sites

Noted, and just did it. However, I don't have even a pre-alpha ROM on account of:

Quote
Complete.
 
Cartridge data file must be at least 4K!


 
7800header 0.10 May  7 2020 22:32:58
*** ERROR: The file size of c:\Users\Shane\Documents\my7800projects\Heofonfir\heofonfir_main_rewrite.bas.bin is 0 bytes.
 
7800makecc2 v0.1
  *** ERROR: The file size of c:\Users\Shane\Documents\my7800projects\Heofonfir\heofonfir_main_rewrite.bas.bin is 0 bytes.

That was when I was trying to compile, but considering that it isn't anywhere near finished...

Link to comment
Share on other sites

The very bottom of the compile messages won't be helpful, as they'll just summarise what happened with the header being added, and the cart being updated to CC2 format if required. Scroll up and there will probably be more helpful messages - it's quite likely you have further syntax errors to deal with. Earlier I just pointed out the most obvious of them.

 

Attach a zip with the basic file and images, and I or someone else, can tell you what else is going wrong. Before a pre-alpha rom can be generated, your language syntax needs to be correct.

  • Like 1
Link to comment
Share on other sites

Hey SlidellMan,

 

Just looking through your code.  I'm still trying to get it to compile but I've quickly seen a few things that might contribute to the compile failure:

  • you are re-dimming system variables as variables ie. joy0fire0, joy0fire1, score0, score1 (not sure if this causes issues???)
  • there are duplicate vars and labels such as ending_a
  • there are a number of un-dimmed vars. ie. dim = $22f2
  • plotchars are a max length of 32 characters - they can be split using multiple plotchar calls to break that up

If I rem out all the code below the incgraphics and add 'set tallsprite on' then I can see that your gfx blocks are full as you receive a graphics overrun in bank 0 message. The gfx blocks fill very quickly indeed and definitely a balancing act to fit everything in!!

 

With your graphics - you have a number of those set at a height of 16, 24 and 32 pixels.  As your zoneheight is set a 8 these can to be loaded with the 'set tallsprite on' command to ensure they are properly processed.  The other issue you may have is your sprite animations are all within one image for an object - ideally you should split these into individual files, one for each frame of the animation for loading. You might be able to use 'set tallsprite spritesheet' here (I think images need to be stacked vertically to import them but I haven't yet used this feature). 

 

You may need to start afresh copying over your code in small chunks starting with the variables and make sure everything compiles without issue and slowly work your way through the source. I'd only include what gfx you need at the time to track the gfx blocks.

 

Happy to try and help where I can ?

 

 

 

 

  • Like 3
  • Thanks 2
Link to comment
Share on other sites

30 minutes ago, SlidellMan said:

@mksmith Thanks a bunch. It wasn't the first time that I have had to start a new main working file, but I'll do it.

No probs! Let me know if you need a further hand ?

  • Like 2
  • Thanks 1
Link to comment
Share on other sites

I am in the process of separating the individual sprites from the sheets I made, and here's the letters for the title screen. The goal is to be efficient with these letters and have them wave on occasion. By the way, I don't think that the topic of strings was discussed in the 7800Basic Programming Tutorial, and is there like a 'plotstring' command?

heofonfir_logo_e.png

heofonfir_logo_f.png

heofonfir_logo_h.png

heofonfir_logo_i.png

heofonfir_logo_n.png

heofonfir_logo_o.png

heofonfir_logo_r.png

Edited by SlidellMan
  • Like 3
Link to comment
Share on other sites

There aren't any high level string commands. You can plot any string of characters with plotchars. Unlike interpreted basics, 7800basic is meant to be as lean and fast as possible. In terms of low-level string manipulation, there's memset and memcpy, and roll-your-own with memory arrays and loops.

  • Like 3
  • Thanks 1
Link to comment
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.
Note: Your post will require moderator approval before it will be visible.

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