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:16:13 sbtf LOG
Abstracted world mesh construction, and started looking into using The Swörd for creation of assets.
15:15:46 sbtf CLOCK: 01:11 hours
12:54:17 sbtf CLOCK: 0.1 days (02:07 hours)
23:44:34 codebase CLOCK: 0.1 days (03:08 hours)
23:44:29 codebase LOG
23:44:22 codebase TASK: fix or deprecate all ddraw dependent projects
15:26:11 codebase CLOCK: 00:02 hours
15:01:23 codebase CLOCK: 00:07 hours
14:46:46 codebase CLOCK: 0.1 days (01:37 hours)
21:53:29 codebase CLOCK: 00:21 hours
20:18:31 codebase CLOCK: 00:20 hours
20:18:22 codebase LOG
Still working on porting all the stuff that used ddraw...
19:48:20 codebase CLOCK: 00:31 hours
18:23:27 codebase CLOCK: 01:00 hours
23:30:18 codebase CLOCK: 0.1 days (01:27 hours)
21:39:48 codebase CLOCK: 0.1 days (01:43 hours)
19:24:45 codebase CLOCK: 00:15 hours
00:04:13 codebase CLOCK: 0.1 days (01:43 hours)
22:32:52 codebase LOG
MSVC++ 2010 -> Project References, not Project Dependencies... linker errors eluded me for hours...
21:23:04 codebase CLOCK: 00:49 hours
11:56:56 codebase CLOCK: 00:36 hours
17:55:43 codebase CLOCK: 0.1 days (01:45 hours)
17:39:15 codebase LOG
...not that the new image is NOT deterministic, it's just that it doesn't produce the same output for a given input as the old one does.
That means I could reset the replay database and just roll out a new version...
17:32:27 codebase LOG
Oh joy (I'm kidding...)
It appears that using VC++ 2010 Express along with the latest June 2010 DirectX SDK to build UfoPilot : Astro-Creeps Elite (on Windows 7 mind you) results in an image that breaks determinism in the old replays (those that are stored online).
I have verified that the old version, built on XP64 with VC++ 2008 Express with an older SDK still works with the stored replays, on both XP64 and Windows 7.
16:19:01 codebase LOG
Whohoo, DirectDraw support (the .lib) apparently fell out of the latest DirectX SDK (June 2010). I had a couple of projects that I hadn't bothered to upgrade to DirectX 9.0c (while others had been). I guess I'll have to go the whole way...
16:10:47 codebase LOG
And yeah, Win7 as well...
16:10:21 codebase LOG
Finally moving to VC++ 2010 Express...
18:50:14 sbtf CLOCK: 0.1 days (02:26 hours)
18:50:09 sbtf LOG
Yeah, still working...
Basic multiplayer state sync is implemented, and I have successfully implemented a test case of event generation; doors opening and closing, which is needed to trigger sounds.
18:13:30 sbtf TASK: sync breaches
22:15:45 sbtf CLOCK: 00:40 hours
20:28:45 sbtf LOG
Multiplayer is now basically working, i.e. you can move around, interact with the doors, shoot the beasts.
Still needs more work in syncing breaches, as well as invoking (simulating) all of the event based stuff.
20:27:48 sbtf CLOCK: 00:27 hours
20:22:39 sbtf TASK: sync doors
20:22:36 sbtf TASK: sync datacores
19:29:37 sbtf CLOCK: 00:36 hours
16:07:22 sbtf CLOCK: 00:13 hours
13:22:27 sbtf CLOCK: 00:54 hours
12:50:31 sbtf LOG
Oh yes, I'm also not currently doing any delta compression, simply using zlib...
12:25:54 sbtf LOG
I've been basing my multiplayer stuff for this on the Quake 3 Arena ideas, basically just pushing the entire Model state from the server to the clients. The nicest thing about this is that it's virtually "protocol free"; only a single type of packet from server to client (the state), while the client only sends "input".
There is a big temptation to make the actual in memory format of the Model be very "serialization friendly" in order to make the actual sending and receiving simpler, but there are a lot of tradeoffs there. Things like fixed sized arrays / pools of objects, avoiding inheritance and virtual function tables, etc.
After some botched refactorings I'm currently right in the middle of both extremes. There are some instances where pointers have been replaced with object ids (that will serialize well), some memcpy() of the fixed size parts of the Model into raw data buffers, as well some more tidy conversions of dynamically allocated objects into network transport representations. I'm trying my best not to totally dump all of C++ in the process of finding a sweet spot... :)
19:37:43 sbtf CLOCK: 0.1 days (01:27 hours)
15:41:06 sbtf CLOCK: 00:09 hours
15:12:15 sbtf CLOCK: 0.1 days (02:35 hours)
15:09:42 sbtf LOG
Of course! The sound bugs associated with proximity warnings were due to the introduction of multiple heros in the simulation... :)
15:09:19 sbtf TASK: fix motion warning bugs (sound)
23:54:36 sbtf CLOCK: 0.1 days (02:05 hours)
23:54:20 sbtf LOG
Still hard at work trying to figure out the best tradeoffs for multiplayer...
22:21:07 sbtf TASK: move recall to flags
21:36:49 sbtf CLOCK: 00:04 hours
21:33:20 sbtf LOG
Martin Fowler said that you should only do one refactoring at a time... Good advice; I was forced to revert a whole bunch of stuff today trying to implement to many changes at once.
21:19:45 sbtf CLOCK: 00:50 hours
21:19:21 sbtf TASK: move lamp toggling to flags
15:03:33 sbtf CLOCK: 0.1 days (02:11 hours)
15:02:39 sbtf TASK: sync map
15:02:37 sbtf TASK: delta or zip compress state
13:30:00 sbtf CLOCK: 00:20 hours
20:00:00 sbtf CLOCK: 0.3 days (07:36 hours)
21:55:45 sbtf CLOCK: 0.2 days (03:53 hours)
19:53:49 sbtf TASK: support multiple heros in Model
16:51:45 sbtf CLOCK: 01:03 hours
15:23:29 sbtf CLOCK: 00:32 hours
14:36:07 sbtf CLOCK: 0.1 days (02:58 hours)
23:40:36 sbtf CLOCK: 01:05 hours
23:40:32 sbtf LOG
Working on how to best support multiplayer.