//===========================================================================
//	@file readme
//
//	@name Brick Game Simulator
//
//	@author Lynx 
//	@startdate 16/10/2002
//      @firstreleasedate 25/10/2002
//      @thisreleasedate 24/12/2002
//
//	@url http://bgs.sf.net
//	@email emulynx@users.sourceforge.net
//===========================================================================

//===========================================================================
//	General Info
//===========================================================================

This is a Win32 binary distribution of Brick Game Simulator 
version 0.7 (RC-1).

bgs requires SDL runtime libraries.
SDL is available at http://www.libsdl.org.

SDL requires DirectX (at least 3.0).
If you don't have it please visit http://www.microsoft.com/directx/

SDL is distributed under the terms of the GNU LGPL license 
(http://www.gnu.org/copyleft/lesser.html).

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

Portions of particle system are used from
pengswim:  A game of swimming and eating
Copyright (C) 2002  Michael J. Edwards and OneArmedMan LLC
which is also distrubuted under the terms of the GPL.

"The Warsaw Tetris" is classic Atari800 game made by Arkadiusz Lukszo 
in 1989. I've used their modified background and partially color pallete 
with numeric font for "Warsaw Skin" (no, i'm not trying to simulate their 
tetris version YET).

Default score rules are taken from cheap chinese handneld "Brick Game 8in1".

"little T" graphics and game rules are courtesy of iERiS & Co.

GcukBlocks skin is courtesy based on GcukBlocks, GPL tetris clone.

Graphics from Brick/JK skin are courtesy of JK (http://??)


//===========================================================================
//	Release notes
//===========================================================================

This release is christmas release candidate for version 0.7.

It has a few minor glitches which doesn't prevent the game to be enjoyed.

1) If you are using WinAPI interface, you'll get screen with 19 missing 
lines at the bottom of the screen. To fix that glitch please use:

bgs -nogui -game gamename

If you want to change skins in "-nogui" mode, try to use 0-9 keys 
(not on the numpad).

2) Controls are jerky. If you'll try to push left/down+some other key you'll
get weird result. This is a known issue which will be (hopefully) fixed
in bgs 0.7 final.

3) You have to !!!DROP!!! figure (SPACE BUTTON) to start the game 
(sometimes). That glitch appeared just yesterday that's why I have no
idea where it came from and how long will it take me to trace it 
(has to do something with timers).

4) Some of the skins do not have some features (pause in iERiS skin) and
some of them are just unfinished but are too cool to left behind the scenes.
And no, "R" key isn't for reset yet. You should use enter for now.

//===========================================================================
//	Request
//===========================================================================

IF ANYONE HAS HANDHELD "BRICK GAME" (CHEAP CHINESE TETRIS) AND HAS
DIGITAL CAMERA - PLEASE CONTACT ME!!!

As of now following people contributed their "BRICK GAME" screenshots:
0) Me, Lynx - awfull quality (scanned black 8in1 discolight version)
*1) Axel - awesome quality scanned "brick game". 
   This one is the best as of now.
2) piroJOKE - nice quality, medium size (some weird brick game, never saw
   anything like that).
3) http://dendyushka.narod.ru
   Nice quality (light grey 9999in1).


//===========================================================================
//	bgs history
//===========================================================================

Once upon a time iERiS (member of (ex?)scene.lv team) went crazy and said:
"HEY! Let's make a Tetris clone using C and SDL library!".
I called that idea a CTC (Crossplatform Tetris Compo).

iERiS himself made one nice oldschool tetris clone which actually wasn't 
completely finished - it features only basic gameplay with several levels.
GFX is oldschool and very neat. But it doesn't have intro/outro screens 
which makes game incomplete and unfinished ;)

At that time I had some mock-ups of my tetris clone but I never thought
that I'll finish it and implement all these features! I just wanted to make
small oldschool atari tetris clone. 

As you can see, now it's quite much more than small tetris. 
I'm trying to make bgs as modular as possible. I hope that I'll make
quite fine engine which will allow any tetris clone to be ported to it.

Right now it has basic features and finished "infinite" gameplay but 
everything else will definately come soon since project moves really fast.

//===========================================================================
//	How to (step by step)
//===========================================================================

Win32:
Run bgs.exe and enjoy.

Other:
1) Get the package, unpack it.
2) To start the game with specific skin type:
   bgs -game skindir
3) If you want something else, type
   bgs -help
   and open stdout.txt (information will be printed to console soon)

Enjoy.

//===========================================================================
//	Controls
//===========================================================================

