2013-10-27

Hm, so what’s been happening recently

Well, there are some new things I am working on. As always that’s up at https://soundcloud.com/seagaia/

A new-ish one is https://soundcloud.com/seagaia/northworld-even-the-ocean-ost . I’m working on one of the overworld musics for even the ocean. I think it too me so long to arrive at this because you really need to understand your game and its structure before you can even start to work on something as unifying and thematically important as a world map theme! So it’s good that I think I am making headway on it.

Even the ocean is fine otherwise. It’s just grinding out some work on something each day, and eventually the game will be done. Though I feel like I should be able to do more !

I also had the idea to install Anodyne in some art galleries around Chicago. I want to make an installation that gives the public an eye into the creative process around a game, rather than viewing it as an entertainment commodity. I’ve been discussing with a few friends the best way to do this an dI have what seems like a decent idea (and it is cheap to do). Now to find someone that will let me display it!

—–

It’s getting colder!

Sean

2013-10-20. humble bundle etc, other things

oops, look, i have forgotten to write anything recently..

still working on even the ocean most of the time, and then a small SECRET side project, hm, i can’t say much about it, but it is releasing in japan first in a very uh, different way, which should be interesting. that release won’t be for a few months though.

another side project is on the backburner, but that’s okay, since i’ve hardly done anything for it (it’s a small adventure game i want to make).

—–

anodyne stuff

so, maybe the most recent bit of news is that anodyne android finally released! well, it released through the HUMBLE BUNDLE. This is great exposure wise for anodyne and also financially for jon and I! I had to make a few fixes though and push another build (barf). thus ends the anodyne saga forever, which makes me happy because i’m fucking sick of working on it (I was sick of working on it since like i started fixing the mobile version and bugs). it’ll be out on google play when the bundle sale’s over, anyways.

Hooray!!!

more to the anodyne postmortem is coming (never) whenever i decide to (never) write it(.)…

ANODYNES DONE FOREVER!!!

anodynedone

—-

even the ocean

development’s fine. it has just been programming features and then staring blankfaced at the level editor (when you stare into the empty level, the empty level…)

didn’t decide to enter the igf, there was really no point because we’d have to spend all this time doing ‘glue’ stuff making the game playable in a coherent way (right now it is just transferring the coherent world design in our heads into levels. so we are building levels now, for the most part, which is time consuming! i stare at an editor quite often, – the level editor or code editor)

we decided to spend most of our time working on THE OCEAN and once we finish that, do EVEN. so that will be a long time i guess, but i’ll keep myself entertained with development on even the ocean , side projects, and musical projects. i have this thing of needing to release stuff every now and then so the long development cycle of ETO might drive me insane otherwise (but when it’s done it’s gonna be so so good!).

with THE OCEAN, we’re in a “early/mid july” anodyne state…i.e., we are building out dungeons and levels and tilesets and sprites and music and have all of the main dungeons/levels planned, with some interstitial stuff that will be thought of as we go. so realistically…there is like 5-6 mos of work left on The Ocean. I will try to work harder though to get it done faster…

—–

this post gets more miscellany/boring/personal after this point, so you could probably skip it.

music stuff

in a secluded northern place

I wrote this for the indiestatik kickstarter and also even the ocean. it’s in an even-the-ocean melodic style (even the ocean music is tending to fall into a melodic or ambient style, both being sort of supported by use of sound effects as instruments at times).

i’ve been using the free Carbon2 NI synth for some of my sound effect instruments and leads/pads/etc. It’s nice, i guess, but I like to balance it out with snes/genesis instruments to not give the music too much of a ‘modern’ feel, because i feel that would overly clash with the art style.

luckily, my production is quite bad so i would probably have trouble giving a modern feel to the music, whatever that means

Little Neurotic Space Station Vignette #1

http://tindeck.com/listen/hhau

