;Day 1 ; ;Setup the initial environment - got the ground colour and sky colours setup for daytime and then ;got loads of instances of a simple tree mesh placed all over the world to see how they look. Once the colours had been matched so the ;tree trunks blended to the ground it looked quite stylish and abstract. Made the branches and leaves a single black colour so the whole ;environment is now in monotone. Decided to add a very small blue tint to the sky. I want the environment to be a stark contrast to the bright ;colours of the bikes and lasers and explosions, with a slightly oppressive feel to it. ; ;Experimented with different 2-tone cubemaps to see how good a cel-shaded effect I can get on the tree trunks. ;Finally found one that sort of works - it highlights the edges in black from most angles, goes a bit weird when ;close to the camera at extreme viewing angles but OK in general, and cheaper than the normal method of outlining in 3d where you ;copy the mesh, make it black and then flip the polygons inside out and inflate them all slightly, which although totally accurate ;doubles the polycount per-tree. ; ;Added some really simple spherical clouds that rotate around the camera in 2 groups. Made them alpha-additive to ;give a strange but pleasant effect. ; ;Created a sunflare with some almost invisible beams to place as a sprite in the sky. Set it to overlay everything else ;which means it renders through the trees but mostly looks OK. Scaled it right up to give more visual impact. ; ;Managed to work out how to assign a single brush to all the instanced trees branch material, so by updating the coords on one texture ;it makes all the tree branches in the world blow around in the wind. It's a subtle effect but a nice touch for the menu / front end background. ;Day 2 ; ;Added a ground texture which is a sort of greyscale blobbiness. ; ;Added a really simple bike mesh and positioned the camera in the right place. ; ;Tweaked the tree placement a bit, then decided to do it properly and get it spawning and replacing trees as the bike moves. ;I had 2 options here - move the bike or move the trees. In the end I decided to move the trees because moving the bike leads ;to problems where the player ends up with coords that a too large for Blitz to handle, and means lots of moving stuff around ;to keep it all centred around the player's location. ;Moving the trees keeps everything in a small bubble centred around 0,0,0 in the world, and nothing ever moves that far from the ;origin. When the trees reach the edge of the visible area they are repositioned outide of the rendertweening loop to avoid ;having them flicker across the screen as they move. ; ;Did some stress testing and it seems to handle a good few hundred single trees with no problems. Once the single tree is expanded ;into a single-mesh group of trees I can bring the number of entities down and it will still look really busy. I need to make it ;difficult enough to stop the player at some point. ; ;The ground texture had to go as it remains stationary as the trees glide over it, which looked very odd indeed. ;The single-colour trees now blend perfectly into the single-colour ground. ; ;Put in the screen-border overlay darkening sprite as seems to be the order of the day with every game these days. It does add depth to the ;screen though, so I like it. ;Day 3 ; ;Got more structure into the program - added a global data type so almost everything else is loaded / setup ;as a subobject of this type. ; ;Added a code-archives blur effect - tried the dreamfilter but it's too severe. ; ;Setup all the boring stuff like lives, level number, start positions etc.. ; ;Began work on the front-end, using a simple fasttext overlay and a nice LED-style font. Kept it very simple, ;just a start game and exit option so far. ; ;Added a black sprite to be used to fade in and out of blackness during transitions. Got it fading correctly when ;going from the menu to the game. ; ;Added the Retro Remakes splash screen. ; ;Added some debug flags to allow me to skip the splash and menu and jump straight into the game. ; ;Got the bike moving at last, setup the mouse controls to allow it to arc around and speed up / slow down. ;Tested a variety of speeds and setup 5 difficulty levels with increasing top speed limits. Fastest level ;is mad-fast and looks like it will be very tricky. ; ;Added a mouse pointer sprite so it will work full-screen. ;Day 4 ; ;First attempt at the collision detection system - tried to use a radius system for the detection of impacts with trees, ;which seemed to work very well once tuned for range. Then realised that once each tree mesh becomes a single mesh with ;multiple trees in the harder levels that this won't work anymore. ; ;Swapped to a linepick from the front of the bike to detect the polygon mesh. This took some tweaking to avoid it ;hitting the tree branches and also allow the bike to get close enough to the trunks to feel right in play. Finally got ;it sorted out. ; ;Added the difficulty option to the front end which can be cycled with a mouse click. ; ;Added a 5-line scoreboard for each difficulty. Got the front end to cycle through these if the user doesn't move the mouse for 5 seconds. ;Set a colour for each difficulty from blue through green to red, and then purple for the fastest "insanity" mode. Displayed the scoreboards ;in these colours for consistency. Text looks blocky and nicely retro. ;Day 5 ; ;Found that in a fast crash the bike can pass right through the smaller trees - added a couple of pivots to the bike mesh ;so I can linepick right along its length, which seemed to fix the fault even at top speed on the hardest difficulty. ; ;Began work on the crash effects - added a simple fragment type which is currently a dark cube. Got some of these ;being spawned when the player crashes. Managed to get them bouncing and rolling in a reasonably convincing ;fake-physics sort of way. ; ;Setup a new crash-cam mode that places the camera near to the crash for a better view. ; ;Added control option swap to the front end so you can use an XBox360 pad or the mouse. ;Day 6 ; ;Added the free LotusR2 particle system for the smoke and flames when the bike explodes. ;Spent ages tweaking 2 emitters to create dark smoke and bright flames. Finally got something that ;looks OK. ; ;Setup the smoke so it spawns slower than the flames. Added a fragment parameter so I can flag some frags ;as on-fire. This allows more flame particles as they only spawn from certain pieces. ; ;Tweaked the fragment bounce so they arc further and bounce less. Scaled them down and coloured them very dark and it creates a pleasing ;explosion with debris. ;I think I'll leave the fragments as simple cubes because it gives a nice retro-feel to it all, reminds me of Blast Corps on the N64. ;Setup a shake parameter also that decays after a crash so the crash camera shakes. Scaled the shake according to the impact speed. ; ;Tried to get the crash camera in a good place to watch the fragments, but couldn't decide whether I preferred watching ;the crash from the front or rear, so added both and made it randomly select one of them. It may end up inside a tree from time to time ;but I can't see how to cure that without some complex code checks, unless I can use MeshesIntersect - normally a command too slow to use ;for collision detection in realtime but if its only used once at the start of the crash sequence then it might work. ; ;Bumped up the number of fragments to make the crash look better. Setup their initial speeds from the bike impact ;speed so the faster the crash the further they fly. ; ;Added some extra flames at the point of impact which are spawned for a couple of seconds only, as if the tree is on fire. Provides a nice ;central focus for the crash event also, rather than just getting a closeup look at a tree trunk every time. ; ;Added a free .ogg music loop that cycles on the front end. Faded it out for in-game. Need to get some sounds from somewhere, such as ;a laser firing, explosion, engine sound and whoosh of trees passing close by. Might also add a wind-rush noise at speed to make it feel ;faster. ; ;Setup the fade out after a crash to go to red. ;Day 7 ; ;Setup night mode and got the game to pick day or night on alternate levels. Night is very dark - had to make the moon less bright and ;smaller than the sun. Experimented with a couple of planets but they looked crap so removed them. ; ;Adjusted controls so that you need to hold the accelerate button to maintain speed, to allow the player to fire the lasers using the ;other button. Might rig it so that once started the bike automatically accelerates to top speed, or put that as a menu option. ; ;Tweaked the scale of the moon sprite so it doesn't look too pixellated. ; ;Created a laser object type and added a basic laser firing routine. ;Added a laser sprite and got it facing and firing the right way, and amazingly it seems to feel about right in action which is odd because ;as the bike never actually moves (it's just the trees that move) and I was expecting the lasers to behave in a visually strange way. ; ;Need to work out how to run the enemy bikes next - as the player never moves I have to make the bikes appear in range after some initial ;exploring, then bring them closer and hold them at the shootable range as long as the player remains at top speed. They also have to appear to ;be trying to dodge the trees and weave around, but also make some overall direction changes so they're not just going in a slightly wiggly ;but mostly straight line. ; ;Changed the post-crash fade out back to black as the red was just too overpowering. ;Day 8 ; ;Added a basic enemy type with the usual params, parented the visual mesh to a pivot that stays at 0,0,0 and just rotates - this means the visual ;mesh is moved out along the Z-axis only dep. upon how far away it is. ; ;Added an enemy creation routine and got it placing enemies at random distances and directions. Also gave each enemy a random colour. ; ;Added some simple clearout routines that remove all the lasers, fragments, objects etc.. to be called between lives and between levels. ; ;Corrected a bug where the base laser object was visible during the crash-cam sequence. ; ;Created the basic enemy update routine which hides the enemies if they are outside the visual range. Tested this in-game and it seems OK - the ;enemies appear in the distance once in-range and appear to be travelling ahead of the player through the trees. The only problem immediately ;apparent is that if you belt along at max speed after a while all the enemies will be in visual range at once. This may not be a problem once the ;enemies are weaving around. ; ;Need to find a nice way to display the number of remaining lives - I need to display lives left, score and level number on-screen. The retro way ;is to just display this with text at the top or bottom of the screen, but I'd prefer a text-free display if possible. ; ;I'm thinking of adding a simple radar display to show directional indicators to the enemies, which turn red once the enemy is in-range. This would ;be a round rader with triangular beam bars that rotate in the relative direction of the enemies. ; ;Refined the bike mesh slightly in AC3D to include handlebars and front laser pods. Also created a very simple laser beam object to use instead ;of a sprite to give it more shape. Positioned these into a doulbe laser and set the firing position correctly so the beams appear to emerge from ;the laser pods on the front of the bike. ; ;Twweaked the enemy handling code to the enemy bikes appear to be moving parallel to the player rather than directly away from him. A bit of a ;bodge this as the bikes never really move, but visually it looks better than always having the bike rear-on no matter what angle it is on the ;screen. Added the steeing angle here also so they appear to turn correctly when leaning over. ; ;A small tweak to randomly colour the fragments either black or grey, which match the colour of the bike mesh better. ;Day 9 ; ;Added a random colour option to the player's lasers for a little visual variety, also made the bike mesh take on this colour along with the brighter ;fragments when crashing - not sure if this extra colour suits the monotone environments so I may take this out. ; ;Added a small helmet sprite to represent the players lives, placed these bottom-left of the screen for the moment, coloured them to match the bike. ; ;Moved the explosion generator into a seperate routine that takes various position and colour params so I can re-use it for the enemy bikes. ;Modified the explosion routine to allow more control parameters, such as frag life, frag yaw spread etc... so the routine can work well when ;creating an explosion for an enemy bike. ; ;Added 2 new Lotus emitters for the enemy bike explosions that spawn particles with lower lifespans. ; ;Tested the top difficulty level at Insanity and can't get past the first row of trees, so no worries about the game not getting hard enough. ; ;Adjusted the frag handler so that an enemy bike spawns fewer frags than the player, and made them have no damping and instant culling when stopped. ;Set their speed as a negative but with a limited vertical speed so they are mostly projected back towards the camera and removed fairly quickly. ;Set the emission angles tighter than for the player also so there's less of a circular spread and more of a directional shower of fragments. ;Day 10 ; ;Discovered a bug with Blitz and the NVidia 8800GTX card where sprites parented to the camera can tear badly when the camera is moved or ;rotated, which was resulting in a huge screen glitch in the black fade between crashing and respawning. Noticed the same thing in HUD sprites in ;another program. No obvious fix so I swapped over from a sprite to a very thin cube for the fade overlay. ; ;Setup the lives system so it correctly displays the correct number of helmets in the bottom left of the screen. The level number will be placed ;at the bottom-right with the score top-central. ; ;Modified the life display to fade in and out with the game, and also to be hidden on the front end. ; ;Added the first scoring routine, awarding points for each bike destroyed based on the current level. Also added a check that awards a huge bonus ;if the player can destroy more than one bike with a single shot - I'm not 100% sure that this check will actually award the points in the right ;way, need to test it somehow or see if it triggers by accident - put in a debug output for this event so I can tell when it happens. ; ;Modified the level start routine to increase the number of enemy bikes every 5th level, to a maximum of 10. Minimum is 2. Also modified the level ;start text to display the number of enemies under the "Day Patrol" / "Night Patrol" messages. ; ;Adjusted the entire level balance to get a better difficulty curve - reduced the difficulty options to 3 - EASY, NORMAL and HARD, then adjusted ;the way the tree objects are spawned to remove the 4th group of trees. The total number of trees now gets reduced on levels below 10, and above ;level 15 the maximum movement speed is gradually increased to ensure an increasing challenge. The number of baddies spawned is now determined ;by the level also, so you start with 2 baddies and by level 30 you have a full complement of 10 baddies to shoot. ; ;Added the score to the top centre of the screen and reduced the number of high-score-boards to 3 to match the difficulty levels. Also moved the ;lives indicator to the top left, level number will now go top right I think. ; ;Added the number of baddies still to shoot to the level intro text. ; ;Added the GAME OVER text to the fade out when you run out of lives, also slowed down this last faed and increased the number and ejection angles ;of the frags so they make a nicer final explosion. ; ;Added a small sideways slide to the bike camera when cornering to make it feel a little more dynamic. ; ;Adjusted the tree placement to allow more variation in the scale of the single trees, and also allow them to lean over a little bit. ; ;Altered the number of points awarded for shooting bikes and completing the level so they're higher : 1000 points per bike, 10000 for destroying ;more than 1 bike with a single shot, 20000 for completing a level (to be increased also dep. upon the level number). Made a small addition so firing ;a shot deducts 10 points, so careful shooting nets a higher score than random blasting. ; ;Sorted out the level to level transition, so for the first time I can play through the game in the correct manner. It starts to get difficult at ;about level 10 on NORMAL mode, on EASY it should be more forgiving until the speed eventually ramps up. ; ;Scaled up the flame particles for the enemy bikes to provide a bit more visual oomph. ; ;Modelled the final form tree 1, quite low poly (about 280 tris). Tested import and it works OK, just need to setup the surface painting so it gets ;correctly cubemapped and the branches animate. ;Day 11 ; ;Bought a copy of Silo3D Pro, which is a much closer to 3DSMax than AC3D. Built the final speeder mesh using it, also built an enemy rider model (very ;low poly, just an arrangement of cubes) and a pair of arms to show on the player's bike. Sorted all the scaling issues, mapping etc.. and got the ;game importing these new meshes from .obj files using some import code found on the Blitz site. ; ;Tidied the data structures to include fields for all the required meshes, to enable me to keep track of them all. ; ;Modified the .obj import code so it can locate the correct texture and load it with the mesh, tested it on a few meshes and it seems to work. It requires ;the material in Silo to be named the same as the full texture filename, then it strips out the mesh path from the filename and loads the texture from ;the same place. ; ;Located a bug in the .obj importer whereby a polygon face without texture coords would produce an ouput file line of 36//36 instead of 36/23/36 - the ;missing middle number is the texture vertex identifier. The error can be solved by remapping the object to ensure it always has texture coords on every ;polygon, but I've marked the place in the importer code with a possible fix next time I get this error occuring. ; ;Modified the game so it's loading the first base tree mesh from the .obj, centred and scaled correctly. Added a material processing routine to cycle ;through the object and ID the branch and trunk materials, and set them to the correct global materials which are cubemapped and masked+moving. ; ;Adjusted the daytime ground colour to match the tree trunk material so they blend nicely. ;Realised that the trees show up grey at nighttime whereas everything else has a blue tint, so adjusted the mesh colour to fit better. ; ;Created the final 2 groups of trees and set them up correctly to import as .obj files. Experimented with a simple shadow graphic under each tree which ;looked quite nice but spoiled the aesthetic of the tree trunks blending into the ground, and they also glitched a bit on the horizon, and as this is the ;focal area when chasing the enemy it was very distracting, so I removed them. ; ;High score save and load is in and working, so scores on the 3 tables are carried over between program restarts. ; ;Modified the .obj import routine some more to prevent it creating a new surface for every material change. It now scans through the existing surfaces ;and looks for one already using the same texture, then re-uses that one instead of creating a new surface. Brought the surface count on the large ;tree group from 23 back down to the 2 that it should be, so Blitz should be much happier rendering a lot fewer surfaces. ; ;Added an extra menu mode to display the "created by me" message after the scoreboards. ; ;Things still left to do - build the proper cloud mesh in Silo, possibly add the bonus tank and helicopter, although I've no idea how I'm going to get ;them to look correct...having them drive straight across the horizon as they do in the original is going to look pretty bad...maybe add in a bonus ;golden enemy bike that appears every now and then and changes direction very fast to make it hard to hit.