Looking for Game Story
I've been a software engineer for 10-ish years and I've had this itch to build a game since I was a kid. I finally told my wife I would start doing it and now I've made enough progress that I want to ask for help from other people. I've constructed a game engine in AS3 (Adobe Flash) that's decent and is capable of generating a terrain as well as characters if I have graphics. It follows basic rules of physics like not running through walls and such but that's about it. It's not exactly the most advanced engine but it works pretty well as a 2D game engine. I want to make an RPG but I'm horrible with making good ideas. I can code just about anything but my idea of fun isn't the same as everyone else.
@shirish
Don't worry about, you're near the end of your game making cycle, I'm still near the beginning. The game you're working on looks pretty sweet by the way.
@cemkalyoncu
What are we going to call this game? I've been looking at this discussion and we've already spent a lot of time, money, and effort getting things prepped but I don't see a name for it anywhere. What about "Tales of Kujasa: The 5 gods" or something like that? Please share your thoughts, I'm curious to know what you've been calling it!
@shirish
I've looked over that thread before and decided not to offer my services becasue I don't think I can emulate that art style. I'm also not really looking for more work right now, I've got a number of projects to keep me busy. Next time just send me an email, I check it every weekday.
Hi @Sharm :)
Sorry to hear you won't be able to help in making portraits.
I wonder whether you already played the game but if you did, and saw something you think should be improved, feel free to tell.
Best regards,
Bertram
@cemkalyoncu
Would it make your game any different if we suddenly and completely by coincidence had some angels and demons that could mysteriously use the base LPC assets (such as armor, weapons, etc.)? Just wondering if your story might benefit from anything like that...
Still working graphics on my end. I'll do a little work with the engine to accept JSON from Tiled so that anyone can make a map and my engine will accept it directly.
Would it be useful if I included tiles from "[LPC] Colorful Sand + Deep Water!" into my tile remix?
http://opengameart.org/content/lpc-colorful-sand-deep-water
If you think so I can do that pretty quick and easy.
I don't think angels or demons would do much. I don't think colorful sand or snow will any good either. The best part about this story is that it doesnt require much. Just humans + animals, forest and dirt. It would be nice to have Tiled support up and running. I didnt heard from the mapper we had though.
Maybe I should phrase it differently. Would mystical/magical elements help in a sequel to the base plot you have worked out for this game? I haven't read all the way through the story you posted in Turkish (because I'm not particularly good with reading Turkish) but from the description it sounds like you aren't certain what would happen if the temple was rebuilt. Now correct me if I'm going in the wrong direction, but wouldn't the temple being rebuilt introduce a whole lot of magical stuff into this world? Would angels and demons and magical creatures have a place in it then?
Ah well, then thats a big why not. Still unsure about angels but demons may even prove useful for later stages of the game. Witches and warlocks would be able to summon them. May be some sort of Solar or Planatar style creatures can be summoned by the monks as well.
So the answer is a theoretical yes. What I'm hearing is we need some clothing to make the base LPC characters look like witches and warlocks, yes? Probably at least 2 or 3 sets of witch and warlock clothing items are in order.
I'm not going to comment on potential story development here because that might ruin it for some people but I'm definitely pushing for the ruins to be rebuilt and to have some crazy magical stuff happen after that.
Witches and warlocks are not crowded, just 2 sets (recolors even) would do fine I guess. Monks are more important but recolors of standard robes will do just fine.
I havent said anything for the name right? Partially because I simply call it Kujasa or Trimak to avoid tipping the players.
That makes a lot of sense. I'm wondering if a slightly more suggestive title might get people's attention though. Maybe "Kujasa: The old gods" or something to that effect. It doesn't really tell the player anything except it has something to do with old gods. Or, if you're trying to avoid alluding to the old gods entirely, you could try something like "Kujasa: Tales of Trimak" just for grins.
Lots of resources are about to be completed and posted to OGA. Wondering if anyone wants to make some mockup maps in Tiled using tilemaps I've put together or had made. Anyone interested?
The newest tile sets by Sharm have been posted! I fear these may be the last sets Sharm does in LPC style for a while. I'm sad but honored to receive her last masterful LPC works for the time being.
Redshrike has been animating an imp for this project, and quite impressively I might add! He's starting university classes soon but I think he's still going to do a bit more animating as time goes by. Watch for updates. I'm still sourcing a second graphics person to help with tiles as needed so Redshrike doesn't have a heart attack over all the stuff on my to-do list. I think for the time being we have enough to start making maps in the style this story deserves.
There's a new collection called "Kujasa" where I've collected various resources we can use for this game. If you have other assets you'd like to use just add them to the collection. Is there anything else you can think of that doesn't exist and you'll need for this story?
Let's make some maps in Tiled! The exact layout used in Tiled doesn't matter too much as long as the file names are consistent. I'd prefer pre-built objects as separate map files so they can be layered properly. Name the tile sets the same as the tiles on OGA and we'll be in good shape. As long as the file name is reasonably close I'll figure it out and adjust as needed.
My long-time and dear friend Karina has voiced some interest in making game art. She's working on her master in graphic design (I think that's the official major she chose) and she's pretty darn good at just about everything. I convinced her to make a profile on here, this is her name:
amber-butterfly
I would like to introduce her to all the awesome people here on OGA so she can make some contacts, especially all the awesome pixel artists.
jasonisop seems interested in helping so the source is going up on git hub. I'll have a link once it's up and accessible. If anyone else is interested in contributing it's still an open project.
https://github.com/jasonisop/Kujasa
Just going to throw in an opinion here:
I really don't ever touch AS3 code but I'll do my best to provide some feedback with my programming experience outside of AS3.
For Managed\Garbage Collected environments like Flash, Java, .Net etc the pattern you use in CharacterLogic/NPC.as (with the Trash routine) is called the dispose pattern. The best way to do it is to implement a common interface IDisposable so whoever is looking at the code can tell right off the bat if an object needs to be disposed (trashed) or not before dereferencing it.
http://en.wikipedia.org/wiki/Dispose_pattern
Aside from that, the only other thing I could suggest while I was (albeit very quickly) looking over the code was that you have some boilderplate code (i.e, your NPCs share some of the same implementation as Hero) You could create an abstract Character class to contain those common implementations and then have Hero & NPC inherit from that Character.
I personally haven't used Tiled. It looks great but I'm not sure how well it scales with the complexity of the game - if it's all you need though it should work out fine. That said, from my experience, writing a tailored editor is essentially just writing some wrapper and UI code around some abstract game components and it really isn't as tedious as it sounds to do. (i.e, my map editor is essentially 4 small classes. Two of those are wrappers (i.e composition) around an abstract tile & entity class with sufficient metadata to serialize them to a save file etc. The other is some UI Code, and the last is just some code to initialize the game and UI and have them work together.) The point is that the Map Editor should be built directly off of the game - it makes it very easy to implement and maintain.
Anyway, looks great so far, keep it up.
@jeremyW
Thanks for the comments!
I did notice my NPC and Hero classes share some boilder plate. I copied several things directly from Hero to make the NPC class. They're separate intentionally because a few things are hard to extend and customize for each class since AS3 doesn't allow function overloading. It was easier to copy and modify the bits that were different between them and leave the same funciton signature in place. I would have done a simple function override in an extended class but the function would be a rewrite anyway so copying made more sense.
As far as garbage collection is concerned in Flash it's very hit-or-miss when things actually get garbage collected. There's no explicit delete and the only way to make an object go away is to remove all references to it. I don't understand why the gc in Flash is so weird but it only gets called when memory is bloated and only objects that don't have any open references are considered for gc. The tricky bit about that is if an object is referenced by enough other objects, even if there's an island of unreferenced crap that all references each other, Flash won't gc it! I don't know the exact number of nodes it takes to reference each other before Flash won't touch it but it's not very many. Because of that I started including a Trash routine on all objects with several references to other objects. It seems in Flash it's better to dereference everything by hand, otherwise memory bloat becomes a serious issue. Even if the gc runs it still might ignore abandoned objects with circular references, I don't know why...
I love the idea of making a map editor specific to this engine but I'd have to teach everyone else how to use it. I'd also have to document it and add features any time I ran into something I needed that it didn't already have. I settled on Tiled because it's already feature rich and people know how to use it effectively. It's also available for all major platforms, has a significant amount of documentation, an active developer and user base, and it can do everything I need. Choosing Tiled has more to do with enabling everyone else helping with this project.
@William the GC works that way for most GCed environments. Objects are only collected when they both aren't at all referenced (or Soft\Weak referenced) and when their is a need to do so (since the GC cycle can impact performance if it runs too frequently and usually these excess cycles are a waste until memory nears considerable exhaustion) Forcing the GC to collect is a discouraged practice since most of the time it results in poorer performance for those reasons.
My point about Trash was that it is actually a well established design pattern called the dispose pattern. You can look at a proper implementation for it in AS3Commons.
Your Trash function doesn't have any effect because all it does is dereference internal members - which in turn must wait for the GC to collect them anyways. If this improves performance it is because you have a reference still to the NPC object somewhere.
You shouldn't need method overloading to do as I described. In fact, I would probably make something like faceObj final anyways - it doesn't make sense to override\overload an implementation like that.
Anyway, they're just some basic suggestions, feel free to ignore them if you'd like - this is your project and you are much more familiar than I am with the code.
I wrote a big, detailed reply and went to do something and hit ctrl+r instead of ctrl+c so it was eaten by the browser before you got to read it :(
The gc in Flash doesn't work that well. In fact, it doesn't work at all sometimes. I setup the gc to run between stage loads because it's sort of a natural break point and serves as a clean slate to work from (for the sake of memory management anyway). The only time the trash method gets called is right before a stage load so it serves the purpose of preparing everything that should be eaten by the gc and spoon feeds it accordingly.
It doesn't feel natural to do manual memory management in a gc'd environment, I agree. Here are some links that relate to why I wrote disposal methods instead of leaving it up to the gc:
I'm sure you're right about boiler plate in the Hero and NPC classes now that I think about it. I haven't looked at it for a while and some of it would make more sense to make a shared inherited class base since they do share a good bit of code. Again, haven't messed with it for a while and still haven't refactored it so it's still messy!
At this point it's beating a dead horse because you've clearly explained what you meant and I've continued to ramble on about the gc. I know I'm not responding directly to what you're saying but maybe an example will illustrate the point:
package {
public interface IDisposable {
dispose():void;
}
}
Using that interface on a class will promise to the compiler that there's always going to be a method defined with that signature, right? If I implement this on all my complicated classes with object references and I define the method that gets rid of all those references then I'm basically promising the compiler that the function I'm calling exists because the interface says so. In some situations (specifically with BitmapData and some other built-in types) there's already a dispose() method available. I called mine Trash() because I wanted to remind myself that it should be called after the object isn't needed and I forget to call it dispose().
The way all this talk ties to the gc is when you call the dispose() method it's supposed to prep that object for disposal. All the interface does is promise the compiler that the method dispose() is defined somewhere in the class that implements it. I didn't make any interfaces because I was still writing the core functionality for the engine. I know that's supposed to be part of that process but I change my mind a lot about how I want to name methods. Forcing classes to use interfaces while I'm still deciding the names doesn't make much sense.
Since you've mentioned using IDisposable and interfaces in general that's probably going to be one of the things I make next. There's enough there to benefit from using interfaces and since there are now two of us working on this project code it makes better sense to have them. So, after several walls of text and a lot of wordy non-sense, thank you for reminding me to use interfaces!
Now is the best time to make interfaces because now we're solidifying and building extended functionality.
I took a break from this project for a few months but I've picked it up again (until school starts, we'll see how much time I have then).
UPDATE
- Added support for reading maps made in Tiled
I've settled on a set of graphics to use as tilesets and I've got a standard naming convention that works for my game. I'm looking for map/level designers. If interested you can download some Tiled projects and tilemaps from my site here:
http://will-thompson.net/game/tiled.zip
Attribution is not included in this file because I will include attribution in the game once it's done. There is quite a list of contributors for the assets included.
Made some significant changes to the code base and messed with the demo a little bit. You might want to give it a test play now because it's almost like a real game!
I've come to some conclusions. I'm not making an engine for a game, I'm trying to make a game. I'm not reinvent the wheel. That said, I've switch development away from AS3 to HaXe and I'm using HaXeFlixel as the engine.
It's preliminary still but I have working examples that show me how to do everything I've made so far without sinking a huge amount of effort into retooling. The way I was making the framework in AS3 turned out to be similar to flixel so it's not a dramatic shift. I'm taking a week off from work to tie up loose ends and because I'm tired of never getting time to work on this! Will post updates in coming days.
Pages