Tuesday, 29 December 2009

Engine3.14 released

Please e-mail for this version if you want it

Bugs fixed in this release
==========================

Sprite003: friction is now working

Engine007: GetFirstSpriteOfThisType() now works

Engine008: RemoveFirstSpriteOfThisType() now works

Engine009: KillFirstSpriteOfThisType() now works

Some proper testing would help !

EventManager003: non auto reset timers are now elapsed correctly, this was fixed with changes mentioned below to timer logic

EventManager004: events are properly reset when added to the EventManager after previously being added and removed.

Changes in this release
=======================

SpriteDebug
-----------
added - storedInt, this will display the contents of the StorageInt property of the sprite

Event
-----
added - AutoReset, this property is true by default and forces the event manager to reset a timer if it was checked using Elapsed and has elapsed. If you set it to false the timer will remain elapsed until you manually reset it.

EventManager
------------
added - TimerStringLinesReturn, this returns all active timer names on a separate line

removed - AutoReset, this didn't make sense as a global setting so has now been refactored individually for each event

EngineManager
-------------
added - SpriteDebug.storeInt support to sprite debugging

FontBank
--------
added - new font vector, which contains a vector style font as used in games such as asteroids, starwars etc... You will need to use the new FontSheet.png file in order to take advantage of this font. (Remember its white text on a transparent tile so when you download it it will look invisible in the browser, so right click and save as a PNG)

Limit
-----
added - Activate(), forces the limit box to be active, this should only be needed in exceptional circumstances.

Sprite
------
added - StorageInt, to allow the storage of an integer value

fixed - After all the major changes I hadn't realised that certain updates of the sprite were happening even when it shouldn't

fixed & adjusted - Friction is now a scalar quantity (a single value rather than a Vector3), 0 means no friction.

removed - ApproximateSpeed, use SpriteHelper.ApproximateSpeed() instead as this actually works!

Sunday, 20 December 2009

Engine3.13 released

