Question
Are you just making a general purpose engine, or do you also want to be an integral part of American Hare?
cardtrick said:
Thanks for the details, Chefe. I spent some time at work today (yeah, I work Sundays) writing up some plans for how I'm going to approach the engine. My goal is to have a tightly integrated editor/engine combination that will allow a single person to make a text and picture based RPG.
Another question, and an idea
How do you feel about part text/picture based and part isometric? For example, the previous screen would be during a game event. Travelling around the world, however, would appear similar to a regular isometric game with your avatar running around.
When you went inside that building, it would turn into a traditional text based game like this idea was originally. Also, if you were to talk to any of those people, it would go to the dialog screen as well. This would be simply a visual representation of the world that you could walk around and would connect the various parts of the game.
Don't worry, I'm not thinking about pedestrian AI. The people would either be static (street vendor, bum, prostitute) with a repeating animation, or be part of a walking crowd that walks along pre-defined paths. However, each person would have a seperate collision detection, and if you needed to get past them you would need to wait a second for an opening. Ideally, I'd like to create a "thrown back" animation when you do collide into something or someone that pushes you back a few paces.
As for the player, you would click on a location and your avatar would go there. You click on a world object (door, person, etc.) and your avatar would "use" it if possible. The only player animation would be a walking (and possibly running) animation.
If players were allowed to stretch their legs, I think it would eliminate the cramped feeling that most text games have, and made travel a lot easier and less tedious and more enjoyable. This is how the "locations" would look. The world travel would be done similar to Fallout and Arcanum in that an icon gradually moves towards a destination. There would not need to be any exit grids, because in American Hare you can't travel to different world locations without a vehicle of some sort (and no, you can't stop between destinations to look at the landscape, unlike FO and AC).
One more note about that image I just put up. Obviously, it was thrown together to give an example. I'm not wanting stick figures and plain 3D boxes. I also don't want the indie stiff and black outline pixel look. However, I do want to know if this idea is feasable before I start on any "real" sprites.
Also, as you can see, everything would be built on a 2D grid. Each object would have their own four-sided gridspace and would be either checked true or false for collision. The parts would all be interlocking, like legos. People would have to be done differently, with some sort of a moving collision mask, but I haven't thought about that yet. I'd need at least two background layers and two foreground layers, each with the option of moving at a different speed in comparison to the player screen, in addition to the "main" layer. Ever used the Jazz Jackrabbit 2 CS? Something similar would be ideal for world building.
Again, this approach would, I think, be ideal, but I have no idea if it's workable for you, or even if anyone else thinks its a good idea. Like everything else, feedback would be great.
Making engines and editors takes a long time; so does making a game. In order to get around that problem, my plan is to move as quickly as possible toward having a finalized file structure for areas, dialogs, items, etc. To get to that point, I'm going to need rudimentary versions of the editor and the engine for testing purposes.
So I'd like to get within a few weeks to having a barely usable version of the editor, a barely usable version of the engine, and an extensible but nearly full-featured specification for the various file types. (They're going to be human-readable XML . . . part of the reason for my insistence on C# is that LINQ makes C# 3.0 pretty much the easiest language around for dealing with XML files.) Once I hit that point, it will be safe to start working on an actual game -- sure, the editor will be clunky, and the engine won't actually be able to display all of the stuff in the game properly, and the GUI system won't be finished, and it'll all probably be ugly as sin . . . but once I've got the game file formats finalized, they'll be like a contract that the engine and the editor have to adhere to, so anything made with them will continue to work (and improve) as the editor and the engine are further developed.
That's probably the best way to do it. Continually release better types, but get the basics down so actual game production can start. Be sure to include some sort of a cheat menu that will instantly teleport you to locations (would work best with the above isometric world), change character stats and reputation, and jump to a specific point in the story.
As for all your requirements -- they all seem very reasonable. Things like global reputations and stats will all be definable as custom properties that can be added to any entity in the game. Eventually, that will all be able to be done in the editor; in the early stages, they might have to be entered by hand into the XML files. The dialog files will follow the typical tree structure, but custom attributes will be able to be inserted in the text (like HTML tags or BBCode) that modify either the surrounded text or the entire dialog option. Any tags that the engine doesn't understand will be ignored, making it possible to define custom tags and mark up the dialog with them before setting up implementations.
Actually, in AH only your character has reputations and stats. The position of the other characters is story based and displayed through the written dialog, so there's no need for any other entities. I thought I should add that the reputation thing is similar to the dialog system that's been talked alot about in this thread - replacing it and toning it down to a more manageable level, and changing it up a bit to include traditional reputations. For example, a text might check two reputations to see if you are a "goodboy" and "saved Julian" before a certain output is displayed, and if instead of being a goodboy you were a "maniac" then a different output would be displayed. If you were neither but still saved Julian, you would get something different. If you did not save Julian, the entire thing would be a moot point.
The XML behind the fourth option in your mocked-up "screenshot" above might look something like:
{dialogoption requirement="player.hasItemOfType(IGun)" resultlabel="RaulShot"} {modifier type="action"}Shoot him in the leg{/modifier} I'm through playing games, Raul!{/dialogoption}
The RaulShot is the identifier of the resulting dialog branch; that branch would have the logic for dealing with what actually happens after choosing this. That piece of the XML file might start out like:
{dialogresult label="RaulShot"}
{reputationmodifier reputation="viciousness" modifier="+15" message="Shoot first, screw the questions! Word of this will spread."/}
{branch condition="yadda, yadda, put a condition here"} {script src="../../scripts/raulshot.script" /} Put text here to display if the condition is true. {modifier type="emphasis"}Put emphasized text here.{/modifier}{/branch}
. . . . etc.
All looks good, readable, and easy to work with. I do have two problems with it. I know it's not set in stone and only an example, but I'll bring it up anyways.
The "viciousness" reputation adds to a global variable that alters your current personality (dialog class) when it reaches a certain milestone. There should not be a message that follows. I see where you're coming from. Traditionally, each seperate reputation marker would be really specific and displayed, but in AH the player needs to gradually alter his personality, and only the overall point total will be displayed (through a certain name, of course). Other reputations, like "saved Julian" or "won foot race" would not be displayed. Reputations such as "human eater" and "infiltrator" would be displayed as is, with a description. "Human Eater - You have consumed human flesh. It was delicious." In that example, being a human eater would net you more options to eat people, eventually leading to a very unique end for the criminal overlord Don Leonardo.
These are the three reputation types in the game. Would a single reputation system be able to support them all, or would three different ones be needed?
The XML would be generated by the editor, but could also be edited by hand, since it should be pretty legible. It's going to take a while for me to work out the best way to do the XML, and how much to include in the XML files versus including as separate scripts or defining in the game engine itself.
Sounds really good. So, in your example, which called on my previous example, let me see if I understand were you are going with the idea of a generator. The code you listed would be displayed after you input these variables (I messed around with it a little)
To display the text option
Name (the text item's name, which would be ShootRaul) (can't be NA)
Condition (you previously chose to charge the door, so let's say ChargeRaulsDoor) (can't be NA)
Required Player Item (it's IGun here, of course) (NA for none)
Required Global Rep (the amount of good, bad, or crazy points required to use this option, so let's say lunging head first into a door to get at your target would require that you have 5 crazy points and 2 bad points) (NA for none)
Required Special Rep (nothing immediate here. you took on the job for the Don, but that was already checked previously when you first got to the house, so NA) (NA for none)
Required S.Special Rep (the quest required that you had the reputation of DonsCronie, and it doesn't need to be checked again, so NA here) (NA for none)
Load Next (if this option is chosen, this calls the next text displayed, so here it would be IShotRaul) (can't be NA)
After you choose the fourth option
Name (the option's name, IShotRaul) (can't be NA)
Add Global Rep (points added to your personality score / dialog class, here you would get 2 crazy points) (NA for none)
Add Special Rep (the hidden special reputation, in this case would be RaulShot) (NA for none)
Add S.Special Rep (the traditional reputation, it would be NA, but given your specific example it would be Viciousness) (NA for none)
Display (the written text displayed)
Load Options (ten boxes for possible answers to load, based on their own criteria. at least one box must be filled in. for NA, just leave the box blank.) (this isn't the actual text question, but rather the name of the text question to call. previously, ShootRaul was one such option for the previous text)
Is this similar to what you were thinking for the generator? Completely different?
Anyway, just a quick update to let you know I'm thinking about this.
I appreciate the updates, and your thoughts on what I'm suggesting (if it's feasable, beneficial, complicated, etc). It looks like I might have to actually commit to this game now.