This is a non-game music project I’ve been working on.  you can listen to the first song here (i need to fix it, it clips in this.) The title is mostly meaningless but seems to describe what it ended up sounding like. I’m trying to work on a series of sort of upbeat, melody-driven/traditional structured electronic stuff that kind of focuses on describing an abstract scene or short series of events. i’d like to add lyrics in some way but i don’t know how to do that / setting up recording is a huge pain / mixing is hard / i should practice more at writing something that is electronically interesting without the difficulty of lyrics anyways

So, yeah. I’d like to nail down a personal style for my non-game music, but it may take some time. Ideally a style I would be able to do a live show with. It may be cool to sing or whatever, but I don’t know what to sing about…I don’t really have any emotional crisis or thing worth singing about – my outlet for that is often talking with friends – what would i sing about? hm. maybe i’ll just not sing. I think I have an okay style for my game stuff – it will get better as i get better production skills, I think – i would like to experiment more with incorporating sound effects into the music)

i’ve also been listening to a lot of perfume’s LEVEL3 and capsule’s CAPS LOCK. the first is nice dance/techno/jpop fare from yasutaka nakata, the latter is also by him but more of an avant-garde/electronic self expression album, which is more interesting i think.

———–

outside of that,

…it is starting to get colder. chicago weather can be like that, fall ends so quickly and then you get this sort of mediocre muggy wet/freezing period that goes on until half-ending in april/may and then summer. i am also trying to get contact lenses. i got some last fall as a test (they charged me like $200-$300 without telling me to ‘get them fitted’, what a load of shit), and i can’t get them in. my eye hurts after trying, but whatever, i will figure it out eventually/

2013-10-8

Well, for one, Anodyne will be out on Android next week.

I was thinking about creative control and games.

There’s an initial perception you have when creating areas in a game. My goal is to get the realized area as close to your mental image as possible.

Of course, it’s impossible to replicate this unless you are skilled in all mediums that the area requires – in my case, I can’t quite cut it for art .

So every sort of compromise you make is going to distance you in some way from the initial idea. Something is “lost” when you are communicating what you want to the composer, or artist, etc. But it’s sort of necessary…but should be minimized.

Is it possible to realize the idea in a pure-form with no compromise? I’m not sure. And there are likely things that benefit from compromises (discussing design decisions, letting someone else do something else…)

The reason I like a small team is because we have the most control. And I think this is why it’s important to know the person you’re working with if it’s sort of a game where you are coming up with environments and a story and stuff. Because when you have an idea for an area, and how it fits into the game world, you want to get the best real approximation of that idea, and the best way is if the person you are working with you can trust – since they kind of get used to what you’re going for with the limited expression that words afford us.

I think this is why larger-than-necessary teams often suffer (though of course large teams can still work out well if there is great management and a strong creative lead). There’s a lot of cross-communication and stuff gets forgotten, and there’s sure as hell no way the creative lead is going to remember every detail they had in their head or whatever.

And it’s also why I think knowing the artist and musician is important, and letting them know about your world design or whatever, otherwise the music comes off as out of place or not very “personal”.

Communication is key, I guess.

This entry was rambling.

Anodyne Postmortem #0.1 / 2013-10-07

Today is October! The IGF deadline is in a few weeks. I don’t know if we will submit Even the Ocean. I have thought about it a bit, I do not know if we will submit . It seems premature. And I don’t really know how we would phrase such a demo…an advantage with Anodyne was the immediately strange nature of the areas. We don’t have that with Even the Ocean, the world is more “realistic” (though still fantastical). The interesting nature of the world, I think, doesn’t come together until you’ve seen it all, though on an aesthetic and gameplay level each area should be pleasing. However, there’s the “Even” part of the game which could be an interesting contrast if we got that into the demo, but that needs a lot of work. Er, basically I don’t think we’ll bother.

Jon and I think it’s best if we finish The Ocean first, then move onto Even. This might be a while, but, it’s important that both games come out at the same time as the same binary.

Anyways, I’ve decided to do the Anodyne postmortem in a series of parts. Because one post would be horrible and too big and I would never finish it (just like a game! hahaha! rpgs! )

I want to ctrl-T out of this post so bad but..

Part -1,-2,…: Discussion of the main development phases (March 2012 – January 2013). Thoughts on process of design, music, gameplay, art direction, communication, evolution of the game.

