Alliance - just a strategy game with stolen graphics. By CataSoft.

! - Bug fixes.
@ - Changes.
# - News.
* - Ideas.

Building log.

    + v0.19

	@ Changed the interface a little bit.

	! Fixed many small bugs. I dont really remenber all of them :(

	! Fixed bullets and explosions showing when the unit was invisible.

	# Added memory display (it used to work under DOS). The game now tries 
	  to free some memory at startup by allocating chunks of 1mb and freeing
	  them.

	! Fixed a memory leakage. When loading a map, it used to first create a 
	  small map (2048x2048) and then load the map file. It never freed the
	  small map.

	! Fixed another bug related to sprite cacheing code. flush_sprite_cache 
	  was called with a wrong parameter.

	! Fixed big sprite cacheing bug. I used destroy_rle sprite to free the 
	  cache mem. I dont know why but it generated a page fault... Now i use 
	  free.

	# Added antialised font routines. Ripped from allegttf. Used for GUI


    + v0.18 - 21.01.2002

	! Fixed file cacheing bug. It wouldn't set the correct time.

        @ Only 40 ships per frame are drawn in the players radar. This gives a
          great speed boost. Radar moves slower when there are many ships but
          that's ok, i guess... Also, the radar uses 2 bitmaps to do double
          buffering. One is displayed and the other one is used.

        ! Fixed game load/save functions.

        # Added unit radar type and cloaking type display.

        ! Radar is displayed every 160ms and when scrolling. Fixed the
          scrolling code where the old coordinates were stored as ints
          while the scrolling pos is stored as floats. They were not equal.

        # Added meteor icons.

        @ More interface functionality

        @ The visible radar mask is now the local player's radar zoomed.

        ! Fixed 15bpp mode. AA_FUNC15 was the cause...


    + v0.17 - 18.01.2002

        @ Every player has it's own radar so that the visibility of each unit
          can be relative to any player, not just 'me'. I had to keep the
          original radar to allow zooming.

        # Can be compiled with Mingw

        @ Smooth radar zooming.

        @ Faster alpha+trans.

        @ Faster alpha.

        * There is a problem with the invisibility flags. They are computed
          based on the radar mask. But only the local players has a radar mask
          How can i be invisible for all players if i only have one
          invisibility flag?? Too many questions for today...and for one man

        # BIG BREAK. Bugs fixed, a lot of work done...

        ! It compiles with MSVC 6.0. Many bugs fixed.

        @ A new driver system. All gfx functions are wrappers. They use a
          lookup table with the real functions, so if u change this table,
          you change the functions.
          I only rewrote the old functions, but soon i will write a directx
          accelerated driver.

        ! Enemy ships showing on the radar (when not supposed to) fixed ...

        @ Added nice big icons, changed cursor.

        @ Changed directory structure.

        # Scripts are compiled only if changed. So it starts faster. But it
          only checks the script file, so if you include any files, do your
          own checking.

        @ The most important change is that anims are stored as scripts too.
          This means that you can control everything.
          Also found lots of bugs in the SeeR library. The most important one
          is that you can't do this:

          typedef struct POINT //external struct - imported
                {
                 short x, y;
                } POINT;


          void foo(POINT *p)
          {
           int x, y;

           x=p->x;      //error - wrong values - shorts are 2 bytes and ints 4
           y=p->y;
          }

          You can either use shorts in your proc or change the struct. I choosed
          the latter because i dont want to say YOU HAVE TO USE SHORTS....


        ! LOTS of bugfixes. Too many to remember... :)


    + v0.16 - 01.09.2001

        ! Game load/save functions work again - they save the ai state (scripts)
          too - wow that was something...

        # Added pause switch - for the main menu witch i will implement soon.

        ! Few bug fixed - i cant remember all. Still there are a few (2 i guess)
          nasty ones present - they are so difficult to track...

        @ Faster radar drawing. It uses only one bitmap for the mask.

        # Added __blender_trans_addXX functions to combine the addition and
          transparency effects.

        @ Changed GUI system - it uses an Allegro like DIALOG structure.

        @ Changed radar MSG_DRAW handler. It draws all ships an buildings on
          the radar.

        @ I dont include 'interfd.h' anymore. I load the indices dynamicly
          at run time so that the user can change the object order in the
          datafile.

        # Added cursor animations.

        @ Directory structure changed. All the game specific data is placed
          in separate directories. So, if you want to modify the current game,
          just create another directory and copy the all the default data.
          Now modify it as you wish, and select your directory as the default
          one.

        ! Fixed building code. They appear on the radar now.

        # Added map loading (not game loading) function. The map is stored as
          a script. The scripts 'init' functions creates the map, 'process'
          takes care of the scenario etc...
          This makes creating maps a very easy process - the maps are small
          too.

        # There are four types of bullets:
            BULLET  - it hits the target instantly
            MISSILE - it follows the target
            FLASH   - hits instantly and looks like a tunder (has no anim)
            KAMIKAZE- destroys the unit that launched it (no anim either)

        # Updated rules.ini.

        ! Fixed 'p' opcode bug.


    + v0.15 - 27.07.2001

        @ Changed read_animation. It doesn't use get_config_string anymore,
          it reads the file directly and now you can write
            'fSHIP001 g0' instead of
            'Frame0 = fSHIP001 g0'
          This is confusing with the 'g' opcode, because the anim definition
          can contain empty lines and comments. It ends only when it reaches
          another section or the end of file.
          So the lines are numbered this way:
             fSHIP001 d1 s60 x0,255 - line 0
             fSHIP002               - line 1
             fSHIP003               - line 2
                                    - empty line - doesn't count
             fSHIP004               - line 3                        <--|
             #this is a comment     - comment - doesn't count          |
             fSHIP005 g0            - line 4 - jumps back to line 3 ---|

        # Added first rockets. Found bug in anim code ('p' opcode).

        # Fixed radar bug. The radar and radar_mask bitmaps are sized 128x128
          now, and it's not slowing down everything when zooming.

        # Dirty rectangle system is now faster. Improved add_dirty function.

        # Cool thing - when pointing an unit, it changes color to blue - me,
          red - enemy, yellow - neutral

        # Added splash damage. Up and running.

        @ Improved lightning routine - about 5 times faster. Wrote my own line
          routine and trans_putpixel and removed dirty update for every pixel.

        # 3 types of bullets: 0 - homing - it  reaches the target for sure.
                                  Good for missiles, bullets and laser.
                              1 - flash - it damages instantly and appears as
                                  a flash (i donno why i called it that way :)
                              2 - kamikaze - it simpply kills the unit who
                                  fired it. Good for mines and stuff.

        # Selection rectangle is now filled. Had to write a trans_rectfill
          routine witch is a _lot_ faster than rectfill with trans drawing.

        @ Faster translucent drawing - the 'add' effect (x1,255 command).
          About 3 times faster.

        # Units can fire 2 bullets once. The bullets start from locations
          4 and/or 5. The sprite field can be used to enable/disable the
          location: 1-enabled, 0-disabled.

        @ Changed config code. The allegro code is kinda slow so i wrote some
          of the functions from scratch. It's about 7 times faster.

        * I want to change the animation code once again and i need some new
          functions involving file reading (rules file).

        ! Fixed bug involving anim copying. You can't just copy an animation
          with memcpy, you have to copy the frames too. Now fixed.

        ! Fixed destroy_anim.

        # Added buildings. They have no purpose.

        @ Sprites that must have different colors for each player must be
          stored as 8 bit bitmaps with a cartain palette. By changing the
          palette, the color changes too. I added also a sprite_cache_base
          used to cache the same sprite with different colors.

        # Added new animation opcode: 'Fa,b' - it displays all sprites between
          a and b.

        ! Fixed antialiasing bug. It looks better but cuts the sprites edges
          (the limit between transparent and solid areas).

        ! Fixed dirty droppings bug.

        @ Changed old Exploit order to improved Extract order. Extraction
          affects life. When the metal is gone, the unit dies.

        # Added new unit : Extractor - it extracts metal from units.

        # Enemy units can be selected too. The selection display only shows
          the metal info.

        # Added aluminium, steel and gold vars to the unit struct. Every unit
          contains a certain amount of this metals, and extractor units can
          parazite them in order to extract them.

        @ Removed planets. From now on, planets are considered units too.


    + v0.14 - 05.06.2001

        # Added workers.

        ! Fixed bug when ordering something on the radar.

        * As i dont have access to net, maybe i should write a save-to-file
          driver. It should write every package to a file and then process 
          this file. Or maybe do a realtime file driver. The network link
          would be simulated by an opened file used by two instances of the
          game...
        
        # Started NET. Package manipulation for now. Basis functionality.
        
        # Started AI. Added script for every unit type, for every group
          and a master script - the brain. They are loaded only by computer
          players. 

        @ Changed tip proc. Tips dont overlap the button anymore.

        @ Changed the way animation fx (trans, add, aaliasing) were stored.
          Now I have the 'x' opcode with two params:
              x0,a - trans
              x1,a - add
              x2,a - aaliasing 

        # Added antialiasing. Slower but better visual quality - especially
          without cache.

        ! Tiny bug fixes.

        # Armour and shield are considered when damaging an unit.

        # Added mem_get_rotated_rle_sprite to rotate a sprite into a RLE sprite
          in only one step. About 4 times faster than rotate + transform.

        # Added ships for every player. Lots of wasted memory.

        # Added flames. Ships look great.

        @ Changed the way properties are being handled. Now unit names can be
          changed too.

        # Added editor. Animation code functional but ugly. Unit code broken
          but prettier.

        # Added and fixed resource tip.

        @ Changed map load/save functions. They can now correctly handle
          player/unit/bullet/planet pointers, timers and animations.
          It's almost done.

        @ Changed game name from Death to Alliance. I hope there are no other
          games out there with the same name.

        # Added start logo image - nice :)

        # Added radar zoom.

        # Added interface dirty system. Every window has a dirty flag, and
          redraws itself only if it is set. Routines that affect selected
          items must set this flags.

        # Added upgrades. Almost done.

        # Added anim lights. Now every animation can define up to 8 lights
          by entering the polar coords (angle+dist) relative to the upper left
          corner. The lights are _not_ drawn during draw_anim, because the
          colour of the light has to match the player colour.

        # Added mask switch to rotation routines. If not set, the rotation is
          done without transparency checking, witch is faster. Useful for
          cacheing.

        # Building works fine. A few more effects when spawning the units and
          it's done.

        @ Removed second sprite from animation structure. It was obsolete.

        # Added animation sections. You can split the animation into sections
          witch behave like separate progs.

        # Added 2 more structs to the UNIT struct: build and upgrade.
          They used to be held in the order struct too, but that caused
          problems. Now the unit can build and upgrade while moving...

        # Order scroll. If not all orders fit into the order window, you can
          scroll.

        # Order buttons are functional. Now you can select the type of order
          (command, build and upgrade) you want.

        ! Fixed nasty bug in rotation routines. It would access the destination
          bitmap outside it's limits. I think this bug is present in Allegro
          too.

        @ Changed the way the dirty buffer blitted. It now groups several dirty
          rectangles together and blits them, instead of blitting one by one.

        @ Changed the interface graphics. Now it looks __G R E A T__.

        @ Lots of tiny changes.


    + v0.13 - 04.03.2001

        # Added tips.

        # Shift + click on an unit adds it or removes it from the selection.

        # Added HOLD POSITION order. It's identical to STOP order but without
          agressivity.

        # Added agressivity (to STOP order).
          0 - escape.
          1 - fight fire with fire.
          2 - seek and destroy.

        ! Fixed all orders involving slowing down. When slowing down, it
          wouldn't check for the map borders.

        # Added groups. The interface is almost finished. Just a few changes
          and it's done.

        # Right clickicking onto the screen is context sensitive:
          Friend - MOVE, Enemy - ATTACK, Planet - Exploit, Location - MOVE.

        # Orders now accept radar params.

        # Added EXPLOIT order. Have to work on that.

        # Added target display for single selection. When clicked, the screen
          displays the target.

        @ Changed screen repositioning. It uses acceleration.

        @ Moved temp vars (i0..i4, p0..p4 etc.) from unit struct into the
          order struct. Its better this way.

        # Added PATROL order.

        ! Fixed a couple of little bugs, changed everything a little.

        # Added ATTACK LOCATION order. It really works.

        # Clicking on the radar does something sensible.

        # If you move a group of units to another location, they move grouped
          or not, depending on the location. (confused???)

        # Added 'None' weapon. It is used for units that have no weapon.
          It's fire rate must be as big as possible (99999..) in order to avoid
          useless computation.

        @ Changed panel aspect.

        # Added selection info bars and text.

        # Added click on selection code. If you click on an icon, it crops the
          selection.

        @ Fixed selection display - now every ship has it's own icon structure
          in order to be able to display big icons as well as small ones.

        # Added resource display + supply display

        @ Modified panel aspect (three times)


    + v0.12 - 10.02.2001

        # If a single ship is selected, it's icon is bigger.

        # Added 24 bpp. It piggybacks on the Allegro rotate_sprite and
          get_rle_sprite routines. 8 bpp is the fastest one of all but i will
          have to create a proper palette. I'll stick to 16 bpp for now.

        # Added player colours (radar only for now). This is achieved via the
          'int player_color[]' array.

        # Added BIG icons for single selection.

        @ Changed selection structure. Now it can store units as well as
          planets, bullets etc.

        # BASE unit added, along with it's EXPLOIT order.

        # Removed 'child' animation.

        @ Changed the way myltiple frames were being handled. For example, if
          a great ship had a small rotating gun, then it would have to store
          the hole ship just because a tiny little gun was rotating. Now it
          only stores the differences. This slows things down a quite a bit
          when dealing with multiple frame sprites (if u r using cache memory,
          this impact is minimal) but it is way better concerning memory usage.
          This is how it goes: There are two sprites in every animation (drawn
          in this order):
          -the first one that stores all the common pixels
          -the second one for every frame that stores the modified pixels.
          Child animation is now obsolete. I think i will remove it.

        # Added animation 'child' field. Now every animation can display a
          second anmation on top of it. Usefull for animations where the image
          changes just a little bit during every frame.

        @ Planet code functional. Planets are visible only if in range.

        @ Added save and load map functions. Pretty basic, actualy. They can
          save and restore almost everything. Lots of bugs. I'll have to work
          on that.

        @ Improved processor detection routine. Now it displays the model too.

        # Added animation ADD effect. The explosions look better.

        @ Changed old message system. Now it is ok, except for some estetical
          overlooks.

        # Added planet code. Not tested yet. I have to fix the message system
          first.

        ! Stupid bug fixed. When removing the first object from a list, a GPF
          would result. This is because it would try to access NULL->prev etc.
          This caused problems when shuting down.


    + v0.11 - 27.01.2000

        # Added particle system. Usefull for explosions, bullet hits etc.

        @ Changed cache rle generation scheme. It used to create rle's sized
          MAX(w, h)*1.4, witch is bad. Now it takes into account the rotation
          angle, witch is way better. Because of this, it won't dirty the
          buffer that much.

        @ Rewrote animation code. The structure is much smaller. It now uses
          a pseudo-op type processing. The opcodes have changed too.
          Now i'm happy :)

        # Enemy units are visible on screen only if within range of a friendly
          unit.

        # Added 32 bpp. To come: full range of color depths - 15, 16, 24, 32.

        ! Another rotation clipping check bug fixed. It would wrap 1 pixel at
          the right and bottom edge.

        ! Bug fixed. In order to make rotation faster, i modified the code and
          broke the clipping check. It worked w/ cache but but w/o it crashed
          the system quite bad. Now i fixed the check and it's ok.

        @ Changed the STOP order. Now it slows down the unit, if it was moving.

        @ Changed my ming about how the radar should work and rewrote the code.
          Now enemy units are visible on the radar only if they are close to a
          frendly unit. Radar only (on screen not implemented yet).

        # Added plasma background.

        @ Rewrote ATTACK UNIT order. Added acceleration. It won't piggyback on
          the MOVE order anymore.

        @ Rewrote MOVE to LOCATION and UNIT order. Added acceleration also.
          It's cleaner and faster. Removed bugs (i hope).

        @ Made get_rle_sprite and mem_rotate_sprite work in 8, 15, 16 bpp
          without any changes.

        @ Switched back to 16 bpp. I hate palettes. I want the game to have
          some decent effects. I'm not Blizzard to create another Starcraft,
          witch i think has the best palette manipulation ever.


    + v0.10 - 08.01.2001

        # Tomorrow is my birthday. 19 - here i come!!! Happy birthday!
          Well, thank you!!

        # Added radar.

        * Realised that i have to rewrite the animation code. The structure is
          too big and i don't like it.

        # Added startup diagnostic text.

        # Added trans_tables, light_tables and add_tables.

        @ Changed the colouring system: now every ship has another animation
          defining a sprite with frames for every player. This sprite will be
          displayed on top of the ship. This way all the ships will look the
          same (for all players).

        @ Changed depth to 8 bpp. Much faster, and much smaller bitmaps. It is
          also better supported by the video adapter. Visual quality is worse
          than 16 bpp but with a good palette... Anyway, i can't use alpha
          anylonger and transparency is worse too...



    + v0.09 - 30.12.2000

        # Happy new year!! And don't forget: Metallica kicks ass!!!!!
          Thanks, man!! I know that.

        ! Game is not playable. It only displays ships that can receive the
          following orders:
                stop - default, it stops all activity and also prevents units
                       from being one above another
                move - towards location and follow unit
                attack - attack another unit

          The interface has a basic functionality. It allows selection, one by
          one or grouped and ordering. It only displays the selection and the
          orders.

        @ Improved RLE converting routine. Now if it knows the size of the
          resulting sprite, it is faster, because it doesn't have to use
          temporary memory and then copy it to the final location.

        @ Changed the sprite cache structure. Now every rotation has it's own
          size var. This is useful when converting to RLE. This sizes are
          created at run time and saved when the program exits.

        @ Improved sprite rotation routines. About 10% faster.

        @ Changed sprite cache update scheme. If the cache is full, the dead
          sprites are dumped and the most important (big ones) are cached.

