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.
15:53:33 ace LOG
Implemented impulses, triggered by asteroids getting hit as well as bomb detonation.
This needs to be evaluated, so I implemented a boolean enable option in Model, editable via the normal ConstantController.
15:53:33 ace CLOCK: 00:00 hours
15:51:26 ace TASK: ace explosions give impulses to nearby roids?
22:07:04 ace TASK: copy pooftypes and pufftypes
20:20:27 ace TASK: bullet types to include those spawned by asteroids
20:20:23 ace LOG
Survival bonus, banner can show several messages at once.
Extra man sound is now reward sound, same for all score rewards at level start (extra man, survival bonus).
Specific look for all 4 bullet types (ship_normal, ship_bounce, roid_normal, roid_bounce), with effects.
20:20:23 ace CLOCK: 0.1 days (01:16 hours)
19:03:31 ace TASK: survival bonus, at each level start
15:40:29 ace TASK: points effect
14:10:29 ace TASK: prepare for online storage of replays
14:10:26 ace TASK: settings abstraction
14:10:20 ace TASK: default settings flags
14:10:13 ace LOG
Making Settings abstract (to support multiple ways of storing them), hence ISettings.
View now holds a ref to the ISettings interface.
ace::LocalBackend now implements the vc::ISettings, vc::IReplayStorage, and vc::IScoreboard interfaces. Also handles details of where the log is output.
14:10:13 ace CLOCK: 01:05 hours
18:14:24 ace LOG
Encapsulated stream format of replays for reuse.
18:14:24 ace CLOCK: 00:00 hours
17:12:30 ace TASK: reassess compression of replays when hash check is turned off
17:12:24 codebase TASK: compression research, tree dictionary
17:12:18 ace LOG
Messing around with compression schemes yesterday, trying to do something similar to LZW.
No great progress though, my implementation takes way to long to compress. Suspect that it has to do with the size of the dictionary (16 bit codes), which in turn requires a really fast lookup. Have done some various implementations of same, but to no great effect.
Better compression than the current 8 bit run length scheme would be nice, but speed is paramount, as I don't want the user to wait around for compression of replays.
Currently shifting to try to bit pack the run lengths even more; for flags I will use 7 bits run length and 9 bits flags in a 16 bit data chunk.
Aimtargets now stored along with a runlength in 32 bits (13 bits run, 10 bits x, 9 bits y).
17:12:18 ace CLOCK: 0.1 days (02:37 hours)
20:04:21 ace TASK: parallell run length encoding of replays? one stream of aimtargets, another for flags?
20:04:14 ace TASK: unsigned char as run length type, overflow like bloom
11:52:57 ace TASK: period, dash, colon in font
10:26:42 ace TASK: use vector2i in ieventtarget for aimtarget?
15:48:14 ace LOG
Mad did some focus testing:
Auto-brake should be an option, not affecting score lists or anything.
Auto-pickup should be an option, not affecting score lists or anything. By this I mean the optional pickup of powerups at the end of a level. Some people might not want this, since the game forces you to use weapons / ammo in a certain order.
This will be fed to the game as input options, thereby making them toggleable at runtime without breaking the replay / creating different incompatible versions of replays.
This is quite subtle. The flags needs to grow to 16 bits for the ship, and some of these things will not really change on a frame per frame basis.
However, it is of great interest to keep this stuff out of the model. On the other hand, some of these flags don't really have to do with ship input on a per frame basis (the auto-brake is more of an option, and the auto-pickup doesn't have anything to do with the ship.
Ok, changed it so the input set in the model isn't only for the ship, but for other things too.
Def the right choice to have this stuff totally encapsulated in the input, because this way a replay is completely self contained, even if you mess with options while watching a replay.
Need to better the logic for popping powerups and end of level stuff, probably move it out of the ship altogether, but will commit first.
15:48:14 ace CLOCK: 0.1 days (01:52 hours)
13:02:15 ace LOG
Added separate clear and shadow colors to skybox; jonas was setting the bottom layer to additive, and I thought that the shadow color was too dark.
Now you can also manually set the uv edge pixels for each box.
A "correct" fix would probably be to make the various textures smaller by the uv edge pixel on each size, and replicate all the edges out to the cell boundaries. This should fix the filtering issues.
13:02:15 ace CLOCK: 0.1 days (01:25 hours)
11:36:46 ace LOG
Added new techniques to SkyBoxEffect; alpha_point, alpha_linear, add_point, add_linear
All that selectable in SkyBoxController. This is to be able to chase down uv problems.
Added some edit fields to dxut::Gui::colorPicker(); really need to change this so the interface takes a dword rgb and / or zero to one rgb. I don't really use hsv as a storage format anywhere (I don't think). Currently there are precision issues going on.
11:36:46 ace CLOCK: 00:49 hours
20:08:17 ace TASK: highscore list display
20:08:05 ace TASK: banners (multiplayer, extra life)
20:07:05 ace TASK: powerup get effects
20:06:57 ace TASK: random seed
20:06:18 ace TASK: backgrounds solution
19:35:20 ace TASK: user settable order of sky box layers (the boxes are the uvs)
19:35:09 codebase TASK: kill sop johno codebase
19:35:03 ace TASK: replace ::rand and CORE_FRAND stuff in model with private generator
19:34:55 ace TASK: replace prng in model and vc
19:30:13 ace LOG
Moving PI from core::macros to core::constants. This in order to extricate it from macros.h, in turn to remove deps on ::rand and ::srand for projects that don't want them.
Implemented and xor-shift PRNG, using it in Model. Also removed lots of deps from Model, for example no more win32 deps at all.
Seems to work now.
Created storage abstraction for replays. Looking at the local Bloom implementation, I can do the tasty trick of using ::time() to generate a unique filename.
Everything looks like it works.
19:30:13 ace CLOCK: 0.3 days (07:04 hours)
01:30:25 ace LOG
Model now running on own "stepped time", basically like core::FixedTime, but minimal, and is private and will only be updated when the Model is updated.
This will allow for the global / real time to continue running, while the model time can be easily paused (by simply not updating the model), and hence all timestamps should remain valid.
Added a private StepTime reference to Ship, this cleaned up the interfaces significantly.
Same goes for Powerup.
Removed model::Timer, replaced with a timestamp now that this is legal.
It looks like model needs its own private random number generator, as pausing the game (using the menu) will allow vc calls to ::rand to proceed. This messes up (most times) the selection of a new random powerup, and who knows what else.
In general this means getting rid of any ::rand or CORE_FRAND or similar calls in model.
01:30:25 ace CLOCK: 0.1 days (01:32 hours)
22:53:47 ace LOG
Back on replays, hashing the model.
Time was a factor, so resetting time for each level start. That seems to have gotten everything to match up hash wise, but I still need to fix the pausing / option menu stuff.
22:53:47 ace CLOCK: 0.1 days (02:30 hours)
13:38:26 ace LOG
Starting work on replays.
Not using any of the bloom / replay stuff as of yet, it looks like I won't need it and will get away with something simpler.
Implemented reset of static Asteroid elements, required for determinism.
It all seems to work, except when the options menu is involved. Going to implement a hash check to see if I can figure out where things go wrong.
13:38:26 ace CLOCK: 0.1 days (01:32 hours)
23:01:55 ace LOG
Added initial speed to cracked roids and bullets from bombs, no big difference but it feels good.
Fixed render order / layers in SkyBox. Simple enough solution; you can only select a single mesh to be rendered once.
Validated that alpha channel works.
Seems like I could solve the edge cases of the skybox by moving the uvs in by 2 texels.
23:01:55 ace CLOCK: 0.1 days (02:03 hours)
20:32:56 ace LOG
Better dxut::Gui::colorPicker(), with lips for the boundary conditions.
Added shadow color to skybox.
20:32:56 ace CLOCK: 00:02 hours
18:38:39 ace TASK: shadow color editable, part of skybox
23:51:52 ace TASK: remove old background solution and assets
23:51:43 ace TASK: skybox editor
23:51:25 ace LOG
Talked to jonas about skyboxes, and he came up with some real good ideas.
Firstly, we need to milk a specific skybox for all its worth, and his suggestion was to have a single skybox for the whole play session. The change is however to make the rotation of the skybox dependent upon the level, which is easy enough to do. This makes it feel like you're warping around in the same star system cleaning up creeps at different locations.
In this way a skybox is more of a graphical theme, and could easily be tied to a musical theme / song. A nice candidate for unlockables, say a new background every 5 or 10 levels. Depending on how hard the game is at say level 15, maybe we could simply get away with 3 or 4 skyboxes total.
Also changing the style of the roids and creeps per "style" might be a good idea too.
Also unlockable ship designs perhaps...
Changing blendmodes to be optional in skyboxes.
Renamed TexturedEffect to SkyBoxEffect, as now it doesn't write to z buffer. Also removed the extra z-buffer clear.
23:51:25 ace CLOCK: 00:27 hours
16:13:01 ace TASK: asteroids get reset on gameover, this is wrong
15:17:34 ace LOG
Utility methods for checking and settings Settings flags.
Moving certain flag guis to options.
15:17:34 ace CLOCK: 00:23 hours
13:52:35 ace TASK: unlit shader for skybox
13:52:32 ace TASK: multiple spheres for background / sky
13:52:23 ace TASK: move out projection matrix
13:22:11 ace LOG
Yesterday lots of skybox work, today working on editor for same.
Good progress, working on persistence.
13:22:11 ace CLOCK: 0.1 days (02:52 hours)
18:26:09 codebase LOG
Finished core::MaxTracker implementation, used in quite a few places. Opted not to use it in the case of core::Traversable, but implemented a high() method there "manually" instead.
18:26:09 codebase CLOCK: 00:00 hours
17:57:51 codebase TASK: core::MaxTracker
20:24:59 ace LOG
Implemented a debug thingy to show how much of the z-buffer range is used with the current asteroid depth scheme. Probably need a new solution, x-buckets or perhaps even a xy-bsp...
20:24:59 ace CLOCK: 00:00 hours
18:40:05 ace LOG
Going after misc stuff. Starting with banner.
Basic hud too.
18:40:05 ace CLOCK: 00:52 hours
16:23:59 ace LOG
Created an IMGUI from the AlphaNum stuff, works well.
Implemented main menu, proxy options, and proxy credits.
I need artist support! :)
16:23:59 ace CLOCK: 00:00 hours
13:15:43 ace LOG
Worked on 3d alphanumerics, thinking that this might be a good way to do printing.
Made settings persistent (in appdata).
Created AlphaNum for mesh based printing. Works pretty well. The caveat is a single draw call per character. I'm not worrying about that until we do some testing on low end machines.
13:15:43 ace CLOCK: 0.2 days (05:22 hours)
21:31:31 ace TASK: advanced pooftypes as per jonas requirements
21:30:47 ace TASK: black hole graphics
21:25:13 ace LOG
Removed use of lines for "something in gravity range", instead scaling the existing sphere.
Did a sphere for black hole as well, not sure here... The old effect from 2d AC might be better still.
21:25:13 ace CLOCK: 00:22 hours
16:24:49 codebase LOG
All controllers now exist at all times, are traversable and can be switched amongst using CTRL+SHIFT+LEFT and RIGHT.
16:24:49 codebase CLOCK: 00:32 hours
15:51:58 codebase LOG
More DDVideoTestbed work...
Views are now called Controllers...
15:51:58 codebase CLOCK: 01:00 hours
13:56:24 codebase LOG
Bringing ddvideotestbed up to date, some interesting stuff in there...
13:56:24 codebase CLOCK: 01:08 hours
12:36:33 sabk TASK: log to appdata
21:14:38 ace TASK: laser graphics
16:44:27 ace TASK: finish PoofType editing
16:37:13 ace LOG
Working on saving the new mess of objects, after that need to talk to Jonas about the state of things.
Added more sane key display and removal of keys, in addition to envelopes.
16:37:13 ace CLOCK: 01:10 hours
14:36:05 ace LOG
More PoofType editing.
New and inventive ways of using the persistence subsystem; the owned lists / arrays of stuff were causing problems, so I'm just treating them as members of the containing persist::Persistent. This seems to work.
14:36:05 ace CLOCK: 0.1 days (03:05 hours)
11:08:41 ace LOG
Working on PoofType editing.
Switching to growing array for PoofTypes instances.
Explicit, not template, envelope classes.
11:08:41 ace CLOCK: 01:01 hours
22:32:33 ace LOG
More drag widget stuff. Painful, but hopefully useful in the end.
22:32:33 ace CLOCK: 0.1 days (01:35 hours)
20:40:44 ace LOG
Working on the envelope editing for EventTypes.
20:40:44 ace CLOCK: 00:57 hours
18:34:00 ace LOG
Apparently the construction order for static file scope things isn't well defined and differs between debug and release.
Can probably solve this by not having constant::Type be persistent, but use the unique names instead to store directly in a persist::IContext.
That seems to have worked.
18:34:00 ace CLOCK: 00:56 hours
17:31:24 ace LOG
Working on super flexible PoofType extensions...
Editor is coming along. I implemented the idea of in-program editable gui handles, worked out well with the constant stuff (since these are localised to a specific cpp, like static constants or defines typically are).
17:31:24 ace CLOCK: 0.1 days (02:33 hours)
21:18:58 ace TASK: explosion editing
21:10:41 ace LOG
Really simple to implement with all the new constant tools in place!
21:10:41 ace CLOCK: 00:55 hours
20:14:56 ace LOG
Splitting up dev controller stuff to multiple controllers.
Jonas is in SVN now.
20:14:56 ace CLOCK: 00:34 hours
19:19:22 ace TASK: pooftypes to constant
14:07:10 ace LOG
Working on a good value editor in dxut::Gui.
A little messy, but I think I got it now for floats.
Yepp, and for unsigned ints.
14:07:10 ace CLOCK: 0.1 days (02:03 hours)
11:48:32 codebase TASK: constants from persist to own lib
19:16:41 codebase LOG
Moving persist::constant to constant.
19:16:41 codebase CLOCK: 0.1 days (01:18 hours)
17:02:02 ace LOG
Implementing view and editing of all constants.
17:02:02 ace CLOCK: 0.1 days (02:37 hours)
12:52:09 ace LOG
Working on a solution for making what I would normally do as a #define into some kind of persistent constant thingy.
Array constructor params would be nice...
persist::constant is the solution, working thru it the code it seems to be a good solution.
Changing AnimAsset to not automatically import / convert .obj to pixelmesh.
12:52:09 ace CLOCK: 0.1 days (02:33 hours)
23:07:41 codebase LOG
In the new repo, things are looking stable. Need to get Jonas in asap.
23:07:41 codebase CLOCK: 00:00 hours
22:52:49 ace LOG
Working on more config for AnimAsset.
Changed slow creep to use the fastcreep model, green texture, awaiting a new one from Jonas.
Got fed up with the long delays for respawning and especially level ends. Initially cut them down, which felt good, but I still want to be able to collect the powerups that are left.
Instead of this being a no go (you don't have time) OR a race (you have some time), I'm opting for automatic collection of the ones that you can carry over and destruction of those you can't. This should feel like a nice reward at the end of the level, and still let you go hands off for a while.
Implemented, works pretty well!
22:52:49 ace CLOCK: 0.1 days (01:17 hours)
11:03:25 ace LOG
Working out how to integrate pixelmesh assets (for the creeps).
Eventually we may have to have a fallback for animated meshes (if we aren't to require ps3_0), but for now we will go with pixelmesh.
Removed deps on any specific mesh class in MeshEffect.
Remembering now, there is an effect class in the pixelmesh lib.
Not really sure how to share this code around between projs, as the hlsl code is an integral part. There is an interface called ID3DXInclude which might be useful.
Got it running with the standard shader. Realize that the only thing that I really want to reuse is the vertex shader, not the pixelshader.
11:03:25 ace CLOCK: 0.1 days (01:59 hours)
08:32:50 codebase LOG
Moving mesh file format stuff to meshfile project, including disk based meshes for stuff like sword caches and xworld caches.
08:32:50 codebase CLOCK: 00:09 hours