LEFT/RIGHT 	- arrow keys for figure movement
UP,RCTRL	- rotate figure
DEL,KP_INS	- rotate figure
A/D		- CW/CCW rotation (experimental)
DOWN 		- force moving of figure down
SPACE		- drop figure

ENTER		- reset game

G 		- enable/disable grid
T		- enable/disable figure statistics
D		- enable/disable "next figure" doublesizing (if available)
N		- enable/disable next figure hint 
R		- enable/disable "next figure" random coloring (funky)
O		- enable/disable particle engine (beta)

F		- enable/disable window frame

P		- pause/unpause

0		- internal skin
1-9		- external skins (available through GUI too)

ESC/F1		- boss mode (wip)
F3		- fullscreen/windowed mode
F10		- quit
F11		- screenshot (.bmp in same directory as bgs.exe)

//===========================================================================
//	Bugs
//===========================================================================

  Please submit any bugs you'll find which aren't 
  mentioned in release notes.

//===========================================================================
//	Revision History
//===========================================================================
0.6991 - 24.12.02 - 18:48



0.6990 - 24.12.02 - 3:24
Indian mango nectar release.
[diary]
Long time no update! I was so busy with work (which is as usually full of
surprises), real life and... bgs that I didn't have time to update readme.
After I've posted job ad on sf.net I've received 8 emails about site design,
2 mails about skin development and one stupid mail saying something like
"HEI MEN NOBODI HAS DOS NOV!". I replied to all of the site designers
with basic idea - go to videolan.org and movies.times.lv (Hi, Silencer!) and
make me a simple site. Since then nobody replied back except some megaw00t
kid who was saying "HEY I'LL GET 2TB RAID AND IT'LL COST ME $$$ AN HOUR
TO GET IT WORKING". At least he said that he might design something
when bgs will be ported to *nix. Ok, let's move to other skin designer.
He's from blueorange.com. He's cool. He's very cool. blueorange.com
designed some sgi subsite, made ad campaign for sega.com, created
some VERY cool looking bag design for adobe, created mcafee.com logo, etc...
I couldn't imagine that some designing god might really answer my job ad.
He did 3 skins in 3 days. 3 awesome skins which will be included in xmas
release. Well, I'm happy that my project gets a bit popular - 6 downloads
of old bgs release. Let's move to changes...
[/diary]
- Fixed several dozens of bugs. 
- Implemented something like clocks. If anybody is interested in putting 
  clock in his future skin he might use that alpha feature to reserve some
  space for it.
- Fixed colorkeys.
- New variables:
  * "bonus" is now an array (4 values for import),
  * different colorkeys (3 values for import)
  * "internaltext" (enable/disable signs like "Scores:" 
                  (used in default skin only for now))
  * "particleon" (switched off by default)
  * "loggingon" and "debug" really work now
  * "clockon", "timex", "timey" 
  * "scores_zeroed" (makes scores look like "00100" instead of "100")
  * "linestats1-4" instead of "linestats1/2/3/4+x/y"

- "-nogui", "-debug", "-logging" really work now
- No more crashes if somebody will try to load default skin
  after start with default skin.
- Found the reason of all slowdowns in gcukblocks. 24bit mode is 
  very slow and absolutely not recommended for storing/displaying
  anything.
- One draw_pixel routing for all things inside engine. I have
  alternative variants but seems that current one is fastest one
  and very compact.
- "brick game simulation" was renamed to "brick game simulator" couple of
  days ago.
- Whole bunch of control keys for enabling/disabling of menus, effects,
  etc.
- Perfect hardcoded skin featuring most of the effects. I made it symmetric
  and added some cool internal text. 
- Small figures under figurestats are doublesized.
- Figurestats are fixed, no more jumping several pixels up-down 
  (had to do something with float).
- Scores are 5 digit by default. All of the spaces are replaced to zeroes
  by "scores_zeroed". 
- Particles work in all bpps, they are using draw_pixel.
- z figures are rotated in slightly other way in array so
  they will look cool in internal figurestats mode.
- Lot's of skins. I've started to work on ccs, fixed a couple of
  other stuff...
[diary]
omg, it's 4:04. sleep, fool!
[/diary]

0.6983 - 19.12.02 - 0:25
RASA Kefiirs 0.5kg 2.0%-) release.
[diary]
Today was a fine day when I succeeded in finishing many things.
I found l33t 44 font pack from "consolecoder@hotmail.com" which contains
wide variety of oldschool fonts from Amiga/C64/etc. I've finally 
integrated some GOOD font and squished last couple of font related bugs.
I'll definately need to find some 20-128 bitmap font or to covert some
of these to bitmaps.
I've also integrated autogenerated drop speed adjustment menu into
OpenConfig code. That's a bit wrong but I'm not sure where to put it for 
now. 