I am unable to upload the dll file to googledocs (I don't think it likes accepting executable code), I am looking for a free hosting service that will accept the dll's, but for the time being if you want the files please e-mail ebarwell@palmers.ac.uk and I'll e-mail it to you directly.

There is still a problem with rendering errors if losing graphics device state I have put some code in to fix things but I can still get errors when forcing the graphics card to Change between one and two monitors (this should not be a problem). Can you test 3.13 going into full screen mode and post a comment on this post, so that I can be sure at least that works. If it doesn't I'll have to re-think the renderer.

Bugs fixed in this release
==========================
Sprite002: fixed viewport limit problems. It was caused by the code that checks to see if a viewport is active, it was assuming all sprites were in world coordinate mode rather stupidly.

AnimatedTexture001: fixed animation not changing, it only affected doing a FrameRate after OnDistance. You should now be able to switch a sprite between diferent animation methods no problems.

EventManager002: fixed dozy mistake preventing the returning of event names, the code was set to return the string version of the object type - can't even understand why I wrote it that way - must have been testing something else and forgot to change it back!

EngineManager006: fixed problems when using RemoveAllLayers(), and then adding more layers.

Just leaves the rather very very complicated TileSheet001 :(

Changes in this release
=======================

EngineManager
-------------

added - GetFirstSpriteOfThisType(), this returns a single sprite of the type given, this is useful if you know you have one particular sprite of a type that you need to manipulate.

added - RemoveFirstSpriteOfThisType(), this will remove the first occurence of a sprite with the given type.

added - KillFirstSpriteOfThisType(), this will kill (and hence launch any funeral handler) the first occurence of a sprite with the given type.

LayerManager
------------
added - RemoveLayer(), this allows you to remove an individual layer from the layermanager. It may be preferable to just hide an existing layer tho'

Monday, 14 December 2009

Engine3.12 released

Expect more changes to come quickly to start with as bugs are found.
This version will be live by 12:15 PM 14th December 2009
Template will be updated accordingly and so will the dll and xml files on the student shared game programming resources folder

Bugs fixed in this release
==========================
Menu001: fixed tag track problem

Changes in this release
=======================

EngineManager
-------------

removed - RebuildLayerBatches(), you don't need this in your code anymore, the LayerManager now sorts this out for you. When you get build errors deleting this line in your code. Template updated accordingly.

TrackHelper
-----------
removed - Draw(), use EngineManager method TrackDisplayOn() instead [e.g. engineM.TrackDisplayOn(track, num points);]

added - SpeedForTime(), calculates the speed required to traverse the given track in the time quoted.

Thursday, 10 December 2009

Engine3.11 released

Expect more changes to come quickly to start with as bugs are found.

Major update affecting Layers (still need to sort out TileSheet001 - fix coming soon) + need to add layer alignment to help take advantage of new cool stuff and also the rotation origin needs some work as when scaling it has potentially undesirable effects. (As I'm typing an idea that might work came into my head - it'll might make it into the next release).

This version will be live by 9 AM 11th December 2009
Template will be updated accordingly and so will the dll and xml files on the student shared game programming resources folder

Bugs fixed in this release
==========================
Sprite001: relaxed HistorySampleRate it can be much higher now, see below:

EngineManager005: sorted out Engine Debug output so it only shows items requested (not bin and collision stuff always)


Changes in this release
=======================

EngineManager
-------------
added - scale, rotation and rotation centre information to layer debug output

removed - RebuildLayerBatches(), re-worked the LayerManager to automatically run this for you

adjusted - SpriteDebug.Track now displays track index as well as track name


TileSheet
------------
added - CreateMatrix, if set to true the TileSheet will create a rotation and scaling matrix for you based on RotationOrigin, ScaleFactor and RotationAngle

added - RotationAngle, lets you set the rotation angle of the Tilesheet

added - ScaleFactor, allows you to specify the scaling of the Tilesheet (extra tiles are dropped or drawn accordingly)

added - RotationOrigin, this will work in conjuction with the above

added - DisplayMatrix, this allows you to manually specify a matrix for scaling and rotation of the layer



Sprite
---------
adjusted - HistorySampleRate, was clamped at 0.02 (50 times a second) reduced the clamp to 0.0005 (2000 times a second) can't reach this as game won't run that first.


TrackManager
------------
added - TrackCurrent, allows you to get or set the current track being travelled, use with extreme caution. You should let the TrackManager deal with the tracks, but this may be useful for advanced track work beyond the engines ability.


VideoManager
------------
added - VideoManager(), creates a video manager with the video content specified

added - PlayVideoOnce(), plays a video previously associated with the videomanager once only

added - PlayVideoLoop(), plays a video previously associated with the videomanager forever

Stupid world size error in template (and hence your code)!

There is a calamitous error in the setup code (only just been spotted). This won't effect you until you try to use the collision system.

The lines to adjust are found in the Statup() subroutine found in GeneralLogic.cs

private void Startup()
{
//make sure tracks are defined before using them
CreateTracks();
//engine settings (can be changed)
engineM.ScreenColour = Color.Black;
engineM.WorldHeight = resolutionX;//<- should be resolutionY
engineM.WorldWidth = resolutionY; //<- should be resolutionX

Just make sure the WorldHeight is set to the Y res and the WorldWidth is set to the X res.

Sorry about this and thanks to:

Dan Cotton
Richard Brinkley

for originally spotting this problem.

Tuesday, 8 December 2009

Engine3.10 released

Expect more changes to come quickly to start with as bugs are found.
This version will be live by 1PM 08th December 2009
Template will be updated accordingly and so will the dll and xml files on the student shared game programming resources folder

Bugs fixed in this release
==========================
EngineManager004: re-worked sprite layer rendering code in Engine.


Changes in this release
=======================

Animation
---------
adjusted - OnAnimate(), now called before animation changes, this enables you to check what the last frame was before it is about to change

EngineManager
-------------
renamed - GetThisTypeAs() becomes GetThisType() as the name was stupid

TileSheet
---------
renamed - Displacement becomes DisplaceCurrentPosition as this better describes its function as it alters the scroll position of the layer
- Don't get confused with DrawOffset as this alters the draw position of the layer.

Monday, 7 December 2009

Engine3.09 released

Expect more changes to come quickly to start with as bugs are found.
This version will be live by 9AM 07th December 2009
Template will be updated accordingly and so will the dll and xml files on the student shared game programming resources folder

Changes in this release
=======================

Animation
---------
added - QuickDistance(), this allows you to setoff a single set of animation (based on an action), that will allow animation to carry on as it was before when it has finished.

added - QuickDistanceRestart(), this allows you to setoff a single set of animation (based on an action), that will restart the previous animation when it has finished.

added - LoopCount, keeps track of how many times animation has looped, works well in conjuction with OnAnimate()

added - OnAnimate(), this allows you to call a subroutine which will be called after every animation frame change occurs

some name refactoring to make more sense, if you have errors because of this just rename:

renamed - FrameFirst becomes FirstFrame
renamed - FrameLast becomes LastFrame
renamed - FrameActive becomes ActiveFrame

TextManager
------------
added - DrawAsSprites(), this allows you to specify static text for display. You don't need to keep drawing this from the gameloop (if you do you will generate loads of sprites)

added - SpriteGenerateTextAsFrames(), this create a sprite whose frames are each of the characters of the supplied text, this sprite can then be used for signage effects (especially when used with tracks or AnimateOnDistance) - I'll put an example of the help blog

TextStore
---------
fixed - 002: Sprite attributes are now correctly applied to sprite text or typewriter text.

---------
xml Comments completed for

TextManager
BaseSprite
Box
Bin
AnimatedTexture
Animation
ColourHelper

Friday, 4 December 2009

Engine3.08 released

Minor but important update
This version will be live by 9AM 04th December 2009
Template will be updated accordingly and so will the dll and xml files on the student shared game programming resources folder

Changes in this release
=======================

LayerManager
------------
added - RemoveAllLayers(), this removes all active layers from the manager. This is important so that unwanted layers are removed when switching between different gamestates.

Wednesday, 2 December 2009

Engine3.07 released

Expect more changes to come quickly to start with as bugs are found.
This version will be live by 9AM 02nd December 2009
Template will be updated accordingly and so will the dll and xml files on the student shared game programming resources folder

Changes in this release
=======================

EngineManager
-------------
fixed 003 - Rectangle debug information now sensible

EventManager
------------
fixed 001 - (hopefully) ReturnValueForFrame, adjusted so this won't ever return a divide by zero problem

fixed 002 - Viewport wrapping, for sprites in ViewPort co-ordinate mode now works!

FontBank
--------
adjustment- altered visibility of some objects so you should only see the fonts and the font texture.

FontSprite
----------
added - FontSprite(charset, height), simplified font definition so that you only specify character set and height of font during initial definition.

TextManager
-----------
fixed 001 - stopped crashing when attempting to draw unsupported characters, will skip illegals.

Thursday, 26 November 2009

Engine3.06 released

Expect more changes to come quickly to start with as bugs are found.
This version will be live by 9AM 27th November 2009
Template will be updated accordingly and so will the dll and xml files on the student shared game programming resources folder

Changes in this release
=======================

EngineManager
-------------
fixed - TrackDisplayOn(), integer arithmetic bug on history stepper

added - TrackDisplayOn(trackDefintion, number of points), this allows you to specify how many points are displayed on the track. Do no use excessive numbers as this will kill draw speed, use enough to see your track clearly. You can still use TrackDisplayOn(trackDefinition) for default number of points displayed.

Note: I will be depreciating TrackHelper.Draw() as this is a repeat of this code with complications.

Sprite
---------
altered - Update(), so it records the last position of the sprite once its started updating. The last position is only recorded when a sprite is updated.

fixed - last position, used to rely on history positions as all sprites generated at least 2 history positions. I forgot that I removed this feature so implemented a lst position.

SpriteHelper
------------
fixed - RotateFacingVelocity(), using fix for last position of sprite

fixed - RotateFacingDirectionMoving(), using same fix as above.

added - ScaleToThisSize(), calculates scale factors to change a sprite to fill a rectangle (you can calculate this yourself tho')

added - ScaleToThisWidth(), calculates X scale of sprite to match the width given, keeps aspect ratio the same so scales Y accordingly.

added - ScaleToThisHeight(), calculates Y scale of sprite to match height given, keeps aspect ratio the same so scales X accordingly

Tuesday, 24 November 2009

Engine3.05 released

Expect more changes to come quickly to start with as bugs are found.
This version will be live by 9AM 25th November 2009
Template will be updated accordingly and so will the dll and xml files on the student shared game programming resources folder

Changes in this release
=======================

Sprite
---------
fixed - Update(), stupid bug that stopped animation from updating if only 2 frames defined!!

improved - SpriteDebug.physical, added Gravity and Friction properties to go along with Mass

TileSheet
---------
fixed - Draw(), bug that tried to draw tilesheets with undefinded areas (no tiles present)

I am currently working on a substantial re-write to the tiling and rendering of tilesheets that will fix a lot of remaining issues with them.

Monday, 23 November 2009

Engine3.04 released

Expect more changes to come quickly to start with as bugs are found.
This version will be live by 9AM 23rd November 2009
Template will be updated accordingly and so will the dll and xml files on the student shared game programming resources folder

Changes in this release
=======================

EngineManager
-------------
added - resAndWorld to Debug settings, this shows the current resolution and the current world dimensions.

adjusted - physical implementations of layers to simplify internal structures.

GravityWell
-----------

adjusted - GravityWell() mass is now specified in GigaTonnes (billion kilograms) to reflect changes to point mass gravity simulation.

TextureProcessor
----------------

added - MassFromPixels(), counts the number of non transparent pixels in either the given sprites current frame or in the given texture and rectangular region given. This will only work for textures that were loaded through the TextureProcessor.

Wednesday, 18 November 2009

Engine3.03 released

Expect more changes to come quickly to start with as bugs are found.
This version will be live by 9AM 19th November 2009
Template will be updated accordingly and so will the dll and xml files on the student shared game programming resources folder

Changes in this release include:

EngineManager
=============
altered - altered the way sprite layers are managed and rendered, this now allow you 4 independant sprite layers as well as a HUD and SpriteText layer. Sprites by default are assigned to layer0 which is rendered first, but you can opt for layer1, layer2 or layer3 (being the last of the four sprite layers rendered)

This has a knock on effect for layer displacement, a mechanism that can shift all items beloning to a layer - perfect for shake effects
---
removed - DisplaceHUDLayer
removed - DisplaceSpriteLayer
removed - DisplaceSpriteTextLayer
removed - DisplaceTextLayer

added - SpriteLayerOffset(), specifies an amount to offset the position of all sprites or text on the layer specified

added - SpriteLayerDisplace(), specifies an amount to add on to the current offset position of the layer specified

added - SpriteLayerGetOffsetX(), gets the X value of the given layer offset

added - SpriteLayerGetOffsetY(), gets the Y value of the given layer offset

added - SpriteLayerGetOffset(), gets the offset for the given layer
--
added - TrackDisplayOn(), this does the same as the Draw() method of the TrackHelper, but only requires a track reference, so it looks neater

added - TrackDisplayOff(), this will remove a track that is currently being displayed. if the track isn't being displayed it does nothing.


Event
=====
renamed - SpecifyEventHandler() changes to OnTick()

added - Ticks, property that keeps track of number of timers an event has elapsed

added - TimeRemaining, property for debugging purposes that tells you how many seconds are remaining for those events that have a time limit

added - OnKilled(), lets you specify a subroutine to call if the EventManager kills your event. This will happend if you added it to the EventManager using either AddEventRaiseUntil() or AddEventRaiseOnce(). This is perfect for shake effects or for countdown events such as highscore entry, you would have a one second event to keep track of the time and have OnKilled run a subroutine when time say 30 seconds elapses, this can leave the high score entry screen.


EventManager
============
added - AddEventRaiseUntil(), this lets you specify a number of seconds that an event is to be active before being automatically removed, useful for shake effects after large explosions (for instance you may have a boss sprite on a separate layer to all other sprites and want this to shake for a couple of seconds when you have done a serious bit of damage)

Enum changes
============
renamed - SpriteDebugInfo changes to SpriteDebug

renamed - CollisionAction.alignMovingBounce changes to CollisionAction.movingBounce

completed - all enums are now fully xml commented, that's 1750 lines of code sorted phew !

Alignment
AnimationMethod
Bin.Type
CollisionAction
CollisionMethod
CollisionMultiHit
CollisionState
CollisionType
CoordinateSystem
DeathAction
Debug
Direction
DirectionAccuracy
EndOfTrackAction
EnergyBarDirection
Fade
FrameDirection
GravitySystem
LastFrameAction
LayerType
LimitAction
MenuSelectMode
MenuType
MovementMode
Shape
Side
SpriteDebug
SpriteType
TagAlign
TagDisplay
TrackStepMode

just another 19000 lines of code to go in 61 class files :(

Monday, 16 November 2009

Engine3.02 released

Still Loads of xml comments still to be written/re-written to reflect all changes. I have updated the template to reflect the recent changes. Expect more changes to come quickly to start with as bugs are found.

Changes in this release
================

TrackHelper
===========
added - full set of xml comments now added so all intellisense and Metadata will show the help I have written

renamed - changed a few of the method names to better reflect their function

added - Draw(), this enables you to see a track on screen, you need to create a simple sprite to show the track positions and store it in the Marker property of the trackDefinition

TrackManager
============
added - AddTrackStartAt() associates a track with a sprite and translates it to the given position. This may be particularly useful for bullet patterns.

xml intellisense now available for Engine3

I have worked out how to allow you access to the xml comments (which drive the intellisense help) embedded in the Engine3 library.

The intellisense will give you access to all the help and guidance information I have included within my code. I will also publish the xml comments as a website (this is how the Dynamic help system works in Visual Studio).

The comments need a little work, but I will post progress in updating them here.

Engine3.01 released

Loads of xml comments still to be written/re-written to reflect all changes

Changes in this release
================
I will always list the changes under the classes that have been affected (I will keep them in alphabetical order)

EngineManager
==========
added - if you show any engine debugging information the version of the engine you are using is displayed.

LayerManager
==========
renamed LayerAdd() to Add() - this will affect Adam and Joe

TextManager
=========
added - TextManager.DrawQuick(), this allows you to draw no frills text, horizontal with colour,scaling and alignment. This is very much faster than the standard text drawing routines (which do a lot of complex formatting and rotating).

developed - Done some speed ups of complex text rendering methods still lots of room for improvement. (edit)

TileSheet
=======
implemented - ScrollScale factor when moving layer with viewport position. This already happened automatically when scrolling was applied to a TileSheet.

investigate - Draw() draws too many tiles still, need to work out full calculation so we can keep tiles drawn to a minimum, this is a problem with non regular size layers

TrackManager
==========
developed - TravelWithSpeed works but needs some work as seems disproportionate with different tracks pixel lengths!

fixed - moving between tracks now works out where you will join a track rather than place the sprite at position 0 (or end position).

Friday, 13 November 2009

C# back end database engine started

I have made a start converting my old VB database engine over to C# to use with your websites. This will hopefully (you may need to do some complex things yourselves) enable you to concentrate on the logic and aesthetics code rather than some of the more serious complications.

I will let you have access to it as soon as I have done some more testing.

Engine3.00 and GameTemplate live

I have made available the first version of the new game engine.

This can be found in the game programming resources folder in student shared

Student shared\0Applied ICT\Game programming resources

There are 2 items in this folder of interest

The first is the GameTemplate folder. This entire folder should be copied into your home drive (or onto a USB stick - make sure you make backups of any work on USB sticks!!!!).

The current template is not complete (it needs audio files adding among other things), this will update over the next few days as I bed the template down.

The other file (which is included in the GameTemplate) is Engine3.dll. This file is the compiled version of the game engine. You will only need to access this when I make bug fixes to the engine. I will explain more about that when it happens.

Tuesday, 10 November 2009

Engine up and running on XBOX 360 !

I have managed to get my new engine library running on the XBOX360.

Done some tests at 1280x720 (720p resolution) throwing around layers and sprites while playing 720p video and it seems to run above 60fps. You could potentially use a video as a background during your game but I wouldn't then draw hundreds of sprites at the same time with collisions.

One performance problems to note is text rendering. The text renderer is quite complex and can do some very complex formatting. There is a massive speed hit on the XBOX360 when drawing even the debug text. I need to investigate the possibility of provided some quick render options for horizontal/rotated text with no complex alignment issues.

I need to do a little more testing (especially viewport scrolling and automatic layer scrolling) and then I should be ready to put together a sample project to get a view alpha testers breaking things.

Wednesday, 4 November 2009

{new engine benchmarks} Current game engine benchmarks

I have completed the 1st phase of the engine re-write and have calculated some benchmarks for those part of the system that are currently working. As soon as the collision engine is up and running I will be able to post the other benchmarks.

126
Testing of old game engine 16u7 compared to Engine3
Benchmarks with random scrolling layer (800x2000) 640 tiles 252 tiles shown Sprites at 1/3 size 72 pixels down to 21.6 pixels
History recorded
Old Engine
New Engine
best fps
best fps
210 bouncing sprites bin display
50
175
185
210 bouncing sprites no bin display/collisions
50
197
378
210 bouncing sprites with 50 history (10710 sprites)
50
19
30
210 bouncing sprites with 50 history (10710 sprites) no bin display/collisions
50
19
34
210 bouncing sprites bin display
default (10)
184
188
210 bouncing sprites no bin display/collisions
default (10)
196
386
210 bouncing sprites with default history (2310
drawn sprites) bin display
default (10)
67
94
210 bouncing sprites with default history (2310
drawn sprites) no bin display/collisions
default (10)
69
126
1400 wrapping sprites
default (10)
88
115
1400 wrapping sprites colliding no display
default (10)
30
36
8400 wrapping sprites
default (10)
15
19
4200 wrapping sprites colliding no display
default (10)
3*
4
8400 wrapping sprites colliding no display
default (10)
2*
2

*These numbers are dodgy as visual inspection would suggest that the old engine is only drawing a frame every couple of seconds. Also all the sprites are sat on top of each causing over 1, 500, 000 collision checks are performed for each frame.

You can't really expect every game object to interact with every other game object.

The data shows that in terms of drawing and updating speed the new engine is very fast compared to the old one, but text drawing (which happens a lot with bin displays) is still slow. I'll investigate this at a later date.

A few more tests and checks and I'll publish the game engine and a game start template.

Thursday, 17 September 2009

XNA Game Engine re-write in progress

Microsoft have recently released version 3.1 of the XNA framework.

 
This has introduced more networking and XBOX related materials (such as Avatars). One very interesting new feature is the ability to play and control WMV video.

 
I have played with this and it sort of works, so I will add the ability to the game engine.

 
I am re-writing the game engine from scratch and it should be available after half term.

 
I'll keep posting updates in terms of progress here.

 
Your setup at home needs to be:
  1. Visual Studio 2008 professional
  2. XNA Game studio 3.1 (which you can get from here)

 Warning if you have game studio 3.0 already installed you must uninstall that before installing 3.1

Tuesday, 14 July 2009

CPU Emulator v0.12

version 0.12 fixes/improvements 13th July 2009
==================================
[new] - Added an adjustable CPU clock to govern the Control Unit. This is adjustable down to 20ms pulses. It can be turned on or off. (it doesn't work at that speed due to Windows re-drawing objects).

[fix] - LDA, LDX, LDY fixed assignment of N and Z bits

clarification - BGT Branches if value compared was greater than register
clarification - BLT Branches if value compared was smaller than register
[new] - BGE Branches if value compared was greater than or equal to regiser
[new] - BLE Branches if value compared was smaller than or equal to register

[fix] - sorted out symbol table entries, they are now associated with a code page so duplicate symbols can exist across different code pages.

[fix] - Ram is unloaded when a code page is unloaded

[new] - added RAM ownership display in the RAM window (looks naff - preliminary)

Friday, 10 July 2009

CPU Emulator bug list

Fixes to known bugs/issues
version 0.12 fixes 10th July 2009
==================================
3) RAM and Dissambler window don't show horizontal scrollbar when content to wide - fixed
5) Symbols are not unloaded when a code page is unloaded, have to quit program - fixed (I think), although I haven't fixed point 7 (although I am close to doing this now with the symbol table changes)
6) Multiple code pages cannot have indentical labels (duplicate label errors) - fixed, re-factored symbol table code to associate code pages. Same symbols allowed to exist in different code pages.
7) Code is not unloaded when a code page is unloaded - this now happens all memory addresses allocated are released appropriately on unload.
version 0.11 fixes 10th July 2009
==================================
1) STO X(value) writing to address $0 - fixed
I hadn't implemented Indexed addressing for Write operations!!
2) LDA X - being recognised as NOP - fixed
I was not picking up the register when register addressing mode was used
outstanding bugs/known issues
======================
1) STO X(value) writing to address $0
2) LDA X being recognised as NOP
3) RAM and Dissambler window don't show horizontal scrollbar when content to wide
4) Instruction window just shows instructions and not supported addressing modes
5) Symbols are not unloaded when a code page is unloaded, have to quit program
6) Multiple code pages cannot have identical labels (duplicate label errors)
7) Code is not unloaded when a code page is unloaded
8) Need to re-visit device interface implementation and remove bodges
9) Not rendering negative values in dissambly window properly
please post bug reports by placing a comment on this buglist, check the known bugs/issues first so I can avoid multiple bug reports:
try to describe the fault, what instruction was involved, what the visible outcome was (whether it was a crash or mistake in decoding etc...)

