Recent posts by Aesica on Kongregate

Flag Post

Topic: Game Programming / GiTD Timing

Doubt I’ll do it this time around—I mean I usually don’t, even though I mean to. I’m very slowly working on a rather ambitious bullet hell shooter (last one I think I’ll make, actually) and also, November has this that I’d like to participate in.

 
Flag Post

Topic: Rise of Mythos / [Devs] Worldboss needs more than 2 opening times

Time-gated content isn’t popular in most civilized countries. When will china realize that?

 
Flag Post

Topic: Rise of Mythos / Fan Game

Even if the games are free to play, web games (flash, html5, etc) are still considered commercial products because so many sites offer ad revenue sharing. (Kong does) If you steal assets from a source you do not own (such as this game) you could run into legal troubles if the developers decide to go after you.

A few more things:

1) RPGs are more work than you think. Good luck with that.

2) The world really doesn't need another tower defense game. Seriously. :|
 
Flag Post

Topic: Game Programming / My games Sphere With Elements

Harsh (but well-meaning) constructive criticism incoming!

1) The writing needs some serious work. I know many flash devs don't speak english as a native language, but it's still important for your audience to be able to understand what's being said in the game, and that it makes for an enjoyable read.

2) Oh my, that font. I know it's tempting to use fancy fonts because "they look cool" however in this case, it makes your dialog sequences harder to read. Titles and such are fine in fancy fonts, but you want heavy amounts of text to be displayed in something players can read more easily and thus, more quickly.

3) So the game itself is a breakout clone. That's fine for a first game, however the physics seem off. Rather than the trajectory being modified by the angle at which it hits the paddle, where it hits the paddle seems to be what determines the direction the ball is going to travel in. It's pretty easy to set up straight up-and-down bounces. Hitting blocks (and the ceiling) seems to cause the same thing to happen.

4) The goal of a given level isn't clear. I filled up my element-bar-thingy and the game kept going. Then, after fulfilling some unknown objective, I finished the level?

5) The shiny gold buttons seem somewhat out of place with the rest of the game's art style.
 
Flag Post

Topic: Rise of Mythos / [to devs] make inventory bigger

With all these stupid collection events creating insane amounts of inventory bloat, there’s really no reason to keep our inventory limited to only 2 pages. The devs, given how money-hungry they are, should be all over this because more pages to unlock = more gold consumption.

 
Flag Post

Topic: Rise of Mythos / Params Error?

Does it happen when the server select screen comes up? I had that happen when I set my browser to block third party cookies. Just make an exception to allow gamefuse.com to set them and it should work.

 
Flag Post

Topic: Game Programming / [Solved] Serialization sucks - HALP!

Wait, nevermind. After much digging around, I found that adding the registerClassAlias line seen below into my game-loading function solved it:

		public static function LoadGame(iSlotID:uint):Boolean
		{
			var bReturn:Boolean = false; // if fails to load, return false
			
			var soLoad:SharedObject = SharedObject.getLocal(LOCAL_PATH_SPECIFIC + iSlotID.toString(), "/");
			var baLoad:ByteArray = soLoad.data.byteArray as ByteArray;
			
			if (baLoad)
			{
				registerClassAlias("VecChapterData", Vector.<ChapterData> as Class);
				baLoad.position = 0;
				oSaveData = baLoad.readObject();
				
				bReturn = true;
			}
			else
			{
				NewGame(iSlotID);
				trace("save data not found - init new game");
			}
			
			return bReturn;
		}

What bothers me is that I have no idea why this works, or why any of the other vectors reserialized just fine despite being even more complicated. Specifically, the player data vector, for example, is full of vectors of items, and the items actually have vectors of additional properties. So if anyone can venture a guess, or if anyone knows why that single line of black magic code works (and precisely how it works) I’d love to know. Other than that, this seems to be resolved.

 
Flag Post

Topic: Game Programming / [Solved] Serialization sucks - HALP!

So yeah, this is still a problem. If I write my bytearray to a sharedobject, and then reread it from that sharedobject without closing the game, everything reserializes just fine. If I write it, close the game, run it again, and then try to read the bytearray, everything reserializes except for that one class. It doesn’t seem to care if I comment out the 2D vector, either. Anyone have any ideas at all?

 
Flag Post

Topic: Game Programming / GiTD #44 - *Contrats I_love_you_lots/dragon_of_celt s*

I missed my chance to vote, but since there were so few votes anyway, my vote would’ve decided the winner. Too much responsibility!

 
Flag Post