I've spent 1 and half hour trying to implement new control system similar
to CDVST. Well, I found out that such system works great in any kind
of scrollers (pixel-by-pixel movement), but not in tetris.

I've also found a problem with particles disappearing after glass
is half full. Since keyboard handling was removed from SDL_WaitEvent
loop, it was not possible to push SDLK_DOWN using timer. I've tried 
to achieve that by copy-pasting SDLK_DOWN code into timer callback function
and it didn't worked as I expected. Figures were falling to the bottom of
glass and staying there. I've removed CheckCollisions from every place
except one, removed cycling on floor and it worked almost perfect.
When I tried to put back SDL_WaitEvent loop something broke and I had
to restore bgs.c from backup. Whatever, that one works just fine.
I lost time and wasn't able to work with structures again. Grr.

I finally found a way to use LEFT/RIGHT + DOWN combination. I had to 
combine both ways, see source, it's combination of waitevent and
getkeystate. I had to create custom user event and handler for moving
figure down so pushing down would not interfere with pushdown callback.
[/diary]
- New (20-128 ASCII chars) integrated font.
- Fix to dN-font.c convertor which prevented to convert most of fonts 
correctly.
- New autogenerated speed menu.

0.6982 - 18.12.02 - 3:33
Hofmeister Schinken cheesy release.
[diary]
Today was a hard day. I was very sleepy cause I underestimated my
knowledges and tried to split bgs.c into several pieces yesterday.
It was useless waste of time for now. I came to work and found 
that some russian idiots are advertising their web development studio
on sourceforge through email. "YOU WILL BE SURPRISED HOW LOW OUR
PRICES COULD BE". Haha! I had to buy new network card since g'old
ACCTON from brandname Compaq box died after 2 years of non-stop
work. I wonder how much gigs it passed through itself... Oh wait,
that wasn't Compaq box ;) Compaqs never die that fast. Anyway, I've
got new RTL8139 card (I like using standard chipsets whenever it's
possible) and downloaded all the new mail. Well, then I had
serious non-stop work-and-talk session for couple of hours but later
I was surprised that someone else except .ru idiots responded to 
my design request. I've told him everything I want (simple page
like http://videolan.org with only 1 logo). I also received email
from GCUKBlocks author. He said that it's fine to use everything
I want and asked for permission to use porions of my project.
Oh well, it's open source - why should I resist :D
In eCafe I spent more than 2 hours researching Atari related stuff and
found several nice atari fonts. I've also contributed my Atari XC12 
and LDW1050 manual skans to one guy who has really nice site
where I was downloading all the megademo images last year for PHAT1.
I also found some nice docs and faqs about Atari and was too
excited to look for other fonts. I even got Atari800 source.
BUT WHEN I GOT HOME and started to rewrite my font functions I found out:
1) emuos.h font from Atari800 has 4 codepages. In ATASCII (Atari ASCII).
Fuck me, what a shame. I was struggling with that file for half an hour
rewriting functions to make it display something. Well, It worked
but ATASCII is way too different from ASCII that's why I would need
to write ATASCII2ASCII function. WHY THE HELL DO I NEED SUCH FUNCTION
IN BRICK GAME SIMULATOR?!?! I've searched all my harddrive for any
8x8 fonts and found NONE except Apple II fonts. Fuck, not-another-codepage.
I wrote dN-font tool to convert fonts from .fnt (plain byte-by-byte format)
to something similar to XBM. Since I haven't found any XBMs on my hd...
Fuck, where did they go? WHERE'S MY DEVBASE WITH ALL STUFF?!?
Ah, screw it. I've tried to convert some of the VIC/Printer/C64 fonts
to my format and found that they not only have wrong codepage (this
one is closer to pc though) BUT they feature negative numbers in file. 
Very nice, I wonder if there's something wrong with my converter.
But it works perfect on Atari fonts... Ah, screw it. 
[/diary]
- Restored everything from 2 day old backup.
- DrawDigits() function is upgraded to show any letter you want.
[diary]
I wonder if external font support is really screwed up...
And btw - it wouldn't be that easy to integrate
/* Fireworks demo written by Dave Ashley */
since it's way complicated for current particle system.
I'll try to bug Saint about fire routines since he has article
on his site about that stuff.

FUCK, IT'S 4AM AGAIN. NO, I"LL NOT MISS A CHANCE TO COPY THAT
README TO FLOPPY!!!!!!!!!!!

