Catacombs of the damned! (Formerly Another FPS style 3D demo)

Yes, it seems to. Running the following simple sketch in the emulator returns a different value each time it’s run as a new game or the reset button is pressed.

#include <Arduboy2.h>

Arduboy2 arduboy;

void setup() {
  arduboy.begin();
  arduboy.initRandomSeed();
  arduboy.println(random(2147483647L));
  arduboy.display();
}

void loop() {
  arduboy.idle();
}

Yes, that’s where I got my copy from.

They’re interesting, but most are very hardware specific,
and some I wouldn’t advise attempting if you can avoid it.

That would work to a degree, but you’re effectively just shifting the same pseudo-random sequence along a few entries which means that after a while people will start running into the same levels if they take a similar amount of time to skip past the title screen.


Pre-ANSI C is full of weird things.

Apparently GCC will still allow this for C if you pass the right flag.

In modern C (C99, 6.5.3.4.1):

The sizeof operator shall not be applied to an expression that has function type or an incomplete type

And (6.2.5.19):

The void type comprises an empty set of values; it is an incomplete object type that cannot be completed.

I’m not sure what you mean by ‘ignore’.

That’s worrying, and it makes me really glad that modern compilers have come such a long way.

That’s plausible. Upsetting, but plausible.

Well, they had less than 640KB to work with and 64KB data segments. :smiley:
I probably would have done the same.

I got a table of reciprocals in Starduino that I read out of bound for 0 and 1 on purpose (uint8_t stepping = (reciprocals-2)[height] ) because 0 renders nothing and 1 only renders one scanline so it doesn’t matter if I add a garbage number at the end of the for-loop in those cases.

You save wherever you can. (and not having an MMU to worry about can be fun)

1 Like

I’d sooner look for micro-savings elsewhere than invoke undefined behaviour.

There’s almost always savings to be made somewhere.

Looking more like a game…
Arduboy3D.hex (65.9 KB)

Sprites based on Kenney’s 1 bit pack

9 Likes

Just wow! This is incredible, gameplay wise, performance wise, graphics… This already looks like a fully functional game… very impressive.

2 Likes

I am super impressed :grin::raised_hands:

1 Like

WOW indeed!!!

1 Like

This. Is. Incredible.

I know I’ve said it before but I think the dithering is quite heavy on the floor and ceiling, maybe consider using a different or lighter pattern?

Inspiration:

Just for you Kevin: a build where the A + B buttons cycle through different dither patterns for the floor and ceiling!
Arduboy3D-dither-select.hex (67.2 KB)

Which combination do you think works best? Post a screenshot!

I found the ladder.

Presumably level 2 isn’t implemented yet and I’m viewing junk data? :P

Level2

Anyway, personally I like this permutation:

Permutation

And here’s a tiny .gif to show it in action:

ArduboyRecording

Whatever combination is used, I think the ceiling should be dark, the floor should be light and the patterns should have a small to medium frequency of dots.
Higher dot frequencies are too ‘busy’, and make it hard to process.

It’s a shame there’s not enough processing power left over to correct for perspective so the floors could be drawn as actual floor tiles instead of just drawn as a flat pattern.

It should generated a new random level when you hit the exit ladder so this is a bug!

I quite like this too. Have you tried on the actual hardware or just the emulator?

Hmm don’t tempt me to try! I think with the black and white display it might get too noisy if floors and ceiling has textures too, especially in the distance

I think it’s could be cool on floor only as ceilling can be darker so textures haven’t to be implemented as they will not be seen.

Only on the emulator.

The only .hex flashing tool I have is avrdude itself because I’m used to compiling source code.
(I do far more development than actually playing games.)

I’ll try it on device later if I get chance.
At the moment I’m busy helping out with some projects.

Well that’s easily solved, just implement anisotropic filtering. :P

Seriously though, I know what you mean.
Distant tiles get noisy enough when doing raycasting on a full colour screen.

Wow. Wow. You made different pattern switching just for me? :heart:

Let me play around with it a bit. I’m really excited to see if this game could make use of external flash memory. :slight_smile:

This is unbelievably cool. Can’t wait to see where it goes. Would you be able to upload the source to github so I can mess around with it for my studying purposes as a newbie?

Source is already up on GitHub here:

1 Like

Aight ty :slight_smile:

Catacombs of the damned!
This is more or less a finished game now, maybe needs a little bit of tweaking so feedback welcome!

Arduboy3D.hex (77.4 KB)

98% PROGMEM usage and 91% RAM usage so quite near the limit!

10 Likes

I am super impressed! Wonderful job.
On my first run I got to floor 3 with a score of 281. This sure feels like a full game. And could be even more if you could store things on a flash chip :wink:

2 Likes