Topic: Game Programming / How early in development should I upload my game?

To here? As good as you can possibly make it if you’re serious about making your game and having it succeed.

If you want to upload a partially-finished game for feedback from select people, other developers, etc, some place like flash game license might be a better choice. When you upload a game to kongregate, the state it’s in at the time you upload it pretty much determines its fate as either a success story or something doomed to obscurity.

 
Flag Post

Topic: Game Programming / [Solved] Serialization sucks - HALP!

Yeah, ChapterData is the only serialized object that utilizes multi-dimensional vectors. You know, now that I think about it, I’m pretty sure I had this same problem way back when I first started learning AS3, but since I was still a noob, I chalked it up as not knowing what I was doing. I think I eventually ended up having to store the data another way, and since I’m running into this problem again, maybe it’s just a limitation in AS3’s architecture—something it can’t deal with. Time to try rearranging data.

 
Flag Post

Topic: Game Programming / [Solved] Serialization sucks - HALP!

Okay, I've spent long enough trying to figure these things out or trying (unsuccessfully) to search for the answers on my own, so I'm going to ask you guys in hopes that one (or more) of you know the answers off the tops of your heads:

1) First, the simple question: How do I prevent a particular property from being serialized?

2) And now...the (seemingly) hard question: I'm attempting to serialize the following into a bytearray, which is then stored inside a shared object. It's the same method I've used in pretty much everything else I've done to date. The save data class looks something like this:
package  
{
	import flash.net.registerClassAlias;
	import flash.net.SharedObject;
	import flash.utils.ByteArray;
	/**
	 * ...
	 * @author 
	 */
	public class GameData 
	{
		registerClassAlias("GameData", GameData);
		
		public static const LOCAL_PATH_SPECIFIC:String = "aesica/tlw1game";
		public static const LOCAL_PATH_GLOBAL:String = "aesica/tlw1global";
		
		// saved data singleton
		public static var oSaveData:GameData;
		
		// saved data
		public var iCurrentChapter:int = 0; // current chapter.
		public var iSaveSlot:uint = 0; // save slot used for this particular game.
		public var aCharacterData:Vector.< CharacterData>; // character-specific data
		public var aChapterData:Vector.< ChapterData>;
		//public var aChapterData:Array; // this was an experiment.  It actually somewhat worked, however due to being an array, everything inside lost its class-specific identity
		public var aKeybinds:Vector.< int>;

		/**
		 * Creates new game data.  Don't use the constructor, use static functions NewGame or LoadGame instead.
		 */
		public function GameData(iGameSaveSlot:uint=0) 
		{
			iSaveSlot = iGameSaveSlot;
		}

		// NewGame(), LoadGame(), and SaveGame() are static functions.  I can post them if necessary, but they don't seem important, so I'm leaving them out for now.
		// They basically just create a new instance of this class and initialize its contents, or utilize the bytearray's writeObject/readObject functions
	}
}
And everything works fine, except for the vector containing this class when I attempt to reserialize the saved bytearray:
package  
{
	import flash.net.registerClassAlias;
	/**
	 * ...
	 * @author 
	 */
	public class ChapterData 
	{
		registerClassAlias("ChapterData", ChapterData);
		
		// several irrelevant pseudo-enums ommitted for the sake of cutting clutter
		
		public var iCurrentCharacter:int = 0; // -1 denotes "all" characters
		public var iHighestRegion:int = 0; // highest region cleared
		public var aRegionData:Vector.< Vector.< int>>; // Vector containing cleared area data:  1 = clear, 0 = unclear
		
		public function ChapterData(iChapterID:int=0) 
		{
			var xData:XML = Asset.xSpawnList;

			var iRegionCount:int = xData.chapter[iChapterID].region.length();
			var iAreaCount:int;
			
			aRegionData = new Vector.< Vector.< int>>(iRegionCount);
			
			for (var i:int = 0; i < iRegionCount; i++)
			{
				iAreaCount = xData.chapter[iChapterID].region[i].area.length();
				aRegionData[i] = new Vector.< int>(iAreaCount);
			}
			
		}
	}
}
The trace output window screams this at me during reserialization: TypeError: Error #1034: Type Coercion failed: cannot convert __AS3__.vec::Vector.< Object>@cffdb51 to __AS3__.vec.Vector.< ChapterData>. And the next piece of code that attempts to access aChapterData throws a null object reference error. Everything works fine normally if I create a new game, but if I attempt to load (deserialize the shared object to restore a saved game, then retrieve it later) this happens.

