I like this background loading idea. Too many games have been spoiled by bad loading screen placements. D:
Hiya. I now have time to work on this engine again. This summer I want to turn it into something I can put on a resume. I’m not sure what that means yet, but that’s my goal.
Mostly done revamping the text system. It was really really bad code that I wrote ages ago and never finished. Now it’s faster, cleaner, and has more features. Also, we now have an official NetMission font thanks to Metroid_Zapper who based it on DeveloperZero’s old logo (which you may have seen in people’s sig images in the past).
Up next, I’ll do the same revamping thing with my old audio system.
It’s hard to show audio progress using pictures. So I’ll just explain for now:
Audio revamping, day 1: (two days ago)
Researched other possible audio libraries. Decided to stay with OpenAL.
Got my old, incomplete audio system running again. Needs a lot of work.
Audio revamping, day 2: (yesterday)
Refreshed my memory on how OpenAL works, and what varies between devices.
Planned out the entire audio interface for the game scripts.
There will be more functionality than you’ll ever need. I’m excited. Just wait and see.
Audio revamping, day 3: (today)
Lots of refactoring, rewriting, revising, and more planning/thinking.
Got the core finished, but quite a bit of work left.
In other news, I made this in the renovated text system:
I have discovered that pixel-thin fonts are not meant to be rotated. Oops.
OpenAL should be fine. It fits nicely with OpenGL and supports a lot of features. If you’re not going to go with DirectX, OpenGL is the way to go. OpenGL > DirectX anyway.
Eh, DX has a lot more post-fx options… and OpenGL sucks on AMD gpus.
This engine is going to be cross-platform, so DirectX isn’t an option.
In other news… I finished sounds today! No reverb or music yet though.
I’ll release a demo app once I’ve finished the rest of the initial features.
Next day edit:
Got sound environments working! These are basically reverb effects that you can give to a sound. This video is a perfect example because it’s exactly the same technology I’m using (EAX – go ahead and search other examples on YouTube), although they’ve boosted the effect dramatically so that you can hear it.
If you’re concerned that the dozens of values that define a reverb effect would make sound environments too complicated, and you wouldn’t want to be the one adding them into the game, fear not! There’s a public domain, massive set of preset environments that I’ve included, which has pretty much everything you could think of, such as a bathroom, cave, stone room, quarry, long castle passage, factory courtyard, empty stadium, drugged (lols), psychotic (lols), sports commentator, driving tunnel, even as specific as ice palace cupboard, to name just a few.
Still in progress but I got the basics of music working.
There’s a “playlist”-like system where you can put several tracks together (seamlessly), and have it loop either the final track or all of the tracks (or no loop). This allows for the intro+loop paradigm found in most games.
You can have multiple playlists playing at the same time, which allows you to overlap your fade from one piece to another, or switch between variations of a piece (like in 3-D Zelda games where the instrumentation changes depending on what you’re doing), and whatever else you can come up with in this system.
And you can also apply the same effects to playlists that you can to sounds, so things like pitch, volume, reverb, filtering, positioning, etc., although most of these are pretty unnecessary for music.
I still have a lot of testing to do on music (all I’ve done so far is stress-tested playing music at up to 60x speed), and then I want to add some basic multithreading to the audio system as a whole, and then I have to hook it up to the new resource manager system, and then I have to plug in the script interface, and then I have to do even more testing…
But I’m at the point now where I can make a console demo that shows off the audio effects. Do you guys have any requests? Maybe I’ll just find public domain sounds and set up a fake warzone “audio movie” or something.
I’m sorry that this has been so boring to read lately but it’s hard to convey audio updates with pictures.
- More control over available audio devices.
- Music fully featured now (even streaming from the same file more than once simultaneously – dunno why you’d ever do this.)
- Fairly thread-safe. Soon to actually use multiple threads. (Meaning background loading/unloading, etc.).
- Smart garbage collection (because unlike other resources, a sound shouldn’t unload immediately between rooms, or else it’ll stop playing and sound bad)
troid: so jesus on stilts that his stilts have stilts
It’s not boring. It’s watching God create the universe.
Finished the audio system version 1.0 (now multithreaded so that if the game starts stuttering or freezing, the audio won’t).
Imported the audio system into the full NetMission engine.
I have a test project that lets you jump to rooms before they’re loaded, then watch them load. (The process is exaggerated by loading GIANT images)
I added a sound to one of the rooms, which you play by hitting the right arrow key. It doesn’t work immediately, but after a few of the images load (and presumably the sound) it starts working. Wonderful.
I added music to one of the rooms, and I have it start playing immediately when the room starts (which means it won’t actually play since it’s not loaded yet). The game freezes. Not wonderful.
I’m going to look into why that’s happening tomorrow. Normally you’d wait for a room to finish loading before starting it and attempting to use its resources, but either way it shouldn’t be freezing. Hopefully a simple fix.
WAS A SMALL MISTAKE
THEN I DEBUGGED LIKE CRAZY
NOW NMAUDIO 1.0 IS FINISHED
DONE WITH NMAUDIO 1.0
DONE WITH NMAUDIO 1.0
(Don’t mind me. Just testing out the volume and reverb settings of my voice.)
Hmm I think another update is due.
A.) Next on the agenda is model animation. As you all know I wrote a 2-D model animator a few summers ago that is quite an incredible tool (see many pages ago in this thread), but I didn’t anticipate its size and it resulted in the sloppiest organization/code I’ve ever written, and I never looked back. So … this is going to take quite some time to sort out. At least I can start using pictures in my updates again!
B.) Hadn’t noticed it before but my engine was using at least 6% CPU at all times, even when doing nothing, which is bad. I isolated the few offending lines of code and researched/experimented for a day, but in the end it turns out it’s just a problem with my laptop’s graphics driver and my engine doesn’t do that on other computers. Gah! (Ask me for more details if you’re interested; it’s pretty stupid)
Well I’m leaving home for a few busy days here, so I doubt I’ll be able to work on this until next week, but I did make some headway. I cut out all the old-engine remains and am now using the new engine (where needed) to power the model editors.
There’s a lot of “bad code” to fix up, but my first priority is to encapsulate each item that you build (such as the image cutouts) so that I can modify them and the improvements will automatically trickle up to the highest level.
Example: right now you can only cut out rectangular pieces from an image – in the future if I decide to let you choose an arbitrary polygon cutout or something, the models would automatically accept the new format of their limbs.
See you next week…
Don’t forget about the font code and resource manager. Just wait until the timing code and UI manager go bad, oh boy!
In all seriousness I hope to have a real demo out by the end of the summer. None of these “engine doesn’t have enough features” excuses. It’s close to the same functionality as Game Maker 7 right now (that’s the last version I’ve used). I can certainly try to make something in it.
As soon as I redo the models. And physics. And lighting. And audio. And models.
See you next January 2047
Hiya, I’m back. Haven’t had as much time to program lately (music practice and algorithm studies are taking up hours and hours of my day) but I’m a little farther ahead!
Sorry for always revisiting old code… but I cleaned up the resource manager a bit (don’t hurt me!) so that it now allows for resource dependencies. This is necessary for things like models because they depend on textures and other resources being loaded, so technically I didn’t abandon my work on models to do this.
Hopefully I’ll have a more substantial update next time. Back to music practice!
The nice thing about trying to “fix up” a bloated pile of spaghetti code is that it’s shrinking quite a bit. It feels great to chop apart a page of duplicated/varied code and maybe add a single function call in its place.
Too bad I have to maintain backwards compatibility with all the models and animations I’ve made.
The summer’s ending, so I’ll give a status report. For the lazy, there’s a tl;dr at the bottom.
What I did this summer:
1.) Added fonts to the Metroid Prime-style resource manager, and fixed many font bugs.
2.) Added audio to the Metroid Prime-style resource manager, and beefed up the features a ton (including environment effects just like the ones in this video)
3.) Began renovating the model and animation code for a number of reasons. Got maybe 50% done.
4.) Tested out networking. Got a simple app working in which a server controls an object’s position and sends this data to the clients.
5.) Other misc. improvements here and there, such as a priority system within the resource manager.
Where the engine stands right now:
It can make full-length 2-D games. Before this summer it had not yet reached the minimum bar for doing so – audio, fonts/text, and a few other crucial things were missing.
On the developer side, the “project” system makes it easy to work on games. You control the rooms, objects, and resources in a Lua environment, where anything goes and the engine’s features are simply a convenience. This makes it simple to share rooms, objects, code, resources, etc. between multiple projects.
On the engine side, there are many powerful features behind the scenes that make the game execution possible, most importantly the multi-threaded resource loading/unloading that lets developers keep memory to a minimum and remove loading screens without breaking a sweat.
The downside is that there are barely any specializations past the core multimedia features. There are many aspects of modern games (lighting, physics, networking, animated models, artificial intelligence, tiled rooms, etc.) that are not provided by the engine yet and would be up to the game developers.
I wish I had spent some time making a real game in my engine to demonstrate what it can do, but my programming time dwindled to nothing halfway through the summer.
What is in store for the future:
The fact that the engine can now easily make full games is pretty awesome. I’ll definitely want to show it off with a demo asap. School’s starting though, so we’ll see.
The model/animation stuff is not only going to make the engine stand out once it’s done, but the code renovation has already boosted the development of future features, like being able to design room layouts with a GUI.
Although P2D wouldn’t need it, I want to incorporate the networking aspect asap since that’s one of the main purposes of this engine. (Multiplayer games)
I’ve experimented before in the other planned features (like lighting) and some will be handled mainly by libraries (like physics), but they just haven’t reached their time to be added to the engine. I can’t wait.
tl;dr Engine can make real games, couldn’t do that before this summer, gonna keep adding more features, hopefully a demo at some point but school’s starting full-force now so who knows.
troid’s stilts now have unicycles