Part 0: Release (this post) – bug testing, the days before, of, and after release.

Part 1,2,…: Post-release (iOS, Pirate bay, getting greenlit, Steam, Japanese version, Android)

Part F: Financial . This won’t happen for a few months (sorry) because we uh, have something that will be changing the financial data quite a bit, soon.

ANODYNE POSTMORTEM:  PART 0.1:

Bug Testing, the days surrounding release, initial reception.

I guess a lot of this is journal-y in nature and perhaps not the most interesting game-development wise.

PRE-RELEASE

In January I decided to do bug-testing on a larger scale. I got some friends to help out. My friend Etan had been testing throughout development and caught a lot of stuff, so that was very useful! There were a lot of friends from Twitter willing to help. Luckily, reception to the game was positive. The first person to completely finish the game, AFAIK, was poe  of Six Sided Sanctuary. so that was interesting! Bug fixing was, as you might guess, unpleasant – there were some nasty bugs with the dust and moving between screens (ugh!) but,….they got fixed. There’s still a bunch of tiny issues in the game, but I’M NEVER GOING TO FIX THEM! Because…I’m afraid I might just break something.

Apparently around the end of January I decided we would release on Feb 4th, a Monday. …I was sending out Fastspring codes the day before. I remember botching something up with release (make sure your damn release codes work! just get a humble widget, they’re easy to get now – and use that. don’t fuss with bmtmicro or fastspring)

We were to launch on GamersGate, Desura, and FastSpring..

THE DAY OF RELEASE

This was 2013-2-4. I wonder what Jon’s side of things were. Anyways, it had snowed recently and it was warm enough where everything was totally melty. The day before I remember my close friend telling me she was in the hospital. I think she may be my closest friend from college, so this was uh, a bit of shocking news for me the day before release. Anyways, I woke up early on the 4th, released the game, tweeted, blah….walked in the shitty weather in my crappy boots through puddles and visited my friend. I sat in the hospital Au Bon Pain afterward and ate a cookie while refreshing my Twitter feed. I don’t remember anything else about the day except that, oh, I think there was something Anodyne related on the front page of /r/gaming for a while…and I think we sold like 200 copies the first day.

Which uh, isn’t enough to live on obviously, but was an okay start. An e-mail I sent that day, I seemed pretty excited.

 

I guess things went better than expected at that point, but, of course, in the coming weeks, even better things would be happening! (We were still struggling on Greenlight…)

 

 

 

After

2013-10-3

not too much to report, I’ve been running around with family stuff the past two days. i did implement a few new entities for the game though. (even the ocean).

Anyways, yeah, more work will continue tomorrow, hopefully some level design.

I am in the process of writing yet another…Anodyne postmortem that I won’t finish writing, eventhough I’m trying to cut this one up into pieces, sigh.

Additionally, I’m going to be working on a secret project! It’s small and maybe I will talk about it soon a little bit.

did you know chocolate wafers are really great? they are the greatest thing. you can buy packages of them for $2.50 from the super market and they are like almost 1500 kcal, and make a great snack. i forgot what brand they are.

Getting japanese fonts working with an Adobe AIR game for free

Instructions on how to get Japanese (or any language) fixed-width bitmap fonts working, assuming you have the TTF file and uses UTF-8 encoding.

I am likely going to be releasing a Japanese version of Anodyne in September for Windows (Mac, Linux and iOS if I can compile by then), working with a localization team Kakehashi Games – who have localized many things in the AAA sphere, as well as the indie – they did Superbrothers . Which is quite cool!

Anyways, this is a pretty straightforward task programmatically, there are just a few hiccups. For some reason there is no easily available program that does exactly this, but there are lots of pre-existing tools that you can cobble together.

Anodyne uses the FlxBitmapFont.as class. It is a great bitmap font class that works with fixed-width bitmap fonts as PNGs, and uses a string to map character codes to the actual symbols.

