XNA 0.5 - taken from dteviot's post
  • 2x2 Units.
  • Civilians on battlescape terror missions. (Also when aliens attack an X-Corp outpost?)
  • Better (or more fun) AI logic for alien forces on battlescape.
  • Experience for X-Corp soldiers
  • Reactions
  • Bleeding out of wounded soldiers.
  • Medkit healing
  • Recovery of stun damage
  • Explosions
  • Grenades
  • Rest of actions that items are capable of.
  • Waypoint (for BB launcher)
  • Fire on battlescape
  • Smoke on battlescape
  • Ability for combatants to drop and pick up items on battlescape.
  • Draw dropped items on the battlescape.
  • Proximity mines
  • Night missions.
  • Rules engine: determine visibility
  • Graphics engine: how to render?
  • Cydona mission
  • Allow X-Corp player to select troops that will defend an X-Corp outpost from alien attack.
  • Generating battlescape terrain (esp. for different types of missions.)
  • Destructible terrain
  • Improved line-of-sight calculations, to allow for posture, combatant height, and terrain obstacles in way?
  • Re-equip soldiers after battlescape mission/before starting new mission. Note logic is already there in CombatantInventory.RestoreLoadout() and SnapshotLoadout(), just need to hook up and deal with case of insufficient supplies in outpost.
  • Aesthetically pleasing UI.
  • Aesthetically pleasing rendering of battlescape terrain
  • Related (maybe) only render part of scene that's in viewing fustrum
  • Animate the combatants on the battlescape.
  • Draw items in hands of combatants on battlescape.
  • Fog of war: No information to player on terrain that hasn't been seen yet
  • Sound
  • Minimap

  • Stuff that needs to be done now:
  • Document design, as it exists (This is an ongoing task)
  • Document items/inventory
  • Inspect Tasks, make sure SelectFirstLandingSite() is being used correctly. Esp. for ResearchMissions
  • SellScreen, consolidate Engineer and Scientist entries?
  • looks like ItemLine won't correctly handle a partially loaded magazine. Need to fix.
  • Handle combatant being told to move 0 distance
  • Properly test Terrian.IsLineOfSight
  • Add Fonts to StartSettings.xml, so people can try different fonts.
  • UnitTest for Shoot action
  • Cleanup ClipItemInfo and CraftWeaponItemInfo now that DamageInfo has been added to ItemInfo class
  • Weapons need to do random amounts of damage
  • Bugfix: should not be able to view inventory for terrorist units
  • Battlescape: Equip Soldier screen, needs to show soldier's name or alien species and rank.
  • Pathfinder, should check for impossible to reach conditions before doing search. e.g. Target flying, in inaccessble terrain.
  • Add button to battlescape to have X-Corp forces run automatically
  • Test Mission.OnFinishCore() in each derived class works correctly for each battlescape ending
  • Test Mission.OnFinishCore() in each derived class ADDs to salvage


  • Bugs that need immediate attention:

    Items that I really need to do soon:
  • Make Mission.Salvage able to hold unique items, as well as non-unique ones.
  • Aliens need to reload weapons if they run low
  • item.xml, to each action, add attribute, isAttack. Action is some sort of attack
  • item.xml, to each action, add attribute, needsResearch, meaning X-Corp must research item before action can be used.
  • Add turn cost when calculate shortest path
  • Battlescape: implement save/load game from battlescape. (Or maybe not)
  • unconcious combatants don't block line of fire or movement
  • Battlescape: Implement Hit action so X-Corp soldiers can use stun rods.
  • Draw items dropped by combatants on terrain
  • At end of battlescape mission, if X-Corp wins, salvage items that have been dropped on the terrain
  • Battlescape: EquipSoldierScreen, implement "Mind Probe" mode, where can see details of alien, but can't change anything.
  • Battlescape: Restrict available actions for items that haven't been researched
  • EquipSoldierScreen (on battlescape) doesn't allow for TUs needed to move equipment
  • implement ActionInfo types beyond ShootActionInfo
  • Indicate on Battlescape which combatant is currently the subject of the player's orders
  • Investigate Unit Test performance, a the project and research manager tests take a surprisingly long time to run.
  • Add damage stats for laser (and other ammoless) weapons to xnet
  • Cheat codes, show all terrain. Only relevant when implement Fog of War
  • EarthGlobe, needs to implement IDisposable and clean up properly. At least needs to dispose of the index and vertex buffers
  • Battlescape: don't show the "cube" cursor when user can't issue orders
  • Add ability to battlescape to check in if a cell is in the viewing fustrum, and if not, move the camera so it is.
  • When change "selected combatant" in battlescape, make sure is in fustrum.
  • Battlescape: clamp the maximum distance above/below a level the camera can be.
  • Battlescape: debateable: lock the camera's pitch angle. (Means can guarantee max number of cells in viewing fustrum.)
  • Replace Debug.WriteLine() with Debug.TraceIf() for Craft State and Screen State transitions, so can toggle reporting.
  • Check for end of game conditions at end of month. Also add cheat flag, X-Corp can't loose, for testing
  • As StartScreen.OnRunTestsClicked() now set game to start condition before running any tests, may not need to do this before each test
  • GeoPosition.cs should move to Geography subdirectory
  • .xml and .xsd Files in Xenocide\Content\Schema should be moved to Xenocide\Content\DataFiles
  • UnitTest destruction of an X-Corp outpost
  • Include monthly rental/salaries for craft/personel in transit at start of month
  • Use new Frame.AddStaticText() to simplify/standardize existing screen's and dialog's CreateCeguiWidgets()
  • Update Ufo.ResearchMissionTest(), to use GeoPosition.Equals() and the Task Unit tests
  • Every 30 minutes, check if Outpost radars are working. Also add score for UFOs and Aircraft on Geoscape
  • Do we need Source\Xnet\ItemInformation? Isn't the stuff in Source\Model\StaticData\XNet sufficient?
  • Put up a message box when a facility finishes construction
  • Let Escape key exit process for adding facility to a base. Or put a "cancel adding facility" button on screen
  • Create HumanBaseStatistics structure, update it when facility is completed/destroyed
  • HumanBase pumps Floorplan's update()
  • update() loop, should not update in step sizes smaller than 5 seconds.
  • update() loop, handle case when can't sustain time compression rate, because update() calcs take longer than real time.
  • fix remaining FxCop warnings
  • Hunter needs to be told when UFO escapes
  • Correct Abort mission handling - check e-mail for other ToDo:
  • Put the Geoscene in own window (so don't need hacked Taharez image with transparent background)
  • Properly understand resource allocation LoadGraphicsContent/UnloadGraphicsContent. Question, should I use Game.GetService() to get DisplayDevice, rather than keep a handle to it? To deal with loss of device?
  • Don't inject mouse when cursor is outside window
  • Add Copyright notice to all files
  • Align latitude 0 with Y-Z plane. And equator in X-Z plane
  • rearm, repair and reload craft when in base. (Not a lot of point, until craft can fight.)
  • Move all strings to resource file
  • Put opaque background on dialogs, so that when two dialogs are on screen, they're readable


  • Things that I don't want to forget about, but are not urgent:
  • Reload soldiers and X-Caps when craft carrying them returns and leaves its outpost. Need to do both times, in case wasn't able to reload when returns.
  • Connect up volume controls and random shuffle music play in FMOD
  • Maybe add priority to dialogs (so can be queued in priority order) Not sure if this is still needed.
  • Figure out standard way to parse our xml files
  • Figure out standard way to serialize/deserialize (load and save game)
  • Dialog Box (and Message Box)
  • Implement UFO "build base", "Supply Base", Terror and Retailation missions
  • InvasionTasks with multiple UFOs
  • Save Geoscreen's state when switch to other screens (mostly camera position)
  • Countries - logic, keep scores, show stats, location (so UFOs don't target empty ocean)
  • Swap screens in response to Update() activity (aeroscape)
  • Reduce number of singletons. (Migrate to static members of Xenocide class, perhaps?)
  • Radar visibility
  • Maybe change Geoposition to struct (make it a value type)?
  • When technology manager has been built, implement XNetScreen.EntryAvailableToPlayer(XNetEntry e)
  • Add Cheat mode that makes all technologies available
  • Add Edit box to BaseInformation screen, to allow changing the base's name
  • Planet class does not need to save the GeoBitmaps during game save. They can be loaded afterwards
  • Tuple class, pack index and count into single ushort


  • Items that anyone could do:
  • remove colon ":" and hyphen "-" from enumerations in basic.xsd. Note, underscore "_" is OK Then propogate change to other XML files. Don't miss the file used to autogenerate xnet.xml
  • PolarScreen.OnMouseMoveInScene(), update so cursor maintains position as right drag occurs. Should be basic exercise in trig. Compute angle that cursor moves through (relative to earth) which is function of camera distance AND mouse position. Then apply to camera's position.
  • BaseInfoScreen. Add an edit field to display base's name and allow player to change the name
  • Add version stamp (updated automatically by subversion from checkout) to save game files. Give warning if try loading a save game from a different version.
  • Put together Xenolook theme. There are several parts to this
  • Change "time ratio" control in Geoscape to slider
  • Find out why some characters are getting clipped in CeGui#
  • Keypress autorepeat
  • Fix warnings in CeGui# (at least the missing XML comments ones)
  • Rtf2Xml needs to do some cleaning up. The RTF uses open and close quotes, and a apostrophe that are not in the ASCII character sets. This means that CeGui# can't render them. So Rtf2Xml should change replace them with the ASCII equivelents
  • CeGui# static text doesn't provide a vertical scrollbar. So the entry text in X-Net is done using a list box Someone could either bring CeGui# up to spec, or replace the list box with static text and a scrollbar. If the second option, the line breaking logic could be improved as well.
  • CeGui# font, the between charater spacing appears uneven. That is, the spacing between chars is different. I suspect this is due to Graphics.MeasureString() not giving correct character widths. See this for a font class that does appear to work. (It explictly looks for padding in each glyph and removes it.)
  • Injecting MouseWheel into CeGui#, scrolls the list boxes way to far.
  • There's a person working on getting a XNA Content Pipeling that allows directly importing Blender files. Assist him.
  • CeGui# InputInjector. Update to handle more keys. Maybe replace switch for non letter keys with a dictionary lookup?.
  • Figure out why laser rifle model isn't scaled correctly in X-Net. Perhaps something to do with origin?
  • I really like the idea of having city lights on the world's dark side. I've even got an idea how it could be done efficiently. Basic idea, we use a blending shader where we use the sun's angle to determine the relative weights we assign to the "Geoscape" and "City Glow" textures.
  • Investigate why Xenocide crashes when loose the graphics device. (e.g. Lock the display). Probably because we don't get the new device on LoadGraphicsContent() call.


  • Possible enhancements:
  • Course calcuation, only needs to run at start of setting state, after that, azimuth is fixed.
  • Intercept calculation, only needs to be done when prey changes course.
  • At momenet, don't optimise calcs, until find we need to.
  • The exsting state machines for UFO and Aircraft behaviour are overkill. For example, only need one "mission" type for aircraft, with 4 states. And a limited set of events. However, they work, and if we want to make them smarter later, the extra code may be needed.
  • Performance improvement, keep list of unfinished facilites in the Floorplan, sort in order of increasing build time left. Then track time increments and only update facilities when have enough accumulated to do first facility.
  • Figure out way to get FacilityHandle to have a FacilityInfo as a member. (Currently it uses an index into the FacilityTable, to avoid deserialization issues.) Specifically, all FacilityInfos live in the Facility Table. However, if I put a FacilityInfo into the FacilityHandle, when it deserializes a FacilityHandle a new FacilityInfo is created. (Not in the FacilityTable.) Hmm. Possible fix, get the name of the new FacilityInfo, and replace it with reference to one in the FacilityTable?)
  • If we don't get falgard working, in X-Net, do word wrapping using the widths of the actual characters. (Currently, it limits lines to max 52 chars, and in some cases, we can do better.)
  • Have low and hi res textures of Geoscape. Swap in the high res textures when zoom in close on Geoscape
  • Optimization for UFO visibility, use a Broadphase collision detection, sorting UFOs, aircraft and outposts on latitude. For Outpost Radars, could have a bitmap marking radar range, then UFO is straight lookup.


  • Things to contemplate:
  • Give UFO and AlienSite a common interface, say IXcorpTarget, for targeting them in Geoscape
  • When an aircraft is in an outpost, we probably don't need to update it every minute. Every 30 minutes should be sufficient. (Only do this if performance is an issue.)
  • Rename Item class to ItemInfo, and ItemHandle class to Item
  • Change enums in .xml/.xsd so can use enum.Parse()
  • in X-Net, we use a bounding sphere to scale and center 3D model. It may be possible to get better centering by using an AABB