11/02/00 (Thursday) Otika project started. 11/06/00 (Monday) Wrote functions to log events, thus debugging can now be done without resorting to message boxes or msdev. Since I got the clever idea to log events, might as well start a text log to log progress :) Can't capture screen using DirectDraw surfaces. Must use more primitive way. 11/08/00 (Wednesday) Screen capture is partially complete. Screen dimensions are now detected, and Otika is centered on startup. Screen capture now works. Now I just need to add code to tint it, etc. Notably, screen capture / update / mirror takes full 2 seconds, not very good, but passable. Reordered assembly instructions in favor of readability, so now instructions most instructions are no longer paired. I think I can afford the few cycles penality for now. Created icon. Took quite a while without the proper tools (Microangelo). Worked on BMP utilities. 11/09/00 (Thursday) Finished bmp2c utility. 11/15/00 (Wednesday) Finished 16bit background rendering routines. Took a while to get just the tint I wanted by only manipulating bits. Created sprites. A windows messaging loop problem mysteriously fixed itself once I restart the computer :P Took me about an hour not knowing how to fix it... Seems like a problem with WM_PAINT. Implemented support to move window. I would like the window to update while it is moving (just like WinAmp), but somehow it doesn't work out :P Otherwise, it's not too bad. Mouse coordinates are now screen coordinates instead of client coordinates. This fix the problem of window being moved while the client rectangle is not updated. 11/16/00 (Thursday) Started on sprite routines. Removed all references to global.h and global.cpp. Those constants and global variables should be easy to find anyway. Added menu support. The only thing you can do with it now is recapture the background image, display dialog box and exit. Made desktop capture sleep 1000ms to let other windows completely repaint. Cleaned up source files and Makefile for minimum include dependency check. 11/17/00 (Friday) Resized images a bit, tested sprite routines (which surprisingly worked on first try, heh). The rest of the game should be easy now :) Did keyboard input routines using Virtual Keys, removed DirectInput includes/libraries. Started game engine. 11/18/00 (Saturday) Various code reorganizations Wrote DFA for game engine, added extra tile sprite (gameplay is changing by the seconds ;) Added title screen. DFA is complete. That is, I will have to stick with this one for the next two days until I come up with a better one (months later, maybe). Everything else is set, there are no more low level functions to be written, just the game itself. Completed beta version... 12:43am 11/19/00 (Sunday) Added 32bit support. Tested on WinNT4. Some assembly fixes, minor string adjustments. Few changes to the game engine: Level now increase by the number of cells cleared instead of number of blocks dropped, game statistics is displayed at the end, minimum delay time is increased. Paused state and inactive state are now distinguished. This does have side effects -- window no longer repaints when paused. This is only to make capturing screen shots easier. 11/22/00 (Wednesday) Increased chain bonus factor. Fixed capture desktop during pause bug. Most keys now resumes game from paused state. 11/30/00 (Thursday) Started on text routines. 12/02/00 (Saturday) Finished font routine. Started on optimized display routines. 12/04/00 (Monday) Added memory logging facility, and confirmed that I freed everything I allocated. Also, 16bpp mode allocated 2831328 bytes during its run, 32bpp mode allocated 5667776 bytes. Lower screen resolutions will obviously use less memory. 12/05/00 (Tuesday) Some logging adjustments. Replaced game states with symbolic names (as opposed to numeric literals). This makes the DFA much more easier to manage. Regenerated font sprites. All non-extended non-control ASCII characters map to meaningful symbols now, so everything you type on a US keyboard should show up. Wrote optimized display. This version does not redraw most of the fields during the input loop, which is where most of the time is spent. Speedup not noticeable on Hisagon. Some irrating pauses happened every 3 seconds or so after the above optimization. Those apparently go away when cdplayer is not running :) 12/06/00 (Wednesday) Added frame rate calibration. Now it really should run the same speed on all machines (game time should match real time). Got registry to work. Now high scores are stored in the windows registry, with primitive CRC protection :) Since I can only get DWORDs to work, everything is stored as DWORDs, including name strings. Major changes to the program -- modified DFA states, reorganized input routines, added alternate display states, etc, etc. Everything is in place for high score saving, except adding to the high score table itself. Registry reading doesn't work in release build. This is yet to be investigated. ... and now, it doesn't work in debug build either. Gave up trying to load the registry for now. Everything else seemed to work okay. 12/07/00 (Thursday) High score loading now works ^_^ At least it did when I tried it on NT4. I will go home now and see that it works on Hisagon as well... Okay, registry read/write works on Win98 :) Found various display bugs (location of texts, etc). Fixed... Bad quality control on my part, should have played it for a few hours before making it availabe to others. Added undocumented keys 0-9, which fixed the location of where blocks appear. This allows for faster suicides, for better testing. Although I guess if you are clever, you could use these to control the block to your advantage. 12/08/00 (Friday) Started working on terminal (maintainence) mode. Features not documented in help dialog box are now in features.txt 12/09/00 (Saturday) Object files now embed compile time information. Made virtual key conversion functionality a separate function. This will make terminal emulation (Ruri-ruri mode) a little easier. Finally found out why screen is not refreshing when the window is being moved. That problem is now fixed ^_^ That's why it does benefit to go through all source files once in a while :) Ruri-ruri mode almost complete :) Just have to code the edit command now. Frame rate calibration now rounds to nearest two frames. 12/10/00 (Sunday) Finished Ruri-ruri mode. Not heavy debugged, since it shouldn't have any problems, and it is a debugging mode in itself after all. Added key to force special block to appear. Added sounds to Otika :) 12/11/00 (Monday) Individual sound effects can now be enabled/disabled (Ruri-ruri mode only). Started transparent/translucent sprite routines. Finished new partial background redraw routines. Finished transparency/translucency routines. Need further testing to be sure ^_^;; 12/12/00 (Tuesday) Added joystick support. Fixed special block clear problem when block orientation is not default. This version is good enough to increase the version number :) 12/13/00 (Wednesday) Rearranged background rendering functions. This is in preparation for alternate background rendering routines. 12/14/00 (Thursday) Added support to disable background (fake alpha blending). Now you can fill background with a single color, which is a little bit faster. Untested. Changed my shell from explorer to LiteStep (I figure, if I am stuck with an inferior operating system, at least use a superior shell). Otika still runs fine if I don't switch workspaces around. Maybe not everyone will have LiteStep to break it. Started faq.txt. I feel that Otika is a large enough program now, and some parts may deserve some justification... 12/15/00 (Friday) Worked on background particles. Trouble with clipping :P 12/16/00 (Saturday) The clipping problem turned out to be problems integrating C and assembly code -- symbol names were actually referring to the first array elements, when I expected them to be the address of the first elements. The result is lots of crashed debugging sessions, etc. It's all fixed now. Completed fractal background. 12/18/00 (Monday) Added dust effect, also a "blue screen of death" terminal mode so that you can enjoy the animated backgrounds :) Fixed paused state problems. 12/19/00 (Tuesday) Optimized particle animation a bit. Modified pause behavior once again -- keyboard events now exit pause, but those events do not echo. Added swarm background mode (from Xlockmore ^_^ ) 12/21/00 (Thursday) 16/24/32 bit modes for all transparency settings have been tested. I think it's good enough to be version 1.0 now, but I should at least test it on a WinNT4 machine to be certain. Then again, version 1.0 implies a complete software. Such thing never exists in real life. Added ranking display to Ruri-ruri mode. Cleaned up source files. Notably in Makefile, there is no longer a "backup" target (not everyone has RAR) Fixed Ruri-ruri mode command repeat bug. Do understand that Otika is not really a fully functional terminal after all... Fixed flicker in name entry mode when animated background is enabled. May this be the last graphical error I find :P 12/22/00 (Friday) Modified frame counter. Now tracks last 4 seconds. 12/31/00 (Sunday) Fixed game time overflow problem. Granted not everyone will play the game for more than 99 minutes (it's designed to end around 10 minutes), but just in case. Also tested for score overflow, no problems there. Fractal is now enabled by default.