So I was recommended a font that would work, and I set out to find it  – which was easy – I found it in PNG form. Unfortunately, the .png that was provided did not match up with the data of the actual .TTF , so I couldn’t get a character string out of the .png which I would use for the bitmap font class. So that wouldn’t work.

And typing out the string myself is not feasible, because, well…

…yeah.

So the TTF MUST contain character codes, right? I found a nice python program – http://sourceforge.net/projects/fonttools/ – which, once installed has a command-line utility, ttx.py .

If you run

python ttx.py -t cmap font_file.ttf

It produces the file “font_file.ttx” . It’s just an XML file though, and contains all of the character codes in hexadecimal format. Depending on the file there could be a few different character sets in there, but it’s easy enough to cut out the ones you don’t want via inspection and playing with the TTF in a text editor. Once you’ve done that, it’s straightforward to convert the XML file into a UTF-8 string that will be used in your game to map the character codes to symbols in your font. I just wrote this quick python script, which just extracts the character codes from every “<map>” node and writes it out to a file. If you uncomment the “out_s += “\n”” line, you can make it print a certain number of characters per line, which is useful for making a .png that you can read better. However, you will want to comment it out when generating the string you use for mapping characters with FlxBitmapFont.

import sys
f = open(sys.argv[1],”r”)

out_s = “”
ct = 0
for line in f:
    if “<map” in line:
        code = line.split(“\””)[1]
        code = unichr(int(code,16)).encode(“utf-8”)
        out_s += code
        ct += 1
        if ct == 50:
            ct = 0
#            out_s += “\n”
    if “</cmap” in line:
        break
f.close()
f = open(“test.txt”,”w”)
f.write(out_s)
f.close()

Now, we just need to make the actual font picture.

I downloaded and installed the free ImageMagick

convert -background “transparent” -fill “#000″ -pointsize 8 -font misaki_gothic.ttf label:”@test.txt” ~test.png

