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.
17:27:37 sbtf CLOCK: 00:06 hours
22:01:00 vidiot CLOCK: 0.1 days (02:10 hours)
20:26:18 vidiot TASK: per clip type data entry
19:12:48 vidiot TASK: text layer
19:12:40 vidiot TASK: fix selection dragging (MoveClip)
19:08:04 vidiot TASK: make sure track reuse works
19:07:20 vidiot TASK: clip persistence to Track base class
16:35:00 vidiot CLOCK: 00:26 hours
23:50:04 vidiot CLOCK: 0.1 days (02:24 hours)
23:48:00 vidiot LOG
All I can say is "pain in the butt"...
On implementing the new types of tracks I really required reuse of the editing / sanity check stuff for the currently implemented video track (for video sequences and stills).
This comes down to both gui (really the easy part as there was already an abstract clip interface) as well as the "Model" part of it all, namely the way the clips are sorted in time and various manipulations thereof.
This turned out to be much messier than expected, due to the fact that there is straight up public access to the binary tree in which the clips are sorted for each track. This in itself is what allows the gui to work the same way for tracks / clips or varying types.
The downside (which I figured out after a botched design or two) is that the specific tracks themselves can't know the types of the specific clips contained within themselves. My typical style would be to completely shun this kind of "hiding information from myself", but the reuse of the editing / checks is really too good to turn down.
This kind of thing can of course be solved by delegating all of the functionality of rendering / persistence to the concrete clips themselves, but that is really overkill in this case. Templates would also work, but this would spread through the whole design all the way to the Track baseclass, simply because the container class is a template based binary tree.
What I ended up doing, and am doing in some other places lately, is going with Visitor. This is isolated to being an implementation detail of each concrete Track class that needs to do something specific with the contained clips.
Really this is nasty and breaks the abstraction, just like RTTI (only slightly less nastily imho). Again, in general I simply tend to avoid polymorphic collections like this when I also need to know the concrete classes of the objects involved, that's just bad form.
My excuse here is that there is common stuff going on (the editing of positions and lengths of clips) and the implementation thereof is significantly complex to warrant the use of Visitor.
We'll see how it all falls out.
17:26:51 vidiot CLOCK: 00:34 hours
21:09:13 vidiot CLOCK: 00:13 hours
21:05:47 vidiot TASK: handle multiple clip type persistence
18:55:23 vidiot CLOCK: 00:24 hours
18:41:37 vidiot TASK: get still clips in
18:04:24 vidiot CLOCK: 00:10 hours
18:01:57 vidiot TASK: clip bumping / spacing with "collision detection"
23:40:43 sandblox LOG
Lots of work on the inf terrain today, including collision and procedural foliage.
23:39:55 sandblox CLOCK: 0.2 days (05:16 hours)
20:44:27 sandblox TASK: inf collision for walkers
18:02:50 sandblox CLOCK: 0.2 days (05:34 hours)
16:25:25 sandblox TASK: move inf model to model
16:19:22 sandblox LOG
Cached pillar lights and side lights, now the builds are getting better.
Also figured out a way to emulate environment mapping better without the need for explicit local maps. This is done by having the reflections be affected by the lighting, but with a separate multiplier and a lighting boost factor.
16:17:04 sandblox CLOCK: 0.1 days (01:30 hours)
14:32:35 sandblox CLOCK: 0.1 days (01:35 hours)
11:39:16 sandblox TASK: add normals to world vertex format (for reflections)
11:38:46 sandblox CLOCK: 0.1 days (03:16 hours)
10:23:39 sandblox LOG
Reenabled reflections / fake env-mapping in the world shader, this really lifts things to another level. Need to changed the vertex format to get back the normal.
10:22:45 sandblox TASK: rewrite the lighters to output core::Vector3f to get better accuracy
07:19:40 sandblox LOG
Quite a bit of lighting tests lately, and today I stumbled on a combo that I think is really pleasing to the eye, namely having materials cast light (MaterialLight) without having world geometry occlude the lights, and multiply that with ambient occlusion.
I realize that this is sort of the Quake II look, which involved radiosity / bounced light. There are in general less completely black areas (as things don't occlude) which seems quite reasonable to me from a development standpoint as you then don't have to spam out lots of lights just to make your art show up. This just seems stupid because it is inordinately cheaper computationally to just make everything fully bright (albedo) and save yourself the pain of lighting.
This sort of hits a nice stylistic goal for me; something that looks very much like ambient occlusion with long rays but with the benefit of having colored lights. Of course one could always try hObbEs trick of subtracting surface color while running ambient occlusion...
13:00:03 ace TASK: update sys reqs on beamdog
19:23:19 uppmse TASK: get on beamdog
18:24:20 uppmse CLOCK: 01:08 hours
18:19:41 uppmse TASK: demo and retail to cert
15:46:51 uppmse CLOCK: 0.1 days (02:52 hours)
12:54:20 uppmse TASK: enable ship launch with (up) stationkeeper thrust
07:32:03 uppmse CLOCK: 0.1 days (02:44 hours)
07:31:22 uppmse TASK: test time attack
07:23:40 uppmse TASK: select screenshots
07:23:37 uppmse TASK: grab screenshots
23:30:00 uppmse CLOCK: 0.2 days (04:23 hours)
23:29:58 uppmse LOG
After much testing I have arrived at a pipeline for video capture from my games.
It involves a special in-game configuration that runs at fullscreen 640x480, dumping .jpg images at 30 fps via DirectX functionality (a special surface copying routine I figured out that allows for semi-realtime capture).
As it is semi-realtime it is still possible to play games that don't have replay functionality, and this helps tremendously.
From the raw output I have managed to create Ableton Live compatible .avi files via the open source program VirtualDub (at 30 fps), and from there editing in Live in sync with the audio is simple.
18:37:39 uppmse CLOCK: 0.1 days (03:25 hours)
14:48:16 uppmse CLOCK: 00:18 hours
14:33:10 uppmse LOG
Added white mothership dot in minimap.
21:52:24 sandblox CLOCK: 01:10 hours
21:52:14 sandblox TASK: MaterialLight
21:52:12 sandblox TASK: lights in material
13:32:19 sandblox CLOCK: 00:15 hours
12:58:00 sandblox CLOCK: 0.1 days (01:48 hours)
20:14:43 sandblox CLOCK: 0.1 days (01:47 hours)
18:34:25 sandblox TASK: spread per weapon
16:51:41 sandblox LOG
Implemented a lighting abstraction recently, sky light is currently out, but there are variants on ambient occlusion as well as half-lambert point lights.
My thoughts are to integrate lights not as entities but rather as a function of the material sides themselves, including color and radius information. This frees the designer from having to place lights manually and makes everything very consistent.
21:54:44 sandblox CLOCK: 0.1 days (01:50 hours)
14:05:49 sandblox LOG
Bounce flag caps on bullets.
17:05:50 sandblox CLOCK: 0.1 days (03:02 hours)
06:31:02 sandblox CLOCK: 0.2 days (04:09 hours)
04:15:42 ac LOG
Different ROFs might not be necessary after all; I implemented firing in bursts for the Zombies, and I think this will probably be enough.
03:23:04 sandblox LOG
Zombie activation helps a lot, starting too feel much better.
03:22:44 sandblox TASK: zombie activation firing pause
03:22:42 sandblox TASK: zombie activation roar
02:53:05 sandblox LOG
Enemies and player avatars now have separate "gun kits", which encapsulates things likes rates of fire, bullet speeds, etc. This really helps tweak the gameplay experience.
16:49:38 prio TASK: port marmalade version to elements
20:02:50 ace LOG
New builds for demo and retail up, no crashing going on here. Total kickass support from BeamDog in fixing the DRM problems I was having. Woot!
20:02:18 ace TASK: handle scores crash bug
15:06:01 ace CLOCK: 00:11 hours