Jump to content
IGNORED

Entry 2015: IntelliBullet


Recommended Posts

(it's intellibullet for lack of a better name right now, I'm sure I'll come up with something better by December).

I started thinking: "what would be the most insane thing to program on an Intellivision"

 

And then while lying in bed, it hit me:

Bullet Hell

Now, there won't be too much. I have never programmed in BASIC before, and I'm still getting used to the limits, but will keep this up to date as I make progress.

I setup a github repo for those interested in keeping track:
https://github.com/Shalmezad/intelliBullet

  • Like 7
Link to comment
Share on other sites

I setup a github repo for those interested in keeping track:

https://github.com/Shalmezad/intelliBullet

:cool: I'll check it out later. How about posting updates here as well? After all, thats where the contest is happening ;). Plus you'll get feedback/suggestions/help etc. A screenshot or two would be good to see what you are up to, because not everybody can build your game.

Link to comment
Share on other sites

Screenshot%20from%202015-07-21.png

So far, managed to get some stuff on the screen, and the player moving around.
Right now, going through the logic to get bullets on screen.

The way I'm doing it is using an array of 8 bit integers, one for each column in the game.
Ever so often, it'll shift the columns left and draw a new one on the end.

Tomorrow, going to go through the manual and see if there's a nice easy way I can loop over every bit of the array to draw it.
If not, I'll think of something.

But, lunch break is over, so back to work I go.

  • Like 3
Link to comment
Share on other sites

I'll check it out tonight. Have you considered using sprites instead of characters for the moving objects? They can move independently from the background, one pixel at a time.

 

dZ.

Yeah, but then where's the fun in that? :-D

 

(I'll consider it once I get used to working with Basic. Right now, still figuring out what I can/can't do easily)

Link to comment
Share on other sites

Yeah, but then where's the fun in that? :-D

 

(I'll consider it once I get used to working with Basic. Right now, still figuring out what I can/can't do easily)

 

No worries. Just remember that we're here to help. Also, if you are starting with IntyBASIC, I encourage you to download the SDK. It contains a lot of cool examples on how to use the features of the Intellivision.

 

You may want to check out the "Inty-B Intro" that some of the guys prepared. It shows what sprite capabilities are available on the Intellivision. The SDK contains the full source code to the demo, so you can see how it is done. :)

 

-dZ.

Link to comment
Share on other sites

Ran into some issues with rendering everything at once. The later elements that were rendered were flickering (video doesn't show full flicker, which was a lot faster than my recorder could capture):



So, redid the rendering so the sections only render if something changes (first column if the player moves, bullets when they move, etc).
Worked fine.

Finally got some bullets scrolling on the screen:
  • Like 4
Link to comment
Share on other sites

OK, I got a chance to check out the program. Looks good, I like how well organized and coherent the code looks. I also agree with GroovyBee that the "ASCII Art" look is rather cool. :)

 

The choice of using the arrays to keep track of the bullets is ingenious and effective.

 

I have a couple of questions:

  • Why are you pre-seeding the first screenful of bullets, instead of letting them come in from the right edge?
  • Of the pre-seeding, why are the first 8 columns following a pre-set pattern, and the rest are statically set to the same pattern?
  • What will be the object of the game?

 

One suggestion I have is to draw the player's avatar using a sprite (or a couple overlaid). you can still load them with ASCII-looking graphics, but it will solve the problem of having to re-draw the first column separately (although it seems to work rather well now). With a Sprite, you can move it on top of the background independently.

 

Also, I think the scrolling would be more effective with less bullets sprawled on the screen. Whey they are tightly packed together, the movement effect is diminished significantly.

 

Great job! I can't wait to see how it progresses. :)

 

-dZ.

Link to comment
Share on other sites

OK, I got a chance to check out the program. Looks good, I like how well organized and coherent the code looks. I also agree with GroovyBee that the "ASCII Art" look is rather cool. :)

 

The choice of using the arrays to keep track of the bullets is ingenious and effective.

Thanks. :)

 

I have a couple of questions:

  • Why are you pre-seeding the first screenful of bullets, instead of letting them come in from the right edge?
  • Of the pre-seeding, why are the first 8 columns following a pre-set pattern, and the rest are statically set to the same pattern?