Assuming the python script spat out “test.txt” , the ‘convert’ program will produce ‘~test.png’ which is a png with 8×8 boxes for each character code in test.txt , in white (#000) color, with a transparent background – which is what is needed for FlxBitmapFont and Anodyne.

Then you’re done. Just copy and paste the string into your game where you can reference it, and you should be good to go! You may need to trip the picture in some image editor.

And…

Summary:

1. Find a free TTF

2. Convert to XML with ttx.py

3. Create PNG with imagemagick, create character string with any script

4. Add to game!

Note: Friend Ethan (who ports a lot of games to Linux and is very good at it!) wrote something with SDL that may do this . I have not tried it, but it could very well be quicker than doing what I’ve outlined: http://t.co/WXHqaZMbk9

ANODYNE iOS

Anodyne iOS:

I’m releasing my iOS port of Anodyne on Thursday, for $2.99, at a discount of 40% from $4.99. After a few days it’ll go to $3.99, then after a few more, up to $4.99 till I put it on sale again. It’s a pretty minimal port, done so I could not think about the mobile ports and fully commit to Even the Ocean.

As a minimal port, there are no achievements with GameCenter, though there does exist an AIR extension for that. At this point, it would be a hassle to implement it and I don’t have access to my dev stuff for it, so it won’t happen. There is no controller support, though with iOS 7, it may be possible that a future version of Adobe AIR will support it, as AIR currently does for Android.

Obviously there aren’t any IAPs! That would be insane.

The game defaults to an integer scaled resolution, with letterboxing. The GUI controls’ scaling is chosen based on the default resolution, but you can move the GUI elements around if you want.

There’s no new content in the iOS version, as there wasn’t anything that made sense in adding at this point.

“What about the level editor?”

One day, maybe. That day is not today.

Overall I’m pretty happy. I could have gone the extra mile, looked for a controller extension like what I did for the Windows and Mac version, added achievements in with Game Center, implemented some wacky new touch controls, but I think it is better to just finish this quickly and do a pretty good job. Plus, this stuff I found incredibly stressful and unenjoyable – mobile games have a lot more focus on UI and UX….which isn’t bad or terrible, but it’s a hassle when you didn’t plan for it in advance.

WHAT ABOUT THE ANDROID PORT

It will be releasing in a special way in a few months. Patience!

anodyne by the lines of code

Hey everyone! This isn’t quite a source code release (that won’t be for a while), but I recently had to send off the source code for a review (anodyne might be ported to 3DS!) so I thought it might be interesting to post these stats. line counts via cloc.exe. At least, I’m very interested in other peoples’ game structures myself, so I’d like to see more posts like this!This count is only what I had to write myself, it doesn’t include the flixel library (I made a few modifications to it but they are mostly minor). Doesn’t include CSV (level data), XML (entity data), or dialogue, extensions (steam code, controller extensions)And of course, doesn’t include the music, sound effects, TONS of tilesets and images, level data we created!

What is here is the names of AS3 source files (and some lua/python) 🙂 , sorted by code size. About 36k LoC in all for these files. I would say most of it comes from bad style – I hard code a lot of song/tileset data, the enemies are mostly things that probably could have been scripted in some way,e tc.

If you have any question on what the files do, feel free to ask here or ask me on Twitter! Below I included a quick overview of the files.

We used Git as version control. About 1,100 commits over the April 2012-March 2013 period, though I did a little work in March 2012. One dayI’ll post the commit logs 🙂

-sean hogan

 

File blank comment code
—————————————– ————————————- 2980 35953
src\states\PauseState.as 206 56 1591
src\states\PlayState.as 276 225 1542
src\entity\player\Player.as 207 87 1310
src\entity\interactive\NPC.as 116 53 1260
src\Intra.as 235 169 1144
src\data\TileData.as 65 56 1121
src\entity\enemy\etc\Briar_Boss.as 142 71 1052
src\entity\enemy\circus\Circus_Folks.as 101 42 862
src\entity\interactive\npc\Mitra.as 89 32 784
src\states\TitleState.as 141 38 741
src\entity\enemy\crowd\WallBoss.as 105 65 728
src\entity\enemy\redcave\Red_Boss.as 115 38 700
src\entity\enemy\etc\Sage_Boss.as 116 85 680
src\entity\interactive\npc\Trade_NPC.as 93 22 673
src\entity\interactive\npc\Sage.as 75 46 654
src\data\SoundData.as 167 56 634
src\entity\enemy\hotel\Eye_Boss.as 112 32 609
src\entity\enemy\apartment\Splitboss.as 65 15 575
src\entity\gadget\Door.as 95 69 573
src\states\EndingState.as 56 30 567
src\global\Registry.as 89 101 566
src\entity\enemy\bedroom\Sun_Guy.as 74 37 526
src\helper\SpriteFactory.as 25 19 496
src\entity\enemy\circus\Lion.as 61 14 468
src\states\RoamState.as 116 41 458
src\helper\Cutscene.as 50 19 400
src\global\Keys.as 53 21 373
src\entity\gadget\KeyBlock.as 39 17 368
src\helper\EventScripts.as 68 119 358
src\entity\enemy\redcave\Slasher.as 63 40 347
src\entity\gadget\Treasure.as 40 6 343
src\entity\interactive\npc\Shadow_Briar.a s                                  42 103 329
src\helper\DH.as 81 101 327
src\states\DialogueState.as 51 34 316
src\entity\enemy\bedroom\Slime.as 40 13 304
src\Save.as 47 53 285
src\entity\player\Broom.as 44 18 277
src\entity\enemy\bedroom\Annoyer.as 52 9 265
src\entity\enemy\suburb\Suburb_Walker.as 35 3 265
src\entity\enemy\crowd\Frog.as 43 12 256
src\entity\interactive\Health_Cicada.as 24 5 253
src\entity\gadget\Propelled.as 37 19 252
src\entity\enemy\apartment\Dash_Trap.as 34 9 245
src\entity\gadget\Big_Door.as 33 23 243
src\entity\enemy\crowd\Spike_Roller.as 35 10 241
src\helper\Joypad_Config_Group.as 42 5 237
src\entity\gadget\Console.as 37 6 237
src\entity\gadget\Checkpoint.as 34 19 237
src\entity\enemy\circus\Contort.as 48 13 236
src\helper\Achievements.as 50 25 236
src\data\CSV_Data.as 48 42 232
src\entity\enemy\apartment\Silverfish.as 43 15 226
src\entity\player\Foot_Overlay.as 31 11 226
src\entity\enemy\crowd\Dog.as 39 18 220
src\entity\enemy\etc\ControlsDeity.as 17 6 190
src\entity\enemy\bedroom\Shieldy.as 24 9 185
src\entity\player\Transformer.as 44 18 182
src\states\ControlsState.as 21 4 181
src\states\MinimapState.as 45 14 180
src\entity\enemy\hotel\Burst_Plant.as 31 6 177
src\entity\interactive\npc\Happy_NPC.as 17 5 177
src\entity\enemy\redcave\On_Off_Laser.as 20 15 174
src\entity\enemy\apartment\Teleguy.as 28 15 172
src\entity\enemy\apartment\Rat.as 33 11 171
src\entity\enemy\hotel\Steam_Pipe.as 28 11 170
src\entity\enemy\etc\Chaser.as 24 3 168
src\entity\enemy\redcave\Four_Shooter.as 20 6 165
src\entity\decoration\Light.as 18 22 163
src\entity\interactive\Elevator.as 45 12 160
src\entity\enemy\apartment\Gasguy.as 41 7 156
src\entity\decoration\Water_Anim.as 40 11 150
src\entity\enemy\bedroom\Pew_Laser.as 30 15 149
src\entity\decoration\Solid_Sprite.as 13 16 149
src\entity\interactive\Black_Thing.as 41 11 148
src\helper\ScreenFade.as 19 9 147
src\entity\gadget\Gate.as 20 46 147
src\entity\enemy\crowd\Person.as 23 12 140
src\entity\interactive\npc\Forest_NPC.as 11 4 137
src\entity\enemy\hotel\Dustmaid.as 21 7 135
src\entity\gadget\Dust.as 25 15 132
src\entity\gadget\SinglePushBlock.as 17 5 132
src\entity\interactive\npc\Space_NPC.as 13 4 121
src\entity\interactive\Red_Pillar.as 24 7 116
src\data\gen_npc.py 16 17 113
src\entity\gadget\Jump_Trigger.as 20 5 111
src\entity\enemy\circus\Fire_Pillar.as 17 0 109
src\states\IntroScene.as 17 4 103
src\entity\player\Miniminimap.as 21 19 101
src\entity\player\HealthBar.as 17 13 94
src\entity\interactive\npc\Redsea_NPC.as 13 6 93
src\entity\enemy\redcave\Mover.as 21 12 90
src\entity\gadget\Button.as 17 4 90
src\helper\S_NPC.as 17 24 87
src\Main.as 17 11 87
src\entity\gadget\Go_Detector.as 28 0 86
src\entity\player\HealthPickup.as 8 11 80
src\entity\enemy\etc\Follower_Bro.as 6 4 76
src\entity\enemy\etc\Wall_Laser.as 9 4 76
src\entity\interactive\Dungeon_Statue.as 11 4 75
src\entity\decoration\RetroEffect.as 21 39 71
src\entity\interactive\Fisherman.as 8 4 71
src\entity\gadget\Switch_Pillar.as 13 4 66
src\entity\gadget\Dash_Pad.as 21 0 65
src\entity\enemy\suburb\Suburb_Killer.as 19 0 64
src\data\CLASS_ID.as 7 14 62
src\entity\gadget\Pillar_Switch.as 18 4 61
src\helper\Parabola_Thing.as 17 31 60
src\entity\interactive\Terminal_Gate.as 19 6 60
src\lua\Intra.lua 26 11 56
src\entity\enemy\crowd\Rotator.as 16 9 56
src\entity\enemy\etc\Sadbro.as 11 10 55
src\entity\gadget\CrackedTile.as 9 4 53
src\data\Common_Sprites.as 10 6 52
src\entity\enemy\etc\Red_Walker.as 12 4 49
src\states\FillerTitleState.as 3 6 48
src\entity\enemy\etc\Space_Face.as 20 3 47
src\entity\gadget\Key.as 8 4 46
src\entity\gadget\Hole.as 6 4 45
src\entity\gadget\Growth_Gate.as 8 7 45
src\entity\gadget\Challenge_Gate.as 12 6 42
src\entity\decoration\Nonsolid.as 8 6 36
src\entity\decoration\Map_Preview.as 6 4 31
src\entity\gadget\Stop_Marker.as 7 4 31
src\states\PushableFlxState.as 7 10 30
src\entity\decoration\Eye_Light.as 6 4 27
src\lua\csvTilemap.lua 15 5 25
src\entity\interactive\npc\Huge_Fucking_S tag.as                              6 4 24
src\data\demo_xml_clean.py 4 0 23
src\data\remove_dialogue_for_demo.py 6 6 19
src\Preloader.as 3 4 16
src\helper\SteamThing.as 3 4 11
src\lua\csvTilemap_settings.lua 2 1 4
src\lua\Intra_settings.lua 2 1 4
src\data\make_demo_npc_data.bat 0 0 3
src\data\make_npc_data.bat 0 0 2

Inside of Intra/src

ca – MAc joystick extension code
com – Steamworks code for mac/win
csv – Tilemap data

data –
CLASS_ID.as – used for id’ing some classes, stopped using it halfway through dev but it’s still in some of the entity code
Common_Sprites.as – Embed code for overlays, backgrounds
CSV_Data.as – Embed code for CSVs, also for picking out what CSV should load in an area
NPC_Data.as – The AS3 object format of npc data with state:
SoundData.as – Handles embedding SFX, music, has some helper functions for that, also code for choosing what song plays in an area
TileData.as – Embeds the tilemap files, also has functions for tile callbacks (spikes, etc), setting bindngs (what is solid, etc), picking what tilemap to use in a map, data on animated tiles
dialogue.py – Raw dialogue stuff
gen_npc.py – turns dialogue.py into NPC_Data.as

entity – Not counting the player folder, these are source files for things you can place with the level editor (usually) – signs, rocks, NPCs, enemies, dungeon elements. mostly straightforward

extension – Joypad code for windows

global – Input handler (Keys.as) and the registry.as (global state variable). Holds a lot of random constants and state about the game. Also contains code for loading and parsing the XML

helper – Random things,
DH.as handles back-endy dialogue stuff,
Cutscene.as does some stuff for cutscenes,
EventScripts.as is helper functions,
Joypad_Config_Group.as – the joypad configuration at start of game,
Parabola_thing.as – interpolation for bullet arcs (usually),
S_NPC.as – helper functions for NPCs whose state change throughout the game,
ScreenFade.as – the downsampling effect when moving between areas,
SpriteFactory.as – called for each xml element, generates an entity

lua – Has the lua exporter, Intra.lua, for DAME (map editor)

mochi – random code for mochi ads in this online demo version

obj – ??

org – flixel code . modifications were made in parts

res – image assets. all .png

states – play states (more or less groups of objects)
ControlsState: Set keyboard controls
DialogueState: DIsplaying of dialogue
EndingState – The credits
FillerTitleState – not used
IntroScene – The “wake up!” thing int he beginning
MinimapState – The minimap in the map section of the menu
PauseState – Pause menu
PlayState – All of the overworld/dungeon screens
PushableFlxState – some unncessary abstraction I made
RoamState – not used
TitleState – title screen

xml – Intra.xml, the entity data.
Intra.as – Game loop, mostly related to resizing windows and choosing where the game starts, debug flags, different build flags, mobile GUI

Main.as – handles initalizing extensions, starting game

Preloader.as – I don’t think i use this

Save.as – Handles saving the game to the .sol file

Mini Anodyne-postmortem, by the commits

In Anodyne, we used Git+Github for version control (backing up work, sharing a codebase between multiple people). This is a graph of my “commits” – or changes to the codebase/assets, from May 2012 onwards, though work on Anodyne started in March 2012 and mostly ended in March 2013. I think it might stand as an example of how deadlines can be useful (school terms starting, IGF, etc)

I just realized, that the beginning few weeks of block “7” were actually me preparing Anodyne for standalone-distributions (on Steam, for example). The latter half is mostly work on new game.

Image

Pixels in the Present (By Jonathan Kittaka)

Pixels in the Present (By Jonathan Kittaka, originally appearing in Russian Igromania video game magazine)

The rise of independent games over the past few years has brought with it a resurgence of pixel art and other visual styles in the vein of games past. For the purposes of this article, I’ll focus on pixel art, specifically (I made the pixel art graphics for the game Anodyne, which recently released on Steam, so I have been thinking a lot about these issues recently). The visuals of early games were born out of hardware limitations that no longer apply to modern gaming platforms, and this has led some people to question the place and purpose of these retro-influenced graphics in games today. Some argue that this nostalgic focus holds back the visual potential of video games. By holding tightly to such a characteristic visual style, developers stagnate and limit their potential audience to people who already appreciate pixels. I think that these concerns are legitimate and interesting, but that they overlook the virtues and opportunities that pixel art offers. I believe that there are still lessons to be learned from pixels, and that, if nothing else, the accessibility of working with pixel art makes it still a valuable tool for each new generation of game developers.

Recently, there have been many games receiving HD remakes that keep the game’s mechanics but update the visual style to a convey a greater level of detail and visual information. I don’t think this is a bad practice, but I do sometimes question the idea that any and every game would be better with modern graphics. Simplification and the reduction of visual information can have a profound effect on the experience of a game. When visual details are withheld, there is room for the player’s mind to fill in the gaps and bring the world to life. Activating a player’s imagination is a powerful tool in immersion; a great example of this is the story-focused game To the Moon. The modest pixel art in To the Moon allows for a great degree of emotional weight to be carried by the smallest gestures. For example, the character River has a characteristic way of averting her eyes–a change of one or two pixels–which becomes a subtle but powerful link to her character across the different time periods in the game.

Another advantage that I have found in some older games is the tight connection between gameplay and visuals that is afforded by their stark imagery. For example, Zelda II, a NES game with very simple graphics, features some of the most dynamic swordplay of any game I have ever played. Many 3d games have combat based on button-mashing, lock-on targeting, buttons to automatically block attacks, or quick time events; the complexity of the visuals in these games prevents you from being able to receive the combat information fast enough to react, so games must automate these features in order to convey an exciting battle. In Zelda II, however, you are in complete control of your character–every parry, every swing, every hit happens very precisely based on your input. This is possibly in part due to the simplicity and abstraction of the graphical style, which allows the action onscreen to be surprisingly quick and subtle. I’m not saying that everyone should or would necessarily enjoy Zelda II more than a modern action game, but I do believe that its visuals contribute to a very unique gameplay experience that has the potential to be extremely rewarding.

Now, even though these successful design elements that I’m describing occur in games with pixel art, it doesn’t mean that the pixels themselves are necessary to achieve these effects. However, I believe that we still have so much to learn about what makes games good, and that it’s worthwhile to keep looking back as well as forward throughout this learning process.

I am uncertain of the future of pixels in my own work and among game development in general. I grew up thinking about and working with pixels, and I’m very attached to the process. To me, pixels are simply a part of life. At the same time, I understand that a lot of people aren’t really able to look past pixel art, especially if they didn’t grow up playing video games; to some, pixels are signposts to a subculture where they feel they don’t belong.

Whatever happens, I believe that pixel art will continue to have a place in game development for quite some time. At the very least, the relative simplicity and efficiency of pixel art helps to open up game development to a wide community of people. Pixel art doesn’t require any expensive software or physical materials, and it’s more forgiving than hi-res or 3d rendered graphics in terms of performance issues. In the right circumstances, pixels can serve as a portal to an incredible universe of creativity, opening up the form of video games to a wider pool of people with new and interesting ideas.

Follow Jonathan on Twitter,  and make sure to check out development of Jon and Sean’s next game over at TIGSource!

Image