In this section you can check out what I'm currently working in, practically in real time.
If some of this seems cryptic it's because the logs seen here come directly from my personal productivity tool prio, and are really just "notes to self".
Nevertheless, if you are interested in what I'm currently working on, this space will certainly be updated FAR more often than the news section.
18:39:01 prio TASK: ajax research
13:22:14 up2 LOG
Finally removed EnemyContainer and resolved all the parallell core::Traversable stuff in the model.
The pain was minimal, just a few more loops in Projectile to explicitly traverse the various Thing subclasses, and even then there was commonality since they all conform to the projectile interface in Thing.
13:09:27 up2 TASK: lose EnemyContainer
20:50:49 ztank LOG
In semi-desperation about the issue of "fun gameplay" (having bad experiences with Z-Fighter these days) I added some bots that would shoot like the play (no longer axis-aligned).
That was positive, and further adjustments of the players armaments made things even better.
It is still extremely interesting to me just how hard it actually is to have any kind of formulaic approach to "fun gameplay". Need to do more tests.
20:48:52 ztank CLOCK: 0.1 days (01:30 hours)
22:42:39 zfighter CLOCK: 0.1 days (02:14 hours)
20:28:28 zfighter TASK: some kind of spawn control for enemies
19:58:40 zfighter CLOCK: 0.2 days (04:55 hours)
19:58:29 zfighter LOG
Spawn control for bots seems to help pacing alot. Traps too.
18:23:31 zfighter TASK: potential barriers on floor
18:23:04 zfighter TASK: pattern bridges
14:50:54 zfighter CLOCK: 0.1 days (01:25 hours)
14:50:51 zfighter LOG
Shiny wall tests, not convinced it's a good look, at least not without a proper envmap.
01:45:16 zfighter CLOCK: 0.1 days (03:07 hours)
01:16:15 zfighter LOG
Lots of sfx polish, various gameplay adjustments, level design, graphics polish.
01:15:53 zfighter TASK: switch sound
22:04:33 zfighter CLOCK: 00:51 hours
19:58:55 zfighter CLOCK: 0.1 days (03:06 hours)
16:32:43 zfighter CLOCK: 0.1 days (01:48 hours)
14:59:24 zfighter TASK: less slippery hero
14:59:20 zfighter TASK: red guards slower
14:45:30 zfighter TASK: remove water
19:18:38 swörd CLOCK: 0.1 days (01:40 hours)
18:10:04 swörd LOG
Restoring all legacy build functionality to app-specific build tool, mostly for reference.
07:46:54 swörd CLOCK: 00:44 hours
06:48:57 swörd CLOCK: 0.1 days (01:13 hours)
22:00:16 swörd LOG
Started looking into a looser coupling of The Swörd to the various mesh construction and lighting techniques.
Have got the tool itself decoupled, and the simplest of all builders (just straight albedo and no logic) in place. That is as far as the tool is intended to go.
There is work to be done on Effects / Materials as well as Entities / Functions.
Need to look into exactly how the building / lighting will be salvaged, but it is looking like this all needs to be a separate toolchain / app because of the complexity of the various options.
Looser coupling to Materials is a must.
19:37:30 swörd CLOCK: 0.1 days (03:14 hours)
16:22:49 ztank CLOCK: 0.1 days (02:24 hours)
14:48:39 ztank TASK: viewpoint envmap / shiny on world
01:43:55 ace CLOCK: 0.3 days (07:42 hours)
01:43:49 ace TASK: pitch to Steam
01:43:13 ace LOG
We have now submitted UfoPilot : Astro-Creeps Elite to Valve Software / SteamWorks for evaluation. Wish us luck! :D
01:12:23 ace TASK: build deployment
01:12:21 ace TASK: prepare websites for evaluation
00:57:20 ace LOG
Fixed HTTP dechunking issue for Content-Length: 0
23:33:40 ace LOG
Fixed asteroid placement post reset level (32).
22:40:39 ace TASK: put gameplay movie online
22:39:14 ace LOG
Woot, pathological data driven crap.
Bug: Build a backdrop B that includes all the same assets (or a subset thereof) as backdrop A. Display A, then B, and the object batches aren't rebuilt. In the case of subsets (say a mesh och texture is not used) we end up infinitely loading and discarding that mesh och texture, as it isn't rendered.
Fix: As well as checking the TexturePool and MeshPool for loading requirements, we need to always validate the the objects in the batches are owned by the current backdrop.
21:32:48 ace LOG
Oh great, hadn't tested the tutorial for what happens when you die since implementing the shockwave... :(
17:47:16 ace CLOCK: 00:18 hours
17:21:32 ace TASK: disable data push in public deployment
16:29:42 ace LOG
Disabling data push for public build.
16:29:31 codebase LOG
Working on a preorder iterator class for Jet, it's about time...
16:29:12 codebase CLOCK: 01:11 hours
22:52:45 ace CLOCK: 0.1 days (02:19 hours)
22:25:28 ace_art LOG
The beta has now been terminated. Many thanks again to all who participated!
We're pretty much ready to pitch to publishers, we only need to bake a few minutes of gameplay in a video and then we're good to go!
22:24:08 ace_art TASK: finish splashes
22:18:02 ace TASK: close down beta
22:10:40 ace_art TASK: finish sushi chef disco
22:10:30 ace_art TASK: less spikes on angry decoy, it is kind of hard for people to see what it is supposed to look like
20:34:17 ace TASK: nornware presents screen
18:53:20 ace CLOCK: 0.2 days (04:10 hours)
14:42:29 ace TASK: object roll
14:42:10 ace_art CLOCK: 00:28 hours
01:39:51 ace LOG
Argh the pain of tracking assets...
For quite a while now I've been handling that problem by using special defines and array constructions directly in my code (like: #define ASSET_THING "blabla.extension") and have a special program parse the relevant .vcprojs to extract the required assets.
This works very well for most everything except when external assets are referenced from data files, like my text based persistence formats. First of all, I don't like to do this; I'm historically very averse to overly data-driven solutions, but this time we needed it for the backdrops.
What I've done this time is write a plugin for my asset tracker that is aware of how the assets are referenced. This implements a standard interface, and the asset tracker can get it to do its magic based on the name of the asset (backdrops.txt) that references further assets.
What sucks is that in this case the assettracker ends up having to link just an amazing ton of crap just to be able to use the persistent objects that needs to be tracked (ace::vc::Backdrop, ace::vc::Object). It works, but it doesn't feel clean enough.
I'm thinking that a better solution is to support specific types in the persistence system that know that they are asset-refs (as opposed to simple strings). This way a code path can be written that only needs to deal with the persistence format (which by now IS standard) and search for members of the asset type...
01:32:32 ace CLOCK: 0.1 days (02:19 hours)
01:29:30 ace TASK: assettracks deps from backdrops
00:00:53 ace TASK: assettracking for all new native mesh formats
22:14:33 ace CLOCK: 0.1 days (01:54 hours)
22:14:29 ace TASK: constants to code
21:21:34 ace TASK: decide on default settings flags
20:39:55 ace TASK: bug: warp sound when loading backdrop
20:24:44 ace TASK: clear icons when starting game from scores
17:59:53 ace CLOCK: 0.1 days (01:12 hours)
17:57:56 ace TASK: purge replay bytes that are below the scorelimit
17:19:35 ace LOG
I am now using level number % 32 for the number of starting asteroids in a level. This effectively means that the game "resets" after level 32, at least in terms of the number of asteroids you encounter. Max speeds will however continue to increase, so this is only a temporary respite.
This is partly to combat problems with z-buffer saturation; the game uses an orthographic projection, and things are spaced out in the z-buffer to avoid z-buffer interpenetration which simply looks bad. This however has the downside of having too many things disappear behind the far clipping plane, so some kind of solution like this was required.
I also like the "retro-ness" of this kind of solution, I remember some version of Pac-Man doing something similar. It is also something to aim for; as long as you can get past level 32, 64, 96, etc you can breathe easier again for a while.
17:12:08 ace TASK: limit max asteroids or deeper z buffer
17:11:52 ace TASK: asteroid count reset modulo level 32?
15:47:19 ace CLOCK: 0.1 days (01:29 hours)
15:45:55 ace TASK: bug: shockwave lives forever
15:12:41 ace TASK: bug: options patch detection doesn't work when filter set to "all scores"
13:58:42 ace CLOCK: 0.1 days (01:59 hours)
13:58:19 ace TASK: score icons: play, edit, view
15:30:29 ace CLOCK: 00:47 hours
15:13:27 ace LOG
Some subtle crap regarding how to end the game in the various modes (game, replay, tutorial).
In essence I hate stuff like this, because the differences are completely artificial and much induced by visualization choices, for example the fact that we have chosen to display a specific backdrop when the game is "idle" (no "mans" in the model).
This pretty much requires me to clear out all gameplay elements explicitly instead of just triggering the standard ship shockwave that cleans upp the scene. This doesn't "feel right" for the simple fact that the backdrop switches from the current level backdrop to the idle backdrop. Argh for stuff like that.
In any case, now the shockwave only happens when a game that is actually being played ends, so not for replays or tutorial mode. This works, again for visualization reasons, because we display an explicit "game over" summary menu.
15:10:00 ace TASK: fix "end game" behaviour depending on mode
14:34:28 ace CLOCK: 00:10 hours
21:52:37 prio LOG
21:51:18 prio LOG
Even better / clearer time filter links.
21:45:09 prio LOG
Started experimental work on prio2, which is mainly a new take on the gui side of things for prio. prio2 is currently not available for prio users, but I expect it to replace prio within a few weeks.
21:34:58 prio CLOCK: 00:03 hours
20:55:33 prio TASK: filter centric
20:13:18 prio CLOCK: 00:00 hours
20:10:27 prio CLOCK: 0.1 days (02:10 hours)
18:18:40 prio TASK: bug: single task to sort into empty list breaks
17:59:58 prio CLOCK: 00:02 hours
17:46:36 prionews LOG
You can now edit punch clock sessions, for example in the event you forgot to punch out.
17:40:10 prio TASK: extract session related stuff from model
17:40:07 prio TASK: remove user rights
17:08:10 prio CLOCK: 0.1 days (02:02 hours)
15:05:14 ace CLOCK: 00:17 hours
14:48:04 prio CLOCK: 00:07 hours
14:40:20 prio CLOCK: 00:14 hours
18:03:34 prio CLOCK: 0.1 days (01:20 hours)
16:36:28 prio TASK: edit punch clock sessions
19:03:45 ace LOG
Sort of all over the place today, doing some web productivity tools and such.
We are slowly but surely getting done with the backdrops, and I think the quality will be really great.
Also, I did a pass on the credits screen, which is always fun as you never do that stuff until the project is pretty much complete. Room for some pure aesthetics and humor (thanking pets and stuff like that).
For now, however, I've been working too long again, so I really need to go do something else...
19:01:54 ace TASK: credits screen
19:01:21 codebase LOG
I recant my previous statement about PSPad. I couldn't get it to write local files as well as upload to the FTP server; it would ONLY upload! Haven't these people heard of version control?
I ended up rolling my own simple tool as a console app. Just a few lines of WinInet code and some local file modification checks. When I go to dev some web stuff I just start this with some params via a shortcut, and it checks for local modifications once a second. This is fast enough even for my crazy fast iterations, because I still have to ALT+TAB to the browser window... :P
18:43:04 ace CLOCK: 0.3 days (07:13 hours)
07:52:36 prio CLOCK: 0.1 days (01:29 hours)
07:02:40 codebase LOG
Finally tried out PSPad for php-editing... how did I ever get anything done without this?
06:25:48 prio TASK: taskimage (to existing images)
00:03:53 ace LOG
About the "expensive" backdrops...
YES, they are definitely worth the work, they will Rule Without Ending!
Great work Jonas! :D
20:19:20 ace CLOCK: 00:20 hours
16:38:39 ace_art TASK: cloud planes for each "starfield"
16:38:38 ace_art TASK: assemble ca 30 backdrops from starfields, clouds and planets
13:48:54 prio CLOCK: 00:37 hours
13:25:20 prio TASK: linebreaking (16) in label filters
13:07:03 up2 TASK: Shrapnel should use Traversable
13:06:42 up2 TASK: Projectile should use Traversable
22:15:47 ace TASK: check what happens with cheapdrops from level 32
21:40:02 ace CLOCK: 0.1 days (01:15 hours)
21:03:59 ace TASK: scoreboard rank number (based on score)
16:16:03 ace CLOCK: 0.1 days (03:35 hours)
16:06:58 ace TASK: fixme: pub splash backdrop uses hardcoded index
16:05:41 ace TASK: backdrop ordering
12:44:07 ace LOG
Added multiple splash support to public deployment.
12:06:44 ace CLOCK: 01:01 hours
00:54:07 ace CLOCK: 0.1 days (01:34 hours)
00:51:57 ace TASK: black outline on target
00:51:55 ace TASK: experiment with lighter colored (not black) outlines on ammo display / target
23:50:11 ace TASK: placement of elapsed and replay time in hud
21:39:16 ace CLOCK: 0.3 days (08:20 hours)
20:16:39 ace TASK: cheapdrop ordering
16:28:27 ace_art TASK: epic starfield
16:28:04 ace LOG
Another pass at the cheapdrops, adding more interest.
14:16:17 ace LOG
Fixed the music streaming to only run if drawing has occured, fixing the startup issue nicely.
14:15:07 ace TASK: textures to png
14:14:56 ace TASK: engine loop must cut when in menu
14:11:14 ace TASK: move music object into settings
13:48:43 ace_art TASK: adjust anti-gravity ramp to match powerup colorscheme
13:08:47 ace TASK: menace ending fade
12:54:15 ace_art TASK: better powerup emitter
11:36:06 ace_art TASK: adjust deflector ramp to match powerup colorscheme
11:28:22 ace_art TASK: final decoy texturing
11:10:39 ace_art TASK: please more planet albedos, fractal and shit!
20:38:05 ace LOG
Decided on 7 songs, and polished them to a high sheen. Some of these songs were originally written for ACE, but some where just things that I had lying around that seemed to fit.
This is definitely much darker music than I usually write, as well as much more abstract. In many cases I wrote without actually knowing the key of the song; many times some kind of abstract soundscape was the basis, and then I just added stuff by dragging midi notes and / or pressing keys on the computer keyboard (Live lets you play midi notes this way...)
20:35:06 ace TASK: music levels
20:35:05 ace TASK: go thru songs
17:49:52 ace CLOCK: 0.1 days (01:22 hours)
15:17:56 ace CLOCK: 00:54 hours
14:40:07 ace LOG
Working on yet another song, but I need to get off this soon; there is more than enough music by now.
14:34:26 ace_art TASK: make decoy green
23:41:47 ace LOG
Converted all textures to .png except fonts, which need to be .tga for parsing purposes.
23:41:04 ace CLOCK: 01:09 hours
22:02:51 ace LOG
Fixed hysterical track looping problem.
21:46:19 ace LOG
Added new song (Zone).
21:43:45 ace LOG
I've been working WAY too hard these past few days, and after staying up late yesterday I just happened to get up again around 4 in the morning and start working again.
The good news is that "retro mode" now has a nice working color palette, as well as a replacement particle effect (for everything) that looks sufficiently "neo-retro" like everything else.
I'm very interested in trying out a more retro sound scheme as well.
Additionally, the "cheapdrops" backdrop replacement turned out FAR better than I had ever hoped. A very simple texture and fill cheap solution of random stars on the screen. The stars themselves are randomized and use 64x64 texture space from a page, although they are never even close to that big on screen. I tried downsampling but percieved the quality as higher with the bigger texture. Also a small percentage of stars are randomized as bigger, so the extra resolution is a good thing.
I initially was going to go for a constant black background, as experiments with color fills just looked similar to the old AC backdrops, kind of boring. I did however remember Jonas talking about perhaps stretching a super low-res texture to cover the whole screen; your typical low frequency clouds / nebula look.
I did this by committing half of the texture space to 64x64 "gradients" which I stole from the various hi-res backdrops already produced, searching for a nice rainbow spread of colors (across the 32 gradients) and some type of visual interest. There were more than enough stars, so this wasn't a problem.
What blew me away was how well the whole thing worked. The stars have subtle brightness animation, and together with the super low res gradients the whole thing looked super nice, much better than you might think after trying simple vertex colors on the quad.
Indexing with the level number gives us 32 different "nebulas" with totally random stars each time with no extra manual work. I did order the gradients to be in a kind of aesthetic sequence, going from one color to another over the course of several levels, but other than that it is completely hands off. The 512x512 texture is small enough to have in memory at all times, so there is no complex swapping as is the case with the high res / 3d backdrops.
The thing that struck me the most however is that I really truly think that the "cheapdrops" work FAR better as actual in-game backgrounds (for the gameplay action) than almost everything we have produced so far (including both the legacy skybox AND the new 3d backdrop system). Sure, taste accounts for some of this, but there is something to the subtly blinking stars (which are quite similar from level to level and don't steal your attention too much) combined with the super low frequency nebulas that just works.
I worked on it a bit more, adding subtle animation to the uvs of the nebula quad, and this helped make the whole thing feel a little more luxurious, as well as hiding the actual pixels of the nebula even better.
There is a lesson here, and I think it has all to do with visual noise, low vs high frequency detail, etc. It really amazed me how well these "poor man's backdrops" worked out, and at such a low cost in man hours.
In relation to this new "working" standard, it seems to me that we have a TON of work left to do on the "real" backdrops to get them to work even close to as well as these "crappy ones" do. Looking at the current crop of 50 or so "expensive" backdrops, we really don't have much at all that works as in-game stuff. Sure, there are some cool pictures there, but perhaps only suitable for menu / splash backdrops.
The big question is: is it worth the work?
21:25:51 ace TASK: cheapdrops gradient / nebula animation
21:22:24 ace TASK: more music
17:01:58 ace CLOCK: 0.2 days (04:28 hours)
16:32:56 ace TASK: compare original laser sound
13:12:36 ace TASK: consider some kind of game over screen again
11:52:58 ace CLOCK: 00:46 hours
11:43:20 ace TASK: ordered cheapdrop progression
11:17:57 ace LOG
Changed cheapdrop to namespace with all file scope state.
10:34:11 ace CLOCK: 0.1 days (02:26 hours)
09:20:21 ace TASK: final cheapdrop icons
07:51:17 ace CLOCK: 00:41 hours
07:51:09 ace TASK: polish hud background
06:51:38 ace CLOCK: 0.1 days (01:53 hours)
06:51:20 ace TASK: final clarity mode colors
06:43:28 ace LOG
-"stylized mode" -> "retro mode"
-fixed retro mode colors
-added "retro" EmitterType to replace all other EmitterTypes when in retro mode
23:12:06 ace CLOCK: 0.1 days (01:22 hours)
22:56:16 ace TASK: coloreffect outlines
22:07:42 ace TASK: tooltip clipping
20:06:30 ace CLOCK: 0.1 days (01:52 hours)
19:57:32 ace TASK: clarity mode
18:24:06 ace TASK: bullet trail option
18:23:55 ace TASK: alternate (cheap) backdrop solution option
17:57:34 ace CLOCK: 0.1 days (02:15 hours)
16:03:02 ace_art TASK: 3d ring
16:02:50 ace_art TASK: make blackhole disc prettier
15:40:21 ace CLOCK: 0.1 days (02:31 hours)
15:37:47 ace_art TASK: albedos for various kinds of planets
15:37:34 ace_art TASK: alpha channel cloud textures
13:39:42 ace TASK: remove membrane mode
13:27:34 ace TASK: particle effects toggle option
04:55:42 ace TASK: shrink splash to 512 in x
04:55:41 ace TASK: just game logo and some backdrop for ingame splash
04:11:23 ace TASK: collapsed multiple effect calls for gravity effects
02:56:39 ace TASK: fix alpha albedo sorting issues
02:28:53 ace LOG
It's getting real close now...
The backdrop system has turned into quite a tricky problem, especially since the introduction of atmospheric effects and alpha blended albedos on planets. Yes this means sorting... :(
I am generally leery of caches, but there are big gains to be had here as the number of total objects starts to rise. I have managed, in the case of both texture and mesh pools, to make it completely self contained (no manual flushes).
The new batching solution is also a cache of sorts, and is also self contained EXCEPT for when you are editing aspects of objects that invalidate the cache. I could run a md5 hash on objects to make even this completely self contained and automatic, but I think I'm ok with the manual batch rebuild whenever data used for the sort is touched.
Now I just have to z-sort things like planets having atmospheres within the batches themselves... :(
02:00:00 ace CLOCK: 00:43 hours
00:44:58 ace CLOCK: 00:47 hours
00:43:52 ace TASK: disable editing for non-owned backdrops
00:21:10 ace LOG
Salvaged a favorite backdrop that got deleted by mistake. As a result, you can now only delete backdrops of which you are the creator.
Also fixed support for gui collapse of all object properties (linked list anyone?)
23:22:27 ace_art TASK: check planet albedo uv seams
21:56:36 ace CLOCK: 0.1 days (01:54 hours)
19:40:54 ace CLOCK: 00:02 hours
19:24:33 ace CLOCK: 01:03 hours
19:23:14 ace TASK: backend only stores 10 best replays
17:43:23 ace CLOCK: 0.1 days (02:36 hours)
17:41:35 ace TASK: sort backdrops by id
17:26:22 ace TASK: atmosphere support
15:27:15 ace TASK: ambient term in object shader
15:27:13 ace TASK: ambient term for add mode
14:52:57 ace CLOCK: 00:57 hours
14:48:51 ace TASK: support alpha in object albedo
14:08:29 ace TASK: fixed width numerals
15:22:04 ace_art TASK: fix antialiasing in powerupshield_emit.tga
15:22:02 ace_art TASK: fix antialiasing in powerupgravity_emit.tga
15:17:42 ace CLOCK: 00:37 hours
15:16:54 ace TASK: shield, gravity, deflector test
15:16:53 ace TASK: blackhole testing
14:24:15 ace CLOCK: 0.1 days (01:18 hours)
14:19:20 ace_art TASK: many "starfields"
14:15:33 ace_art TASK: Ship texture final polish
01:06:55 ace LOG
Fixed some bad page / filter / selection crap in the score page.
01:06:38 ace TASK: local support for "all scores"