Wanted to make sure my logic for parsing the array was correct. By doing different patterns, I could make sure it loaded each row/collumn properly. :P

 

But yeah, it will be 0's in a later release.

 

What will be the object of the game?

Well, still working on that one.

 

At the very least, it'll be dodging. Bullets come in, each row you sucessfully dodge will be a point. Get hit, bullets clear, and you lose a life. Lose all lives, game over.

 

Playing around with the possibility of adding actual enemies that'll do the shooting (since I have to do something other than random to make sure you have a possibility of surviving), having the player being able to move forward/backward as well, having the player be able to shoot back at enemies, sheilding, etc. We'll see. One step at a time...

  • Like 1
Link to comment
Share on other sites

  • 2 weeks later...

So, it's been a while since I posted, but been kinda busy with work, school, life in general, etc.

However, had some time today to pluck away at it, and can finally say:

It's now a game

 

There's been a number of updates to get to that point. For those who don't want to go through the commit logs:

  • I added a "fake player" on the other side of the screen. Right now, it's visible for debugging. The purpose of this fake player is to clear a path, guaranteeing that it's 100% possible to go from row to row
  • Movement locking. While trying to dodge bullets, I found it somewhat uncontrollable. So, I implemented a basic lock which makes it so you move on button press, but can't move again until button release.
  • Lives. Nothing fancy, just a way to keep the player going after making a foolish mistake or 2. Make 3 however, and you're out of luck
  • Collision & Game Over. You can now lose the game and get a score.

Here's a video of the gameplay so far (note: I did deliberately die, didn't want the video being too long):
https://www.youtube.com/watch?v=DEbuIKsK7YM

  • Like 2
Link to comment
Share on other sites

Attached is the binary for those who'd rather play it than hear me talk about it.

For those compiling it, I'd recommend playing around with the bullet update delay (line 50):

  IF FRAME % 18 = 0 THEN GOSUB update_bullets

Higher number = higher delay = easier game.
Lower number = lower delay = harder game

 

18 is about right for regular play

14 I found is pretty challenging, but still survivable with good reflexes

and 28 is perfect if you have a relative that's not gaming inclined

Next update I'm looking at is adding a menu to allow you to select your difficulty.

intellibullet.zip

  • Like 3
Link to comment
Share on other sites

post-31694-0-12095300-1438951296_thumb.jpg

 

This looks really good, you made a lot of progress, quickly!

 

Based on some past posts in this forum, I am not sure if it is "better" to use 16-bit variables or 8-bit ones, so you might not have to limit yourself to an 8-bit variable because you think your data structure will be small.

Link to comment
Share on other sites

Attached is the binary for those who'd rather play it than hear me talk about it.

 

For those compiling it, I'd recommend playing around with the bullet update delay (line 50):

 

  IF FRAME % 18 = 0 THEN GOSUB update_bullets

Higher number = higher delay = easier game.

Lower number = lower delay = harder game

 

18 is about right for regular play

14 I found is pretty challenging, but still survivable with good reflexes

and 28 is perfect if you have a relative that's not gaming inclined

 

Next update I'm looking at is adding a menu to allow you to select your difficulty.

 

I finally got a chance to play it, and it looks brilliant. It does look already like a real game. Great work! :)

 

The default binary you posted is a bit slow for my taste (though it is hard enough because there are much too many bullets on the screen at once). I'll download the source and play with it a bit.

 

I'll also provide some more feedback soon.

Link to comment
Share on other sites

Minor update:

Added horizontal movement. There's a minor flickering issue. Looking to redo some of the rendering stuff (going to mark the player's old position as dirty and just re-render that) which should help take care of it.