I should again note that everything works perfectly (loading/saving) except for this one part, and the CharacterData class in particualr is a lot more complicated and has several of its own vectors (for items, spells, etc) that also serialize/deserialize just fine. Only ChapterData is screwing up, and at this point, I don't have any idea why.

Any ideas? :(

Edit: The forum software cut out the vector types, so I added spaces. Those spaces aren't in the actual code, so that's not the problem.
 
Flag Post

Topic: Game Programming / GiTD #44 Theme Suggestions

I have nothing to show because all I really did was set up some data structures, then tableflip and walk away after trying to get something as simple as a global class/external package/whatever working properly in haxe/openfl. It’s proving to be quite the rocky adjustment.

 
Flag Post

Topic: Game Programming / [Solved] Input text field acts weird when not put on stage.

I had a similar problem when making an edit mode for an rpg-style dialog engine. All the input textfields would behave exactly how you describe yours until I set selectable to true. Since this is where the user types, you want it to be selectable.
 
Flag Post

Topic: Game Programming / GiTD #44 Theme Suggestions

I don’t know how twitter would help unless you have a lot of followers. Then again, maybe I just suck at twitter.

 
Flag Post

Topic: Game Programming / What's the new programming trend?

OpenFL looks like something I should really be looking into. GitD looks likes a great excuse to try it out!

 
Flag Post

Topic: Game Programming / Troubles with Array lenght!

If everything in your arrays is going to use the same data type (in the case I’m seeing, strings) you should consider vectors instead. Vectors are stricter and will throw errors when mistakes crop up rather than just failing silently like arrays do. They also give you access to autocomplete for elements, whereas arrays do not. Now regarding enums…yes. Use them. They are aweome. To give an example:

private static const ITEM_TYPE_GENERIC:int = 0;
private static const ITEM_TYPE_ARMOR:int = 1;
private static const ITEM_TYPE_RANGED:int = 2;
private static const ITEM_TYPE_SHIELD:int = 3;
private static const ITEM_TYPE_WEAPON:int = 4;
private static const ITEM_TYPE_CONSUMABLE:int = 5;

private function someFunction():void
{
    var itemList:Vector.<Vector.<String>> = new Vector.<Vector<String>>(5);
    var armor:Vector.<String> = new <String>["leatherHard", "rusty", "leatherBlack", "iron"];
    // do the same for vectors with names such as:  ranged, shield, weapon

    itemList[ITEM_TYPE_ARMOR] = armor;
    trace(itemList[ITEM_TYPE_ARMOR][1]); // traces:  rusty
}

Personally though, I wouldn’t ever consider sorting my items like that. Make an item class, then have one of the properties be “type”. Then use enums to assign “type” a value corresponding to the enums. Using the same ones from above, a class would let you do something like this:

var inventory:Vector.<Item> = new Vector.<Item>(40); // our inventory has 40 slots

var healingPotion:Item = new Item();
healingPotion.type = ITEM_TYPE_CONSUMABLE;
healingPotion.name = "Healing Potion";
healingPotion.goldValue = 25;
healingPotion.power = 100;

var blackSword:Item = new Item();
blackSword.type = ITEM_TYPE_WEAPON;
blackSword.name = "Blade of Eternal Suffering";
blackSword.goldValue = 1; // elite gear always seems to have stupid sell costs
blackSword.power = 255;

inventory[0] = healingPotion;
inventory[1] = blackSword;
 
Flag Post

Topic: Game Programming / GiTD #44 Theme Suggestions

N: Robot
V: Build
A: Fighting
Game Mechanic: Turn-Based

Build a custom robot and turn it loose to fight enemy robots—RPG-style!

 
Flag Post

Topic: Game Programming / Happy Programmers Day!

Time for some code revision:

while (!programmersDay)
{
    if (Math.random() < 0.000001)
    {
        workOnProject();
    }
    else
    {
        slackOff();
    }
}
 
Flag Post

Topic: Game Programming / Happy Programmers Day!

I’m going to settle for elegance in simplicity.

while (programmersDay)
{
    slackOff(); // randomly spawns instances of world of warcraft, youtube, twitter, facebook, or other random distractions
}
 
Flag Post

Topic: Game Programming / Need your opinion for a just published game

@wercooler: Several things actually, as long as you don’t mind my harshness.

1) It needs some kind of animation and audio queues to indicate that the player is attacking, as well as something to indicate hits and damage taken by both the player and enemies. I actually didn’t even know I was taking damage at all until the game over hit. The health numbers really don’t count and could probably be replaced with health bars. Polish, polish, polish!