Thursday, 9 July 2009

CPU Emulator v0.1

>The first working version of the Emulator is now in a "working" state, I'm numbering this v0.1 because it isn't really finished.

It is available in the Student shared folder

\students\0AS COMPUTING\

Run the CPU Emulator inside the CPU Emulator folder.

At the moment you only have access to the Emulator exectuable (the finished program) I have produced but next year we will have VS2008 installed and you will have access to the source code written in C#. This project will grow over next year and we will use it to help illustrate many aspects of the 2nd year theory.

Eric

Tuesday, 7 July 2009

CPU Emulator almost done

Hopefully we will be able to use the CPU emulator I have been writting over the last couple of weeks.

It's taken me ages because:

  1. I don't have much time to get on with coding at the moment
  2. I am trying to make it so it can be expanded and externded
  3. I am hoping to use it to demonstrate other things like Scheduling and multi-tasking programs. This will hopefully work by just writing and assembly langugage program for the emulator to do the scheduling!

It is in a far from finished state, and there are a lot of weird things that may happen. You lot will be the official Alpha testers for the system so please leave any comments on the post.

Cheers

Eric

Tuesday, 9 June 2009

Game engine version 016u7 update

Added the following functions for PC only systems which might be quite useful so didn't do a full intermediate update.
---------------------------
FileManager
----------------------------
OpenFilePCImmediate - added, Opens a PC based xml file from any location.