Found out that the latest version of IntyBasic is actually 1.1.0 (EDIT: just got an email, it's actually 1.2 now :grin: ), which includes the ability to define functions (DEF FN). Updated to that, which didn't change anything so far. Definitely will be helpful later.

 

Next big steps:

  • Difficulty adjustment. I have a menu, let's have it server a purpose other than a buffer between games
  • Bombs. The game's hard. Let's make it so you have 3 bombs that'll clear bullets around you.
  • Refactoring. Probably the first thing I'll do. Code's gotten a little messy, and there's some new stuff (EDIT: 1.2 has END IF?! :-o ) that should help tidy things up.
Link to comment
Share on other sites

Man, that 1.2 update of IntyBasic has really helped clean up a bit. Granted, some of my coding preferences are starting to show (there's a number of IF/END IF's that could be done on one line, but I decided to do a full IF block)... :grin:

 

I did fix the flickering when I migrated to a single render_line procedure (and thus removed calling render_player_col when updating bullets).

 

Only 2 main gameplay changes have taken place:

  1. I fixed a bug where you could go left off the screen
  2. There is now ramping difficulty. Color changes between light/dark green when it ramps up

Will take a look at shields next (probably sometime this weekend). I decided it would be more immersive to use a shield and keep the bullets flowing than to have a bomb that clears everything (that, and I can use it instead of a full screen clear whenever the player dies). Shouldn't be too bad now that I have a single procedure for rendering a column to the screen. Will probably play around with some of the more graphical cards like so:

PjcEQXj.png

EDIT: Actually sat down and figured out the cards I wanted:
aOZpQyS.png

intellibullet.zip

Edited by Shalmezad
Link to comment
Share on other sites

It's getting even better! Here's some feedback:

  • It seems the user position is updated with the refresh rate of the rest of the bullets. This makes the game feel sluggish and unresponsive. I recommend you try to update the user position as close to "real time" as possible to improve the "feel" of the game.
  • I managed to move all the way to the right, and as soon as I got to the 17th column (two from the edge), my avatar disappeared! I think I lost a life, but when the level restarted, the player avatar wasn't there. Sorry, just re-tested this and it was that I died. The "Game Over" message is not too noticeable.
  • It is hard to tell when the player loses a life. It looks like I am going to collide... then... things look the same except that the bullets moved back. Perhaps there should be a more "formal" sequence. Here's an example (inspired by Defender): on collision, stop all motion for a brief moment, then flash the player's avatar and explode it. The explosion could be just replacing it with a "#" symbol temporarily in an "explosy" colour such as red. Then, after a brief pause, continue.
  • By the same token, it is hard to tell when the game is over. Perhaps it would help to display the "Game Over" message in the middle of the screen after the player's avatar exploded (see above).
  • NEEDZ MOAR COLRS!!!!!! Seriously, why only Tan and Black around the background? I don't expect the game to look like Rainbow Bright, but maybe a bit more highlight and style around the HUD would make it more appealing. I suggest judicious use of Grey and Blue to give it a more "spacey" feel. :)
  • Needs a goal. Perhaps have a countdown to the "end of level," or a distance meter for the same. I don't know. I will tell you that without a clear and specific goal, the game will have very limited appeal and re-playability. I'm not talking silly achievements for the ADD kids, I'm talking about completing a mission, a level, or the game itself. Give it a short and simple story, and immerse the player in it. One possible goal: survive a wave of bullets until the enemy runs out and reloads. Then maybe give a bonus if the challenge is completed below a predetermined time threshold, and the player gets ready for the next meaner and faster wave. The key is to somehow depict progress and completion in a clear way.
  • To fire or not to fire? For some reason I want to shoot my way through those bullets with my side-scrolling spaceship. I know, I know, it's not that kind of game -- but it could be... ;)
  • Paint the "dummy" ship a different colour. I know you stated that its purpose is to guarantee a path, but let's face it: He's the enemy! And he must die!!! :lol: It's time to adopt him as an official NPC of the game and give him purpose -- even if his purpose is just to move menacingly up and down the enemy's gate. Giving him a different colour at least makes him distinct from the player.

That's it for now. Keep up the great work! :)

 

-dZ.

Edited by DZ-Jay
Link to comment
Share on other sites

Thanks for the very thorough feedback. I keep forgetting that what people want are usually different than what I have in mind. Anyways:

    • It seems the user position is updated with the refresh rate of the rest of the bullets. This makes the game feel sluggish and unresponsive. I recommend you try to update the user position as close to "real time" as possible to improve the "feel" of the game.

 

Turned out to be an issue with X movement only. Forgot to rerender the screen on horizontal movement. :lol:

    • I managed to move all the way to the right, and as soon as I got to the 17th column (two from the edge), my avatar disappeared! I think I lost a life, but when the level restarted, the player avatar wasn't there. Sorry, just re-tested this and it was that I died. The "Game Over" message is not too noticeable.
    • By the same token, it is hard to tell when the game is over. Perhaps it would help to display the "Game Over" message in the middle of the screen after the player's avatar exploded (see above).

 


Yeah, it's on my list of graphical updates. Going to put it in the middle like the "LEVEL XX" message.

    • It is hard to tell when the player loses a life. It looks like I am going to collide... then... things look the same except that the bullets moved back. Perhaps there should be a more "formal" sequence. Here's an example (inspired by Defender): on collision, stop all motion for a brief moment, then flash the player's avatar and explode it. The explosion could be just replacing it with a "#" symbol temporarily in an "explosy" colour such as red. Then, after a brief pause, continue.

 


Going to roll this in once shields are implemented (that way I can respawn the player with a shield). Starting to get used to the fact I don't *have* to go back to the loop label every frame.

    • NEEDZ MOAR COLRS!!!!!! Seriously, why only Tan and Black around the background? I don't expect the game to look like Rainbow Bright, but maybe a bit more highlight and style around the HUD would make it more appealing. I suggest judicious use of Grey and Blue to give it a more "spacey" feel. :)

 


Just found out about MODE after looking at the Inty-B Intro. Still playing around with colors, but so far I noticed my definition of tan and purple don't match what the intellivision puts out.
Also have a couple questions related to this I'll post in a separate thread. ;)

    • Needs a goal. Perhaps have a countdown to the "end of level," or a distance meter for the same. I don't know. I will tell you that without a clear and specific goal, the game will have very limited appeal and re-playability. I'm not talking silly achievements for the ADD kids, I'm talking about completing a mission, a level, or the game itself. Give it a short and simple story, and immerse the player in it. One possible goal: survive a wave of bullets until the enemy runs out and reloads. Then maybe give a bonus if the challenge is completed below a predetermined time threshold, and the player gets ready for the next meaner and faster wave. The key is to somehow depict progress and completion in a clear way.

 

Needs achievements, 0/10.
Nah, just kidding. :lol:
Toying around with a couple ideas. I'll let you know once I have something. :P
However, I did end up adding in some level progression stuff.

    • To fire or not to fire? For some reason I want to shoot my way through those bullets with my side-scrolling spaceship. I know, I know, it's not that kind of game -- but it could be... ;)

 

It's not that kind of game. Yet. ;)

    • Paint the "dummy" ship a different colour. I know you stated that its purpose is to guarantee a path, but let's face it: He's the enemy! And he must die!!! :lol: It's time to adopt him as an official NPC of the game and give him purpose -- even if his purpose is just to move menacingly up and down the enemy's gate. Giving him a different colour at least makes him distinct from the player.


 

See above. :P

Link to comment
Share on other sites

Just found out about MODE after looking at the Inty-B Intro. Still playing around with colors, but so far I noticed my definition of tan and purple don't match what the intellivision puts out.

Also have a couple questions related to this I'll post in a separate thread. ;)

Went through the manual (again), found what I needed. Really need to read the manual all the way through. :skull:

Link to comment
Share on other sites

Thanks for the very thorough feedback. I keep forgetting that what people want are usually different than what I have in mind.

I didn't mean to suggest that you turn the game into something different from what you had in mind.

 

Apart from the bug reports, feel free to ignore all my suggestions. :)

Link to comment
Share on other sites

Thanks for the very thorough feedback. I keep forgetting that what people want are usually different than what I have in mind.

 

Always keep one thing in mind: how much input you want from others.

 

I've gone both routes: one where I just did what I wanted to do, and to hell with feedback - and understood later why the feedback would have been valuable. And I've also listened way too much and tried to make something into something it wasn't, and ended up very disappointed with a lot of my work.

 

It's a delicate balancing act. Really depends on what you want out of this.

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