By Kronoman 🇦🇷 🇨🇷 👽
Under the MIT license
Copyright (c) Kronoman, 2022
Thanks to the nice people of Espacio TEC 🏆 🥉
November 2022: This game was on the podium, in the retro video game contest for old consoles and computers. 🥉
Go to my page: https://kronoman.itch.io/zero-zero-ufo
REMEMBER THE GAME IS UNFINISHED!
Thanks to the magic of js-dos , you can play online this game.
Check it out here:
https://alvarogonzalezferrer.github.io/zerozeroufo/
All feedback welcome.
Go to release section : https://github.com/alvarogonzalezferrer/zerozeroufo/releases
Play it on real hardware, or DOSBOX!
A open source game that you play as a UFO 🛸
Abduct cows to regain energy, fight the army that will try impede your mission. 🐄
Thanks to testers
- Zir, Joel, Slava, Sebas, Juane, Nacho, Pablo-San, Guille
Thanks for playing!
A,S,D,W or arrow keys : move the UFO
Z or SPACE - use your beam to abduct cows and soldiers 🐄
X or ENTER - shoot in the direction you're moving ⚡
NOTE: if we press both beam & shoot, we shoot down, only in first weapon tier.
F1 to see help screen F2 to configure keyboard / mouse / joystick F10 or ESC to quit the game SPACE to skip intro screen, etc
The command line takes some switches. Try -? to see the commands.
Tools I used:
- DOSBOX
- DJGPP C++ compiler
- Allegro 4.2
- Notepad++
- ASEprite - sprite editor
- The GIMP
- Volkov Commander
- FAR Manager
- Irfanview
- Orangator
- Audacity
- Firefox
- Github
- Piskel - https://www.piskelapp.com/
Platform: MS-DOS was main target, Linux, Windows maybe, not tested yet.
Note, this game was developed for a retro game competition, I only tested the code with MS DOS under DOSBOX so far. All other platforms remain untested, should compile with some massage.
DJGPP + Allegro 4.2 under DOSBOX host is what I used You need to run 'make'
You need Allegro 4.2 library, I suggest precompiled one! Run 'make'
https://sourceforge.net/projects/alleg/files/allegro-bin/
And the Mingw32 + MSYS toolchain and compiler
You need Allegro 4.2 dev package and g++ compiler. Run 'make'
Sprites drawn by me with ASE sprite using the standard VGA 13h palette.
Sound by me using Audacity.
The game data is compiled with the GRABBER tool that comes with Allegro 4.2
The sprites for the enemies are handled by EnemyList, kept loaded, only bosses are loaded on-demand to keep RAM usage low.
Level backgrounds are loaded on demand too, to keep RAM usage low.
The terrain is procedurally generated randomly, so no two games are the same.
-
Most classes has everything public, this is to keep the design simple and fast, since Im a single developer working on my own project, so no get/set pairs for everything.
-
On major projects I would use the proper encapsulation, dont take this as my skill level programming, in fact developing for MS DOS in 2022 takes some skills!
-
Don't take my design decisions for MS DOS like you would for any other project, this is a niche where very specific decisions have to be made because of platform and hardware limitations.
-
Most hacks or weird designs you will see in the code are because of MS DOS nature, like early games, I use 320x200x8 bpp video mode (13h)
-
I almost didnt used linked lists or STL, just arrays, to keep it going fast, dynamic memory allocation in MS DOS is slow.
-
I dont use transparent effects, for speed reasons (you have to read and write instead of only writing the pixel).
-
Floating point math is very slow on real hardware of the time (386, etc), although it used a lot of float, I should change it to fixed math, I didn't have time to do it, maybe in the next version. On an emulator it works fine.
-
I couldn't test it on real hardware either, since I left my 486 9000 km from where I am now, if anyone tries it on real hardware and let me know, welcome.
-
All patches and fixes are welcome. Also the comments, I love receiving comments!
-
Data will be automatically loaded - unloaded when needed to keep RAM usage to a minimum.
-
Game logic as a singleton: Can you only ever imagine having one of them in your runtime? If you can imagine having two, try not to make it a singleton / global now because you're limiting yourself needlessly. - Will it be needed in disparate parts of software, ie, is it very tedious to pass it to everybody who needs it? If the answer to both of those is yes, then make it a global or singleton.
-
Statements of the form "never use x-feature" are always nonsensical. Use features when it makes sense to do so, and don't use them when it doesn't.
Random ramblings
-
I'm pretty tired of recruiters wasting my time, they don't know anything about programming, and they judge without knowing.
-
Some developers think that "retro" is just slapping pixelated sprites on a Unity engine, and making a game thats huge in gigabytes, but small in content. It is not.
-
Electron sucks: consumes a high amount of RAM, and requires an expansive amount of storage.
-
This game is old-school, no DLCs, no loot boxes, no pay walls, no DRM, no phone-home spyware, no telemetry, no monetization bullshit, no socialist bullshit, no mining, no garbage, just art.
-
Discord client is garbage. Visual Studio code sucks.
-
Cheers to the old school scene. You know who you are. Stay legit.
-
CFKLDLNA
I reused a Arcade Game Framework that I'm making since years ago (2007?).
No third party game engines used, all the engine is written by me. 🇦🇷 🇨🇷