2) Levels. The “play until you die and get a game over” mechanic really doesn’t work in this day and age. Offering levels not only allows players to reach checkpoints, but it gives them a tangible goal to work toward. As it stands now, I suspect many people will just walk away after the first game over, once they see they’ll be starting back at square 1 when they try again.

3) Smiley faces and stickmen are two things a lot of budding developers use, but doing so rarely results in a game people will take seriously. If you choose to refine this game, you should consider replacing them with more aesthetically pleasing assets. Zombies, aliens, etc. That also allows you to utilize a better storyline, too.

 
Flag Post

Topic: Game Programming / GiTD #43 - *Congrats Halysia*

Yeah I suck. Mine got scrapped because I wanted to try out Starling, then decided halfway through that, after getting used to blitting, I really didn’t like working with displayobjects for anything other than UI elements.

Oh well, voting:

1) Fly Horror: Despite the almost complete lack of graphics and silly “storyline,” I rather enjoyed it. My only complaints would be that the character moves too slowly and that I can go outside the game boundary for some reason. Have you considered faster movement, but with less time to complete the objective? Also, does the other guy actually do anything other than get in the way slightly?

2) Slime Horror Dash: Feedback omitted as per developer request.

As for the others:

Flappy Horror: The clicking isn’t very meaningful because it’s pretty easy to “stay afloat” while not going within range of the death walls. Needs a clear goal other than just “harvest body parts.” Maybe have each level provide a “shopping list” of what’s needed to build a homunculus and pass the level. To add spice, certain “creatures” yield more of a certain body part, so you could reward players who harvest effectively. Finally, while I’d like to say that more hazards should be present, I think they might be overly annoying and unpleasantly difficult to avoid, given the current controls.

Earl the Horror: Despite the simplistic graphics, I knew right away what was “good” (the bean-looking things) and what was “bad” (the shuriken-like things) so good job with that. As with Flappy Horror, a quota of beans to collect in order to pass a level would probably be nice. Possible upgrades too, such as more life, less slippery movement, the ability to shoot back, smaller character, etc.

One thing I wanted to say though, as it pertains to all of the games, and most of what we make in nearly every GitD: The “Game Over” mechanic is pretty much obsolete, and players today generally don’t seem to be into it. Back when I played NES/SNES games it was fine, but games today are all about encouraging you to keep going. The trend seems to be:

1) Get sent back to the nearest checkpoint you last visited, with progress rolled back to when you triggered that checkpoint. This is more for metroidvanias than linear games, as it encourages you to perhaps try a different route, strategy, etc.

2) Fail the level, but keep any currency, exp, upgrades, etc. They encourage you to try again, typically after picking up some upgrades to make the next attempt a bit easier.

I realize the scope of GitD doesn’t generally allow for multiple levels, and “the big game over” is significantly easier, but I just wanted to put that out there.

Having said that, nice job guys! :D

 
Flag Post

Topic: Game Programming / Time spent on games

I spent about a year making Eisydian Saga, which is pretty much crap, but was a huge learning experience for me. First, I made it in AS2, then ported it to AS3 when I realized it wasn’t going to be viable in AS2. Casual/spare time project. I’ve been working on the “sequel” to it over the last year or so.

Note: By “sequel” I really mean a replacement, meant to tell the story properly and combine the other two sequels I had planned because I want to move past shooter games after this is done. I should note that while ES was made at a very leisurely pace, the sequel is coming along even more slowly than that. I find it hard to motivate myself lately, given how mediocre flash games seem to do these days unless they’re scumbag MMOs.

What can I say? Shinies like World of Warcraft, Star Trek Online, and a huge pile of sci-fi books tend to distract me and suck up most of my free time these days. :)

 
Flag Post

Topic: Game Programming / The future of flash

Originally posted by EndlessSporadic:

I’m going to throw all of the flash fanboys under the bus here because they need to wake up and smell the coffee. Flash is dying as a medium for making profitable and respectable games. […]

Technically, that’s not throwing anyone under the bus. That’s simply stating that Flash game development isn’t what it used to be.

 
Flag Post

Topic: Game Design / Eisydian Saga - A Post-Mortem

So yeah, I decided to write up a post-mortem analysis of a game I made over a year ago to both focus my own thoughts and to perhaps help out other devs. Anyway, it’s here if anyone’s interested in reading it:

Click Me!

Let me know what you think and more importantly, what kinds of things I should add to make it more useful. Thanks guise! :D