SaveFilePCImmediate - added, Saves a PC based xml file to any location.

Game Engine version 016u7

----------------------------
Sprite
----------------------------
ReleaseQuickAnimation - added, allow you to remove a quick animation before it has finished going back to previous state

Did some optimising of the sprite Update code(won't have much effect on PC side but hopefully does on 360 side). The whole engine is in need of a total re-write to make use of static allocation, but that won't happen until I build the next version over Summer.
----------------------------
PadHelper - new class added
----------------------------
This allows more flexible support for pad button handling.It automatically keeps track of pad state, so you can track accuratelythe status of all buttons on the gamepad. You can still use you're existing code for gamepad handling and timers but if you need easy access to the following functions, you can with just 2 simplemodifications to you're input code.

Status - added, this updates the gamepad status (tracking the history) mimics the GamePad.GetState method currently used.

Pressed - added, this method checks to see if a button not previously pressed has just been pressed. Using this will stop buttons repeating without the use of a timer, as it will only be true if the button was released before being pressed.

Released - added, this method checks to see if a button previously held has just been released. Using this will let you react to a button being let go for instance charging an energy bar (or the jump angle in track & field).

Held - added, this method checks to see if a button held previously is still being held.

----------------------------
KeyHelper - new class added
----------------------------
This allows more flexible support for keyboard handling.It automatically keeps track of keyboard state, so you can track accuratelythe status of all keys in the keyboard. You can still use you're existing code for keyboard handling and timers but if you need easy access to the following functions you can with just 2 simplemodifications to you're input code.

Status - added, this updates the keyboard status (tracking the history) mimics the Keyboard.GetState method currently used.

Pressed - added, this method checks to see if a key not previously pressed has just been pressed. Using this will stop keys repeating without the use of a timer, as it will only be true if the key was released before being pressed.

Released - added, this method checks to see if a key previously held has just been released. Using this will let you react to a key being let go for instance charging an energy bar (or the jump angle in track & field).

Held - added, this method checks to see if a key held previously is still being held.

----------------------------
TrackManager
----------------------------
SpecifyEndTrackHandler - added, this allows you to call an update routine when a sprite reaches the end of a track, so you can take some action

RemoveEndTrackHandler - added, this removes any end of track handler

----------------------------
Menu
----------------------------
reference to EngineManager -added, this enables Show and Hide to work without going through the MenuManager (gameMenus)

Show(), Hide() - added, this can be directly used with a menu object

e.g. optionsMenu.Show();

----------------------------
MenuManager
----------------------------
AddMenu - altered, to pass a reference to the EngineManager to each menu. The MenuManager is now just responsible for updating all the menus, everything else is now the responsiblity of the menus directly.

Monday, 8 June 2009

XNA Game Engine version 016u6

I have probably missed some other fixes and additions here (did a lot of messing)

----------------------------
Sprite
----------------------------
Pause() - added, this causes the update for a sprite to be suspended, this can be used during loss of life to stop certain sprites attacking/moving etc...

Resume() - added, this causes a sprite to continue updating.

There will be timer related problems due to pausing, these are the same issues that normal timers currently suffer from when paused and then resumed. I will come up with a solution to this at some point but it is not a major problem.

For examples of pausing sprite types look at the Space invaders code when a life is lost.

Collisions:PauseAllInvaders()
GamePlay:StopInvaders()
TimerEvents:ResumeWalk()

----------------------------
EngineManager
----------------------------

SpriteFrameSingleWhitePixel() - added, adds a frame to a given sprite containing a single white pixel, this can be coloured or enlarged.

SpriteFrameSingleTransparentPixel() - added, adds a frame to a given sprite containing a single transparent pixel, used for dummy sprites mainly for applying textattributes for sprite text.

----------------------------
Limit
----------------------------
wrapExact - added, this new wrap method wraps a sprite exactly the width or height of a limit box, the wrap method aligns sprites this is no good for scrolling text displays, use this method for that. You may need to ensure that regions are wider and taller then the view area to stop pop in happening.