ehm, I just saw this in my stderr:
DirectDrawSurface3::Flip: DirectDraw is still drawing
I wonder if it's fullscreen<->window switching problem.
Zzzzzzzzzzzzzzzzzzz
[/diary]


0.6981 - 17.12.02 - 2:06
Multifruit juice release.
[diary]
Monday started with crazy hurry. "One more function and I'll go sleep"
never works as you know. That's why I was sleeping only 7 hours.
I forgot to copy that readme file with yesterday's diary and was't able
to post all the interesting stuff on forum. Anyway, I wanted to send
emails to all people who made all the projects which I was playing
with yesterday. But my email client expired and I had to... ;)
I've contacted Luka (GNU Robbo author) and we were talking for
entire day discussing his project. Then I've contacted trailblazer
author and reported about success win32 port. After my network
card started to work slowly I've asked admin to open access to internet
on my computer. I went to #SDL @ openprojects.net and discussed 
several SDL things. As usually, people were very friendly but I was
kicked once for copy-pasting 10 lines of code ;) nomorecopypasting.com. eh?
Then I went to VK and started to mess with SourceForge.Net. I've
classified bgs & Romov.Net and then I've even created basic webpage,
made a release and wrote some news on http://bgs.sf.net. I've also
added bgs.lynx.lv and bgs.dotnet.lv aliases to sf.net host. SF.Net
system is very nice but it's almost impossible to work with it
in Mozilla - every time when I was trying to submit some form
I was logged out :( I've posted several job ads (gfx/theme guys,
gui developer for non win32 platform and somebody else) and added
besjonok as "All-purpose monkey" :) I've spent some time 
updating my profile with skills and then tried to make small
webpage for http://romovnet.sf.net but it was late and I had to go home.
[/quote]

- Improved WaitFrame(). Thanks goes to #SDL guys for a basic idea.
  gltron said that SDL_Frame(1) is safe to use.
- That bug was fixed after I've implemented new MainLoop() routine:
  If you'll push ESC in fullscreen mode and then try to restore app
  screen will be black (doh, not again!). SDL_Flip is called but nothing
  is shown. It might be SDL_ACTIVE... problem, need to debug (printf).
- Wrote wrappers for all gfx functions to make them more portable.

