NetMission Engine


So yeah, I messed around with shaders for a bit, then moved onto render-to-texture stuff, allowing for additional features such as reflective surfaces. I had a little app going for a bit that did infinite screen-inside-screen just for fun. Only two textures displayed per frame, so it was very fast. Messed around and tweaked with various other things as well. Plus another major reorganization that (hopefully) simplifies dependencies.

And then yesterday I wrote out the short script for “NMPaddle,” the Pong clone. It’s less than a hundred lines of code. I guess I should release it as promised. I’ll upload it sometime. It’s not that fun. It looks like this:

The missing features in my scripting system were really emphasized as I wrote the script, which I guess is a good thing, but I decided against making this demo editable and all that (so you don’t have to look at the insanity of me working around the missing features).

I think the focus of the few weeks I have left of summer will be adding more features to my scripting system (mainly the parser) so that it’s easier to write scripts and all that. I also need to debug it a little since I never did much to test it.


Sorry I haven’t uploaded it yet. I wanted to make sure I was following the license agreements correctly (since this is my first experience using licensed code like SDL), so NMPaddle has been sitting around while I’m waiting to hear back from someone.

But in the meantime I completely rewrote my script parser/compiler. It’s more organized (follows a set of “context-free grammars”), has many improvements (such as line and pos being correct for error/warning messages), and will soon support variables natively! I ironed out a few small bugs from the old version, and it even produces slightly smaller script files that run slightly faster. Still no memory leaks.

So I’ll recompile NMPaddle in the new system and see what happens…

Edit: Click here to download NMPaddle!


That’s very not buggy at all. And very smooth. I want to see a Metroid game running at 60 FPS.


Any chance I can get a copy of that that runs full-screen at 5760x1080? :confused:


Heh, sure, I’ll upload that separate copy soon. I put the 1000x1000 limit in because I tried 9000x6000 and it took 15 minutes for me to get task manager open and destroy that monster window… But I’m sure that your gaming computer is much much better than my laptop. :stuck_out_tongue:


In other news, check out how much my scripting parser has come along in the last few months! The following scripts all display 0 through 9 on the screen and nothing else.

NMScripting 1.0 (Long time ago)

[code]var iterator;
? ?pushFloatStack 0;
? ?setVariable iterator;
? ?label loopStart;
? ? ? ?getVariable iterator;
? ? ? ?displayVar;

? ? ? ?getVariable iterator;
? ? ? ?pushFloatStack 1;
? ? ? ?add;
? ? ? ?setVariable iterator;

? ? ? ?getVariable iterator;
? ? ? ?pushFloatStack 10;
? ? ? ?lessThan;
? ? ? ?if;
? ? ? ?goto loopStart;
It gets worse when you realize that there are no comments, negative numbers aren’t accepted (you have to push 0, then your number, then subtract), all variables are slow floating-points, etc.
Believe it or not I used this system to make an entire graphics-based game with a title screen, intro, and five mini-games. With a tight schedule. On a netbook. On a long bus ride. X_X

NMScripting 2.0 (started back in May, what NMPaddle was just created with)

setNumInts(1); setInt(0,0); // Int 0 is our iterator. Setting it to 0. while (getInt(0) < 10) { ? ?// Display the iterator ? ?showInt(getInt(0)); ? ?// Increment the iterator ? ?setInt(0,getInt(0)+1); }
Much improved, but the lack of variables was clearly a major problem. I simulated them using a simple variable plug-in I made, but as you can see there are no names and the many function calls are frustrating. At least there was a nifty plug-in system allowing for things like this to happen. :smiley:

NMScripting 3.0 (The current system as of like last week, still in progress but can run the following script)

int iterator = 0; while (iterator < 10) { ? ?showInt(iterator); ? ?iterator += 1; }
Much happier language. I don’t think I’ll bother yet making “for” loops, since they can easily be done with "while"s and I kinda wanna kick the engine into motion as soon as I can…


I forgot to mention when it happened, but now that I’ve lived through an earthquake and a hurricane, I am now back in school, which means I am extreeeemely occupied and won’t be able to work on the engine for a while. Again.

In other news I added up all the lines of code in NetMission and got over 20,000 lines, with 12,877 of them being actual code and like 4,000 being comments. So you can’t say I’ve been slacking all these years! It’s like a full game engine now D:<

Just gotta add some secret sauce… Too bad I have school! X_X


