I've been kicking this idea around for awhile, but never made it because I didn't know how to program. Then last week I entered a strange mood and now I have a bunch of stuff done, somehow.
The original idea was to make a game using nothing but bool variables, because that would be HILARIOUS. That doesn't really seem easy to do though because after awhile you'd pretty much be programming in binary but it did give me some cool ideas.
One of the things I dislike about RPGs is the overabundance of stats. They mostly break down into completely meaningless sets of numbers that grow at completely meaningless rates. And so, keeping this in mind and working with the idea about making a game using nothing but booleans, I came up with the core idea for the game: all stats in the game must be expressible in strictly is/is not or has/has not etc.. relationships.
For example, you don't have hitpoints. Hitpoints are numbers and are therefor not allowed. Instead, you are either "healthy" or "not healthy," and "alive" or "dead." These are determined by other states represented in binary terms. Unfortunately I don't have any particularly concrete gameplay mechanics for this yet. One idea involves having body body parts that can be destroyed for various effects.
Similarly, equipment chains are fairly shallow. There are only a few weapons, all of which do the same amount of damage -- they just differ in properties. Likewise, there aren't different kinds of armor, really. Going from the body part example, a body part is either armored or unarmored, and that's that.
In terms of combat, since any effective attack is equally effective as any other effective attack, the idea is to have combat and equipment based around not on doing more damage but on increasing your likelyhood of doing damage.
Anyway, right now I'm mostly working on the engine stuff. So far I have:
* Movement.
* Tiling.
* Loading object data and instancing objects from it.
* Event scripting.
* Text output.
Not really sure what other engine level stuff I need. I'm going to start building up interactions right now and go from there.
Language: C++, using SDL as a graphics API and Lua for scripting.
And here's some cute little monster sprites (I'll tone down the brightness sometime)
November 24, 2009Event HandlerReconfigured the event handler to store return values on a stack. I'll PROBABLY need that later.
Began integrating Lua. So far I have a hook function for Lua to add events via lua scripts. I need to rename the event code, maybe. Strictly speaking, the Lua functions are events. The things getting added to the eventQueue are more like actions. I don't think it really matters, though. I could just name the event identifiers with a prefix indicating what exactly they are.
Instancing SystemI need to re-engineer the instancing system to work as such:
The GameObject class will now be referred to as an Instance class.
The Instance class contains the following members:
* Int iID; // The specific ID for the instance.
* Int iActive; // Whether or not the instance should update/draw.
* Int iDeletion; // Whether or not the instance needs to be deleted.
* Int drawOrder; // What “layer”/order the instance is drawn in.
* Int xpos, ypos; // The current position of the instance.
* Int lastx, lasty; // The previous position of the instance.
* GameData* instanceData; // The data associated with the instance.
The Instance class contains the following methods:
* Int ID(); // Return iID.
* Int active(); // Return iActive.
* Int deletion(); // Return iDeletion.
* Void coordinates(int&, int&); // Sets the Instance object's current coordinates to the args.
* Void moveback(); // Reset the Instance object to its last position.
* Void setpos(int, int); // Set the coordinates of the Instance object to the args.
* Int update(); // Calls instanceData's update method, which takes a pointer to the containing Instance.
* Int draw(); // Draws the Instance's sprite at its position. Does NOT call a method in instanceData.
Checklist (To-do):
- Major: Add code to allow new GameObjects to take a string indicating their scriptfile and a string indicating their “stat” file in their constructor.
- Major: Add a function that allows one object/function to execute a function from another object's script.
- Minor: Work on naming conventions, especially in regards to that agent/object distinction I wanted.
- Minor: Keep making event functions till I run into issues. I need to start defining interactions and things.