0.698 - 16.12.02 - 4:03
What a release!
[diary]
  I've spent entire day (starting from night) researching different source
  codes and getting ideas for major rewrite of main cycle. I've succeeded
  in compiling "GNU Robbo" (http://gnurobbo.sf.net) for Win32 platform and 
  made a lot researches in "Robbo" area (it's very nice sokoban-with-action 
  game from Atari created by Avalon (.pl) in 1989). I was working on it 
  almost 4 hours.Then I moved to other usefull stuff. I've compiled 
  trailblazer-0.9 by Paul Robson (http://trailblazer.sf.net) which shows
  what 18kb without any graphics can produce (doh, it's not a democompo,
  i know that any 4k demo could be much kewler but don't forget that it's
  C not ASM). Then I accidentaly opened pengswim-0.3.0. I wasn't able
  to compile it since I brought sources on floppy without libs and gfx 
  but I found AWESOME particle system. I tried it and got some bubbles on 
  screen. "Uhm, Neat!". After playing a bit with it I understaood that 
  major loop rewrite is absolutely MUST to continue further development.
  I moved to series of parallax demos by David Olofson and didn't find
  what I've expected - he was using simple SDL_Delay(1) (WHICH IS NOT
  CORRECT WAY TO DO IT). Then I played a bit with Snipe2d (orbital sniper
  game made for 48h game compo by Jari Komppa aka Sol (http://iki.fi/sol)).
  It features a very UNREAL zoom routine which I might even use for
  some crazy block demolition on some skin. I wonder if I could port it
  from C++ to C. I skipped smoothscroll-1.1 since it's GL stuff, skipped
  metris-20021102-1 after 10 minutes of unsuccessfull compile (missing 
  some files as usually and it's C++, baby), skipped ltris (!!!Need2Check!!!)
  and played a bit with some BombMan by 2002 Andrzej PĹ‚ywaczyk. It was
  something I really was searching for but THE THING RAN AT 2fps on my
  puter so I skipped it (it used SDL_Delay anyway). But Bombman is cool
  and I'll come back to it when I'll try to write something similar.
  And then I found my LAST FILE which was perfect (last thing is always
  like that). It was "Certain Death Via Space Things" by Phoenix Kokido
  (http://kokido.sf.net). It explained ALL stuff which I needed.
  I got his Wait_Frame() routine and INSTANTLY bgs started to show and
  update particles and other stuff as I wanted! I rewrote some particle 
  stuff since it was created for pinguin fishing game and got some nice
  basic particles. And then...
[/diary]
- WaitFrame() based on GetTicks featuring FPS limit.
- Particle system with 2 nice effects.
- HandlePause() is not needed anymore.
- ShowPause() has some internal changes which should allow nogfx skins
  to be more leet than ever.
- MainLoop() instead of Handleehmsomething().
  I still have a lot of things to rewrite there:
  - SDL_GetKeyState(NULL); looks cool and allows to handle custom 
    key configs really easy. I need to doublecheck cdvst for that.
  - I tried to get two button things working "left/right + down" but
    couldn't make it :( I think with keystate rewrite it would
    be much easier.
  - I'm not sure about all drop timers. They should be replaced with
    Tick-based checks. But now they work neat even in pause mode which
    is better than it was before. Somehow all of the stuff stops in that
    pause=1 mode and isn't reseted after pause=0 (before - you are dropping
    a figure with space, pushing pause and unpausing game. figure is not 
    falling - it's moving with standard speed).
[diary]
  What else can I say? It's a major beta release. Now I need to move
  all of the variables into structures (I have lotsa neat examples and
  it should be really easy anyway). After timers will be punished I'll
  make that auto generated speed menu in GUI and even think about +/- keys
  for increasing/decreasing speed. FPS limit changer should be implemented 
  too. I also want to get sources for Atari800 emulator and find if they have
  A800 font builtin in the same format as I need. That will save entire day
  of drawing and converting fonts. I should also finish font drawing routine,
  check if new draw_pixel is better than old DrawPixel and leave only one
  routine since particle engine uses it's own routine too (doh). I also
  want to get WinAPI for mingw32. Major rewrite of config files is badly
  needed - X-Mas is coming. I also need to finish at least one CCS brick
  game skin. Custom controls is MUST, ingame clocks (could be used for
  level/speed increase), other scoring stuff like scores for dropping figure
  etc///////////////////////////////////////////////////////////
  

  I wrote that piece in 45 minutes. zzzzzzzzzzZZZZZZZZZZZZ!

  But I still need to say THANKS to Axel which revived that project
  with his harddrive!
[/diary]
  
0.69751 - 15.12.02
Triis siveentini release.
- None of the .rc files are locked after scanning. I wonder why .rc file
  after SkinSkanner(file) is locked... 
- "Rescan" feature is fixed. 

0.6975 - 14.12.02
Rimi pastry release.
- Implemented new font loading algorithm. 

Before:
00111100 
01111110 
01100110 
01100110 
01100110 
01100110 
01111110 
00111100 

Now:
60, 126, 102, 102, 102, 102, 126, 60 

  .exe file is 5kb smaller! 
  PS Olschool algorithms 
  (I was using that one on my Atari65XE for creating big icons) r0x!

- Added "rescan skins" feature in GUI.
- Added protection from reading broken skins (if line doesn't have "=" 
  inside it just gets ignored).
- Sorry, you can't use ":" as argument delimeter in configs anymore. 
  I'm going to try using libconfuse in feature if you want it that much.

0.6974 - 13.12.02 - 20:16
Traffic release. This one goes to public!
- Skin selection from GUI works. Well, to set wID yourself you need to add
  MIIM_ID bit to MENUITEMINFO->fMask. 

0.6973 - 13.12.02 - 16:10
Friday, The 13th release.
- Default skin is almost done.
- Neat boxes are drawn using DrawBox() (featuring shadows and borders)
  Missing features: border w/h/color, shadow offset/color.
- Internal font (digits only now)!
- Pause is shown as 54073 (paose) in internal skin mode.
- Internal skin has small figures under every figure stats line :)
- Pause handling is now fixed. Too bad it makes all other keys (except
  skin loaders) disabled.
- "skan for skins" is available through "Skin" menu. It doesn't delete
  old skins yet (I don't need how to get their wIDs).
- Moved all the variables outside .c file to .h! Second try was much better!

0.6972 - 13.12.02 - 0:36
Mango Lemon Pineapple nectar release.
- Universal handler for skin loading using numbers (not on keypad) is
  finished. I wonder why it loads same skin TWICE after pushing button 1 time
  ...
- Well, I thought that symbol # for comments is better than semicolon.
  Is it me or I like linux ;) ? I'm thinking about using library 
  confuse-1.2.2 if my parser will not be good enough.
- SetDefaults is almost ready.
- Aha, if you'll just check for event.key.keysym.sym>=49 without checking
  for event.type == SDL_KEYDOWN it'll do everything twice (KEYDOWN & KEYUP).
- First step for importing arrays. Well, that's easy but I need easy way
  to manage multiple line values (like figure arrays).
- Figures could be random colored and have random colored pieces.
  (r button). Looks funky :)

0.6971 - 12.12.02 - 23:51
Danish bacon-cheese release.
- Finally, 3rd revision of trim function (all the credits flew away to Saint)
- InsertMenuItem works. All of the found skins appear in skin menu inside 
  GUI (wow, that was really easy).
- Started to implement universal handler for skin loading through keyboard
  and GUI. WinAPI is annoying thing. What the fuck is MENUITEMINFO.wID and 
  why it's automatically generated by Windoze? Why hardcoded menu element  
  access check like "wParam == 40100" works but "wParam > 40100" for 
  generated menu items with InsertMenuItem does not? It's not obvious, m$
  sux0rz?!?
- Code cleanups

0.6970 - 11.12.02
Wow, one harddrive is alive!
BUT
dotNet is shutting down...
- Integrated skin skanner into main code. The only missing thing is 
  check for "empty" arg2 which might crash bgs in case of some incorrect
  skin. Too bad my MSDN is missing "InsertMenuItem" RTFM :(
- Second revision of trim function (thanks goes to Saint!).
  It doesn't work the way we expected :(
- More debug information is written to stdout file.

0.6784
WIP

xx.1x.02 - G-Loc 2 WIP:
- Hurray, "X" button works for closing a window!

24.11.02 - 15:43AM
Maracuja nectar release.
- Added CCW rotation code. And mapped it to D button for now (A-CW, D-CCW).
- Started to research handheld tetris. Speed 0 has 300ms speed!

23.11.02 - 11:40AM
Peanut release.
- Directory skanner. Finds skins!

21.11.02 - 22:49PM
Spicy tomato release.
- Found a way to pass multidimensional array to function. Thanks, Saint!
- Well, seems that since align routine became 
 AlignFigureArray(int source_array[4][4]) 
 you would not be able to cycle on floor anymore!
- Aha, gotcha! Fixed memory leak.
 HEAP[bgs.exe]: Invalid Address specified to RtlFreeHeap( 820000, 8201d8 )
 It happened when I was trying to unload (I wonder why I was doing it?)
 empty surfaces.

21.11.02 - 1:28AM
Apple juice release.
- Using memcpy for 1:1 copying of arrays instead of annoying 3 line for code.
- Made function for displaying numbers/text on the screen. DrawInfo started
  to look like big pile of cloned garbage!
- Randomly rotated generated figures. I cheated and RotateFigure receives
  some global source_array, operates it and returns nextfig or tempfig on exit.
- 2=D (No, that's not a crazy smile! I just remapped buttons.)
- Title Screen, Game Over screen. These are MUST for "complete" game.

0.67831 - 19 Nov 1:22PM
RC-1
- Fixed all skin problems.

0.6783 - 19 Nov 0:36AM
Since I'm still drunk I'm doing really crazy shit:
- Stats were disappearing again after figurestatstotalh < figurestats[max].
  I just removed brackets in figurestatscoef formula and now it's working
  fine.
- Splitted bgs.c into bgs.c and bgs.h. More splitting coming today...
- New variable - "realheight". You can compile executable with GLASS_HEIGHT
  set to whatever you wish and then set real height in skin. For example
  max height used in skin right now is 23. I've compiled bgs with   
  GLASS_HEIGHT set to 23 and added "realheight=20" to all other skins which 
  have height 20 to use only 20 first cells. Such quick hack would allow not
  to think about using dynamic arrays with malloc()s for quite a bit.
- Some code cleanups.

0.6782 - 18 Nov 2:16AM
Latvian Indepen_d"a"nce Day.
- I'm independent from MSVC from now on ;)
  Using Dev-C++ from now on - it's IDE is much better, it's free and mingw
  generates smaller executables. I was planning to do that for a long time
  but documentation digging took me a bit longer than i though. I was too 
  lazy to download it :D
- Implementing level system (Hi, ugly Tetroid).
- Screenshots support. Press F12.

0.6781 - 17 Nov 1:26PM
- Fixed several config files. They contain all the values we have now.
- Fixed a bug which would fill your top lines with the same line as zero line
  if you had 0 line partially filled and tried to remove any other line.
- Improved pause handling. Drawback is that all of your timers are stopped
  every time you call pause and set to default values when you are out of 
  pause. As far as I understand there's no way of getting timer state
- Fixed nextmultix/nexymultiy issue. Now you can make doublesizing look
  any way you want. I'm thinking about renaming it to nextresizing since
  you can make figure fit into something like 16x32.
- Fixed major problem:
  "When you'll fill entire glass sometimes you'll not lose but instead 
  receive clipped figure which becomes original figure after rotation. 
  Something is wrong with collision detection!"
  Problem wasn't about the collision detection but about the way new (and 
  next) figures were generated.
- Added "byeon" and "byefile" vars. That's the screen which will be shown
  after pushing quit key. It's using ShowAndWait function (first function using
  pointers & references!) with Delay set to 2 seconds. 
  I'm thinking about adding delay values for these screens to config files.
- Wrote function MyLoadBMP. Very neat thingie - allows you to load file
  to surface and set transparency and alpha at once.

0.678 - 15 Nov 6:54PM
Curses.
- Using old collision detection engine. Should allow to 
  "cycle figures on the floor forever" :( Previous release allowed to drop 
  figures through floor thus making them to disappear.
- Renamed a lot of variables, added a lot of variables to config file.

0.677 - 15 Nov 1:08PM
Almost a release.
- Coloured the figures same way as Tetris Plus does. Looks too shiny.
- 0 warnings.
- Implemented multiy. Seems that it's not working.
- Fixed the the most worrying thing (concept of figure rotation handling and 
  collision). Before: "You can rotate L and I figure for infinite time.
  Just wait till it will reach _FLOOR_ and try to rotate it twice (it will
  go up). You can make it hang there using that feature for infinite time. 
  Damn." Now it's working the way it should be.
- Implemented basic figure texturing. Check jaleco theme.
- Implemented support for catching of most important init variables from 
  command line. 
- Wrote a parser for config files.
- Implemented skin support from external configs (.rc)
  It's possible to "skin" these things atm:
   * Screen init settings
   * Scoring rules
   * Ingame GFX (including bitmaps)
  Check any .rc file inside theme directory to see how it works.
- Created 3 basic skins. More to come soon. They are beta ;)


0.674 - 13 Nov 2:51AM
- When you were dropping a figure bgs started to manually move down your 
  figure with delay 5 (+~30) ms. Now it just sets drop timer to 
  speed divided by drop speed coefficient. That fix allows to control figure
  while it's falling! However this is causing unexpected problems in 256 
  color mode - please check buglist. But anyway - it really improves
  gameplay.
- Fixed "floating" stats. Forgot to put () in statscoef calculations.
- All same-type-figures always have same colors (in future - textures).
  e.g. I,Z or whatever will always be the same color on screen as other I/Z.
  This is much better - you can see parts of your removed figures.
- If you don't have any bmp skins for tetris it will work fine anyway -
  fixed some "do not clear screen" glitches.

0.673 - 9 Nov
- Changed controls. Lots of people were confused with F3/F4 - that was 
  actually same control as used on Atari.  
- bgs should work fine on cards which do not have framebuffer (well, at 
  least SDL manual says it will update entire screen instead of flipping
  buffers in that case).
- Played a bit with sound. No, it's not available yet. And I still can't
  competely understand how it works.
- New skin from JK. 
- New feature - F is used to remove frame and header from windowed mode.

0.67
- Fixed stats bug (stats was disappearing after 52 figures since
  stats field height is 52 and after 53/52 result was not float)
- Fixed stats bug (Z&L/Z&L flipped figure count was saved incorrectly)
  No more software flipping on L/Z - now they are flipped in array.
  Strange, but it fixed the problem.

0.667
- If you'll push pause, then go to fullscreen now it will be updated.
- Added SDLK_KP0, SDLK_RCTRL, SDLK_DELETE to rotate figure.
- Fixed Warsaw skin - it was showing incorrect buttons for Pause/Screen.

0.666
- Renumbered releases. Now it's 0.666 since that last release had 3 bugs
  which I accidentaly added. It was repacked 3 times :D
- Fixed score bug (if you'll get >32768 your entire stat will reset)
- Tested 320x200 instead of 320x240 
  (inspired by shadez from IRCNET @ #scene.ee)
  That aspect ratio sucks :)

0.0998
- Added ability to switch fullscreen/windowed modes in pause mode.
- Fixed bug which showed garbage on some videocards. 

0.0997
- Fixed black screen bug which appeared after you go to fullscreen, 
  push ESC, then go back to app.

0.0996
- Fixed bg.bmp - some incorrect button mappings.
- Possibly fixed some cursor problems after switching to fullscreen.
 

//===========================================================================
//	ToDo
//===========================================================================
ToDo:
0.8
- !!! Use structures since code becomes unreadable with hundreds of vars. !!!
- Solve mystery with 16-32 disappearing lines in WinAPI mode.
- Optional "neat" scrolling.
- HighScoring.
- Add speeds according to current skin variables into Speed submenu 
  (needs fix, should be generated for default skin too)
- Fix clocks.
- glassopacity, glasscolor?
- Advanced scoring system:
   * Scores for moving the figure down.
   * Bonus for dropping the figure.
- Add features to show "scores left till next level", "lines left till next
  level" (and may be even rand() them so they would make a perfect basic
  "level mode".
- It should be possible to import colors for "simple" themes like warsaw from 
  config files.

0.9
- !!! MULTILAYER GFX SYSTEM. Skins already get too complicated. !!!
- Move all gfx to one file. 
  It should allow designers to use one file with lot of layers.
- More nice particles.
- FPS?
- Implement level support (levels are increased every 100 lines now) 
  and include something as example.
- Import figure shapes set from chinese handheld tetris!
- Multi directories for skins
- Implement filling of "level" progress indicator in warsaw & jaleco skins.
- Boss mode (wip).

1.0
- Skin config should be loaded once to memory and then parsed. 
  That way it would be possible to store variable names in special associative
  array and use SetVariable(arg1, arg2); (switch(arg1): case... or if...) to
  load/save/reset variables. ______Or may be not?_____
- Use confuse 1.2.x library for config parser?
- Some other modes including "Time Trial", "Level Mode"...
- It should be possible to "skin" anything you want:
   * Controls
   * Figures
   * Sounds
- Sound.
- Clean code.
- Make code really cross platform. Wanted: Linux, MacOSX, DOS, BeOS.
- Documentation.
- Mouse?

while ( !stable )
{
 Test();
 ReleaseRC();
}

Well, that finished todo list will force bgs version to reach number 1.0!
With all finished cool stuff you'll be able to simulate your own 
tetris clone. 

Later I'll think about moving to C++. It'll give us complete freedom.
Anyway here's the list of planned stuff. I don't have idea when I'll do it.

- Windowed mode resizing using SDL_image?
- Dynamic resizing of tetris glass. (C)
- 2 player VS support (C), story mode (C++), puzzle mode (C).
- Animated game field and figures (C++/C). 
- Background music (C).
- Ingame gfx GUI (C).

Far future...
- Mods for game rules. How about Puyo Puyo, Columns, Dr. Mario?
  (Seems real after digging ClanLib. Lua rocks.)
- Netplay?
  (Seems even more real with new high level lib for SDL_net!)

//===========================================================================
//	Questions
//===========================================================================
- How can I check if some surface contains something inside or
  is really empty?

//===========================================================================
//	Ideas
//===========================================================================
- one type figures should be same color. what about stats?
- funky figure rendering/shading

//===========================================================================
//	Credits
//===========================================================================

- Saint (http://saint.dotnet.lv)
  Help with basic C stuff, figure rotation code, trim code,
  testing, pointing that gfx routines should use doublebuffering,
  unsuccessfull GUI development advices ;)
- Dmitry (GS)
  Pointer & reference stuff, advices on fixing float number related stuff.
- Janis (http://vavoom.sf.net)
  strtok() explanation and a lot of other neat coding advices.
- iERiS
  For great idea of making "Tetris compo" and giving some great ideas.
  I've also made skin "little T" out of his "little T" game ;)
- Axel
  Reminded about int < 32768 (score bug), wrong repack reminder, 
  pause/fullscreen bug finding and saving the day by giving me
  small harddrive when all of my hds crashed, making best tetris
  scan.
- M P Zuckman (http://blueorange.com)
  Awesome design skills. Several skins including lcd, xmas, commie...
- mikejedw (http://pengswim.sourceforge.net/)
  Great particle engine.
- Codac Home (http://portabledev.ferradj.net/)
  Great 8x8 fonts from consoledev@hotmail.com!

- JK (http://)
  First real skin (Brick/JK)!
- Pit (?@yahoo.com)
  dotNet.lv logos
- Phoenix Kokido (http://kokido.sf.net)
  For his awesome "Certain Death Via Space Things" game which explained
  really a LOT of things to me.
  
//===========================================================================
//	Thanks goes to...
//===========================================================================
- Vecais Kvakers (http://www.kvakers.lv)
  For patience, discounts and other stuff. I would never have so much
  CDR(W)s full of sources without them.
- Q-Ball  (http://q-ball.times.lv)
  For testing on his GeForce 2 MX400. Don't use SDL_ANYFORMAT flag!
- Atari800 team (http://atari800.sf.net)
  For their internal OS font.
- Radek Shterba (http://www.infos.cz/raster/)
  For TCHEKO & CAPEK fonts from Atari. 
- Useless
  For beeing absolutely useless.