I feel ya bro. My new computer just arrived today (the last one plotted against me to keep from working for more than a week), but I have 10 hours to do 14 hours worth of school work. Luckily tomorrow’s Friday, and then it’s Labor Day weekend, so most of us can get a bit of a break.

Now I should get back to that work.



I am on Thanksgiving break, expanding NetMission’s compiler to support entire projects. (Rooms, objects, resources, scripts, etc.)
More work than I thought, but it will soon be my own miniature Game Maker that I can specialize for 2-D Metroids.

Sorry for another long break and lack of demo. Now that I am taking computer science courses in school, plus writing essays and practicing clarinet, I don’t get as much time for NetMission as I would like during the school year.

But that doesn’t mean anything. I’ll be working on this to the very end. I want to see the long-dead Metroid fangames reborn one day.


Happy new year!

I am on winter break. Sort of.
I had a week off and played Skyward Sword nonstop; barely finished. Now I’m traveling again, but working on my engine! 6.5-hour ferry ride today with my laptop.

So here’s the deal.
Remember that 4000-line scripting language parser compiler run-time etc. that I made so carefully over the summer?

It was a fantastic learning experience but still needs many months of work. NetMission deserves better.

I’m replacing NMScripting with Lua.

In fact I replaced it this afternoon and it’s running NMPaddle. Lua even takes care of many complicated things I hadn’t built yet, which is awesome.

So now that I’ve saved myself months of work I can relax and focus on things that truly matter. Like playing more Skyward Sw–er, I mean adding rooms, enemies, lighting, and more Skyward Sw–er, I mean Minecraf–er, …


Hi again.
So I’m nearing the end of my spring break.
Freaking out like everyone else because I didn’t get enough schoolwork done as I had hoped.
But I did get some engine work done.

The Prime-style loading I tried out in a long time ago is now fully working! (Programmers: Prime-style = multithreading)
That means a couple of things:

  1. There are no loading screens while you play. The surrounding rooms and such will be loading in the background while gameplay remains smooth. No freezing between rooms, even for a split second.
  2. Memory usage is kept to a reasonable minimum. Unlike Game Maker which keeps all resources for the entire game loaded into memory at once (or at least all versions before GM8 did – haven’t used the latest versions…), resources are loaded when they are (potentially) needed and unloaded when they aren’t going to be needed soon.
  3. Arbitrary room transitions. P2D will have only doors and elevators for the most part, but the system I have in place makes it easy to do any other room transitions you might want. Like Samus’s ship flying from the Frigate to Tallon IV. All of these special cases are taken care of.
  4. Infinite/giant worlds inside one room. We won’t be making use of this for P2D, but it’s definitely a possibility now. Resources can just stream in depending on where you are – it’s not like every resource in the current room even has to be loaded (although it’d be nice if ones nearby at least were :stuck_out_tongue: )
  5. The game designer specifies which resources are needed when, from within the scripts. It’s really easy and you can just group them by room. (Like: “I want the next room and this room’s resources to be in memory right now!”) The resource manager will look at what’s currently loaded, what the designer wants, and make the adjustment in the background.
  6. And so on. Use your imagination.

Also I have a project-like system set up where I can make objects and rooms and give them scripts and all that. So I have a three-room project to test out this new resource manager. It’s pretty cool.


So with this ‘infinite streaming room’, you’re effectively saying we could make P2D entirely without doors/elevators/loading spots?


Holy Troid, you really are Jesus. On stilts.



…But we wouldn’t actually do that. Doors/elevators ftw.


Of course, I was simply theorizing… It wouldn’t be Prime without doors. :stuck_out_tongue:


Fixed that for you. :stuck_out_tongue:


I would argue that Metroid could evolve to a doorless system, similar to it’s 2D to 3D transition. Done properly it would work, and be more immersive due to the lack of random doors in caves. Done bad, and it would… well, can removal of doors be bad? I guess if ALL doors were removed, but random doors in caves could be done without.

Prime on the other hand already had doors, and thus they must remain.


I sometimes take 20 minutes off now and then to make a tiny improvement to my engine. Tonight, I added a loading screen when you first boot up the engine.

(Those circles revolve quickly around the center)
You’ll probably never see it (only appears after 2 seconds if you’re still loading the first scene for some reason), but it’s better than starting up the first room before everything was even loaded (which it was doing before – looked like a web-page loading)


For some reason I was expecting the loading screen to animate and then load up the game…


YouTube has trained you well.


Except the code for fonts is old and buggy. I wrote it back when I had no clue what I was doing. I’ll want to clean it up as soon as I can. All I’ve done here is import it into the new resource managing system.