Isometric shooter: “UAPs Must DIE!”
Latest build:
UAPsMustDIE.ino.hex (78.7 KB)
Destroy UAPs, survive, and save the earth!
Love to get feedback on any improvements needed.
Latest Source code:
Isometric shooter: “UAPs Must DIE!”
Latest build:
UAPsMustDIE.ino.hex (78.7 KB)
Destroy UAPs, survive, and save the earth!
Love to get feedback on any improvements needed.
Latest Source code:
To upload a .hex
in the forum emulator you have to drag and drop the .hex
from your file browser, like if you were uploading an image or something.
the sprites, especially the shadow, are really impressive
Wow too easy! Thanks!
Thanks!
Really impressive. Love the bootloader effect!
I love to use randomization! The bootloader wss a bit of a nod to the C64 demoscene. The way they take the loading screen and start distorting it as their demos begin.
cool game!
but are there plans to make the source files available?
I’m really happy you like it.
I don’t really have plans to release the code. My code is really messy.
Sounds like fun. I love old isometric shooters.
Please post back if you ever change your mind and want to release the code.
It’s the only way many DIY arduboy builders will be able to install it.
That’s ok … no one is grading you on it
I’ll go over it then upload it.
There are certain chunks of code I just coppy/paste multiple times to have elements moving in particular ways. I’m sure there would be a much more efficient way of doing it and the code itself would be a lot shorter. I’m just using two dimensional and one dimensional arrays to create “objects”. I can’t get my head arround object oriented programming.
Really this is the first thing I’ve written in a long time and definitely the best game I have ever made. I cut my teeth programming in BASIC on an Amstrad 6128 back in 1987. I did a lot of work on something called The Shoot-Em Up Construction Kit. Then spent a lot if time with Amos Basic on an Amiga. I find the limitations on the Arduboy quite fun to work with regarding the black and white screen. But I’m really taking all those techniques from back in the day. My programming itself is a bit of a hack-job.
That sounds like a problem you could solve using functions.
// Without functions...
void loop()
{
if(!arduboy.nextFrame())
return;
arduboy.clear();
// Print 10 twice then 5 twice
arduboy.println(10);
arduboy.println(10);
arduboy.println(5);
arduboy.println(5);
arduboy.display();
}
// With functions...
// Definition of the 'printTwice' function
// 'void' means 'no output value'
// 'int value' specifies a single input (a 'parameter') of type 'int'
void printTwice(int value)
{
// Calls 'arduboy.println' twice
arduboy.println(value);
arduboy.println(value);
}
void loop()
{
if(!arduboy.nextFrame())
return;
arduboy.clear();
// Call 'printTwice' twice with different arguments
// thus printing 10 twice followed by 5 twice.
printTwice(10);
printTwice(5);
arduboy.display();
}
Object-orientation is mostly irrelevant for Arduboy programming anyway, because the mechanism that underpins most of the more powerful stuff is too expensive for a processor with such limited memory.
What’s more important is just understanding the basic idea of how class
es/struct
s act as blueprints for ‘bundles of data’.
// Without structs/classes...
void loop()
{
if(!arduboy.nextFrame())
return;
arduboy.clear();
// A long list of separated variables:
int x1 = 10;
int y1 = 5;
int x2 = 12;
int y2 = 6;
arduboy.print(x1);
arduboy.print(y1);
arduboy.print(x2);
arduboy.print(y2);
arduboy.display();
}
// With structs/classes...
// A 'blueprint' for a 'Point' -
// a structure consisting of an 'x' component and a 'y' component,
// each of which is an 'int'.
struct Point
{
int x;
int y;
};
void loop()
{
if(!arduboy.nextFrame())
return;
arduboy.clear();
// Instead of four separate components,
// there are now two well-defined structures.
Point p1 { 10, 5 };
Point p2 { 12, 6 };
arduboy.print(p1.x);
arduboy.print(p1.y);
arduboy.print(p2.x);
arduboy.print(p2.y);
arduboy.display();
}
Together functions and classes/structures are like verbs and nouns. A function defines a process, and a class/structure defines a thing to be processed. A function is composed of smaller processes (commands, statements, whatever the chosen language calls them) and a class/structure is composed of smaller pieces of data.
If you want to know more, I’m happy to explain in greater depth or answer any questions you may have.
Wow, let me dig into that when I have a little more time! I’m sure my next game will be a lot tighter if I use some of this stuff.
Code is up now.