This Trac instance is not used for development anymore!

We migrated our development workflow to git and Gitea.
To test the future redirection, replace trac by ariadne in the page URL.

Custom Query (5409 matches)

Filters
 
Or
 
  
 
Columns

Show under each result:


Results (1 - 1000 of 5409)

1 2 3 4 5 6
Ticket Resolution Summary Owner Reporter
#1 fixed Player Properties historic_bruno Stuart Walpole
Description
  • Ideally JS variables should be attachable to the Player object (via localPlayer?) to declare and set any properties affiliated with the current player. (eg player.resource.food; modder could alter it to add/remove any resources he wishes.)
  • Civilisation: Celt, Greek, etc ... Chosen from session config. (--> Currently there is a concept of civ, but it's not choosable in the GUI.)
  • Colour: Player colour, chosen from session config.
  • Team: In session config, players can choose to be on the same team (allied at start).
  • Various team settings, such as allowing teams to have "shared control" and being able to command each other's units.
  • Alliance: Diplomatic settings (who's an ally, who's an enemy).
  • array of players matching slot numbers, 1: enemy, 2: ally (Not choosable from GUI yet though.)
  • Phase: The starting "age" for the player (defaults to village). If otherwise, the player begins with the phase upgrade already researched.
  • Resource: Quantities of each of the resources gathered by the player.
    • Currently resources are tracked by the GUI; every player should have their own set of resources and the entity scripts and GUI should be updated to work with this.
  • Start Location: Position on the map where the player will begin.
    • Camera should also start centered on this location.
#2 fixed Gameplay - Unit AI Stuart Walpole
Description
  • When a unit depletes a resource object, he should seek out another one to gather from if nearby.
  • Stances
    • GUI: List stance options in GUI and allow user to select the stance for current unit.
  • Units react to opponents in LOS, depending on stance (move to attack, hold ground and attack, don't attack except to retaliate). Changed to "ready" animation instead of idle.
  • Units react to opponents in attack range, depending on stance (move to attack, hold ground and attack, don't attack except to retaliate).
  • Equally, depending on stance's freedom of movement, capable idle units will repair or heal nearby damaged units and buildings when not otherwise engaged.
  • When an entity places the foundation for a structure, he'll move over to it and aid in constructing it.
#3 fixed [PATCH] Implement Technologies Jonathan Waller Stuart Walpole
Description

Most of the code for technologies is now done.

The modifications that technologies make still need coding. See ResourceGatherer.js for an example.

Tech pairs where only one out of two techs can be researched need implementing. An idea is to have a tech pair json file which defines the pair and have the building have that in it's template file for what is available for research. The tech pairs can then supersede each other.

#4 fixed Make simulation speed configurable Stuart Walpole
Description
  • When releasing screenshots, the scenario designers would like to be able to slow down the speed of the game so they can set up a shot in "slow-mo" and have a better chance of taking an impressive-looking screenshot.
  • We got around this by altering the movement speed of entities, but this was a bit of a hack since it didn't affect other actions, and units move at a crawl for any other development until changed back. So, would it be possible to alter the simulation rate while the game is running?
  • Probably best to handle it as an exposed JS function with a parameter to set the game speed modifier. Then could link this to two hotkeys (and maybe also onscreen buttons with speed display) to increase/reduce the simulation speed a step at a time.
  • One hotkey increases the rate of simulation by one step (slows it down, eg for easier taking of screenshots). Another hotkey decreases the rate of simulation by one step (speeds it up, eg for feature testing).
  • Feature should not be available to clients, only the host (so that all players match to one speed).
#5 fixed Gameplay - Pathfinding Stuart Walpole
Description
  • Improve to handle tree traversal and dynamic terrain.
#6 fixed Random Map Scripting historic_bruno Stuart Walpole
Description
  • Integrate rmgen with engine, so random map based on session config can be generated on the fly.
  • Accept parameters so that random maps can be generated based on host's settings (eg number of players, their civilisations, desired number of territories, if any, size of starting force (eg prebuilt base or "Nomad", number of starting units), etc).
  • Fundamental commands:
  • Set terrain textures
  • Define elevation
  • Area definition (for territories)
  • Objects in territories (resources, settlements)
  • Water height (This is just height 0 in RMS, but maybe we can make it customizable)
#7 fixed Diplomacy leper Stuart Walpole
Description
  • Support for sending chat messages to players (all, specific, alliance groups). #1583
  • Taunts (including GUI)
  • Making/breaking alliances
  • Sending tribute
  • Tributing units/territories
#8 fixed Simulation - Time Elapsed Stuart Walpole
Description
  • hh:mm:ss clock variable from engine showing time elapsed since the session started (perhaps best handled as an event, so it's updated in real-time?). I'd suggest a separate variable for each component (eg elapsedHours, elapsedMinutes, elapsedSeconds).
  • This can then be used to control various time-based occurrences in the game ... Such as moving to the next season or stage in the day/night cycle by comparing it to a duration set in session creation.
  • Or maybe implement it using a ProgressTimer? set to update each game second? (Would still have to calculate the difference on the fly.)
#9 fixed [PATCH] Simulation - Game Record/Replay Stuart Walpole
Description
  • Initial settings and all input is recorded.
  • These same inputs can be fed back into the game at a later date so that the player can view it as a replay.
  • User cannot affect what happens, but can view it (alter playback speed, look at play from any players' POV, etc).
  • Needs a JS Interface. Should probably start and stop recording synchronized with CGame somehow. Needs a file format (pipe network packets to a file). Needs an entry point for replay (could do something wicked with CMessagePipe and the polling framework already in place for sockets, perhaps). http://www.wildfiregames.com/forum/index.php?showtopic=1665
  • Also would need a Game Replay user interface to handle special features (selecting control of a different player, adjusting the rate of playback, rewind, etc) as well as select a replay to load (variation of Load Game screen).

Related tickets: #3168 Lets observer change perspective #3253 Save playernames to commands.txt #3255 Update directory structure to prevent overwrites #3258 Main menu entry to start replays #3261 Session panel (pause / fast forward / rewind) #3309 Fast forwarding replays doesn't work as expected #3387 Access summary screen from replays

#10 invalid Simulation - Frame Dump Stuart Walpole
Description

Debug features requested by QA dept:

  • Record to video
  • Record to image every x seconds
  • Server-side component that retrieves emailed bug reports and posts them to the bug tracker.
#11 wontfix User Profiles Stuart Walpole
Description
  • JS Functions to create, delete, and set current profile. (Profile = Name of player, and storage container folder for his saved games, hotkeys, list of completed scenarios, etc.)
  • Values loaded from system.cfg and mod.cfg and modified can be saved by function call (eg when closing options menu) to the current profile's user.cfg.
  • Profiles also contain user's saved games (both multiplayer and singleplayer) and recorded games.
#12 fixed Orientation properties / entity alignment Stuart Walpole
Description
  • Units can have a height offset relative to the terrain (eg flying units, or ones the scenario designer has decided to make float in the air, for some reason)
#13 fixed [PATCH] Formations Badmadblacksad Stuart Walpole
Description
#14 fixed Entity Death Stuart Walpole
Description
  • Remove the "decay animation". Instead, the last frame of the death animation is sustained while the corpse is lying about and while it is decaying.
  • If an entity leaves a corpse, it should still decay (ie be removed from the map with a bit of eye candy) at some point to remove the entity for performance reasons (whether after a timer has elapsed, or based on some signal from the graphics engine).
  • Decay: If an entity doesn't leave a corpse (eg buildings decay immediately after being destroyed) or after its corpse state has elapsed, the default will be for it to sink vertically into the terrain, ideally with also a simple fade effect, until out of sight (basically the reverse of construction). Then it'll be removed from the game.
#15 fixed Resources Stuart Walpole
Description
  • An upper limit on how much population limit can be increased, set at Session Creation (add to GUI), default 200.
  • Ensure resource and population requirements are taken into account in determing prerequisites for entity creation.
#17 fixed Bug - Delay Before Performing Entity Action Stuart Walpole
Description
  • Units currently delay for a few seconds between reaching a target and switching to performing this action. This delay period should be reduced.
#18 fixed [PATCH] Realistic ranged attack Jonathan Waller Stuart Walpole
Description
  • Ranged attack projectiles should not guaranteed to hit target
  • Splash damage should be implemented when the projectile hits something (target, ground, or otherwise)
#19 fixed Complete Production Interface Stuart Walpole
Description
  • GUI: Progress bar over unit currently being created. Numbers next to units in queue.
  • Sound: Units make a "unit ready" sound when creation is complete.
#20 fixed Entity Event - Train - Rally Point andrew Stuart Walpole
Description
  • Training building has a "Rally Point" property. (When the building is selected, a banner actor shows the position of its rally point.)
  • Rally Point position can be set by right-clicking a terrain location with the building selected (or pressing a Rally Point UI button to get the rally cursor, then doing the same).
  • Spawned units move to rally point after appearing adjacent to the building.
  • Training building has a "Spawn Point" property. (The X/Z origin on the edge of the building where the entity first emerges (eg at the actor position of a door) after being created; he then walks from there to the rally point.) [Assuming it isn't satisfactory to just have units randomly appear at any side of the building. Varies from RTS to RTS.]
#21 fixed [PATCH] Building construction Stuart Walpole
Description
  • Building rises out of ground as construction proceeds (#1174)
  • Scaffolding not necessary but maybe as a bonus if time allows? (#1581)
#22 invalid Entity Event - Construction - Sites Stuart Walpole
Description
  • Some buildings can only be placed on other entities of the same size (eg Civ Centres on Settlements). Doing so replaces the base entity, but it reappears if the building is destroyed. Replacement entities can be rotated using the grid cursor as normal, though it has to align to the edges of the base entity. (Foundation cursor snaps to fit the plot's rotation.)
  • Some buildings spawn sites adjacent to the main building when their construction is complete. (Notably, the Farmstead has four vacant lots, two horizontal, two vertical, surrounding it, and this is the only location where Fields and Corrals can be placed.)
#23 fixed [PATCH] Buy/Sell Resources Stuart Walpole
Description
  • Resources can be traded for other resources at the Market from the Barter tab.
  • (This is mostly an interface task, since it largely involves pressing buttons to juggle the player's resource values, without need for special events.)
  • XML.Entity.Actions.Barter
#24 fixed Bug - Entity Order Lockup Stuart Walpole
Description
  • Sometimes selecting a target for an entity (eg telling a unit to gather from a tree) causes the game to freeze as a vast amount of memory is allocated to the game, and the only way out is to close the application from the task manager. Not easily replicable.
  • (Uncertain whether this is coming from the pathfinder failing to plot a course to the tree, or the order being given to the entity.)
#25 duplicate Entity Event - Escort/Guard Stuart Walpole
Description
  • The escort cursor should appear over the target friendly unit when the player is able to command the selected unit to follow him.
  • XML.Entity.Actions.Escort
#26 fixed Interactive garrisoned unit prop points Stuart Walpole
Description
  • Visible Garrisoning (see link above) liable to be most challenging aspect of garrisoning. Some of the garrisoned entities are propped to sockets on the parent actor, and while not directly controllable, can interact with the environment (eg archers at windows or on decks of ships fire at nearby units, including units propped on other ships).
#27 fixed Entity Events - Garrison/Inventory Stuart Walpole
Description
  • Maintain a "selection" of entities stored in an entity. (These do not appear in the game unless occupying prop points ... See Entity Events - Garrison - Propping.)
  • Garrisoned entities can be removed (either immediately adjacent to parent, or ungarrisoned to a target using something similar to a Rally Point) and listed (each for GUI ungarrisoning/viewing).
  • Actor player-coloured pennant prop appears over entity when units are garrisoned in it. (This will need X/Z location properties so artists can put it somewhere which looks vaguely appropriate from unit to unit.)
  • The same principle of entities-owned-by-other-entities could also be used to imitate an entity's inventory (possessions), with objects being carried by an entity and appearing (and being droppable from) the entity's garrison UI.
  • This is largely for TLA's sake (which has more RPG elements; eg they might want a unit to be able to pick up a sword, have it appear in the entity's hand socket, and increase his attack damage while he is carrying it -- this would also include having an "equipment slot" so he can only equip one melee weapon).
  • However, we should keep this feature set in mind for "relics" (whether we do them in Part I or Part II), since they follow similar principles of picking up (see the Pick Up event) and carrying an item (bestowing a tech effect) and dropping (ungarrisoning) it in the world.
  • (Priests and Heroes can pick up a relic and give it to a Temple's inventory, which then unlocks the relic's tech effect.)
#30 fixed [PATCH] Trade fcxSanya Stuart Walpole
Description
#31 fixed Entity Event - Heal Jason Stuart Walpole
Description

Priests and temples heal injured organic units in a radius around them.

#32 fixed Entity Event - Repair Stuart Walpole
Description
#33 duplicate Entity Event - Lock & Unlock Stuart Walpole
Description
  • XML.Entity.Actions.Lock
  • Used only by the Wall Gate entity. Normally the gate will automatically open to let friendly units through, and otherwise close. Toggling the gate to Locked via a GUI button makes the gate stay closed even when friendlies are nearby.
#34 fixed Entity Event - Graze Stuart Walpole
Description
#35 fixed Entity Event - Town Bell Stuart Walpole
Description
  • Pressing this UI button of the Civ Centre puts the units in its province (or surrounding area, if playing a game mode where the map isn't split into provinces) into "red alert": units automatically garrison in nearby buildings, with priority on gatherers that cannot defend themselves (female citizens), and military units going for buildings that allow them to attack from the battlements (like towers).
#36 invalid Entity Event - Transform Stuart Walpole
Description
  • Converts an entity into another entity. Notably, some siege weapons can be transformed from their mobile defenseless form (packed) into their immobile attack form (unpacked). There is usually a transitory animation between the entity replacement.
  • (Note that temporary properties will need to be transferred from one version of the entity to the other ... eg if the unit was damaged, it shouldn't be restored to full health by transforming.) -> Should happen already because these are not in the entity template.
#37 fixed Entity Event - Charge Stuart Walpole
Description
  • Trample Aura (component of Charging). Used in particular by cavalry to mow down infantry.
#38 wontfix PMDExp Stuart Walpole
Description
  • (updates to 3ds plugins -- requires knowledge of MaxScript through the Max SDK)
  • "Max tools would be nice to have early on (simple bones and use of the skin modifier), but not extremely necessary"
  • "I would just avoid holding off on doing things like catapults, swaying trees, grass, animals for a while (which isn't super critical stuff)"
  • Support for non-biped animatable objects (siege, ships) vertex skinning and attachment (using skin and simple bones - vs. physique and biped)
  • Export simple 3dmax bones and bone animations (for quadrupeds, fish, birds, deer, sheep, elephants - anything nonbiped)
  • Skin information (for vertex assignments to simple 3dmax boned animations)
  • Vertex based animation (like how 3ds saves its animations - for things such as trees falling)
  • Convert exporter so it's usable in newer versions of Max and other modelling tools such as Blender (our current exporters only work in 3ds Max R6)
#39 wontfix Environmental Events Stuart Walpole
Description
  • Timed Events: Track elapsed time (see Simulation=>Time Elapsed) until event (target time specified in session configuration).
    • Examples: Season Cycle, Day/Night Cycle, Ceasefire
  • Random Events: Similar to timed events, but they can occur at random (frequency determined by things like climate settings and current season).
    • Examples: Weather.
  • Possible effects of event:
  • Set actors to this event group if they have it. (ie trees might have a Winter group where their textures are leafless and snow-covered, or an Autumn group where the leaves are red and golden.)
  • Change light settings to those specified by a lighting group used by the scenario. (eg Twilight, Dawn.)
  • Support for scripted conditional modifiers (perhaps handled through Tech system?). For example, to make Fields have a bonus to gathered resources in Spring and Summer, or units have reduced vision in darkness.
  • Climate effects (eg snow more prevalent in Winter, though it never snows in desert climate).
  • Conditions are affected by the map's climate settings. (For example, it never snows in a desert climate, and there are longer twilights in the northern hemisphere.)
#41 fixed Provinces/Territories philip Stuart Walpole
Description
  • Relies on area definition (RMS), allocation of resources and settlements to Provinces.
  • Ownership of areas (provinces)
  • Visible borders
  • Scripted behaviour for Provinces:
    • Unlocks (eg resource gathering, building)
    • Construction over NPC (gaia) settlements (see Entity Event - Construction - Sites)
    • Statistical Benefits/Disadvantages
    • Ceasefire (see Timed Events above), attrition damage (see Terrain below)
    • Entity caps (limited to a certain number of entities of certain types, particularly buildings, per province)
#42 fixed Terrain - Elevation andrew Stuart Walpole
Description
  • Higher Ground: Units at higher elevations gain a bonus to damage in combat.
  • Steepness:
    • Slopes can be too steep to traverse, though this can vary from unit to unit (foot units can climb steeper slopes than carts or siege weapons). --> Decided not to do this for now since it is expensive and would be confusing to the player; instead, just make certain terrains impassable.
    • The steepness of a slope also affects the movement rate of units (going up is slower, going down is faster).
#43 invalid Terrain - Gameplay Properties Stuart Walpole
Description
  • Unit Speed: Other terrains affect the movement rates of certain units. (eg speed is reduced for most units on sand (though increased for camels), while speed is improved for most units on roads.)
  • Traversability: Certain terrains are only traversable by certain units. (Ships can only move on deep and shallow water; infantry on land and shallows but not deep water. Some infantry can move directly through forests. Cliffs are impassable to all, as they are too steep to climb.)
#47 invalid Water - Basic Stuart Walpole
Description
  • Special traversability permissions (see Terrain - Gameplay Properties)
  • Extension of terrain/entity system for water -- shallow and deep areas, speed effects, wildlife
#49 duplicate Audio Stuart Walpole
Description
  • Implement Damian's system of sound groups with shared properties (audio_class.xml, audio_group.xml).
  • volume controls & clip category assignment (music, fx, ambient, voice, master)
  • entity locational sounds
  • getting a clip's properties from JS
  • cross-fading of playlist tracks (looping (ie long) tracks should fade in and out)
  • playlists
#50 fixed Virtual File System Stuart Walpole
Description
  • Additional parameter to extract folder names.
  • on-demand loading = assimilate changed files without restarting game
  • GUI Hotload.
  • Scope/cache management
  • VFS should handle newline conversion (recognize all \r\n \n \r combinations and treat them as newlines) when reading files.
#51 duplicate Computer Player AI Stuart Walpole
Description
  • Design.
  • Implement. :)
#52 fixed [PATCH] Trigger system O.Davoodi Stuart Walpole
Description
  • General-purpose trigger system

See this topic for forum discussion.

Here is the recent topic: http://www.wildfiregames.com/forum/index.php?showtopic=18211

#53 invalid Triggers - Advanced Stuart Walpole
Description
#54 duplicate Tools Stuart Walpole
Description
  • Entity editor
  • Component downloader/installer/updater (Hercules)
#55 fixed Camera - Start Position Stuart Walpole
Description
  • Able to set camera position at game start for each player (usually centered on player's Civ Centre if not specified ... done by RMS or baked into map?). (See Random Map Scripting above.)
#56 fixed Camera - Cinematics Sergey Stuart Walpole
Description
  • Key to lock camera on the selected unit ("follow" mode).
  • Bugfix: camera shakes when unit being followed goes downhill away from camera.
  • Cinematics: functions to control camera and define tracks at positions in the environment.
  • Option to lock camera rotation or "snap" to saved rotation.
#58 duplicate Actors - Hidden Stuart Walpole
Description
  • Concealed objects (player's vision is blocked by another entity in the way) masked in player colour.
#59 fixed Actors - Vertex Animation Stuart Walpole
Description
  • Animated meshes using vertex animation (swaying trees, flags, flowing capes -- could be done with boning/skinning if absolutely necessary.
  • If we could support vertex animation though, we would also be more accessable to the moding community that isn't as capable with bones and skin as developers).
#60 fixed Actors - Foundation Texture Stuart Walpole
Description
  • Foundation texture (eg leafy texture under trees, paved/dirt texture under buildings).
#61 fixed Actors - Particle Props Stuart Walpole
Description
  • Particle effects (smoke, flames, rubble) can be attached to sockets on a unit just like props.
  • Obviously requires a working particle system.
#62 fixed Bug - Actor Sychronisation Michael D. Hafer Stuart Walpole
Description
  • Start times for initial animations should be randomised. All units on the map start with their idle animations in perfect unison, for example.
#63 invalid GUI Engine Stuart Walpole
Description
  • <strike>Ensure documentation of available events and JS functions is complete and up to date.</strike>
  • namespaces (local pages) ... XML "pages" defined from init.xml. Hotkeys grouped under pages (hotkey.mainmenu.quit, hotkey.session.return) do not affect other pages, or can be set as global (hotkey.global.watermark) and affect all.
  • On-the-fly asset refresh (GUI Hotload).
  • Dynamic scripted control object creation/destruction (can create/destroy control objects from JS) ... Or control objects can be created as arrays (since this is mainly needed for large, often variable groups of similar objects).
  • Dynamic graphic loading (direct display of an image from a given path, without having to define a sprite at loadtime.)
  • Styles and sprites can use parent-child inheritance.
  • Styles should include the "type" property.
  • Absolute property should be inherited (eg set a parent to absolute so that its children can be absolute, without setting each in turn.)
  • Implement .parent property (stores string name of child object's parent control.)
  • When objects overlap, whichever object is written first should have the lower z, making specification of z values largely unnecessary.
  • Events can be set as properties (onPress="function1 (property1, property2); function2 (property1, property2)" or <action on="Press" function="function1 (property1, property2); function2 (property1, property2)" />) -- Why not just <action on="Press">function1(...)</action>, that's basically the same amount of characters (the CDATA thing is not required). /Gee
  • <strike>Clipped scroll windows (text and images)</strike>
  • Events for double-click, right-click, wheel-click, similar to onPress. Also wheel-up and wheel-down in system.cfg.
  • GUI controls that remain relative to a world object, like hitpoint bars and "level-up" icons (perhaps an extension of billboard sprites?). Engine function to return object position relative to x/y screen coordinates.
  • Ability to set the value of a control's "style" property at runtime. eg "setStyle (controlName, styleName)" or perhaps "getGUIObjectByName (myControl).style ="skin*Hele*Button"", as long as the control's properties are refreshed from the style once this happens. (Currently it's blank once the controls are loaded, since the control properties are populated at load). Without this feature, we're unable to implement UI "skins" (since we setup the skin groups using styles).
  • Bug: When an [icon] is specified in a caption, even if it isn't displaced, it's no longer possible to vertically align (eg vertically centre) the text in the control.
  • Additional controls:
    • <strike>listbox (list)</strike>
    • <strike>combobox (dropdown)</strike>
    • slider.
#64 wontfix Document Latest Session GUI Stuart Walpole
Description
  • Completely document revised user interface design (ie the new clean gray style), ideally with lots of mockups, with particular focus on the required features that'll need to come out of the GUI engine so they can be included in its specification; then later the GUI can be rebuilt in earnest.
#65 fixed Document GUI Engine Needs Stuart Walpole Stuart Walpole
Description
  • Document the needs of the revised GUI engine. Essentially do a postmortem on the current system and see where it can be improved (an initial start on that in the sections below). With any luck this'll provide a game plan to Gustav to make amends in the time before he goes to Japan, and then for his successor to take over.
  • (Merge the GUI Engine Trac task into that brief, and post for feedback.)
  • 01/05/06 "3 weeks to compile a wishlist for Gee, then he has 3 weeks of spare time."
  • "the school is coming to an end in 3 weeks so I have to pretty much study every day until then. Although when it's over I have 3 weeks completely free before I leave for Japan."
#67 fixed [PATCH] Internationalization gallaecio Stuart Walpole
Description
  • i18n - allow conversion from game's text into a translatable table, and then to the right format for the game to read. Possibly using GetText (http://www.gnu.org/software/gettext/gettext.html) if it supports XML, JS, and C++?. Multiple tools for GetText translation already exist, which would simplify the translation process (not a custom format and editor). See #1389
  • Includes correct handling of accented characters (many characters are replaced with (?) symbols). [The tools to do this are not quite completed/working yet.]
  • l10n - perform that conversion and do the translations (into English first, and maybe another language to test the system)
  • Provide a default hotkey set for each locale? See #692
#68 invalid Network - Basic Andrew Stuart Walpole
Description
  • entity ownership
  • verification of entity ownership - for issuing commands
  • command synchronisation between clients and the server - this is basically just connecting some code in the input with some networking code
  • Game turn length calculation and lag handling - depends Ping Support
#69 fixed Enhance Multiplayer Experience Stuart Walpole
Description

Latency Adjustment (moved to #3752)

Currently the networking code is hard-coded to a 200ms turn length, with commands scheduled for execution 2 turns ahead. This causes jerky motion if the RTT for any player is >200ms.

We ought to do some combination of dynamically adjusting the turn length (which allows fine-tuning and reduces simulation CPU load, but large values will result in very variable responsiveness depending on whether the player clicks near the start or end of a turn), and dynamically adjusting the number of turns ahead (which allows more consistent responsiveness, but is a coarse adjustment).

Player disconnections

I believe if a non-host player is disconnected, it'll display a message already, saying the player left?

However, if a client does not hear from a host for ~5 seconds, it should display a "waiting for host" message to the player (with an "exit game" button on it), and then either go back to normal or go to the "connection lost" message on network timeout. (Will be done in #3264)

Auto-Reconnect

If a player is kicked, allow them to try to reconnect via a button (in the case where their (the players) internet was cut off, but the host is still running the game, and the player rejoins the same I.P. and takes control of their units).

Observer Mode

Players who can join a game, but don't have a civ to play (full or doesn't want to play), can just watch (like a real-time Replay).

They get full view of the map (no SoD or FoW). Sometimes called 'God Mode'.

#70 fixed Graphics - Shaders Stuart Walpole
Description
  • Shaders
  • Simple implementation
  • Shaders and materials for shiny armour and helmets, reflective, glowing and transparent objects
#71 worksforme Graphics - Light & Shadow Stuart Walpole
Description
  • Simplify lighting for performance in the fixed function case (we really only have one light)
  • <strike>Proper shadow maps with self-shadowing</strike>
  • Improved lighting (dynamic environment, vertex shader)
  • "Calefaction seemed to think we'd need to pretty much rewrite it?"
  • "i think it's because we are doing it in CPU, and he wanted that to be done on GPU"
  • "I don't know why; it might be nice to do calculations on the GPU where possible, but the current system seems good enough for the basic non-hardware version"
  • "If the vertex shader (GPU) version can be a direct port of the current system, then it should be fine; though I suppose that might not be feasible, in which case it'd need to be rejigged a bit." (But there's only a few dozen lines of code that do the lighting, as far as I'm aware)"
#73 fixed Terrain Decals Stuart Walpole
Description
  • Paint a small texture on the terrain such as footprints, tree roots, blood splats, burn marks, etc… This would conform to the terrain perfectly and appear to be part of the terrain. (Splats/doodads/goobers/decals.)
#74 fixed Graphics - Particle Engine Stuart Walpole
Description
  • Basic particle engine is in the game, provided by Will Dull, with a constant emitter.
  • Needs to be picked up to allow creation of XML-based particle effects, using editor to tweak properties, and have them broadcast from locations in the game (either placed as particle objects, or attached to actors in prop sockets).
  • Often particles can appear conditionally (eg smoke and flame trails on a building when it is damaged) or when a unit is splashing through water.
#75 invalid Graphics - Misc Stuart Walpole
Description
  • vertex buffer framework
  • vertex/pixel shader framework, largely for special effects/"glitz"
  • multiple iterations of {aesthetic/perfomance improvements, feedback}
  • different lighting schemes
  • extra texture maps (specular/gloss/normal/cube/etc)
  • cloud rendering (for cinematics, mainly)
  • improved transparency rendering
  • Explosions!
  • Animated Textures: would be used for things like clouds, waterfalls, and other special effects. Also applied to GUI sprites.
#76 fixed Entity - Queuing Orders Stuart Walpole
Description
  • Currently an entity can only be assigned one order at a time.
  • The player should be able to queue multiple orders for an entity by holding down Shift when giving the entity an order. It will then complete each order in turn.
#77 wontfix Attrition Damage (territories) Simon Brenner
Description
  • Attrition Damage: In some game settings, entering an opponent's territory during ceasefire causes rapid damage to those units. (Though this can't be implemented until the Provinces task is completed.)
#79 fixed VFS: support for creating dirs Jan Wassenberg Jan Wassenberg
Description

VFS requires a bit of work so it can create real directories when files are written to not-yet-existing dirs. This is needed for the XMB move, because they no longer reside in the game's data dirs that are sure to exist anyway.

#80 fixed VFS: move XMB files to separate dir Jan Wassenberg Jan Wassenberg
Description

.. specifically to $install/cache/XMB/mods/official .

Rationale: unclutters the XML dirs, allows easily deleting XMB, allows file writes to go into some writable dir (important when not running as admin).

Discussion: see http://www.wildfiregames.com/forum/index.php?showtopic=9939&pid=170413&st=0&

Requires #78.

#81 fixed Move all writable files to user's home directory Jan Wassenberg
Description

To support Least-permission User Accounts (i.e. everything except Administrator) on Windows, no files in the game directory may be written to.

1) All output files (e.g. screenshots, savegames) should go into "My Documents\My Games\0ad" (suggestion). 2) Non-user-specific stuff that also doesn't need to be backed up (e.g. archive and XMB) should go in "Documents and Settings\All Users\Application Data\0ad". 3) this will be implemented in a portable fashion by providing sysdep routines to return "home" and "local appdata" directories.

#82 fixed Lighting editor Philip Taylor Philip Taylor
Description
  • Control over:
    • Lighting colours (sun, terrain ambient, unit ambient)
    • Sun direction
  • Real-time preview of changes
  • Load preset lighting conditions
  • Save new preset lighting conditions
#86 fixed Water editor Philip Taylor Philip Taylor
Description
  • Allow control over height of water plane
  • Select water effect (texture, shader parameters)
  • (Some time in the future, allow editing of the more advanced multi-level water system we'd hopefully have)
#88 fixed Sky editor Philip Taylor Philip Taylor
Description
  • Allow selection of skybox texture, and (if possible) shades.
#90 fixed Playtesting Philip Taylor Philip Taylor
Description
  • Run the game from inside the editor, using the in-game GUI and controls (but preferably inside the Atlas window, to make it as seamless as possible). Once finished, forget all changes and return to the editor
#91 fixed Player editor Slawomir Zborowski Philip Taylor
Description
  • Edit number of players and their names, types (AI/human/other), civs, resources, starting location, etc.
#95 fixed Cinematics editor andrew Philip Taylor
Description

UI for editing (and previewing) cinematics tracks.

#96 fixed [PATCH][Atlas] Copy-and-paste of entities trompetin17 Philip Taylor
Description

Allow copy-and-paste of various things, like the selected objects.

Probably implement by converting the data to XML and saving as text into the clipboard, so that people can easily edit it in a text editor or save it to disk and then copy it back into Atlas.

#98 invalid Cavalry Animations Jason Jason
Description

At least one animation for the cavalry attack:

  • Spear
  • Sword
  • Javelin
  • Archery

Also need a death animation for the horse and rider.

Need to sync the rider gallop animtion to the gallop and make a rider animation for the walk.

#99 fixed Objects jump when first moved Philip Taylor
Description

Create an object in Atlas. Zoom in and move the camera so the object is near a corner of the screen. With the object-move tool, click the unit and try moving by a single pixel. It jumps towards the edge of the screen by dozens of pixels.

It seems the cause is that CCamera::GetScreenCoordinates and CCamera::GetWorldCoordinates are not exact inverses - for points near the edge of the screen, the difference is quite significant. (GetWorldCoordinates requires integer pixel values, but I don't think that'd cause errors of more than one screen-space pixel (which would be acceptable) - it's probably some difference in the algorithms used to convert between spaces.)

#100 fixed Clean up ogghack Andrew Jan Wassenberg
Description

We are currently using really hacky code in sound/ogghack.cpp to decode OGG for sending it to OpenAL.

Background: all of our sounds are in .ogg format. At one point it was promised by Creative that their Windows implementation would support an extension that allows passing in OGG data directly to OpenAL. This would be very convenient for us and also quite efficient. Unfortunately Creative dropped the ball - they never got it working and now officially say "do it yourself".

Since ogghack.cpp was implemented during the time when they promised the extension would be available soon, it is a very basic implementation, wasteful of memory, and doesn't check for errors. This should be cleaned up and made permanent.

No serious changes should be required; we can still use the OGG Vorbis library as currently.

#101 wontfix vfs_optimizer: don't add mods to main archive Jan Wassenberg Jan Wassenberg
Description

vfs_optimizer currently enumerates the entire VFS contents and adds everything marked as "archivable" (1) to the archive.

However, mod files must not be included, for obvious reasons: the mod would no longer be optional and could thereafter not be disabled.

One solution would be to generate one archive per archivable mount point. This would be a bit inefficient, since there are several mount points that could be added to the main archive (namely: cached XMB, mods/official) and splitting them up would increase seeks.

Solution: specify a VFS_MOUNT_NOT_MAIN_DATA (bad name, but you get the point) flag when mounting mods. All mount points without it would get lumped into one archive, and the other archivable ones (mods) are archived separately.

Implementation: for enumerating files, still use vfs_dir_enum. For each returned entry, get the TFile's Mount pointer. First, check if it's archivable. Then, put all files from a given mount point into a bucket (except if it doesn't have the flag; it goes into the "main data" bucket). For each bucket, create a separate archive.

(1) this would exclude e.g. screenshots

#102 wontfix Misc VFS cleanup Jan Wassenberg Jan Wassenberg
Description
  • change vfs_dir_open to use DirIterator? would give same interface to file and VFs code => enables function pointers
  • rename funcs from vfs_opt?
  • replace RealDir with loose vars
  • reduce archiveentry size, remove fields that needn't always be stored in memory
  • comp_feed should take crc of data
  • put archive builder state in struct (not loose)
  • wipe out trace file occasionally - otherwise it grows too large
#103 fixed GL_ARB_texture_env_crossbar requirement is unnecessary Nicolai Hähnle Philip Taylor
Description

GameSetup.cpp checks for the presence of the GL_ARB_texture_env_crossbar extension, and complains if it's not there, in a way which implies that it's required and the game may break in unexpected ways.

That extension appears to be used only in FastPlayerColorRender, which is optional - it falls back to SlowPlayerColorRender if the required features are missing. Currently it's only testing for >= 3 texture units. It should probably be testing for GL_ARB_texture_env_crossbar too, and quietly switching to the slow method if it's unavailable.

#104 fixed GUI - Modal Dialogs (Namespaces) Stuart Walpole
Description
  • Problem: Currently all the GUI XML files are combined into one big GUI object, and you have to hide/unhide individual screens at appropriate times to make them appear, which is kind of nasty (and would make any editor much harder to do). This also creates problems with hotkeys (if the Esc key has a specific effect on the main menu, the Esc key will have the same effect everywhere else), as well as determining z order. For example, the dropped-down part of a combobox should usually be visible on top of everything, except when a message box is open on top of that (which seems to be an unavoidable problem if there's a single global z, instead of a localised per-GUI-screen z).
  • Solution: Separate GUI XMLs (other than those reserved for special purposes, such as sprite.xml, styles.xml and setup.xml) are considered their own namespaces (local pages). To switch between them, call a function to open/close an XML screen.
    • Each page is an independent GUI window ("modal dialog") with its own local z order. When objects with the same z order overlap, whichever object is written first should have the lower z, making specification of z values largely unnecessary.
    • There could be any number of these pages; pop-up windows (like game setup or a Yes/No dialog) could also be separate pages.
    • The XMLs are added to the GUI scope via init.xml (so that each XML load is not hardcoded into the engine).
    • Pages are drawn in z order using the sequence in which they are declared in init.xml.
    • .cfg Hotkeys are grouped under page names (hotkey.mainmenu.quit, hotkey.session.return) so that they are only effective while that page is open, or can be set as part of the reserved "global" page (hotkey.global.watermark) and the hotkey has the effect on any page.
    • This will also facilitate the -quickstart allowing the game to jump straight to a default session for testing purposes (while currently loading the GUI means having to start at the main menu).
#105 fixed GUI - Hotloading Stuart Walpole
Description
  • Problem: Although VFS recognises when game assets are modified and reloads them while the game is running, the GUI does not currently support this feature.
  • Solution: Adapt the GUI to be capable of auto-reloading changed assets. Such functionality should greatly improve rate of GUI development, since coordinates can be tweaked while the game is running without the need for an equivalent WYSIWYG editor.
#106 fixed GUI - Separate GUI and Simulation Stuart Walpole
Description
  • Problem: The GUI engine shares the same JS space as the simulation, which makes it far too easy to break synchronisation.
  • Solution: Separate the GUI and simulation so that they can be loaded independently. Also the setup of the simulation should not be dependent upon the GUI (so that -quickstart works). (Ask Philip for help if any questions.)
#111 wontfix GUI - Custom Control Properties sluzky Stuart Walpole
Description
  • Problem: Sometimes we need to store extra information about a control so that we can refer to it later. For example, I currently use a horrible hack involving storing a string in the tooltip of a button in order to know the name of the entity which will be trained by clicking the button, since I can't retain that information in the onPress event.
  • Solution: Either allow additional properties to be added to a control (as long as it doesn't use a reserved name), or add a few generic container properties that scripters could use for custom values. "For storing JS properties, it'd probably be nice to move things over to using the CJSObject system or whatever it's called. (At least I think that allows arbitrary properties in objects - probably ought to check first.) - Philip"
#113 fixed GUI - Grid Control Stuart Walpole
Description
  • Problem: A common GUI need are tables or lists of buttons with similar properties, such as a construction queue, list of garrisoned unit portraits, or table of statistics. Creating,
  • Solution: One solution is to be able to omit the XML and create a control instance entirely from script. A much safer solution, however, would be a "grid" control which acts as a container for an array of child objects of the same type with the same default properties from a given starting position. Only one grid would need to be declared and it would generate a specified number of child controls. It would automatically take care of lining up the buttons and fit to a specific spacing/rows/columns if specified. The child objects could then be individually accessed and their properties modified.
#115 wontfix GUI - Multiple Screen Layouts Stuart Walpole
Description

[Either leave this until last with lowest priority, or scrap it entirely. Feature creep.]

  • Problem: We'd like to be able to store multiple size properties for a control, so that several layout options can be maintained. In particular, configurations so that the minimap is mirrored to either the left or right side, or the UI can be flipped vertically since the camera is oriented so that the closest objects (and those the user is most likely to manipulate) are at the bottom of the screen.
  • Solution: Each control can store an array of size properties. A function can be called, passing the name of the page and the array index, and the function will switch all controls which have a size at that array index to this layout. (While a large number of the controls can simply be mirrored (inverting the screen axes), a number of them need to be given specific new locations; a good example is a window wrapped to the either side of the screen, but the contents always need to read from left to right.)
#117 fixed add CxxTest Jan Wassenberg Jan Wassenberg
Description

Background: using an existing Unit/self-test framework is deemed helpful (see 2006-05-27 meeting) Chiefly based on evaluation, we choose CxxTest as unit testing framework.

Basic usage:

  • self-tests are separate Cpp files that contain only the test code. (splitting is necessary so that cxxtestgen doesn't have to parse the entire codebase)
  • they are stored in a tests subdir of the source directory (simplifies finding the relevant test file for purposes of editing it)
  • a workspace generated by premake enumerates all test files, uses custom build step to generate the actual test code, and then links it all into a separate program that runs all tests. Note: separating test code from the main PS executable has several advantages as documented
  • only running certain tests will be possible (shortens iteration time when only editing one module).

TODO:

  • add CxxTest to SVN
  • generate workspace for the test program (via premake)
  • move all existing tests over to that
  • add squelchNextError feature, use it in string_s test
  • make sure all tests run successfully
  • filtering: modify(/replace/subclass) TestRunner and change its runWorld() so that it filters by the SuiteDescription.testName().
#119 fixed On-screen error display Jan Wassenberg
Description

Motivation: error log works but isn't usually looked at (only when a problem has otherwise made itself apparent). Solution: provide an on-screen display of errors to make sure they are seen.

Problems:

  • we currently have lots of unsolved errors in the log; when display on screen, those would get annoying fast. Solution: solve all of them! :P More seriously, having them in our face should provide a nice incentive to investigate and solve them. However, if need be, we can also use the logging system's severity mechanism to avoid displaying some log messages on screen.
  • how to deal with a flood of errors? Make sure each line gets (say) 30 seconds of face time, then scroll it off the screen. Only display a certain limit of lines to avoid scribbling on the entire screen.

Detailed Implementation Points:

  • probably best to integrate into CLogger; that which is logged there also goes onto screen.
  • text must be visible to user; whether scribbling directly on the screen (i.e. adding code to Render() ) or adding a GUI control of sorts is left open. The latter is preferable of course, but is a bit harder (needs a control to be made visible/invisible).
  • need to maintain a buffer of errors awaiting display. This is because errors can come up before the GUI or graphics systems are initialized; we'd want to display them as soon as possible afterwards.
  • proposal: std::deque of error-description lines. push new ones onto the end. as soon as GUI is ready, display the first MAXLINES of them on screen. maintain a count of when each line went on-screen. check every frame if the top lines have gotten more than FACETIME seconds; if so, pop them off the deque and remove them from the screen.

If deque is empty, no longer clutter up the screen; disappear from view.

  • this error display should be available for developers and modders. add a config option that enables/disables it.
  • prefer unicode-only strings (to allow easier localization)

Thanks to Philip for discussion+planning.

#120 fixed Death bug andrew
Description

After a unit finishes its dying animation, it "jumps" over to another spot when changing to the corpse actor.

#121 wontfix Dynamically link DevIL Philip Taylor Philip Taylor
Description

Atlas uses a statically linked version of DevIL, which is LGPL, so we need to dynamically link instead before distributing Atlas.

#122 fixed Lowlevel CppDoc Jan Wassenberg Jan Wassenberg
Description

Add CppDoc comments to:

  • types
  • timer
  • posix_types
  • posix
  • path_util
  • ogl
  • mmgr
  • lib_errors
  • debug_stl
  • config
  • byte_order
  • app_hooks
  • allocators
  • adts
  • debug
  • lib
  • sysdep
  • snd
  • ia32
  • gfx
  • dir_watch
  • cpu
  • win_internal
  • win
  • wgl
  • wdbg
  • wdll_ver
  • h_mgr
  • handle
  • cursor
  • ogl_shader
  • unifont
  • ogl_tex
  • tex
  • tex_codec
  • tex_internal
  • snd_mgr
  • zip
  • vfs_tree
  • vfs_optimizer
  • vfs_mount
  • vfs
  • trace
  • path
  • file_io
  • file_internal
  • file_cache
  • file
  • compression
  • archive_builder
  • archive
#123 fixed Bug: menu->ingame music crossfade doesn't work Jan Wassenberg Jan Wassenberg
Description

.

#124 fixed Minor SwEng improvements Jan Wassenberg Jan Wassenberg
Description

Some possibilities for minor improvement noticed while cruising by:

  • premake: document extra_params
  • ogl: remove EXT_ symbols, use glext instead
  • debug_stl: prefix symbols with debug_stl
  • adts: move cache into separate file (also remove old cache impl)
  • wgl: prevent multiple include
  • move SDL files in sysdep/win to libraries/SDL
  • delay_load uses NLSO ctor to register functions. require load_notify to be called at init time. (rationale: this no longer works since splitting up into several static libs)
  • wsock_init: call via module init, have it do load_notify call
  • ScopeTimerAccrue: change #ifdef spaghetti into templated policy class
  • app_hooks, define VOID_FUNC to FUNC(.., (void) )
  • look at stalk walk code; any reason not to work on Win64?
  • replace ERR_TEX_CODEC_CANNOT_HANDLE with INFO_* - not an error. also ERR_SYM_SUPPRESS_OUTPUT ERR_SYM_SINGLE_SYMBOL_LIMIT
  • wdbg_sym: only import RtlCaptureContext once (not every walk_stack)
  • add sys_last_error (GetLastError on win32); converts to text in display_error, also show sys_last_error and errno
  • app_hooks: move i18n impl out (belongs in pyrogenesis)
  • move non-lib asm code into separate asm file; split out memcpy and color code from ia32_asm.asm
  • rename all C headers to C++ name (e.g. cmath) Deemed not worth the effort.
  • fix mem leaks No longer happens.
  • move GUIbase.h errors (DECLARE_ERROR) into philip's error mechanism, remove DECLARE_ERROR, remove ps/errors.h Separate ticket.
#125 fixed Error on Win64 while getting sound driver version Jan Wassenberg Jan Wassenberg
Description

Desmond reports:

I have a similar problem too. Ever since I updated the cache from a few months ago it does that for me.

Function call failed at dll_ver.cpp:45 (get_ver): return value was -1 (Unknown error (-1, 0xFFFFFFFF))

Call stack:

RtlFreeUnicodeString (:0)

win_get_snd_info (wsnd.cpp:178)
    dlls = (uninitialized/invalid set<string > >)
    suppress__ = 0x55 ('U')

WriteSystemInfo (util.cpp:48)
    LINE_44 = 
        t0 = 2.82072e-317
        description = 0x00000000

    N_path = "PCI\VEN_1002&DEV_4A49&SUBSYS_0D42174B&REV_00"
    hostname = "dvag"
    un = 
        sysname = [9] { 244, 218, 246, 119 ('w'), 212, 246, 45 ('-'), 0, 0 }
        nodename = [16] { 1, 0, 0, 254, 58 (':'), 83 ('S'), 0, 0, 0, 0, 0, 0, 5, 0, 0, 0 }
        release = [9] { 0, 0, 0, 0, 240, 253, 126 ('~'), 18, 59 (';') }
        version = "S"
        machine = [9] { 0, 0, 0, 0, 0, 0, 97 ('a'), 116 ('t'), 105 ('i') }

    ips = 0x40297020 -> (unavailable - internal error)

Then with a supress the game stays minimized, and the first time it does a 'rebuilding archive' then then goes to menu. A few builds ago it would show two error messages, but it dosen't do that anymore.

My sound card is a Creative Soundblaster Audigy 2 ZS. I'm running Windows XP Professional x64 in English. This 64bitness requires 64bit drivers to work, so the sound driver I'm using is a 64bit one. I'll check to see if there are any sounddriver updates after this. I haven't moved anything around. My 0ad directory is located here D:\Documents and Settings\Administrator\My Documents\0 AD. I have a C drive, but it is used for Win xp home boot and storing files.

#126 fixed Trac SVN post-commit hook Philip Taylor Philip Taylor
Description

It needs to work.

#127 fixed Make XMB Maintain Case Matei
Description

Currently XMB converts all element and attribute names to lower-case. It should keep them as they were in the file. We can then modify the entity or GUI code to change the JavaScript versions to camelCase.

#128 fixed Minor fixes/improvements related to GUI sluzky Jan Wassenberg
Description
  • We now get warnings whenever there is a C++ file that is empty or doesn't contain any meaningful info (e.g. stuff that would end up in the compiled static library). Accordingly: decide if CGUIScrollBarStyle.cpp and CGUIList.cpp can be removed.
  • Some parts of the GUI still use the old and obsolete PS_ERROR mechanism. Removing that would be nice, to avoid confusion. Also, localization would be helped a bit by not having error text hard-coded in English.

If a return-value-based approach is still desired (instead of tossing exceptions), we could simply assign numbers to the error definitions, rename them a bit, and be done. Otherwise, we can move that over to Philip's error mechanism, i.e. throwing exceptions. I can help out and/or do all the work - just let me know which is preferable. (old TODO entry: move GUIbase.h errors (DECLARE_ERROR) into e.g. Philip's error mechanism, remove DECLARE_ERROR, remove ps/errors.h.)

#129 fixed Opportunities for optimization (startup) Jan Wassenberg
Description
  • tc_CalculateVariationKey: 1.72362 s (8010x): graphics/objectmanager.cpp

TODO (for some efficiency): use the pre-calculated choices for this object, which has already worked out what to do for props, instead of passing the selections into BuildVariation and having it recalculate the props' choices. Release mode: 38.6697 ms

  • Gamesetup/config.cpp: 300ms

g_ConfigDB.Reload(CFG_SYSTEM); 216ms LoadGlobals(); 64ms Release mode: 60ms

  • plain_transform: 500ms

flipping font texture files vertically. fix: convert them to e.g. DDS (possibly compressed, if that looks ok?!) same thing for art/textures/particles/sprite cursors also require runtime conversion. ironically enough, being DDS means they have to be converted back to TGA's BGR ordering (required by Windows for cursors) Release mode: 5ms

  • CSimulation init: 5000ms Now about 600ms.
  • font load: 350ms (total for 12 fonts) mostly spent building display lists. Better to store coords and render quads in immediate mode? Or use vertex arrays?
  • GUI init: 900ms (having subtracted font load time)

[more will be added as they are found]

#130 fixed Bugfixes: string_s selftest and isnan() Jan Wassenberg Jan Wassenberg
Description
  • VC2005 release mode selftest crashes.
  • VC2003 string_s selftest complains due to missing debug_skip_next_error
  • isnan() reports spurious failures. TODO: check IA32 FXAM bit definitions.
#132 fixed Territories - Render Boundaries Matei
Description

Territory boundaries should be rendered in the game world, flowing along the terrain. Ideally, each territory's boundary should be coloured with its owner's player colour so that at the edge between two territories owned by different players, you see two lines of different colours side by side.

#133 fixed Territories - Build Rules Matei
Description

Buildings should only be buildable on allied territories. In addition, buildings should have a per-territory cap (e.g. 2 barrackses per territory).

#134 fixed Territories - Gather Rules Matei
Description

Gathering should only be allowed in allied territories or around mills built in enemy territories.

#135 fixed Territories - Shroud of Darkness philip Matei
Description

Controlling a territory should remove the Shroud of Darkness (but not Fog of War) within it for its owner.

#136 needsinfo [NEEDS INFO] Dualview problems Camber Menschel Philip Taylor
Description

When running with two monitors in NVIDIA's Dualview mode (which makes Windows aware there are multiple monitors), with the secondary monitor attached to the left of the primary:

If the game is running in a window, and the window is moved to the secondary monitor, the menu screen does not respond to mouse events (movements/clicks). If it is placed between both (so half the window is on each monitor), it responds inconsistently (i.e. sometimes it works correctly, and sometimes it ignores the mouse entirely, depending on where the window is positioned and on the horizontal position of the mouse).

Inside the game, with the window at least partly on the secondary monitor, it complains:

Assertion failed: "x <= USHRT_MAX && y <= USHRT_MAX"
Location: wsdl.cpp:766 (queue_button_event)
errno = 0 (?)
OS error = The system cannot find the file specified.
Call stack:
queue_button_event (wsdl.cpp:761)
    button = 0x000D04F0
    state = 0xFFFFFE75
    x = 0x00000245
    y = 0xFFFFFE98
    ev = 
        type = 0x05
        key = 
            type = 0x05
            keysym = { type = 0x01, sym = -395, unicode = 0x0245 }

        motion = { type = 0x05, x = 0x0000, y = 0x0001 }
        button = 
            type = 0x05
            button = 0x00
            state = 0x00
            x = 0x0001
            y = 0x0000

        active = { type = 0x05, gain = 0x00, state = 0x00 }
        user = { type = 0x05, code = 1, data1 = 0xFFFFFE75 }

More TODO: SDL_SetGamma fails once on multimonitor setup, not thereafter - more info needed.

capture mouse, prevent it from moving outside of the main monitor on which the game is running

#137 invalid Mac OS X Compat Jan Wassenberg
Description
  • EntityStateProcessing.cpp:63 ../../../source/simulation/EntityStateProcessing.cpp:63: error: conversion from 'const char*' to 'CStrW' is ambiguous ../../../source/ps/CStr.h:121: note: candidates are: CStrW::CStrW(long unsigned int) <near match> ../../../source/ps/CStr.h:120: note: CStrW::CStrW(long int) <near match> ../../../source/ps/CStr.h:119: note: CStrW::CStrW(unsigned int) <near match> ../../../source/ps/CStr.h:118: note: CStrW::CStrW(int) <near match> ../../../source/ps/CStr.h:89: note: CStrW::CStrW(wchar_t) <near match>
  • const char* anim_name = should_run? "run" : "walk"; const CStrW u_anim_name = anim_name;
  • !JSConversions.cpp ../../../source/scripting/JSConversions.cpp: In function 'bool ToPrimitive(JSContext*, jsval, T&) [with T = double]' ../../../source/scripting/JSConversions.cpp:154: error: 'finite' was not declared in this scope
  • #include "lib/sysdep/sysdep.h" finite../../../source/scripting/JSConversions.cpp: In function 'bool ToPrimitive(JSContext*, jsval, T&) [with T = double]':../../../source/scripting/JSConversions.cpp:154: error: 'finite' was not declared in this scope
  • no Byte Order Mark plz
  • LightEnv.cpp../../../source/graphics/LightEnv.cpp:1: error: stray '\239' in program (was due to "Hähnle" - have replaced with ae)
  • TextureEntry.cpp ../../../source/graphics/TextureEntry.cpp: In member function 'void CTextureEntry::BuildBaseColor()': ../../../source/graphics/TextureEntry.cpp:107: error: invalid conversion from 'int*' to 'GLint*' ../../../source/graphics/TextureEntry.cpp:107: error: initializing argument 4 of 'void glGetTexLevelParameteriv(GLenum, GLint, GLenum, GLint*)' ../../../source/graphics/TextureEntry.cpp:108: error: invalid conversion from 'int*' to 'GLint*' ../../../source/graphics/TextureEntry.cpp:108: error: initializing argument 4 of 'void glGetTexLevelParameteriv(GLenum, GLint, GLenum, GLint*)'

int width,height; --> convert to GLint width,height; glGetTexLevelParameteriv(GL_TEXTURE_2D,0,GL_TEXTURE_WIDTH,&width); glGetTexLevelParameteriv(GL_TEXTURE_2D,0,GL_TEXTURE_HEIGHT,&height);

  • No idea wtf is going on with this file (gcc specific??) - Never compiled Color_asm.asm Color_asm.asm ../../../source/graphics/Color_asm.asm:1: fatal: unable to open include file `../lib/sysdep/ia32.inc' make[1]: * [obj/graphics_Debug/Color_asm.o] Error 1 ia32.inc does exist not sure why the compiler is crapping out
  • Renderer.cpp ../../../source/renderer/Renderer.cpp:86: error: conflicting return type specified for 'virtual PS_uint CRendererStatsTable::GetNumberRows()' ../../../source/ps/ProfileViewer.h:73: error: overriding 'virtual size_t AbstractProfileTable::GetNumberRows()' --> decide on either size_t or uint (This is all over the code)
  • ../../../source/renderer/Renderer.cpp: At global scope: ../../../source/renderer/Renderer.cpp:208: error: cannot declare field 'CRendererInternals::profileTable' to be of abstract type 'CRendererStatsTable' ../../../source/renderer/Renderer.cpp:79: note: because the following virtual functions are pure within 'CRendererStatsTable': ../../../source/ps/ProfileViewer.h:90: note: virtual CStr8 AbstractProfileTable::GetCellText(size_t, size_t) --> change CRendererStatsTable to ... CStr GetCellText(size_t row, size_t col); or uint ../../../source/ps/ProfileViewer.h:100: note: virtual AbstractProfileTable* AbstractProfileTable::GetChild(size_t) --> change CRendererStatsTable to ... AbstractProfileTable* GetChild(size_t row); or unit
  • MessagePasserImpl.cpp -- Haven't looked at this at all ../../../source/tools/atlas/GameInterface/MessagePasserImpl.cpp: In member function 'virtual void MessagePasserImpl::Query(AtlasMessage::QueryMessage*, void (*)())': ../../../source/tools/atlas/GameInterface/MessagePasserImpl.cpp:90: error: 'CLOCK_REALTIME' was not declared in this scope ../../../source/tools/atlas/GameInterface/MessagePasserImpl.cpp:90: error: 'clock_gettime' was not declared in this scope ../../../source/tools/atlas/GameInterface/MessagePasserImpl.cpp:92: error: 'sem_timedwait' was not declared in this scope
  • !GUIRenderer.cpp -- change int to GLint ../../../source/gui/GUIRenderer.cpp: In member function 'virtual void Effect_MultiplyColor::Set(Handle)': ../../../source/gui/GUIRenderer.cpp:199: error: invalid conversion from 'const int*' to 'const GLint*' ../../../source/gui/GUIRenderer.cpp:199: error: initializing argument 3 of 'void glTexEnviv(GLenum, GLenum, const GLint*)' ../../../source/gui/GUIRenderer.cpp:201: error: invalid conversion from 'const int*' to 'const GLint*' ../../../source/gui/GUIRenderer.cpp:201: error: initializing argument 3 of 'void glTexEnviv(GLenum, GLenum, const GLint*)' ../../../source/gui/GUIRenderer.cpp: In member function 'virtual void Effect_MultiplyColor::Unset()': ../../../source/gui/GUIRenderer.cpp:209: error: invalid conversion from 'const int*' to 'const GLint*' ../../../source/gui/GUIRenderer.cpp:209: error: initializing argument 3 of 'void glTexEnviv(GLenum, GLenum, const GLint*)'
  • allocators.cpp --- probably another header issue -same as the first issue mentioned ../../../source/lib/allocators.cpp:65: error: 'MAP_ANONYMOUS' was not declared in this scope
  • ogl.cpp - int to GLint plz ... change in header also ../../../source/lib/ogl.cpp: In function 'void oglInit()': ../../../source/lib/ogl.cpp:379: error: invalid conversion from 'int*' to 'GLint*' ../../../source/lib/ogl.cpp:379: error: initializing argument 2 of 'void glGetIntegerv(GLenum, GLint*)' ../../../source/lib/ogl.cpp:380: error: invalid conversion from 'int*' to 'GLint*' ../../../source/lib/ogl.cpp:380: error: initializing argument 2 of 'void glGetIntegerv(GLenum, GLint*)'
  • ShadowMap.cpp -- pass in GLint not int ../../../source/renderer/ShadowMap.cpp: In member function 'void ShadowMapInternals::CreateTexture()': ../../../source/renderer/ShadowMap.cpp:279: error: no matching function for call to 'min(int, GLint&)' ../../../source/renderer/ShadowMap.cpp:281: error: no matching function for call to 'min(int, GLint&)'
  • string_s.cpp -- header again -- posix.h ../../../source/lib/string_s.cpp: In function 'int strcpy_s(char*, size_t, const char*)': ../../../source/lib/string_s.cpp:160: error: 'SIZE_MAX' was not declared in this scope ../../../source/lib/string_s.cpp: In function 'int strcat_s(char*, size_t, const char*)': ../../../source/lib/string_s.cpp:204: error: 'SIZE_MAX' was not declared in this scope
  • timer.cpp -- Will do so later... ../../../source/lib/timer.cpp:65:2: error: #error "get_time: add timer implementation for this platform!" ../../../source/lib/timer.cpp: In function 'TimerClient* timer_add_client(TimerClient*, const char*)': ../../../source/lib/timer.cpp:272: warning: converting to 'TimerUnit' from 'double'
  • No idea../../../source/lib/sysdep/ia32.cpp:200: error: PIC register 'ebx' clobbered in 'asm'
  • Once again no idea ia32_asm.asm ../../../source/lib/sysdep/ia32_asm.asm:20: fatal: unable to open include file `ia32.inc'
  • Again ia32_memcpy.asm ../../../source/lib/sysdep/ia32_memcpy.asm:19: fatal: unable to open include file `ia32.inc'
  • Cast size_t to uint ../../../source/lib/res/file/file_stats.cpp:310: error: no matching function for call to 'percent(size_t, PS_uint&)'
  • Stat again ../../../source/lib/res/file/archive.cpp:199: error: aggregate 'stat s' has incomplete type and cannot be defined ../../../source/lib/res/file/archive.cpp: In function 'LibError afile_stat(Handle, const char*, stat*)': ../../../source/lib/res/file/archive.cpp:284: error: invalid application of 'sizeof' to incomplete type 'stat' ../../../source/lib/res/file/archive.cpp:291: error: invalid use of undefined type 'struct stat' ../../../source/lib/res/file/file.h:175: error: forward declaration of 'struct stat' ../../../source/lib/res/file/archive.cpp:292: error: invalid use of undefined type 'struct stat' ../../../source/lib/res/file/file.h:175: error: forward declaration of 'struct stat' ../../../source/lib/res/file/archive_builder.cpp:114: error: aggregate 'stat s' has incomplete type and cannot be defined
  • tons stat errors in file.cpp, file_util.cpp, trace.cpp,vfs.cpp plus many more
  • ../../../source/lib/res/file/trace.cpp:349: error: 'S_ISREG' was not declared in this scope stat structure missing on mac?
  • JSInterface_VFS.cpp --lines 125, 145
  • Xeromyces.cpp -- lines 214
#138 duplicate Audio Task List Gavin Fowler
Description
  • SoundGroup class - incorporate audio_group.xml format for loading groups of sounds
  • SoundGroupManager class - a class to interface with SoundGroups
  • revise implentation of Sound Priority within Snd_Mgr
  • Non-standard randomization of music tracks
  • Randomization of sounds within a given SoundGroup
  • Implement Intensity control - e.g. switching from multiple 'sword clang' sounds to a single 'sword battle' to free up resources for more sound.
  • Sound 'type' volume controls - one for SFX, one for Music, etc. (in addition to master gain).

New:

  • entity locational sounds, i.e. passing entity position to snd_set_pos / JS setPosition calls.
  • getting a clip's properties from JS (add getter function to JSI_Sound)
  • cross-fading of playlist tracks (looping (ie long) tracks should fade in and out)
  • playlists
#139 fixed Update wxWidgets Philip Taylor Philip Taylor
Description

wxWidgets 2.7.0 released. It doesn't seem to have any major changes (except for an added 'advanced user interface' library with no documentation so I'm not quite sure what it does), so it ought to be reasonably easy to upgrade to, and it should provide continued bug fixes and things.

#140 wontfix Large Scale C++ design Jan Wassenberg Jan Wassenberg
Description

Cleanups inspired by book of same name (am currently reading it).

I think cleaning up our code to reduce inter-module dependencies is quite important. It promises to reduce compile time, simplify releases of parts ripped out of our codebase (e.g. a limited actor viewer), and overall make the code easier to modify (without having to wonder: "hm, what all does this break?").

First idea: sdl is dragged into 6 of 7 of our static library components - ugh! This would be mostly avoidable by just forward-declaring SDL_Event. Unfortunately it is declared as a union (bad design!!), so that is impossible. Simple solution: wrap it in a struct and forward-declare that.[done]

Use pImpl to hide implementation details of simulation classes. Specifically: boost dependency, which is dragged into network as well.

  • wrap sys detect stuff in struct at least
  • remove globals.h - replace with InputRepeater
  • move enums from header scope into class, e.g. Paint::ORANGE
  • Remove X-Macros. As nifty as they are, unfortunately they are a barrier to static code analysis and VisualAssist.

This means: make apphooks.h and glext_funcs.h regular headers (with standard function decls), adding a note on what all needs to be done to add a new function. Since using those functions is more frequent than adding a new one, this makes sense overall.

However, I am still undecided about doing the same for liberrors.h. Splitting that up into separate header files would avoid a full recompile when adding errors, but would complicate the errcode -> descriptive string mapping and (more importantly) no longer be type safe. The current approach of one big enum containing all error values triggers warnings when someone returns 0 instead of INFO_OK; that would no longer be possible after splitting up into separate headers (because specific modules like VFS with their own error codes would want to use generic ones like TIMED_OUT or OK often) Done - errors are now in ERR namespace and split over multiple headers (thanks, Philip, for the excellent idea!). Type safety is still possible via Lint's "strong typing".

#141 fixed Shadows are delayed by one frame Nicolai Hähnle Philip Taylor
Description

Shadows seem to be rendered on the screen one frame later than they should be: click on the minimap to jump somewhere (preferably while having a low framerate), and the screen is momentarily bright before all the shadows pop back in.

#142 duplicate Rendering incorrectly culls for render-to-texture based effects Nicolai Hähnle
Description

Models are culled strictly by the main camera that the player controls. This means that an incorrect set of models is rendered into the shadow map and for water reflections.

Instead, models should be culled separately for each camera (whether real or virtual) that is used during a frame.

#143 fixed [PATCH] Shadowing: Selectively disable/enable for actors through properties philip Nicolai Hähnle
Description

Basically the default for actors would be that they would cast a shadow and they would recieve a shadow. Only need flags if they don't in either case. Something like:

<not_recieve_shadows /> <not_cast_shadow />

#144 fixed Visualize player controlled units that are hidden behind other objects Nicolai Hähnle
Description

We need a way to render player controled/obstructed (by trees, walls, terrain) units (player color/filled sillohettes), and some nifty effects to render enemy units hiding in 'trees' (some sort of transparency).

#145 fixed Auto detect gfx card "speed" Jan Wassenberg
Description
  • divide GPUs into several classes (i.e. crap, latest+greatest, shader capable, etc.)
  • measure perf on one sample system from each class, and then compare with performance attained during a test run.
  • if there is a test run, warn of a problem similar to what Nicolai experienced: lack of VIA 4in1 driver => AGP disabled => 5FPS when it should be much higher.

Could also use this to autodetect graphics settings based on what the user's system is capable of.

#146 fixed Assertion in wsdl screen_to_client Jan Wassenberg Nicolai Hähnle
Description

During startup of the game, I got the following error (unfortunately, I wasn't able to reproduce it).

This is in Windows XP, running the game in a 800x600 window, the screen resolution is 1280x1024. The window appeared in to top-left corner of the screen.

Here's the error message from the error dialog:

Assertion failed: "pt.x >= 0 && pt.y >= 0"
Location: wsdl.cpp:802 (screen_to_client)
errno = 42 (?)
OS error = Der Vorgang wurde erfolgreich beendet.


Call stack:

screen_to_client (wsdl.cpp:802)
    screen_x = (unavailable - stored in register 0x0)
    screen_y = (unavailable - stored in register 0x0)
    x = (unavailable - stored in register 0x0)
    y = (unavailable - stored in register 0x0)
    pt = { x = 5791740, y = 179 }
    suppress__ = 0x00
    suppress__ = 0x00

OnMouseButton (wsdl.cpp:903)
    __formal = 0x0048C874 (..)
    uMsg = (unavailable - stored in register 0x0)
    screen_x = 182
    screen_y = 16
    __formal = 0x0048C874
    outstanding_press_events = 1
    x = 0x7FFDF000
    y = 0x00000001

wndproc (wsdl.cpp:1035)
    hWnd = 0x00050600 (..)
    uMsg = 0x00000201
    wParam = 0x00000001
    lParam = 1048758
    ps = 
        hdc = 0x0012FCC0 (..)
        fErase = 1
        rcPaint = 
            left = 0
            top = 0
            right = 16
            bottom = 0

        fRestore = 0
        fIncUpdate = 1
        rgbReserved = [32] 
            0x00
            0x00
            0x00
            0x00
            0x00
            0x00
            0x00
            0x00
            0x44 ('D')
            0xFC
            0x12
            0x00
            0x48 ('H')
            0xFC
            0x12
            0x00 ...


GetDC (:0)

GetDC (:0)

IsWindowUnicode (:0)

CallWindowProcW (:0)

wglSwapBuffers (:0)

GetDC (:0)

GetDC (:0)

GetWindowLongW (:0)

DispatchMessageW (:0)

SDL_PumpEvents (wsdl.cpp:1051)
    msg = 
        hwnd = 0x00000001
        message = 0x00050600
        wParam = 0x00000201
        lParam = 1
        time = 0x001000B6
        pt = { x = 12142140, y = 185 }


SDL_PollEvent (wsdl.cpp:1061)
    ev = 0x0012FEFC -> 
        type = [8] { 0x00, 0x00, 0x00, 0x00, 0x10, 0xFF, 0x12, 0x00 }
        key = 
            type = [8] { 0x00, 0x00, 0x00, 0x00, 0x10, 0xFF, 0x12, 0x00 }
            keysym = { type = [8] { 0x10, 0xFF, 0x12, 0x00, 0x01, 0x00, 0x00, 0x00 }, sym = 1, unicode = 0xF1F9 }

        motion = { type = [8] { 0x00, 0x00, 0x00, 0x00, 0x10, 0xFF, 0x12, 0x00 }, x = 0x0000, y = 0xFF10 }
        button = 
            type = [8] { 0x00, 0x00, 0x00, 0x00, 0x10, 0xFF, 0x12, 0x00 }
            button = [8] { 0x00, 0x00, 0x00, 0x10, 0xFF, 0x12, 0x00, 0x01 }
            state = [8] { 0x00, 0x00, 0x10, 0xFF, 0x12, 0x00, 0x01, 0x00 }
            x = 0xFF10
            y = 0x0012

        active = { type = [8] { 0x00, 0x00, 0x00, 0x00, 0x10, 0xFF, 0x12, 0x00 }, gain = [8] { 0x00, 0x00, 0x00, 0x10, 0xFF, 0x12, 0x00, 0x01 }, state = [8] { 0x00, 0x00, 0x10, 0xFF, 0x12, 0x00, 0x01, 0x00 } }
        user = { type = [8] { 0x00, 0x00, 0x00, 0x00, 0x10, 0xFF, 0x12, 0x00 }, code = 1244944, data1 = 0x00000001 }


PumpEvents (main.cpp:91)
    ev = 
        ev = 
            type = 0xFC
            key = 
                type = 0xFC
                keysym = { type = 0x00, sym = 1244944, unicode = 0x0001 }

            motion = { type = 0xFC, x = 0x0012, y = 0x0000 }
            button = 
                type = 0xFC
                button = 0xFE
                state = 0x12
                x = 0x0000
                y = 0x0000

            active = { type = 0xFC, gain = 0xFE, state = 0x12 }
            user = { type = 0xFC, code = 0, data1 = 0x0012FF10 }



Frame (main.cpp:240)
    need_update = true 
    TimeSinceLastFrame = 3.62822e-038
    need_render = false
    suppress__ = 0x00
    __profile = (CProfileSample)
    __profile = (CProfileSample)
    __profile = (CProfileSample)
    __profile = (CProfileSample)
    __profile = (CProfileSample)
    __profile = (CProfileSample)
    __profile = (CProfileSample)
    __profile = (CProfileSample)
    __profile = (CProfileSample)
    __profile = (CProfileSample)
    __profile = (CProfileSample)
    __profile = (CProfileSample)
    __profile = (CProfileSample)

main (main.cpp:382)
    argc = 1
    argv = 0x00384EA0 -> 0x00384EA8 -> "c:\Wildfiregames\0ad\binaries\system\pyrogenesis.exe"

__tmainCRTStartup (crtexe.c:586)
    nested = 1245020

SEH_wrapped_entry (win.cpp:338)
    ret = 1245076

RegisterWaitForInputIdle (:0)
#147 fixed Animation/propping bugs Jan Wassenberg
Description

peltast: when running, spear is on wrong prop point (holding it in the wrong hand?!)

Duplicate: fire up cantabrian generated and order the starting unit(s) to run.

#148 fixed interact bugs Jan Wassenberg
Description

bandbox selection is buggy. sometimes selection works, sometimes none are selected.

woman has a build menu, but can't build anything. should hide the build menu

on click on minimap: it apparently captures the mouse, thus one can move the mouse around and the view follows it. clicking again undoes this and unhooks the mouse. Desirable behavior would be: one click on the minimap simply moves the view there.

select the (cantabrian generated) 3 starting units, formation "wedge" => crash

#149 fixed Building bugs Jan Wassenberg
Description

when Lclick on finished farm, temple, mill, crashes. Lclick on dock,barracks,market works fine.

on maps that have no territories defined, one cannot build anywhere. Fix: retrofit territories into all maps, or disable the territory check when building on maps that have no Ts defined?

rally point not implemented --> It actually is implemented; you can select a building, click the pink flag button, and rightclick on the map to set a rally point.

#150 fixed Exhausted trees don't disappear Jan Wassenberg
Description

when finished gathering from a tree, the tree does not disappear. It is still rendered, but at least is no longer available for selection. Same goes for rocks.

#151 wontfix rmgen: harvestability of trees Jan Wassenberg
Description

Cantabrian Generated map: can only harvest the 3 trees on the plateau. Other trees (even if in the current territory where I can build) cannot be harvested.

#152 fixed Crash on exit when researching Jan Wassenberg Nicolai Hähnle
Description

This bug occured in SVN r4384

To reproduce:

  1. Launch CantabrianHighland-Mythos
  2. In the Barracks to the left: start researching something
  3. Hit Escape to exit the game
#153 fixed Floating actors Philip Taylor Philip Taylor
Description

From meeting - it should be possible to specify that certain actors should float on top of water instead of following the terrain.

  • Add flag to actor XML
  • Add checkbox to Actor Editor
  • Make game use that when sticking nonentities onto the ground
#154 fixed COLLADA Philip Taylor
Description

As here:

  • Create .dae -> .pmd, .pma converter
    • for static objects (e.g. buildings)
    • for animated bipeds
    • for arbitrary skeletons (skinned, or multiple meshes linked to bones)
  • Make game check for presence of updated .dae when reading .pmd/.pma files and convert it if necessary
  • Things that should probably be split into further tickets in the future:
    • Create .pmd, .pma -> .dae converter so people can modify our current files
    • Use the newly available mesh information and tools to create more optimal .pmd files
#155 fixed GCC PCH Simon Brenner Philip Taylor
Description

Premake isn't setting up PCH properly for GCC. (lib/config.h was defining HAVE_PCH, but the project isn't being compiled with PCH so that doesn't work.)

From the docs, it looks like we just need to make it compile precompiled.h into precompiled.gch before doing the rest of the source files (whatever.cpp into whatever.o). That'd probably require modifying Premake's source so it handles the pchsource/pchheader settings differently to MSVC - it should ignore the pchsource and just add the pchheader as the first compiled file.

#156 fixed Premake on Linux creates bogus directories Simon Brenner Philip Taylor
Description

After running update-workspaces.sh (in particularly the line that calls premake with --outpath), it creates a number of mode 000 directories inside the premake directory:

$ ls -al ../premake/     
total 857
drwxr-xr-x 11 philip users    424 Sep 30 18:55 .
drwxr-xr-x 11 philip users    296 Sep 30 13:28 ..
drwxr-xr-x  7 philip users    328 Sep 30 14:52 .svn
d---------  2 philip users     48 Sep 30 18:55 0ad
d---------  2 philip users     48 Sep 30 18:55 build
-rw-r--r--  1 philip users   6165 Sep 30 13:27 extern_libs.lua
-rwxr-xr-x  1 philip users    495 Sep 30 13:27 functions.lua
d---------  2 philip users     48 Sep 30 18:55 gcc
d---------  2 philip users     48 Sep 30 18:55 home
d---------  2 philip users     48 Sep 30 18:55 philip
-rwxr-xr-x  1 philip users 563342 Sep 30 13:39 premake
-rwxr-xr-x  1 philip users 278528 Sep 30 13:26 premake.exe
-rwxr-xr-x  1 philip users  19926 Sep 30 13:26 premake.lua
drwxr-xr-x  5 philip users    376 Sep 30 13:39 src
d---------  2 philip users     48 Sep 30 18:55 trunk
d---------  2 philip users     48 Sep 30 18:55 workspaces

(I'm not sure if this is just a Premake bug - if it is, we should see if it's been fixed in recent versions, and if not then fix it and submit a patch.)

#157 fixed Can't initialise VFS more than once Jan Wassenberg Philip Taylor
Description

test_archive_builder.h has setUp/tearDown to initialise/shutdown VFS and related things. But it doesn't shut down cleanly - if you add another test case in that test suite, it dies with various errors when running setUp for the second time. That also affects any other test suites which are wanting to initialise the VFS so it's available to the tested code.

#158 fixed CLogger unit test failure on Linux Philip Taylor Philip Taylor
Description

The tests fail, probably because of differences between vsnprintf2 (the implementation used on Windows, based on MSVC's _vsnprintf) and vsnprintf (as implemented in glibc) in handling strings that are larger than the buffer.

../../../source/ps/tests/../../../source/ps/tests/test_CLogger.h:46: Error: Expected (lines[1] == msg1), found ("******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************" != "*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************")
../../../source/ps/tests/../../../source/ps/tests/test_CLogger.h:47: Error: Expected (lines[2] == clipped), found ("******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************" != "****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************...")
../../../source/ps/tests/../../../source/ps/tests/test_CLogger.h:48: Error: Expected (lines[3] == clipped), found ("******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************" != "****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************...")
#159 fixed TestPathUtil tests fail on Linux Jan Wassenberg Philip Taylor
Description
In TestPathUtil::test_append:
../../../source/lib/tests/../../../source/lib/tests/test_path_util.h:12: Error: Expected (std ::string(dst) == std::string(correct_result)), found ("abc\\/def" != "abc\\def")
.
In TestPathUtil::test_name_only:
../../../source/lib/tests/../../../source/lib/tests/test_path_util.h:28: Error: Expected (std ::string(result) == std::string(correct_result)), found ("abc\\def\\ghi" != "ghi")
../../../source/lib/tests/../../../source/lib/tests/test_path_util.h:28: Error: Expected (std ::string(result) == std::string(correct_result)), found ("def\\ghi" != "ghi")
In TestPathUtil::test_last_component:
../../../source/lib/tests/../../../source/lib/tests/test_path_util.h:34: Error: Expected (std ::string(result) == std::string(correct_result)), found ("abc\\def\\ghi" != "ghi")
../../../source/lib/tests/../../../source/lib/tests/test_path_util.h:34: Error: Expected (std ::string(result) == std::string(correct_result)), found ("def\\ghi" != "ghi")
../../../source/lib/tests/../../../source/lib/tests/test_path_util.h:34: Error: Expected (std ::string(result) == std::string(correct_result)), found ("abc\\def\\ghi\\" != "ghi\\")
../../../source/lib/tests/../../../source/lib/tests/test_path_util.h:34: Error: Expected (std ::string(result) == std::string(correct_result)), found ("def\\ghi/" != "ghi/")
In TestPathUtil::test_strip_fn:
../../../source/lib/tests/../../../source/lib/tests/test_path_util.h:42: Error: Expected (std ::string(path) == std::string(correct_result)), found ("" != "abc\\def\\")
../../../source/lib/tests/../../../source/lib/tests/test_path_util.h:42: Error: Expected (std ::string(path) == std::string(correct_result)), found ("abc/" != "abc/def\\")
../../../source/lib/tests/../../../source/lib/tests/test_path_util.h:42: Error: Expected (std ::string(path) == std::string(correct_result)), found ("" != "abc\\def\\ghi\\")
.
In TestPathUtil::test_path_package:
../../../source/lib/tests/../../../source/lib/tests/test_path_util.h:57: Error: Expected (std ::string(pp.path) == std::string(correct_result)), found ("a\\b\\/c" != "a\\b\\c")
#160 fixed lockfree tests fail on Linux Jan Wassenberg Philip Taylor
Description
lockfree.cpp(179): Assertion failed: "tls_key != 0"
Assertion failed: "tls_key != 0"
Location: lockfree.cpp:179 (tls_alloc)
errno = 0 (?)
OS error = ?

Call stack:

(0x084e4999) allocators.cpp:621 bucket_create(Bucket*, unsigned int)
(0x084e4be0) allocators.cpp:166 validate_da
(0x084e5239) allocators.cpp:581 pool_free_all(Pool*)
(0x082d7f14) stl_iterator_base_funcs.h:118 std::iterator_traits<__gnu_cxx::__normal_iterator< unsigned short*, std::basic_string<unsigned short, std::char_traits<unsigned short>, std::all ocator<unsigned short> > > >::difference_type std::distance<__gnu_cxx::__normal_iterator<unsi gned short*, std::basic_string<unsigned short, std::char_traits<unsigned short>, std::allocat or<unsigned short> > > >(__gnu_cxx::__normal_iterator<unsigned short*, std::basic_string<unsi gned short, std::char_traits<unsigned short>, std::allocator<unsigned short> > >, __gnu_cxx:: __normal_iterator<unsigned short*, std::basic_string<unsigned short, std::char_traits<unsigne d short>, std::allocator<unsigned short> > >)
(0x082d81c4) stl_construct.h:121 void std::__destroy_aux<__gnu_cxx::__normal_iterator<JSFunct ionSpec*, std::vector<JSFunctionSpec, std::allocator<JSFunctionSpec> > > >(__gnu_cxx::__norma l_iterator<JSFunctionSpec*, std::vector<JSFunctionSpec, std::allocator<JSFunctionSpec> > >, _ _gnu_cxx::__normal_iterator<JSFunctionSpec*, std::vector<JSFunctionSpec, std::allocator<JSFun ctionSpec> > >, __false_type)
(0x082b3f78) stl_algobase.h:387 HEntity* std::copy<__gnu_cxx::__normal_iterator<HEntity const *, std::vector<HEntity, std::allocator<HEntity> > >, HEntity*>(__gnu_cxx::__normal_iterator<H Entity const*, std::vector<HEntity, std::allocator<HEntity> > >, __gnu_cxx::__normal_iterator <HEntity const*, std::vector<HEntity, std::allocator<HEntity> > >, HEntity*)
(0x082b826a) stl_tree.h:817 std::_Rb_tree<CStrW, std::pair<CStrW const, int>, std::_Select1st <std::pair<CStrW const, int> >, CStrW_hash_compare, std::allocator<std::pair<CStrW const, int > > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<CStrW const, i nt> const&)
(0x082b8342) stl_tree.h:917 std::_Rb_tree<CStrW, std::pair<CStrW const, int>, std::_Select1st <std::pair<CStrW const, int> >, CStrW_hash_compare, std::allocator<std::pair<CStrW const, int > > >::insert_unique(std::pair<CStrW const, int> const&)
(0x082b8433) stl_tree.h:927 std::_Rb_tree<CStrW, std::pair<CStrW const, int>, std::_Select1st <std::pair<CStrW const, int> >, CStrW_hash_compare, std::allocator<std::pair<CStrW const, int > > >::insert_unique(std::pair<CStrW const, int> const&)
(0x082b84e9) stl_tree.h:932 std::_Rb_tree<CStrW, std::pair<CStrW const, int>, std::_Select1st <std::pair<CStrW const, int> >, CStrW_hash_compare, std::allocator<std::pair<CStrW const, int > > >::insert_unique(std::pair<CStrW const, int> const&)
(0x082b8511) stl_tree.h:942 std::_Rb_tree<CStrW, std::pair<CStrW const, int>, std::_Select1st <std::pair<CStrW const, int> >, CStrW_hash_compare, std::allocator<std::pair<CStrW const, int > > >::insert_unique(std::_Rb_tree_iterator<std::pair<CStrW const, int> >, std::pair<CStrW co nst, int> const&)
(0x082b62be) stl_pair.h:69 pair
(0xb760d878) /lib/libc.so.6:0 __libc_start_main
(0x082b36a1) stl_vector.h:776 HEntity* std::vector<HEntity, std::allocator<HEntity> >::_M_all ocate_and_copy<__gnu_cxx::__normal_iterator<HEntity const*, std::vector<HEntity, std::allocat or<HEntity> > > >(unsigned int, __gnu_cxx::__normal_iterator<HEntity const*, std::vector<HEnt ity, std::allocator<HEntity> > >, __gnu_cxx::__normal_iterator<HEntity const*, std::vector<HE ntity, std::allocator<HEntity> > >)
#162 wontfix ffmpeg licensing issues Philip Taylor
Description

Currently Atlas uses ffmpeg to encode videos. That can presumably be used to encode in lots of formats which have various patent licensing issues in various countries. Also it looks like some of libswscale says it's GPL (at least the .c files, not the .h), so we can't use it when linking (dynamically) to the ffmpeg libraries. So think about it before distributing the game (specifically AtlasUI.dll), and maybe remove libswscale/ffmpeg entirely.

#163 fixed error when exiting with 'X' button arissanightblade
Description

http://www.wildfiregames.com/forum/index.php?showtopic=10656

#164 fixed Debug messages show incorrect "OS error" Jan Wassenberg Philip Taylor
Description

Every time the game brings up its Program Error window which looks somewhat like ...

Function call failed: return value was -100101 (Case 1)
Location: allocators.cpp:174 (validate_da)
errno = 0 (?)
OS error = The system cannot find the file specified.


Call stack:

validate_da (allocators.cpp:164)
    da = 0x00CEE6A0 -> 
        base = 0x00000000
        max_size_pa = 0x00000000
        cur_size = 0x00000000
        prot = 0
        pos = 0x00000000

    pos = 0xCCCCCCCC
    prot = 0xCCCCCCCC
    base = 0xCCCCCCCC
    cur_size = 0xCCCCCCCC
    max_size_pa = 0xCCCCCCCC

... I can't help but read the one piece of understandable meaningful English on it, which is nearly always "OS error = The system cannot find the file specified.", which is nearly always completely irrelevant (because it was probably set seconds ago by some unrelated operation). Then I unfailingly get confused for a while before remembering that that message is completey irrelevant, and have to start again at trying to work out what the error is complaining about.

Since it's worse than useless in most cases (because it distracts me from what the real problem is), it would be nice to remove it. If there are cases where it's actually useful, it could at least report the error number instead of the string so it doesn't stand out (and change the "OS error" text because that's distractingly English too), and we can always look up the meaning of that number in the rare cases when it's relevant to a bug report.

So, it could look more like:

Function call failed: return value was -100101 (Case 1)

Location: allocators.cpp:174 (validate_da)

(errno=0, oserr=2)

Call stack:

validate_da (allocators.cpp:164)
    da = 0x00CEE6A0 -> 
        base = 0x00000000
        max_size_pa = 0x00000000
        cur_size = 0x00000000
        prot = 0
        pos = 0x00000000

    pos = 0xCCCCCCCC
    prot = 0xCCCCCCCC
    base = 0xCCCCCCCC
    cur_size = 0xCCCCCCCC
    max_size_pa = 0xCCCCCCCC

and then it's still not very helpful but at least it's not misleading, and I can see I should just look in the code or the debugger to work out what's wrong.

#165 fixed VFS_MOUNT_ARCHIVABLE is unused Jan Wassenberg Philip Taylor
Description

VFS_MOUNT_ARCHIVABLE is never used, except for being passed to (then ignored by) vfs_mount.

But mount_is_archivable tests for VFS_MOUNT_ARCHIVES - is that where ARCHIVABLE should be used instead? (The comment in source:ps/trunk/source/lib/res/file/vfs_optimizer.cpp@4703#L161 talks about VFS_MOUNT_ARCHIVE which doesn't even exist.)

#166 fixed Move TDD Wiki onto Trac Philip Taylor Philip Taylor
Description

It would be nice if the TDD Wiki was on Trac instead of MediaWiki, to simplify administration (user accounts, backups, etc). It should be possible to export the pages from MediaWiki, do some conversion, and import them into Trac without too much manual effort.

#167 fixed Assertion failure when reading trace file Jan Wassenberg Philip Taylor
Description

The assertion at source:ps/trunk/source/lib/res/file/trace.cpp@4706#L202 fails with start_idx = 25243, t->total_ents = 25225.

trace.txt is 25326 lines, with the last run's delimeter on line 25243, with a total of 101 delimeters. 25326 - 101 = t->total_ents, and 25243 = start_idx. So it looks like the problem is that start_idx counts the divider lines, while t->total_ents doesn't, and so it fails if the number of divider lines is greater than the size of the last run in the file.

#168 invalid Google Earth 4 (KMZ) importer Philip Taylor
Description

Google SketchUp can export a model into the KMZ format, which is a zip file and usually contains textures and a COLLADA mesh. Given that SketchUp is more intuitive and easy to learn than e.g. Blender, it could be quite nice for inexperienced modders if they could use it to get basic models into the game easily.

#169 fixed Terrain quad rendering uses unspecified triangulation Philip Taylor
Description

The terrain renderer draws non-planar GL_QUADS. The OpenGL spec just says

For a polygon with more than three edges, we require only that a convex combination of the values of the datum at the polygon's vertices can be used to obtain the value assigned to each fragment produced by the rasterization algorithm.

which in practice seems to result in the quad being triangulated along an arbitrary diagonal. Since there's no way to know exactly what's going to happen, and particularly since what happens isn't very good, we need to split the quads into triangles ourselves.

It is presumably sensible to split each quad along the diagonal that minimises the angle between the two triangles.

#171 fixed GL extension loading slightly incorrect on Linux ben Philip Taylor
Description

ogl.cpp does:

	p##nameARB = NULL;
	if(oglHaveVersion(version))
		*(void**)&p##nameARB = SDL_GL_GetProcAddress(#nameCore);
	if(!p##nameARB) /* use the ARB name if the driver lied about what version it supports */
		*(void**)&p##nameARB = SDL_GL_GetProcAddress(#nameARB);

But glXGetProcAddress never returns NULL. In the case where "the driver lied about what version it supports", it will still return a non-NULL function pointer, which will crash when it is called, even if there would have been a valid function pointer when we used the ARB name.

(NVIDIA's OpenGL implementation is different, and does (when I test it) return NULL for functions that it doesn't have. But the xorg-x11 implementation only returns NULL for non-existent glX* functions or for names not starting with "gl", and it returns non-NULL for any arbitrary gl[^X]* name.)

Hopefully it doesn't actually matter for us, since ogl.cpp seems to be the only place where we're testing the NULLness of the function pointers, and since ogl.cpp should still work correctly as long as the driver reports its GL version correctly (which it should). So I don't think there's anything we should actually do, except be aware of the issue.

#172 wontfix Fast shutdown Jan Wassenberg Philip Taylor
Description

(See 2007-01-06 meeting notes.)

The game usually takes a while to shut down since it frees all its resources before exiting, but there isn't any need to do that when people are just playing the game (as opposed to being developers who want to check for resource leaks). Some things probably still need to be shut down cleanly (network, video, log files, etc), but it should be possible to make it much faster than it is now.

#173 wontfix Odd rendering errors with renderpath=vertexshader Philip Taylor
Description

On a GF4, I get distorted models (e.g. some vertexes move to the wrong side of the screen when certain objects are being rendered) when using renderpath=vertexshader, which is fixed with renderpath=fixed. I think I remember we decided the issue was with linking vertex programs together multiple times in different ways, and it could be fixed by duplicating the programs so they were linked once each.

Bobby also reports problems (lighting on models is green when self-shadowing is enabled) which are fixed by renderpath=fixed, on a Radeon 9700 Pro. I have no idea if that is related to the same linking issue, but it'd be worth investigating and fixing.

#174 fixed premake.lua incorrectly defines __STDC_VERSION__ on GCC Philip Taylor
Description

premake.lua says:

package.defines = {
    "__STDC_VERSION__=199901L",
    "CONFIG_USE_MMGR",
}

sysdep.h says:

for some reason, g++-3.3 claims to support C99 (according to __STDC_VERSION__) but doesn't have the restrict keyword.

So it's our fault that we get a little confused by GCC pretending to support C99 when it really doesn't.

Claiming to support C99 is nonsensical in any case, because we're writing C++ and not C. It would probably be better to define a series of HAVE_RELEVANT_C99LIKE_FEATURE, for all the relevant C99-like features which GCC supports in its normal nonstandard C++ mode.

#175 fixed Load SoundGroup table from entity XMLs Matei Matei
Description

It should be possible to specify a sound for each animation, using code such as:

<Entity>
        ...

	<SoundGroups>
		<Walk>infantry_walk.xml</Walk>
		<Run>infantry_run.xml</Run>
		<Death>screams.xml</Death>
		<Gather_wood>axe_chopping.xml</Gather_wood>
		<Gather_stone>pickaxe.xml</Gather_stone>
	</SoundGroups>
</Entity>

These should be in a hashmap in CEntityTemplate.

#176 fixed Crash in aura code Matei Philip Taylor
Description

When running the cinematics.pmp simulation in Atlas, it crashes after a while in the aura-handling code.

Some script calls CEntity::Kill, which calls Remove on everything in m_aurasInfluencingMe. That fails because the CAura* in there is not valid - it's a readable pointer but the contents are rubbish (seemingly being used by some other object, since it's not the default debug memory-fill pattern).

#177 fixed Corpses disappear after the death animation is played Matei
Description

When units with a death animation die, a corpse showing the last frame of this animation should persist. However, they currently just disappear. Could be related to changes in [4810].

#178 fixed Decouple entity simulation and actor animation Philip Taylor
Description

Let the entity code simply tell the actor to switch to a certain animation state, and not worry about any timing details itself. The actor should handle looping, randomisation, and potentially things like blending. The animation speed should be determined just by the actor XML.

Change the entity XML files to store only a Rate (units per second) for actions, rather than Speed+Rate. Update the simulation world at a fixed frequency, independent of the animation speed.

Experiment with the same for attack animations to see if it still looks alright, but at least keep projectile launches synchronised.

#179 wontfix Alpha-channel problems with NVemulate and renderpath=vertexshader Philip Taylor
Description

When running the game with [NVemulate http://developer.nvidia.com/object/nvemulate.html], set to any emulation mode (NV30, NV40, G80), on a GeForce 4, with renderpath=vertexshader, transparent textures look like in the attachment: parts with alpha=255 (e.g. leaf centres) are usually transparent or stripey, and flicker as you zoom in and out. It works correctly when renderpath=fixed.

Looks like some kind of z-accuracy issue, where models use two different implementations of vertex transformation and end up at slightly different z value? (I'm not sure if it's only ever an issue with NVemulate, or if it can affect real hardware too.)

#180 fixed Default DepthTextureBits is very slow on GF4 Philip Taylor
Description

By default, the shadow DepthTextureBits is 16. With a GF4, that is very slow compared to other depths - e.g. on a blank grass map, with AA disabled, it is 72fps with DepthTextureBits=32 and 23fps with DepthTextureBits=16. With 4xAA enabled, it is 36fps at 32, but only 2fps at 16.

Is a similar effect visible on other graphics cards? (Use renderer.depthTextureBits in the console to change it). If so, presumably the default should be changed; otherwise, the default should depend on the hardware.

#181 wontfix Possibly broke stamina decay when running to target Philip Taylor
Description

r3568 added m_isRunning = false in the m_fsm_anipos bit of entities, apparently so that

Stamina no longer decays when you finish running to something and start attacking/gathering it.

In r4880 I've removed all that m_fsm_anipos code (including the running fix), so it's quite possible that I reintroduced the above problem. But I haven't tested it and haven't tried to fix it, since I'm not sure how, so it should probably be investigated later and fixed if necessary.

#184 worksforme Assertion failure when running tests under Valgrind Philip Taylor
Description

Running test_2_build_dbg in Valgrind with Memcheck results in the error:

file_cache.cpp(928): Assertion failed: "ret.second == true"
udbg_init: loading symbols from ./test_2_build_dbg.
Assertion failed: "ret.second == true"
Location: file_cache.cpp:928 (add)

Call stack:

(0x084d4c4b) file_cache.cpp:928 ExactBufOracle::add(unsigned char const*, unsigned int, unsigned char const*)
(0x084cdd47) file_cache.cpp:1128 file_buf_add_padding(unsigned char const*, unsigned int, unsigned int)
(0x084b472a) file_io.cpp:638 IOManager::run()
(0x084b2bc5) file_io.cpp:666 file_io(File*, long, unsigned int, unsigned char const**, long (*)(unsigned int, void const*, unsigned int, unsigned int*), unsigned int)
(0x084c4ef8) vfs_redirector.cpp:233 xfile_io(File*, long, unsigned int, unsigned char const**, long (*)(unsigned int, void const*, unsigned int, unsigned int*), unsigned int)
(0x084c6548) vfs.cpp:387 vfs_io(long long, unsigned int, unsigned char const**, long (*)(unsigned int, void const*, unsigned int, unsigned int*), unsigned int)
(0x084c6947) vfs.cpp:435 vfs_load(char const*, unsigned char const*&, unsigned int&, unsigned int, long (*)(unsigned int, void const*, unsigned int, unsigned int*), unsigned int)
(0x084bc6e6) archive_builder.cpp:142 read_and_compress_file
(0x084bc89b) archive_builder.cpp:215 archive_build_continue(ArchiveBuildState*)
(0x084bcb10) archive_builder.cpp:254 archive_build(char const*, char const**)
(0x0824303a) test_archive_builder.h:110 TestArchiveBuilder::test_create_archive_with_random_files()
(0x08243da6) test_archive_builder.cpp:24 TestDescription_TestArchiveBuilder_test_create_archive_with_random_files::runTest()
(0x08229333) RealDescriptions.cpp:96 CxxTest::RealTestDescription::run()
(0x0822b92c) TestRunner.h:75 CxxTest::TestRunner::runTest(CxxTest::TestDescription&)
(0x0822ba04) TestRunner.h:59 CxxTest::TestRunner::runSuite(CxxTest::SuiteDescription&)
(0x0822baf5) TestRunner.h:44 CxxTest::TestRunner::runWorld()

errno = 0 (?)
OS error = ?

It works correctly when run outside Valgrind, and when run with valgrind --tool=none. (I haven't investigated whether this is a real problem in our code or not.)

#186 fixed Automatic archiving is annoying Jan Wassenberg Philip Taylor
Description

The automatic archiver runs pretty much every time I start the game (probably because I don't start the game very often and so several data files change in the meantime). It takes ages, and tends to leave multiple giant zip files hanging around, and wastes much more time than simply loading slower unarchived files, and it leaves the game window (and sometimes the whole computer) unresponsive while it's working.

I'd be much happier if it was manually activated instead - people could run it once if they care about the loading speed, and the time lost to loading loose files after the archive becomes out of date would be more than made up for by the time gained by never automatically rebuilding the archive. We can run the archiver once manually when distributing the game, and no normal user (including modders) will change enough files for it to ever be worth automatically rebuilding the archive, particularly since it happens precisely when they're trying to play the game and it stops them from doing so. (It wouldn't be so bad if it happened at installation-time for large patches.)

(Or maybe I'm misinterpreting the problem and it's just not using the mini archives like it should do (since they never look mini - they're always about 60MB), or something.)

...

Oh, it's finished rebuilding now, I'll get back to work ;-)

#187 wontfix Heap usage profiling Philip Taylor
Description

Currently the in-game profiler shows the number of memory allocations per frame in each profile node (at least when compiled with MSVC and the Debug CRT). It might be nice to also show the total amount of still-allocated memory that has ever been allocated under a particular node, to see which bits are responsible for using lots of memory. I expect that could be done without much pain by using _CrtSetAllocHook to catch allocations and frees: allocations can be added to the count in the current profile node, and some kind of map can store the allocation request number and the current node (I'm hoping you can remember nodes like that), and frees can look up the appropriate node to subtract the size from (because we don't want to count freed memory, and because it's not necessarily going to be freed in the same place as it was allocated). That'd be a little slow, so it should be optional and disabled by default.

#188 wontfix Entities might use inconsistent units for Range/LOS Philip Taylor
Description

I haven't checked it properly, but Michael reported possible confusion between the measurements for Range and for LOS, and it seems quite plausible that Range is measured in world-space units while LOS is measured in tiles. If that's the case, it's unpleasantly confusing and should be made consistent (probably all measured in tiles, because the editor gives people some idea of roughly how large a tile is).

#189 fixed Entity deletion doesn't work properly Philip Taylor Philip Taylor
Description

After deleting entities, they tend to still exist in an invisible ghostly form and attack people when you play the simulation from within the editor.

They should be deleted properly from the entity manager, instead of the current pseudo-deletion. To allow undo, serialise the entity into some form (same as when you play/reset the simulation) on deletion and then reconstruct it on undo.

#190 fixed COLLADA: split skeleton definitions into moddable files leper Philip Taylor
Description

The skeleton definitions should be located in mods/*/art/skeletons/*.xml, and all the files matching that pattern should be loaded. That would allow modders to add their own skeleton definitions, just by creating a new file (rather than overwriting the existing one). It would also reduce the number of animations that get cache-invalidated when a single skeleton definition is tweaked.

#191 duplicate COLLADA: prop points on non-skeletal models Philip Taylor
Description

Let prop points be specified on non-skeletal models. The engine supports that already, when you set the bone index to 0xFF. The COLLADA converter should look for objects named prop-* attached to the geometry. Might as well support non-boned prop points on skeletal models, too.

#194 fixed Update TracWebAdmin Philip Taylor
Description

The currently-installed version of TracWebAdmin doesn't work with Trac 0.10, so it should be updated. (The newest version only seems to be available from SVN, not as an Egg file, which makes it slightly less trivial.)

#195 fixed Support more mouse buttons JoshuaJB Philip Taylor
Description

Currently only five buttons (left, right, middle, wheel-up, wheel-down) are supported. It might be nice if users could map functions onto other buttons (e.g. my mouse has seven additional buttons).

#196 duplicate Atlas: Problem when removing/deleting units Philip Taylor Jan Wassenberg
Description

how to duplicate:

load cinematic feb 2007 map
delete all red troops in middle of stream and a few rocks as well
  (rocks are optional, happens with or without them deleted)
start simulation. in debug mode, nothing happens for ~5sec, then it starts
arrows/spears from the invisible removed guys fly
the blue guys are apparently engaging some of these invisible removed guys
after 1..2min, some of the red ones reappear (first one, then clumps of
  2..3 at a  time several seconds apart)
exit without resetting sim state => crash in objecthandlers:722
problem is ~cDeleteObject()'s delete m_UnitInLimbo: the CUnit has
  apparently already been freed and its fields are mostly 0xCDCDCDCD.

DeleteObject::Redo says:

HACK: I don't know the proper way of undoably deleting entities...

And does: unit->GetEntity()->entf_set(ENTF_DESTROYED); I note that CEntity::Kill is doing a lot more work, especially

g_EntityManager.m_refd[me.m_handle] = false; refd must be made false when DESTROYED is set

Could this be the problem, that it's not doing that?

#197 wontfix FAM hotloading might miss some files Philip Taylor
Description

The FAM code in source:/ps/trunk/source/lib/sysdep/unix/dir_watch_fam.cpp has to be careful about waiting for certain events after starting to monitor a directory, but it isn't careful about what to do with unexpected events in the queue - if somebody modifies a file while other directories are being mounted, the event might get lost and the game won't notice their change.

This is rare enough (and has a harmless enough effect) that I don't think it's worth trying to fix.

#199 fixed Hook up the SoundGroup system Jan Wassenberg
Description

The SoundGroup system for choosing random sounds is not yet in use. The current placeholder code enumerates all audio files in a certain subpath, which works but is slow and inflexible (see http://www.wildfiregames.com/forum/index.php?showtopic=10924&hl= for an overview and list of links that detail the sound system design).

Here's a list of what I think is necessary to get the SoundGroup show on the road:

  • during init, create all the sound groups we'll be needing (e.g. attack grunts, death, ...) and associate them with entity classes
  • .. by storing a string or index that identifies the sound group in entity.traits.audio.path instead of path (as now)
  • create a script interface for the SoundGroup that allows calling it from our Javascript event handlers (this is where the performAttack logic runs). This kind of thing is pretty much boilerplate, we can refer to stuff like JSI_Sound.cpp to get an idea of what to do.
  • replace newRandomSound with the corresponding new function that basically just calls CSoundGroup::PlayNext
  • add a call to CSoundGroupMgr::Update in the main game loop
#200 fixed UI: disable not-yet-implemented features Jan Wassenberg
Description
  • production queue: at least feedback that something is being built.
    Matei: maybe a list box or something showing just a list of items in the queue, with add/delete buttons.
  • Disable formations and all other non-implemented UI stuff
    (remove entirely from scripts by commenting them out)
  • disable game setup stuff that's not implemented
#202 invalid test Jan Wassenberg
Description

test1

#203 fixed Combat Crash Michael D. Hafer
Description

Crash occurs in-game as well as in Atlas simulation when initiating combat. Problem seems to me to reside with Super Infantry, as other types of units do not cause such a crash. I assume this could be entity related, but scanning the template_unit_super and template_unit_super_infantry entities does not immediately present any issues with coding. grrr

#205 fixed PMD/PSA skeleton mismatches should be reported nicely Philip Taylor
Description

http://www.wildfiregames.com/forum/index.php?s=&showtopic=11872&view=findpost&p=192546

Currently, skeleton mismatches are only detected and reported if the number of bones differs. The PMD and PSA files ought to store their skeleton name, so mismatches can be detected properly and reported nicely.

#206 fixed Remove NO_GUI Philip Taylor
Description

The game probably doesn't work with the NO_GUI compiler flag, and it doesn't seem a useful feature at all, and it adds complexity to the code, so the flag should just be removed entirely.

#207 fixed Linux build uses FColladaSD in Release mode Philip Taylor
Description

The Collada project gets linked with libFColladaSD.a (the debug version) in Release configurations as well as Debug. It should use libFColladaSR.a instead, since that's faster.

This probably just needs some small (but not entirely trivial) changes in extern_libs.lua

#208 wontfix Kill entity - Network support Anton Galitch
Description

Add network support when an entity is killed so the entity is killed everywhere.

#209 fixed Show idle peasants Anton Galitch
Description

By clicking on this button, all idle resource gathering units (women ?) should be selected.

#210 fixed Skybox is uninitialized Jan Wassenberg
Description

In an MP game (Oasis), scrolling off the map shows that the skybox is uninitialized or filled with garbage (looks like a terrain texture, but Wijit was seeing something else).

#211 fixed Oasis map requires non-public files Jan Wassenberg
Description

When loading Oasis in MP, having started the game with -quickstart and -onlyPublicFiles, a VFS file load error is produced.

It turns out that "art/textures/skies/mountainous/front.dds" is the only file that is not found, after that the map loads successfully.

#212 fixed Player control of enemy units Jan Wassenberg
Description

In MP games (specifically Oasis with 2 players), blue (the host) can move red's (the second player's) units .

#213 wontfix Gameplay: charge bonus is awarded incorrectly Jan Wassenberg
Description

Michael reports: I can get the charge bonus no matter how many times I double click the enemy unit. Apparently there is no minimum must-have-run-this-far range before awarding the bonus, which would be good for avoiding exploits.

#214 fixed Exception reading 0x45C Anton Galitch Jan Wassenberg
Description

Encountered by Erik whilst attempting MP on Latium map with Anton: in CEntity::UpdateXZOrientation(), apparently m_base is invalid, thus causing an access violation. Since inheritance is data-driven, we should add checks (especially in this function, likely in others as well) whether m_base is valid at all. If not, try to use reasonable defaults.

#215 fixed GUI: Display of entity properties hides other information Anton Galitch Jan Wassenberg
Description

In an MP game of Oasis, the blue (host's) cavalry can be clicked upon to show unit details in the upper-left corner of the screen. Here, the range information is displayed with very many digits, thus overwriting the next field. It would be good to display all floating-point information in the GUI with one digit of precision, which can be expressed in printf via "%.1f".

#216 fixed Chat doesn't work in multiplayer brian Jan Wassenberg
Description

Chat is a fairly important part of the game being playable. As soon as a client connects, it would be good to be able to chat (the previous mechanism having been entering any line of text not starting with : or ? into the console).

We used to have this functionality, but it was a part of the previous network code and apparently still needs work.

#217 fixed JS warnings that show up in the console Anton Galitch Jan Wassenberg
Description

After loading a MP game (Oasis), the following warnings/errors show up in the console:

gui/test/functions_utility_list.js:142: TypeError: getGuiObjectByName(objectName) has no properties

setCurrItemValue(): pgSessionSetupPO (<- could also be a 0) not found

#218 fixed Assertion failed when hosting MP after incorrect join Anton Galitch
Description

Actions to reproduce: Click on multiplayer. Join. Any ip (I tried with 127.0.0.1) where there is no server. (A message will popup saying that could connect.) Go back Host game. [Error.]

Assertion failed: "!ms_singleton" Location: Singleton.h:28 (Singleton<class CNetHost>::Singleton)

Call stack:

Singleton<CNetHost>::Singleton<CNetHost> (singleton.h:28)

this = (unavailable)

CNetHost::CNetHost (netsession.cpp:23)

this = (unavailable)

CNetServer::CNetServer (netserver.cpp:28)

this = (unavailable) pGame = 0x0EA9C030 ->

(boost::noncopyable_::noncopyable) m_World = 0x0EB1AED8 ->

(boost::noncopyable_::noncopyable) m_pGame = 0x0EA9C030 (see above) m_Terrain = 0x0EB43830 ->

m_MapSize = 0 (0x00000000) m_MapSizePatches = 0 (0x00000000) m_Patches = 0x00000000 m_Heightmap = 0x00000000 m_BaseColour =

R = [8] { 255 (0xFF), 255 (0xFF), 255 (0xFF), 255 (0xFF), 0 (0x00), 0 (0x00), 0 (0x00), 0 (0x00) } G = [8] { 255 (0xFF), 255 (0xFF), 255 (0xFF), 0 (0x00), 0 (0x00), 0 (0x00), 0 (0x00), 37 (0x25) } B = [8] { 255 (0xFF), 255 (0xFF), 0 (0x00), 0 (0x00), 0 (0x00), 0 (0x00), 37 (0x25), 193 (0xC1) } A = [8] { 255 (0xFF), 0 (0x00), 0 (0x00), 0 (0x00), 0 (0x00), 37 (0x25), 193 (0xC1), 91 (0x5B) }

m_UnitManager = 0x0EB43810 ->

m_Units = (error -100500 while analyzing vector<CUnit * >) m_NextID = 0 (0x00000000) m_ObjectManager = 0x0EB702A0 ->

(boost::noncopyable_::noncopyable) m_MeshManager = 0x0EB70260 ->

(boost::noncopyable_::noncopyable) m_MeshMap =

(error -100406 while analyzing _Container_base) comp = (CStr8_hash_compare)

_List = (error -100500 while analyzing list<pair<CStr8 const ,boost::weak_ptr<CModelDef> > >) _Vec = (error -100406 while analyzing vector<list<pair<CStr8 const ,boost::weak_ptr<CModelDef> > >::_Iterator<0> >) _Mask = 15 (0x0000000F) _Maxidx = 16 (0x00000010) _Max_bucket_size = 1.000000 (0x3F800000)

m_ColladaManager = 0x0EB7025C ->

m = 0x0EB43850 ->

dll =

m_Name = 0x0150E31C -> "Collada" m_Handle = 0x00000000

set_logger = 0xFE4EF270 -> set_skeleton_definitions = 0xFD14F377 -> convert_dae_to_pmd = 0xFC3CF462 -> convert_dae_to_psa = 0xFBA1F4A5 ->

m_SkeletonAnimManager = 0x0EB70290 ->

(boost::noncopyable_::noncopyable) m_Animations = (error -100500 while analyzing map<CStr8,CSkeletonAnimDef * >) m_ColladaManager = 0x0EB7025C (see above)

m_Objects = (error -100500 while analyzing map<CObjectManager::ObjectKey,CObjectEntry * >) (too much output; skipping to next top-level symbol)

m_EntityManager = 0x0EB4E608 ->

m_entities = [16384]

{ m_entity = 0x00000000, m_refcount = 0 (0x0000) } { m_entity = 0x00000000, m_refcount = 0 (0x0000) } { m_entity = 0x00000000, m_refcount = 0 (0x0000) } { m_entity = 0x00000000, m_refcount = 0 (0x0000) } { m_entity = 0x00000000, m_refcount = 0 (0x0000) } { m_entity = 0x00000000, m_refcount = 0 (0x0000) } { m_entity = 0x00000000, m_refcount = 0 (0x0000) } { m_entity = 0x00000000, m_refcount = 0 (0x0000) } ...

m_refd = (error -100406 while analyzing bitset<16384>) m_reaper = (error -100500 while analyzing vector<CEntity * >) m_collisionPatches = 0x00000000 m_nextalloc = 0 (0x00000000) m_death = false m_collisionPatchesPerSide = 13365591 (0x00CBF157) m_entityClassData = (error -100500 while analyzing map<size_t,map<CStrW,int > >) m_screenshotMode = false

m_ProjectileManager = 0x0EAC6428 ->

m_LastTurnLength = 0 (0x00000000) m_Projectiles = (error -100500 while analyzing list<CProjectile * >)

m_LOSManager = 0x0EB437F0 ->

m_VisibilityMatrix = 0x00000000 m_TilesPerSide = 10 (0x0000000A) m_TilesPerSide_1 = 0 (0x00000000) m_LOSSetting = LOS_SETTING_NORMAL m_FogOfWar = true

m_TerritoryManager = 0x0EB1B6A8 ->

m_Territories = (error -100500 while analyzing vector<CTerritory * >) m_TerritoryMatrix = 0x00000000 m_TilesPerSide = 1953066081 (0x74696C61) m_DelayedRecalculate = false

m_Simulation = 0x0EB6EE40 ->

m_pGame = 0x0EA9C030 (see above) m_pWorld = 0x0EB1AED8 (see above) m_pTurnManager = 0x0EB706A4 ->

m_Clients = (error -100406 while analyzing vector<CTurnManager::SClient >) m_Batches = [3]

m_Messages = (error -100406 while analyzing vector<CTurnManager::SMessageSyncEntry >) m_TurnLength = 300 (0x0000012C)

m_Messages = (error -100406 while analyzing vector<CTurnManager::SMessageSyncEntry >) m_TurnLength = 300 (0x0000012C)

m_Messages = (error -100406 while analyzing vector<CTurnManager::SMessageSyncEntry >) m_TurnLength = 300 (0x0000012C)

m_pRecord = 0x0DF402C9 ->

m_IsRecording = false m_pTurnManager = 0x00000000

m_Time = 0 (0x0000000000000000) m_DeltaTime = 0 (0x0000000000000000) m_Random =

x = [1248]

5489 (0x00001571) 1301868182 (0x4D98EE96) 2938499221 (0xAF25F095) 2950281878 (0xAFD9BA96) 1875628136 (0x6FCBD068) 751856242 (0x2CD06A72) 944701696 (0x384F0100) 2243192071 (0x85B46507) 694061057 (0x295E8801) 219885934 (0x0D1B316E) 2066767472 (0x7B305E70) 3182869408 (0xBDB6BBA0) ...

i = 624 (0x00000270)

m_GameView = 0x0EA0C8C0 ->

(Scene) (boost::noncopyable_::noncopyable) m = 0x0EB701F0 ->

(IJSObject) m_JS = 0x00000000 m_NonsharedProperties =

(error -100406 while analyzing _Container_base) comp = (CStrW_hash_compare)

_List = (error -100500 while analyzing list<pair<CStrW const ,IJSProperty *> >) _Vec = (error -100406 while analyzing vector<list<pair<CStrW const ,IJSProperty *> >::_Iterator<0> >) _Mask = 15 (0x0000000F) _Maxidx = 16 (0x00000010) _Max_bucket_size = 1.000000 (0x3F800000)

m_ScriptProperties =

(error -100406 while analyzing _Container_base) comp = (CStrW_hash_compare)

_List = (error -100500 while analyzing list<pair<CStrW const ,IJSProperty *> >) _Vec = (error -100406 while analyzing vector<list<pair<CStrW const ,IJSProperty *> >::_Iterator<0> >) _Mask = 15 (0x0000000F) _Maxidx = 16 (0x00000010) _Max_bucket_size = 1.000000 (0x3F800000)

m_EngineOwned = true

(boost::noncopyable_::noncopyable) Game = 0x0EA9C030 (see above) ColladaManager =

m = 0x0EB43850 (see above)

MeshManager =

(boost::noncopyable_::noncopyable) m_MeshMap =

(error -100406 while analyzing _Container_base) comp = (CStr8_hash_compare)

_List = (error -100500 while analyzing list<pair<CStr8 const ,boost::weak_ptr<CModelDef> > >) _Vec = (error -100406 while analyzing vector<list<pair<CStr8 const ,boost::weak_ptr<CModelDef> > >::_Iterator<0> >) _Mask = 15 (0x0000000F) _Maxidx = 16 (0x00000010) _Max_bucket_size = 1.000000 (0x3F800000)

m_ColladaManager = 0x0EB7025C (see above)

SkeletonAnimManager =

(boost::noncopyable_::noncopyable) m_Animations = (error -100500 while analyzing map<CStr8,CSkeletonAnimDef * >) m_ColladaManager = 0x0EB7025C (see above)

ObjectManager =

(boost::noncopyable_::noncopyable) m_MeshManager = 0x0EB70260 (see above) m_SkeletonAnimManager = 0x0EB70290 (see above) m_Objects = (error -100500 while analyzing map<CObjectManager::ObjectKey,CObjectEntry * >) m_ObjectBases = (error -100500 while analyzing map<CStr8,CObjectBase * >)

ViewCamera =

m_Orientation =

_11 = 1.000000 (0x3F800000) _21 = 0.000000 (0x00000000) _31 = 0.000000 (0x00000000) _41 = 0.000000 (0x00000000) _12 = 0.000000 (0x00000000) _22 = 0.866025 (0x3F5DB3D7) _32 = 0.500000 (0x3F000000) _42 = 0.000000 (0x00000000) _13 = 0.000000 (0x00000000) _23 = -0.500000 (0xBF000000) _33 = 0.866025 (0x3F5DB3D7) _43 = 0.000000 (0x00000000) _14 = 100.000000 (0x42C80000) _24 = 150.000000 (0x43160000) _34 = -100.000000 (0xC2C80000) _44 = 1.000000 (0x3F800000) _data = [16]

1.000000 (0x3F800000) 0.000000 (0x00000000) 0.000000 (0x00000000) 0.000000 (0x00000000) 0.000000 (0x00000000) 0.866025 (0x3F5DB3D7) 0.500000 (0x3F000000) 0.000000 (0x00000000) 0.000000 (0x00000000) -0.500000 (0xBF000000) 0.866025 (0x3F5DB3D7) 0.000000 (0x00000000) ...

_data2d = [4]

[4] { 1.000000 (0x3F800000), 0.000000 (0x00000000), 0.000000 (0x00000000), 0.000000 (0x00000000) } [4] { 0.000000 (0x00000000), 0.866025 (0x3F5DB3D7), 0.500000 (0x3F000000), 0.000000 (0x00000000) } [4] { 0.000000 (0x00000000), -0.500000 (0xBF000000), 0.866025 (0x3F5DB3D7), 0.000000 (0x00000000) } [4] { 100.000000 (0x42C80000), 150.000000 (0x43160000), -100.000000 (0xC2C80000), 1.000000 (0x3F800000) }

m_ProjMat =

_11 = 4.219332 (0x408704C4) _21 = 0.000000 (0x00000000) _31 = 0.000000 (0x00000000) _41 = 0.000000 (0x00000000) _12 = 0.000000 (0x00000000) _22 = 5.671282 (0x40B57B24) _32 = 0.000000 (0x00000000) _42 = 0.000000 (0x00000000) _13 = 0.000000 (0x00000000) _23 = 0.000000 (0x00000000) _33 = 1.001955 (0x3F804010) _43 = 1.000000 (0x3F800000) _14 = 0.000000 (0x00000000) _24 = 0.000000 (0x00000000) _34 = -8.007820 (0xC1002008) _44 = 0.000000 (0x00000000) _data = [16]

4.219332 (0x408704C4) 0.000000 (0x00000000) 0.000000 (0x00000000) 0.000000 (0x00000000) 0.000000 (0x00000000) 5.671282 (0x40B57B24) 0.000000 (0x00000000) 0.000000 (0x00000000) 0.000000 (0x00000000) 0.000000 (0x00000000) 1.001955 (0x3F804010) 1.000000 (0x3F800000) ...

_data2d = [4]

[4] { 4.219332 (0x408704C4), 0.000000 (0x00000000), 0.000000 (0x00000000), 0.000000 (0x00000000) } [4] { 0.000000 (0x00000000), 5.671282 (0x40B57B24), 0.000000 (0x00000000), 0.000000 (0x00000000) } [4] { 0.000000 (0x00000000), 0.000000 (0x00000000), 1.001955 (0x3F804010), 1.000000 (0x3F800000) } [4] { 0.000000 (0x00000000), 0.000000 (0x00000000), -8.007820 (0xC1002008), 0.000000 (0x00000000) }

m_NearPlane = 4.000000 (0x40800000) m_FarPlane = 4096.000000 (0x45800000) m_FOV = 0.349066 (0x3EB2B8C2) m_ViewPort =

m_X = 0 (0x00000000) m_Y = 0 (0x00000000) m_Width = 1024 (0x00000400) m_Height = 768 (0x00000300)

m_ViewFrustum =

m_aPlanes = [10]

m_Norm =

X = 0.000000 (0x00000000) Y = 0.000000 (0x00000000) Z = 0.000000 (0x00000000)

m_Dist = 0.000000 (0x00000000)

m_Norm =

X = 0.000000 (0x00000000) Y = 0.000000 (0x00000000) Z = 0.000000 (0x00000000)

m_Dist = 0.000000 (0x00000000)

m_Norm =

X = 0.000000 (0x00000000) Y = 0.000000 (0x00000000) Z = 0.000000 (0x00000000)

m_Dist = 0.000000 (0x00000000)

m_Norm =

X = 0.000000 (0x00000000) Y = 0.000000 (0x00000000) Z = 0.000000 (0x00000000)

m_Dist = 0.000000 (0x00000000)

m_Norm =

X = 0.000000 (0x00000000) Y = 0.000000 (0x00000000) Z = 0.000000 (0x00000000)

m_Dist = 0.000000 (0x00000000)

m_Norm =

X = 0.000000 (0x00000000) Y = 0.000000 (0x00000000) Z = 0.000000 (0x00000000)

m_Dist = 0.000000 (0x00000000)

m_Norm =

X = 0.000000 (0x00000000) Y = 0.000000 (0x00000000) Z = 0.000000 (0x00000000)

m_Dist = 0.000000 (0x00000000)

m_Norm =

X = 0.000000 (0x00000000) Y = 0.000000 (0x00000000) Z = 0.000000 (0x00000000)

m_Dist = 0.000000 (0x00000000)

...

m_NumPlanes = 0 (0x00000000)

CullCamera =

m_Orientation =

_11 = 1.000000 (0x3F800000) _21 = 0.000000 (0x00000000) _31 = 0.000000 (0x00000000) _41 = 0.000000 (0x00000000) _12 = 0.000000 (0x00000000) _22 = 0.866025 (0x3F5DB3D7) _32 = 0.500000 (0x3F000000) _42 = 0.000000 (0x00000000) _13 = 0.000000 (0x00000000) _23 = -0.500000 (0xBF000000) _33 = 0.866025 (0x3F5DB3D7) _43 = 0.000000 (0x00000000) _14 = 100.000000 (0x42C80000) _24 = 150.000000 (0x43160000) _34 = -100.000000 (0xC2C80000) _44 = 1.000000 (0x3F800000) _data = [16]

1.000000 (0x3F800000) 0.000000 (0x00000000) 0.000000 (0x00000000) 0.000000 (0x00000000) 0.000000 (0x00000000) 0.866025 (0x3F5DB3D7) 0.500000 (0x3F000000) 0.000000 (0x00000000) 0.000000 (0x00000000) -0.500000 (0xBF000000) 0.866025 (0x3F5DB3D7) 0.000000 (0x00000000) ...

_data2d = [4]

[4] { 1.000000 (0x3F800000), 0.000000 (0x00000000), 0.000000 (0x00000000), 0.000000 (0x00000000) } [4] { 0.000000 (0x00000000), 0.866025 (0x3F5DB3D7), 0.500000 (0x3F000000), 0.000000 (0x00000000) } [4] { 0.000000 (0x00000000), -0.500000 (0xBF000000), 0.866025 (0x3F5DB3D7), 0.000000 (0x00000000) } [4] { 100.000000 (0x42C80000), 150.000000 (0x43160000), -100.000000 (0xC2C80000), 1.000000 (0x3F800000) }

m_ProjMat =

_11 = 4.219332 (0x408704C4) _21 = 0.000000 (0x00000000) _31 = 0.000000 (0x00000000) _41 = 0.000000 (0x00000000) _12 = 0.000000 (0x00000000) _22 = 5.671282 (0x40B57B24) _32 = 0.000000 (0x00000000) _42 = 0.000000 (0x00000000) _13 = 0.000000 (0x00000000) _23 = 0.000000 (0x00000000) _33 = 1.001955 (0x3F804010) _43 = 1.000000 (0x3F800000) _14 = 0.000000 (0x00000000) _24 = 0.000000 (0x00000000) _34 = -8.007820 (0xC1002008) _44 = 0.000000 (0x00000000) _data = [16]

4.219332 (0x408704C4) 0.000000 (0x00000000) 0.000000 (0x00000000) 0.000000 (0x00000000) 0.000000 (0x00000000) 5.671282 (0x40B57B24) 0.000000 (0x00000000) 0.000000 (0x00000000) 0.000000 (0x00000000) 0.000000 (0x00000000) 1.001955 (0x3F804010) 1.000000 (0x3F800000) ...

_data2d = [4]

[4] { 4.219332 (0x408704C4), 0.000000 (0x00000000), 0.000000 (0x00000000), 0.000000 (0x00000000) } [4] { 0.000000 (0x00000000), 5.671282 (0x40B57B24), 0.000000 (0x00000000), 0.000000 (0x00000000) } [4] { 0.000000 (0x00000000), 0.000000 (0x00000000), 1.001955 (0x3F804010), 1.000000 (0x3F800000) } [4] { 0.000000 (0x00000000), 0.000000 (0x00000000), -8.007820 (0xC1002008), 0.000000 (0x00000000) }

m_NearPlane = 4.000000 (0x40800000) m_FarPlane = 4096.000000 (0x45800000) m_FOV = 0.349066 (0x3EB2B8C2) m_ViewPort =

m_X = 0 (0x00000000) m_Y = 0 (0x00000000) m_Width = 1024 (0x00000400) m_Height = 768 (0x00000300)

m_ViewFrustum =

m_aPlanes = [10]

m_Norm =

X = 0.000000 (0x00000000) Y = 0.000000 (0x00000000) Z = 0.000000 (0x00000000)

m_Dist = 0.000000 (0x00000000)

m_Norm =

X = 0.000000 (0x00000000) Y = 0.000000 (0x00000000) Z = 0.000000 (0x00000000)

m_Dist = 0.000000 (0x00000000)

m_Norm =

X = 0.000000 (0x00000000) Y = 0.000000 (0x00000000) Z = 0.000000 (0x00000000)

m_Dist = 0.000000 (0x00000000)

m_Norm =

X = 0.000000 (0x00000000) Y = 0.000000 (0x00000000) Z = 0.000000 (0x00000000)

m_Dist = 0.000000 (0x00000000)

m_Norm =

X = 0.000000 (0x00000000) Y = 0.000000 (0x00000000) Z = 0.000000 (0x00000000)

m_Dist = 0.000000 (0x00000000)

m_Norm =

X = 0.000000 (0x00000000) Y = 0.000000 (0x00000000) Z = 0.000000 (0x00000000)

m_Dist = 0.000000 (0x00000000)

m_Norm =

X = 0.000000 (0x00000000) Y = 0.000000 (0x00000000) Z = 0.000000 (0x00000000)

m_Dist = 0.000000 (0x00000000)

m_Norm =

X = 0.000000 (0x00000000) Y = 0.000000 (0x00000000) Z = 0.000000 (0x00000000)

m_Dist = 0.000000 (0x00000000)

...

m_NumPlanes = 0 (0x00000000)

LockCullCamera = false Culling = true CachedLightEnv =

m_Elevation = 0.785398 (0x3F490FDB) m_Rotation = 5.497787 (0x40AFEDDF) m_TerrainShadowTransparency = 0.000000 (0x00000000) m_SunDir =

X = -0.270598 (0xBE8A8BD6) Y = -0.923880 (0xBF6C835F) Z = 0.270598 (0x3E8A8BD3)

m_SunColor =

X = 1.000000 (0x3F800000) Y = 1.000000 (0x3F800000) Z = 1.000000 (0x3F800000)

m_TerrainAmbientColor =

X = 0.643137 (0x3F24A4A5) Y = 0.643137 (0x3F24A4A5) Z = 0.643137 (0x3F24A4A5)

m_UnitsAmbientColor =

X = 0.643137 (0x3F24A4A5) Y = 0.643137 (0x3F24A4A5) Z = 0.643137 (0x3F24A4A5)

TrackManager =

m_Active = true m_DrawCurrentSpline = false m_DrawLines = (bool)0x8B m_ValidCurrent = false m_CurrentPath = (error -100406 while analyzing _Tree<<CStrW,CCinemaPath>::iterator) m_Paths = (error -100500 while analyzing map<CStrW,CCinemaPath >) m_PathQueue = (error -100500 while analyzing list<CCinemaPath >)

ViewScrollSpeed = 60.000000 (0x42700000) ViewRotateSensitivity = 0.002000 (0x3B03126F) ViewRotateSensitivityKeyboard = 1.000000 (0x3F800000) ViewRotateAboutTargetSensitivity = 0.010000 (0x3C23D70A) ViewRotateAboutTargetSensitivityKeyboard = 2.000000 (0x40000000) ViewDragSensitivity = 0.500000 (0x3F000000) ViewZoomSensitivityWheel = 16.000000 (0x41800000) ViewZoomSensitivity = 256.000000 (0x43800000) ViewZoomSmoothness = 0.020000 (0x3CA3D70A) ViewSnapSmoothness = 0.020000 (0x3CA3D70A) CameraDelta =

X = 0.000000 (0x00000000) Y = 0.000000 (0x00000000) Z = 0.000000 (0x00000000)

CameraPivot =

X = 0.000000 (0x00000000) Y = 0.000000 (0x00000000) Z = 0.000000 (0x00000000)

UnitView = 0x00000000 UnitViewProp = 0xF448015D ->

m_Bounds =

m_Data = [2]

X = (unavailable - internal error)

Y = (unavailable - internal error)

Z = (unavailable - internal error)

X = (unavailable - internal error)

Y = (unavailable - internal error)

Z = (unavailable - internal error)

m_Transform =

_11 = (unavailable - internal error)

_21 = (unavailable - internal error)

_31 = (unavailable - internal error)

_41 = (unavailable - internal error)

_12 = (unavailable - internal error)

_22 = (unavailable - internal error)

_32 = (unavailable - internal error)

_42 = (unavailable - internal error)

_13 = (unavailable - internal error)

_23 = (unavailable - internal error)

_33 = (unavailable - internal error)

_43 = (unavailable - internal error)

_14 = (unavailable - internal error)

_24 = (unavailable - internal error)

_34 = (unavailable - internal error)

_44 = (unavailable - internal error)

_data = [16]

(unavailable - internal error)

_data2d = [4]

[4] { (unavailable - internal error)

m_InvTransform =

_11 = (unavailable - internal error)

_21 = (unavailable - internal error)

_31 = (unavailable - internal error)

_41 = (unavailable - internal error)

_12 = (unavailable - internal error)

_22 = (unavailable - internal error)

_32 = (unavailable - internal error)

_42 = (unavailable - internal error)

_13 = (unavailable - internal error)

_23 = (unavailable - internal error)

_33 = (unavailable - internal error)

_43 = (unavailable - internal error)

_14 = (unavailable - internal error)

_24 = (unavailable - internal error)

_34 = (unavailable - internal error)

_44 = (unavailable - internal error)

_data = [16]

(unavailable - internal error)

_data2d = [4]

[4] { (unavailable - internal error)

m_RenderData = (unavailable - internal error)

m_BoundsValid = (unavailable - internal error)

(boost::noncopyable_::noncopyable) m_Parent = (unavailable - internal error)

m_Flags = (unavailable - internal error)

m_Texture =

m_Name = { (error -100500 while analyzing string >) } m_Handle = (unavailable - internal error)

m_Material =

m_Hash = (unavailable - internal error)

m_Diffuse =

r = (unavailable - internal error)

g = (unavailable - internal error)

b = (unavailable - internal error)

a = (unavailable - internal error)

m_Ambient =

r = (unavailable - internal error)

g = (unavailable - internal error)

b = (unavailable - internal error)

a = (unavailable - internal error)

m_Specular =

r = (unavailable - internal error)

g = (unavailable - internal error)

b = (unavailable - internal error)

a = (unavailable - internal error)

m_Emissive =

r = (unavailable - internal error)

g = (unavailable - internal error)

b = (unavailable - internal error)

a = (unavailable - internal error)

m_SpecularPower = (unavailable - internal error)

m_Texture = { (error -100500 while analyzing string >) } m_VertexProgram = { (error -100500 while analyzing string >) } m_FragmentProgram = { (error -100500 while analyzing string >) } m_Alpha = (unavailable - internal error)

m_PlayerID = (unavailable - internal error)

m_TextureColor =

r = (unavailable - internal error)

g = (unavailable - internal error)

b = (unavailable - internal error)

a = (unavailable - internal error)

m_pModelDef =

px = (unavailable - internal error)

pn =

pi_ = (unavailable - internal error)

m_ObjectBounds =

m_Data = [2]

X = (unavailable - internal error)

Y = (unavailable - internal error)

Z = (unavailable - internal error)

X = (unavailable - internal error)

Y = (unavailable - internal error)

Z = (unavailable - internal error)

m_Anim = (unavailable - internal error)

m_NextAnim = (unavailable - internal error)

m_AnimSpeed = (unavailable - internal error)

m_AnimTime = (unavailable - internal error)

m_BoneMatrices = (unavailable - internal error)

m_InverseBindBoneMatrices = (unavailable - internal error)

m_Props = (error -100406 while analyzing vector<CModel::Prop >) m_PositionValid = (unavailable - internal error)

m_ShadingColor =

r = (unavailable - internal error)

g = (unavailable - internal error)

b = (unavailable - internal error)

a = (unavailable - internal error)

m_SkeletonAnimManager = (unavailable - internal error)

UnitAttach = 0x00000000 CameraTargets = (error -100500 while analyzing vector<CVector3D >) ZoomDelta = 0.000000 (0x00000000)

m_pLocalPlayer = 0x00000000 m_Players = (error -100500 while analyzing vector<CPlayer * >) m_NumPlayers = 0 (0x00000000) m_GameStarted = false m_SimRate = 1.000000 (0x3F800000) GameStatus = 1551066223 m_Paused = false

pGameAttributes = 0x0EACBE10 ->

(IJSObject) m_JS = 0x02815388 -> (JSObject) m_NonsharedProperties =

(error -100406 while analyzing _Container_base) comp = (CStrW_hash_compare)

_List = (error -100500 while analyzing list<pair<CStrW const ,IJSProperty *> >) _Vec = (error -100406 while analyzing vector<list<pair<CStrW const ,IJSProperty *> >::_Iterator<0> >) _Mask = 15 (0x0000000F) _Maxidx = 16 (0x00000010) _Max_bucket_size = 1.000000 (0x3F800000)

m_ScriptProperties =

(error -100406 while analyzing _Container_base) comp = (CStrW_hash_compare)

_List = (error -100500 while analyzing list<pair<CStrW const ,IJSProperty *> >) _Vec = (error -100406 while analyzing vector<list<pair<CStrW const ,IJSProperty *> >::_Iterator<0> >) _Mask = 15 (0x0000000F) _Maxidx = 16 (0x00000010) _Max_bucket_size = 1.000000 (0x3F800000)

m_EngineOwned = true

m_SynchedProperties =

(error -100406 while analyzing _Container_base) comp = (CStrW_hash_compare)

_List = (error -100500 while analyzing list<pair<CStrW const ,ISynchedJSProperty *> >) _Vec = (error -100406 while analyzing vector<list<pair<CStrW const ,ISynchedJSProperty *> >::_Iterator<0> >) _Mask = 15 (0x0000000F) _Maxidx = 16 (0x00000010) _Max_bucket_size = 1.000000 (0x3F800000)

(Singleton<CGameAttributes>) m_MapFile = { (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >) } m_ResourceLevel = { (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >) } m_StartingPhase = { (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >) } m_GameMode = { (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >) } m_LOSSetting = 0 (0x00000000) m_FogOfWar = true m_ScreenshotMode = false m_NumSlots = 8 (0x00000008) m_Players = (error -100500 while analyzing vector<CPlayer * >) m_PlayerSlots = (error -100500 while analyzing vector<CPlayerSlot * >) m_PlayerSlotArrayJS = 0x02815380 -> (JSObject) m_UpdateCB = 0x00000000 m_UpdateCBData = 0x000055D4 m_PlayerUpdateCB = 0x00000000 (too much output; skipping to next top-level symbol)

CreateServer (scriptglue.cpp:695)

cx = 0x028BB6D8 -> (JSContext) formal = 0x028BCFC8 -> (JSObject) argc = 246895736 (0x0EB75478) argv = 0x027F4FA4 -> 0 (0x00000000) rval = 0x002FF17C -> 2147483649 (0x80000001)

js_Invoke (:0)

errno = 0 (?) OS error = Se ha intentado tener acceso a una dirección no válida.

#219 fixed Strange players names behavoiur Anton Galitch
Description

In MP game. When playing 1 vs 1. The host sees his name fine, but his opponents name as "Player", while opponents name is Matei (as in the default configuration.). The opponent sees his and host's name fine.

#220 duplicate Incorrect camera position when starting for players other than player 1 Anton Galitch
Description

In MP game, the camera position is the same for all the players, which is correct for the host (Player1) but incorrect for other players.

#221 fixed Resource counters went negative Jan Wassenberg
Description

In an 1v1 game of Oasis, the stone resource counter was observed to be -1. After starting at 100 and building two houses (50 stone each), it should have been zero (and probably was). After a while of further play - without any harvesting of stone - the resource counter was shown as "-1". Failed to duplicate this in SP, so it's probably related to network transmission of the value.

#222 wontfix Better reference-counting of entities Jan Wassenberg Jan Wassenberg
Description

We currently have a fairly complicated and unsafe means of managing entities. CHandle is basically a reference-counted pointer. HEntity is an index into a table of CHandle; the class simulates smart pointer semantics by accessing this table.

A fixed table of CHandle is both inefficient (what if we really only need 10% of the limit at a time?) and unsafe (we can't validate HEntity indices sent via network, and risk dangling entity pointers).

To delete entities, they must be inserted into a reaper queue, the contents of which are deleted at the beginning of each update. However, the entities are still accessible and can be referenced.

Finally, there are a bunch of complicated and seemingly redundant flags/access mechanisms for entity aliveness - the refd bitset, its reference count (trumped however by the reaper queue), a destroyed flag and the destroy notifier flag.

This complexity is causing real problems - we've had several access violations at 0x400..0x460, which are most likely caused by NULL entity pointers. At the meeting yesterday, we discussed banning raw CEntity* pointers and replacing them all with smart pointers. Also, separating network ID from entity storage seems prudent (allows stringent error checks and removes an artificial limit on the number of handles).

The proposed solution we arrived at is based on weak pointers - this allows code (e.g. AI) to hold on to entity references and be able to determine in a controlled way whether the entity is dead. The implementation is such that every entity holds a reference-counted pointer to itself and hands it out in form of a smart pointer class. When the entity is `killed', it marks the shared pointer value as invalid and frees itself immediately. Only when the last weak reference is freed would the reference-counted-pointer class instance that they use be released.

The requirement for the reaper is based on the assumption that entities are killed fairly high on the call stack, and the calling functions may still be wanting to do something with the entity. To detect when an entity is dead, we are already using an isDead flag. I figure this could be replaced with the standard weak_ptr isValid mechanism.

Finally, the network ID. For practically limitless numbers of entities, we need a 32-bit counter that resets to zero each game. Entities store their number (which is what is serialized), and EntityManager needs a sparse mapping of ID -> HEntity (the new/old entity reference system).

This sounds like it would simplify things; a partial implementation is underway, but a few design questions remain to be hashed out (Philip and I will be discussing this shortly; any other input is welcome).

TODO:

  • ~update HEntity~
  • ~adapt EntityManager~
  • proper construction of CEntity, including !JS_AddRoot
  • update all code to use HEntity instead of CEntity*
#223 invalid Making sure the Trac wiki is up to date Erik Johansson anonymous
Description

While not necessarily critical it's a good thing if we can try and make sure that as much information in the Trac wiki as possible is up-to-date.

While of course getting the actual game releaseable is more important it's important that we good info so people aren't turned away from developing just because of that. (It's not as if there's an overabundance of people who want to spend a lot of time coding for no money as it is, and if they have trouble starting I'm sure they'll move on to other places before even taking a deeper look ;) )

I suggest everyone takes some time to go through the areas of the wiki they know anything about and add/change things as necessary. If we all do a part of it it won't be all that much work, but it will still be a great resource.

Btw, I'm not sure what "Component" this task would be, is the one I've chosen ok or should we create something else for these kind of things? There might be more tasks which aren't directly related to the code, and I'm not sure "Non-game systems" includes that. Please educate me in that case, and otherwise too of course.

#224 fixed Set up autobuilder Philip Taylor Philip Taylor
Description

Need to set up a new autobuilder, so that the code can be compiled and the binaries committed to SVN from a stable consistent build environment.

Some discussion in this thread.

Details on the planned setup: BuildServerSetup.

#225 fixed It is possible to place multiple unbuilt building foundations ontop of each other. Michael D. Hafer
Description

How to duplicate bug: Start a game. Select a citizen-soldier. Cycle through the construction list in the GUI. Select House. Begin placing house foundations by clicking rapidly twice in one spot. When construction is complete you can see two houses overlapping in the same spot (as long as both house variations have been randomized).

#226 worksforme Crash: Game Crashes when deleting a structure that is being built. Michael D. Hafer
Description

The summary says it all. Start game. Lay a house foundation. Begin constructing the house. Delete the building before it is completed. Crash. This happened while in quick start mode.

Someone please verify.

#227 invalid Female Citizens should only "convert" (infidelity) via enemy Cavalry. Michael D. Hafer
Description

Enemy Females currently seem to be able to be converted to your side by utilizing any of your troops within their "infidelity radius." This should only occur with Cavalry units. Cavalry should only have the ability to convert enemy females via the infidelity radius. Cavalry is given this function in the Design Document as part of their abilities separate from Infantry.

#228 fixed Building Construction Limits should be dictated in the Entitiy XMLs. Michael D. Hafer
Description

Building limits "per territory" and other building limit attributes should be dictated in the entity code rather than in a script.

Example: The Hellenes have 3 Special Buildings. Each one could have a different building limit criteria. Same for any other faction and any other building type (for instance, what if we want the Romans to be able to build 3 Barracks per territory instead of the 2 dictated in the script? The Persians are supposed to be able to only build one "Kahk" Special Building per map, not per territory as is dictated in the script).

#229 wontfix GUI: "Phantom" Health Bars appear in the GUI when multiple units or structures are selected. Anton Galitch Michael D. Hafer
Description

Start Game

Load map

Select one or more entities.

Click the little "helmet" icon in the GUI to show the multi-selection.

You will see additional health bars running along the bottom of the screen - more health bars than there are entities selected.

(Image Attached)

#230 fixed Remove DCDT from OS release Philip Taylor
Description

The DCDT code's license says

  Permission to use this software for educational, research and non-
  profit purposes, without fee, and without a written agreement is
  hereby granted, provided that the above notice and the following
  three paragraphs appear in all copies.

which means it is incompatible with the GPL, so it can't be distributed as part of the GPL release. So it has to be removed from that release, or removed from our repository entirely, or we have to get permission to use under GPL-compatible terms.

#231 invalid Auras suffer from z-fighting Philip Taylor
Description

See attached screenshot. The auras ought to be nice clean circles, but they're all yucky and they flash whenever the camera moves, presumably because of z-fighting.

#232 fixed Buildings rotated 135 degrees counterclockwise when constructed in-game. Michael D. Hafer
Description

In Atlas buildings have their proper orientation (the "front" of the building should usually face towards the lower right hand side of the screen - there are some exceptions that face towards the lower left corner of the screen, but the point is, they should face at a 45 degree angle, like a diamond, from the default viewing angle), but when constructed in-game, structures face 135 degrees the wrong direction so that the "fronts" of the buildings now face the exact opposite direction from the camera.

This occurs with every Faction's buildings, no matter if they are PMD meshes or DAE Collada meshes.

#233 invalid Hard Crash when using "Big Screenshot" while playing game. Michael D. Hafer
Description

The game performs a hard crash when utilizing the "Big Screenshot" option. This option is supposed to output a large Bitmap screenshot of the scene.

hotkey.bigscreenshot = "Ctrl+Alt+F2" ; Take large BMP screenshot.

That is the line in my system.cfg file that dictates the hotkeys for taking the big screenshot.

A similar function works in Atlas that takes a very large bitmap screenshot of the scene. This is how I usually make the monthly screenshots for publicity. I want to be able to do this in-game. Apparently it worked at one time, but no longer works in-game. This would not only be a good feature for us developers, but a good one for end-users as well.

We should probably fix/implement this in time for any official public Beta, as players will want to take nice screenshots of the game they are playing.

#234 worksforme Hard Crash when using "Big Screenshot" while playing game. charles Michael D. Hafer
Description

The game performs a hard crash when utilizing the "Big Screenshot" option. This option is supposed to output a large Bitmap screenshot of the scene.

hotkey.bigscreenshot = "Ctrl+Alt+F2" ; Take large BMP screenshot.

That is the line in my system.cfg file that dictates the hotkeys for taking the big screenshot.

A similar function works in Atlas that takes a very large bitmap screenshot of the scene. This is how I usually make the monthly screenshots for publicity. I want to be able to do this in-game. Apparently it worked at one time, but no longer works in-game. This would not only be a good feature for us developers, but a good one for end-users as well.

We should probably fix/implement this in time for any official public Beta, as players will want to take nice screenshots of the game they are playing.

#235 worksforme Crash when loading a different map Anton Galitch
Description

Reproduction method:

  • Load map with data (Latium)
  • Go back to menu
  • Load another map with data (alpine)
  • enjoy crash

Dump and log: http://www.wildfiregames.com/forum/index.php?act=Attach&type=post&id=2055

#236 fixed Player can control enemy's buildings Erik Johansson
Description

Similar to the bug which made it possible to move around an enemy players units ( http://trac.wildfiregames.com/ticket/212 ) I've found that it's possible to control an enemy's buildings. After having had the building within LOS of one of my units I can control the building, and create units. On Latium I just get a message telling me that I cannot build since there aren't enough housing, since the enemy doesn't have any houses but just the CC, but on other maps with enough housing for the enemy player it's possible to build units.

#237 fixed svn_revision.txt is not built Jan Wassenberg Philip Taylor
Description

svn_revision.cpp relies on svn_revision.txt, but that latter file is never actually generated, which breaks the build.

One possible solution: add an svn_revision.txt to SVN which just says "unknown". Don't ever update it for normal developers, because they can work out what they're doing themselves. Then just modify the autobuilder script to run svn_revision.bat and overwrite that file, so the automated builds will identity the revision correctly.

Another possible solution: make svn_revision.bat get called automatically by the VS project. But if it's called for every build, it needs to be careful to avoid triggering a load of unnecessary linking every time. Also it needs to be added on Linux too.

(I'd be happy to help with this, particularly any autobuilder or Linux stuff, depending on what the desired solution is.)

#238 fixed wnuma compilation sometimes fails Jan Wassenberg Philip Taylor
Description

Travis and Brian reported errors in wnuma.cpp like:

'valid' : is not a member of '_PSAPI_WORKING_SET_EX_BLOCK'
'LargePageSize': identifier not found
'node' : is not a member of '_PSAPI_WORKING_SET_EX_BLOCK'

That code is inside an #if WINVER >= 0x600. It compiles fine for me in VS2008 on Vista; I guess it's a problem with an older version of the Platform SDK or something.

(I suggested to them that they just changed the code to #if 0 to get it to compile.)

#239 fixed Sort out OS SVN access permissions Philip Taylor Philip Taylor
Description

Set up the access permissions so anonymous users can access the public files.

#240 fixed Sort out Trac access permissions Philip Taylor
Description

Work out which parts of Trac should be available to normal users, and make them available.

#241 fixed Construct a list of everyone who has written code for the game Philip Taylor Philip Taylor
Description

For the purposes of relicensing as open source, it'd be good to know exactly what code was written by who, so those people can be contacted to make sure they're okay with it.

#242 fixed Collada prop point "root" cannot hand more than one prop at a time. Philip Taylor Michael D. Hafer
Description

Collada prop point "root" cannot hand more than one prop at a time. It is essential that collada prop points be able to hand more than one prop at a time, just like the old pmd files.

#243 fixed "Non boned" Collada meshes should support multiple prop/attachment points historic_bruno Michael D. Hafer
Description

It is imperative to the game as designed that the game engine supports "static" "non-boned" Collada files, such as those created for ships and buildings, that include multiple prop-points. This is mainly for unit garrisoning purposes (units garrisoned on walls, battlements, towers, and on the decks of ships).

I am slating this for Beta, because for Alpha we could conceivably get by with just simple garrisoning capability without the propping. But for any public beta this feature should be implemented, as it is a major stated feature of the project.

#245 fixed [PATCH] Support XML validation leper Philip Taylor
Description

It'd be nice to use proper validator tools to report errors in XML tools. So:

  • Write RelaxNG Compact schemas for all the XML formats. (See existing DTDs for GUI and terrain files.)
  • Add a script to convert them to RelaxNG XML.
  • Change the CXeromyces API to accept a schema argument.
  • Use that schema as part of the file hash, and use it to validate the document.
  • Possibly refuse to load invalid documents? Or just report the error (and cache the error message in the XMB)? Currently we report an error.
  • Write an external tool that validates all the XML files at once.
#246 fixed Start using user-specific config files Philip Taylor
Description

Editing system.cfg is nasty, because you get merge conflicts and accidental commits etc. So people should always use user-specific configuration, which looks like it's already implemented in data/profiles/default/settings/user.cfg. So: make sure that actually works, delete the non-default profiles because they're confusing and unneccessary, and update all the relevant documentation (and add a comment in system.cfg) to say to edit user.cfg.

#247 fixed Simplify the logger Philip Taylor
Description

CLogger is unnecessarily complex. Get rid of the LOG_CATEGORY and user-configurable interestingness stuff, and simplify the macros to LOG_ERROR("whatever") etc.

#248 worksforme Transparent Alpha Channel rendering problem for farms. Michael D. Hafer
Description

About 75% of farms when built in-game or when placed manually in Atlas have a rendering issue with the alpha channeled "wheat" texture. This is apparently random.

Screenshot attached.

#249 duplicate Non-ranged units appear away from the place where their actions are taking place Erik Johansson
Description

I first saw this when constructing a building, but had trouble reproducing it so I thought I'd wait until I saw it again, but then I saw that the same thing occurred when enemy units were attacking my units. The enemy unit were on the opposite side of a building from my units, but still hitpoints were subtracted from one of my units. It wasn't a ranged unit, and there were no other units nearby, so for some reason the animation/model wasn't "at the place where the simulation occurred" or how I should say.

The same thing with the units constructing a building. As you can see on the screenshot I attached the units that are constructing the building are at a distance from it, though using the proper animation and everything else works.

In both cases it's a building that's between the unit (or rather the animation/model) and the action/simulation that's actually taking place. Not sure if that's just a coincidence, but I thought it was worth mentioning.

Also as it's not interrupting the gameplay or anything it shouldn't be on this milestone, but I don't know on which it fits best, so someone who knows that better should move it, please.

#250 fixed Non-ranged units appear away from the place where their actions are taking place Erik Johansson
Description

I first saw this when constructing a building, but had trouble reproducing it so I thought I'd wait until I saw it again, but then I saw that the same thing occurred when enemy units were attacking my units. The enemy unit were on the opposite side of a building from my units, but still hitpoints were subtracted from one of my units. It wasn't a ranged unit, and there were no other units nearby, so for some reason the animation/model wasn't "at the place where the simulation occurred" or how I should say.

The same thing with the units constructing a building. As you can see on the screenshot I attached the units that are constructing the building are at a distance from it, though using the proper animation and everything else works.

In both cases it's a building that's between the unit (or rather the animation/model) and the action/simulation that's actually taking place. Not sure if that's just a coincidence, but I thought it was worth mentioning.

Also as it's not interrupting the gameplay or anything it shouldn't be on this milestone, but I don't know on which it fits best, so someone who knows that better should move it, please.

#251 fixed Config parser doesn't ignore comments Quentin Pradet Philip Taylor
Description

When a config file says something like

key = value ; comment

the config parser thinks the key is associated with two values, "value" and " ; comment". (See mainlog.html, where it reports all the config values that were loaded.)

This needs to be fixed, so legitimate (comma-separated) values are kept but comments are discarded.

#253 worksforme Crash on loading CSimulation Jan Wassenberg Jan Chrastina
Description

I cannot start single player game on Windows XP SP2, crash occurs when loading CSimulation. See the log below with comments marked with * on the beginning. When start pyrogenesis.exe several errors occur:

Assertion failed: "resolution <= 2e-3"
Location: whrt.cpp:114 (InitCounter)

Call stack:
InitCounter (whrt.cpp:114)
whrt_Init (whrt.cpp:300)
[..]

***Continue pressed***

Assertion failed: "resolution > 0.0"
Location: frequency_filter.cpp:36 (FrequencyEstimator::FrequencyEstimator)

Call stack:

FrequencyEstimator::FrequencyEstimator (frequency_filter.cpp:36)
    this = (unavailable)
    resolution = -1.#IND (0xFFF8000000000000)
[..]

***Continue pressed****
***Window frame occures***

Assertion failed: "TimeSinceLastFrame > 0.0f"
Location: main.cpp:201 (Frame)

Call stack:

Frame (main.cpp:201)
    need_update = false
    TimeSinceLastFrame = -347316158464.000000 (0xD2A1BB50)
    need_render = false
    down = [3] { 0.000000 (0x08CE7758), 0.000000 (0x00401E58), 0.000000 (0x0012FF34) }

[..]

***Initial menu inside widow frame occurs***

Assertion failed: "TimeSinceLastFrame > 0.0f"
Location: main.cpp:201 (Frame)

Call stack:

Frame (main.cpp:201)
    need_update = false
    TimeSinceLastFrame = -347316158464.000000 (0xD2A1BB50)
    need_render = false
    down = [3] { 0.000000 (0x08CE7758), 0.000000 (0x00401E58), 0.000000 (0x0012FF34) }

***Single player clicked***
***Game setup occurs***
***Start! clicked***

***When loading CSimulation***

Much to our regret we must report the program has encountered an error.

Please let us know at http://trac.wildfiregames.com/ and attach the crashlog.txt and crashlog.dmp files.

Details: unhandled exception (Access violation reading 0x00000000)

Location: unknown:0 (?)

Call stack:

00000000


errno = 0 (?)
OS error = 0 (no error code was set)

***Surppress dashed out so Continue clicked***

***Windows XP SP3 reported pyrogenesis.exe has encountered a problem and needs to close. ...***
#254 fixed trac tickets are not readable Florian Ludwig
Description

you can view a list of all tickets but cant actually read the content of tickets if you're not registered / logged in.

It would help to check for more information if you got a problem to be able to check what problems and possible solution and workarounds other people reported.

#255 wontfix Crash in the first minutes of MP game Sn0opy
Description

Informations from the Program Error Dialogue:

Details: unhandled exception (Access violation reading 0x00000460) Location: unknown:0 (?) Call Stack: 002FAF5B errno = 0 (?) OS error = 0 (no error code was set)

More infos in crashlog,dmp and crashlog.txt

#256 invalid Wrong hand for phalanx Adrián Chaves
Description

First of all, my brother is an History fan, specially the age this game is about, so I'll try to contribute with suggestions and comments about historical bugs and related stuff.

I was watching the second game movie, from 2006, and in it we can see different atacks of two different units. I showed it to my brother, and he found out a bug. Helenic phalanx is using the weapon with the wrong hand.

I had a discussion with him about it, but he is right, and he has also told me they was forced to use it with that hand (so, no lefthanded people, I guess).

#257 wontfix Improve build system Jon Latané
Description

It's great to see you guys have open-sourced this project; however, the build system for Linux and OS X seems a little bit insane right now. I'd like to offer some assistance in porting the build system to SCons, a Python-based build system that is much simpler to work with and won't require the use of Premake or workspaces. I think making Makefiles is generally a pretty frightful workaround for the inadequacies of Make, and a more modern build system would simplify development of this project a great deal. Using scons, the Premake and workspace stuff would be replaced by a scons-local installation, allowing Unix developers to simply run 'python scons.py' to compile. In doing this, I'd also like to update the Mac build process to:

1) Build proper .app bundles

2) Make use of all the libraries the developer has available, but link statically against any libraries not included by default in OS X. In this way, for example, the developer can compile with FFMpeg from MacPorts, but not require the user to install MacPorts. The alternative is to include the libraries in the application bundle, but that would just result in a larger, slower application and increase the amount of work required in the build system (especially since this would involve changing install_names so the loader could locate everything). The only requirement I've found so far that's required that doesn't have static libraries by default in MacPorts is wxWidgets

I'm still in the process of checking the project out, but I thought it would be worthwhile to gauge your interest in this. There are other good build systems like CMake available as well, but SCons is the one I'm most familiar with and thus the one I think I could contribute the most with. If you guys think this would be a good idea I should be able to start working on it fairly soon (obviously, I don't want to waste a lot of time on it if not). Just let me know and I can get started on this ASAP.

#258 fixed [FreeBSD compat] add some missing includes Dmitry Marakasov
Description

There were some missing include errors while I was building 0 a.d. on FreeBSD. Maybe that's because I was building with precompiled headers (doesn't seem to work nice with ccache), but I guess it's better to add them.

#259 fixed [FreeBSD compat] portability fixes Dmitry Marakasov
Description

build/premake/src/Src/os.h: check for FreeBSD correctly source/tools/atlas/AtlasScript/ScriptInterface.cpp: use valgrind only on Linux and MacOS X (not on FreeBSD) source/ps/DllLoader.cpp: add missing const build/workspaces/update-workspaces.sh: use plain sh instead of bash (no bash-specific features are used and bash is not available on FreeBSD by default). Also substitute positional parameters correctly

#260 fixed [FreeBSD compat] collada: don't try to load plugins from nowhere Dmitry Marakasov
Description

Collada tries to load plugins from applicationFolderName without checking whether it is empty first, which leads to crash on FreeBSD, where it is empty. While actually there should be FreeBSD version of FUFileManager::GetApplicationFolderName implemented, here where we don't need to load any plugins (do we?) this fix should go.

#261 fixed Redefinition errors on linux justme
Description

in libraries/cxxtest/include/cxxtest/ValueTraits.h:281

#ifndef __APPLE__ // avoid redefinition errors on mac
    CXXTEST_COPY_TRAITS( size_t, const unsigned int ); // avoid /Wp64 warnings in MSVC
#endif

There is a check to make sure redefinition errors do not happen on mac. The check also needs to apply on linux.

#262 fixed Linux and SpiderMonkey justme
Description

In the help page for building on linux (http://trac.wildfiregames.com/wiki/BuildInstructions#Installingthread-safeSpiderMonkey) The recommended version of spider monkey causes build errors with 0AD. I installed the latest version of spider monkey (changeset: 30318) from https://developer.mozilla.org/En/SpiderMonkey/Getting_SpiderMonkey_source_code#Getting_the_latest_SpiderMonkey_source_code

And copied header files 0AD wanted (jsosdep.h and jsconfig.h) that were not present in the latest Spider Monkey revision from an older version to /usr/include/js

0AD then compiled successfully. There was an error (which seemed to have no effect) when launching a single player game but I don't know if it is related to Spider Monkey or what effects the error had on the game.

#263 fixed Inconsistent file encoding breaks spidermonkey on Mac OS X espes
Description
exe name before realpath: /Volumes/Data/Development/Compiling/0AD/trunk/binaries/system/./pyrogenesis_dbg
exe name after realpath: /Volumes/Data/Development/Compiling/0AD/trunk/binaries/system/./pyrogenesis_dbg
returning exe name: /Volumes/Data/Development/Compiling/0AD/trunk/binaries/system/pyrogenesis_dbg
TIMER| InitVfs: 1.603 ms
TIMER| InitScripting: 7.995 ms
TIMER| CONFIG_Init: 8.452 ms
TIMER| write_sys_info: 1.098 ms
TIMER| ps_console: 17.498 ms
TIMER| ps_lang_hotkeys: 6.716 ms
TIMER| ps_gui_init: 187 us
TIMER| ps_gui_setup_xml: 4.976 ms
TIMER| ps_gui_styles_xml: 2.096 ms
TIMER| ps_gui_sprite1_xml: 61.773 ms
(current document)(0): malformed UTF-8 character sequence at offset 25199
ERROR: JavaScript Error ((current document), line 0): malformed UTF-8 character sequence at offset 25199
terminate called after throwing an instance of 'PSERROR_Scripting_LoadFile_EvalErrors'
  what():  Scripting_LoadFile_EvalErrors
Abort trap

I eventually tracked this down to gui/test/functions_page_session_status_commands.js, which was in some ISO-* encoding, instead of UTF-8. This problem exists for quite a few other files as well. Spidermonkey fails to parse them, and dies.

#264 fixed ReferenceError: addGlobalHandler is not defined on Linux cd311
Description

hi

i was building the game on a kubuntu 9.04 using the instructions on http://trac.wildfiregames.com/wiki/BuildInstructions however if i start the ./pyrogenesis_dbg all i get is

TIMER| InitVfs: 1.64816 ms TIMER| InitScripting: 55.6995 ms TIMER| CONFIG_Init: 30.1024 ms TIMER| write_sys_info: 1.48977 ms TIMER| ps_console: 12.7604 ms TIMER| ps_lang_hotkeys: 11.0896 ms TIMER| ps_gui_init: 45.814 us TIMER| ps_gui_setup_xml: 30.3468 ms TIMER| ps_gui_styles_xml: 4.25142 ms TIMER| ps_gui_sprite1_xml: 220.275 ms gui/test/functions_page_session.js(280): ReferenceError: addGlobalHandler is not defined ERROR: JavaScript Error (gui/test/functions_page_session.js, line 280): ReferenceError: addGlobalHandler is not defined terminate called after throwing an instance of 'PSERROR_Scripting_LoadFile_EvalErrors'

what(): Scripting_LoadFile_EvalErrors

Aborted

a windows pops up for a second and closes again.

did i do anything wrong? i even built the spidermonkey lib threadsafe for my system

cd311

#265 fixed [Mac OS X] premake fails to include libxml2 with threadding enabled espes
Description

libxml2 checks for thread support by not only checking if it was compiled in, but also by checking whether "_REENTRANT" or "MT" is set. Usually, AFAIK, these are set on *nix when pthread is included, but since on OS X GNU threads are included in libSystem, this does not happen.

I propose the attached fix, but if anyone has a better idea, feel free.

#266 fixed [Mac OS X] tests fail to compile espes
Description

"lib.tests/test_secure_crt.h" fails to compile on Mac OS X, as Mac OS X does not have a included "strnlen".

A crappy fix is attached, because I fail at C.

#267 duplicate JavaScript Error Michal
Description

after build I ran pyrogenesis_dbg and I got:

TIMER| InitVfs: 1.78191 ms TIMER| InitScripting: 14.0081 ms TIMER| CONFIG_Init: 22.1368 ms TIMER| write_sys_info: 33.9102 ms TIMER| ps_console: 12.847 ms TIMER| ps_lang_hotkeys: 31.845 ms TIMER| ps_gui_init: 74.47 us TIMER| ps_gui_setup_xml: 6.78038 ms TIMER| ps_gui_styles_xml: 25.172 ms TIMER| ps_gui_sprite1_xml: 298.166 ms (current document)(0): malformed UTF-8 character sequence at offset 25199 ERROR: JavaScript Error ((current document), line 0): malformed UTF-8 character sequence at offset 25199 terminate called after throwing an instance of 'PSERROR_Scripting_LoadFile_EvalErrors'

what(): Scripting_LoadFile_EvalErrors

zsh: abort ./pyrogenesis_dbg

#268 fixed OpenAL string specifications are identified incorrectly Simon Brenner espes
Description

from lib/external_libraries/openal.h, line 34:

// ALC strings (e.g. device and extension names) are typed differently
// between platforms *sigh*
#if OS_MACOSX
typedef ALCubyte* alcString;
#else
typedef ALCchar* alcString;
#endif

This is incorrect, and creates compilation errors. It is not platform dependent - using ALCubyte was changed to using ALCchar in the 1.1 spec of OpenAL. It should be identified through AL_VERSION_1_1 (Unless you can think of a better way, it's not 100% accurate)

A fix is attached.

#269 fixed Compile warnings: printf formats, unsigned/signed comparisons, etc Simon Brenner
Description

Basically this:

NetClient.cpp
../../../source/network/NetClient.cpp: In static member function 'static bool CNetClient::OnError(void*, CFsmEvent*)':
../../../source/network/NetClient.cpp:253: warning: comparison between signed and unsigned integer expressions
../../../source/network/NetClient.cpp: In static member function 'static bool CNetClient::OnAuthenticate(void*, CFsmEvent*)':
../../../source/network/NetClient.cpp:367: warning: comparison between signed and unsigned integer expressions
NetServer.cpp
../../../source/network/NetServer.cpp: In static member function 'static bool CNetServer::OnError(void*, CFsmEvent*)':
../../../source/network/NetServer.cpp:395: warning: comparison between signed and unsigned integer expressions
Util.cpp
../../../source/ps/Util.cpp: In function 'void WriteSystemInfo()':
../../../source/ps/Util.cpp:96: warning: format '%d' expects type 'int', but argument 5 has type 'size_t'
../../../source/ps/Util.cpp:96: warning: format '%d' expects type 'int', but argument 6 has type 'size_t'
../../../source/ps/Util.cpp:96: warning: format '%d' expects type 'int', but argument 7 has type 'size_t'
../../../source/ps/Util.cpp:109: warning: format '%u' expects type 'unsigned int', but argument 3 has type 'size_t'
../../../source/ps/Util.cpp:109: warning: format '%u' expects type 'unsigned int', but argument 4 has type 'size_t'
CLogger.cpp
../../../source/ps/CLogger.cpp:171: warning: unused parameter 'category'
../../../source/ps/CLogger.cpp:188: warning: unused parameter 'category'
Parser.cpp
../../../source/ps/Parser.cpp: In member function 'bool CParserLine::ParseString(const CParser&, const std::string&)':
../../../source/ps/Parser.cpp:557: warning: comparison between signed and unsigned integer expressions
../../../source/ps/Parser.cpp:605: warning: comparison between signed and unsigned integer expressions
../../../source/ps/Parser.cpp:657: warning: comparison between signed and unsigned integer expressions
../../../source/ps/Parser.cpp:793: warning: comparison between signed and unsigned integer expressions
EntityManager.cpp
../../../source/simulation/EntityManager.cpp: In member function 'HEntity CEntityManager::Create(CEntityTemplate*, CVector3D, float, const std::set<CStr8, std::less<CStr8>, std::allocator<CStr8> >&, const CStrW*)':
../../../source/simulation/EntityManager.cpp:225: warning: comparison between signed and unsigned integer expressions
ScriptGlue.cpp
../../../source/scripting/ScriptGlue.cpp: In function 'void InitJsTimers()':
../../../source/scripting/ScriptGlue.cpp:648: warning: format '%d' expects type 'int', but argument 3 has type 'size_t'
Terrain.cpp
../../../source/graphics/Terrain.cpp: In member function 'void CTerrain::Resize(ssize_t)':
../../../source/graphics/Terrain.cpp:368: warning: comparison between signed and unsigned integer expressions
Renderer.cpp
../../../source/renderer/Renderer.cpp: In member function 'virtual CStr8 CRendererStatsTable::GetCellText(size_t, size_t)':
../../../source/renderer/Renderer.cpp:152: warning: format '%d' expects type 'int', but argument 4 has type 'long unsigned int'
../../../source/renderer/Renderer.cpp:152: warning: format '%d' expects type 'int', but argument 4 has type 'long unsigned int'
../../../source/renderer/Renderer.cpp:158: warning: format '%d' expects type 'int', but argument 4 has type 'long unsigned int'
../../../source/renderer/Renderer.cpp:158: warning: format '%d' expects type 'int', but argument 4 has type 'long unsigned int'
../../../source/renderer/Renderer.cpp:164: warning: format '%d' expects type 'int', but argument 4 has type 'long unsigned int'
../../../source/renderer/Renderer.cpp:164: warning: format '%d' expects type 'int', but argument 4 has type 'long unsigned int'
../../../source/renderer/Renderer.cpp:170: warning: format '%d' expects type 'int', but argument 4 has type 'long unsigned int'
../../../source/renderer/Renderer.cpp:170: warning: format '%d' expects type 'int', but argument 4 has type 'long unsigned int'
../../../source/renderer/Renderer.cpp:176: warning: format '%d' expects type 'int', but argument 4 has type 'long unsigned int'
../../../source/renderer/Renderer.cpp:176: warning: format '%d' expects type 'int', but argument 4 has type 'long unsigned int'
WaterManager.cpp
../../../source/renderer/WaterManager.cpp: In member function 'int WaterManager::LoadWaterTextures()':
../../../source/renderer/WaterManager.cpp:114: warning: format '%02d' expects type 'int', but argument 5 has type 'size_t'
../../../source/renderer/WaterManager.cpp:114: warning: format '%02d' expects type 'int', but argument 5 has type 'size_t'
../../../source/renderer/WaterManager.cpp:131: warning: format '%02d' expects type 'int', but argument 5 has type 'size_t'
../../../source/renderer/WaterManager.cpp:131: warning: format '%02d' expects type 'int', but argument 5 has type 'size_t'
MessagePasserImpl.cpp
../../../source/tools/atlas/GameInterface/MessagePasserImpl.cpp: In constructor 'MessagePasserImpl::MessagePasserImpl()':
../../../source/tools/atlas/GameInterface/MessagePasserImpl.cpp:37: warning: format '%d' expects type 'int', but argument 3 has type 'size_t'
ldbg.cpp
../../../source/lib/sysdep/os/linux/ldbg.cpp: In function 'void* debug_GetCaller(void*, const char*)':
../../../source/lib/sysdep/os/linux/ldbg.cpp:87: warning: unused variable 'bt_size'
../../../source/lib/sysdep/os/linux/ldbg.cpp: In function 'LibError debug_resolve_symbol_dladdr(void*, char*, char*, int*)':
../../../source/lib/sysdep/os/linux/ldbg.cpp:303: warning: format '%08x' expects type 'unsigned int', but argument 4 has type 'size_t'
../../../source/lib/sysdep/os/linux/ldbg.cpp:303: warning: format '%08x' expects type 'unsigned int', but argument 4 has type 'size_t'
item.cpp
../../../source/tools/atlas/wxJS/gui/control/item.cpp: In static member function 'static bool wxjs::gui::ControlItem::GetProperty(wxjs::Index*, JSContext*, JSObject*, int, jsval*)':
../../../source/tools/atlas/wxJS/gui/control/item.cpp:84: warning: comparison between signed and unsigned integer expressions
../../../source/tools/atlas/wxJS/gui/control/item.cpp: In static member function 'static bool wxjs::gui::ControlItem::SetProperty(wxjs::Index*, JSContext*, JSObject*, int, jsval*)':
../../../source/tools/atlas/wxJS/gui/control/item.cpp:108: warning: comparison between signed and unsigned integer expressions
../../../source/tools/atlas/wxJS/gui/control/item.cpp: In static member function 'static JSBool wxjs::gui::ControlItem::remove(JSContext*, JSObject*, uintN, jsval*, jsval*)':
../../../source/tools/atlas/wxJS/gui/control/item.cpp:145: warning: comparison between signed and unsigned integer expressions
../../../source/tools/atlas/wxJS/gui/control/item.cpp: In static member function 'static JSBool wxjs::gui::ControlItem::select(JSContext*, JSObject*, uintN, jsval*, jsval*)':
../../../source/tools/atlas/wxJS/gui/control/item.cpp:172: warning: comparison between signed and unsigned integer expressions
radioboxit.cpp
../../../source/tools/atlas/wxJS/gui/control/radioboxit.cpp: In static member function 'static bool wxjs::gui::RadioBoxItem::GetProperty(wxjs::Index*, JSContext*, JSObject*, int, jsval*)':
../../../source/tools/atlas/wxJS/gui/control/radioboxit.cpp:68: warning: comparison between signed and unsigned integer expressions
../../../source/tools/atlas/wxJS/gui/control/radioboxit.cpp:79: warning: comparison between signed and unsigned integer expressions
../../../source/tools/atlas/wxJS/gui/control/radioboxit.cpp: In static member function 'static bool wxjs::gui::RadioBoxItem::SetProperty(wxjs::Index*, JSContext*, JSObject*, int, jsval*)':
../../../source/tools/atlas/wxJS/gui/control/radioboxit.cpp:109: warning: comparison between signed and unsigned integer expressions
rect.cpp
../../../source/tools/atlas/wxJS/gui/misc/rect.cpp: In static member function 'static JSBool wxjs::gui::Rect::inside(JSContext*, JSObject*, uintN, jsval*, jsval*)':
../../../source/tools/atlas/wxJS/gui/misc/rect.cpp:464: warning: 'bool wxRect::Inside(int, int) const' is deprecated (declared at /usr/include/wx-2.8/wx/gdicmn.h:490)
../../../source/tools/atlas/wxJS/gui/misc/rect.cpp:477: warning: 'bool wxRect::Inside(const wxPoint&) const' is deprecated (declared at /usr/include/wx-2.8/wx/gdicmn.h:491)
sizer.cpp
../../../source/tools/atlas/wxJS/gui/misc/sizer.cpp: In static member function 'static JSBool wxjs::gui::Sizer::remove(JSContext*, JSObject*, uintN, jsval*, jsval*)':
../../../source/tools/atlas/wxJS/gui/misc/sizer.cpp:534: warning: 'virtual bool wxSizer::Remove(wxWindow*)' is deprecated (declared at /usr/include/wx-2.8/wx/sizer.h:513)
textline.cpp
../../../source/tools/atlas/wxJS/io/textline.cpp: In static member function 'static bool wxjs::io::TextLine::GetProperty(wxjs::Index*, JSContext*, JSObject*, int, jsval*)':
../../../source/tools/atlas/wxJS/io/textline.cpp:102: warning: comparison between signed and unsigned integer expressions
../../../source/tools/atlas/wxJS/io/textline.cpp: In static member function 'static bool wxjs::io::TextLine::SetProperty(wxjs::Index*, JSContext*, JSObject*, int, jsval*)':
../../../source/tools/atlas/wxJS/io/textline.cpp:134: warning: comparison between signed and unsigned integer expressions
../../../source/tools/atlas/wxJS/io/textline.cpp: In static member function 'static bool wxjs::io::TextLine::Enumerate(wxjs::Index*, JSContext*, JSObject*, JSIterateOp, jsval*, jsid*)':
../../../source/tools/atlas/wxJS/io/textline.cpp:186: warning: comparison between signed and unsigned integer expressions
DLLInterface.cpp
In file included from /usr/include/libxml2/libxml/parser.h:15,
from ../../../source/tools/atlas/AtlasUI/Misc/DLLInterface.cpp:42:
/usr/include/libxml2/libxml/xmlversion.h:429:1: warning: "ATTRIBUTE_PRINTF" redefined
In file included from /usr/include/wx-2.8/wx/wxprec.h:13,
from ../../../source/tools/atlas/AtlasUI/Misc/precompiled.h:43,
from ../../../source/tools/atlas/AtlasUI/Misc/precompiled.cpp:18:
/usr/include/wx-2.8/wx/defs.h:501:1: warning: this is the location of the previous definition
Trigger.cpp
../../../source/tools/atlas/AtlasUI/ScenarioEditor/Sections/Trigger/Trigger.cpp:1049: warning: unused parameter 'label'
DLL.cpp
../../../source/collada/DLL.cpp: In member function 'virtual void BufferedOutputCallback::operator()(const char*, unsigned int)':
../../../source/collada/DLL.cpp:78: warning: comparison between signed and unsigned integer expressions
../../../source/collada/DLL.cpp:84: warning: comparison between signed and unsigned integer expressions
test_byte_order.cpp
In file included from ../../../source/lib/self_test.h:190,
from ../../../source/pch/test/precompiled.h:24,
from ../../../source/pch/test/precompiled.cpp:25:
../../../libraries/cxxtest/include/cxxtest/TestSuite.h: In function 'bool CxxTest::equals(X, Y) [with X = long int, Y = long long unsigned int]':
../../../libraries/cxxtest/include/cxxtest/TestSuite.h:56: instantiated from 'void CxxTest::doAssertEquals(const char*, unsigned int, const char*, X, const char*, Y, const char*) [with X = long int, Y = long long unsigned int]'
../../../source/lib/tests/../../../source/lib/tests/test_byte_order.h:83: instantiated from here
../../../libraries/cxxtest/include/cxxtest/TestSuite.h:47: warning: comparison between signed and unsigned integer expressions
test_allocators.cpp
In file included from ../../../source/lib/self_test.h:190,
from ../../../source/pch/test/precompiled.h:24,
from ../../../source/pch/test/precompiled.cpp:25:
../../../libraries/cxxtest/include/cxxtest/TestSuite.h: In function 'bool CxxTest::equals(X, Y) [with X = unsigned int, Y = int]':
../../../libraries/cxxtest/include/cxxtest/TestSuite.h:56: instantiated from 'void CxxTest::doAssertEquals(const char*, unsigned int, const char*, X, const char*, Y, const char*) [with X = unsigned int, Y = int]'
../../../source/pch/test/../../../source/lib/allocators/tests/test_allocators.h:42: instantiated from here
../../../libraries/cxxtest/include/cxxtest/TestSuite.h:47: warning: comparison between signed and unsigned integer expressions
#270 fixed Crash rendering water shaders when GL_ARB_shader_objects not supported Aviv
Description

Game crashed on startup. I have a pretty crappy graphics card - Mobile Intel 945 Express Chipset Family - so that might be the cause.

#271 duplicate Build and units management Zervox
Description

-Players can build and walk in water.

-Players can build in neutral territory(dont know about enemy territory)

-Players can harvest on neutral territory(dont know about enemy territory)

-If building a farm outside of mill/other gather structure range, it cannot be harvested, but even if you build a mill there after the farm has been built it still cant be harvested

-Queuing unit production is very slow, have to wait half to one second before able to queue a new unit.

-When moving units in groups some of them doesnt stop running trying to get to the path-waypoint location loop running in circles.

#272 fixed Citizens should auto-gather from Fields after finishing construction. sidharth Zervox
Description

-Fixing so that when Villager/builder woman has built a farm they will automatically start farming on it, like when a villager has finished chopping a tree they move to the next possible one.

#273 fixed Atlas not working under Vista or Windows 7 beta. (tested both) Zervox
Description

-It only show a blue screen where the map is supposed to be.

http://zyk-production.com/contributions/atlas.jpg

#274 invalid Stone/mineral/tree models Michael D. Hafer Zervox
Description

-Make different amount of resources on these nodes like.

-Larger tree/stone/mineral -> more resources to harvest

-Smaller tree/stone/mineral -> less resource to harvest

#275 wontfix Stamina values do not seem to translate correctly from entity to actual gameplay Michael D. Hafer
Description

The <stamina> tag in a unit's entity does not seem to effect the unit's actual stamina in-game, no matter what value I give it as <max>. I can give a unit 100 stamina or 10000 stamina and the unit will still run the same distance in-game. This is incorrect. A unit should run further the higher his Max Stamina.

#276 fixed Renderer Enhancement: Distance Fog myconid Michael D. Hafer
Description

Would like the renderer to have distance fog implemented and able to be enabled on a map through the Atlas map editor. Some variables would include:

  • Thickness
  • Tint
  • Distance (the distance that the background becomes 100% obscured by the fog)
  • anything else?

This would be a good way to visually mask the fact that we don't have other whiz-bang graphical features like normal maps and suchness.

#277 fixed [PATCH]Unit selections gerbilOFdoom Zervox
Description

-When dragging the selection box over screen, only select military units if there are any, if not, then make it only choose villagers, and only let 1 building get selected at once instead of(lets say) 10, currently if you drag you get villagers,buildings and military units in one selection

#278 fixed Queuing unit production should be made faster Zervox
Description

-The way it is now, you have to wait a certain time before you can click the create "any unit here" or else it doesnt stack the order, making it painfully slow when a player have to build 1+ unit, it should register per click and not have what seems to be a wait function between each possible click.

-0.5 sec to 1 sec before able to queue another unit into production queue everytime is very slow.

#279 fixed vfs_Lookup does mkdir incorrectly Jan Wassenberg Philip Taylor
Description

On Linux: Delete binaries/data/cache. Run the game. Get an error:

/usr/include/boost/shared_ptr.hpp:375: T* boost::shared_ptr<T>::operator->() const [with T = RealDirectory]: Assertion `px != 0' failed.

vfs_lookup.cpp attempts to create the directory with mkdir. Two problems:

First: It appears to call mkdir("/.../binaries/data/") with subdirectoryName == "cache". Then it calls mkdir("/.../binaries/data/cache/mods") with subdirectoryName == "mods". It never actually creates cache, so it fails.

Second: If mkdir fails, then no error is reported, and the shared_ptr assertion occurs arbitrarily later. If it returns -1 and errno != EEXIST then the error should probably be reported immediately.

#280 duplicate Hi-res timer errors on startup and game not playable arn34
Description

After compiling the project with VC++2008 on Win XP Pro SP3, I get the following error on startup (pyrogenesis_dbg.exe) :

Assertion failed: "resolution <= 2e-3"
Location: whrt.cpp:114 (InitCounter)

Call stack:

InitCounter (whrt.cpp:100)


errno = 0 (?)
OS error = 0 (no error code was set)

I can click continue and launch the game after several other error messages :

Assertion failed: "resolution > 0.0"
Location: frequency_filter.cpp:36 (FrequencyEstimator::FrequencyEstimator)

Call stack:

ILT+150745(??0FrequencyEstimatorQAENZ) (:0)

ILT+25630(??0FrequencyFilterQAENNZ) (:0)

ILT+134050(?CreateFrequencyFilterYA?AV?$shared_ptrUIFrequencyFilterboostNNZ) (:0)

RunGameOrAtlas (main.cpp:379)
    argc = 1 (0x00000001)
    argv = 0x01D460D8 -> 0x01D460E0 -> "C:\0ad\binaries\system\pyrogenesis_dbg.exe"
    ran_atlas = false
    args = 
        m_Args = (error -100500 while analyzing vector<pair<CStr8,CStr8> >)
        m_Arg0 = { (error -100500 while analyzing string >) }

    res = 1.6976e-314 (0x00000000CCCCCCCC)

ILT+159840(_main) (:0)

__tmainCRTStartup (crtexe.c:410)

mainCRTStartup (crtexe.c:393)

CallStartupWithinTryBlock (wseh.cpp:350)
    ret = 1245060 (0x0012FF84)


errno = 0 (?)
OS error = 0 (no error code was set)
Function call failed: return value was -110100 (Unknown error (-110100, 0xFFFE51EC))
Location: vfs.cpp:111 (VFS::LoadFile)

Call stack:

(error while dumping stack: No stack frames found)
errno = 0 (?)
OS error = 0 (no error code was set)
Assertion failed: "TimeSinceLastFrame > 0.0f"
Location: main.cpp:201 (Frame)

Call stack:

Frame (main.cpp:182)
    need_update = false
    time = 4.79453e-199 (0x16C25990CCCCCCCC)
    TimeSinceLastFrame = 0.000000 (0x0000002F)
    need_render = false
    is_building_archive = true 

RunGameOrAtlas (main.cpp:379)
    argc = 1 (0x00000001)
    argv = 0x01D460D8 -> 0x01D460E0 -> "C:\0ad\binaries\system\pyrogenesis_dbg.exe"
    ran_atlas = false
    args = 
        m_Args = (error -100500 while analyzing vector<pair<CStr8,CStr8> >)
        m_Arg0 = { (error -100500 while analyzing string >) }

    res = 1.6976e-314 (0x00000000CCCCCCCC)

ILT+159840(_main) (:0)

__tmainCRTStartup (crtexe.c:410)

mainCRTStartup (crtexe.c:393)

CallStartupWithinTryBlock (wseh.cpp:350)
    ret = 1245060 (0x0012FF84)


errno = 0 (?)

Note that I need to "Supress" this last error message to have access to the game menu.

Then I start a new "Single Player" game and it launches the game without problem ... unless I cannot move !

What I can do is :

  • rotate around the units (with LMB + RMB)
  • select a unit (LMB)
  • interact with gui (hide/show)

But right-clicking on a tree when an unit is selected doesn't send it to the tree (the cursor turns to wood, but the unit doesn't move).

I guess this is related to this bug : http://trac.wildfiregames.com/ticket/253

#281 fixed Build error in AtlasUI Philip Taylor bugmenot
Description

Hello, I try to compile wildfire on ubuntu jaunty following your build instructions.

Now there is an error while compiling the AtlasUI. The output is:

==== Building AtlasUI ====
precompiled.cpp
ActorEditor.cpp
AnimListEditor.cpp
ActorEditorListCtrl.cpp
PropListEditor.cpp
ActorViewer.cpp
ColourTesterFileCtrl.cpp
ColourTester.cpp
ColourTesterColourCtrl.cpp
ColourTesterImageCtrl.cpp
ActionButton.cpp
ToolButton.cpp
Canvas.cpp
ColourDialog.cpp
DraggableListCtrl.cpp
DraggableListCtrlCommands.cpp
ListCtrlValidator.cpp
QuickComboBox.cpp
QuickTextCtrl.cpp
EditableListCtrl.cpp
FieldEditCtrl.cpp
QuickFileCtrl.cpp
EditableListCtrlCommands.cpp
FileHistory.cpp
HighResTimer.cpp
SnapSplitterWindow.cpp
virtualdirtreectrl.cpp
AtlasWindow.cpp
AtlasDialog.cpp
ErrorReporter.cpp
Observable.cpp
AtlasClipboard.cpp
AtlasEventLoop.cpp
Datafile.cpp
AtlasWindowCommand.cpp
AtlasWindowCommandProc.cpp
FFmpeg.cpp
VideoRecorder.cpp
DLLInterface.cpp
SectionLayout.cpp
ScenarioEditor.cpp
Sidebar.cpp
Cinematic.cpp
LightControl.cpp
Environment.cpp
Terrain.cpp
Trigger.cpp
../../../source/tools/atlas/AtlasUI/ScenarioEditor/Sections/Trigger/Trigger.cpp:1050: warning: unused parameter 'label'
ScriptedTool.cpp
AlterElevation.cpp
PlaceObject.cpp
FlattenElevation.cpp
PaintTerrain.cpp
TransformObject.cpp
ObjectSettings.cpp
MiscState.cpp
Brushes.cpp
Tools.cpp
Linking AtlasUI
obj/AtlasUI_Debug/ColourTesterColourCtrl.o: In function `CustomColourButton::OnButton(wxCommandEvent&)':
ColourTesterColourCtrl.cpp:(.text._ZN18CustomColourButton8OnButtonER14wxCommandEvent[CustomColourButton::OnButton(wxCommandEvent&)]+0x92): undefined reference to `wxColour::IsOk() const'
obj/AtlasUI_Debug/FieldEditCtrl.o: In function `wxColour::Ok() const':
/usr/include/wx-2.8/wx/gtk/colour.h:30: undefined reference to `wxColour::IsOk() const'
/usr/bin/ld: ../../../binaries/system/libAtlasUI_dbg.so: hidden symbol `wxColour::IsOk() const' isn't defined
/usr/bin/ld: final link failed: Nonrepresentable section on output
collect2: ld returned 1 exit status
make[2]: *** [../../../binaries/system/libAtlasUI_dbg.so] Error 1
make[1]: *** [AtlasUI] Error 2
make[1]: Leaving directory `/build/korn-wildfire_0svn7029-1~getdeb1-amd64-L8XWbo/wildfire-0svn7029-1~getdeb1/build/workspaces/gcc'
make: *** [build-stamp] Error 2
dpkg-buildpackage: failure: debian/rules build gave error exit status 2
#282 fixed Infinite recursion when crashlog.txt can't be written Jan Wassenberg Philip Taylor
Description

In debug.cpp, debug_WriteCrashlog tries to open crashlog.txt for writing. If it fails (e.g. it doesn't have write permission to that directory), it resets isBusy and then does WARN_RETURN, which calls debug_DisplayError, which calls debug_WriteCrashlog, and isBusy is false so it loops forever.

See http://ruby.pastebin.com/m53d88e4a for an example of this.

#283 fixed Duplicate LibError codes 110200, 110201 Jan Wassenberg Philip Taylor
Description

lib/file/path.h:

    const LibError PATH_ROOT_DIR_ALREADY_SET = -110200;
    const LibError PATH_NOT_IN_ROOT_DIR      = -110201;

lib/file/file.h:

    const LibError FILE_ACCESS = -110200;
    const LibError IO          = -110201;

Confusion ensues.

#284 fixed crash on vista heroine
Description

I use a laptop with vista OS to open the pyrogenesis.exe, then it crash.

#285 fixed Crash when loading single player game stefano
Description

Much to our regret we must report the program has encountered an error.

Details: unhandled exception (Access violation writing 0x00000000)

Location: unknown:0 (?)

Call stack:

(error while dumping stack: No stack frames found) errno = 0 (?) OS error = Accesso a posizione di memoria non valido.

#286 invalid Modeling and Mapping Greek (Hellenic) Buildings v2.0 Art Department Michael D. Hafer
Description

Greek Buildings v2.0

Difficulty: High | Medium | Low

Estimated Completion Time: 10 Weeks


This task is for modeling and mapping version 2.0 of the Greek buildings/structures.

The structure list is below, divided by type:

Note: Polygon counts do not include props (like jars, baskets, crates, etc.), which can cost extra. Try to make these numbers your upper limit for the structure. Optimize optimize optimize.

Civic

Defense

  • Scout Tower [an "outpost" that grants line of sight (los) to an area of the map] ~ 500 tris
  • Wall Segments [short, medium, and long - units can be garrisoned atop the city walls for defense] ~ 150/250/375 tris
  • Wall Gate ~ 1000 tris
  • Wall Tower [units can be garrisoned atop these towers for defensive purposes] ~ 150-300 tris

Econ

  • Farmstead [like a "granary" or farm house - this allows the gathering of food within its los] ~ 750 tris
  • Market [trains Traders, researches economic improvements, and facilitates bartering] ~ 2000 tris
  • Mill [a dropsite for wood, stone, and metal] ~ 750 tris

Military

  • Barracks [where most units are trained and where military improvements are researched] ~ 1000 tris
  • Dock [the shipyard where ships are built] ~ 1000 tris
  • Fortress [a big and strong stone fort where siege engines can be built. Most other factions train heroes and super units here as well, but not the Greeks (see below)] ~1500 tris

Special [these buildings are unique to the Greeks only]

  • Gymnasion [where Super Units are trained] ~1200 tris
  • Tholos [where Heroes are trained] ~ 1200 tris
  • Theatron [a large theater which grants the "Hellenisation" bonus] ~ 2500 tris (will prolly just have you tweak this one, as it's already pretty good)

The relevant texture files can be found within the game's directory structure. The files are:

binaries\data\mods\public\art\textures\skins\structural\hele_struct.dds

binaries\data\mods\public\art\textures\skins\structural\hele_roof_round.dds

binaries\data\mods\public\art\textures\skins\props\hele_props_a.dds

binaries\data\mods\public\art\textures\skins\props\hele_tile_c.dds

#287 fixed dock placement valakas46
Description

when placing a dock if location is invalid you get this error

gui/test/functions_sim_entity.js(254): Index out of bounds. ERROR: JavaScript Error (gui/test/functions_sim_entity.js, line 254): Index out of bounds. gui/test/functions_sim_entity.js(254): Invalid parameter(s) or count ERROR: JavaScript Error (gui/test/functions_sim_entity.js, line 254): Invalid parameter(s) or count

but are still allowed to build dock even if its underwater also it changes the land around build location and the land doesnt fix its self if you delete the building

#288 fixed libCollada not found by game when executed outside system directory Philip Taylor
Description

On Linux, if the game is run from outside the 'system' directory, it can't find ./libCollada_dbg.so and dies. It should probably look in the game executable's path to find the library (perhaps using sys_get_executable_name).

#289 invalid Modeling and Texturing Game Fauna (Animals) Amish Coelho Michael D. Hafer
Description

FAUNA

Difficulty: High | Medium | Low

Estimated Completion Time: 11 Weeks


Need Meshes and Textures for the following animals:

MT027 - FaunaDragonVar3

MT029 - FaunaCow

MT030 - FaunaCrocodile

MT033 - FaunaPig* (needs remodeled and rigged)

MT034 - FaunaPheasant

MT035 - FaunaSheep

MT036 - FaunaWaterBuffalo

MT037 - FaunaWildebeest

MT038 - FaunaSeal

MT039 - FaunaCamel

MT040 - FaunaReindeer

MT041 - FaunaPolarBear

MT043 - FaunaPorpoise (or dolphin)

MT044 - FaunaAlbatross

MT045 - FaunaEgret

MT046 - FaunaGoose

MT047 - FaunaVulture

MT048 - FaunaSeagull

Requested additional animals. These would be done after you've completed the "official" list above if you have the time or gumption:

MT071 - FaunaFlamingo

MT072 - FaunaGiraffe

MT073 - FaunaZebra

MT074 - FaunaHyena


Some relevant texture files can be found within the game's directory structure. The files are:

binaries\data\mods\public\art\textures\skins\skeletal\

binaries\data\mods\internal\art\textures\skins\skeletal\

#291 fixed Many compiling errors Frederick Wrigley
Description

This is the result I got from following the instructions on the wiki om my Ubuntu 8.10 laptop

oldrocker99@oldrocker99-laptop:~/games/stargus-0.2/trunk/build/workspaces$ cd gcc oldrocker99@oldrocker99-laptop:~/games/stargus-0.2/trunk/build/workspaces/gcc$ make -j2

Building network

Building engine

precompiled.cpp NetClient.cpp In file included from ../../../source/pch/engine/precompiled.h:30,

from ../../../source/pch/engine/precompiled.cpp:18:

../../../source/scripting/SpiderMonkey.h:45:22: error: js/jsapi.h: No such file or directory ../../../source/scripting/SpiderMonkey.h:49:26: error: js/jsdbgapi.h: No such file or directory In file included from ../../../source/scripting/ScriptingHost.h:42,

from ../../../source/scripting/JSConversions.h:23, from ../../../source/scripting/JSSerialization.h:23, from ../../../source/network/NetMessages.h:31, from ../../../source/network/NetMessage.h:38, from ../../../source/network/Network.h:68, from ../../../source/network/NetSession.h:30, from ../../../source/network/NetClient.h:30, from ../../../source/network/NetClient.cpp:28:

../../../source/scripting/SpiderMonkey.h:45:22: error: js/jsapi.h: No such file or directory ../../../source/scripting/SpiderMonkey.h:49:26: error: js/jsdbgapi.h: No such file or directory In file included from ../../../source/scripting/SpiderMonkey.h:54,

from ../../../source/scripting/ScriptingHost.h:42, from ../../../source/scripting/JSConversions.h:23, from ../../../source/scripting/JSSerialization.h:23, from ../../../source/network/NetMessages.h:31, from ../../../source/network/NetMessage.h:38, from ../../../source/network/Network.h:68, from ../../../source/network/NetSession.h:30, from ../../../source/network/NetClient.h:30, from ../../../source/network/NetClient.cpp:28:

../../../source/scripting/JSUtil.h:20: error: ‘jsval’ does not name a type In file included from ../../../source/scripting/JSConversions.h:23,

from ../../../source/scripting/JSSerialization.h:23, from ../../../source/network/NetMessages.h:31, from ../../../source/network/NetMessage.h:38, from ../../../source/network/Network.h:68, from ../../../source/network/NetSession.h:30, from ../../../source/network/NetClient.h:30, from ../../../source/network/NetClient.cpp:28:

../../../source/scripting/ScriptingHost.h:72: error: ISO C++ forbids declaration of ‘JSObject’ with no type ../../../source/scripting/ScriptingHost.h:72: error: expected ‘;’ before ‘*’ token ../../../source/scripting/ScriptingHost.h:73: error: ISO C++ forbids declaration of ‘JSClass’ with no type ../../../source/scripting/ScriptingHost.h:73: error: expected ‘;’ before ‘*’ token ../../../source/scripting/ScriptingHost.h:79: error: ISO C++ forbids declaration of ‘JSRuntime’ with no type ../../../source/scripting/ScriptingHost.h:79: error: expected ‘;’ before ‘*’ token ../../../source/scripting/ScriptingHost.h:80: error: ISO C++ forbids declaration of ‘JSContext’ with no type ../../../source/scripting/ScriptingHost.h:80: error: expected ‘;’ before ‘*’ token ../../../source/scripting/ScriptingHost.h:81: error: ISO C++ forbids declaration of ‘JSObject’ with no type ../../../source/scripting/ScriptingHost.h:81: error: expected ‘;’ before ‘*’ token ../../../source/scripting/ScriptingHost.h:83: error: ‘JSErrorReport’ does not name a type ../../../source/scripting/ScriptingHost.h:89: error: expected ‘;’ before ‘(’ token ../../../source/scripting/ScriptingHost.h:91: error: expected ‘;’ before ‘(’ token ../../../source/scripting/ScriptingHost.h:103: error: ISO C++ forbids declaration of ‘JSContext’ with no type ../../../source/scripting/ScriptingHost.h:103: error: ‘JSContext’ declared as an ‘inline’ field ../../../source/scripting/ScriptingHost.h:103: error: expected ‘;’ before ‘*’ token ../../../source/scripting/ScriptingHost.h:104: error: expected `;' before ‘inline’ ../../../source/scripting/ScriptingHost.h:104: error: ISO C++ forbids declaration of ‘JSContext’ with no type ../../../source/scripting/ScriptingHost.h:104: error: ‘JSContext’ declared as an ‘inline’ field ../../../source/scripting/ScriptingHost.h:104: error: expected ‘;’ before ‘*’ token ../../../source/scripting/ScriptingHost.h:105: error: expected `;' before ‘inline’ ../../../source/scripting/ScriptingHost.h:105: error: ISO C++ forbids declaration of ‘JSObject’ with no type ../../../source/scripting/ScriptingHost.h:105: error: ‘JSObject’ declared as an ‘inline’ field ../../../source/scripting/ScriptingHost.h:105: error: expected ‘;’ before ‘*’ token ../../../source/scripting/ScriptingHost.h:107: error: expected `;' before ‘void’ ../../../source/scripting/ScriptingHost.h:107: error: ‘JSObject’ has not been declared ../../../source/scripting/ScriptingHost.h:108: error: ‘JSObject’ has not been declared ../../../source/scripting/ScriptingHost.h:111: error: ‘jsval’ does not name a type ../../../source/scripting/ScriptingHost.h:113: error: ‘jsval’ does not name a type ../../../source/scripting/ScriptingHost.h:115: error: ‘JSNative’ has not been declared ../../../source/scripting/ScriptingHost.h:120: error: ‘JSClass’ has not been declared ../../../source/scripting/ScriptingHost.h:120: error: ‘JSNative’ has not been declared ../../../source/scripting/ScriptingHost.h:120: error: ‘uintN’ has not been declared ../../../source/scripting/ScriptingHost.h:120: error: ‘JSPropertySpec’ has not been declared ../../../source/scripting/ScriptingHost.h:120: error: ‘JSFunctionSpec’ has not been declared ../../../source/scripting/ScriptingHost.h:120: error: ‘JSPropertySpec’ has not been declared ../../../source/scripting/ScriptingHost.h:120: error: ‘JSFunctionSpec’ has not been declared ../../../source/scripting/ScriptingHost.h:122: error: ISO C++ forbids declaration of ‘JSObject’ with no type ../../../source/scripting/ScriptingHost.h:122: error: expected ‘;’ before ‘*’ token ../../../source/scripting/ScriptingHost.h:124: error: ‘JSObject’ has not been declared ../../../source/scripting/ScriptingHost.h:124: error: ‘jsval’ has not been declared ../../../source/scripting/ScriptingHost.h:125: error: ‘jsval’ does not name a type ../../../source/scripting/ScriptingHost.h:127: error: ‘JSObject’ has not been declared ../../../source/scripting/ScriptingHost.h:128: error: ‘JSObject’ has not been declared ../../../source/scripting/ScriptingHost.h:130: error: ‘jsval’ has not been declared ../../../source/scripting/ScriptingHost.h:131: error: ‘jsval’ does not name a type ../../../source/scripting/ScriptingHost.h:133: error: expected ‘,’ or ‘...’ before ‘value’ ../../../source/scripting/ScriptingHost.h:133: error: ISO C++ forbids declaration of ‘jsval’ with no type ../../../source/scripting/ScriptingHost.h:134: error: expected ‘,’ or ‘...’ before ‘value’ ../../../source/scripting/ScriptingHost.h:134: error: ISO C++ forbids declaration of ‘jsval’ with no type ../../../source/scripting/ScriptingHost.h:135: error: expected ‘,’ or ‘...’ before ‘value’ ../../../source/scripting/ScriptingHost.h:135: error: ISO C++ forbids declaration of ‘jsval’ with no type ../../../source/scripting/ScriptingHost.h:136: error: expected ‘,’ or ‘...’ before ‘value’ ../../../source/scripting/ScriptingHost.h:136: error: ISO C++ forbids declaration of ‘jsval’ with no type ../../../source/scripting/ScriptingHost.h:137: error: expected ‘,’ or ‘...’ before ‘value’ ../../../source/scripting/ScriptingHost.h:137: error: ISO C++ forbids declaration of ‘jsval’ with no type ../../../source/scripting/ScriptingHost.h:138: error: expected ‘,’ or ‘...’ before ‘value’ ../../../source/scripting/ScriptingHost.h:138: error: ISO C++ forbids declaration of ‘jsval’ with no type ../../../source/scripting/ScriptingHost.h:140: error: ‘jsval’ does not name a type ../../../source/scripting/ScriptingHost.h:141: error: ‘jsval’ does not name a type ../../../source/scripting/ScriptingHost.h:143: error: ‘JSContext’ has not been declared ../../../source/scripting/ScriptingHost.h:143: error: ‘JSErrorReport’ has not been declared In file included from ../../../source/scripting/JSSerialization.h:23,

from ../../../source/network/NetMessages.h:31, from ../../../source/network/NetMessage.h:38, from ../../../source/network/Network.h:68, from ../../../source/network/NetSession.h:30, from ../../../source/network/NetClient.h:30, from ../../../source/network/NetClient.cpp:28:

../../../source/scripting/JSConversions.h:40: error: template declaration of ‘T* ToNative’ ../../../source/scripting/JSConversions.h:40: error: ‘JSContext’ was not declared in this scope ../../../source/scripting/JSConversions.h:40: error: ‘cx’ was not declared in this scope ../../../source/scripting/JSConversions.h:40: error: ‘JSObject’ was not declared in this scope ../../../source/scripting/JSConversions.h:40: error: ‘obj’ was not declared in this scope ../../../source/scripting/JSConversions.h:45: error: expected constructor, destructor, or type conversion before ‘*’ token ../../../source/scripting/JSConversions.h:52: error: template declaration of ‘T* ToNative’ ../../../source/scripting/JSConversions.h:52: error: ‘jsval’ was not declared in this scope ../../../source/scripting/JSConversions.h:59: error: template declaration of ‘bool ToPrimitive’ ../../../source/scripting/JSConversions.h:59: error: ‘JSContext’ was not declared in this scope ../../../source/scripting/JSConversions.h:59: error: expected primary-expression before ‘,’ token ../../../source/scripting/JSConversions.h:59: error: ‘jsval’ was not declared in this scope ../../../source/scripting/JSConversions.h:59: error: expected primary-expression before ‘&’ token ../../../source/scripting/JSConversions.h:59: error: ‘Storage’ was not declared in this scope ../../../source/scripting/JSConversions.h:68: error: template declaration of ‘bool ToPrimitive’ ../../../source/scripting/JSConversions.h:68: error: ‘JSContext’ was not declared in this scope ../../../source/scripting/JSConversions.h:68: error: expected primary-expression before ‘,’ token ../../../source/scripting/JSConversions.h:68: error: ‘jsval’ was not declared in this scope ../../../source/scripting/JSConversions.h:68: error: expected primary-expression before ‘*’ token ../../../source/scripting/JSConversions.h:68: error: ‘Storage’ was not declared in this scope ../../../source/scripting/JSConversions.h:77: error: ‘ToPrimitive’ declared as an ‘inline’ variable ../../../source/scripting/JSConversions.h:77: error: template declaration of ‘T ToPrimitive’ ../../../source/scripting/JSConversions.h:77: error: ‘JSContext’ was not declared in this scope ../../../source/scripting/JSConversions.h:77: error: ‘cx’ was not declared in this scope ../../../source/scripting/JSConversions.h:77: error: ‘jsval’ was not declared in this scope ../../../source/scripting/JSConversions.h:86: error: ‘ToPrimitive’ declared as an ‘inline’ variable ../../../source/scripting/JSConversions.h:86: error: template declaration of ‘T ToPrimitive’ ../../../source/scripting/JSConversions.h:86: error: ‘jsval’ was not declared in this scope ../../../source/scripting/JSConversions.h:91: error: expected constructor, destructor, or type conversion before ‘ToJSVal’ ../../../source/scripting/JSConversions.h:96: error: expected constructor, destructor, or type conversion before ‘ToJSVal’ ../../../source/scripting/JSConversions.h:101: error: expected constructor, destructor, or type conversion before ‘ToJSVal’ ../../../source/scripting/JSConversions.h:110: error: expected initializer before ‘<’ token ../../../source/scripting/JSConversions.h:111: error: expected constructor, destructor, or type conversion before ‘*’ token ../../../source/scripting/JSConversions.h:112: error: expected constructor, destructor, or type conversion before ‘ToJSVal’ ../../../source/scripting/JSConversions.h:115: error: expected initializer before ‘<’ token ../../../source/scripting/JSConversions.h:116: error: expected constructor, destructor, or type conversion before ‘*’ token ../../../source/scripting/JSConversions.h:119: error: expected initializer before ‘<’ token ../../../source/scripting/JSConversions.h:120: error: expected constructor, destructor, or type conversion before ‘ToJSVal’ ../../../source/scripting/JSConversions.h:123: error: expected initializer before ‘<’ token ../../../source/scripting/JSConversions.h:124: error: expected constructor, destructor, or type conversion before ‘*’ token ../../../source/scripting/JSConversions.h:127: error: expected initializer before ‘<’ token ../../../source/scripting/JSConversions.h:128: error: expected constructor, destructor, or type conversion before ‘*’ token ../../../source/scripting/JSConversions.h:131: error: expected initializer before ‘<’ token ../../../source/scripting/JSConversions.h:132: error: expected constructor, destructor, or type conversion before ‘ToJSVal’ ../../../source/scripting/JSConversions.h:135: error: expected initializer before ‘<’ token ../../../source/scripting/JSConversions.h:136: error: expected constructor, destructor, or type conversion before ‘ToJSVal’ ../../../source/scripting/JSConversions.h:137: error: expected constructor, destructor, or type conversion before ‘ToJSVal’ ../../../source/scripting/JSConversions.h:140: error: expected initializer before ‘<’ token ../../../source/scripting/JSConversions.h:141: error: expected constructor, destructor, or type conversion before ‘ToJSVal’ ../../../source/scripting/JSConversions.h:142: error: expected constructor, destructor, or type conversion before ‘ToJSVal’ ../../../source/scripting/JSConversions.h:145: error: expected initializer before ‘<’ token ../../../source/scripting/JSConversions.h:146: error: expected constructor, destructor, or type conversion before ‘ToJSVal’ ../../../source/scripting/JSConversions.h:147: error: expected constructor, destructor, or type conversion before ‘ToJSVal’ ../../../source/scripting/JSConversions.h:150: error: expected initializer before ‘<’ token ../../../source/scripting/JSConversions.h:151: error: expected constructor, destructor, or type conversion before ‘ToJSVal’ ../../../source/scripting/JSConversions.h:152: error: expected constructor, destructor, or type conversion before ‘ToJSVal’ ../../../source/scripting/JSConversions.h:173: error: expected initializer before ‘<’ token ../../../source/scripting/JSConversions.h:174: error: expected constructor, destructor, or type conversion before ‘ToJSVal’ ../../../source/scripting/JSConversions.h:175: error: expected constructor, destructor, or type conversion before ‘ToJSVal’ ../../../source/scripting/JSConversions.h:178: error: expected initializer before ‘<’ token ../../../source/scripting/JSConversions.h:179: error: expected constructor, destructor, or type conversion before ‘ToJSVal’ ../../../source/scripting/JSConversions.h:180: error: expected constructor, destructor, or type conversion before ‘ToJSVal’ ../../../source/scripting/JSConversions.h:183: error: expected initializer before ‘<’ token ../../../source/scripting/JSConversions.h:184: error: expected constructor, destructor, or type conversion before ‘ToJSVal’ ../../../source/scripting/JSConversions.h:185: error: expected constructor, destructor, or type conversion before ‘ToJSVal’ ../../../source/scripting/JSConversions.h:195: error: expected initializer before ‘<’ token ../../../source/scripting/JSConversions.h:196: error: expected constructor, destructor, or type conversion before ‘ToJSVal’ ../../../source/scripting/JSConversions.h:197: error: expected constructor, destructor, or type conversion before ‘ToJSVal’ ../../../source/scripting/JSConversions.h:200: error: expected initializer before ‘<’ token ../../../source/scripting/JSConversions.h:201: error: expected constructor, destructor, or type conversion before ‘ToJSVal’ ../../../source/scripting/JSConversions.h:202: error: expected constructor, destructor, or type conversion before ‘ToJSVal’ ../../../source/scripting/JSConversions.h:211: error: ‘jsval’ does not name a type ../../../source/scripting/JSConversions.h:212: error: expected `)' before ‘v’ ../../../source/scripting/JSConversions.h:214: error: expected constructor, destructor, or type conversion before ‘ToJSVal’ ../../../source/scripting/JSConversions.h:218: error: ‘jsval’ does not name a type In file included from ../../../source/network/NetMessages.h:31,

from ../../../source/network/NetMessage.h:38, from ../../../source/network/Network.h:68, from ../../../source/network/NetSession.h:30, from ../../../source/network/NetClient.h:30, from ../../../source/network/NetClient.cpp:28:

../../../source/scripting/JSSerialization.h:37: error: ‘jsval’ does not name a type ../../../source/scripting/JSSerialization.h:42: error: expected `)' before ‘data’ ../../../source/scripting/JSSerialization.h:56: error: expected type-specifier before ‘jsval’ ../../../source/scripting/JSSerialization.h: In member function ‘jsval_ser::operator CStr8() const’: ../../../source/scripting/JSSerialization.h:62: error: ‘ToPrimitive’ was not declared in this scope ../../../source/scripting/JSSerialization.h:62: error: expected primary-expression before ‘>’ token ../../../source/scripting/JSSerialization.h:62: error: ‘m_data’ was not declared in this scope ../../../source/scripting/JSSerialization.h: In member function ‘virtual size_t jsval_ser::GetSerializedLength() const’: ../../../source/scripting/JSSerialization.h:76: error: ‘ToPrimitive’ was not declared in this scope ../../../source/scripting/JSSerialization.h:76: error: expected primary-expression before ‘>’ token ../../../source/scripting/JSSerialization.h:76: error: ‘m_data’ was not declared in this scope ../../../source/scripting/JSSerialization.h: In member function ‘virtual uint8_t* jsval_ser::Serialize(uint8_t*) const’: ../../../source/scripting/JSSerialization.h:92: error: ‘m_data’ was not declared in this scope ../../../source/scripting/JSSerialization.h:92: error: ‘JSVAL_TO_INT’ was not declared in this scope ../../../source/scripting/JSSerialization.h:103: error: ‘m_data’ was not declared in this scope ../../../source/scripting/JSSerialization.h:103: error: ‘JSVAL_TO_DOUBLE’ was not declared in this scope ../../../source/scripting/JSSerialization.h:108: error: ‘ToPrimitive’ was not declared in this scope ../../../source/scripting/JSSerialization.h:108: error: expected primary-expression before ‘>’ token ../../../source/scripting/JSSerialization.h:108: error: ‘m_data’ was not declared in this scope ../../../source/scripting/JSSerialization.h: In member function ‘virtual const uint8_t* jsval_ser::Deserialize(const uint8_t*, const uint8_t*)’: ../../../source/scripting/JSSerialization.h:122: error: ‘m_data’ was not declared in this scope ../../../source/scripting/JSSerialization.h:122: error: ‘JSVAL_FALSE’ was not declared in this scope ../../../source/scripting/JSSerialization.h:125: error: ‘JSVAL_TRUE’ was not declared in this scope ../../../source/scripting/JSSerialization.h:131: error: ‘INT_TO_JSVAL’ was not declared in this scope ../../../source/scripting/JSSerialization.h:141: error: ‘uint32’ was not declared in this scope ../../../source/scripting/JSSerialization.h:141: error: expected `;' before ‘_v1’ ../../../source/scripting/JSSerialization.h:141: error: expected `;' before ‘_v2’ ../../../source/scripting/JSSerialization.h:141: error: ‘_v1’ was not declared in this scope ../../../source/scripting/JSSerialization.h:141: error: ‘_v1’ was not declared in this scope ../../../source/scripting/JSSerialization.h:141: error: ‘_v1’ was not declared in this scope ../../../source/scripting/JSSerialization.h:141: error: ‘_v1’ was not declared in this scope ../../../source/scripting/JSSerialization.h:141: error: ‘_v2’ was not declared in this scope ../../../source/scripting/JSSerialization.h:141: error: ‘_v2’ was not declared in this scope ../../../source/scripting/JSSerialization.h:141: error: ‘_v2’ was not declared in this scope ../../../source/scripting/JSSerialization.h:141: error: ‘_v2’ was not declared in this scope ../../../source/scripting/JSSerialization.h:141: error: ‘_v1’ was not declared in this scope ../../../source/scripting/JSSerialization.h:141: error: ‘_v2’ was not declared in this scope ../../../source/scripting/JSSerialization.h:142: error: ‘class ScriptingHost’ has no member named ‘GetContext’ ../../../source/scripting/JSSerialization.h:142: error: ‘JS_NewDoubleValue’ was not declared in this scope ../../../source/scripting/JSSerialization.h:149: error: ‘ToJSVal’ was not declared in this scope ../../../source/scripting/JSSerialization.h:149: error: expected primary-expression before ‘>’ token In file included from ../../../source/network/Network.h:68,

from ../../../source/network/NetSession.h:30, from ../../../source/network/NetClient.h:30, from ../../../source/network/NetClient.cpp:28:

../../../source/network/NetMessage.h: At global scope: ../../../source/network/NetMessage.h:165: error: ‘JSContext’ has not been declared ../../../source/network/NetMessage.h:166: error: ‘uintN’ has not been declared ../../../source/network/NetMessage.h:167: error: ‘jsval’ has not been declared In file included from ../../../source/scripting/SynchedJSObject.h:54,

from ../../../source/ps/Player.h:22, from ../../../source/ps/GameAttributes.h:21, from ../../../source/network/NetSession.h:32, from ../../../source/network/NetClient.h:30, from ../../../source/network/NetClient.cpp:28:

../../../source/scripting/ScriptableObject.h:37: error: ‘jsval’ does not name a type ../../../source/scripting/ScriptableObject.h:38: error: ‘JSContext’ has not been declared ../../../source/scripting/ScriptableObject.h:38: error: ‘jsval’ has not been declared ../../../source/scripting/ScriptableObject.h:47: error: expected identifier before ‘*’ token ../../../source/scripting/ScriptableObject.h:47: error: ‘JSContext’ has not been declared ../../../source/scripting/ScriptableObject.h:47: error: ISO C++ forbids declaration of ‘jsval’ with no type ../../../source/scripting/ScriptableObject.h:47: error: ‘jsval’ declared as function returning a function ../../../source/scripting/ScriptableObject.h:48: error: ‘JSContext’ has not been declared ../../../source/scripting/ScriptableObject.h:54: error: ‘JSContext’ has not been declared ../../../source/scripting/ScriptableObject.h:74: error: ‘jsval’ does not name a type ../../../source/scripting/ScriptableObject.h:78: error: ‘JSContext’ has not been declared ../../../source/scripting/ScriptableObject.h:78: error: ‘jsval’ has not been declared ../../../source/scripting/ScriptableObject.h:96: error: ‘jsval’ does not name a type ../../../source/scripting/ScriptableObject.h:100: error: ‘JSContext’ has not been declared ../../../source/scripting/ScriptableObject.h:100: error: ‘jsval’ has not been declared ../../../source/scripting/ScriptableObject.h:112: error: ‘GetFn’ in class ‘IJSObject’ does not name a type ../../../source/scripting/ScriptableObject.h:118: error: expected `)' before ‘Getter’ ../../../source/network/NetClient.cpp:699: error: expected `}' at end of input ../../../source/network/NetClient.cpp:699: error: expected unqualified-id at end of input make[1]: * [obj/network_Debug/NetClient.o] Error 1 make: * [network] Error 2 make: * Waiting for unfinished jobs.... In file included from ../../../source/scripting/SpiderMonkey.h:54,

from ../../../source/pch/engine/precompiled.h:30, from ../../../source/pch/engine/precompiled.cpp:18:

../../../source/scripting/JSUtil.h:20: error: ‘jsval’ does not name a type make[1]: * [obj/engine_Debug/precompiled.h.gch] Error 1 make: * [engine] Error 2

I am not a coder, but I've compiled a number of programs successfully. If there's a simple thing I'm doing wrong, let me know.

#292 fixed Handle model-loading failures gracefully Philip Taylor
Description

If a model fails to load (e.g. the Collada library wasn't compiled), the code currently prints an error message and returns null and then the game crashes a bit later. It should be handled better, e.g. not crashing and not rendering the unit, or (preferably) replacing the model with some kind of 'error' mesh so the problem is clearly visible.

#293 fixed Lots of printf format string errors Quentin Pradet Philip Taylor
Description

From the annotations added in r7072:

../../../source/ps/Interact.cpp: In function ‘LibError LoadUnitUIThunk(const VfsPath&, const FileInfo&, uintptr_t)’:                                               
../../../source/ps/Interact.cpp:985: warning: too many arguments for format                                                                                        
../../../source/ps/Filesystem.cpp: In member function ‘PSRETURN CVFSFile::Load(const VfsPath&)’:                                                                   
../../../source/ps/Filesystem.cpp:60: warning: format ‘%d’ expects type ‘int’, but argument 6 has type ‘LibError’                                                  
../../../source/ps/ConfigDB.cpp: In member function ‘bool CConfigDB::Reload(EConfigNamespace)’:                                                                    
../../../source/ps/ConfigDB.cpp:287: warning: format ‘%lld’ expects type ‘long long int’, but argument 6 has type ‘LibError’                                       
../../../source/ps/XML/XMLWriter.cpp: In member function ‘bool XMLWriter_File::StoreVFS(const char*)’:
../../../source/ps/XML/XMLWriter.cpp:92: warning: format ‘%d’ expects type ‘int’, but argument 5 has type ‘LibError’
../../../source/simulation/EntityTemplate.cpp: In member function ‘bool CEntityTemplate::LoadXml(const CStr8&)’:
../../../source/simulation/EntityTemplate.cpp:320: warning: use of ‘h’ length modifier with ‘s’ type character
../../../source/renderer/Renderer.cpp: In static member function ‘static CRenderer::RenderPath CRenderer::GetRenderPathByName(const CStr8&)’:
../../../source/renderer/Renderer.cpp:713: warning: use of ‘h’ length modifier with ‘s’ type character
../../../source/simulation/Technology.cpp: In member function ‘bool CTechnology::LoadElEffect(XMBElement, CXeromyces&, const CStr8&)’:
../../../source/simulation/Technology.cpp:300: warning: use of ‘h’ length modifier with ‘s’ type character
../../../source/gui/CGUI.cpp: In member function ‘void CGUI::LoadXmlFile(const std::string&)’:
../../../source/gui/CGUI.cpp:1111: warning: format ‘%s’ expects type ‘char*’, but argument 6 has type ‘PSRETURN’
../../../source/gui/CGUI.cpp: In member function ‘void CGUI::Xeromyces_ReadObject(XMBElement, CXeromyces*, IGUIObject*)’:
../../../source/gui/CGUI.cpp:1398: warning: too few arguments for format
../../../source/lib/ogl.cpp: In function ‘void dump_gl_error(GLenum)’:
../../../source/lib/ogl.cpp:276: warning: format ‘%04f’ expects type ‘double’, but argument 2 has type ‘GLenum’
../../../source/scripting/ScriptGlue.cpp: In function ‘JSBool GetBuildTimestamp(JSContext*, JSObject*, uintN, jsval*, jsval*)’:
../../../source/scripting/ScriptGlue.cpp:1070: warning: unknown conversion type character ‘w’ in format
../../../source/scripting/ScriptGlue.cpp:1070: warning: too many arguments for format
../../../source/scripting/ScriptGlue.cpp:1079: warning: unknown conversion type character ‘w’ in format
../../../source/scripting/ScriptGlue.cpp:1079: warning: too many arguments for format
../../../source/scripting/ScriptGlue.cpp: In function ‘JSBool GetTrigger(JSContext*, JSObject*, uintN, jsval*, jsval*)’:
../../../source/scripting/ScriptGlue.cpp:1381: warning: unknown conversion type character ‘w’ in format
../../../source/scripting/ScriptGlue.cpp:1381: warning: too many arguments for format
../../../source/lib/res/graphics/ogl_shader.cpp: In function ‘LibError Ogl_Shader_reload(Ogl_Shader*, const VfsPath&, Handle)’:
../../../source/lib/res/graphics/ogl_shader.cpp:157: warning: use of ‘h’ length modifier with ‘s’ type character
../../../source/lib/res/graphics/ogl_shader.cpp:173: warning: use of ‘h’ length modifier with ‘s’ type character
../../../source/lib/res/graphics/ogl_shader.cpp: In function ‘LibError do_load_shader(Ogl_Program*, const VfsPath&, Handle, const CXeromyces&, const XMBElement&)’:
../../../source/lib/res/graphics/ogl_shader.cpp:279: warning: use of ‘h’ length modifier with ‘s’ type character
../../../source/lib/res/graphics/ogl_shader.cpp:287: warning: use of ‘h’ length modifier with ‘s’ type character
../../../source/lib/res/graphics/ogl_shader.cpp:295: warning: use of ‘h’ length modifier with ‘s’ type character
../../../source/lib/res/graphics/ogl_shader.cpp: In function ‘LibError Ogl_Program_reload(Ogl_Program*, const VfsPath&, Handle)’:
../../../source/lib/res/graphics/ogl_shader.cpp:348: warning: use of ‘h’ length modifier with ‘s’ type character
../../../source/lib/res/graphics/ogl_shader.cpp:369: warning: use of ‘h’ length modifier with ‘s’ type character
../../../source/lib/res/graphics/ogl_shader.cpp:378: warning: use of ‘h’ length modifier with ‘s’ type character
../../../source/lib/res/graphics/ogl_shader.cpp:394: warning: use of ‘h’ length modifier with ‘s’ type character
../../../source/lib/res/graphics/ogl_shader.cpp:400: warning: use of ‘h’ length modifier with ‘s’ type character
../../../source/lib/sysdep/os/unix/x/x.cpp: In function ‘wchar_t* sys_clipboard_get()’:
../../../source/lib/sysdep/os/unix/x/x.cpp:173: warning: format ‘%d’ expects type ‘int’, but argument 4 has type ‘long unsigned int’
../../../source/lib/sysdep/os/unix/x/x.cpp:173: warning: format ‘%d’ expects type ‘int’, but argument 6 has type ‘long unsigned int’
../../../source/lib/sysdep/os/unix/x/x.cpp:184: warning: format ‘%d’ expects type ‘int’, but argument 3 has type ‘Atom’
../../../source/lib/sysdep/os/unix/x/x.cpp:184: warning: format ‘%d’ expects type ‘int’, but argument 4 has type ‘Atom’
#294 fixed EMULATE_SECURE_CRT sprintf_s doesn't match spec Philip Taylor
Description

secure_crt.cpp emulates sprintf_s, vsprintf_s, swprintf_s, vswprintf_s using the snprintf functions. These have the wrong behaviour when the buffer is too short (based on MSDN's documentation), and ought to be made consistent.

#295 fixed Picking units doesn't work as expected due to incorrect bounding box Jan Wassenberg
Description

Problem: 'picking' (selecting via cursor) units doesn't work as expected because the bounding box is calculated from the primary geometry of the entity and doesn't include props. Example: celt trader; clicking on either horse or rider should select the unit but currently doesn't.

(Jason's brief explanation of actor and props:) The way most of our actors in the game works is... there is geometry and there are various 'nodes' that are throughout the model - they can be parented to a bone, or in the cases of most static meshes - parented to the 0,0,0 coordinate. These nodes have a name and in the actor xml file it says.. associate this prop point (node) to display this actor (then it points to another actor) Example: <prop actor="props/units/heads/rome_monte_a.xml" attachpoint="helmet"/> The prop actor also has a model; for example.. within that prop actor it defines: <mesh>props/helmet/rome_helmet_d.pmd</mesh>

To solve this, I'd first recommend using Atlas to create an otherwise empty map with a celt trader to serve as a test. The picking/selection code itself is ok, what we need to do is change the bounding box to include props and then the selection will be as desired.

"props" are in turn actors containing a CModel, which again can have props. In this case (trader) I think the rider is a prop.

CModel has a CalcBounds which constructs bounds from all model vertices (possibly also looping over the animation). What we need to do is also recurse over m_Props and expand the parent's bounds to that of the child prop. these "bounds" (m_ObjectBounds) are CBound objects, which are expanded via operator+= (allowing both bounds or a vector as argument). suggestion for what to do: 1) make CalcObjectBounds and CalcAnimatedObjectBound take a parameter of the bounding box to calculate (or expand.. in that case, no longer do SetEmpty there) 2) CalcBounds (the master function that dispatches to one of the above impl functions) must be recursive, expanding the bounds for each prop's bound (m_Props[i].m_Model->ObjectBounds)

#296 fixed Infinite Field munky
Description

http://img30.imageshack.us/img30/2858/infintefield.jpg

The amount of the field went to 588.9999 which made it infinite. It was just this one and the others around it was working fine.

  • cant seem to change priority from major.
#297 fixed alSourceUnqueueBuffers fails with "invalid value" Jan Wassenberg
Description

This has been reported on two Linux systems, both running OpenALsoft. To narrow down the cause, I added some printfs [source ID, is it a valid source name, #processed buffers]:

ade7938 1 0
ade7938 1 0
ade7938 1 0
ade7938 1 0
ade7938 1 0
ade7938 1 0
ade7938 1 0
ade7938 1 0
ade7938 1 0
ade7938 1 0
adcede0 1 1

so the first time it's actually wanting to unqueue a buffer, OpenAL reports an error. After continuing from the error, it doesn't come up again during the program run.

alSourceUnqueueBuffers fails with "invalid value" iff a buffer cannot be unqueued because it's still playing. However what we do is ask how many buffers have finished before removing exactly that many. I have no idea what could be causing this, especially because the Windows OpenAL implementation does not raise this error. Help is very welcome.

#298 fixed Batch Training (Training queue) Michael D. Hafer
Description

The concept of "Batch" training:

Essentially training many units (of a same entity type) at once. This would be in multiples of 5. So basically a player can train anywhere from 5-30 units at once and once the batch is done training, ideally when the formations have been implemented, all the units in that batch (say: 20 hoplites) should march to the rally point as a pre-grouped battalion in formation.

We were thinking there could be an economy of scale applied as well, akin to gaining a discount in either unit training cost or training time (or both) the more that you queue into one batch.

So, the task can be broken down into multiple components:

A.) Implementing the batching itself. The player procedure to queue a batch should be the shift-click the unit icon, each shift-click adding 5 units to the batch up to 30 units. If the shift key is let go at any time that batch is done queuing. Any further shift-clicking would create a new batch.

B.) The economy of scale discount. The formula for the discount could follow a simple bell curve, so that 15-unit batches would be ideal, but the player can continue to queue more units into the batch, up to 30, and still get a discount, but not as lucrative. Whether the discount is in train time or cost (or both) should be made available to do based upon testing.

C.) Grouped into a Formation. This is contingent upon formations being implemented first. The newly created batch, once it is done training, should proceed to the rally point as a grouped formation of units.

#299 wontfix multihead water reflections render bug Lego
Description

Hi, i use an triplehead Desktop where every screen is connected to the Videocard and tryed your game.

It runs fine but there is a bug with the Water. On the first screen the Water looks normal, but on the second and third screen the water looks crazy. (see screenshots)

If i run the game in an lower resolution on one of the other screens this bug does not appear.

0ad_02.jpg and 0ad_03.jpg are made in window mode and the others in fullscreen mode

OS : Linux 2.6.28-gentoo-r6 (#3 SMP Tue Jun 30 14:37:14 CEST 2009)

CPU : x86_64, Intel Core i7 975 @ 3.33GHz (1x8x2), -0.00

MHz Memory : 5952 MiB; 1013 MiB free Graphics Card :

NVIDIA GeForce GTX 295/PCI/SSE2 OpenGL Drivers : 3.0.0 NVIDIA 185.18.14; OpenGL 3.0.0 NVIDIA 185.18.14

Video Mode : 5760x1200:24@0

#300 worksforme Can't start the game Nuno
Description

After compile when I try to start the game I get this message,

TIMER| InitVfs: 2.91095 ms TIMER| InitScripting: 6.55633 ms TIMER| CONFIG_Init: 6.02638 ms ERROR: Could not set 1024x768 graphics mode: Could not create GL context terminate called after throwing an instance of 'PSERROR_System_VmodeFailed'

what(): System_VmodeFailed

Aborted

I'm trying this in Linux, Fedora 11 x86_64

#301 wontfix CBound::Transform loop optimization ricky ricky
Description

The inner for loop in CBound::Transform contains a couple of float variable declarations. These declarations could be placed outside of the outer for loop so that the variable is not recreated inside the loops.

#302 invalid Test Matt Harrison Matt Sherman
Description

Test one

#303 wontfix Remove Atlas integration from main menu Jan Wassenberg
Description

To launch Atlas from within the game, we need to include atlas-specific code within the game and in particular ps/GameSetup/ . This is undesirable in terms of code organisation (see subsequent ticket). After short discussion, Philip, SimonG, and Jan concluded that the main menu 'Atlas' button should be removed:

  • no one currently uses it;
  • the original idea of implementing Atlas in terms of the in-game GUI has long since been changed, Atlas will remain an external app.
  • nice shortcuts to Atlas can be created in binaries/ or the Start Menu folder instead;

Any objections? This affects the UI design, main menu art and interface..

(simple implementation there: just grey-out the button until the main menu art is redesigned, which I believe was planned)

#305 fixed Naval battle system Matthijs de Rijk
Description

Every faction except the Iberians has combat ships. there are three types of ships:

  • Bireme This is the smallest battle ship in the game. It's slow, and has not much ramming power, altough they can damage a trireme critical. The manouvrebility is quite high.
  • Trireme The most common ship in use. It's the fastest type of all ships, wich makes an ultimate ramming power. A trireme can hunt down another trireme when at highest attack speed.
  • Quinquireme The biggest ship in the game. This massive ship is as fast as the bireme. But due their mass they crack other smaller ships like planks. they turn very slow and have a low acceleration. Only the Romans and the Carthaginians have this giant.

The Punic(Carthaginian), Hellenes, Roman and Phoenican(Persian) ships in the game will be able to ram each other. The celtic "trireme" can only use range, but they have a high armor level.

#306 wontfix "Call stack" when starting the game fabio
Description

Whenever I start the game I get the following "Call stack":

test@test-desktop:~/0ad/trunk/binaries/system$ ./pyrogenesis_dbg 
TIMER| InitVfs: 1.50002 ms
TIMER| InitScripting: 4.83857 ms
TIMER| CONFIG_Init: 9.17923 ms
TIMER| write_sys_info: 1.14488 ms
ogl_tex.cpp(699): Performance warning: your graphics card does not support compressed textures. The game will try to continue anyway, but may be slower than expected. Please try updating your graphics drivers; if that doesn't help, please try upgrading your hardware.
udbg_bfd_init: loading symbols from /home/test/0ad/trunk/binaries/system/pyrogenesis_dbg.
Performance warning: your graphics card does not support compressed textures. The game will try to continue anyway, but may be slower than expected. Please try updating your graphics drivers; if that doesn't help, please try upgrading your hardware.
Location: ogl_tex.cpp:699 (detect_gl_upload_caps)

Call stack:

(0x0848cf8f) ldbg.cpp:101 debug_DumpStack(wchar_t*, unsigned int, void*, char const*)
(0x0846237c) debug.cpp:341 debug_BuildErrorMessage(wchar_t const*, char const*, int, char const*, void*, char const*, ErrorMessageMem*)
(0x084626fc) debug.cpp:499 debug_DisplayError(wchar_t const*, unsigned int, void*, char const*, char const*, int, char const*, unsigned char*)
(0x0847c7bd) ogl_tex.cpp:700 detect_gl_upload_caps
(0x0847ca93) ogl_tex.cpp:824 ogl_tex_upload(long long, unsigned int, int, int)
(0x08478afe) unifont.cpp:167 UniFont_reload
(0x0847440e) h_mgr.cpp:506 call_init_and_reload
(0x084745b8) h_mgr.cpp:545 alloc_new_handle
(0x084746ec) h_mgr.cpp:580 h_alloc(H_VTbl*, boost::filesystem::basic_path<std::string, VfsPathTraits> const&, unsigned int, ...)
(0x08478e5c) unifont.cpp:210 unifont_load(boost::filesystem::basic_path<std::string, VfsPathTraits> const&, unsigned int)
(0x0832b29e) Font.cpp:46 CFont
(0x0828b29d) GameSetup.cpp:593 InitPs
(0x0828c2fd) GameSetup.cpp:991 Init(CmdLineArgs const&, int)
(0x081f4ede) main.cpp:395 RunGameOrAtlas
(0x081f4f6c) main.cpp:412 main
(0xb7664b56) /lib/tls/i686/cmov/libc.so.6:0 __libc_start_main

errno = 0 (?)
OS error = ?


(C)ontinue, (B)reak, Launch (D)ebugger, or (E)xit?
c
TIMER| ps_console: 5.90886 s
TIMER| ps_lang_hotkeys: 78.3303 ms
TIMER| ps_gui_init: 28.764 us
TIMER| ps_gui_setup_xml: 49.5266 ms
TIMER| ps_gui_styles_xml: 3.53965 ms
TIMER| ps_gui_sprite1_xml: 140.085 ms
TIMER| ps_gui_1: 285.18 ms
TIMER| ps_gui_2: 197.208 ms
TIMER| ps_gui_3: 19.1116 ms
TIMER| ps_gui_4: 89.5402 ms
TIMER| ps_gui_6: 6.90189 ms
TIMER| ps_gui_6_1: 6.51875 ms
TIMER| ps_gui_6_2: 3.16295 ms
TIMER| ps_gui_7: 4.9403 ms
TIMER| ps_gui_9: 18.0156 ms
TIMER| InitRenderer: 233.514 ms
TIMER| SimulationInit: 76.6375 ms
TIMER| Init_miscgamesection: 489.637 ms
TIMER| Init_guiload: 270.561 ms
bt_audio_service_open: connect() failed: Connection refused (111)
bt_audio_service_open: connect() failed: Connection refused (111)
bt_audio_service_open: connect() failed: Connection refused (111)
bt_audio_service_open: connect() failed: Connection refused (111)
TIMER| shutdown Scheduler: 5.764 us
TIMER| shutdown mouse stuff: 43.42 us
TIMER| shutdown Pathfinder: 140.929 us
TIMER| shutdown game scripting stuff: 1.47416 ms
TIMER| shutdown actor stuff: 3.02 us
TIMER| shutdown TexMan: 3.624 us
TIMER| shutdown Renderer: 54.107 us
TIMER| shutdown ScriptingHost: 9.21426 ms
TIMER| shutdown ConfigDB: 2.547 us
TIMER| shutdown CSocketBase: 3.6605 ms
TIMER| shutdown CNetLogManager: 6.614 us
TIMER| shutdown I18N: 8.153 us
TIMER| resource modules: 45.8587 ms
TIMER TOTALS (5 clients)
-----------------------------------------------------
  tc_2: 0 c (0x)
  tc_1: 0 c (0x)
  tc_transform: 1333.43 Mc (49x)
  tc_plain_transform: 4312.04 kc (12x)
  tc_png_decode: 0 c (0x)
-----------------------------------------------------
TIMER| shutdown misc: 1.77964 ms
test@test-desktop:~/0ad/trunk/binaries/system$

Pressing 'C' let however the game start.

I am using r7139 on a Ubuntu karmic. Let me know if I should provide more infos.

#307 fixed Program received signal SIGABRT, Aborted. BadassTester
Description

Hello! I was playing the "Badlands" map. crashed after sending units to an unclaimed settlement

pyrogenesis_dbg: /usr/include/boost/shared_ptr.hpp:315: T* boost::shared_ptr<T>::operator->() const [with T = CTerrainProperties]: Assertion `px != 0' failed.

Program received signal SIGABRT, Aborted.


(gdb) backtrace
#0  0xb7f7a410 in __kernel_vsyscall ()
#1  0xb7788085 in raise () from /lib/tls/i686/cmov/libc.so.6
#2  0xb7789a01 in abort () from /lib/tls/i686/cmov/libc.so.6
#3  0xb778110e in __assert_fail () from /lib/tls/i686/cmov/libc.so.6
#4  0x083747c9 in boost::shared_ptr<CTerrainProperties>::operator-> (this=0xbf9b305c) at /usr/include/boost/shared_ptr.hpp:315
#5  0x08374647 in CTerrain::IsPassable (this=0x9584120, loc=@0xbf9b3130, entity=@0xbf9b30f2) at ../../../source/graphics/Terrain.cpp:117
#6  0x0834c316 in AStarGoalLowLevel::IsPassable (this=0x8cf4558, loc=@0xbf9b3130, entity=@0xbf9b3140) at ../../../source/simulation/AStarEngine.cpp:508
#7  0x0834c1f1 in AStarGoalLowLevel::GetNeighbors (this=0x8cf4558, loc=@0xb549760, entity=@0xbf9b31ba) at ../../../source/simulation/AStarEngine.cpp:543
#8  0x0834cf4a in CAStarEngine::FindPath (this=0x8cf4438, src=@0xbf9b3278, dest=@0xbf9b32e4, entity=@0xbf9b328c, radius=0)
    at ../../../source/simulation/AStarEngine.cpp:234
#9  0x082f5f57 in CPathfindEngine::RequestLowLevelPath (this=0x8cf4438, entity=@0xbf9b3302, destination=@0xbf9b32e4, contact=false, radius=0, 
    orderSource=CEntityOrder::SOURCE_PLAYER) at ../../../source/simulation/PathfindEngine.cpp:533
#10 0x083478ab in CEntity::ProcessGotoWaypoint (this=0xa840808, current=0x8cf7a70, contact=false)
    at ../../../source/simulation/EntityStateProcessing.cpp:732
#11 0x082cc2d7 in CEntity::UpdateOrders (this=0xa840808, timestep=300) at ../../../source/simulation/Entity.cpp:582
#12 0x082cc940 in CEntity::Update (this=0xa840808, timestep=300) at ../../../source/simulation/Entity.cpp:457
#13 0x082b65cc in CEntityManager::UpdateAll (this=0x9588b80, timestep=300) at ../../../source/simulation/EntityManager.cpp:450
#14 0x083162f2 in CSimulation::Simulate (this=0x9561030) at ../../../source/simulation/Simulation.cpp:179
#15 0x083166e3 in CSimulation::Update (this=0x9561030, frameTime=0.033608004450798035) at ../../../source/simulation/Simulation.cpp:106
#16 0x0829f6a5 in CGame::Update (this=0x9588898, deltaTime=0.033608004450798035, doInterpolate=true) at ../../../source/ps/Game.cpp:230
#17 0x0820f421 in Frame () at ../../../source/main.cpp:271
#18 0x0820f882 in RunGameOrAtlas (argc=1, argv=0xbf9b3774) at ../../../source/main.cpp:397
#19 0x0820f906 in main (argc=1, argv=0xbf9b3774) at ../../../source/main.cpp:410
#308 fixed (testing the keyword seach feature) Jan Wassenberg
Description

Please ignore.

#309 wontfix Region borders on water surface Andrew BadassTester
#310 invalid Ambient Flora/Geology Sounds OPEN Matt Sherman
Description

Create - Ambient Flora/Geo sounds such as:

Creaking of trees, rustling of reeds, crops, leaves ect..

Ambiences should be in stereo and roughly 1 min in duration.

Files should loop seamlessly.

5 Separate Ambiences Requred

#311 fixed Program received signal SIGSEGV, Segmentation fault. BadassTester
Description

Hello again.. I was playing the "Latinum" map. Crashed after trying to build a building (dock) on the very border of the map.

#0  0x08374786 in CRenderableObject::SetDirty (this=0x0, dirtyflags=2)
    at ../../../source/graphics/RenderableObject.h:82
#1  0x083732e7 in CTerrain::FlattenArea (this=0x9578708, x0=62.6870041, 
    x1=80.6870041, z0=564.263, z1=582.263)
    at ../../../source/graphics/Terrain.cpp:467
#2  0x082dc932 in CEntity::FlattenTerrain (this=0xc102d98)
    at ../../../source/simulation/EntityScriptInterface.cpp:932
#3  0x082e84ea in CNativeComplexFunction<CEntity, false, jsval_t, &(CEntity::FlattenTerrain(JSContext*, unsigned int, int*))>::JSFunction (cx=0x8723558, 
    obj=0xc0f8c50, argc=0, argv=0xc1d5860, rval=0xbfa566b0)
    at ../../../source/scripting/ScriptableComplex.inl:468
#4  0x085277cd in js_Invoke (cx=0x8723558, argc=0, flags=0) at jsinterp.c:1187
#5  0x0853838e in js_Interpret (cx=0x8723558, pc=0xa385fd0 ":", 
    result=0xbfa573d8) at jsinterp.c:3586
#6  0x08527843 in js_Invoke (cx=0x8723558, argc=1, flags=2) at jsinterp.c:1207
#7  0x08527b9e in js_InternalInvoke (cx=0x8723558, obj=0xb24e780, 
    fval=156876080, flags=0, argc=1, argv=0xbfa5750c, rval=0xbfa57510)
    at jsinterp.c:1284
#8  0x084f0c98 in JS_CallFunction (cx=0x8723558, obj=0xb24e780, fun=0x8a54860, 
    argc=1, argv=0xbfa5750c, rval=0xbfa57510) at jsapi.c:4146
#9  0x082c0707 in CScriptObject::DispatchEvent (this=0xa344f2c, 
    Context=0xb24e780, evt=0xbfa57a5c)
    at ../../../source/simulation/ScriptObject.cpp:126
---Type <return> to continue, or q <return> to quit---
#10 0x0832803c in IEventTarget::_DispatchEvent (this=0xa344cf0, 
    evt=0xbfa57a5c, target=0xaebbff8)
    at ../../../source/scripting/DOMEvent.cpp:49
#11 0x083281b9 in IEventTarget::_DispatchEvent (this=0xa5792e8, 
    evt=0xbfa57a5c, target=0xaebbff8)
    at ../../../source/scripting/DOMEvent.cpp:66
#12 0x083281b9 in IEventTarget::_DispatchEvent (this=0xa6ee1d8, 
    evt=0xbfa57a5c, target=0xaebbff8)
    at ../../../source/scripting/DOMEvent.cpp:66
#13 0x083281b9 in IEventTarget::_DispatchEvent (this=0xa6ed0f8, 
    evt=0xbfa57a5c, target=0xaebbff8)
    at ../../../source/scripting/DOMEvent.cpp:66
#14 0x083281b9 in IEventTarget::_DispatchEvent (this=0xa6ec3e0, 
    evt=0xbfa57a5c, target=0xaebbff8)
    at ../../../source/scripting/DOMEvent.cpp:66
#15 0x083281b9 in IEventTarget::_DispatchEvent (this=0xa6eb648, 
    evt=0xbfa57a5c, target=0xaebbff8)
    at ../../../source/scripting/DOMEvent.cpp:66
#16 0x083281b9 in IEventTarget::_DispatchEvent (this=0xa6ea918, 
    evt=0xbfa57a5c, target=0xaebbff8)
    at ../../../source/scripting/DOMEvent.cpp:66
#17 0x083281b9 in IEventTarget::_DispatchEvent (this=0xa6e9c78, 
    evt=0xbfa57a5c, target=0xaebbff8)
---Type <return> to continue, or q <return> to quit---
    at ../../../source/scripting/DOMEvent.cpp:66
#18 0x083281b9 in IEventTarget::_DispatchEvent (this=0xaebbff8, 
    evt=0xbfa57a5c, target=0xaebbff8)
    at ../../../source/scripting/DOMEvent.cpp:66
#19 0x08328339 in IEventTarget::DispatchEvent (this=0xaebbff8, evt=0xbfa57a5c)
    at ../../../source/scripting/DOMEvent.cpp:86
#20 0x0834868f in CEntity::ProcessContactActionNoPathing (this=0xaebbf90, 
    current=0xc1749c8, timestep_millis=300)
    at ../../../source/simulation/EntityStateProcessing.cpp:516
#21 0x082cc2bc in CEntity::UpdateOrders (this=0xaebbf90, timestep=300)
    at ../../../source/simulation/Entity.cpp:577
#22 0x082cc968 in CEntity::Update (this=0xaebbf90, timestep=300)
    at ../../../source/simulation/Entity.cpp:457
#23 0x082b65cc in CEntityManager::UpdateAll (this=0x95ab9e0, timestep=300)
    at ../../../source/simulation/EntityManager.cpp:450
#24 0x0831631a in CSimulation::Simulate (this=0x9581140)
    at ../../../source/simulation/Simulation.cpp:179
#25 0x0831670b in CSimulation::Update (this=0x9581140, 
    frameTime=0.023770732805132866)
    at ../../../source/simulation/Simulation.cpp:106
#26 0x0829f6a5 in CGame::Update (this=0x95aab10, 
    deltaTime=0.023770732805132866, doInterpolate=true)
    at ../../../source/ps/Game.cpp:230
---Type <return> to continue, or q <return> to quit---
#27 0x0820f421 in Frame () at ../../../source/main.cpp:271
#28 0x0820f882 in RunGameOrAtlas (argc=1, argv=0xbfa58014)
    at ../../../source/main.cpp:397
#29 0x0820f906 in main (argc=1, argv=0xbfa58014)
    at ../../../source/main.cpp:410



#312 wontfix Bug: right doubleclick makes running units walk+patch Jan Wassenberg BadassTester
Description

bug: right doubleclick makes running units walk how to reproduce:

  1. select running guy
  2. order him to run
  3. observe he walks

javascript patch attached, dunno if that's the best or correct way to fix it

#313 fixed Handle unsupported S3TC texture compression more gracefully Philip Taylor
Description

Currently, non-support of S3TC causes ugly unhelpful output like in #306. (This particularly matters on Linux, where (I think) non-support is the default for non-proprietary drivers.)

The message should be displayed in a much more user-friendly way (perhaps a dialog box? or perhaps it should carry on loading the game and display a warning on the menu screen?).

Also, the message should help people resolve the problem - on Linux, it should tell them to run driconf and enable the "enable S3TC texture compression" option. (That option makes the driver lie that it fully supports S3TC, when actually it only supports decompression (which is all we need).)

Also, maybe we could detect the situation where we're running on Linux and the driver really does support decompression even though it doesn't claim to fully support S3TC, since the game should actually run fine with S3TC in that case and we don't need to tell the user to do anything.

#314 fixed GUI - fix all settings in components sluzky sluzky
Description

There are some GUI components that get called for some missing settings, this could be a result of couple of reasons:

  • Actual settings that are missing from the component
  • Faulty calling to those settings

Another thing could be that the call to the settings is OK.
Meaning, the code is trying to probe the component for the wanted setting, and if it doesn't find it, then it just doesn't use that feature for that component.

To find the faulty settings run the program, open the main log (mainlog.html), and follow the warnings.

#315 invalid GUI - Dropdown not positioning list properly kaiserfro
Description

Currently, when a dropdown is opened, the position of the list starts at the top, regardless of the currently selected item.

What should happen when a dropdown is opened, is that the position of the scrollbar should be maintained from the last time an item was selected.

#316 duplicate GUI - Civ Selection Dialog Ben Ventura kaiserfro
Description
  • Modify existing game setup dialog for quick civ selection. Replace civ name with a dropdown to allow for quick selection for an experienced user.
  • Create new civ selection details dialog. Dialog opens by clicking on a button or emblem on the game setup screen. The new screen should be broken up onto multiple panes containing various peices of information: history, bonuses, heroes, emblem. The dialog could be themed based upon the currently selected civ: background image, sample unit image. There could be some tooltip hot areas that convey even more information.
  • Civ information should be kept in a group(?) of XML files describing each civ. Each file should contain the information that would be displayed on the selection screen so that the information on the dialog is not hard-coded. Information stored could be: name, history text, bonus text, hero text, emblem, images, and possibly sim info like special units available etc.
#317 invalid Animal Death Matt Sherman Matt Sherman
Description

Universal Animal Death Sound SDD # 157"

Specifications

MONO 
3 seconds in duration. 
Non-Looping

4 Files Required.

#318 invalid Plowing Fields OPEN Matt Sherman
Description

Plowing Fields Sound SSD # 169

Specifications

Mono
5 Seconds
Non-Looping

9 Sounds Req'd

#319 invalid Herding Animals OPEN Matt Sherman
Description

General Herding Animals Sounds SDD# 164

Specifications

MONO
5-Seconds
Non- Looping

9 Sounds req'd

#320 fixed Crackling Fire Sam Assoum Matt Sherman
Description

Universal Fire Crackling Sound SDD# 177

Specifications

MONO
5 Seconds
Non-Looping

5 sounds req'd

#321 invalid Sizzling of Hot Metal Against Flesh Sam Assoum Matt Sherman
Description

Sizzling of Hot Metal Against Flesh SDD# 182

Specifications

MONO
5 Seconds
Non-Looping

5 Sounds req'd

#322 invalid Spreading Fire Sam Assoum Matt Sherman
Description

Spreading Fire Sound SDD# 187

Specifications

MONO
5 Seconds
Non-Looping

5 Sounds req'd

#323 invalid Arrow Looping Sam Assoum Matt Sherman
Description

Multiple Arrows in Air - Looping SDD# 195

Specifications

Stereo
2 Minutes
Looping

1 sound req'd

#324 invalid Arrow Impact - Wood Matt Sherman Matt Sherman
Description

Arrow Impacting Wood Sound SDD# 228

Specifications

MONO
2 seconds
Non-Looping

12 Sounds req'd

#325 invalid Arrow Impact - Metal Goblor Matt Sherman
Description

Arrow Impacting Metal SDD# 223

Specifications

MONO
2 Seconds
Non-Looping

12 sounds req'd

#326 invalid Sling Impact Sam Assoum Matt Sherman
Description

Sling Impacting Wood SDD# 247

Specifications

MONO
2 seconds
Non-Looping

12 sounds req'd

#327 invalid Sling Impact - Stone Sam Assoum Matt Sherman
Description

Sling Impact Stone SDD# 257

Specifications

MONO
2 Seconds
Non-Looping

12 Sounds req'd

#328 invalid Flesh Impact - Mutiple Matt Sherman Matt Sherman
Description

Flesh Impact - Multiple SDD# 271

Specifications

Stereo
2 minutes
Looping

1 Sounds Req'd

#329 invalid Flesh Impact - Stab Matt Sherman
Description

Flesh Impact - Stab

Specifications

Mono
2 Seconds
Non-Looping

12 sounds req'd

#330 invalid Onager - Shooting Sam Assoum Matt Sherman
Description

Onager - Shooting SDD #282

Specifications

Mono
2 Seconds
Non-Looping

5 sounds req'd

#331 invalid Onager - Reloading Sam Assoum Matt Sherman
Description

Onager - Reloading SDD #283

Specifications

Mono
2 Seconds
Non-Looping

5 sounds req'd

#332 invalid Balista - Moving Sam Assoum Matt Sherman
Description

Balista - Moving SDD #284

Specifications

Mono
2 Seconds
Non-Looping

5 Sounds req'd

#333 invalid Balista - Shooting Sam Assoum Matt Sherman
Description

Balista - Shooting SDD #285

Specifications

Mono
2 Seconds
Non-Looping

5 Sounds req'd

#334 invalid Balista - Reloading Sam Assoum Matt Sherman
Description

Balista - Reloading SDD #286

Specifications

Mono
2 Seconds
Non-Looping

5 Sounds req'd

#335 invalid Land Ram - Moving Sam Assoum Matt Sherman
Description

Land Ram - Moving SDD #287

Specifications

Mono
2 Seconds
Non-Looping

5 Sounds req'd

#336 invalid Land Ram - Ramming Andy Matt Sherman
Description

Land Ram - Ramming SDD #288

Specifications

MONO
2-Seconds
Non-Looping

5 Sounds Req'd

#337 invalid Onager Stone Hitting Wood Sam Assoum Matt Sherman
Description

Onager Stone Hitting Wood SDD #289

Specifications

MONO
2-Seconds
Non-Looping

5 Sounds req'd

#338 invalid Onager Stone Hitting Stone Sam Assoum Matt Sherman
Description

Onager Stone Hitting Stone SDD #290

Specifications

MONO
2-Seconds
Non-Looping

5 Sounds Req'd

#339 invalid Onager Stone Hitting Water Andy Matt Sherman
Description

Onager Stone Hitting Water

Specifications

MONO
2-Seconds
Non-Looping

5 Sounds Req'd

#340 invalid Onager Stone Hitting Water Andy Matt Sherman
Description

Onager Stone Hitting Water SDD# 291

Specifications

MONO
2-Seconds
Non-Looping

5 Sounds Req'd

#341 fixed Siege Unit Select Matt Sherman Matt Sherman
Description

Seige Unit Select SDD# 295

Specifications

MONO
2-Seconds
Non-Looping

5 Sounds Req'd

#342 fixed Seige Unit Destruction - Generic Andy Matt Sherman
Description

Onager Destruction SDD# 296

Specifications

MONO
2-Seconds
Non-Looping

5 Sounds Req'd

#343 invalid Seige Unit Destruction - Ballista Andy Matt Sherman
Description

Seige Unit Destruction - Ballista SDD# 297

Specifications

MONO
2-Seconds
Non-Looping

5 Sounds Req'd

#344 invalid Seige Unit Destruction - Land Ram Andy Matt Sherman
Description

Land Ram Destruction SDD# 298

Specifications

MONO
2-Seconds
Non-Looping

5 Sounds Req'd

#345 invalid Mounted Unit - Dirt (For use as Generic) Matt Sherman Matt Sherman
Description

Mounted Unit - Dirt SDD# 348

Specifications

Specifications

MONO
1-Seconds
Non-Looping

5 Sounds Req'd

#346 invalid Mounted Unit - Grass Pat Matt Sherman
Description

Mounted Unit - Grass SDD# 356

Specifications

MONO
1-Second
Non-Looping

5 Sounds Req'd

#347 invalid Mounted Unit - Snow Pat Matt Sherman
Description

Mounted Unit - Snow SDD# 364

Specifications

MONO
1-Second
Non-Looping

5 Sounds Req'd

#348 invalid Mounted Unit - Road Pat Matt Sherman
Description

Mounted Unit - Road SDD# 372

Specifications

MONO
1-Second
Non-Looping

5 Sounds Req'd

#349 invalid Destruction - Civil Pat Matt Sherman
Description

Destruction - Civil SDD# 381

Specifications

MONO
2-Seconds
Non-Looping

5 Sounds Req'd

#350 invalid Destruction - Generic Pat Matt Sherman
Description

Destruction - Generic SDD# 391

Specifications

MONO
2-Seconds
Non-Looping

5 Sounds Req'd

#351 invalid Destruction - Military Pat Matt Sherman
Description

Destruction - Military SDD# 393

Specifications

MONO
2-Seconds
Non-Looping

5 Sounds Req'd

#352 fixed Destruction - Generic open Matt Sherman
Description

Destruction - Gate SDD# 399

Specifications

MONO
2-Seconds
Non-Looping

5 Sounds Req'd

#353 invalid Explosion OPEN Matt Sherman
Description

Explosion SDD# 403

Specifications

MONO
2-Seconds
Non-Looping

5 Sounds Req'd

#354 invalid Building FX - Civil Centre OPEN Matt Sherman
Description

Building FX - Civil Centre SDD# 410

Specifications

MONO
10-Seconds
Looping

10 Sounds Req'd

#355 invalid Building FX - House OPEN Matt Sherman
Description

Building FX - House SDD# 412

Specifications

MONO
10-Seconds
Looping

10 Sounds Req'd

#356 invalid Building FX - Resource Centre OPEN Matt Sherman
Description

Building FX - Resource Centre SDD# 419

Specifications

MONO
10-Seconds
Looping

10 Sounds Req'd

#357 invalid Building FX - Military Centre OPEN Matt Sherman
Description

Building FX - Military Centre SDD# 433

Specifications

MONO
10-Seconds
Looping

10 Sounds Req'd

#358 invalid Building FX - Temple OPEN Matt Sherman
Description

Building FX - Temple SDD# 435

Specifications

MONO
10-Seconds
Looping

10 Sounds Req'd

#359 invalid Building FX - Fortress OPEN Matt Sherman
Description

Building FX - Fortress SDD# 437

Specifications

MONO
10-Seconds
Looping

10 Sounds Req'd

#360 invalid Building FX - Health Centre OPEN Matt Sherman
Description

Building FX - Health Centre SDD# 443

Specifications

MONO
10-Seconds
Looping

10 Sounds Req'd

#361 invalid Gates - Opening OPEN Matt Sherman
Description

Gates - Opening SDD# 445

Specifications

MONO
5-Seconds
Non-Looping

5 Sounds Req'd

#362 invalid Gates - Closing OPEN Matt Sherman
Description

Gates - Closing SDD# 446

Specifications

MONO
5-Seconds
Non-Looping

5 Sounds Req'd

#363 invalid Ambient Sounds - Alpine Soundscape OPEN Matt Sherman
Description

Ambient Sounds - Alpine Soundscape SDD# 448

Specifications

Stereo
30-Seconds
Looping

4 Sounds Req'd

#364 invalid Ambient Sounds - Steppes Soundscape OPEN Matt Sherman
Description

Ambient Sounds - Steppes Soundscape SDD# 450

Specifications

Stereo
30-Seconds
Looping

4 Sounds Req'd

#365 invalid Ambient Sounds - Mediteranean Soundscape OPEN Matt Sherman
Description

Ambient Sounds - Mediteranean Soundscape SDD# 451

Specifications

Stereo
30-Seconds
Looping

4 Sounds Req'd

#366 invalid Ambient Sounds - Savannah Soundscape OPEN Matt Sherman
Description

Ambient Sounds - Savannah Soundscape SDD# 452

Specifications

Stereo
30-Seconds
Looping

4 Sounds Req'd

#367 invalid Ambient Sounds - Desert Soundscape goblor Matt Sherman
Description

Ambient Sounds - Desert Soundscape SDD# 453

Specifications

Stereo
30-Seconds
Looping

4 Sounds Req'd

#368 invalid Ambient Sounds - Semi-Arid Soundscape OPEN Matt Sherman
Description

Ambient Sounds - Semi-Arid Soundscape SDD# 454

Specifications

Stereo
30-Seconds
Looping

4 Sounds Req'd

#369 invalid Ambient Sounds - Polar Soundscape OPEN Matt Sherman
Description

Ambient Sounds - Polar Soundscape SDD# 455

Specifications

Stereo
30-Seconds
Looping

4 Sounds Req'd

#370 invalid Night Sounds - Alpine Soundscape OPEN Matt Sherman
Description

Night Sounds - Alpine Soundscape SDD# 457

Specifications

Stereo
30-Seconds
Looping

4 Sounds Req'd

#371 invalid Night Sounds - Steppes Soundscape OPEN Matt Sherman
Description

Night Sounds - Steppes Soundscapes SDD# 460

Specifications

Stereo
30-Seconds
Looping

4 Sounds Req'd

#372 invalid Night Sounds - Mediteranean Soundscape OPEN Matt Sherman
Description

Night Sounds - Mediteranean Soundscape SDD# 461

Specifications

Stereo
30-Seconds
Looping

4 Sounds Req'd

#373 invalid Night Sounds - Savannah Soundscape OPEN Matt Sherman
Description

Night Sounds - Savannah Soundscape SDD# 462

Specifications

Stereo
30-Seconds
Looping

4 Sounds Req'd

#374 invalid Night Sounds - Desert Soundscape goblor Matt Sherman
Description

Night Sounds - Desert Soundscape SDD# 463

Specifications

Stereo
30-Seconds
Looping

4 Sounds Req'd

#375 invalid Night Sounds - Semi-Arid Soundscape OPEN Matt Sherman
Description

Night Sounds - Semi-Arid Soundscapre SDD# 464

Specifications

Stereo
30-Seconds
Looping

4 Sounds Req'd

#376 invalid Night Sounds - Polar Soundscape OPEN Matt Sherman
Description

Night Sounds - Polar Soundscape SDD# 465

Specifications

Stereo
30-Seconds
Looping

4 Sounds Req'd

#377 invalid Night Sounds - Tropical Soundscape OPEN Matt Sherman
Description

Night Sounds - Tropical Soundscape SDD# 467

Specifications

Stereo
30-Seconds
Looping

4 Sounds Req'd

#378 invalid Ambient - Swamp OPEN Matt Sherman
Description

Ambient - Swamp SDD# 490

Specifications

Stereo
30-Seconds
Looping

4 Sounds Req'd

#379 invalid Ambient Flora - Creaking of Trees OPEN Matt Sherman
Description

Ambient Flora - Creaking of Trees SDD# 494

Specifications

Stereo
1-Minute
Non-Looping

2 Sounds Req'd

#380 invalid Ambient Flora - Reeds Rustling OPEN Matt Sherman
Description

Ambient Flora - Reeds Rustling SDD# 495

Specifications

Stereo
1-Minute
Non-Looping

2 Sounds Req'd

#381 invalid Ambient Fauna - Wolf OPEN Matt Sherman
Description

Ambient Fauna - Wolf SDD# 556

Specifications

Mono
5-Seconds
Looping

5 Sounds Req'd

#382 invalid Ambient Fauna - Deer OPEN Matt Sherman
Description

Ambient Fauna - Deer SDD# 600

Specifications

Mono
5-Seconds
Looping

5 Sounds Req'd

#383 invalid Ambient Fauna - Breeding/Fearful/Passive - Camel OPEN Matt Sherman
Description

Ambient fauna - Breeding/Fearful/Passive - Camel SDD# 656

Specifications

Mono
5-Seconds
Looping

5 Sounds Req'd

#384 invalid Ambient Fauna - Breeding/Fearful/Passive - Hawk OPEN Matt Sherman
Description

Ambient fauna - Breeding/Fearful/Passive - Hawk SDD# 679

Specifications

Mono
5-Seconds
Looping

5 Sounds Req'd

#385 invalid Ambient Fauna - Breeding/Fearful/Passive - Seagull OPEN Matt Sherman
Description

Ambient fauna - Breeding/Fearful/Passive - Seagull SDD# 688

Specifications

Mono
5-Seconds
Looping

5 Sounds Req'd

#386 invalid Ambient Fauna - Breeding/Fearful/Passive - Wolf OPEN Matt Sherman
Description

Ambient fauna - Breeding/Fearful/Passive - Wolf SDD# 700

Specifications

Mono
3-Seconds
Non-Looping

5 Sounds Req'd

#387 invalid Ambient Fauna - Breeding/Fearful/Passive - African Elephant OPEN Matt Sherman
Description

Ambient fauna - Breeding/Fearful/Passive - African Elephant SDD# 701

Specifications

Mono
3-Seconds
Non-Looping

5 Sounds Req'd

#388 invalid Ambient Fauna - Breeding/Fearful/Passive - Pig OPEN Matt Sherman
Description

Ambient fauna - Breeding/Fearful/Passive - Pig SDD# 722

Specifications

Mono
5-Seconds
Looping

5 Sounds Req'd

#389 invalid Fauna Actions - Wolf OPEN Matt Sherman
Description

Fauna Actions - Wolf SDD# 743

Specifications

Mono
3-Seconds
Non-Looping

5 Sounds Req'd

#390 invalid Fauna Actions - African Elephant OPEN Matt Sherman
Description

Fauna Actions - African Elephant SDD# 744

Specifications

Mono
3-Seconds
Non-Looping

5 Sounds Req'd

#391 invalid Fauna Actions - Deer OPEN Matt Sherman
Description

Fauna Actions - Deer SDD# 770

Specifications

Mono
3-Seconds
Non-Looping

5 Sounds Req'd

#392 invalid Fauna Actions - Pig OPEN Matt Sherman
Description

Fauna Actions - Pig SDD# 781

Specifications

Mono
3-Seconds
Non-Looping

5 Sounds Req'd

#393 invalid Fauna Actions - Sheep OPEN Matt Sherman
Description

Fauna Actions - Sheep SDD# 782

Specifications

Mono
3-Seconds
Non-Looping

5 Sounds Req'd

#394 invalid Fauna Actions - Seagull OPEN Matt Sherman
Description

Fauna Actions - Seagull SDD# 794

Specifications

Mono
3-Seconds
Non-Looping

5 Sounds Req'd

#395 invalid Gatherig - Hoeing Dirt OPEN Matt Sherman
Description

Gathering - Hoeing Dirt SDD# 136

Specifications

Mono
5-Seconds
Non-Looping

5 Sounds Req'd

#396 invalid Construction - Ore OPEN Matt Sherman
Description

Construction - Ore SDD# 125

Specifications

Mono
2-Minutes
Non-Looping

9 Sounds Req'd

#397 invalid Death - Multiple OPEN Matt Sherman
Description

Death - Multiple SDD# 108

Specifications

Stereo
2-Minutes
Looping

2 Sounds Req'd

#398 invalid Moving - Road OPEN Matt Sherman
Description

Moving - Road SDD# 89

Specifications

Mono
1-Second
Non-Looping

5 Sounds Req'd

#399 needsinfo [NEEDS INFO] Valgrind error in tex_transform_to Philip Taylor
Description
==13406== Source and destination overlap in memcpy(0x405a000, 0x405a000, 6)
==13406==    at 0x4C25A8A: memcpy (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==13406==    by 0x956D44: cpu_memcpy(void*, void const*, unsigned long) (amd64.cpp:38)
==13406==    by 0x954796: plain_transform(Tex*, unsigned long) (tex.cpp:330)
==13406==    by 0x955058: tex_transform(Tex*, unsigned long) (tex.cpp:404)
==13406==    by 0x955109: tex_transform_to(Tex*, unsigned long) (tex.cpp:415)
==13406==    by 0x612505: TestTex::test_mipmap_create() (test_tex.h:129)
==13406==    by 0x612C72: TestDescription_TestTex_test_mipmap_create::runTest() (test_tex.cpp:30)
==13406==    by 0x5B93FB: CxxTest::RealTestDescription::run() (RealDescriptions.cpp:96)
==13406==    by 0x5BF5FC: CxxTest::TestRunner::runTest(CxxTest::TestDescription&) (TestRunner.h:76)
==13406==    by 0x5BF706: CxxTest::TestRunner::runSuite(CxxTest::SuiteDescription&) (TestRunner.h:63)
==13406==    by 0x5BFD55: CxxTest::PsTestRunner::runWorld() (PsTestWrapper.h:68)
==13406==    by 0x5BFE63: CxxTest::PsTestRunner::runAllTests(CxxTest::TestListener&) (PsTestWrapper.h:33)
#400 fixed CStr should use wchar.h Philip Taylor
Description

ps/CStr.cpp has its own UTF-8 encoding/decoding logic in ToUTF8/FromUTF8. The implementation should be changed to use the functions in lib/wchar.h, to remove the duplication of functionality. (The CStr API ought to remain unchanged.)

#401 invalid GUI "Structure" Icons Amish Coelho Amish Coelho
Description

GUI "Structure" Icons. These are icons that will be the "button" in the in-game GUI players use to commence construction of a building.

GUI

Difficulty: High | Medium | Low

Estimated Completion Time: 11 Weeks/Dec 16th


Need Icons for the following Structures:

Civic Center - Done 
Civic House
Civic Temple - Done

Defense Scout Tower
Defense Wall (Short Segment)
Defense Wall Gate
Defense Wall Tower

Econ Farmstead
Econ Market - Done
Econ Mill

Resource Corral
Resource Field - Done
Resource Orchard

Military Barracks - Done
Military Dock
Military Fortress

Special Celts Ffactri - Done
Special Hellenes Theatron
Special Hellenes Tholos
Special Hellenes Gymnasion
Special Iberians Venerated Monument
Special Persians Kahk
Special Romans Entrenched Camp

#402 fixed Clean up GUItypes.h Lars Kemmann Philip Taylor
Description

gui/GUItypes.h does some stupid trick with Perl (which I used to think was clever) to automatically regenerate its own code. It should be simplified by removing all the Perl and just leaving the TYPE(...) macro lines, and leaving the GUITYPE_IGNORE_CGUISpriteInstance bit (which is used in GUIutil.cpp; but get rid of the other IGNOREs).

#403 fixed crashlog.txt goes in non-writable directory Philip Taylor
Description

On Linux, crashlog.txt by default seems to get put in binaries/system/ which is often not a writable directory. It should probably go in ~/.config/0ad/logs/ (and print a message telling the user where it is).

#404 fixed Makefile build system should have pyrogenesis/test targets depend on Collada Itms Philip Taylor
Description

The Collada target is a run-time dependency for pyrogenesis and test, so it ought to get built automatically when people run make pyrogenesis and make test. Currently it doesn't.

It's not a build-time dependency for the executables, and shouldn't be used when linking, so Premake's package.links does not seem to be a suitable place to put it. Is there another way? or maybe Premake needs to be patched to support non-linking dependencies?

#405 fixed LOS manager is slow Philip Taylor
Description

Profiler indicates the game is spending ~14% of its process's cycles in CLOSManager::GetStatus and CLOSManager::GetUnitStatus, when sitting idle in the default map, which is far too much.

#406 fixed Serialization of standard JS object types historic_bruno Philip Taylor
Description

To avoid unnecessarily restricting script code, it should be possible for script components to use new Number(42), new String("foo"), etc, and have them correctly (de)serialized with no information loss. MDC has a list of the standard classes, and the simple common ones should be supported.

The code for this is currently in CBinarySerializer::HandleScriptVal

#407 fixed Serialization of script class objects historic_bruno Philip Taylor
Description

It should be possible for scripts to create and use classes (function Thing(x) { this.x = x; }; Thing.prototype.foo = ...; y = new Thing(1); etc), and have them correctly (de)serialized.

This is probably infeasible in the general case, but it would be useful to support the simple case: classes are defined as top-level functions (not defined or changed at run-time inside other functions), no prototype chains, etc, so the code can simply serialize the object like a plain Object plus a class name that gets looked up in the appropriate script's scope when deserializing.

#409 fixed Simplify C++ QueryInterface syntax Philip Taylor Philip Taylor
Description

Currently C++ components have to say:

ICmpPosition* cmpPosition = static_cast<ICmpPosition*>
  (context.GetComponentManager().QueryInterface(GetEntityId(), IID_Position));

which is horrid.

JS just says

var cmpPosition = Engine.QueryInterface(this.entity, IID_Position);

which is nicer. C++ has got to have more type declarations, and there's tradeoffs with other desirable features of the code, but it should be possible to do better than the current syntax.

#411 fixed Support creation of entities in Atlas Philip Taylor Philip Taylor
Description

Atlas needs to be updated to support the new entity system. In particular, the object creation listbox needs to be populated with entities from the new system, and it needs to create them properly (along with the static preview before the object is placed, possibly by extracting just its Visual component somehow?)

#412 fixed Saving/loading maps Philip Taylor Philip Taylor
Description

The map saving/loading code needs to deal with the new entity system. It should just save the template, position, orientation, player ID, and random variation selections, for each entity.

#413 fixed Automatic validation of entity templates Philip Taylor Philip Taylor
Description

Entity templates are a kind of tree structure, defined by a series of XML files (each inheriting from a parent file and overriding some parts). To save component code from having to worry about detecting and reporting invalid input (missing fields, incorrect data types, etc) there should be a centralised validation system. Each component reports its requirements, and the validator checks each template against them.

It would probably be sensible to use libxml2's RelaxNG support for this, since it provides a reasonable schema language for checking the structure and data types. The entity template can be serialised into XML (after applying all the inheritance rules etc) and then validated. If validation fails then the entity won't be loaded. It'd be particularly nice to use the RelaxNG Compact syntax, but libxml2 doesn't support that (it just has a half-finished RNC->RNG converter in its source control repository that is of unknown quality), so I don't know how feasible that is.

For efficiency (if it turns out that it matters), the validation status of entity templates could perhaps be cached at the same time as they're converted to XMB.

#414 fixed wcscasecmp does not exist on OS X Philip Taylor
Description

We use wcscasecmp but it does not exist on OS X, causing errors. We should either define that function ourselves on OS X (possibly a bad idea since it might conflict with a system version in the future, and we would not bother with the locale support that the standard expects), or define a similar function with a new name (probably in lib/wchar.cpp, just doing ASCII-case-insensitive comparisons) and use that on all platforms.

#415 fixed Script component testing framework Philip Taylor Philip Taylor
Description

There needs to be an easy way to do unit testing of script components.

The tests themselves should be written as scripts. Each component should be tested in isolation, with all engine functionality and other components probably implemented in the script as mock objects, so that the test cases don't require complex scene setups.

It should be integrated with the current CxxTest system, but maybe it would also be useful to be able to run the tests as part of the normal executable, so they can be used by non-C++ programmers and integrated with the debugger (#410).

#416 fixed Native component testing framework Philip Taylor Philip Taylor
Description

Similar to #415, except for native (C++) components. The tests will need to be written in C++ themselves. Mock objects might be much more painful to do; not sure what the best solution is.

#421 fixed Add a review request flag to Trac Philip Taylor
Description

Add a review request flag to Trac

#423 fixed Switch from CppDoc to Doxygen Philip Taylor
Description

CppDoc is old and unmaintained and has bugs and sometimes crashes and doesn't support JS. Doxygen seems to work better, and is more common, and accepts a similar comment style to CppDoc. So we should probably move to Doxygen.

#424 fixed Check threading compilation on OS X Philip Taylor
Description

r7193 changed how we link with pthreads. First thing to check (by testing the build): does the -pthread option work on OS X? Second thing: premake.lua defines _REENTRANT explicitly on OS X (because it wasn't defined by the included headers); is that unnecessary now that we use -pthread?

#425 fixed CParamNode should not return NULL pointers André Puel Philip Taylor
Description

CParamNode::GetChild returns pointers which could be NULL (if the child doesn't exist). In theory that should never happen (template validation ought to catch the errors first), but it's fragile and crash-prone.

Instead, it should return a dummy CParamNode object (by reference) with a bool Ok() method to allow explicit checking of whether the child really existed. GetChild should return another dummy object, ToInt/ToString/etc should log an error message and return 0/""/etc.

#426 fixed Implement Position component Philip Taylor Philip Taylor
Description

Position is critical to a lot of things, and needs to be implemented. (This includes orientation, and some of these features, and needs to be designed with garrisoning in mind.)

#427 fixed Deadlock in Atlas Philip Taylor Philip Taylor
Description

(Haven't tried to reproduce.)

Did something to get a crash in the game, while loading a map, triggered by the MRU file list in editor. The GUI froze completely.

(thread 1)
#0  0x00007f227c59adc9 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/libpthread.so.0     
#1  0x00007f22752d6c7d in g_main_context_wait () from /usr/lib/libglib-2.0.so.0           
#2  0x00007f22752d8ee1 in g_main_loop_run () from /usr/lib/libglib-2.0.so.0               
#3  0x00007f2276f96a07 in gtk_main () from /usr/lib/libgtk-x11-2.0.so.0                   
#4  0x00007f22780af478 in wxEventLoop::Run () from /usr/lib/libwx_gtk2u_core-2.8.so.0     
#5  0x00007f22781008e4 in wxDialog::ShowModal () from /usr/lib/libwx_gtk2u_core-2.8.so.0  
#6  0x00007f2278a9ca9b in wxDebugReportPreviewStd::Show () from /usr/lib/libwx_gtk2u_qa-2.8.so.0
#7  0x00007f22797adfb5 in AtlasDLLApp::OnFatalException (this=0x2da95f0) at ../../../source/tools/atlas/AtlasUI/Misc/DLLInterface.cpp:254
#8  0x00007f2277a1fe4c in wxFatalSignalHandler () from /usr/lib/libwx_baseu-2.8.so.0                                                     
#9  <signal handler called>                                                               

(thread 3)
#0  0x00007f227c59cc81 in sem_wait () from /lib/libpthread.so.0                                                          
#1  0x00000000008e0d9d in MessagePasserImpl::Query (this=0xf1fc20, qry=0x7f2272c75530) at ../../../source/tools/atlas/GameInterface/MessagePasserImpl.cpp:166
#2  0x00007f22797af050 in AtlasMessage::QueryMessage::Post (this=0x7f2272c75530) at ../../../source/tools/atlas/AtlasUI/ScenarioEditor/ScenarioEditor.cpp:796
#3  0x00007f22797b17a9 in ScenarioEditor::OpenFile (this=0x2ec5530, name=@0x7f2272c755d0) at ../../../source/tools/atlas/AtlasUI/ScenarioEditor/ScenarioEditor.cpp:581
#4  0x00007f22797b1943 in ScenarioEditor::OnMRUFile (this=0x2ec5530, event=@0x7f2272c756d0) at ../../../source/tools/atlas/AtlasUI/ScenarioEditor/ScenarioEditor.cpp:611
#5  0x00007f2277a1b7b9 in wxEvtHandler::ProcessEventIfMatches () from /usr/lib/libwx_baseu-2.8.so.0                                                                     
#6  0x00007f2277a1c993 in wxEventHashTable::HandleEvent () from /usr/lib/libwx_baseu-2.8.so.0                                                                           
#7  0x00007f2277a1ca87 in wxEvtHandler::ProcessEvent () from /usr/lib/libwx_baseu-2.8.so.0       
#428 fixed Generated Makefiles should not try to run wrong premake Philip Taylor
Description

The Makefiles generated by Premake try to detect when the .lua file changed, and re-run premake. That doesn't work because it's not the right path (and it might try to run an incorrect version of Premake instead). Maybe it could be changed to use the right relative path, but it would probably be safer to just print a message telling the user to run update-workspaces.sh again.

(We already use a custom fork of Premake so it'd be adequate to just hard-code these changes into Premake's source.)

#429 fixed Documentation and tests for new serialization, CParamNode code Philip Taylor Philip Taylor
Description

The new serialization and CParamNode code needs tests and documentation.

#431 fixed GUI integration Philip Taylor
Description

Need to have some integration between the GUI and simulation. Rather than try to get the 'real' GUI working, just concentrate for now on getting a rough approximation of the right data being shown and updated, and messages passing from the GUI back to the simulation.

#432 fixed Make error [2] Sylvain
Description

I got an error while compilation with AtlasUi in "obj/AtlasUI_Debug/DLLInterface.o"

Debug/precompiled.h ../../../source/tools/atlas/AtlasUI/Misc/DLLInterface.cpp ../../../source/tools/atlas/AtlasUI/Misc/DLLInterface.cpp:48:2: error: #error libxml2 must have threading support enabled make[1]: * [obj/AtlasUI_Debug/DLLInterface.o] Erreur 1 make: * [AtlasUI] Erreur 2

I'm on Ubuntu Karmic 9.10 tell me if you need more information this is my first report and my english sucks !

#434 fixed [PATCH] Don't render transparent objects twice philip Philip Taylor
Description

CRenderer::RenderSubmissions() calls RenderTransparentModels() twice, once before drawing water and once after, so that underwater transparent models will blend properly.

That seems like a terrible idea. We have lots of transparent objects (trees) so it will kill performance; and the overdraw makes transparent objects look different, so when we fix the performance bug all the art will be wrongly calibrated.

Possible temporary solution: don't support transparent objects underwater. Possible better solution: do the overdraw only on models which intersect the water plane. Ideal solution: render transparent objects correctly always (but I don't know how that'd be implemented).

#435 fixed Unit selection in GUI Philip Taylor Philip Taylor
Description

The new simulation system should let you select entities properly. Inputs should be similar to the old system - click to select, double-click to select all of type on screen, triple-click to select all of type in world, drag to select in area, shift to add to current selection, plus predefined groups, or something like that. Also it should handle own vs enemy units sensibly. See ps/Interact.cpp and gui/session_new/input.js.

#436 fixed Entity commands Philip Taylor Philip Taylor
Description

It needs to be possible for the GUI to push commands onto a command queue, which (eventually) will be network-synchronised, and then entities need to respond to the commands.

Also it needs some kind of security checking, so you can't move other players' units around.

Also it'd be nice if it could do things like play sounds immediately when the command is pushed, rather than after the network turn latency.

#437 fixed Document the process of writing components Philip Taylor Philip Taylor
Description

See SimulationSyntax. Need to extend it to cover writing script wrappers for interfaces, defining components in C++, and defining components in JS. Also need to cover all the simulation-specific things you might want to do inside a component (CmpPtr etc).

#438 fixed Add a jsval wrapper type Philip Taylor Philip Taylor
Description

Some of the code uses jsval as a template type parameter, particularly in ToJSVal/FromJSVal. Since jsval is a typedef of unsigned long (or something like that), it conflicts with the normal integer type and things will break. (The current code doesn't even compile on 32-bit Linux).

So there should be a special type (maybe a ScriptVal or something) which just wraps a jsval, and can be used as a distinct type for templates.

#439 duplicate Make Atlas terrain texture previews work with force_s3tc_enable Philip Taylor Philip Taylor
Description

The game mostly works on Linux with compressed textures if you set DRI's force_s3tc_enable flag. But the terrain previews in Atlas don't work - they're just black squares. (They do work fine if the libtxc_dxtn library is installed, but it's a pain to expect users to install that.)

(See tools/atlas/GameInterface/Handlers/TerrainHandlers.cpp for the code that reads the textures and sends them to Atlas.)

So Atlas needs to do something different. Maybe the engine should just use its own software S3TC decoder - that would additionally save the cost of loading every terrain texture into a full GL texture, since we only actually need to decode a small chunk of a single mipmap level.

#440 duplicate "libxml2 must have threading support enabled" error Philip Taylor Luciano
Description

Building trace:

...

Observable.cppVideoRecorder.cppFFmpeg.cppDLLInterface.cppScenarioEditor.cppSectionLayout.cpp../../../source/tools/atlas/AtlasUI/Misc/DLLInterface.cpp:48:2: error: #error libxml2 must have threading support enabledSidebar.cppmake[1]: *** [obj/AtlasUI_Debug/DLLInterface.o] Error 1make[1]: *** Se espera a que terminen otras tareas....make: *** [AtlasUI] Error 2

Running System information:

uname -aLinux luciano-desktop 2.6.31-16-generic #53-Ubuntu SMP Tue Dec 8 04:01:29 UTC 2009 i686 GNU/LinuxCurrent libxml2-dev installed version: 2.7.5

Attached complete error list in this ticket.

Notes:

Don't know if this is a bug, but I couldn't find some way of "enabling thread support" to libxml2" and build the game to enter the project.

Build with svn updated to revision 7223.

Tried "make -j3" and "make" and is the same error.

Thanks.

#441 fixed Run the GC occasionally Yves Philip Taylor
Description

JS won't automatically run the GC until it's run out of memory, which might be an inconvenient time to freeze the simulation. We should probably call it manually at regular intervals, when it's least likely to cause disruption (e.g. during a frame when it's not also busy doing all the simulation computation), to make it more predictable.

#442 fixed gui/common/functions_page_session.js(174): Error: Size only accepts strings or GUISize objects Andrei
Description

When I start a new game, it doesn't matter the map I get only a huge circle: here's a screenshot and a video with the bug. And the output of pyrogenesis_dbg:

TIMER| InitVfs: 6.28272 ms
TIMER| InitScripting: 2.62648 ms
TIMER| CONFIG_Init: 10.9219 ms
TIMER| write_sys_info: 1.12136 ms
TIMER| ps_console: 5.00708 ms
TIMER| ps_lang_hotkeys: 4.32716 ms
TIMER| common/setup.xml: 13.6533 ms
TIMER| common/styles.xml: 1.8468 ms
TIMER| common/sprite1.xml: 41.6079 ms
TIMER| common/init.xml: 14.132 ms
TIMER| pregame/mainmenu.xml: 75.108 ms
TIMER| common/global.xml: 1.93192 ms
TIMER| InitRenderer: 32.0211 ms
TIMER| SimulationInit: 2.881 ms
TIMER| Init_miscgamesection: 26.0635 ms
SND| alc_init: success, using ALSA Software
TIMER| common/setup.xml: 1.759 ms
TIMER| common/styles.xml: 2.11024 ms
TIMER| common/sprite1.xml: 81.4024 ms
TIMER| common/init.xml: 18.9571 ms
TIMER| loading/loading.xml: 3.22424 ms
TIMER| common/global.xml: 1.27692 ms
TIMER| common/setup.xml: 2.15872 ms
TIMER| common/styles.xml: 2.22512 ms
TIMER| common/sprite1.xml: 77.4852 ms
TIMER| common/init.xml: 23.1116 ms
TIMER| session/session.xml: 68.2606 ms
TIMER| session/manual.xml: 3.00416 ms
TIMER| common/global.xml: 10.2518 ms
ERROR: GUI page 'page_session.xml': Failed to call init() function
GAME STARTED, ALL INIT COMPLETE
gui/common/functions_page_session.js(174): Error: Size only accepts strings or GUISize objects
ERROR: JavaScript Error (gui/common/functions_page_session.js, line 174): Error: Size only accepts strings or GUISize objects
TIMER| shutdown Scheduler: 7.92 us
TIMER| shutdown mouse stuff: 49.04 us
TIMER| shutdown Pathfinder: 180.919 us
TIMER| shutdown game scripting stuff: 14.8534 ms
TIMER| shutdown actor stuff: 11.28 us
TIMER| shutdown TexMan: 5.6 us
TIMER| shutdown Renderer: 582.64 us
TIMER| shutdown ScriptingHost: 7.24432 ms
TIMER| shutdown ConfigDB: 2.08 us
TIMER| shutdown CSocketBase: 229.68 us
TIMER| shutdown CNetLogManager: 45.999 us
TIMER| shutdown I18N: 7.72 us
TIMER| resource modules: 38.0077 ms
TIMER TOTALS (25 clients)
-----------------------------------------------------
  js_timer 19: 0 c (0x)
  js_timer 18: 0 c (0x)
  js_timer 17: 0 c (0x)
  js_timer 16: 0 c (0x)
  js_timer 15: 0 c (0x)
  js_timer 14: 0 c (0x)
  js_timer 13: 0 c (0x)
  js_timer 12: 0 c (0x)
  js_timer 11: 0 c (0x)
  js_timer 10: 0 c (0x)
  js_timer 9: 0 c (0x)
  js_timer 8: 0 c (0x)
  js_timer 7: 99.6559 Mc (598x)
  js_timer 6: 226.475 Mc (598x)
  js_timer 5: 190.2 Mc (106x)
  js_timer 4: 54.9052 Mc (106x)
  js_timer 3: 74.5003 Mc (106x)
  js_timer 2: 128.114 Mc (106x)
  js_timer 1: 1.84467e+10 Gc (106x)
  js_timer 0: 0 c (2x)
  tc_2: 0 c (0x)
  tc_1: 0 c (0x)
  tc_transform: 2108.03 kc (14x)
  tc_plain_transform: 3394.96 kc (14x)
  tc_png_decode: 0 c (0x)
-----------------------------------------------------
TIMER| shutdown misc: 638.841 us

I am building 0ad on Slackware Linux 13 x86_64 from subversion with Revision: 7232

#443 fixed Add GPL header Philip Taylor Philip Taylor
Description

Need to remember to add the GPL header block to all the new source files.

#444 fixed Merge simulation code into SVN Philip Taylor Philip Taylor
Description

Need to merge the code currently in the Hg branch into SVN. (Now seems as good a time as any.)

#446 worksforme DirWatch doesn't like Windows symbolic links Andrew Philip Taylor
Description

If I create a symbolic directory link (via mklink /d on Vista) for e.g. the mods/public/art directory (so I can share it with another installation of the game), then DirWatchManager::Add constructs a PDirWatchRequest which has m_dirHandle.m_hDir = 0xffffffff and then it raises an error in CompletionPort::Attach. Other things fail later on.

It'd be nicer if worked. (But it already works fine with junctions (mklink /j) instead of symlinks, so it's not a serious lack of functionality.)

#447 worksforme Minimap overlays button tooltips. b1506789
Description

In the game, button tooltips become partially obstructed by the minimap. It seems that the problem originates from the poor implementation of CTooltip::Draw() in CTooltip.cpp, but if it's of any help, I managed to bypass the bug by commenting out glDisable(GL_DEPTH_TEST) in MiniMap.cpp, line 263.

#448 fixed Building construction placement UI Philip Taylor Philip Taylor
Description

When the player chooses to build a building, they need some way to pick a location for it.

The implementation should be somewhat similar to the Atlas entity preview feature. Probable approach is: GuiInterface.js should provide some functions ShowEntityPreview(templateName, x, z, angle, player) and HideEntityPreview(). Those functions would construct a local entity with the preview|templateName magic template, and move it around, and delete it when it's hidden. Show would return a flag indicating if that's a valid build location (based on terrain, obstructions, etc). (Also it'd have to change the colour to indicate obstruction, and deal with FOW etc). The GUI input-handling scripts would just call those functions to show the previews, and then send the parameters to a 'construct' command when the player clicks.

#449 fixed Crash when starting a new game Erik Johansson
Description

When starting a new game Pyrogenesis crashes. It seems to be loading the map and all as I get ~ a second before the game crashes when I can see the game, and hear the music, it's at most a second though as the game crashes almost immediately and the music start to repeat the first < second or so. See below for call stack + output from VC++

Call stack:

 	wrap_oal.dll!0b641d5a() 	
 	[Frames below may be incorrect and/or missing, no symbols loaded for wrap_oal.dll]	
 	winmm.dll!76b454e3() 	
 	winmm.dll!76b5adfe() 	
 	winmm.dll!76b5aee9() 	
 	winmm.dll!76b5af02() 	
 	kernel32.dll!7c80b729() 	
>	pyrogenesis_dbg.exe!CreateDirectories(const boost::filesystem::basic_path<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >,boost::filesystem::wpath_traits> & path={...}, unsigned int mode=0)  Line 116 + 0x13 bytes	C++

Output from VC++:

TIMER| common/global.xml: 17.62 ms
GAME STARTED, ALL INIT COMPLETE
First-chance exception at 0x0b641d5a in pyrogenesis_dbg.exe: 0xC0000094: Integer division by zero.
Unhandled exception at 0x0b641d5a in pyrogenesis_dbg.exe: 0xC0000094: Integer division by zero.
The program '[116860] pyrogenesis_dbg.exe: Native' has exited with code 0 (0x0).

Please tell me if there's anything else you want to know. I've attached my system_info.txt.

#450 fixed Incorrect local.cfg search path Philip Taylor
Description

As in this post, the game doesn't look in the per-user path for local.cfg, and it should do.

(Adding to Trac because I'd forgotten about it entirely and someone mentioned it, and I don't think it's been fixed yet.)

#451 fixed CParamNode::GetChild should return CParamNode& instead of CParamNode* André Puel André Puel
Description

Ideally, GetChild would return a CParamNode& instead of a CParamNode* (now that it will never return NULL), to simplify the usage syntax (GetChild("x").GetChild("y") instead of GetChild("x")->GetChild("y")).

#452 fixed Extended Latin characters show up as question marks in diamonds on loading screen Art Department Aviv
#453 fixed "Assertion failed: "hModule" Location: wdlfcn.cpp:55 (dlopen)" when trying to start Atlas Philip Taylor Erik Johansson
Description
Assertion failed: "hModule"
Location: wdlfcn.cpp:55 (dlopen)

Call stack:

dlopen (wdlfcn.cpp:50)
    so_name = 0xCCCCCCCC
    flags = 1244820 (0x0012FE94)
    hModule = 0xCCCCCCCC
    pathname = 
        m_path = (error -100500 while analyzing string<﻾td::char_traits<char> >)


DllLoader::LoadDLL (dllloader.cpp:70)
    this = 0x00BAD56B -> 
        m_Name = 0x0824548B -> (unavailable - internal error)

        m_Handle = 0x8B0C428D


ATLAS_Run (atlas.cpp:41)
    args = 0x0012FEC8 -> 
        m_Args = (error -100500 while analyzing vector<pair<CStr8,CStr8> >)
        m_Arg0 = { (error -100500 while analyzing string<﻾td::char_traits<char> >) }

    flags = 3017173665 (0xB3D66AA1)

ATLAS_RunIfOnCmdLine (atlas.cpp:70)
    args = 0x00000002

RunGameOrAtlas (main.cpp:379)
    argc = 2 (0x00000002)
    argv = 0x01F17690 -> 0x01F1769C -> "h:\0ad\binaries\system\pyrogenesis_dbg.exe"
    ran_atlas = true 
    args = 
        m_Args = (error -100500 while analyzing vector<pair<CStr8,CStr8> >)
        m_Arg0 = { (error -100500 while analyzing string<﻾td::char_traits<char> >) }

    res = 2.63516e-299 (0x01F1A5C0CCCCCCCC)

main (main.cpp:416)
    argc = 1245112 (0x0012FFB8)
    argv = 0x00506C74 -> 0xC7E04589 -> (unavailable - internal error)


__tmainCRTStartup (crtexe.c:410)

mainCRTStartup (crtexe.c:393)

CallStartupWithinTryBlock (wseh.cpp:352)
    ret = 1245060 (0x0012FF84)

00000000
    ret = 2147328000 (0x7FFDA000)


errno = 0 (?)
OS error = 0 (no error code was set)

After I click continue I get the following error message:

The Atlas UI was not successfully loaded and therefore cannot be started as requested.
Location: Atlas.cpp:46 (ATLAS_Run)

Call stack:

ATLAS_Run (atlas.cpp:41)
    args = 0x0012FEC8 -> 
        m_Args = (error -100500 while analyzing vector<pair<CStr8,CStr8> >)
        m_Arg0 = { (error -100500 while analyzing string<﻾td::char_traits<char> >) }

    flags = 3017173665 (0xB3D66AA1)

ATLAS_RunIfOnCmdLine (atlas.cpp:70)
    args = 0x00000002

RunGameOrAtlas (main.cpp:379)
    argc = 2 (0x00000002)
    argv = 0x01F17690 -> 0x01F1769C -> "h:\0ad\binaries\system\pyrogenesis_dbg.exe"
    ran_atlas = true 
    args = 
        m_Args = (error -100500 while analyzing vector<pair<CStr8,CStr8> >)
        m_Arg0 = { (error -100500 while analyzing string<﻾td::char_traits<char> >) }

    res = 2.63516e-299 (0x01F1A5C0CCCCCCCC)

main (main.cpp:416)
    argc = 1245112 (0x0012FFB8)
    argv = 0x00506C74 -> 0xC7E04589 -> (unavailable - internal error)


__tmainCRTStartup (crtexe.c:410)

mainCRTStartup (crtexe.c:393)

CallStartupWithinTryBlock (wseh.cpp:352)
    ret = 1245060 (0x0012FF84)

00000000
    ret = 2147328000 (0x7FFDA000)


errno = 0 (?)
OS error = 0 (no error code was set)

And if it's useful here's the output, perhaps it can provide some clues{{{ 'pyrogenesis_dbg.exe': Loaded 'H:\0ad\binaries\system\pyrogenesis_dbg.exe', Symbols loaded. 'pyrogenesis_dbg.exe': Loaded 'C:\WINDOWS\system32\ntdll.dll' 'pyrogenesis_dbg.exe': Loaded 'C:\WINDOWS\system32\kernel32.dll' 'pyrogenesis_dbg.exe': Loaded 'C:\WINDOWS\system32\opengl32.dll' 'pyrogenesis_dbg.exe': Loaded 'C:\WINDOWS\system32\msvcrt.dll' 'pyrogenesis_dbg.exe': Loaded 'C:\WINDOWS\system32\advapi32.dll' 'pyrogenesis_dbg.exe': Loaded 'C:\WINDOWS\system32\rpcrt4.dll' 'pyrogenesis_dbg.exe': Loaded 'C:\WINDOWS\system32\secur32.dll' 'pyrogenesis_dbg.exe': Loaded 'C:\WINDOWS\system32\gdi32.dll' 'pyrogenesis_dbg.exe': Loaded 'C:\WINDOWS\system32\user32.dll' 'pyrogenesis_dbg.exe': Loaded 'C:\WINDOWS\system32\glu32.dll' 'pyrogenesis_dbg.exe': Loaded 'C:\WINDOWS\system32\ddraw.dll' 'pyrogenesis_dbg.exe': Loaded 'C:\WINDOWS\system32\dciman32.dll' 'pyrogenesis_dbg.exe': Loaded 'H:\0ad\binaries\system\libxml2.dll', Binary was not built with debug information. 'pyrogenesis_dbg.exe': Loaded 'C:\WINDOWS\system32\wsock32.dll' 'pyrogenesis_dbg.exe': Loaded 'C:\WINDOWS\system32\ws2_32.dll' 'pyrogenesis_dbg.exe': Loaded 'C:\WINDOWS\system32\ws2help.dll' 'pyrogenesis_dbg.exe': Loaded 'H:\0ad\binaries\system\iconv.dll', Binary was not built with debug information. 'pyrogenesis_dbg.exe': Loaded 'H:\0ad\binaries\system\zlib1.dll', Binary was not built with debug information. 'pyrogenesis_dbg.exe': Loaded 'C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.4053_x-ww_e6967989\msvcr80.dll' 'pyrogenesis_dbg.exe': Loaded 'H:\0ad\binaries\system\OpenAL32.dll', Binary was not built with debug information. 'pyrogenesis_dbg.exe': Loaded 'C:\WINDOWS\system32\shell32.dll' 'pyrogenesis_dbg.exe': Loaded 'C:\WINDOWS\system32\shlwapi.dll' 'pyrogenesis_dbg.exe': Loaded 'C:\WINDOWS\system32\winmm.dll' 'pyrogenesis_dbg.exe': Loaded 'C:\WINDOWS\system32\ole32.dll' 'pyrogenesis_dbg.exe': Loaded 'C:\WINDOWS\system32\oleaut32.dll' 'pyrogenesis_dbg.exe': Loaded 'C:\WINDOWS\WinSxS\x86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.30729.1_x-ww_f863c71f\msvcp90d.dll' 'pyrogenesis_dbg.exe': Loaded 'C:\WINDOWS\WinSxS\x86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.30729.1_x-ww_f863c71f\msvcr90d.dll' 'pyrogenesis_dbg.exe': Loaded 'C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.5512_x-ww_35d4ce83\comctl32.dll' 'pyrogenesis_dbg.exe': Loaded 'C:\WINDOWS\system32\dsound.dll' 'pyrogenesis_dbg.exe': Loaded 'C:\WINDOWS\system32\version.dll' 'pyrogenesis_dbg.exe': Loaded 'C:\WINDOWS\system32\setupapi.dll' 'pyrogenesis_dbg.exe': Loaded 'C:\WINDOWS\system32\wintrust.dll' 'pyrogenesis_dbg.exe': Loaded 'C:\WINDOWS\system32\crypt32.dll' 'pyrogenesis_dbg.exe': Loaded 'C:\WINDOWS\system32\msasn1.dll' 'pyrogenesis_dbg.exe': Loaded 'C:\WINDOWS\system32\imagehlp.dll' 'pyrogenesis_dbg.exe': Unloaded 'C:\WINDOWS\system32\setupapi.dll' 'pyrogenesis_dbg.exe': Loaded 'C:\WINDOWS\system32\setupapi.dll' 'pyrogenesis_dbg.exe': Unloaded 'C:\WINDOWS\system32\setupapi.dll' 'pyrogenesis_dbg.exe': Loaded 'C:\WINDOWS\system32\wdmaud.drv' 'pyrogenesis_dbg.exe': Loaded 'C:\WINDOWS\system32\setupapi.dll' 'pyrogenesis_dbg.exe': Unloaded 'C:\WINDOWS\system32\setupapi.dll' 'pyrogenesis_dbg.exe': Unloaded 'C:\WINDOWS\system32\wdmaud.drv' 'pyrogenesis_dbg.exe': Loaded 'C:\WINDOWS\system32\wdmaud.drv' 'pyrogenesis_dbg.exe': Loaded 'C:\WINDOWS\system32\setupapi.dll' 'pyrogenesis_dbg.exe': Unloaded 'C:\WINDOWS\system32\setupapi.dll' 'pyrogenesis_dbg.exe': Loaded 'C:\WINDOWS\system32\msacm32.drv' 'pyrogenesis_dbg.exe': Loaded 'C:\WINDOWS\system32\msacm32.dll' 'pyrogenesis_dbg.exe': Loaded 'C:\WINDOWS\system32\midimap.dll' 'pyrogenesis_dbg.exe': Loaded 'C:\WINDOWS\system32\setupapi.dll' 'pyrogenesis_dbg.exe': Unloaded 'C:\WINDOWS\system32\setupapi.dll' HPET: rev=1 vendor=8086 bits=64 period=429B17F freq=1.43182e+007 wdlfcn.cpp(55): Assertion failed: "hModule" 'pyrogenesis_dbg.exe': Loaded 'H:\0ad\binaries\system\dbghelp.dll' First-chance exception at 0x0052471b in pyrogenesis_dbg.exe: 0xC0000005: Access violation reading location 0x0824548b. First-chance exception at 0x0052471b in pyrogenesis_dbg.exe: 0xC0000005: Access violation reading location 0xc7e04589. 'pyrogenesis_dbg.exe': Loaded 'C:\WINDOWS\system32\uxtheme.dll' 'pyrogenesis_dbg.exe': Loaded 'C:\Program Files\RocketDock\RocketDock.dll', Binary was not built with debug information. 'pyrogenesis_dbg.exe': Loaded 'C:\WINDOWS\system32\psapi.dll' 'pyrogenesis_dbg.exe': Loaded 'C:\WINDOWS\system32\MSCTF.dll' Atlas.cpp(46): The Atlas UI was not successfully loaded and therefore cannot be started as requested. First-chance exception at 0x0052471b in pyrogenesis_dbg.exe: 0xC0000005: Access violation reading location 0xc7e04589. The thread 'whrt_UpdateThread' (0x2be7c) has exited with code 0 (0x0). The thread 'Win32 Thread' (0x2c1d0) has exited with code 0 (0x0). The program '[180652] pyrogenesis_dbg.exe: Native' has exited with code 0 (0x0).

}}} mainlog.html is not updated, I've attached system_info.txt

#454 fixed "Debug Assertion Failed!" in VC++ Express 2008 when clicking on "Copy" button in pyrogenesis error dialog box Erik Johansson
Description

When pressing the Copy button in the Program Error window when running the game (with -editor) in VC++ Express 2008, I get an error message from VC++:

Debug Assertion Failed! Program: h:\0ad\binaries\system\pyrogenesis_dbg.exe File: f:\dd\vctools\crt_bld\self_x86\crt\src\tcscpy_s.inl Line: 30 Expression: (L"Buffer is too small" && 0) For information on how your program can cause an assertion failure, see the Visual C++ documentation on asserts. (Press Retry to debug the application)

So I do, another dialog box:

pyrogenesis_dbg.exe has triggered a breakpoint [Break][Continue]

I press break, and below is the call stack:

>	pyrogenesis_dbg.exe!SetClipboardText(const wchar_t * text=0x02e90068, void * * hMem=0x0012f400)  Line 35 + 0x14 bytes	C++ 

	pyrogenesis_dbg.exe!sys_clipboard_set(const wchar_t * text=0x02e90068)  Line 55 + 0xd bytes	C++ 

	pyrogenesis_dbg.exe!error_dialog_proc(HWND__ * hDlg=0x00090978, unsigned int msg=273, unsigned int wParam=1002, long lParam=395626)  Line 183 + 0x9 bytes	C++

 	user32.dll!7e418734() 	

 	user32.dll!7e423ce4() 	

 	user32.dll!7e423b30() 	 

	user32.dll!7e43e577() 	 

	user32.dll!7e418734() 	

 	user32.dll!7e418734() 	

 	user32.dll!7e43e577() 	 

	user32.dll!7e43e577() 	

 	user32.dll!7e43e18a() 	

 	MSCTF.dll!747313d4() 	

 	MSCTF.dll!747313d9() 	

 	MSCTF.dll!7473057a() 	

 	user32.dll!7e418734() 	

 	user32.dll!7e418816() 	

 	user32.dll!7e4189cd() 	

 	user32.dll!7e4193e9() 	 

	user32.dll!7e4193a8() 	

 	user32.dll!7e431b7c() 	

 	user32.dll!7e4249c4() 	

 	user32.dll!7e424a06() 	

 	user32.dll!7e43b190() 	

 	pyrogenesis_dbg.exe!sys_display_error(const wchar_t * text=0x02040000, unsigned int flags=6)  Line 265 + 0x1d bytes	C++

 	pyrogenesis_dbg.exe!CallDisplayError(const wchar_t * text=0x02040000, unsigned int flags=6)  Line 405 + 0xd bytes	C++

 	pyrogenesis_dbg.exe!debug_DisplayError(const wchar_t * description=0x0012f9bc, unsigned int flags=6, void * context=0x00000000, const wchar_t * lastFuncToSkip=0x01f1a640, const wchar_t * pathname=0x00c1b0a0, int line=55, const char * func=0x00c1b098, unsigned char * suppress=0x00d48993)  Line 480 + 0xd bytes	C++

 	pyrogenesis_dbg.exe!debug_OnAssertionFailure(const wchar_t * expr=0x00c1b108, unsigned char * suppress=0x00d48993, const wchar_t * file=0x00c1b0a0, int line=55, const char * func=0x00c1b098)  Line 565 + 0x35 bytes	C++

 	pyrogenesis_dbg.exe!dlopen(const char * so_name=0x0012fe48, int flags=10)  Line 55 + 0x21 bytes	C++

 	pyrogenesis_dbg.exe!DllLoader::LoadDLL()  Line 82 + 0x10 bytes	C++

 	pyrogenesis_dbg.exe!ATLAS_Run(const CmdLineArgs & args={...}, int flags=1)  Line 43 + 0xa bytes	C++

 	pyrogenesis_dbg.exe!ATLAS_RunIfOnCmdLine(const CmdLineArgs & args={...})  Line 73 + 0xb bytes	C++

 	pyrogenesis_dbg.exe!RunGameOrAtlas(int argc=2, const char * * argv=0x01f17690)  Line 393 + 0x9 bytes	C++

 	pyrogenesis_dbg.exe!main(int argc=2, char * * argv=0x01f17690)  Line 419 + 0xd bytes	C++

 	pyrogenesis_dbg.exe!__tmainCRTStartup()  Line 586 + 0x19 bytes	C

 	pyrogenesis_dbg.exe!mainCRTStartup()  Line 403	C

 	pyrogenesis_dbg.exe!CallStartupWithinTryBlock()  Line 356 + 0x5 bytes	C++

 	pyrogenesis_dbg.exe!wseh_EntryPoint()  Line 384	C++

 	kernel32.dll!7c817077() 	

 	pyrogenesis_dbg.exe!std::_Tree<std::_Tmap_traits<void const *,CModelDefRPrivate *,std::less<void const *>,std::allocator<std::pair<void const * const,CModelDefRPrivate *> >,0> >::insert(std::_Tree<std::_Tmap_traits<void const *,CModelDefRPrivate *,std::less<void const *>,std::allocator<std::pair<void const * const,CModelDefRPrivate *> >,0> >::const_iterator _Where=(...,..., const std::pair<void const * const,CModelDefRPrivate *> & _Val=(...,...)  Line 691 + 0x1f bytes	C++

 	e04d8d52()

The output seems to be the same as the other error (and I assume at least some of the above information is at least as much related to that error as this error :P If nothing else it was that error that caused the error box to appear in the first place.) http://trac.wildfiregames.com/attachment/ticket/453 <-- the other error, am getting too tired to make nicer link =) Please tell me if I've missed some information and I'll try to include it.

#455 wontfix Fix SVN server setup Philip Taylor Philip Taylor
Description

When we first got a lot of SVN users, the server processes kept eating up all available RAM and crashing the machine. So currently it's got mod_deflate disabled (suggested here) and SVNAllowBulkUpdates Off, which has solved that problem but makes checkouts really slow.

Probably what I should do is add some per-process memory limit so it'll safely die instead of causing serious harm, and then try to work out what situations trigger the high memory usage (particular versions of TortoiseSVN perhaps?), and deal with it appropriately (e.g. redirect users of bad clients to a slower, safer copy of the repository).

Also SVN snapshots would be nice.

Also adding a new URL for non-Windows users, that excludes the Windows libraries and binaries, would be nice.

#456 fixed DllLoader should handle missing files better Evans Philip Taylor
Description

DllLoader is used to load the Atlas and Collada libraries at run-time. In a Debug build, it tries to load AtlasUI_dbg.dll (./libAtlasUI_dbg.so on Linux). In a Release build, it loads AtlasUI.dll (./libAtlasUI.so).

(Ignore the comment in DllLoader saying "it is critical that compiler options are the same between app and SO" - that is untrue, since the libraries are designed to be safely mixed with different compiler options. We just want to use the Debug library with Debug builds in order to help debugging and error-detection.)

Because Atlas is a bit awkward and slow to compile, it's disabled by default on Windows, so AtlasUI_dbg.dll won't be created. But AtlasUI.dll will exist, because we put a pre-compiled binary in SVN (for non-programmers to use). Rather than fail to load Atlas in Debug builds because there's no matching library, it should fall back on AtlasUI.dll and load that one instead.

So in Debug builds on Windows, DllLoader needs to look for the Debug library then the Release library; in all other cases it should just look for the single appropriate library.

In all cases, it shouldn't trigger internal error messages in dlopen: it should check that the file exists before trying to open it, and give a nice friendly error message if it can't find anything. (Or maybe it should try to open it first, and change the Windows emulation of dlopen in wdlfcn.cpp to silently return a failure code that the caller can check.)

#458 fixed Game tries to create mods/internal/ directory Philip Taylor
Description

When running the public build, the game still tries to mount the internal directory and expects it to fail silently, but it looks like it actually mkdirs the internal directory if it didn't already exist. That breaks when the game is installed in a read-only location - it shouldn't try to create any directories there.

#459 fixed vfs_Lookup tries to create bogus directories Philip Taylor
Description

When I run the game on Linux (with no non-standard directories, and with a read-only root), g_VFS->Mount(L"screenshots/", paths.Data()/L"screenshots/") ends up calling vfs_Lookup which calls wmkdir("screenshots") which fails because that's relative to the cwd (the system directory) and read-only.

The ~/.local/share/0ad/screenshots/ directory is created before this happens, and it tries creating the bogus screenshots directory even if that proper one exists.

#460 fixed Integrate new random maps with Atlas historic_bruno Erik Johansson
Description

After the new simulation system new reasons why this doesn't work were added, I don't know enough about them to explain it, but I thought I should at least update the description to reflect that the reason it is broken have changed.

At least that's what I assume. I don't know enough of the inner workings of the engine to tell if it's something different, but I think the first time I saw it was pretty soon after the change.

In any case, as far as I can tell most things work (at least the maps I've tried don't display any error during the creation phase, i.e. the time while the "command" window is displayed), however the textures don't show up on cantabrian_highlands.j, and I get errors after the map creation has finished on other maps, so it should preferably be looked into by someone with more knowledge of the system than me.

#461 fixed [ATTACHED] .pmd/.dae converter historic_bruno Robert Schultz
Description

Many of the models are in the PMD format and are not editable by most 3d editing programs. A converter would be needed to ensure high modability in this game, as well to make edits to models.

An alternate solution is for someone to just convert all PMD to DAE.

#462 fixed Switch to new SpiderMonkey as default Philip Taylor
Description

Make --with-spidermonkey-tip the default.

Make update-workspaces.sh run the new SM build script.

Compile the new version for Windows.

#463 fixed Set up source/data snapshots Philip Taylor
Description

Rather than forcing everyone to download from SVN, there should be a few downloadable-over-HTTP snapshots provided:

  • Linux/OSX SVN working copy, so people can run svn up.
  • Windows SVN working copy, so people can run TortoiseSVN update.
    • (These differ because of line endings. Also, we should ideally have a separate Linux SVN URL that excludes the Windows binaries, but that's not critical.)
    • (These need to be done for a sufficiently old version of the SVN client, so it'll work for users with those old versions.)
  • Linux/OSX data files (just the binaries/data/ directory), to be used by most distro packages.
  • Linux/OSX build files (everything that's not binaries/data/), to be used by people who are creating packages and by source-based distros.
  • Windows data files plus executables (like Linux data plus binaries/system/, and with Windows line endings), to be used by non-developers on Windows.

These don't all need to be updated constantly, but hopefully it'll be fairly frequent and so it should be automated as much as possible. Maybe use Wine to generate the Windows working copies.

In the non-SVN distributions, svn_revision.txt should be set to something appropriate.

Windows files should be .7z (because .zip is far too inefficient). Linux files should be .tar.gz or maybe .7z/.tar.lzma (if it's efficient enough to be worthwhile).

Put the files on releases.wildfiregames.com so we can move the hosting around easily.

#464 fixed addendum to changeset [7341] Julien Pivotto
Description

addendum to [7341]

you forgot some files..

#465 invalid where is fam.h Julien Pivotto
Description

Compiling under gentoo:

Building lowlevel

dir_watch_fam.cpp ../../../source/lib/sysdep/os/linux/dir_watch_fam.cpp:33:18: attention : wfam.h : Aucun fichier ou dossier de ce type ../../../source/lib/sysdep/os/linux/dir_watch_fam.cpp:40: erreur: ‘FAMCodes’ does not name a type ../../../source/lib/sysdep/os/linux/dir_watch_fam.cpp:60: erreur: ‘FAMConnection’ does not name a type ../../../source/lib/sysdep/os/linux/dir_watch_fam.cpp: In destructor ‘DirWatch::~DirWatch()’: ../../../source/lib/sysdep/os/linux/dir_watch_fam.cpp:73: erreur: ‘FAMRequest’ was not declared in this scope ../../../source/lib/sysdep/os/linux/dir_watch_fam.cpp:73: erreur: expected `;' before ‘req’ ../../../source/lib/sysdep/os/linux/dir_watch_fam.cpp:74: erreur: ‘req’ was not declared in this scope ../../../source/lib/sysdep/os/linux/dir_watch_fam.cpp:75: erreur: ‘fc’ was not declared in this scope ../../../source/lib/sysdep/os/linux/dir_watch_fam.cpp:75: erreur: ‘FAMCancelMonitor’ was not declared in this scope ../../../source/lib/sysdep/os/linux/dir_watch_fam.cpp: In function ‘void fam_deinit()’: ../../../source/lib/sysdep/os/linux/dir_watch_fam.cpp:86: erreur: ‘fc’ was not declared in this scope ../../../source/lib/sysdep/os/linux/dir_watch_fam.cpp:86: erreur: ‘FAMClose’ was not declared in this scope ../../../source/lib/sysdep/os/linux/dir_watch_fam.cpp: In function ‘void fam_event_loop_process_events()’: ../../../source/lib/sysdep/os/linux/dir_watch_fam.cpp:100: erreur: ‘fc’ was not declared in this scope ../../../source/lib/sysdep/os/linux/dir_watch_fam.cpp:100: erreur: ‘FAMPending’ was not declared in this scope ../../../source/lib/sysdep/os/linux/dir_watch_fam.cpp:102: erreur: ‘FAMEvent’ was not declared in this scope ../../../source/lib/sysdep/os/linux/dir_watch_fam.cpp:102: erreur: expected `;' before ‘e’ ../../../source/lib/sysdep/os/linux/dir_watch_fam.cpp:103: erreur: ‘e’ was not declared in this scope ../../../source/lib/sysdep/os/linux/dir_watch_fam.cpp:103: erreur: ‘FAMNextEvent’ was not declared in this scope ../../../source/lib/sysdep/os/linux/dir_watch_fam.cpp:110: erreur: ‘e’ was not declared in this scope ../../../source/lib/sysdep/os/linux/dir_watch_fam.cpp:112: erreur: ‘struct NotificationEvent’ has no member named ‘code’ ../../../source/lib/sysdep/os/linux/dir_watch_fam.cpp: In function ‘void* fam_event_loop(void*)’: ../../../source/lib/sysdep/os/linux/dir_watch_fam.cpp:122: erreur: ‘fc’ was not declared in this scope ../../../source/lib/sysdep/os/linux/dir_watch_fam.cpp:122: erreur: ‘FAMCONNECTION_GETFD’ was not declared in this scope ../../../source/lib/sysdep/os/linux/dir_watch_fam.cpp: In function ‘LibError dir_watch_Add(const boost::filesystem::wpath&, PDirWatch&)’: ../../../source/lib/sysdep/os/linux/dir_watch_fam.cpp:167: erreur: ‘fc’ was not declared in this scope ../../../source/lib/sysdep/os/linux/dir_watch_fam.cpp:167: erreur: ‘FAMOpen2’ was not declared in this scope ../../../source/lib/sysdep/os/linux/dir_watch_fam.cpp:193: erreur: ‘FAMRequest’ was not declared in this scope ../../../source/lib/sysdep/os/linux/dir_watch_fam.cpp:193: erreur: expected `;' before ‘req’ ../../../source/lib/sysdep/os/linux/dir_watch_fam.cpp:194: erreur: ‘fc’ was not declared in this scope ../../../source/lib/sysdep/os/linux/dir_watch_fam.cpp:194: erreur: ‘req’ was not declared in this scope ../../../source/lib/sysdep/os/linux/dir_watch_fam.cpp:194: erreur: ‘FAMMonitorDirectory’ was not declared in this scope ../../../source/lib/sysdep/os/linux/dir_watch_fam.cpp:202: erreur: ‘req’ was not declared in this scope ../../../source/lib/sysdep/os/linux/dir_watch_fam.cpp: In function ‘LibError dir_watch_Poll(DirWatchNotifications&)’: ../../../source/lib/sysdep/os/linux/dir_watch_fam.cpp:225: erreur: ‘struct NotificationEvent’ has no member named ‘code’ ../../../source/lib/sysdep/os/linux/dir_watch_fam.cpp:227: erreur: ‘FAMChanged’ was not declared in this scope ../../../source/lib/sysdep/os/linux/dir_watch_fam.cpp:230: erreur: ‘FAMCreated’ was not declared in this scope ../../../source/lib/sysdep/os/linux/dir_watch_fam.cpp:233: erreur: ‘FAMDeleted’ was not declared in this scope make[1]: * [obj/lowlevel_Debug/dir_watch_fam.o] Erreur 1 make: * [lowlevel] Erreur 2

#466 wontfix Add SpiderMonkey JIT stats to profiler Philip Taylor
Description

Currently we don't enable SpiderMonkey's JIT (because it adds complexity and hasn't yet been necessary), but at some point we might do so, in which case this will become more useful:

jstracer.cpp currently provides InitJITStatsClass which sets up a stats object (see also shell/js.cpp which calls it) if there's appropriate build flags (maybe just DEBUG), and records various data about how the JIT is working (see jitstats.tbl).

It might be useful to make that data accessible in the game, so we can see if anything causes the JIT to stop working properly. This should probably be implemented as part of the in-game profiler - see ps/ProfileViewer.h, and also see CRendererStatsTable in renderer/Renderer.cpp as an example of how to return data to be displayed.

We have multiple SpiderMonkey runtimes, and it looks like there's only a single global copy of the JIT stats, so that's probably not ideal but it might work okay anyway.

#467 fixed Make Math.random() network-synchronised Philip Taylor
Description

In the simulation code, Math.random() needs to be replaced with an implementation that is network-synchronised and gets serialized.

#468 duplicate Access violation writing 0x0B69CA40 Ikkerens
Description

Much to our regret we must report the program has encountered an error.

Please let us know at http://trac.wildfiregames.com/ and attach the crashlog.txt and crashlog.dmp files.

Details: unhandled exception (Access violation writing 0x0B69CA40)

Location: unknown:0 (?)

Call stack:

0B69CA40

errno = 0 (?) OS error = 487 (Poging om toegang te verkrijgen tot ongeldig adres.) Above translated: Attempt to access a invalid adress.

When debugging in vs2008, stops at this part (green arrow pointing at second line): File: unifont.cpp

		// [cumulative for 12: 20ms]
		(*f->glyphs_id)[(wchar_t)Codepoint] = (unsigned short)i;
		(*f->glyphs_size)[(wchar_t)Codepoint] = Advance;
#469 worksforme [NEEDS INFO] Access violation writing 0x0B69CA40 Ikkerens
Description

Much to our regret we must report the program has encountered an error.

Please let us know at http://trac.wildfiregames.com/ and attach the crashlog.txt and crashlog.dmp files.

Details: unhandled exception (Access violation writing 0x0B69CA40)

Location: unknown:0 (?)

Call stack:

0B69CA40

errno = 0 (?) OS error = 487 (Poging om toegang te verkrijgen tot ongeldig adres.) Above translated: Attempt to access a invalid adress.

When debugging in vs2008, stops at this part (green arrow pointing at second line): File: unifont.cpp

		// [cumulative for 12: 20ms]
		(*f->glyphs_id)[(wchar_t)Codepoint] = (unsigned short)i;
		(*f->glyphs_size)[(wchar_t)Codepoint] = Advance;
#470 fixed Use correct projectile actor Philip Taylor Philip Taylor
Description

Projectiles need to be created with the correct actor (probably just coming from the attacker's actor's relevant prop point, not from the entity template, since that's easier with the current data files).

#471 wontfix Fix Trac mail sending Philip Taylor
Description

Gmail says it's spam.

Received-SPF: softfail (google.com: domain of transitioning admin@wildfiregames.com does not designate 92.243.11.39 as permitted sender) client-ip=92.243.11.39;
Authentication-Results: mx.google.com; spf=softfail (google.com: domain of transitioning admin@wildfiregames.com does not designate 92.243.11.39 as permitted sender) smtp.mail=admin@wildfiregames.com
#472 fixed Fixed-point CTerrain::GetExactGroundLevel nobody Philip Taylor
Description

Need to reimplement CTerrain::GetExactGroundLevel using fixed-point instead of floating-point, so it can be safely used by CCmpTerrain::GetGroundLevel.

#473 fixed not able to update svn from ubuntu asl
Description

I am always getting the following error:

svn: OPTIONS of 'http://svn.wildfiregames.com/public/ps/trunk': timed out waiting for server (http://svn.wildfiregames.com)

subversion client details:

svn, version 1.6.6 (r40053)

compiled Mar 20 2010, 18:04:14

Copyright (C) 2000-2009 CollabNet. Subversion is open source software, see http://subversion.tigris.org/ This product includes software developed by CollabNet (http://www.Collab.Net/).

The following repository access (RA) modules are available:

  • ra_neon : Module for accessing a repository via WebDAV protocol using Neon.
    • handles 'http' scheme
    • handles 'https' scheme
  • ra_svn : Module for accessing a repository using the svn network protocol.
    • with Cyrus SASL authentication
    • handles 'svn' scheme
  • ra_local : Module for accessing a repository on local disk.
    • handles 'file' scheme
#474 fixed Find and fix reliance on run-time S3TC compression Philip Taylor
Description

When I run on Linux with force_s3tc_enable (without libtxc_dxtn which implements S3TC compression, so I've only got decompression), there's a number of rendering errors that I assume are caused by us attempting to use run-time compression. Need to look in more detail to work out the full list of problems and the exact causes, but I see:

  • Some textures are bogus when zoomed out (probably the .dds files are missing mipmaps, and they can't be created dynamically - we ought to ensure all texture files have mipmaps).
  • The minimap is entirely black.
  • Terrain texture previews in the terrain-picker in Atlas are black.
#475 fixed Graphic settings system Philip Taylor
Description

Currently the graphics settings are determined by the defaults in system.cfg, modified by hand-written local.cfg, modified by what the hardware supports (based on GL extensions).

It ought to be based partly on performance, e.g. don't enable fancywater and pretty shadows by default on rubbish slow Intel devices (perhaps based on some benchmarking on first run, or a hardcoded list of common known devices?), and the user should be able to configure things in the UI and preferably see the changes dynamically and then save their settings.

#476 fixed Use JS_New for ScriptInterface::CallConstructor Philip Taylor
Description

The new JS_New function looks like it does what ScriptInterface::CallConstructor attempts to emulate. We should update to a SpiderMonkey version that includes that function, and then use it (and make sure it doesn't change the behaviour in a way that breaks anything).

#477 wontfix include svn revision number fabio
Description

WRT r7400 it would be nice to also include svn version from which the code get compiled, see http://subversion.apache.org/faq.html#version-value-in-source

#478 invalid fpclassify test failure on Windows Philip Taylor
Description

TestPosix::test_fpclassifyf and TestPosix::test_fpclassifyd have failing tests for fpclassify(subnormal) and isnormal(subnormal). See forum post. Our Windows fpclassify emulation should be fixed so that it's actually correct.

#479 fixed Make water animate again Philip Taylor
Description

Water doesn't animate with the new simulation system. It should. (Probably just forgetting to send update messages to it.)

#480 fixed Fix gamma warning Philip Taylor
Description
Assertion failed: "SDL_SetGamma failed"
Location: GameSetup.cpp:142 (SetVideoMode)
18:01 <@Philip-> janwas: Should the warning about gamma be disabled, because it's a bit annoying and doesn't seem to be useful?
18:03 < janwas> Philip-: hm, that check has failed (in the intervening years, no one was able to find the underlying problem), so it can probably be commented out :) (preferably with a note that it sometimes fails, usually on multimon systems)
#481 fixed Make Atlas work from non-binaries/system/ location Philip Taylor
Description

If Atlas isn't run from binaries/system/ then it fails to find files. Fix it.

#482 fixed Fix building on Windows in paths containing space characters Philip Taylor
Description

When located in a path containing spaces, the Windows builds fail with some error message. If I remember correctly, the problem is we pass an absolute path to the cxxtestgen.exe tool but don't correctly put quotes around it. It should perhaps be fixed by modifying our patched copy of Premake, so that it emits correct .vcproj files with the necessary quotes.

Someone should verify that this is really the cause of the errors, and fix it.

#483 fixed Fix actor viewer Philip Taylor Philip Taylor
Description

The actor viewer (the one that's integrated into Atlas) doesn't work with the new simulation system. It needs to be substantially changed so it renders entity previews, not actors, and does all the necessary bookkeeping to interact with the sim components.

#484 fixed unhandled exception 0xC06D007E in wdll_delay_load.cpp:358 (__delayLoadHelper2) Philip Taylor
Description

Somebody just got the error:

Details: unhandled exception (Unknown (0xC06D007E))
Location: wdll_delay_load.cpp:358 (__delayLoadHelper2)

when running on 64-bit Windows 7. This looks like it's probably the same error as somebody else (whose name I forget) reported a while ago, where I think we discovered that the delay-loader was failing to load version.dll. But I don't think we ever found or solved the cause of that problem, and it appears it's affecting more people now.

#485 invalid [spam] dura dura
Description

[spam]

#486 fixed Audio integration Philip Taylor
Description

Need to work out how to integrate audio with the new simulation code.

#487 fixed Use 'use strict' Philip Taylor
Description

Automatically prepend simulation scripts with "use strict"; so they run under ES5's tighter rules, to discourage bad code and potentially allow more efficient execution.

#488 invalid Spam dura dura
#489 fixed Clean up unix-build tarball Philip Taylor
Description

http://www.wildfiregames.com/forum/index.php?showtopic=12996&hl=

I noticed that the 0ad-unix-build.tar contains some .bat/.dll/.exe/.lib/.vcproj files and win-specific directories that could be removed reducing tar size from 37 to 25 MB, adding to the source/tools/dist/build.sh script some --exclude options:

tar cf $PREFIX-unix-build-temp.tar --exclude='*.bat' --exclude='*.dll' --exclude='*.exe' --exclude='*.lib' --exclude='*.vcproj' --exlude='win' --exclude='win32' --exclude='include-win32' ${PREFIX}/{source,build,libraries/{cxxtest,fcollada,spidermonkey-tip,valgrind},binaries/system/readme.txt,*.txt}

I don't know if this is exactly the correct list to exclude; should double-check exactly which files are getting included and remove the unused ones from SVN or from the tar.

#490 fixed Try splitting test data files into build tarball Philip Taylor
Description

See https://bugs.launchpad.net/getdeb.net/+bug/556356 comment 4. It'd probably be nice if the build tarball was sufficient for compiling and running all the tests, and if the data tarball only included game data and not test data, assuming we can actually split them cleanly in that way.

#491 fixed Generate entity XML documentation Philip Taylor
Description

We should have some documentation along the lines of XML.Entity for the new simulation system, aimed at people who are writing XML by hand (not writing scripts or C++) or who want an overview of the features supported by entities.

This is probably a precursor to (and obsoleted by) #422 - it's good to have readable offline documentation even if it's duplicated in a cleverer editing tool, and also it's easier than implementing the cleverer editing tool. The documentation should be generated from annotations in the RelaxNG schema so it can be kept up to date and reused. Maybe we also want some extra higher-level documentation for components, derived from the Doxygen or something? The output should probably just be plain HTML files, which can be uploaded somewhere and linked from the wiki.

#492 fixed packaging resources fabio
Description

I am attaching some files from debian package that may be useful to other distributions and that could eventually included in the 0ad source:

  • 0ad.desktop : desktop file for menu (it assumes the executable is in /usr/lib/games/0ad/system/pyrogenesis )
  • 0ad.png : png icon file (converted from upstream ps.ico and optimized with optipng and advdef)
  • 0ad : script that call /usr/lib/games/0ad/system/pyrogenesis to easily run the game from terminal
  • 0ad.6 : man page with options taken from upstream readme.txt

Update (2012-04-10):

#493 fixed Add proper square intersection code Philip Taylor Philip Taylor
Description

CCmpObstructionManager deals with line/circle/square intersections, for use with pathfinding and building placement etc. Currently squares aren't implemented at all (it pretends they're circles) - they should be added.

"Squares" are non-axis-aligned rectangles, so I think it's just some slightly ugly but straightforward geometry. Everything needs to be done with fixed-point maths (to get reliably repeatable results), so care needs to be taken with overflow, which makes it a bit trickier.

There ought to be some test cases for the code (see e.g. test_Position.h for the general framework for testing simulation components).

#494 worksforme Ensure xmlSetStructuredErrorFunc is used correctly Philip Taylor
Description

A few different bits of code call xmlSetStructuredErrorFunc (Xeromyces.cpp, collada/CommonConvert.cpp, maybe FCollada). Unless I'm mistaken, they'll clobber each other's error functions and don't reset them properly. Need to test that and fix it.

#495 fixed Warn when locale is bogus Sergio Fabian Vier Philip Taylor
Description

What currently happens:

$ LANG=bogus ./pyrogenesis_dbg
terminate called after throwing an instance of 'std::runtime_error'
  what():  locale::facet::_S_create_c_locale name not valid
Aborted

This can happen on misconfigured systems where the locales aren't set up correctly. It would be better to give a much more informative warning and fall back to a default - e.g. perl says:

$ LANG=bogus perl
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
        LANGUAGE = "",
        LC_ALL = (unset),
        LANG = "bogus"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").

which is more helpful.

We need to do this fairly early (before any attempts to access the filesystem), so maybe in EarlyInit in GameSetup.cpp.

#496 fixed Make code documentation available online and kept updated Philip Taylor
Description

Need to get the CppDoc and Doxygen output and the entity XML documentation uploaded somewhere and linked from the wiki, with an easy way to keep them updated.

CppDoc and Doxygen can probably just be run on the web server itself, given an SVN checkout. The entity XML stuff requires the .rng file which comes from compiling and running the game, which a pain so that'll probably have to be done offline and uploaded.

#497 fixed Make square unit outlines match the ground better Evans Philip Taylor
Description

See ConstructSquareOnGround in simulation2/helpers/Render.cpp (used to render the outlines of selected units). Currently it constructs a 4-point square, and moves each point vertically to match the terrain. That looks a bit rubbish if a unit with a large square outline is on bumpy land.

The straight edges ought to be split into smaller segments, each of which is fitted to the terrain, so that the whole shape fits better. Rather than a fixed number of segments, I guess they should be split so each segment is slightly smaller than a tile (4 units), or whatever looks reasonable without wasting lots of vertexes.

#498 fixed Fix building footprints / obstruction shapes Philip Taylor
Description

Trained units spawn around the footprint, but some buildings have a larger obstruction shape so the units are unable to spawn. Need to fix either the code or the data files.

#499 fixed Automatically move units away from construction sites Philip Taylor
Description

Currently you can't place a new building if there's any unit in the way, and it immediately blocks all movement through its area.

From here:

what ought to happen ![...] - units are ignored when placing the foundation, then it tells friendly units to get out of the way and blocks them from walking over the foundation any more, and a builder can get the building to above 0% build progress once there's no units in the way (including enemy units), and after that point the foundation blocks enemy units walking over it too. (That avoids your own units blocking the building, but also avoids the exploitation of foundations to block enemies).

#500 fixed [PATCH] Make Atlas work on OS X historic_bruno Philip Taylor
Description

When running ./pyrogenesis_dbg -editor on OS X, it starts up the editor window and then the window freezes (though all the code threads continue running).

In the current design, pyrogenesis_dbg starts up first, via SDL's main function, which calls [NSApplication run] and eventually ends up in our main (source/main.cpp).

We then detect the -editor flag, load libAtlasUI_dbg.dll, start up a new thread, and run Atlas_StartWindow (source/tools/atlas/AtlasUI/Misc/DLLInterface.cpp) in the new thread, which calls wxEntry to start the wxWidgets event loop.

As far as I can tell, the problem is that we have two Cocoa event loops, one in SDL and one in wxWidgets, and the GUI thread doesn't get the input events it needs. (See here etc for some stuff about Cocoa threading.)

If that's true, we need to do, uh, something to fix it. (I have no idea what, but it might involve a redesign of the game/editor startup process). If that's not true (I'm not an OS X developer so I may easily be mistaken), we need to work out what the problem really is and then do something to fix it.

#502 fixed Convert all entity template data to new format Philip Taylor
Description

Need to convert all the XML, and probably implement dummy components to contain the new data, and have some way to verify that there's no accidental data loss.

#503 fixed Invalid UTF-8 sequence when running in Unicode paths Philip Taylor
Description

Running from E:\0ad-test-é\, argv[0] is something like win1252, not utf8:

Function call failed: return value was -100703 (Invalid UTF-8 sequence)
Location: utf8.cpp:81 (RaiseError)

Call stack:

RaiseError (utf8.cpp:74)
    err = 3272664 (0x0031EFD8)
    perr = 0x02FACFB9 -> 3452816640 (0xCDCDCD00)

UTF8Codec::Decode (utf8.cpp:120)
    srcPos = 0x0031F1D8 -> 0xCCCCCCCC
    srcEnd = 0x0031F1F8 -> [8] { 0 (0x00), 0 (0x00), 0 (0x00), 0 (0x00), 204 (0xCC), 204 (0xCC), 204 (0xCC), 204 (0xCC) }
    err = 0x00000000
    size = 1 (0x00000001)
    offsets = [5] { 0 (0x00000000), 0 (0x00000000), 12416 (0x00003080), 925824 (0x000E2080), 63447168 (0x03C82080) }
    u = 23346901 (0x01643ED5)

wstring_from_utf8 (utf8.cpp:217)
    src = 0x6F8CB5CA -> (error -100500 while analyzing string<﻾td::char_traits<char> >)
    err = 0x0031FCD0 -> 3276112 (0x0031FD50)
    srcEnd = 0x00000031
    srcPos = 0xCCCCCCCC
    dst = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)

Paths::Paths (paths.cpp:31)
    this = 0xCCCCCCCC
    args = 0x0031FD14 -> 
        m_Args = (error -100500 while analyzing vector<pair<CStr8,CStr8> >)
        m_Arg0 = { (error -100500 while analyzing string<﻾td::char_traits<char> >) }

    subdirectoryName = 0xCCCCCCCC

InitVfs (gamesetup.cpp:506)
    args = 0x0031FD14 (see above)
    hooks = 
        override_gl_upload_caps = 0xCCCCCCCC
        get_log_dir = 0xCCCCCCCC
        bundle_logs = 0xCCCCCCCC
        translate = 0xCCCCCCCC
        translate_free = 0xCCCCCCCC
        log = 0xCCCCCCCC
        display_error = 0xCCCCCCCC

    readonlyConfig = 
        m_path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)

    mods = (error -100500 while analyzing vector<CStr8 >)
    LINE_507_ = 
        m_t0 = -3689348814741910324 (0xCCCCCCCCCCCCCCCC)
        m_description = 0xCCCCCCCC

    logs = 
        m_path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)

    modLoosePath = 
        m_path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)

    modArchivePath = 
        m_path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)

    paths = 
        m_root = 
            m_path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)

        m_rdata = 
            m_path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)

        m_data = 
            m_path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)

        m_config = 
            m_path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)

        m_cache = 
            m_path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)

        m_logs = 
            m_path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)


    cacheSize = 3435973836 (0xCCCCCCCC)

Init (gamesetup.cpp:855)
    args = 0x00000001
    flags = 49970672 (0x02FA7DF0)
    setup_vmode = 204 (0xCC)
    hooks = 
        override_gl_upload_caps = 0xCCCCCCCC
        get_log_dir = 0xCCCCCCCC
        bundle_logs = 0xCCCCCCCC
        translate = 0xCCCCCCCC
        translate_free = 0xCCCCCCCC
        log = 0xCCCCCCCC
        display_error = 0xCCCCCCCC

    setup_gui = 204 (0xCC)
    quality = 3435973836 (0xCCCCCCCC)
    missing = 0xCCCCCCCC
    windowed = 204 (0xCC)

RunGameOrAtlas (main.cpp:384)
    argc = 1 (0x00000001)
    argv = 0x02FA7DF0 -> 0x02FA7DF8 -> "E:\0ad-test-é\binaries\system\pyrogenesis_dbg.exe"
    ran_atlas = false
    args = 
        m_Args = (error -100500 while analyzing vector<pair<CStr8,CStr8> >)
        m_Arg0 = { (error -100500 while analyzing string<﻾td::char_traits<char> >) }

    res = 1.6976e-314 (0x00000000CCCCCCCC)

main (main.cpp:421)
    argc = 3276292 (0x0031FE04)
    argv = 0x00FAD184 -> 0xC7E04589 -> (unavailable - internal error)


__tmainCRTStartup (crtexe.c:410)

mainCRTStartup (crtexe.c:393)

CallStartupWithinTryBlock (wseh.cpp:357)
    ret = 3276240 (0x0031FDD0)

00000000
    ret = 23186032 (0x0161CA70)

00000000
    ret = 0 (0x00000000)

RtlInitializeExceptionChain (:0)


errno = 0 (?)
OS error = 50 (The request is not supported.
)
#504 fixed Shadows popping in/out at edges of screen philip Xin
Description

Currently, shadows and geometry have a visible pop in/out at the edges of the screen due to culling too early.

I'm not sure what the previous comment is referring to with shadow maps becoming too low-detail with a larger culling frustum, but one way to fix shadows popping in at the edge of the screen is to widen the culling frustum so that objects aren't culled as early. The downside is that objects will get rendered even though they appear off screen, which is somewhat inefficient. A better solution would be to decouple shadow map rendering from model rendering; as it is now, a shadow map is only rendered if its associated model is to be rendered (I think).

#505 fixed Improve multiplayer session handling Philip Taylor
Description

Needs more testing, plus various fixes like:

  • Map selections should be reflected to other players
  • Chat should work, to some extent
  • Players should have persistent configurable names
  • Display "waiting for other players" dialog after loading
  • Notify players about disconnections
  • Notify players about lag

and probably more - it doesn't need to be perfect at all, it just needs to be vaguely understandable and usable and needs to tell people what's going on.

#506 fixed Crash when selecting host game then cancel then join game Philip Taylor
Description
18:32 < janwas> booom in CNetSession::SetPlayerSlot
18:32 < janwas> because m_psession == 0
18:33 < janwas> oops, that happened because i fat-fingered "host", aborted that, then did join
#507 fixed Optimise state hashing Philip Taylor
Description

The state hashing is very useful for detecting OOS, but very slow (especially in debug builds) which makes it hard to use when testing. It should be faster.

#508 fixed Cursor should be restricted to the game window when fullscreen on Win32 Jay Weisskopf Philip Taylor
Description

When running fullscreen on a multi-monitor system, the mouse can easily leave the game window and move onto the other screen, which breaks edge-of-screen scrolling, and if you accidentally click outside then the game minimises which is quite irritating.

When fullscreen, the mouse ought to be restricted to the window (presumably via ClipCursor).

#509 fixed Network: Should call enet_initialize Philip Taylor
Description

Documentation for enet_initialize says:

Must be called prior to using any functions in ENet.

We don't call it at all. We probably should. (It does nothing on Unix, but calls WSAStartup and timeBeginPeriod on Windows; need to make sure that doesn't interfere with our own wsock or timer code.)

#510 fixed libpng fails to load Philip Taylor
Description

jd823592 on IRC reports problems, having compiled the game in Debug mode on MSVS2008 9.0.30729.1 SP on WinXP SP2 (and having run update-workspaces and 'clean'):

'pyrogenesis_dbg.exe': Loaded 'C:\0ad\binaries\system\libpng14d.dll'
LDR: LdrpWalkImportDescriptor() failed to probe c:\0ad\binaries\system\libpng14d.dll for its manifest, ntstatus 0xc0150002
'pyrogenesis_dbg.exe': Unloaded 'C:\0ad\binaries\system\libpng14d.dll'
First-chance exception at 0x7c812a6b in pyrogenesis_dbg.exe: 0xC06D007E: Module not found.
Unhandled exception at 0x7c812a6b in pyrogenesis_dbg.exe: 0xC06D007E: Module not found.

failing in tex_png.cpp:209 (a call to a libpng function).

#511 fixed [PATCH] Make Ctrl+Backspace/Delete remove entire words in input controls Kenny Long Erik Johansson
Description

Currently ctrl+backspace/delete is ignored completely, which is better than how some programs react to it (i.e. placing an "unknown character" box instead of removing the entire word - I'm looking at you Photoshop =) ). It would be nice to have it working like this: Ctrl+Backspace = remove the word to the left of the cursor (i.e. the entire word left of the cursor, nothing to the right of the cursors), Ctrl+Delete the same but on the right side of the cursor.

As you can see by the priority it's not something too important, but it would be nice to have it working, and it can be a good relatively simple task for someone wanting to get more familiar with the engine.

#512 fixed Unable to run debug exe compiled with VC2008, Solution Attached Aaron Shumate
Description

I've got an updated repository and workspace. I've successfully build both the release and debug executables in a fully patched VC2008 (9.0.21022.8 RTM) under Windows 7. I am able to run the release executable, but unable to run the debug executable -- either from within VC++ or outside.

Solution: Since there is no VC90 version DebugCRT.manifest, the program picks up the VC80 version which has the wrong assemblyIdentity/version (recently and correctly changed in ticket #510). The fix is easy, just add a Microsoft.VC90.DebugCRT.manifest to the binaries\system directory. I've attached the file which is based on the existing non-debug version, Microsoft.VC90.CRT.manifest.

#513 duplicate Notify player when host is not responding Philip Taylor
Description

If a client does not hear from a host for ~5 seconds, it should display a "waiting for host" message to the player (with an "exit game" button on it), and then either go back to normal or go to the "connection lost" message on network timeout.

#514 fixed [PATCH] Implement dir_watch on OS X stwf Philip Taylor
Description

See source/lib/sysdep/dir_watch.h and source/lib/sysdep/os/osx/dir_watch.cpp. The interface needs to be implemented on OS X, so we can automatically reload changed files (for quick testing during development).

See linux/dir_watch_fam.cpp and win/wdir_watch.cpp for possible inspiration.

#515 fixed Doubleclicking a unit should select all similar units on screen Evans Christoph Seipel
Description

When doubleclicking a unit, you should select all units of the same type which are visible at once. This behavior was described in input.js comments, but not yet implemented.

With this ticket I supply a patch, implementing this feature.

#516 fixed Terrain smoothing tool Philip Taylor
Description

See this suggestion for a blur/smooth tool.

I expect it can be implemented like:

  • Copy source/tools/atlas/AtlasUI/ScenarioEditor/Tools/AlterElevation.cpp to SmoothElevation.cpp, and make the necessary name changes.
  • See binaries/data/tools/atlas/scripts/section/terrain.js and add the new tool to the list in there.
  • See source/tools/atlas/GameInterface/Messages.h and add the new one (like where it has AlterElevation)
  • See source/tools/atlas/GameInterface/Handlers/ElevationHandlers.cpp and add the new one.

As for actually implementing the smooth functionality, it'll probably need some thinking and experimenting to discover what's a good smoothing algorithm that behaves usefully and intuitively.

Ideally the same tool would roughen too (when right-clicking), as basically the exact opposite of smoothing.

#518 fixed Sort out Linux packages Philip Taylor
Description

There's a few things which it'd be good to do:

  • Test these packages on all (or at least most) of the various platforms. (Can we easily get VMs for testing?)
  • Use PPAs to build Ubuntu packages, so we can keep them regularly updated ourselves.
  • Update Gentoo ebuilds to install into proper locations (not /opt).
  • Add installation instructions for all these packages.
#519 fixed Windows installer Philip Taylor
Description

Self-extracting archives are not ideal - we should probably have a (very basic) NSIS-based installer. Select an install location, choose whether to install source code, create a start menu entry and uninstaller (which should probably clean up the cache etc files too).

#520 fixed Vsync is not implemented in Linux Lubosz
Description

I use glXSwapIntervalSGI to activate vsync in Linux. This is found in GL/glxext.h. Which needs GL/glx.h. I put those inlcudes to the according places where i found the wgl.h and wglext.h Windows ones.

More information about this extension: http://www.opengl.org/registry/specs/SGI/swap_control.txt

The problem is that glx.h inludes X11/X.h which defines Cursor. So i replaced the Cursor stuff in cursor.cpp with GameCursor... I have no other idea how to solve this. Maybe using namespaces?

The other mystery is that ogl_HaveExtension("GLX_SGI_swap_control") returns false. Do I have to register it somewhere? I did not get the magic of ogl_HaveExtension in ogl.cpp. But it runs without checking for me. This should be temporary.

The ifdefs are confusing with OS_WIN, OS_MACOSX and OS_MAC. Is there OS_UNIX or OS_LINUX? So I could ensure a better separation. Maybe this extension could be usefull in OS X too, but I can't test it.

#521 fixed Rally Points for Buildings Evans Evans
Description

The ability to create Rally Points for buildings by right clicking on the ground after selecting a building. All newly created units from that building will walk towards the rally point soon after creation.

#522 fixed Latest 0ad SVN source is running slow Kieran P
Description

I tried 0ad pre alpha 3. Despite my fairly modern computer (3 years old, 2gb ram, 256-512mb graphics card), it was running slow (moving mouse had about a second's delay). So I've checked out the latest source and tried to run it, with no change. It gave the follow message:

Your graphics drivers do not support S3TC compressed textures. ...[snip]...
Installing the libtxc_dxtn library will fix these problems.

So I followed the link in the message, compiled and installed the library, and things got FAR WORSE!! Moving the mouse had a 5 second delay, and for only 1/4 of the distance I moved the mouse (non-technical term would be jumpy). I couldn't even reach the exit button, so had to force quit the game and uninstall the dxtn library.

I've already taken advice to disable water and shading etc etc. But with no change, because... this slowness is happening on the main menu, not even within the game where most of the effects are.

It's not just this computer. Another computer, with a different OS, different specs, has the same speed issues. I love the concept of an AOE like game, and looking forward to when multiplayer is actually possible, but at it's current state, I'd be lucky to find anyone with a computer fast enough to show me what the game is like.

What am I doing wrong? What information can I provide you with to help get this speed up? I'm very keen to be of any help to get this sorted, so please demand anything from me :-P I am a web developer, and I have slightly dabbled in C before, so if you want any small source changes on my end to gather debug data, let me know what they are.

Keep up the great work, and look forward to solving this speed issue.

#523 fixed Implement SDL_GL_SWAP_CONTROL on Windows janwas Philip Taylor
Description

ps/VideoMode.cpp does SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL, ...) to set vsync.

On Windows we emulate the SDL API, and don't support that attribute. ps/GameSetup/GameSetup.cpp uses WGL_EXT_swap_control instead. That OS-specific code ought to be moved into lib/sysdep/os/win/wsdl.cpp to implement the standard SDL attribute.

#524 fixed [PATCH] Render marker line between building and rally point vts Philip Taylor
Description

When a building's rally point is a long way away, it's easy to lose the little flag marker. It'd probably be nice if we could display some kind of line between the building and rally point once you select the building, so you can follow it visually to find the end.

I don't know what the line should look like. It shouldn't be too distracting (people will often select buildings for other reasons and not care about the rally point), but it shouldn't be too subtle to notice.

#525 fixed ApicIds deadlock Philip Taylor
Description

See call stack (from Brian), particularly:

        pyrogenesis_dbg.exe!_ia32_asm_CAS()  + 0x10 bytes       
>       pyrogenesis_dbg.exe!ModuleInit(volatile int * initState=0x00c55a7c, long (void)* init=0x004b4ff0)  Line 44 + 0x10 bytes C++
        pyrogenesis_dbg.exe!ApicIds()  Line 172 + 0xf bytes     C++
        pyrogenesis_dbg.exe!VerifyRunningOnCorrectProcessors(unsigned long affinity=1)  Line 252 + 0x5 bytes    C++
        pyrogenesis_dbg.exe!os_cpu_SetThreadAffinityMask(unsigned int processorMask=1)  Line 275 + 0x9 bytes    C++
        pyrogenesis_dbg.exe!os_cpu_CallByEachCPU(void (unsigned int, unsigned int)* cb=0x00414380, unsigned int cbData=12933656)  Line 293 + 0xb bytes  C++
        pyrogenesis_dbg.exe!InitApicIds()  Line 160 + 0xf bytes C++
        pyrogenesis_dbg.exe!ModuleInit(volatile int * initState=0x00c55a7c, long (void)* init=0x004b4ff0)  Line 46 + 0x5 bytes  C++
        pyrogenesis_dbg.exe!ApicIds()  Line 172 + 0xf bytes     C++

The first ModuleInit call locks the state while calling init() which then tries to lock the state itself.

#526 fixed Rename and add descriptions to all maps Philip Taylor
Description

Need some basic descriptions of the maps in public/maps/scenarios. Also need to give them better names.

#527 fixed Display correct player names historic_bruno Philip Taylor
Description

Currently, players in the game are shown as "Player 1", "Player 2", etc. The names ought to match the names given in the (multiplayer) game setup screen.

Possibly the names should be entirely a GUI thing - the simulation code will only care about player ID numbers and will never know the names.

#528 worksforme Fix units getting stuck inside groups of obstacles Philip Taylor
Description

When obstacles are widely enough spaced for a unit to get through, but their tile rasterisation makes the tile-based pathfinder think there's no way out, units can get stuck. Need to fix that somehow.

#530 fixed Improve camera handling Philip Taylor
Description

The maximum zoom should perhaps be the current default. Shift+wheel should rotate the camera. Q, E should rotate. Simplify the other rotation controls. Fix the jerky zoom. Add a dev command to unlock the camera movement.

#531 fixed Enforce Population Limit Evans Evans
Description

Enforce Population Limit when training units. Units can be queued up for training past the population limit, but training will start only when there are enough population slots available.

#532 fixed [PATCH] GUI resolution incorrect when screen smaller than requested window size Sergio Fabian Vier Philip Taylor
Description

Steps to reproduce:

  • Optionally set up a .cfg file to start the game in windowed mode with a certain xres/yres (else the default is 1024x768).
  • Set display resolution to smaller than that size.
  • Start the game.

The initial window is shrunk to fit on the screen, but the game renders everything at the configured size instead (so the menu screen is partially off the side of the screen). It should detect this kind of situation and update things to fit.

(ps/VideoMode.cpp is probably a relevant place to look for this.)

#533 fixed Fishing ships for Hellenes Art Department brian
Description

Because we don't want to allow military or merchant ships to fish, we should have dedicated fishing ships. The first we will need will be for the Hellenes. The history department might have relevant information and images. If not, then research will need to be done first. It will require a new model and texture. It might be possible to reuse an existing rigging set from another ship; otherwise that will need to be made also.

#534 fixed Need to implement non-obstruction mode for entities brian
Description

Some entities (farms and fish) should not obstruct other entities. They must still register collisions, so that they can be gathered from. This means that their size cannot simply be set to zero. Some possibly relevant files are:

CCmpObstruction.cpp, CCmpObstructionManager.cpp

There may be other files that need to be modified.

#535 fixed Build errors on OS X 10.6 Philip Taylor
Description

Kimball reports messages like:

../../../source/lib/sysdep/cpu.cpp:38: error: invalid conversion from ‘volatile int64_t*’ to ‘volatile intptr_t*’
../../../source/lib/sysdep/cpu.cpp:38: error:   initializing argument 1 of ‘bool cpu_CAS(volatile intptr_t*, intptr_t, intptr_t)’
../../../source/lib/timer.h: In member function ‘void TimerUnit::AddDifferenceAtomic(TimerUnit, TimerUnit)’:
../../../source/lib/timer.h:180: warning: dereferencing type-punned pointer will break strict-aliasing rules

which looks like it's perhaps using the ARCH_AMD64 branch on a 32-bit target. (Maybe we should add cassert(sizeof(void*) == 8) etc to verify the arch selection earlier?)

Reportedly:

$ g++ -v
Target: i686-apple-darwin10
Configured with: /var/tmp/gcc/gcc-5664~38/src/configure --disable-checking --enable-werror --prefix=/usr --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-transform-name=/^[cg][^.-]*$/s/$/-4.2/ --with-slibdir=/usr/lib --build=i686-apple-darwin10 --program-prefix=i686-apple-darwin10- --host=x86_64-apple-darwin10 --target=i686-apple-darwin10 --with-gxx-include-dir=/include/c++/4.2.1
Thread model: posix
gcc version 4.2.1 (Apple Inc. build 5664)

$ gcc -dumpmachine
i686-apple-darwin10

$ echo $HOSTTYPE
x86_64 

Changing premake.lua to correctly use x86 doesn't seem to change much (the ARCH_AMD64 comes from the source code, not the build system).

I'm not sure what we need to do to help debug this.

#536 worksforme Akaestor (Healer) training progress shown as 1000% Evans
Description

When the player trains and Akaestor (Healer), the build progress is shown as 1000% and then the unit is spawned.

#537 fixed Repair functionality for damaged buildings Evans
Description

Give builders the ability to repair damaged buildings.

#538 fixed Atlas has wrong icon in Start menu Philip Taylor
Description

See source/tools/dist/0ad.nsi (NSIS installer script). It adds the map editor to the Start menu, and attempts to use AtlasUI.dll's icon, but that file has no icon. We need to somehow get it to use the right icon (currently found in binaries/data/tools/atlas/icons/ScenarioEditor.ico), either by associating that icon with the DLL or by using that icon by itself.

#540 duplicate Any plans to translate the game for other languages? Need help? Henrique Poyatos
Description

I think I can translate the game to Brazilian Portuguese (pt_BR).

#541 fixed Strange shape of camera view on minimap lubos
Description

My patch ignore height of terrain.

#543 fixed Replace skybox with black background Jay Weisskopf Philip Taylor
Description

Per discussion here, it would be good to try disabling the skybox and rendering flat black when looking outside the terrain.

Water reflections should still use the skybox as normal.

See CRenderer's calls to RenderSky. I think the background colour is set by Render in GameSetup.cpp, so that should probably be changed to always set it to black.

#544 fixed Fall back to windowed mode if fullscreen fails Philip Taylor
Description

Someone reports startup errors:

ERROR: SetVideoMode failed: 2960x1050:24 1 ("No video mode large enough for 2960x1050")
ERROR: SetVideoMode failed: 2960x1050:24 1 ("No video mode large enough for 2960x1050")
terminate called after throwing an instance of 'PSERROR_System_VmodeFailed'
  what():  System_VmodeFailed

Probably CVideoMode should determine when fullscreen mode fails, then try windowed mode instead of giving up entirely.

#545 fixed Grab mouse in fullscreen Jay Weisskopf
Description

When the game is running in fullscreen, the mouse should be grabbed so it cannot move outside the game. I have multiple monitors, so when I try to pan the camera by putting the cursor along the edges, it moves right into the next monitor, which is a major annoyance.

Attached is a patch to fix the issue.

The ideal functionality for mouse grabbing would probably be to have it always grabbed in fullscreen, and optionally grabbed during gameplay in windowed mode (but not on menus, dev console, text entry, etc). I can also implement this if desired (it'd be a good way for me to start getting my feet wet).

#546 fixed Water continues to flow during pause Jay Weisskopf
Description

When the game is paused, water still appears to flow. I've noticed this in games before and it always bugs me. Fix attached.

#547 fixed lib/sysdep/os/linux/lcpu.cpp sched_getaffinity fails with errno 22 (EINVAL) Sergey
Description

PROBLEM: after compiling and running test_dbg stack call trace lead us to the problem in lib/sysdep/os/linux/lcpu.cpp file while calling to sched_getaffinity function which fails with errno 22 (EINVAL) if you choose Launch debug and test errno after calling to this function.

DESCRIPTION: problem comes not from the game, but from incompatibility of the Linux kernel with NUMA support and glibc. The whole description with solution you may find by the link in the section below.

SOLUTION: http://sourceware.org/ml/libc-help/2009-10/msg00017.html

#548 fixed GUI should give feedback when training queue entry is blocked Philip Taylor
Description

When a training queue contains a item at the front that hasn't started yet, and the player doesn't have a high enough population limit to start training it, it won't start training. Currently the player is never notified about that - the queue looks normal, with no indication the player needs more houses (or more corpses). We need some kind of notification (I don't know what - maybe a message in the tooltip in the training queue? and/or a message sent to the player's screen? and/or make the population counter flash red? etc).

#549 fixed Allow units to be moved by right-clicking on the mini-map Evans
Description

Units can be ordered to move to a certain place by right clicking on the mini-map.

#550 fixed Error loading maps in Atlas pownerus
Description

When I start Atlas in Ubuntu 10.04 it doesn't load maps, when I try to load someone it shows "Failed to run rmgen (error code: 255)".

#551 invalid Assertion failed in state_tracker/st_mesa_to_tgsi.c Severin
Description

While starting a single player game, the game crashes with this message:

GAME STARTED, ALL INIT COMPLETE pyrogenesis: state_tracker/st_mesa_to_tgsi.c:181: dst_register: Assertion `t->outputMapping[index] < (sizeof(t->outputs)/sizeof(*(t->outputs)))' failed.

Running alpha 1 on Ubuntu 10.04 (kernel 2.6.32). Driver: radeon Graphic card: Radeon Mobility X1600 (r500)

#552 fixed compile with new boost (1.44+) Karol Trzcionka
Description

At now users with new boost library are not able to build 0ad because of error like:

../../../source/lib/file/vfs/vfs_path.h:68: error: ‘is_basic_path’ is not a template
../../../source/lib/file/vfs/vfs_path.h:69: error: explicit specialization of non-template ‘boost::filesystem::is_basic_path’

http://www.wildfiregames.com/forum/index.php?showtopic=13327

I think it might be a bug in boost but the default api will be changed soon: http://live.boost.org/doc/libs/1_44_0/libs/filesystem/v3/doc/index.htm "Version 3 is a major revision with many new and improved features. It breaks some Version 2 code.

Version 2 is the default version for Boost release 1.44 only. Version 3 will become the default starting with release 1.45."

The problem is the renaming of namespaces (unfortunatelly I haven't found any official info about it) and the compiler can't find "is_basic_path".

I think the attached patch will not break building with older boost (I've tested it only with 1.44).

#553 fixed build crash due to system config header Karol Trzcionka
Description

I've got an error while building 0ad:

../../../source/tools/atlas/AtlasUI/Misc/DLLInterface.cpp: In member function ‘virtual bool AtlasDLLApp::OnInit()’:
../../../source/tools/atlas/AtlasUI/Misc/DLLInterface.cpp:191:28: error: ‘wxHandleFatalExceptions’ was not declared in this scope

It is because the wxHandleFatalExceptions' declaration in wx-2.8/wx/utils.h depend on config in wx/setup.h where I have "#define wxUSE_ON_FATAL_EXCEPTION 0". I can see in utils.h:

#if wxUSE_ON_FATAL_EXCEPTION

// should wxApp::OnFatalException() be called?
WXDLLIMPEXP_BASE bool wxHandleFatalExceptions(bool doit = true);

#endif // wxUSE_ON_FATAL_EXCEPTION

I've disabled debugger's checking locally like in attached patch but I think it is not the best solution.

#554 fixed camera should be always inside the terrain Sergey Sergey
Description

When camera is being moved either by mouse or by keyboard it can be placed outside the terrain, so that the user will see only a black ambient. The right camera handling should never move its position outside the terrain.

#555 fixed Automatic texture compression Philip Taylor Philip Taylor
Description

See discussion.

  • Create a metadata format for expressing DDS compression options.
  • Create sensible metadata for each texture currently in the game.
  • Create a basic tool for visually testing the compression options.
  • Make the engine read the metadata when loading a non-DDS texture, and automatically compress and cache the file on first load.
  • Make the release packager perform the compression in advance.
  • Make the release packager do XMB and Collada conversions too, and make this conversion pipeline less ad-hoc, and pack everything into a zip.
#556 fixed Minimap camera outline clips incorrectly Jay Weisskopf Jay Weisskopf
Description

The camera outline clips correctly on the left, overlaps the borders on the bottom and right, and clips prematurely on the top. glScissor is being passed incorrect values. Attached is a patch which fixes the issue.

#557 fixed review: Minor improvements to non-fancy water fresnel effect Robin Lee
Description

This patch pertains to the water rendering when 'fancy' mode is not enabled, and is purely aesthetic.

Currently, in non-fancy water mode a single fresnel value approximation is being calculated based on camera orientation and applied to the whole map. This is incorrect behaviour, as at low angles near water should be largely transparent (low fresnel) while distant water should appear opaque (high fresnel). Attached is a replacement that calculates fresnel per-vertex and addresses other water lighting issues in low-detail mode.

Thank-you for your time,

Robin

#558 fixed Need a "return to menu" button on the map selection screen Darrell_L
Description

There is no user friendly way to return to the main menu from the map selection screen, other than to select a map to be loaded and then cancel from there. There needs to be a "Cancel" or "Return to Main Menu" or equivalent button.

#560 fixed Need an "exit game" button or graphic on the main menu Darrell_L
Description

The main menu suffers from the same problem as identified in ticket # 558. There needs to be an easily identifiable "Exit Game" button or similar parchment mouse-over graphic button, not just a small close button positioned out of the way. Running fullscreen on a 1080p display, this button is not even within the user's field of view.

#561 fixed Main menu tooltips pop up at inappropriate places Darrell_L
Description

The tooltips for the main menu mouse-over parchment graphics pop up at inappropriate places. For example, pointing at or around the "zero" to the left of the A.D. will popup either the single player, multi-player, or options tooltip.

The appropriate gui/pregame/sprites.xml and mainmenu.xml values need to be adjusted.

For the options graphic, make the following changes:

  • sprites.xml
    • pgOptionsOver and pgOptionsDisabled
      • real_texture_placement="58 87 220 251"
  • mainmenu.xml
    • pgOptionsBt
      • size="80.5664063% 53.6458333% 95.99609375% 74.609375%"
#562 wontfix Merge FCollada forks Philip Taylor
Description

Several people have forks of the formerly open source FCollada library:

What'd be nice is to set up a standalone project (on Google Code or GitHub or whatever), import the latest official FCollada release, probably replace the build system with OMK's CMake, apply the fixes from the various forks, and then provide some Windows binaries and encourage people to make Linux packages of it. Then we won't have to bundle it with our game, which should simplify our build process and packaging process.

#563 fixed [PATCH] Improve Animal AI Badmadblacksad
Description

We have passive, idle, and skittish.

Add violent, aggressive and defensive behaviors to animalAI.js

Possibly generalize the code so it can be applied to opponent AI (#707)

#564 fixed GetRealPath doesn't Jan Wassenberg Philip Taylor
Description

IVFS::GetRealPath claims to "retrieve the real (POSIX) pathname underlying a VFS file", but it seems to work incorrectly with mods. In particular, it always returns a path like .../data/mods/public/... (or always internal if that mod is loaded), even when the VFS file comes from a different mod.

CXeromyces::GetXMBPath tries to get the mod name from this, which doesn't work since it always returns public (or always internal).

Getting the mod name seems like useful functionality - by separating caches per mod, we can avoid one mod maliciously polluting the cache with a file with the same size/timestamp as another mod's but with different content (which would probably cause OOS errors after the first mod is disabled).

I don't know what GetRealPath should return if the file is in an archive. (It probably doesn't matter here, since archives ought to already contain cached files and we won't need to dynamically generate them.)

#565 fixed Victory conditions fcxSanya fcxSanya
Description

I implemented basic logic for checking victory conditions (only "conquest" for now). There is:

  • new code in player class for buildings count tracking;
  • EndGameManager javascript component, which check defeat/victory conditions by timer and changes player states;
  • new code in session.js, which check state of current player and ends the game if player have been defeated/won:
  • mockup gui page for game summary.
#566 fixed tests fail since #8086 jave
Description

the commit changed something in population counts, one of the tests didnt like that.

#567 fixed Rewrite Hotkey's Implementation Philip Taylor Sergey
Description

Hotkey system needs to be totally reviewed. The main thing to correct is to reduce confusing things like defining hotkeys in Hotkey.cpp and Hotkey.h. They won't work until a new string is added to default.cfg. Some other notes will be added during the process of enhancement.

#568 fixed Gate house has incorrect Pathfinding footprint Iulian
Description

The gatehouse acts as a single square rather than two squares and a rectangle.

Edit: This has been pushed back to a later release, but see the comments below for issues that have been fixed.

#570 fixed Batch conversion of textures for release packages Philip Taylor
Description

Need to convert and cache and archive them all. Only exceptions are fonts and cursors (and blends?) since those don't use the new system.

#572 fixed Dragging view on minimap over mountains increases zoom Jay Weisskopf
Description

If I load up a map like Arcadia and click and drag on the minimap, the view follows the cursor (as it should). After dragging over a mountain, the view becomes increasingly zoomed in, which is annoying.

#573 fixed Camera does not reach top map border frapell
Description

If you do a full zoom, you're not able to get to the top of the map, you have to zoom out a little. And if you zoom in again, the camera will automatically move back.

I used 'top' here, instead of 'north' because if you rotate the camera, it happens on every border on top.

#574 invalid Release Alpha 2 Kieran P
Description

It's been nearly a month since the release of Alpha 1. There has been some pretty big changes, new features, tons of bugfixes, and performance improvements. It would be good to release Alpha 2 to get testing on it, especially for Windows users (whom I'm guessing will be the largest user base). Compiling on Windows is not fun, or clean (it adds heaps of stuff to do it).

Is there anything stopping the release of Alpha 2?

#575 fixed Automatically add force_s3tc_enable to ~/.driconf Philip Taylor
Description

On many Linux systems, we need the user to force the enabling of S3TC in their drivers. (We no longer require the drivers to do compression, so we don't need libtxc_dxtn). Currently we tell them to run driconf and do it themselves.

Perhaps the game could automatically edit the ~/.driconf file and add an application-specific entry to set force_s3tc_enable. Given the documentation it sounds like the intention is that the file is a standard format that can be edited by multiple tools, so we probably shouldn't suffer from incompatible format changes. But maybe this would still be too fragile and/or evil?

#576 duplicate Building construction "animation" brian
Description

Buildings should slowly rise out of the foundation as they are being constructed based on the percentage of construction.

#577 fixed [PATCH] Crash when moving large masses of soldiers sireus
Description

The following happens ocasionally after 20 minutes or so of playing, with lots of soldiers (30-40) and few other units.

Now, if I select as many soldiers as I can (selection limit) and then try move them to another location, the game crashes. Remember, this does not happen every time (I'd say every tenth attempt, but that's just guessing) and is quite hard to reconstruct exactly. It just happens.

Judging from the crashlog, I'd say it's a bug in the sound manager, but I don't have any experience with the code, so don't listen to me :)

As far as I an tell, it doesn't matter on which map I'm playing, and I haven't yet found any other patterns.

#578 duplicate Crash when moving large masses of soldiers sireus
Description

The following happens ocasionally after 20 minutes or so of playing, with lots of soldiers (30-40) and few other units.

Now, if I select as many soldiers as I can (selection limit) and then try move them to another location, the game crashes. Remember, this does not happen every time (I'd say every tenth attempt, but that's just guessing) and is quite hard to reconstruct exactly. It just happens.

Judging from the crashlog, I'd say it's a bug in the sound manager, but I don't have any experience with the code, so don't listen to me :)

As far as I an tell, it doesn't matter on which map I'm playing, and I haven't yet found any other patterns.

#579 fixed Water reflections use wrong camera frustum for culling philip frapell
Description

When watching an object through a water reflection, but this object is outside the camera, unwanted behaviour is observed. I uploaded a video to show the bug.

http://www.vimeo.com/15241286

Related: #504

#580 invalid Windows Autobuild Broken Kieran P
Description

The latest auto build has broken pyrogenesis for Windows. I enjoy checking out the latests changes, but it looks like a recent commit, possibly FOW, has caused some issues with the pyrogenesis executable. The application looks like it's going to load, but flashes, and then does nothing. The icon remains in the taskbar, indicating it's running (so hasn't crashed), but I can see the desktop. The GUI of 0ad never loads, and never gets to the menu.

I don't see a ticket for this issue yet, so I'm making one incase you aren't aware.

#581 fixed Remove libbfd dependency Philip Taylor
Description

To avoid problems like this, we should just remove the code that uses libbfd, since it's not particularly useful - it's just used for basic stack traces, which rarely provide enough useful information for debugging any problems, and we can easily get Linux users to run in gdb if we want more details.

#582 fixed Add camera reset command Philip Taylor
Description

In the map editor, sometimes you can get the camera lost (badly rotated or scrolled off the side of the world) so it's hard to recover. There should be some way (hotkey? button? menu command?) to reset the camera to an on-world position and default orientation.

Also there should probably be a way to reset to the game's default camera orientation without changing position, so designers can see the same perspective players will usually see. Maybe this should be combined with the recovery thing - always reset to default orientation, and if the camera's still off the side of the map then move it back on.

#583 invalid FOW system great, with some issues Kieran P
Description

The new fog of war and undiscovered land (a.k.a black zone) functionality is awesome! And works really well! I've noticed a few issues though. Thought it would be easier to put them in one ticket than in several. Let me know if you want these split up though.

  • High: Units, which pursue the enemy, should only go as far as they last saw the unit. If when they get there, they don't see it, they return to where they were originally. If they see the unit, or other enemy unit, they pursue until they kill it, or lose it. Again, in both cases, they should return to where they started off, not remain where they lost/killed the enemy unit.
  • Medium: When a building gets too close to the black zone, and you have a building selected for construction, it just disappears. Ideally, if a building can't be placed, it should be a red version of the building, like is the convention in most games (and this includes within discovered areas which currently doesn't have any indication that it can't be placed).
  • Low: When a selected enemy unit disappears into the FOW or black zone, it should be unselected automatically. You can't follow a unit you can't see.
  • Low: Discovered stone mines glow when they should be dimmed out because I have no units within the area
  • Low: When "Control all units" option is ticked (dev overlay), the FOW isn't taken into account, i.e. it doesn't show the field of vision for all units, only my own, so I can't actually control all units.

Other than those, works great. Loving the new feature. Will make next release much more playable in multiplayer.

#584 fixed Update ppa for Ubuntu Maverick Meerkat 10.10 taureliuscrispus
Description

I was trying to install this via your ppa, but you have created no version for Maverick yet. As it comes out on 10 October, many users will upgrade and find the ppa is broken. It would be great if you could fix this on time.

#585 fixed FontBuilder2 Multiplatform support (Win32/*nix) historic_bruno historic_bruno
Description

I updated the FontBuilder tool to support Windows and *nix (in the same scripts). Now it checks system platform before loading Freetype and Cairo libraries. Only difference is library names vary but interface seems to be identical.

#586 fixed sound.mastergain not loaded from config historic_bruno historic_bruno
Description

You probably noticed this bug when trying to set the sound.mastergain config variable to 0.0, in order to mute sound. The sound would be inexplicably loud. Incorrect conditional in Config.cpp caused gain to remain at default value of 1.0

#587 worksforme Depth texture shadows break untextured rendering Philip Taylor
Description

Using x11-drivers/xf86-video-intel-2.12.0, media-libs/mesa-7.8.2, Intel GMA 4500MHD:

When shadows are enabled at startup, untextured things (flat colours in GUI, and unit selection circles) render incorrectly (black in GUI, invisible or mostly-terrain-coloured selection circles). This seems to happen regardless of whether shadows are enabled or disabled at runtime via the menu. This doesn't seem to happen if shadows are disabled by default, then enabled at runtime. This doesn't seem to happen when running with LIBGL_ALWAYS_INDIRECT - not sure if that indicates it's a driver bug.

#588 fixed Key Rotation when building construction is selected Kieran P Kieran P
Description

Using the mouse to rotate produces unexpected results and makes wall/gate building much harder. It would be nice to have the 'q' rotate 45 degrees anti-clockwise, and the 'w' key rotate 45 degrees clockwise, when a building is selected for construction.

I'm going to attempt to write a patch in my free time, but if it hasn't been done yet, please go ahead and do this yourself. From what I understand, it should be very easy.

#589 duplicate Construction on top of units moves units Kieran P
Description

Allows buildings to be placed on top of units. When a building is placed, and units are within it's building zone, move them outside the building before construction.

Optional: Assign the units you placed the building on top of to work on the building.

#590 fixed Game setup / civ selection improvements historic_bruno historic_bruno
Description
  • Adds player data to map files
  • Adds support for civ data including "subfactions"
  • Adds support for other map types (random, saved?, etc)
  • Player options displayed in setup
  • Player entities initialized by script (instead of engine)
  • Generalizes XML loading for scripts
  • Civ info displayed in dialog

See discussion here.

#591 fixed [PATCH] Disable sounds for units in FoW/SoD Philip Taylor
Description

If an enemy unit is in fog-of-war/shroud-of-darkness areas, you shouldn't be able to hear them.

This could probably be handled by making CCmpSoundManager::PlaySoundGroup detect if the source entity is visible to the current player (see e.g. CCmpVisualActor::Interpolate using ICmpRangeManager::GetLosVisibility) and then ignoring the sound if not.

#592 fixed Order queuing for formations leper Philip Taylor
Description

When a group of units is ordered to do anything other than walk, the formation controller disbands and each unit performs the order individually. If the formation controller had queued orders, they get lost.

Instead, units ought to stay associated with the formation controller while they're individually carrying out the action (attacking, gathering, etc). The formation controller should detect when its order has been completed (target died, resource exhausted, etc) and then regroup the units and move onto its next order.

#593 fixed Move in formation towards non-movement-order targets leper Philip Taylor
Description

When a group of units are ordered to attack/gather/repair a target, they should walk in formation until they're 'close' to the target (a fixed distance, plus their attack range if it's an attack order?), before splitting up to individually reach the target.

#594 fixed Fix construction/FoW interaction Philip Taylor Philip Taylor
Description

Shouldn't be allowed to build buildings in fog/shroud areas. Construction previews should correctly highlight red when obstructed.

#595 fixed Units should not pursue enemy units if they are not visible Andrew
Description

Units, which pursue the enemy, should only go as far as they last saw the unit. If when they get there, they don't see it, they return to where they were originally. If they see the unit, or other enemy unit, they pursue until they kill it, or lose it. Again, in both cases, they should return to where they started off, not remain where they lost/killed the enemy unit.

#596 fixed Enemy units should be deselected when they go into the FOW Philip Taylor Andrew
Description

When a selected enemy unit disappears into the FOW or black zone, it should be unselected automatically. You can't follow a unit you can't see.

#597 fixed Entities that should be dimmed out are not doing so Philip Taylor Andrew
Description

Discovered stone mines glow when they should be dimmed out because I have no units within the area

#598 fixed Improve fog-of-war rendering Philip Taylor
Description

The rendering of fog-of-war / shroud-of-darkness is currently based on vertex colours, and it looks quite ugly. It'd be nice to have much smoother transitions between the different regions. See e.g. AoE3's rendering (AoM is very similar).

#599 fixed [PATCH] Hide changes to buildings in fog-of-war Itms Philip Taylor
Description

When a building (or tree etc) is visible in a fog-of-war region, no new information should be revealed to the player - they shouldn't see when its hitpoints change, or when it's destroyed, etc. Perhaps they shouldn't be able to select the building at all (even just to see its name).

Probably this would have to be implemented by replacing buildings with 'mirage' entities when they fall into FoW, which are clones of the original buildings with all the dynamic/interactive bits removed. (These would have to be serialised in saved games, and therefore network-synchronised, but only rendered for the appropriate player.)

We also have to deal with the case of players ordering units to attack or gather from a mirage entity - when it comes back into vision, the units should automatically switch to attacking/gathering the real entity (or realise that it's been destroyed).

#600 fixed Formation slot assignments Philip Taylor
Description

In the default box formation used for moving groups of units, the units should be put into appropriate places depending on their type.

Suggested layout:

   ^   ^   ^   ^   ^
  [S] [S] [S] [S] [H]
  [C] [I] [I] [I] [C]
  [C] [I] [I] [I] [C]
  [C] [A] [A] [A] [C]

(for super-units, heroes, cavalry, infantry, archers). The layout obviously needs to adapt depending on what arbitrary selection of units are in the group.

Also, units should be assigned to a 'nearby' slot of the appropriate type (rather than simply using numerically ordered slots), to minimise the amount of reshuffling when units enter or leave the formation.

#601 fixed Female citizens should not move in formation leper Philip Taylor
Description

If a selection consists entirely of female citizens, move orders shouldn't cause them to move in strict formation (since they're not trained soldiers). They should probably stay in their initial layout, or move into some random loose group or something.

When they're in a group with soldiers, probably they should then be in formation (the soldiers are telling them where to stand), or maybe they should hang around in a loose group behind the soldiers.

#602 fixed Ability to add units to or remove from an already selected group of units Kieran P Kieran P
Description

The game needs a way to select units to add to a group of already selected units.

All of the following happen when holding the SHIFT key:

  • Clicking a single unselected unit should add them to the group of already selected units
  • Clicking a single selected unit should remove them from the group of already selected units
  • Dragging over a group units where any/all of them in the dragzone are unselected should select the unselected ones, while keeping the selected ones selected
  • Dragging over a group of units where all of them in the dragzone are selected should remove them all from the group.

The latter two options should show the dragging zone as normal, and use the unit selection rings to indicate what will happen. e.g. for the last one, unselecting a group of units should remove the unit selection ring as you dragzone over them.

#603 fixed tests fail since #8278 jave
Description

... on my hudson compiling 0ad snaps. it runs on f13.

#604 duplicate Single and Multiplayer Latency adaptation Philip Taylor
Description

Currently the networking code is hard-coded to a 200ms turn length, with commands scheduled for execution 2 turns ahead. This causes jerky motion if the RTT for any player is >200ms.

We ought to do some combination of dynamically adjusting the turn length (which allows fine-tuning and reduces simulation CPU load, but large values will result in very variable responsiveness depending on whether the player clicks near the start or end of a turn), and dynamically adjusting the number of turns ahead (which allows more consistent responsiveness, but is a coarse adjustment).

#605 fixed Fix NVTT Philip Taylor Philip Taylor
Description

Apply the patch for this once it's available.

#606 fixed Checked 0ad sourcecode with cppcheck Mr. X
Description

I checked the sourcecode of 0ad with cppcheck (a static code analysis tool). It has found a couple of possible error and style problems. I attachet the log to this ticket.

#607 fixed tests fail since #8300 jave
Description

Would someone want mails from my Hudson instance when this happens? Or would you like support to set up a public build server on your infrastructure? Currently I use Hudson the most, but I could help set up whatever.

#608 fixed compile error after nvtt changes fabio
Description

After latest nvtt changes 0ad no longer compile correctly:

test_test.cpp
test_CStr.cpp
/usr/bin/ld: warning: libnvcore.so, needed by ../../../binaries/system/libnvtt.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libnvmath.so, needed by ../../../binaries/system/libnvtt.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libnvimage.so, needed by ../../../binaries/system/libnvtt.so, not found (try using -rpath or -rpath-link)
../../../binaries/system/libnvtt.so: undefined reference to `nv::AlphaBlockDXT5::index(unsigned int) const'
../../../binaries/system/libnvtt.so: undefined reference to `nv::ColorBlock::isSingleColor() const'
../../../binaries/system/libnvtt.so: undefined reference to `nv::Image::pixels()'
../../../binaries/system/libnvtt.so: undefined reference to `nv::Image::Image()'
../../../binaries/system/libnvtt.so: undefined reference to `nv::FloatImage::createImage(unsigned int, unsigned int) const'
../../../binaries/system/libnvtt.so: undefined reference to `nv::BoxFilter::BoxFilter()'
../../../binaries/system/libnvtt.so: undefined reference to `nv::DDSHeader::setHeight(unsigned int)'
../../../binaries/system/libnvtt.so: undefined reference to `nv::String::setString(char const*)'
../../../binaries/system/libnvtt.so: undefined reference to `nv::FloatImage::FloatImage(nv::Image const*)'
../../../binaries/system/libnvtt.so: undefined reference to `nv::DDSHeader::setLinearSize(unsigned int)'
../../../binaries/system/libnvtt.so: undefined reference to `nv::DDSHeader::setTexture2D()'
../../../binaries/system/libnvtt.so: undefined reference to `nv::Image::~Image()'
../../../binaries/system/libnvtt.so: undefined reference to `nv::FloatImage::fastDownSample() const'
../../../binaries/system/libnvtt.so: undefined reference to `nv::Quantize::FloydSteinberg_BinaryAlpha(nv::Image*, int)'
../../../binaries/system/libnvtt.so: undefined reference to `nv::ColorBlock::init(nv::Image const*, unsigned int, unsigned int)'
../../../binaries/system/libnvtt.so: undefined reference to `nv::AlphaBlockDXT5::setIndex(unsigned int, unsigned int)'
../../../binaries/system/libnvtt.so: undefined reference to `nv::Image::height() const'
../../../binaries/system/libnvtt.so: undefined reference to `vtable for nv::KaiserFilter'
../../../binaries/system/libnvtt.so: undefined reference to `nv::DDSHeader::setPixelFormat(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int)'
../../../binaries/system/libnvtt.so: undefined reference to `vtable for nv::TriangleFilter'
../../../binaries/system/libnvtt.so: undefined reference to `nv::Image::allocate(unsigned int, unsigned int)'
../../../binaries/system/libnvtt.so: undefined reference to `nv::DDSHeader::setTextureCube()'
../../../binaries/system/libnvtt.so: undefined reference to `nv::FloatImage::downSample(nv::Filter const&, nv::FloatImage::WrapMode) const'
../../../binaries/system/libnvtt.so: undefined reference to `nv::DDSHeader::hasDX10Header() const'
../../../binaries/system/libnvtt.so: undefined reference to `nv::DDSHeader::swapBytes()'
../../../binaries/system/libnvtt.so: undefined reference to `nv::Image::Image(nv::Image const&)'
../../../binaries/system/libnvtt.so: undefined reference to `nv::normalizeNormalMap(nv::FloatImage*)'
../../../binaries/system/libnvtt.so: undefined reference to `nv::DDSHeader::setFourCC(unsigned char, unsigned char, unsigned char, unsigned char)'
../../../binaries/system/libnvtt.so: undefined reference to `nv::StringBuilder::StringBuilder()'
../../../binaries/system/libnvtt.so: undefined reference to `nv::mem::free(void const*)'
../../../binaries/system/libnvtt.so: undefined reference to `nv::ColorBlock::ColorBlock()'
../../../binaries/system/libnvtt.so: undefined reference to `nv::FloatImage::resize(nv::Filter const&, unsigned int, unsigned int, nv::FloatImage::WrapMode) const'
../../../binaries/system/libnvtt.so: undefined reference to `nvAbort(char const*, char const*, int, char const*)'
../../../binaries/system/libnvtt.so: undefined reference to `nv::ColorBlock::splatX()'
../../../binaries/system/libnvtt.so: undefined reference to `vtable for nv::BoxFilter'
../../../binaries/system/libnvtt.so: undefined reference to `nv::Quantize::FloydSteinberg(nv::Image*, unsigned int, unsigned int, unsigned int, unsigned int)'
../../../binaries/system/libnvtt.so: undefined reference to `nv::StringBuilder::StringBuilder(char const*)'
../../../binaries/system/libnvtt.so: undefined reference to `nv::DDSHeader::setWidth(unsigned int)'
../../../binaries/system/libnvtt.so: undefined reference to `nv::DDSHeader::setMipmapCount(unsigned int)'
../../../binaries/system/libnvtt.so: undefined reference to `nv::TriangleFilter::TriangleFilter()'
../../../binaries/system/libnvtt.so: undefined reference to `nv::AlphaBlockDXT5::evaluatePalette(unsigned char*) const'
../../../binaries/system/libnvtt.so: undefined reference to `nv::Quantize::BinaryAlpha(nv::Image*, int)'
../../../binaries/system/libnvtt.so: undefined reference to `nv::ColorBlock::swizzleDXT5n()'
../../../binaries/system/libnvtt.so: undefined reference to `nv::createNormalMap(nv::Image const*, nv::FloatImage::WrapMode, nv::Vector4 const&, nv::Vector4 const&)'
../../../binaries/system/libnvtt.so: undefined reference to `nv::Filter::~Filter()'
../../../binaries/system/libnvtt.so: undefined reference to `nv::KaiserFilter::KaiserFilter(float)'
../../../binaries/system/libnvtt.so: undefined reference to `nv::Image::width() const'
../../../binaries/system/libnvtt.so: undefined reference to `nv::Image::scanline(unsigned int) const'
../../../binaries/system/libnvtt.so: undefined reference to `nv::ColorBlock::splatY()'
../../../binaries/system/libnvtt.so: undefined reference to `nv::DDSHeader::DDSHeader()'
../../../binaries/system/libnvtt.so: undefined reference to `nv::BlockDXT1::evaluatePalette(nv::Color32*) const'
../../../binaries/system/libnvtt.so: undefined reference to `nv::KaiserFilter::setParameters(float, float)'
../../../binaries/system/libnvtt.so: undefined reference to `nv::DDSHeader::setPitch(unsigned int)'
../../../binaries/system/libnvtt.so: undefined reference to `nv::StringBuilder::reset()'
../../../binaries/system/libnvtt.so: undefined reference to `nv::FloatImage::createImageGammaCorrect(float) const'
../../../binaries/system/libnvtt.so: undefined reference to `nv::mem::malloc(unsigned int)'
../../../binaries/system/libnvtt.so: undefined reference to `nv::StringBuilder::~StringBuilder()'
../../../binaries/system/libnvtt.so: undefined reference to `nv::StringBuilder::copy(nv::StringBuilder const&)'
../../../binaries/system/libnvtt.so: undefined reference to `nv::FloatImage::toLinear(unsigned int, unsigned int, float)'
../../../binaries/system/libnvtt.so: undefined reference to `nv::DDSHeader::setNormalFlag(bool)'
collect2: ld returned 1 exit status
make[1]: *** [../../../binaries/system/pyrogenesis_dbg] Errore 1
make: *** [pyrogenesis] Errore 2
make: *** Attesa dei processi non terminati....
test_CLogger.cpp
#609 invalid Walls, Gates, and Wall Towers need to ignore other walls related obstruction zones Philip Taylor Kieran P
Description

If you try to build a wall, it's very hard to make one without gaps, because the obstruction zone prevents overlapping walls to make a smooth wall.

So, walls, gates and wall towers need to ignore the obstruction zones of other walls, gates and wall towers. They should still be unbuildable if placed on things like rocks or trees, but for e.g., when building a wall, overlapping another wall and clicking build should be possible.

#610 fixed Garrisoning units in buildings Brian Evans
Description

Patch to implement Garrisoning in buildings Features Implemented: Auto Unloading of units when the building's health reduces to a particular amount Filtering unit classes on garrisoning Fixed "GetPosition() called when IsInWorld() is false" error Unload All Auto Healing garrisoned units

Features Not Implemented: Special cases for Ships Garrison flag appearing on top of the building Playing Garrisoning sound

Other things to be done: Modify XML to set the class/max number of units which can be garrisoned in a building, heal rate etc

#611 fixed ChooseCacheSize picks crazy numbers Jan Wassenberg Philip Taylor
Description

Re r8319:

I'm on 64-bit Linux with 4GB RAM. In ChooseCacheSize, I get values like total == 3924, available == 303. (I've apparently got around 1.2GB of OS caches/buffers, which are not counted as available - the available figure is always pretty low). That results in ChooseCacheSize choosing its "below min-spec" path (which is silly) and returning 2304 MB (which is also silly, and if this were a 32-bit OS (with PAE) it could be trying to allocate more than the entire virtual address space which sounds problematic).

The calculation seems strange anyway, and lacking in rationale. We don't have 500MB of (public) game data (it's more like 250MB), the 'game' isn't 400MB (it depends on the amount of data and it often looks more like 200MB for me (including file cache)), we don't load all the data at once (the point of biomes was partly to cut the amount of data required per map by only using a well-defined subset). Also we have lots of other caches that reduce the need for everything to be kept in the file cache (I'm assuming it's only useful if a file gets loaded twice) and that contend with the file cache for RAM (it seems better to spend the RAM on higher-level caches to save on loading cost), so it's not clear that a large file cache has any benefit and/or doesn't cause any harm. Also it's contending with the OS disk cache, which will cache the compressed .zip file and therefore make better use of RAM than our own file caching.

Also it looks like OperatingSystemFootprint is going to give a highly uninformative assertion failure message as soon as somebody runs the game on Windows 8 (and even when we update the code, people will still try running old releases), which sounds like a bad idea.

So it seems that this change is adding a lot of complexity and unpredictable non-deterministic system-dependent performance-affecting behaviour, without it being clear that it's any better than the old fixed-size cache. So I'd be much happier if either it was made much simpler again, or if it was made clear to me why I'm missing the point and it's actually a good idea :-)

#612 fixed Mesa: User error: GL_INVALID_OPERATION in glDeleteShader fabio
Description

When closing the editor I always get a:

Mesa: User error: GL_INVALID_OPERATION in glDeleteShader

I compiled mesa and 0ad with debug symbols and put a break on output_if_debug. I get this backtrace:

Breakpoint 1, output_if_debug (prefixString=0x2919dcc "Mesa: User error", outputString=0xbfffcb6c "GL_INVALID_OPERATION in glDeleteShader", 
    newline=1 '\001') at main/imports.c:809
809	{
(gdb) bt
#0  output_if_debug (prefixString=0x2919dcc "Mesa: User error", outputString=0xbfffcb6c "GL_INVALID_OPERATION in glDeleteShader", 
    newline=1 '\001') at main/imports.c:809
#1  0x02759a16 in _mesa_error (ctx=0xb6fc4c78, error=1282, fmtString=0x2928cec "%s") at main/imports.c:998
#2  0x0276f4fe in _mesa_lookup_shader_err (ctx=0xb6fc4c78, name=1, caller=0x291c4b9 "glDeleteShader") at main/shaderobj.c:170
#3  0x0276e2df in delete_shader (ctx=0xb6fc4c78, shader=3221212012) at main/shaderapi.c:449
#4  0x084470d3 in Ogl_Program_dtor (p=0x8829540) at ../../../source/lib/res/graphics/ogl_shader.cpp:430
#5  0x08444582 in h_free_idx (idx=2, hd=0x8829528) at ../../../source/lib/res/h_mgr.cpp:613
#6  0x08444d6e in Shutdown () at ../../../source/lib/res/h_mgr.cpp:838
#7  0x084646f1 in ModuleShutdown (initState=0x861fe8c, shutdown=0x8444cd2 <Shutdown()>) at ../../../source/lib/module_init.cpp:71
#8  0x08444e4b in h_mgr_shutdown () at ../../../source/lib/res/h_mgr.cpp:860
#9  0x082d24c1 in Shutdown () at ../../../source/ps/GameSetup/GameSetup.cpp:681
#10 0x083b259b in AtlasMessage::fShutdown (msg=0xb6ff5d40)
    at ../../../source/tools/atlas/GameInterface/Handlers/GraphicsSetupHandlers.cpp:103
#11 0x083b2552 in AtlasMessage::fShutdown_wrapper (msg=0xb6ff5d40)
    at ../../../source/tools/atlas/GameInterface/Handlers/GraphicsSetupHandlers.cpp:87
#12 0x0839f799 in BeginAtlas (args=..., dll=...) at ../../../source/tools/atlas/GameInterface/GameLoop.cpp:211
#13 0x082d4a59 in ATLAS_Run (args=..., flags=1) at ../../../source/ps/GameSetup/Atlas.cpp:54
#14 0x082d4afb in ATLAS_RunIfOnCmdLine (args=..., force=false) at ../../../source/ps/GameSetup/Atlas.cpp:77
#15 0x081e4a29 in RunGameOrAtlas (argc=2, argv=0xbffff424) at ../../../source/main.cpp:431
#16 0x081e5107 in main (argc=2, argv=0xbffff424) at ../../../source/main.cpp:504
(gdb) c
Continuing.
Mesa: User error: GL_INVALID_OPERATION in glDeleteShader
TIMER| resource modules: 9.81219 s
TIMER TOTALS (6 clients)
-----------------------------------------------------
  xml_validation: 24.7842 Mc (3x)
  tc_linkProgram: 62.8229 Mc (7x)
  tc_compileShader: 215.246 Mc (11x)
  tc_transform: 15.5265 Mc (140x)
  tc_plain_transform: 6956.99 kc (126x)
  tc_png_decode: 7304.01 kc (2x)
-----------------------------------------------------
TIMER| shutdown misc: 552.861 us
JS engine warning: leaking GC root '' at 0xb7220110
JS engine warning: 1 GC root remains after destroying the JSRuntime at 0xb7485c48.
                   This root may point to freed memory. Objects reachable
                   through it have not been finalized.
[Thread 0xb7dd9b70 (LWP 27344) exited]
lost connection to FAM[Thread 0xa4127b70 (LWP 27347) exited]

Program exited normally.
#613 fixed Production queue is not limited Brian Kieran P
Description

If you keep clicking units to add to a production queue, you can do it forever. The GUI limits to 16, but behind the scenes, it allows an infinite amount of units to be queued. This causes some gameplay issues when playing multiplayer, where a player can queue hundreds and not have to go back to it.

#614 fixed Disable developer tools in multiplayer Philip Taylor Kieran P
Description

Obviously! I can't kill units or buildings, but I can control them and build things, depleting the other persons resources. Not to mention revealing the whole map right away.

#615 fixed women can't hunt but show meat icon Philip Taylor fabio
Description

If they are not able to hunt the meat icon shouldn't show up when hovering over animals. Eventually they should be able to hunt chickens and other domestic animals.

#616 fixed New special colour sprite historic_bruno historic_bruno
Description

There isn't currently a way for scripts to change the color of an image. However, the GUI engine does allow "special" sprites to be defined at run-time. Currently only stretched images are supported, so I've modified this to add support for solid color sprites. This is useful for among other things, player colors, which may change from one game to the next, thus eliminating the need to hardcode N number of sprites ahead of time.

Example usage:

// Get an image object from the GUI
var imageObject = getGUIObjectByName("colourThing");
imageObject.sprite = "colour: 255 0 0 200"; // RGBA

The colour is specified in integer RGBA format like other GUI objects (0-255).

This should be useful for any GUI object with a sprite property.

One caveat as Philip notes, is that the sprite will be stored based on its name so every time a new sprite is created like this, it will be cached separately if even one character is different (even if it would appear identical).

#617 fixed fishes not visible when "Water Reflections" is enabled fabio
Description

Resolution: Update mesa driver (see comment 4 - #comment:4)

#618 duplicate Hotkeys only work on "odd loaded" maps fabio
Description

Hotkeys like shift-D and F10 only work on "odd loaded" maps. E.g. start a map, they work, close map and start another one they don't work, close map and start another one they work...

#619 fixed Improve Gate and Wall System Kieran P
Description
  • Gates that have animation to open and close, along with sounds to accompany it
  • Gates that have obstruction zones over the towers only, not the gate part
  • Gates that can be locked, so nothing gets in or out
  • Allow Walls, Gates, and Towers to overlap, so that complex wall systems, that link together, are able to be built.
#620 fixed When one player quits multiplayer, all players are forced to leave Philip Taylor Kieran P
Description

When Michael, Brian and myself played, and Michael quit at the end, I was forced to leave, and then Brian after me. Obviously it'd be nice to be able to return to the game, to continue playing with the other person, and the person who left should have their units set to null player (idle/lifeless).

#621 fixed Even warrior cant kill chicken in 1 hit Сергей
Description

chicken is too healthy)) there are 40 meat in chicken. elephant have only 500. 500/40=12.5 =D

#622 fixed Upgrade SpiderMonkey to improve speed Philip Taylor Kieran P
Description

evans1: Will you be updating to the latest version of Spider Monkey? The one used in FF 4? That is supposed to be blazing fast. Dunno if it's still called SpiderMonkey, though..

Phillip: I want to upgrade some time, but the API changed incompatibly so it's a bit of a pain

Phillip:: (It's still called SpiderMonkey, and also sometimes called TraceMonkey and JaegerMonkey)

#623 fixed Shadows should be disabled by default on slower cards/drivers fabio
Description

Shadows on some cards/drivers are really slow and should be disabled by default there (eventually the shadows setting on these cards should also be "greyed out" in the GUI and could be only changed in the config file).

On my Radeon X1600:

  • with the mesa r300 gallium driver shadows are pretty fast;
  • with the mesa r300 classic driver enabling shadows make the game run at 1 frame every 20s, while it work at a playable fps without them.

I am attaching glxinfo obtained while using both drivers.

#624 fixed [nvidia linux driver bug] Segmentation fault when move cursor over game menu leolik
Description

0ad version: 0ad_0.0.0+r08319-1~wfgppa1~maverick1_amd64.deb from ppa:wfg/0ad repository OS: Ubuntu 10.10 amd64

Steps:

  1. Run game
  2. Move cursor over 'Single Player', 'Multiplayer' or 'Scenario Editor' - game closed with 'Segmentation fault'
#625 fixed Minimap is not flush with left side of screen in widescreen or non-standard aspect ratios. brian Jay Weisskopf
Description

The minimap is not flush with the left side of the screen on my widescreen (16:10) monitor. There is extra space between the left edge of my screen and the minimap. This can also be seen when the game is windowed by resizing the game to a non-standard aspect ratio.

#626 fixed Game should not override cursor sprite when over window frame. Jay Weisskopf
Description

The game normally uses a custom cursor sprite when the cursor is within the gameplay area. However, the custom sprite is still displayed when the cursor moves outside of the gameplay area and over the window's frame. The cursor should go back to whatever the desktop environment wants at this point. It is slightly disconcerting to still see a game pointer when one expects to see a resize sprite.

#627 fixed hotkeys problems fabio
Description

The big screenshot hotkey CTRL+ALT+F2 on linux switches to console. It should be changed (F3?).

The [ and ] keys to rotate buildings don't work on my MacBook Pro running Ubuntu while I can write them here with at least two different key combinations.

#628 worksforme would you like the warning messages from a build? david
Description

I have notice a lot of warnings when compiling on mandriva linux, I was wondering if you would like the warning output of the build. Of course next time I build, or are warnings a necessary evil? David

#631 fixed The Scenario editor asks for a location to save a map and ignores it... ben dee@earlsoft.co.uk
Description

When saving a scenario, it shows the standard file save dialog (Windows Vista), and then completly discards the location chosen.

It looks like it is using just the filename component and saving it into: C:\Users\Dee Earley\AppData\Roaming\0ad\cache\mods\public\maps\scenarios\

I have no problem with it being put there, but the dialog should either default to that location (It defaulted to my documents and I couldn't find where they should be put) or just allow a name part to be entered.

The former is a preferred choice as it means the user can save scenarios wherever they want as backups, to email, etc.

#632 worksforme Errors when switching to "Actor view" dee@earlsoft.co.uk
Description

Pyrogenesis Error


Function call failed: return value was -100021 (Invalid Handle (argument))

Location: ogl_tex.cpp:1024 (ogl_tex_bind)

Call stack:

0121D65F 012202A8 011FAB5B 011FB02A

errno = 0 (?)

OS error = 487 (Attempt to access invalid address.

)


OK


Repeated constantly until I killed the editor.

#633 fixed [PATCH] Building and Ship Repair mimo Michael D. Hafer
Description

Repair is currently taking the value from:

<Builder>

<Rate>1.0</Rate>

</Builder>

And interpreting that as a repair rate of 1 Health/Hitpoint per second. This is bad for a few reasons:

  1. It takes one value and uses it for two different things. Originally this value was (and still is) used as a base value for building x the BuildTime value of the structure being built.
  1. If we want to change a unit's Build rate, but not the Repair rate, then we can't do it.
  1. 1 hitpoint per second is painfully slow. To change the value would also be changing doubling, tripling, or quadrupling the build rate (inverse of point no. 2).

These values need to be separated. A separate "repair" tag and value need to be implemented. It could be done one of two ways:

  • In the unit templates
  • In the building templates

The benefits and pitfalls of each need to be discussed before choosing the implementation.

OR

We can just link Repair with Building at a 1:1 ratio so that repairing gives the structure the same amount of health per second as building it does. Also, any "cost" associated with repairing a building is the same cost as constructing it. Say, if the building is damaged by 25%, then it take 25% of the build cost to repair it.

#634 worksforme Shadows Cause Animals to Disappear rgcs4320
Description
  • With Water Reflections & Shadows enabled, panning the camera while a shadow 'looms' over wildlife in water, they briefly turn green, before disappearing completely.
  • OS: Windows 7 Professional (32Bit)
  • Build: Alpha II - Bellerophon
  • Graphics Card: NVIDIA GeForce 9400M
#635 worksforme [NEEDS INFO] when trying to host a game it crashes jimstinky
Description

when trying to host a game it tries to host a game when click on join a game it crashes

#636 worksforme Flashing pixel on maps/flashing text on main menu jimstinky
Description

on the maps there is a random pixel that flashes and the text flashes occasionally when on the main menu.

#638 fixed Summary screen fcxSanya fcxSanya
Description

According to the GUI_-_Achievements the summary screen should contain following statistics:

(citation start)

5.2.2.1. Military

  • 1. Units trained, 2. enemy units killed, and 3. player units killed.
  • 4. Buildings constructed, 5) enemy buildings destroyed, and 6) player buildings destroyed.
  • 7. Number of Civ Centres built (provinces claimed).
  • 8. Number of enemy Civ Centres destroyed.

5.2.2.2. Economy

  • Resources Gathered: 1. Food, 2. Wood, 3. Stone, 4. Ore.
  • 5. Tribute paid.
  • 6. Tribute received.
  • 7. Resources traded.
  • 8. Resources spent.

5.2.2.3. Research

  • 1. Number of Techs researched.
  • 2. % of available techs researched.
  • 3. Time advanced to Town.
  • 4. Time advanced to City.

5.2.2.4. Score

(citation end)

#639 duplicate SegmentationFault at startup mad
Description

I just installed 0.A.D. from the package on Launchpad (ppa:wfg/0ad). The game does not start and I get the following when I try to launch it from a terminal :

TIMER| InitVfs: 2.6092 ms

TIMER| InitScripting: 1.82893 ms

TIMER| CONFIG_Init: 8.20355 ms

Segmentation fault

I'm running on Ubuntu 10.10 and the installed packages are :

0ad v0.0.0+r08414-1~10.10~ricotz1

0ad-data v0.0.0+r08414-1~10.10~ricotz1

#640 fixed [PATCH] Pasting into the join game "address" field prepends onto the selection Kenny Long dee@earlsoft.co.uk
Description

When you are joining a network game and you select the current IP to paste in a new one, it prepends it to the current address and highlights the last octet of teh pasted address. When you select the current address and type, it works as expected.

#641 fixed Atlas crashes when you "Leave the game" while in the the simulation ben dee@earlsoft.co.uk
Description

I know it's a silly thing to do, but as it let me... :p I ran a simulation and let all my units get killed. When it said I was defeated, I clciked Yes to leave the game and it crashed with: Unhandled access violation reading 0x00000004 Location: Unknown:0 (?) Call stack: 0142DF27 0142CE1F 013AB9C1 013AB9D9 013D795E 013D7988 013BA036

OS Error: 487 attempt to access invalid address.

On showing the message, it immediatly crashes and falls back to the installed debugger.

(Alpha 2 on Windows Vista)

#642 fixed Atlas crashes then asserts when you reset a simulation dee@earlsoft.co.uk
Description

Start a simulation then press reset (doesn't matter what speed or if it was paused). Atlas comes up with:

Details: unhandled exception (std::out_of_range("invalid vector<T> subscript")) Location: unknown:0 (CxxThrowException) Call stack: 01383EEF 0136BE0A

errno = 0 (?) OS error = 487 (Attempt to access invalid address.

It then immediatly asserts, presumably on another thread as both messages are independant and not blocking the other.

#643 fixed [PATCH] Add current gatherers count next to player's resource count Freagarach Kieran P
Description

Add the amount of workers in a number next to the current amount of that resource, along with a tooltip.

e.g. If user has 5000 food, and 10 people gathering food (from any source), show

[food_icon] 5000 / 10

And when user hovers over the amounts, both should display a tooltip with:

Food resource: 5000
Number of gatherers: 10

Do the same for all resource types.

#644 wontfix Display idle units in the empty panels when no units are selected Kieran P
Description

Now that Brian made the panels always show, when no units are selected, the panels are empty.

After some discussion by several people in IRC, a possible use for this empty space would be to display idle units.

When there are only 16 or less idle units, display each individually. You should be able to click one and assign that single unit to a task.

When there are more than 16 idle units, group them by type. e.g. if there are 10 women, and 14 warriors, show two icons, women (with the number 10 on the icon), and the type of warrior (similar to how unit movement is already done).

When a group is clicked, all units are selected and the player can assign all those idle units to a single job.

When there is more idle units than the max selection limit, break them out into multiple idle unit icons. So you could have up to 16 * max limit, which is more than enough room for all different idle unit types.

#645 fixed Complete Garrisoning system functionality michael Kieran P
Description

With the recent addition of basic garrisoning, it'd be good to have this functionality finished off. Excluding artwork related items (e.g. propping) which will be handled later, here is some things left to do:

Enhancements

* [DONE] Infantry units which are garrisoned should be able to attack nearby enemies, within their normal range. Don't worry about being able to see the unit, just seeing the arrow from the building to the enemy and hitting it will be enough. The amount of arrows is equal to the amount of infantry units garrisoned. 10 infantry garrisoned == 10 arrows a second.

* [DONE] Need to be able to garrison units without using the CTRL key. A garrison button next to the kill button in the unit picture panel, which which clicked, makes the next left click garrison all selected units to it.

* [DONE] When a unit isn't able to be garrisoned into the building, then show a greyed out version of the cursor when holding down CTRL.

* [DONE] Garrisoning needs a new 'out' icon. It's currently pointing into the door, but the text says 'Unload-all'. The icon should have the arrow point away from the door.

* [MOVED TO #817] Need a way to tell if a building has garrisoned units, and how many, without having to click on it. Maybe a count next to the health bar, or a flag on the top of buildings?

Bug Fixes

* [DONE] Not all units are going to the rally flag for the building when they are all unloaded. Unloading one at a time works.

* [DONE] When more than one unit of a type is garrisoned, the garrison buttons may change position every time a unit of that type is unloaded. This occurs when units of the same type are spread throughout the garrison list. This list may need to be sorted to prevent this from happening. (Unit selections would also suffer from this problem if selections that contained multiple units of the same type allowed removing a single unit. However, the selection buttons remove the entire group so this problem is not seen there.)

* [DONE] The garrison icon when holding down CTRL (or using the garrison button in the units panel) doesn't grey out when that unit can be garrisoned, and you hover over a building which does support garrisoning, but the combination of the two (building and unit) is unsupported. Example: it shows coloured garrison icon when you try to put a horse into a tower, which is not allowed.

* [MOVED TO #818] When units are garrisoned in a ship, they do not increase the amount of arrows fired from it.

* [MOVED TO #818] When units are garrisoned in a ship, they can currently be ungarrisoned over deep water, which causes them to be stuck there.

#646 invalid Units should detect if enemies are nearby Kieran P
Description

Current Problem

Currently, if a unit is doing something (like chopping wood, or farming), that unit doesn't detect that enemies are approaching. This means that unless the player notices the attack, the enemy can wipe out a large part of the persons units without them knowing, because the units keep working on what they were told to do.

Also, if enemies are chasing a unit, they will not attack anything that gets near them, but ignore it, and keep following the unit they want to attack, so as long as the unit keeps moving, those units end up worthless. Ideally, if they are attacked by a unit, they go and attack that unit, instead of changing a unit they can't catch up with.

A classic example of this: Enemy is attack fortress then BAM, player lets 20 units out of it to attack. Enemy doesn't fight back, but continues to fight fortress, and then dies.

Recommended Fix

If the unit is a women, that women should seek protection in the nearest building she can garrison inside. If one cannot be found, she should run back toward the town center and garrison inside that.

Discuss: If that happens (an attacked women flees to town center), should the closest idle infantry be summoned to the town center to defend it?

If the unit is an infantry unit, they should act as if they were idle. Stop what they were doing, and go and attack the enemy. What they were doing should be stored though, so that if the unit survives the attack, and no more enemies are approaching, the unit should resume what they were doing (chopping wood, farming etc).

Discuss: If the worker is killed, should nearby infantry be called to that spot?

Implementation

Attack priorities? strongest -> weakest -> buildings. So heros before normal infantry, then women, then buildings. Sound possible?

#647 fixed Units constantly getting stuck in an animation Phillip Kieran P
Description

It's happening more often. When a resource disappears, or a building is destroy, or a unit is killed, when large groups of units are involved, many of them get stuck in the gathering/killing animation, and do not stop. This doesn't affect gameplay, but it sure looks weird, and should be fixed.

Maybe something that reevaluates each units orders per second and readjusts there animation accordingly?

#648 fixed Created files shouldn't have the execute bit set fabio
Description

Many files created by 0ad (e.g. cache, screenshots, ...) have the x (execute) bit set on linux. They should be created using the default mask.

#649 duplicate something wrong with the map oasis Art Department Сергей
Description

there are some colored spots on it

#650 fixed something wrong with the map oasis Art Department Сергей
Description

there are some colored spots on it

#651 fixed can't compile after recent changes fabio
Description

Caused by r8484:

==== Building wxJS ====
linux.cpp
../../../source/lib/sysdep/os/linux/linux.cpp:27: fatal error: lib/external_libraries/boost_filesystem.h: Nessun file o directory
compilation terminated.
make[1]: *** [obj/lowlevel_Debug/linux.o] Errore 1
make: *** [lowlevel] Errore 2
#652 duplicate How to make the translation stefano
Description

Good Morning. I'd like to know if is possible to translate to Italian this game, and how to help you. Is it a traditional po translation.

Thanks Best regards Stefano

#653 fixed Make timer_Time() threadsafe Philip Taylor
Description

timer_Time isn't thread-safe, due to t_last.

CLogger::PushRenderMessage uses it (to record the times when warnings/errors are logged), which may be called from a background thread.

If it's hard to fix, we could hack around it by having CLogger use a non-monotonic and/or low-precision timer instead, but it'd be nicer if the function worked.

(Incidentally, t_last+DBL_EPSILON seems wrong - if t_last >= 2.0 then I expect t_last+DBL_EPSILON == t_last. I don't think it'd necessarily be bad to remove that guarantee and expect callers to handle 0 (though still guarantee non-negative).)

#654 fixed Make debug_* functions threadsafe Philip Taylor
Description

The network server code needs to run in a background thread (to minimise latency when forwarding messages between clients), and it involves lots of code that can encounter errors. That code uses debug_assert, debug_warn, DEBUG_WARN_ERR, debug_printf, for error handling.

Avoiding those functions would be difficult and painful. It would be much better if they worked safely when run from a background thread.

Currently they use global variables, create dialog boxes, write files, etc, which is probably all unsafe with multiple threads.

It may be sufficient for them to do something more minimal than on the main thread (e.g. skip the dialog boxes and crashlogs, and just dump the message to stderr or whatever) - we don't use threads much so it doesn't need to be as user-/developer-friendly as for the bulk of the code. It mainly should just avoid potentially triggering crashes and deadlocks that mask the errors we're trying to report.

#655 fixed Game setup: Player assignment not updated when switching map historic_bruno fabio
Description
  • Select Single Player -> Acropolis Map -> Use Player 4
  • Select a map with < 4 players, e.g. Arcadia II: there is no "You" player assigned
  • Start game -> lots of error

In my opinion when moving to a different map "You" should always be assigned to "Player 1"

#656 fixed Circular maps problems fabio
Description
  • Map Hellenized Egipt: one Elefant on the left of the lake at North-West of the Player 1 disappears out of the map and never come back; update: after map update (r8533) this is no longer reproducible, but maybe it should still need to be fixed in the engine;
  • the minimap doesn't cover all real map and units at map borders aren't visible on the minimap;
  • camera can move outside of the circle at angles;
  • the circle around the minimap shouldn't be black otherwise it's not obvious you are on a circular map, especially if starting player is not near border. It should have a decoration similar to other boxes.
#658 fixed Troubleshoot Spidermonkey JIT historic_bruno
Description

I've been porting the random map generation code over to JavaScript, and per Philip's suggestion I tried adding the JSOPTION_JIT flag for Spidermonkey, to enable the just-in-time compiler. Getting this to work is critical if map generation will be written in JS, and given how the same code performs in Firefox 3.6 and FF 4 beta, it seems a very reasonable plan. Without JIT, the code is very slow, which is not surprising since the map generation is heavily dependent on loops to check distance between points and evaluate noise maps.

Now I'm not sure if we have an outdated/broken Spidermonkey implementation and need to upgrade per #622, which we may have to do anyway, or it may be that enabling JIT is a bit more complex than adding that flag. Whatever the case, here's a patch to add a random map system in JS to troubleshoot the cause of this.

The above description does not apply now, as I was compiling in Debug mode rather than Release mode, which disabled JIT. However we still need to troubleshoot some issues in JIT behavior especially if Mozilla will only be supporting SSE2 x86 hardware in FF4 (see their wiki), and so this ticket remains very relevant.

#659 wontfix OS X Makefile input not properly sanitized Mandrappa Kurelek
Description

If 0ad is expanded into a directory that has spaces in the name ./update-workspaces.sh (make) fails. Here a snipped of the results of ./update-workspaces.sh inside a directory called "coding for fun":

updating Makefile
creating tests/Makefile
can't read ../tests/Makefile.in: No such file or directory
creating ./config.status
creating config/autoconf.mk
creating js-config.h
js-config.h is unchanged
config/autoconf.mk is unchanged
invoking make to create js-config script
Makefile:630: warning: overriding commands for target `/Users/XYZ/coding'
../config/rules.mk:2082: warning: ignoring old commands for target `/Users/XYZ/coding'
Makefile:630: warning: overriding commands for target `for'
../config/rules.mk:2082: warning: ignoring old commands for target `for'
Makefile:637: warning: overriding commands for target `/Users/XYZ/coding'
Makefile:630: warning: ignoring old commands for target `/Users/XYZ/coding'
Makefile:637: warning: overriding commands for target `for'
Makefile:630: warning: ignoring old commands for target `for'
rm -f js-config.tmp

Of course a trivial workaround is to rename the directory.

#660 worksforme 64 bits compile fails on OS X Mandrappa Kurelek
Description

Apparently libz.dylib and libjpeg.dylib installed from ports are 32 bits. I don't know if there is a way to pull 64 versions.

Linking CXX shared library libnvimage.dylib
ld: warning: in /usr/local/lib/libz.dylib, file was built for i386 which is not the architecture being linked (x86_64)
ld: warning: in /usr/local/lib/libjpeg.dylib, file was built for i386 which is not the architecture being linked (x86_64)
Undefined symbols:
  "_jpeg_start_decompress", referenced from:
      nv::ImageIO::loadJPG(nv::Stream&)    in ImageIO.cpp.o
  "_jpeg_std_error", referenced from:
      nv::ImageIO::loadJPG(nv::Stream&)    in ImageIO.cpp.o
  "_jpeg_CreateDecompress", referenced from:
      nv::ImageIO::loadJPG(nv::Stream&)    in ImageIO.cpp.o
  "_jpeg_read_header", referenced from:
      nv::ImageIO::loadJPG(nv::Stream&)    in ImageIO.cpp.o
  "_jpeg_destroy_decompress", referenced from:
      nv::ImageIO::loadJPG(nv::Stream&)    in ImageIO.cpp.o
  "_jpeg_finish_decompress", referenced from:
      nv::ImageIO::loadJPG(nv::Stream&)    in ImageIO.cpp.o
  "_jpeg_resync_to_restart", referenced from:
      nv::ImageIO::loadJPG(nv::Stream&)    in ImageIO.cpp.o
  "_jpeg_read_scanlines", referenced from:
      nv::ImageIO::loadJPG(nv::Stream&)    in ImageIO.cpp.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
make[3]: *** [src/nvimage/libnvimage.dylib] Error 1
make[2]: *** [src/nvimage/CMakeFiles/nvimage.dir/all] Error 2
make[1]: *** [src/nvtt/CMakeFiles/nvtt.dir/rule] Error 2
make: *** [nvtt] Error 2
ERROR: NVTT build failed

#661 duplicate Shadow Map quality degrades the more objects there are on a map Michael D. Hafer
Description

The shadow quality in the game and in Atlas is inversely proportional to the number of objects on a map. Size of the map may have an adverse effect as well.

My specs:

OS : WinXP SP 3 (5.1.2600)

CPU : IA-32, AMD Athlon XP 2600+ (1x1x1), 1.92 GHz

Memory : 1536 MiB; 541 MiB free

Graphics Card : RADEON 9800 XT - Secondary

OpenGL Drivers : 2.0.6458 WinXP Release; atioglxx.dll (6.14.10.6458), nvoglnt.dll (6.14.10.9147)

Video Mode : 1920x1080:32@60

Sound Card : NVIDIA(R) nForce(TM) Audio

Sound Drivers : nvapu.sys (6.14.0462.0 built by: NVIDIA), OpenAL32.dll (6.14.0357.19), wrap_oal.dll (2.1.4.0)

#662 fixed Cope with corrupted cache Philip Taylor
Description

When the game crashes during loading (e.g. due to driver bugs), it sometimes leaves empty XMB files in the cache. When you start the game again, it complains

Xeromyces.cpp(197): Assertion failed: "size >= 4"

and fails.

Probably we should detect this kind of truncated output and automatically delete and re-convert the XML file, if possible.

#663 fixed Add GUI error dialog box on Linux / OS X Philip Taylor
Description

On Windows, debug_warn etc pops up a dialog box. On Linux / OS X we just print to stdout and expect the user to respond via stdin, which is no good if they're fullscreen or if they launched from a menu.

Possibly we could use an external tool like xmessage to do the fiddly business of displaying a dialog box with minimal dependencies.

#665 fixed Draw passability overlay on top of water Philip Taylor
Description

In Atlas, with fancywater enabled, the red tile passability indicators (handled by PathfinderOverlay) are invisible when underwater. They should be made visible somehow, so you can see when water is too shallow/deep to traverse, probably by drawing the overlay on top of the water instead of on the terrain.

#666 fixed Remove Devil Philip Taylor
Description

We use DevIL only for loading images for the Colour Tester tool. It would be nice to simplify our dependencies by getting rid of it. Maybe just delete the Colour Tester entirely, or merge it into the scenario editor (similar to the actor viewer) and use the game engine to load the textures instead.

#667 wontfix Fields constructed using a hammer Art Department Сергей
#669 fixed Minimap dragging reads mouse position after left button is released historic_bruno
Description

If you use the minimap to change your view in the game, there's a short time after releasing the left mouse button where the camera is still moving. Ideally the instant you release the button, the view should stop changing because some people have mouse cursors that move fast and even 1/4 sec is enough time to move very far from where you intended.

#670 fixed unrecognised format 'macho64' on OS X Micah Gideon Modell
Description

In attempting to build on OS X Snow Leopard (10.6.5), I run into the following fatal error:

...a whole bunch of stuff...
==== Building test_gen ====
amd64_asm.asm
nasm: fatal: unrecognised output format `macho64' - use -hf for a list
type `nasm -h' for help
make[1]: *** [obj/lowlevel_Release/amd64_asm.o] Error 1
make: *** [lowlevel] Error 2
make: *** Waiting for unfinished jobs....
make[1]: `../../../binaries/system/libwxJS.a' is up to date.

My brief searching indicates that there's hack in place to support linux compilation or something of the sort and I suspect it is interfering.

#671 fixed Disable compression of public.zip Philip Taylor
Description

Using zip compression when generating public.zip for release packages has a significant detrimental effect on download size (maybe around 25%), because it conflicts with the (much better) bz2/lzma package compression. People would probably have to play the game dozens of times for the gain in startup performance to outweigh the extra download time, so the tradeoff doesn't seem good at our current stage. So we should disable compression now, for the clear improvement in download size, and then later we can spend more time thinking about and measuring and optimising startup performance again.

#672 fixed Complete Resource Shuttling Functionality Philip, Michael Kieran P
Description

Bugs

* [WONT FIX NOW] [Philip] Redo pathfinding so less units get into path finding conflicts, and end up doing a dance.

* [DONE] [Philip] Redo unit ai so that when a building is destroyed, the unit recomputes the nearest dropsite

* [DONE] [Philip] When a resource is exhausted while unit is in transit to dropsite, currently the unit stops at the resource dropsite and stays there. They should record the position of the resource they were gathering, and return there, and look for another resource to work on in that area.

* [DONE] [Philip] In certain cases, when a resource is exhausted before they reach 20 in their inventory, and no other similar resources around exist, a unit will stay at the resource, standing still, with a part-filled inventory, when what they should do is return to the dropsite, dump their load, and then return to were they were, empty handed.

* [DONE] [Philip] When a unit finishes building a mill or a farmstead, they should look for nearby resources to mine. In this way, a bunch of units can be tasked to build a mill near trees, and once done, automatically go start getting the trees.

Tweaks

* [WONT FIX] [Michael] Units gathering from animals get their inventory full nearly instantly, while units gathering from farms take much long. Re-balance all gathering rates.

Artwork

* [DONE] [Michael] Need to complete the unit animations of carrying a specific resource. Currently only spearman work, and only for meat and grain.

* [DONE] [Michael] Women are the only animation left that don't have nice carrying (curent balance a basket on their head).

#673 fixed [PATCH] Mouse wheel in minimap historic_bruno historic_bruno
Description

Mousewheel behaviors that work in the game view should work in the minimap as well:

  1. Mousewheel up/down should change zoom
  2. Shift+mousewheel up/down should rotate the view (like Q + E keys)
#674 fixed Make the Exit Game and Delete Entity dialogs consist with session GUI brian
Description

The exit game and delete entity dialogs feature the pregame styling. This is hard coded. Since styles cannot be changed dynamically like sprites can, this is not an easy fix. Also, the exit game dialog accessed from the pregame main menu should retain the currently style.

The files involved with the message box are found (on Windows) at: C:\0ad\binaries\data\mods\public\gui\msgbox\msgbox.xml

This file contains both the XML objects and JS code. The code should probably be separated from this file.

#675 fixed Saving screenshot should provide message notifying user where it saved historic_bruno historic_bruno
Description

Currently when you take a screenshot in the game (F2), there is no message and the screenshot is silently saved to a certain directory, differing by the user's OS. A dialog is probably too much interruption for the user, as it's one more thing they'd have to click through, so a chat message / log entry seems a logical way to solve this.

#676 duplicate [Atlas] Double-click selects all similar units Kieran P
Description

Similar to simulation. Double clicking units should selects all similar units on screen.

#677 duplicate [Atlas] Band Box selection Kieran P
Description

Similar to simulation. Provide a way to select multiple units on the screen with band-boxing.

#678 fixed [PATCH] [Atlas] Improve unit selection options historic_bruno Kieran P
Description

Copy over unit selection methods from simulation to the editor.

  • Double-clicking selects all similar units
  • Band-boxing selection of units
  • SHIFT+Click adds to already selected group
  • CTRL+Click removes from already selected group
#680 worksforme [Atlas] Fix Run Simulation crash Kieran P
#681 fixed Think about reserved slots in pseudo-global Philip Taylor
Description

CGUI copies pseudo-global stuff from GPSEE modules, which also do

    /** Get the cached class prototypes sorted out in advance. Not guaranteed tracemonkey-future-proof. 
     *  Almost certainly requires eager standard class initialization on the true global.
     */
    for (key = 0; key < JSProto_LIMIT; key++)
    {
      jsval v;

      if (JS_GetReservedSlot(cx, realm->globalObject, key, &v) == JS_FALSE)
        return JS_FALSE;

      if (JS_SetReservedSlot(cx, moduleScope, key, v) == JS_FALSE)
        return JS_FALSE;
    }

which we don't. Apparently this might possibly cause tracer-interaction problems like

var a = new Array();
var b = [];
print(b instanceof Array === a instanceof Array)

giving false sometimes (similar with {} and Object).

Ought to test this and see if it's still a real problem, and if the reserved slot thing fixes it.

#682 fixed Jumping Fishing Spots Art Department Kieran P
Description

Make fishing spots more prominent. Have the spots where fish are jump out of the water, or make it bubble, or some type of animation to indicate they are there (see #617 for some background on why we can't just rely on transparent water).

#683 fixed OSX Full-Screen Cursor Jumping Kimball
Description
OS: Mac OSX 10.6.5
HW: MacBook Pro (15-inch, Mid 2009)
    2.8 GHz
    4 GB RAM
    NVIDIA GeForce 9400M & 9600M GT
    64-bit kernel enabled
GV: Alpha 2 Custom Build (r8686)

This issue may be limited to certain OSX software or certain Apple hardware. It only occurs in fullscreen mode, and has only been found to occur on 10.6.5, 15" MacBook Pro.

When units are selected and the player hovers over a resource with the cursor (tree, farm, stone etc.), the cursor will jump away from the resource (sometimes to the civic center, sometimes to another unit - I'm not sure what variables determine where it goes), preventing the player from tasking a unit on a resource. Building structures poses no problems. This issue is non-existent in window mode.

See video: http://www.youtube.com/watch?v=Iumc_uE9A5c

Note that when no units are selected, the cursor has no problems hovering over resources.

#684 fixed hwdetect: disable S3TC on R600 drivers Philip Taylor
Description

See thread. We should probably disable S3TC by default on such drivers, until the driver bug gets fixed. Also, don't display the error message and libtxc_dxtn suggestion in those cases.

#685 duplicate [SOUND] OSX Crashes with Audio stwf Kimball
Description
OS: Mac OSX 10.6.5
HW: MacBook Pro (15-inch, Mid 2009)
    2.8 GHz
    4 GB RAM
    NVIDIA GeForce 9400M & 9600M GT
    64-bit kernel enabled
GV: Alpha 2 Custom Build (r8686)

I know this is a known bug, but I thought I'd put it on the books. There doesn't seem to be a ticket for it yet. OSX users currently have to run in quickstart mode because audio is broken. Otherwise, tragedy strikes:

SND| alc_init: success, using Built-in Output
2010-11-24 19:57:55.698 pyrogenesis_dbg[37006:903] Error loading /Library/ScriptingAdditions/Adobe Unit Types.osax/Contents/MacOS/Adobe Unit Types:  dlopen(/Library/ScriptingAdditions/Adobe Unit Types.osax/Contents/MacOS/Adobe Unit Types, 262): no suitable image found.  Did find:
	/Library/ScriptingAdditions/Adobe Unit Types.osax/Contents/MacOS/Adobe Unit Types: no matching architecture in universal wrapper
pyrogenesis_dbg: OpenScripting.framework - scripting addition "/Library/ScriptingAdditions/Adobe Unit Types.osax" declares no loadable handlers.
glwprintf failed (buffer size exceeded?) - return value -1, errno 92
glwprintf failed (buffer size exceeded?) - return value -1, errno 92
...

OpenAL error: Invalid Operation; called from vsrc_deque_finished_bufs (line 1609)
snd_mgr.cpp(114): Assertion failed: "0"
Assertion failed: "0"
Location: snd_mgr.cpp:114 (al_ReportError)

Basically causes a crash within 3-5 seconds of getting to the menu screen.

Other known cases: http://www.wildfiregames.com/forum/index.php?s=&showtopic=12570&view=findpost&p=201047 http://www.wildfiregames.com/forum/index.php?s=&showtopic=12483&view=findpost&p=200429 http://www.wildfiregames.com/forum/index.php?s=&showtopic=13748&view=findpost&p=213006

#686 fixed [PATCH] Additional counters for summary screen Bajter fcxSanya
Description

It would be good to have more counters on summary screen, here is some ideas from Mythos_Ruler's forum post (http://www.wildfiregames.com/forum/index.php?showtopic=13683&view=findpost&p=213723):

  • Total Resources
  • Deforestation
  • Kill/Death Ratio
  • Temples
  • Special Buildings
  • Warships Destroyed/Warships Lost
  • Number of Super Units
  • Heroes Killed
  • Favorite Military Unit
  • Most Bloodthirsty Hero
  • Avg Lifespan

For implementation details see ticket #638 and corresponding changeset r8576, which contains already implemented counters for summary screen. Most related files are:

  • binaries/data/mods/public/simulation/components/StatisticsTracker.js - simulation component, which keep track of statistic counters;
  • binaries/data/mods/public/gui/summary/summary.xml - summary page layout;
  • binaries/data/mods/public/gui/summary/summary.js - scripts for summary.xml.
#687 fixed Build Limits Kieran P
Description

Place build limits:

  • Max 20 houses per civ center (100 units per civ center should prevent the game from slowing down too quickly).
  • Max 3 civ centers (supports 300 units per player should be enough)
  • Max 1 living hero for each civ
  • Max 1 fortress per civ center (increases need to expand to build more)

There should also be an option in the game setup menus, for "Enable Build Limits". It should be ticked by default, and allow to be unticked, which would disable them for that game (for testing purposes).

It should also only affect new things in the game. If a map maker creates a map with 10 heros, you should still be able to load the map and control those heros. You just can't build another one.

#688 fixed New Loading Screen Brian, Michael Kieran P
Description

Implement new loading screen to match mockups.

#689 duplicate Delay disappearance of loading screen in single player Kieran P
Description

With the new loading screen, people will want to read the new tips.

Fast computers load the map too quickly though, and don't give users a chance to read them fully.

In single player, stop the game from auto-starting, provide a "Start game" button on the loading screen that the user clicks when they are ready to start.

Provide a local.cfg setting which can disable this pausing.

config.loading.wait_for_user = true

Setting to false does the current behavior of starting the game right away when map is loaded.

#690 fixed Display actions for units as a group, not first selected unit Kieran P
Description

When a unit i na group can build, show the build icons in the GUI.

Currently, the GUI is determined by the first selected unit.

If the unit is a hero, you can't build a thing.

Ideally, it'd show the the actions of the most capable unit.

So with a hero and women selected, the buildings women can build would be selected.

If any infantry was in the group, you'd add the additional special buildings.

#691 fixed Separate playable maps from testing maps Philip Taylor Kieran P
Description

Implementation Notes:

  • Should be able to add new folders into maps/scenarios and move maps into them and have them still work properly (map should still display in the overall map list, i.e. folders do not affect listing of the maps). Purely for organizing files, not the GUI.
  • Add field to map files, <MatchType name="...." />
  • Generate match type dropdown from various different map types in the xml files, and have them filter map list by that MatchType value.
  • Clean up code so you don't need to change so many mapType if and case statements in JS and C++.

End Goal:

  • I create maps/scenarios/testing, throw some maps into it, edit the maps and set MatchType to "Testing".

End Result:

In the gui, you have a match type dropdown with options derived from <MatchType>, namely 'Playable' and 'Testing'. When I select testing, I see only maps where they have <MatchType name="Testing" />

#692 duplicate Hotkey i18n Philip Taylor
Description

We have hotkeys like WASD for camera movement, and '[' / ']' for building placement rotation. Those are poor choices on non-standard-English-QWERTY keyboard layouts.

Rather than picking some lowest-common-denominator key assignments, or forcing users to reassign keys manually, perhaps we should provide multiple sets of default assignments for different layouts, and (ideally) select the appropriate one automatically on startup, or (less ideally) give the user a list of available defaults to pick from.

#693 fixed Unit animation changes when unit is not in range of target resource Philip Taylor Kieran P
Description

The unit animation changes when unit is not in range of target resource.

When a unit can't get where they are going (i.e. they're stuck in the group), they still do the animatioin they would have don if they got to their resource.

To get the same thing, get a big bunch of units, select the one in the middle, and have him chop wood

The animation shouldn't start until the unit reaches his target

Cause: The unit says to move somewhere, then a while later it hears that it's stopped moving, so it switches the attack/etc state, which triggers the animation. Then after some timer it checks the target is (still) in range. And the problem is if the target isn't in range at the time when the unit stopped moving because it got stuck somewhere

#694 fixed Improve the performance of the game setup screen on first load Philip Taylor Kieran P
Description

Since it seems slow when I test it with an empty cache, and leads to pauses when images are being cached.

Precache them on game load? Or maybe trigger caching when user opens single/multi player setup screen?

#695 fixed [PATCH] Stop using boost::filesystem::operator< so much Rodolphe Ortalo Philip Taylor
Description

When launching the game and starting a map, Callgrind says boost::filesystem::operator< accounts for about 14% of instructions executed, which is a stupid waste. It's called about 90,000 times and does about 800,000 memory allocations (it's not just a straight string comparison).

The main callers are

CTextureManagerImpl::CreateTexture
CTextureManagerImpl::GetConverterSettings
CTextureManagerImpl::GetSettingsFile
CSkeletonAnimManager::GetAnimation
Landlord<>::add_
FileCache::Retrieve

which look like std::map<VfsPath, ...>. If these places don't care about ordered iteration, they should probably use a hash map instead. If they do care, they should probably store strings instead of VfsPaths so that lookups are cheaper.

#696 fixed Fix SpiderMonkey build with Python 3 Philip Taylor Philip Taylor
Description

Need to fix SpiderMonkey's imacro_asm.py (and send the patch to Mozilla).

#697 fixed [PATCH] Units promotion fcxSanya fcxSanya
Description

Units should be able to promote to next rank (basic -> advanced -> elite).

#699 fixed Missing textures in Cycladic Archipelago Michael D. Hafer Kieran P
Description

The following textures are missing from the Cycladic Archipelago map:

  • art/textures/skins/structural/hele_sail.dds
  • art/textures/skins/structural/hele_sail_runner.dds
  • art/textures/skins/structural/hele_sail_eye.dds
#700 fixed Multiplayer - Server should better handle player assignments historic_bruno
Description

Currently, in multiplayer games it is possible that more players may join a game than there are slots available, a player may be unassigned by the host, or the map can be changed to one with fewer slots resulting in same. If a game is started with unassigned players, they will appear to load but mostly fail because the game data has not be initialized for them.

Here's some suggestions to handle these and related issues:

  • When a game is started, have the server disconnect unassigned players. They should of course receive an appropriate message like "Unfortunately, available slots for this game have been filled. You have been disconnected..."
  • Alternately, don't allow the game to start until all connected players are assigned. This causes an issue if there are more connected players than slots, a player is unresponsive or disruptive, etc.
  • Allow unassigned players to become observers. They enter a special observer mode instead of a normal session, and are able to see game play but not interact. If implemented this should be an option enabled at the host's discretion.
  • Allow host to set maximum connections
  • Give host a way to "kick" players out of the game - this would ideally be integrated with some type of lobby system to support kicking and banning, but even with a simple direct connect game it would be handy in some circumstances. It would require a GUI list of connected players, possibly in a new dialog.
#701 fixed Maps errors Michael D. Hafer fabio
Description

Tower attacking demo:

ERROR: Failed to find file: "simulation/templates/other/rome_legionnaire_marian.xml"
ERROR: Failed to load entity template 'other/rome_legionnaire_marian'
ERROR: Failed to load entity template 'other/rome_legionnaire_marian'
ERROR: Failed to find file: "simulation/templates/other/rome_legionnaire_marian.xml"
ERROR: Failed to load entity template 'other/rome_legionnaire_marian'
ERROR: Failed to load entity template 'other/rome_legionnaire_marian'
ERROR: Failed to find file: "simulation/templates/other/rome_legionnaire_marian.xml"
ERROR: Failed to load entity template 'other/rome_legionnaire_marian'
ERROR: Failed to load entity template 'other/rome_legionnaire_marian'
ERROR: Failed to find file: "simulation/templates/other/rome_legionnaire_marian.xml"
ERROR: Failed to load entity template 'other/rome_legionnaire_marian'
ERROR: Failed to load entity template 'other/rome_legionnaire_marian'
ERROR: Failed to find file: "simulation/templates/other/rome_legionnaire_marian.xml"
ERROR: Failed to load entity template 'other/rome_legionnaire_marian'
ERROR: Failed to load entity template 'other/rome_legionnaire_marian'
ERROR: Failed to find file: "simulation/templates/other/rome_legionnaire_imperial.xml"
ERROR: Failed to load entity template 'other/rome_legionnaire_imperial'
ERROR: Failed to load entity template 'other/rome_legionnaire_imperial'
ERROR: Failed to find file: "simulation/templates/other/rome_legionnaire_imperial.xml"
ERROR: Failed to load entity template 'other/rome_legionnaire_imperial'
ERROR: Failed to load entity template 'other/rome_legionnaire_imperial'
ERROR: Failed to find file: "simulation/templates/other/rome_legionnaire_imperial.xml"
ERROR: Failed to load entity template 'other/rome_legionnaire_imperial'
ERROR: Failed to load entity template 'other/rome_legionnaire_imperial'
ERROR: Failed to find file: "simulation/templates/other/rome_legionnaire_imperial.xml"
ERROR: Failed to load entity template 'other/rome_legionnaire_imperial'
ERROR: Failed to load entity template 'other/rome_legionnaire_imperial'
ERROR: Failed to find file: "simulation/templates/other/rome_legionnaire_imperial.xml"
ERROR: Failed to load entity template 'other/rome_legionnaire_imperial'
ERROR: Failed to load entity template 'other/rome_legionnaire_imperial'
ERROR: Failed to find file: "simulation/templates/other/rome_centurio_imperial.xml"
ERROR: Failed to load entity template 'other/rome_centurio_imperial'
ERROR: Failed to load entity template 'other/rome_centurio_imperial'
ERROR: Failed to find file: "simulation/templates/other/rome_centurio_imperial.xml"
ERROR: Failed to load entity template 'other/rome_centurio_imperial'
ERROR: Failed to load entity template 'other/rome_centurio_imperial'
ERROR: Failed to find file: "simulation/templates/other/rome_centurio_imperial.xml"
ERROR: Failed to load entity template 'other/rome_centurio_imperial'
ERROR: Failed to load entity template 'other/rome_centurio_imperial'
ERROR: Failed to find file: "simulation/templates/other/rome_centurio_imperial.xml"
ERROR: Failed to load entity template 'other/rome_centurio_imperial'
ERROR: Failed to load entity template 'other/rome_centurio_imperial'
ERROR: Failed to find file: "simulation/templates/other/rome_centurio_imperial.xml"
ERROR: Failed to load entity template 'other/rome_centurio_imperial'
ERROR: Failed to load entity template 'other/rome_centurio_imperial'

Units demo:

ERROR: Failed to find file: "art/actors/units/hellenes/mechanical_siege_ram.xml"
ERROR: CObjectManager::FindObjectBase(): Cannot find object 'units/hellenes/mechanical_siege_ram.xml'
#702 fixed Saved Games Philip Taylor historic_bruno
Description

We should be able to save and load games ;)

At the minimum this requires:

  • Support for both single- and multiplayer saved games
    • Map, simulation state, any useful stat counters
    • Player assignments: human/AI, name, etc.
    • User supplied description and a timestamp
  • In multiplayer games, all clients either need to save their own local copy of the data, or the host sends it during setup
  • GUI design of "save game" dialog/page
  • GUI design of setup screen for loading games
    • We could reuse the current game setup and add another case, or design a new page with separate link from the main menu
    • Instead of map list, have a saved game list
    • Show the timestamp, description, elapsed time, etc. of selected game
    • In multiplayer mode, returning players should be reassigned to their original slots, possibly based on name - host can change this
    • Defeated players should either be clearly shown as defeated (preferable) or removed

Here's a few tickets which may need to be resolved for saved games:

  • #406: Serialization of standard JS object types
  • #407: Serialization of script class objects
#703 fixed Females shouldn't attack military units unless ordered to Kieran P
Description

Females were given an attack so that they could kill animals.

But now they attack military units automatically.

This should be fixed. Females should run away from attackers unless told to fight them.

#704 worksforme Atlas Launch Error Mark
Description

Was testing the Alpha 3 release candidate on windows for Philip. When launching the Scenario Editor from in the game for the first time I got:

Assertion failed: "0" Location: wsdl.cpp:241 (wnd_CreateWindow)

Call stack:

0055144F

005528B8

0052D4BB

00530681

00530812

errno = 0 (?) OS error = 487 (Attempt to access invalid address. )

After hitting continue:

Much to our regret we must report the program has encountered an error.

Please let us know at http://trac.wildfiregames.com/ and attach the crashlog.txt and crashlog.dmp files.

Details: unhandled exception (Access violation reading 0x2050B810)

Location: unknown:0 (?)

Call stack:

004AC927

004AC397

004BA250

0049A8B3

0049F91A

004DCDC7

004DB78E

00402B84

0052D24F

errno = 0 (?) OS error = 0 (no error code was set)

Launching Atlas from the start menu worked fine. Subsequent launches from either the start menu or from within the game worked fine as well.

#705 fixed [PATCH] Tooltips go off screen in lower resolutions Brian Kieran P
Description

When on lower resolutions, and you select a unit which can build, and hover over an icon in the lower right corner, it's tooltip goes off the screen. It should be adjusted to always be on screen.

#706 fixed Projectiles shouldn't persist when they land on water Kieran P
Description

Projectiles shouldn't persist when they land on water.

They should sink, then when off world, get removed from memory, similar to buildings.

#707 fixed Implement Opponent AI Philip Taylor Kieran P
Description

We need an opponent AI.

Notes:
Try to make it as flexible as possible. Perhaps in JS, so that other AI can be written. Globulation 2 had some good AI's (Numbi was easy, Nicowar was tough, and Warrush was a real test of speed). Each AI in this game should inherit from a base AI, then maybe allow tweaking of values? For example, warrior_to_worker_ratio or warrior_build_rate or min_attack_group_size. I'll leave the details up to you.

Basic Implementation: (women, housing and harvesting)

  • Builds women from town center
  • Builds houses when needed (should always try to keep ahead of the units being built, so it never hits the cap)
  • Assigns women to gather the resource needed the most. This is determined by what building is next in the chain of buildings. The idea is that if something is built (unit or building), women are assigned to replenish the resources spent building it.
  • Replenishes workers if they are killed. The idea being, if I kill 100% of it's workers, and it has resources to build another, it should see that, and act accordingly.

Medium Implementation: (warriors, defense, and groups)

  • Builds warriors in a ratio of 2 women, 1 warrior (for the easiest AI, see notes above about changing the warrior_to_worker_ratio)
  • Builds defensive structures at certain places around the town center (one per house seems adequate, maybe a house_to_tower ratio value that can be adjusted, to turn an agressor into a defender).
  • Units form groups determined by min_attack_group_size and max_attack_group_size (random number in between).
  • One group (see above point) moves to defend a building when it is being attacked. When that group loses 50% of it's force, another idle group is called in. In this way, if the player attacks one building, and then attacks another on the other side of town, the force won't be on one side or the other, but be split (the first group goes attacks the initial attack, and the second group goes and attack the other attack).

Complex Implementation: (attack, slaughter)

  • When idle groups of warriors (see above) are awaiting orders, and more than 2 groups exist, the third group is sent to attack. So to reiterate, two groups will always be at the town/city protecting it. How big those groups are are determined by min_attack_group_size and max_attack_group_size.
  • The attacking group attacks the enemy structure closest to their town center, and ignores other AI players structures, so it only attacks human player buildings.
  • When 2 groups are defending the town, and a third is attacking buildings, a fourth is sent to slaughter the enemies workers. Namely around remove mills and farmsteads.
#708 fixed There should be a .dmg - file for Mac Users bugmenot
Description

There should be a .dmg - file for Mac Users. Not everyone is able to compile, so there should be an executable package for Mac.

#709 fixed [CRASHLOG] Compatibility Problem - Crashes whilst attempting to load maps. Jan Wassenberg Luke Martinez
Description

Hello,

I am running 0AD alpha 3 on windows XP (really shouldnt be tho) and I can not get any maps to run.

When starting the game i encounter 3 errors, then the window loads and i get 4 more errors, then i can view the actual UI. and select a map, press start game and i get 40 more errors before the program gives up. (more info in errors.txt)

Please see attached the debugging / error files.

Thanks,
Luke Martinez

asmartgoat@…

#710 fixed Errors on map "Oasis" Iulian
Description

When starting the game with map "Oasis" I get the following in chat:

"XCeromyces: ........." something(3 lines) and then 2 errors with "failed to load entity template "other/obelisk" .

Map still works otherwise

#711 fixed Enforce minimum and maximum distance between civ centers Kieran P
Description

A civ center should be X tiles away from an existing civ center, but no more than X tiles.

I haven't filled in the X's yet, as tis functionality relies on Territories (, which will define where they can be built.

#712 fixed Remove S3TC warning Philip Taylor
Description

When S3TC textures aren't supported, we decompress them automatically but show a performance warning message telling people to read the CompressedTextures page which suggests installing libtxc_dxtn (which is unmaintained and not any better than decompressing textures ourselves). This is quite common on Linux. We should simplify things for users by simply accepting the lack of S3TC silently because there's nothing useful anyone can do about it.

#713 fixed Update premake for Xcode use philip Kimball
Description

This is eventually a necessity for OSX. Xcode use will significantly streamline the app bundling process and enable Mac developers to collaborate as seamlessly as our PC developers work together now. Unfortunately premake is currently in the way.

#714 fixed added hotkey list from wiki to in game manual Dustin Dustin
Description

added full hotkey list to game manual so that players wont have to search all over to figure out all of the controls that are available.

#715 fixed [PATCH] Bundled SpiderMonkey fails to build on 32bit userland on 64bit kernel (Linux) Matěj Laitl
Description

Due to some silly autodetection, Spidermonkey wants to compile itself as 64bit (64bit macros are set), but the compiler still builds it as 32bit, resulting in a build failue.

On such build log can be found at http://bugs.gentoo.org/attachment.cgi?id=244021&action=view (more info at http://bugs.gentoo.org/show_bug.cgi?id=278541#c37)

Attached patch adds support for (fairly standardised) CTARGET, CHOST and CBUILD environment variables to libraries/spidermonkey-tip/build.sh. This change alone fixes build in Gentoo, whose package manager sets these variables during build.

(the echo line in the patch is just debug, you may want to strip these (or not))

#716 duplicate Crash on map "Miletus" (probably error in AI) passerby
Description

How to reproduce:

  1. Enter Start single game menu.
  2. Select "Miletus" map.
  3. Change sides ("You" for Romans and "Computer AI" for Hellines).
  4. Set AI to "Scary bot" (otherwise the bug will not show up).

I've run today built 0ad from svn on Linux.

snd_mgr.cpp(492): Assertion failed: "0"
Assertion failed: "0"
Location: snd_mgr.cpp:492 (srcs_remove)

Call stack:

(0x8294212) ./pyrogenesis() [0x8294212]
(0x825b4c8) ./pyrogenesis() [0x825b4c8]
(0x825c383) ./pyrogenesis() [0x825c383]
(0x825c545) ./pyrogenesis() [0x825c545]
(0x82856fc) ./pyrogenesis() [0x82856fc]
(0x8286084) ./pyrogenesis() [0x8286084]
(0x827b3de) ./pyrogenesis() [0x827b3de]
(0x8285817) ./pyrogenesis() [0x8285817]
(0x82868ea) ./pyrogenesis() [0x82868ea]
(0x8286d24) ./pyrogenesis() [0x8286d24]
(0x8057119) ./pyrogenesis() [0x8057119]
(0x805800d) ./pyrogenesis() [0x805800d]
(0xb6e76bd6) /lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6) [0xb6e76bd6]
(0x8056411) ./pyrogenesis() [0x8056411]

errno = 0 (?)
OS error = ?


Aborted
#717 fixed Test site displays missing images for users without avatars Brian Stempin Brian Stempin
Description

Instead of displaying nothing, IPB3 attempts to display an image for users that don't have avatars. For whatever reason, this image is 404'd. It should be a simple fix...I probably caused the issue by copying over the images from the current installation.

#718 invalid The site needs a new ban-hammer Brian Stempin Brian Stempin
Description

IPB doesn't have an easy "ban" button. This would be a nice-to-have for those who are actively fighting the spammers.

#719 invalid Fixing new forum theme Brian Stempin Brian Stempin
Description

The following CSS suggestion was mentioned to me:

#branding {
  background-image: none; 
  background-color: white;
}
#user_navigation {
  background-color: white;
  border: none;
}
#user_navigation.not_logged_in .links,
#user_navigation.not_logged_in .links a,
#user_navigation ul a {
  color: black;
}

In addition to this, a transparent WFG logo would be nice for the header.

#720 wontfix Fix lighting of units in FoW, with shadows enabled Philip Taylor
Description

Get some objects to render in fog-of-war (i.e. explored but not still visible). With shadows disabled, they look much darker than objects in visible regions. With shadows enabled, they look almost the same as in visible regions.

The dark colour is set via CModel::SetShadingColor. It looks like PlainRenderModifier applies the shading colour to ambient+diffuse via ModelRenderer::BuildColor4ub, whereas PlainLitRenderModifier applies it only to diffuse and then applies shadow and then adds ambient. It'd probably be okay if the shading colour was folded into the ambient value.

Need to make sure this works for all the other variations of the renderer (player colour, transparency, shader vs FF).

#721 fixed [PATCH] Optimise water renderer philip Philip Taylor
Description

TerrainRenderer::RenderWater seems very inefficient: when zoomed out it can take ~8msec/frame even with all the rendering disabled, and it does the rendering with glVertex3f calls.

Since water very rarely changes, I expect it'd be best to make CPatchRData store all the vertex data for water over its patch, and only recompute it when the terrain or water parameters change. Store the data in a vertex buffer. Use indexed quads.

As a bonus: If no visible patches have any water (i.e. they're all entirely above the water plane), don't render the reflection/refraction textures.

#722 fixed [PATCH] Optimise terrain renderer Philip Taylor
Description

Some quick experimentation suggests the terrain rendering code can be made significantly faster by batching more.

Currently, TerrainRenderer::RenderTerrain calls CPatchRData::RenderBase etc for every patch independently, and CPatchRData renders each of its own splats. There are often lots of patches on screen, and they often share a lot of textures. It's better if TerrainRenderer collects all the splats, sorts by texture and by vertex buffer, and then renders them all at once, to reduce the number of state changes.

This is fairly trivial for base textures. For blend textures we need to preserve the ordering within a patch; the same grouping algorithm as in CPatchRData::BuildBlends should probably work.

#723 fixed [PATCH] Multiline centered text kingadami fcxSanya
Description

Currently text centered by the first line position, so if there is multiple lines, each line will have the same indention as the first one instead of be centered individually.

#724 fixed [PATCH] Units should not move out of enemy construction zones Andrew Kieran P
Description

When you place a building, enemy units will politely move out of the way so you can build it.

Only ally units and animals should move away.

#725 invalid Anon members cannot contribute to wiki Brian Stempin Brian Stempin
Description

DGMurdockIII indicated via IRC that our current wiki is a bit of a turn-off to community members due to the mandatory registration. We should discuss allowing anon edits and how to moderate them.

#726 fixed Upgrade to 3.1.4 Brian Stempin Brian Stempin
Description

The version 3.1.4 is out, and we do not have a proper upgrade package. We need to obtain one and upgrade.

#727 fixed Fast reply clears content if defocuses and refocused Brian Stempin Kieran P
Description

If you click the fast reply box, type something, defocus the field, then refocus, the content gets cleared.

This means, anything you type is gone if you do something else, e.g. go to get a link to insert into the post

This needs to be fixed ASAP. Was it fixed in 3.1.3 (see #726)? If not, find out why and how to fix.

A workaround for now it to use full reply.

#728 worksforme Visiting main site logs user out of forum Philip Taylor
Description
#729 fixed No link to 0 A.D. homepage on forum Brian Stempin Erik Johansson
Description

Currently there's no link to the 0 A.D. homepage, only the WFG.com page. Personally I actually think the WFG.com link could be removed and replaced with a link to the 0 A.D. site as the WFG.com isn't all that useful, especially since TLA is discontinued. Either way a link to the 0 A.D. site would be nice :) Overall the upgrade has worked fine though, so thanks for your work so far.

#730 fixed IPB Theming - Pinned topics should stand out more Brian Stempin Erik Johansson
Description

Would be really nice to have some kind of separation between pinned and ordinary topics. Not too urgent though as they have the "Important" label, just would be nice to be able to see it more at a glance.

#731 fixed WYSIWYG/insert buttons when creating/editing posts doesn't work Brian Stempin Erik Johansson
Description

I'm not sure if it's due to something I have/haven't done, but now the WYSIWYG buttons doesn't seem to work. Nothing happens when I click them (apart from the text field going out of focus due to me clicking outside of it). I've tested in both FF and Chrome, so it doesn't seem to be browser related.

It does work in the "simple editor", i.e. when you haven't pressed the "Use full editor" button

#732 fixed Gradually reveal buildings in FOW Philip Taylor Kieran P
Description

As you peel back the FOW, gradually reveal the buildings.

See http://www.wildfiregames.com/forum/index.php?showtopic=14325&view=findpost&p=216020 for more discussion

Note: This'll be done after http://www.wildfiregames.com/forum/index.php?showtopic=14419&view=findpost&p=216043 has been delt with.

#733 fixed Double line-spacing in [pre] Brian Stempin Philip Taylor
Description

In e.g. this post which uses [pre], the output has <br>s inside the <pre> so there's a blank line between every desired line.

#734 fixed Upgrade SpiderMonkey again philip Philip Taylor
Description

Should upgrade it some time, to get bug fixes and performance improvements etc.

Some notes that I don't want to forget:

#735 fixed Editing current content returns mangled HTML Brian Stempin Brian Stempin
Description

When editing a post or signature, IPB3 seems to return the HTML codes (&amp;) instead of the actual symbols (&). This is probably a charset issue.

#736 fixed JavaScript Error when choosing "Kimball's Map" in the match setup screen Erik Johansson
Description

WARNING: JavaScript warning: gui/gamesetup/gamesetup.js line 722 reference to undefined property g_CivData[civ]

ERROR: JavaScript error: gui/gamesetup/gamesetup.js line 722 TypeError: g_CivData[civ] is undefined onGameAttributesChange()@gui/gamesetup/gamesetup.js:722 selectMap("kimball")@gui/gamesetup/gamesetup.js:585 eventhandler82 (selectionchange)([object Object])@mapSelection selectionchange:0

ERROR: JavaScript error: Errors executing script action "selectionchange"

After the above error the information about the map/s doesn't update when I click on another map, but after closing the Match Setup screen and going back to it it works again. As Philip said it will only occur when a map is using a non-existent civ I've only set it to "If Time Permits", and the map in question isn't in the public version, so it shouldn't be a problem for most users.

#737 fixed Wrong NVIDIA driver checked in 32-bit Vista Philip Taylor
Description

In 32-bit Vista with fairly recent NVIDIA drivers, I have c:\windows\system32\nvoglv32.dll. Since this isn't WoW64, wgfx.cpp only looks for nvoglnt.dll, which doesn't exist, so it doesn't fill in gfx_drv_ver properly.

#739 fixed 2 tests fail fabio
Description

Since two days I am getting this tests failure:

Running 253 tests........................................................................................
In TestSerializer::test_script_basic:
../../../source/simulation2/tests/../../../source/simulation2/tests/test_Serializer.h:276: Error: Expected (std::string(stream.str()) == std::string("script: ({x:123, y:[1, 1.5, \"2\", \"test\", (void 0), null, true, false]})\n")), found ("script: {\n  \"x\": 123,\n  \"y\": [\n    1,\n    1.5,\n    \"2\",\n    \"test\",\n    null,\n    null,\n    true,\n    false\n  ]\n}\n" != "script: ({x:123, y:[1, 1.5, \"2\", \"test\", (void 0), null, true, false]})\n")
....................................ERROR: JavaScript error: cyclic object value
ERROR: StringifyJSON failed

In TestComponentManager::test_script_serialization:
../../../source/simulation2/tests/../../../source/simulation2/tests/test_ComponentManager.h:677: Error: Expected (std::string(debugStream.str()) == std::string("rng: \"78606\"\n" "entities:\n" "- id: 1\n" "  TestScript1_values:\n" "    object: ({x:1234, str:\"this is a string\", things:{a:1, b:\"2\", c:[3, \"4\", [5, []]]}})\n" "\n" "- id: 2\n" "  TestScript1_entity:\n" "    object: ({})\n" "\n" "- id: 3\n" "  TestScript1_nontree:\n" "    object: ({x:#2=[#1=[2], #1#, #2#, {y:#1#}]})\n" "\n" "- id: 4\n" "  TestScript1_custom:\n" "    object: ({c:1})\n" "\n")), found ("rng: \"78606\"\nentities:\n- id: 1\n  TestScript1_values:\n    object: {\n  \"x\": 1234,\n  \"str\": \"this is a string\",\n  \"things\": {\n    \"a\": 1,\n    \"b\": \"2\",\n    \"c\": [\n      3,\n      \"4\",\n      [\n        5,\n        []\n      ]\n    ]\n  }\n}\n\n- id: 2\n  TestScript1_entity:\n    object: {}\n\n- id: 3\n  TestScript1_nontree:\n    object: \n\n- id: 4\n  TestScript1_custom:\n    object: {\n  \"c\": 1\n}\n\n" != "rng: \"78606\"\nentities:\n- id: 1\n  TestScript1_values:\n    object: ({x:1234, str:\"this is a string\", things:{a:1, b:\"2\", c:[3, \"4\", [5, []]]}})\n\n- id: 2\n  TestScript1_entity:\n    object: ({})\n\n- id: 3\n  TestScript1_nontree:\n    object: ({x:#2=[#1=[2], #1#, #2#, {y:#1#}]})\n\n- id: 4\n  TestScript1_custom:\n    object: ({c:1})\n\n")
...............................................................................................................................
Failed 2 of 253 tests
Success rate: 99%
#740 fixed Foundations don't block construction place marcel
Description

It is possible to lay down another foundation on a new foundation on the same place. The first foundation where the construction starts blocks the other foundation from being build.

A new foundation (no construction started) should block the place from laying down other foundation on top of it.

Tested on revision 8967.

#741 fixed Reload all GL state when toggling fullscreen on OS X Philip Taylor
Description

On OS X, switching from fullscreen to windowed mode apparently triggers errors like ogl_program_get_uniform_location(shader, "TextureMatrix1") returning negative values, and the textures disappear and everything goes black and grey and sometimes it crashes.

I guess the GL context state gets lost when toggling fullscreen, in which case we need to destroy and reload all our GL objects (textures, shaders, vertex buffers, framebuffers, etc) when switching.

#744 fixed [PATCH] Button "Find idle workers" veprbl
Description
  • Better button placement
  • Try to look for the nearest free worker
  • Display idle female citizens count on the button
  • Interface which displays all idle workers
#745 fixed [PATCH] Setting Rally Points on Resources/Buildings Jonathan Waller Mark
Description

You should be able to set rally points on resources so that citizens will automatically gather that type of resource when they are created.

Things to think about:

[15:16] <@Philip`> (How does it work if e.g. the resource gets exhausted while it's the gather point?)

[15:16] <@Philip`> (or if e.g. it's an animal that has run away?)

[15:20] <mark__> I think in AoK that if the resource was exhausted that they just searched for a nearby matching resource. As if they had just used it up.

[15:20] <mark> Otherwise they stood there like a normal rally point.

#746 invalid farmed field counts as a lost building marcel
Description

A farmed field counts as a lost building in the endgame statistics.

#747 fixed better FPS indicator fabio
Description

1) FPS should also be enabled with a checkbox in the settings menu, other than pressing SHIFT-F, so one can easily find it to check the effect of playing with graphic options;

2) FPS indicator should be moved, currently is overlapped to the food indicator, maybe also using a better font.

#748 fixed [PATCH] Hardware cursors on Linux Zsolt Dollenstein Philip Taylor
Description

It looks like it should be possible to do full 32-bit RGBA cursors on Linux with XcursorImageCreate, kind of like what Spring does. If that works, we should do it instead of using the OpenGL-drawn cursor.

See sys_cursor_* in lib/sysdep/os/unix/unix.cpp. Probably need to move that code into os/osx/osx.cpp, then add Xcursor-based versions of the functions into os/linux/linux.cpp. (See also os/win/wcursor.cpp for comparison). Also will need to change lib/res/graphics/cursor.cpp to define ALLOW_SYS_CURSOR 1 on OS_LINUX.

#749 wontfix redundant AI settings chooser fabio
Description

There are two way to select an AI type: with the 'Player Name' combo box and through the 'c' button -> 'AI Player' combo box. The latter should probably be removed.

#750 fixed [PATCH] Enhancement to Matrix3D Rodolphe Ortalo
Description

It is possible to save easily some full matrix multiplications in Matrix3D::Rotate{X,Y,Z}() and Matrix3D::Scale(). Some minor multiplications saves can be done in GetInverse() too. The attached patch provides such improvements.

It remains to be seen if more inlining should be done for matrix operations.

#751 wontfix Bad login link on 0AD page Brian Stempin Brian Stempin
Description

The login link on the 0AD page tries to log the user into the "old" (sitemanagementforum) forum, leading to confusion for those who are new and only have accounts on the new forum. These login links need to be updated.

#752 fixed Cache detection error Jan Wassenberg Philip Taylor
Description

Someone reports:

Assertion failed: "0"
Location: x86_x64.cpp:457 (DetectCache_CPUID4)

Call stack:

00567D5F

005691C8

0053F27B

02A000B0

0003FFA8


errno = 0 (?)
OS error = 0 (no error code was set)


Assertion failed: "dcaches.numLevels >= 2"
Location: x86_x64.cpp:698 (DetectCacheAndTLB)

Call stack:

00567D5F

005691C8

0053F27B


errno = 0 (?)
OS error = 487 (Se ha intentado tener acceso a una dirección no válida.
)


Assertion failed: "dcaches.levels[0].lineSize != 0"
Location: x86_x64.cpp:699 (DetectCacheAndTLB)

Call stack:

00567D5F

005691C8

0053F27B


errno = 0 (?)
OS error = 487 (Se ha intentado tener acceso a una dirección no válida.
)



Assertion failed: "dcaches.levels[1].lineSize != 0"
Location: x86_x64.cpp:700 (DetectCacheAndTLB)

Call stack:

00567D5F

005691C8

0053F27B


errno = 0 (?)
OS error = 487 (Se ha intentado tener acceso a una dirección no válida.
)

The relevant reported data is:

  "cpu_coresperpackage": 1, 
  "cpu_frequency": 2533000000, 
  "cpu_identifier": "    Intel Pentium 4 2.53GHz", 
  "cpu_largepagesize": 0, 
  "cpu_logicalpercore": 1, 
  "cpu_numcaches": 1, 
  "cpu_numpackages": 1, 
  "cpu_numprocs": 1, 
  "cpu_pagesize": 4096, 
  [...]
  "uname_machine": "IA-32", 
  "uname_release": "SP 2", 
  "uname_sysname": "WinXP", 
  "uname_version": "5.1.2600", 
  [...]
  "x86_caps[0]": 17408, 
  "x86_caps[1]": 3219913727, 
  "x86_caps[2]": 0, 
  "x86_caps[3]": 0, 
  "x86_dcaches": [], 
  "x86_dtlbs": [
    {
      "associativity": 255, 
      "entries": 64, 
      "level": 1, 
      "pagesize": 4096, 
      "type": 1
    }
  ], 
  "x86_family": 15, 
  "x86_icaches": [], 
  "x86_itlbs": [
    {
      "associativity": 255, 
      "entries": 128, 
      "level": 1, 
      "pagesize": 4096, 
      "type": 2
    }
  ], 
  "x86_model": 2, 
  "x86_vendor": 1
#754 fixed Crash on Start Speedy1505
Description

This Error create an Start ... The Game not be run :(

Function call failed: return value was -1 (Unknown error (-1, 0xFFFFFFFF)) Location: wutil.cpp:168 (LibError_from_GLE)

Call stack:

00567D5F

005691C8

0053F27B

005625C7

005793E4

00579444

errno = 0 (?) OS error = 487 (Es wurde versucht, auf eine unzulässige Adresse zuzugreifen. )


Function call failed: return value was -1 (Unknown error (-1, 0xFFFFFFFF)) Location: wutil.cpp:168 (LibError_from_GLE)

Call stack:

LibError_from_GLE (wutil.cpp:168)

warn_if_failed = true

ReadRegister (mahaf.cpp:174)

ioctl = 3506053136 (0xD0FA2010) reg = 206 (0x00000000000000CE) out =

value = 24651342758852272 (0x005794440060B6B0)

bytesReturned = 0 (0x00000000) in =

reg = 27190304079609856 (0x0060997000000000)

mahaf_ReadModelSpecificRegister (mahaf.cpp:184)

reg = 206 (0x00000000000000CE)

MSR::Read (msr.cpp:95)

reg = 206 (0x00000000000000CE)

CounterTSC::NominalFrequency (tsc.cpp:228)

this = (unavailable)

GetNextBestSafeCounter (whrt.cpp:81)

counter = 0x006E0055 -> (ICounter) nextCounterId = 2 (0x00000002) buf = "known error (-100032, 0xFFFE7940)"

InitCounter (whrt.cpp:109)

whrt_Init (whrt.cpp:302)

winit_CallInitFunctions (winit.cpp:89)

wstartup_InitAndRegisterShutdown (wstartup.cpp:109)

initterm_e (:0)

tmainCRTStartup (crtexe.c:483)

nested = 0 (0x00000000)

CallStartupWithinTryBlock (wseh.cpp:386)

ret = 3021013027 (0xB4110023)

RegisterWaitForInputIdle (:0)

errno = 0 (?) OS error = 0 (no error code was set)

#755 duplicate Unloading troops from ships gets some stuck in the water (alpha 4) Eric Ladner
Description

When unloading a decent amount of troops from a ship (> 10), some of them unload off the back of the boat, then are stuck in deep water and can't make the transition from deep to shallow water. The only work around is to re-garrison them in the ship, then unload again so they come off the front of the boat on the shallow side.

A check should be made to ensure they unload in shallow water, or allow transition from deep to shallow water (but not from shallow to deep, since deep is restricted for troops).

#757 needsinfo [NEEDS INFO] ERROR: CRenderer::EndFrame: GL errors occurred fabio
Description

After starting a map with r9099 I got this mesa warning:

Mesa: User error: GL_INVALID_OPERATION in glCompressedTexImage2D
ERROR: CRenderer::EndFrame: GL errors occurred

Full output is attached.

I am no longer able to reproduce this however.

#758 fixed JavaScript warning when selecting Miletus map fabio
Description

When selecting Miletus map the following warnings appear:

WARNING: JavaScript warning: gui/gamesetup/gamesetup.js line 810
reference to undefined property g_CivData[civ]
ERROR: JavaScript error: gui/gamesetup/gamesetup.js line 810
TypeError: g_CivData[civ] is undefined
  onGameAttributesChange()@gui/gamesetup/gamesetup.js:810
  updateGameAttributes()@gui/gamesetup/gamesetup.js:840
  selectMap("Miletus")@gui/gamesetup/gamesetup.js:635
  __eventhandler80 (selectionchange)([object Object])@mapSelection selectionchange:0
#759 fixed no package available for debian nicoulas
Description

With the impressive list of supported platform, I can't understand the lack of a debian package…

#760 fixed Update wiki for new random map system historic_bruno historic_bruno
Description

The following wiki pages should be updated so people know how to use the new random map generator. The API is fairly similar to the standalone rmgen tool, so it will mostly need rewording and perhaps flushing out of details.

And they should be linked from a more sensible location than TDD_Tools.

#761 fixed crash with RMS and Latium map fabio
Description

Selecting Random map, Latium map and 3 players make the game crash:

ERROR: JavaScript error: maps/random/rmgen/tileclass.js line 83
TypeError: this.rangeCount[y] is undefined
  (139,289)@maps/random/rmgen/tileclass.js:83
  addToClass(139,289,6)@maps/random/rmgen/library.js:337
  @maps/random/latium.js:114
ERROR: Failed to load RMS 'maps/random/latium.js'
TIMER| GenerateMap: 73.5917 ms
ERROR: Map generation failed: RMS returned undefined
main.cpp(206): Function call failed: return value was -1 (Function failed (no details available))
Function call failed: return value was -1 (Function failed (no details available))
Location: main.cpp:206 (ProgressiveLoad)

Call stack:

(0x82ae2e2) ./pyrogenesis() [0x82ae2e2]
(0x827ab98) ./pyrogenesis() [0x827ab98]
(0x827bb53) ./pyrogenesis() [0x827bb53]
(0x827be3e) ./pyrogenesis() [0x827be3e]
(0x80558a0) ./pyrogenesis() [0x80558a0]
(0x8055e41) ./pyrogenesis() [0x8055e41]
(0x8056f9d) ./pyrogenesis() [0x8056f9d]
(0xb6d59ce7) /lib/libc.so.6(__libc_start_main+0xe7) [0xb6d59ce7]
(0x80556d1) ./pyrogenesis() [0x80556d1]

errno = 0 (?)
OS error = ?
#762 fixed Last minor issues with RMS fabio
Description

1) Select Scenario, Demo Maps, Random. The following warning appears:

ERROR: Failed to read file: maps/random/Bridge_demo.json

2) 'New RMS test' map should be under Random Demo maps.

3) Possibly make Random map the default for Alpha 5 rather than Scenario to highlight this new feature and to have additional testing.

#763 fixed [PATCH] Player and resource colors conflict on minimap Imarok historic_bruno
Description

On the minimap, metal mines are shown as yellow which is very similar to player 4's color. Animals are shown as orange which is similar to player 7.

One or the other should be tweaked slightly so the players and resources can be more clearly distinguished.

#764 fixed Random maps can crash game historic_bruno
Description

Currently if a random map generator script fails, the game will crash because it has no map data. The best way to deal with this would be to present a message to the user telling them the map script failed, and then return them to the main menu. I'm not sure how the progressive loader can be aborted safely. Another way to handle this temporarily, is to just load a blank map when the generator fails.

#765 fixed Error when moving building placement preview off the map philip Philip Taylor
Description
ICmpRangeManager.h(193): Assertion failed: "i >= 0 && j >= 0 && i < m_VerticesPerSide && j < m_VerticesPerSide"
#766 fixed ./update-workspaces.sh fails while linking a dir hennr
Description

When running ./update-workspaces.sh from inside the build/workspaces dir, I get the following error:

/home/henner/src/0ad/libraries/spidermonkey-tip/src/build-release/config/nsinstall -R system_wrappers_js ../dist /home/henner/src/0ad/libraries/spidermonkey-tip/src/build-release/config/nsinstall: cannot make symbolic link /home/henner/src/0ad/libraries/spidermonkey-tip/src/build-release/dist/system_wrappers_js: File exists make[2]: * [export] Error 1 make[2]: Leaving directory `/home/henner/src/0ad/libraries/spidermonkey-tip/src/build-release/config' make[1]: * [export] Error 2 make[1]: * Waiting for unfinished jobs.... make[1]: Leaving directory `/home/henner/src/0ad/libraries/spidermonkey-tip/src/build-release' make: * [default] Error 2 ERROR: SpiderMonkey build failed

Removing the link and running the script again does not solve the problem.

Any ideas?

#767 fixed can't compile on linux fabio
Description

Error:

smbios.cpp
../../../source/lib/sysdep/smbios.cpp:446: error: explicit template specialization cannot have a storage class
../../../source/lib/sysdep/smbios.cpp:446: error: explicit template specialization cannot have a storage class
../../../source/lib/sysdep/smbios.cpp:446: error: explicit template specialization cannot have a storage class
../../../source/lib/sysdep/smbios.cpp:446: error: explicit template specialization cannot have a storage class
../../../source/lib/sysdep/smbios.cpp:446: error: explicit template specialization cannot have a storage class
../../../source/lib/sysdep/smbios.cpp:446: error: explicit template specialization cannot have a storage class
../../../source/lib/sysdep/smbios.cpp:446: error: explicit template specialization cannot have a storage class
../../../source/lib/sysdep/smbios.cpp:446: error: explicit template specialization cannot have a storage class
../../../source/lib/sysdep/smbios.cpp:446: error: explicit template specialization cannot have a storage class
../../../source/lib/sysdep/smbios.cpp:446: error: explicit template specialization cannot have a storage class
../../../source/lib/sysdep/smbios.cpp:446: error: explicit template specialization cannot have a storage class
../../../source/lib/sysdep/smbios.cpp:446: error: explicit template specialization cannot have a storage class
../../../source/lib/sysdep/smbios.cpp:446: error: explicit template specialization cannot have a storage class
../../../source/lib/sysdep/smbios.cpp:446: error: explicit template specialization cannot have a storage class
../../../source/lib/sysdep/smbios.cpp:446: error: explicit template specialization cannot have a storage class
../../../source/lib/sysdep/smbios.cpp:446: error: explicit template specialization cannot have a storage class
../../../source/lib/sysdep/smbios.cpp:446: error: explicit template specialization cannot have a storage class
../../../source/lib/sysdep/smbios.cpp:446: error: explicit template specialization cannot have a storage class
../../../source/lib/sysdep/smbios.cpp:446: error: explicit template specialization cannot have a storage class
../../../source/lib/sysdep/smbios.cpp:446: error: explicit template specialization cannot have a storage class
../../../source/lib/sysdep/smbios.cpp:446: error: explicit template specialization cannot have a storage class
../../../source/lib/sysdep/smbios.cpp:446: error: explicit template specialization cannot have a storage class
../../../source/lib/sysdep/smbios.cpp:446: error: explicit template specialization cannot have a storage class
../../../source/lib/sysdep/smbios.cpp:446: error: explicit template specialization cannot have a storage class
../../../source/lib/sysdep/smbios.cpp:446: error: explicit template specialization cannot have a storage class
../../../source/lib/sysdep/smbios.cpp:446: error: explicit template specialization cannot have a storage class
../../../source/lib/sysdep/smbios.cpp:446: error: explicit template specialization cannot have a storage class
../../../source/lib/sysdep/smbios.cpp:446: error: explicit template specialization cannot have a storage class
../../../source/lib/sysdep/smbios.cpp:446: error: explicit template specialization cannot have a storage class
../../../source/lib/sysdep/smbios.cpp:446: error: explicit template specialization cannot have a storage class
../../../source/lib/sysdep/smbios.cpp:446: error: explicit template specialization cannot have a storage class
../../../source/lib/sysdep/smbios.cpp:446: error: explicit template specialization cannot have a storage class
../../../source/lib/sysdep/smbios.cpp:446: error: explicit template specialization cannot have a storage class
../../../source/lib/sysdep/smbios.cpp:446: error: explicit template specialization cannot have a storage class
../../../source/lib/sysdep/smbios.cpp:446: error: explicit template specialization cannot have a storage class
../../../source/lib/sysdep/smbios.cpp:446: error: explicit template specialization cannot have a storage class
../../../source/lib/sysdep/smbios.cpp: In member function ‘void SMBIOS::FieldStringizer::operator()(size_t, T&, const char*, const char*)’:
../../../source/lib/sysdep/smbios.cpp:467: error: too few template-parameter-lists
make[1]: *** [obj/lowlevel_Release/smbios.o] Errore 1
make: *** [lowlevel] Errore 2
make: *** Attesa per i processi non terminati....
#768 fixed Various ERRORs michael fabio
Description

When starting Celt-Iberia map:

ERROR: CSkeletonAnimManager::GetAnimation(art/animation/): Failed loading, marked file as bad

FIXED: When placing an Iberian corral:

ERROR: Failed to find file: "art/actors/props/structures/carthaginians/corral_mud.xml"
ERROR: CObjectManager::FindObjectBase(): Cannot find object 'props/structures/carthaginians/corral_mud.xml'
ERROR: Failed to find file: "art/actors/props/structures/carthaginians/corral_mud.xml"
ERROR: CObjectManager::FindObjectBase(): Cannot find object 'props/structures/carthaginians/corral_mud.xml'
ERROR: Failed to find file: "art/actors/props/structures/carthaginians/corral_mud.xml"
ERROR: CObjectManager::FindObjectBase(): Cannot find object 'props/structures/carthaginians/corral_mud.xml'
ERROR: Failed to build prop model "props/structures/carthaginians/corral_mud.xml" on actor "corral"
ERROR: Failed to find file: "art/actors/props/structures/carthaginians/corral_mud.xml"
ERROR: CObjectManager::FindObjectBase(): Cannot find object 'props/structures/carthaginians/corral_mud.xml'
ERROR: Failed to find file: ""
#769 fixed [PATCH] Projectiles occasionally bounce Markus Philip Taylor
Description

It looks like projectiles randomly sometimes bounce when landing, which they're not meant to do. (Presumably some precision bug in the projectile motion code.)

#770 fixed Unify user interface styles brian Kieran P
Description

There are several places which have different UI's. Like full screen panels v.s. half size, different coloured borders and titles, and more varitations.

All should be the same!

#771 duplicate unit lost if building near map border fabio
Description

I created a Hellenes fortress in map Oasis just on the map border. When I set to create a unit it doesn't appeared, probably it ends up outside the map.

#772 wontfix Ability to modify Civilization and Team also for "Scenario" map fabio
Description

It would be nice if they could be changed as in the Random maps, at least with maps that have only a Civic center and not other special buildings (Acropolis and Miletus...).

It would also be nice to be able to disable some player.

Finally the default AI should be probably changed to "Demo Bot" rather than Unassigned.

#773 fixed [PATCH] Groups Badmadblacksad
Description
  • Create groups (Ctrl+number)
  • Add to group (Shift+number)
  • Select group (number or click on icons)
  • A unit can only be a member of a single group

copy this image in binaries/data/mods/public/art/textures/ui/session/icons/sheets/groups.png (created with binaries/data/mods/public/art/textures/ui/session/icons/single/group[0-9].png)

On my computer I had to replace hotkey.selection.group.[0-9] with hotkey.selection.group.Num[0-9] in the file binaries/data/config/default.cfg. I've got a french keyboard. Don't know if it will work for you.

TODO :

  • double click / double press on a key : snap
  • maybe some art related stuff ;)
#774 fixed Make JuBot the default selected AI in single player setup Philip Taylor Erik Johansson
Description

As per http://trac.wildfiregames.com/ticket/772#comment:2 and other discussions it would be nice to have "Demo Bot" set as the opponent by default in singleplayer games (unless there is a new and improved AI, then that one should be the default :) ).

Edit: Make Jubot the default selected one for single games, it's better and will make players more interested in the game.

#775 fixed Unit following stops when other object selected Kieran P
Description

When a unit is being followed, stop following the unit once you clicked on something else (currently relies on camera moving to stop)

#776 duplicate Error jlybomber
Description

Much to our regret we must report the program has encountered an error.

Please let us know at http://trac.wildfiregames.com/ and attach the crashlog.txt and crashlog.dmp files.

Details: unhandled exception (Access violation reading 0x00000000)

Location: unknown:0 (?)

Call stack:

(error while dumping stack: No stack frames found) errno = 0 (?) OS error = 0 (no error code was set)

#777 duplicate Error jlybomber
Description

Much to our regret we must report the program has encountered an error.

Please let us know at http://trac.wildfiregames.com/ and attach the crashlog.txt and crashlog.dmp files.

Details: unhandled exception (Access violation reading 0x00000000)

Location: unknown:0 (?)

Call stack:

(error while dumping stack: No stack frames found) errno = 0 (?) OS error = 0 (no error code was set)

#778 fixed [CRASHLOG] Error pt.2 jlybomber
Description

Much to our regret we must report the program has encountered an error.

Please let us know at http://trac.wildfiregames.com/ and attach the crashlog.txt and crashlog.dmp files.

Details: unhandled exception (Access violation reading 0x00000000)

Location: unknown:0 (?)

Call stack:

(error while dumping stack: No stack frames found) errno = 0 (?) OS error = 0 (no error code was set)

#779 fixed Villagers stuck on construction sites philip James Baillie
Description

Essentially, pre-tasked villagers or troops can get trapped on construction sites if they walk onto them between placement and construction starting; they carry on trying to walk across them, and get stuck. The building remains on 0HP, and they remain stationary. Subsequent troops will also get stuck, and for an AI player this can cause economic wreckage.

#780 fixed Disable shader renderer on r300c Philip Taylor
Description

According to this thread, the shader mode causes graphical errors on Mesa r300c drivers. We should default to fixed mode and probably suggest users should upgrade to r300g (Gallium) drivers.

#781 fixed Hotloading fails Jan Wassenberg Philip Taylor
Description

Hotloading of most files apparently fails on Windows. I think there are two issues:

ReloadChangedFiles calls VFS::GetVirtualPath with realPathname == "e:/0ad/binaries/data/mods/public/art/particles\smoke.xml" etc. That calls realPathname.Parent() which finds a / so it returns "e:/0ad/binaries/data/mods/public/art/" and treats "particles\smoke.xml" as the filename, so it'll end up returning a VfsPath that contains \ and that won't be recognised as a file that was previously loaded.

GetVirtualPath also calls FindRealPathR which thinks the VFS path "art" has realDirectory->Path() == "e:/0ad/binaries/data/mods/internal/art/" so it doesn't match the mods/public/ path and eventually GetVirtualPath fails with no match.

(Hotloading normally works for me since I run on Linux with only the public mod.)

#782 fixed Simplify RMS output format historic_bruno Philip Taylor
Description

The texIdx2 in tileData is never used by the game and should be removed. (The one in STileDesc is never used and should eventually be removed too, but that'd break compatibility with .pmp files so it's probably not worthwhile until we have other incompatible changes that we can do all at once.)

I think it'd make more sense for tileData to be arranged by tiles, not by patches, and have the engine code rearrange as necessary. That'd make it easier to write RMS scripts from scratch, and would let us e.g. change the engine to have different-sized patches without having to change all the scripts too. (I think the .pmp files should be arranged that way too (I've wanted to experiment with the effect of patch size on performance and it's a pain with the current map format), but the same compatibility concern applies.)

The isActor flag doesn't seem particularly appropriate - there's nothing unique about actors, they're just entities whose template names happen to start with "actor|". There are other entities that e.g. don't have the Ownership component, so whether a player value is specified is conceptually orthogonal to whether they're actors. So I'd probably suggest getting rid of isActor and making the associated properties optional (defaulting to 0 or whatever).

#783 fixed CMapGeneratorWorker isn't thread-safe historic_bruno Philip Taylor
Description

CMapGeneratorWorker runs in a non-main thread but calls fs_util::GetPathnames and ScriptInterface::LoadGlobalScriptFile which aren't thread-safe. (Those are the only problematic ones I see currently.)

This results in assertion failures in debug mode for me, and it could crash if e.g. hotloading occurs while the generator thread is running that function. (I've added some extra assertions now to make it complain more immediately.)

Either VFS needs to be made thread-safe (which sounds very hard), or the generator needs to avoid calling those functions except on the main thread. Maybe Initialize() can read the script file into a string, and enumerate all maps/random/*/*.js and read those into strings too (there won't be loads so it should be fast enough), and then the generator thread passes any requested files into ScriptInterface as strings so it doesn't need to interact with the VFS again.

#784 duplicate Building process aborted when units walk atop Wolter Hellmund
Description

When a building order is issued, the land is graphically marked for the building. If a unit walks inside the building landmarks before the builders start working on the process, the building is never completed.

#785 fixed [PATCH] Implement variable game speed historic_bruno Wolter Hellmund
Description

There should be a game speed option for single and multiplayer games.

#786 fixed [PATCH] Improve method for building walls vts Wolter Hellmund
Description

Building walls can be a very tedious job if each wall section is built individually. Currently, this is the way walls are built in 0 a.d., which is a good enough reason for players not to build walls - the task is severely time-consuming.

Therefore, I propose that users are able to create path for walls to be built on. The placement of wall segments is something decided by the game engine.

The creation of these paths could be as simple as connecting points that the player selects, or as fancy as creating a bezier path along the ground to have a nice curvy wall. Note that a curvy wall is not only a luxury, but it can be a strategic building shape to hold a radius of terrain steadily.

#787 fixed Store map size defaults in single location historic_bruno
Description

Since we have random maps now, there are several points where map sizes can be chosen from a list:

  • In game setup, when playing a random map (gamesetup.js)
  • In Atlas "New" dialog, when creating a blank map (/tools/atlas/lists.xml)
  • In Atlas map panel, when generating a random map (/tools/atlas/scripts/section/map.js)

Instead of having 3 or more different lists that have to be sync'd, we could just store them in one location, maybe in a file with raw JSON data. This could be analogous to player defaults /simulation/data/player_defaults.json, where code that needs to access the data can go through the simulation. The file would be an array of map size objects, perhaps with tile size, name, and detailed description of each choice (for tooltips).

#788 fixed [PATCH] Eliminate delay in path finding Kenny Long Kieran P
Description

When you task a unit to something, there is a delay. Get rid of this delay! It's really horrible, and long enough to cause problems when you need that extra second it waits.

#789 fixed Remove the unit selection cap Kieran P
Description

See http://www.wildfiregames.com/forum/index.php?showtopic=14620&view=findpost&p=218316

The cap no longer makes sense now that we group by type, and there isn't a civ with 20 different types of units to fill up the GUI.

Remove the cap completely, and we'll see how that goes for the next release.

#790 fixed Sound effects have stopped working Philip Taylor Kieran P
Description

See http://www.wildfiregames.com/forum/index.php?showtopic=14595

They used to work in Alpha 4, now they don't in Alpha 5. We can't release with a regression!

#792 fixed Find all Idle Units Erik Johansson
Description

Currently the "Find Idle Workers" function (accessed either via the GUI button or the . key) only finds idle women. It would be nice to be able to find all idle units. My suggestion would be to group them like this: Idle Warriors (heroes, super units, siege, war ships), Idle Citizen Soldiers, Idle Support Units (female citizens, healers, traders, fishing ships, trade ships). Not sure about how to graphically represent it the best way, but it would work good with the keys: , . - (,=warriors; .=citizen soldiers; -=support units). Thoughts?

#793 fixed Random maps don't report name Philip Taylor
Description

session.js has reportPerformance which uses Engine.GetMapSettings().Name to say what map the profiling data applies to. When playing random maps, the Name seems to be undefined. I expect it would be best if that was the name of the random map script, and maybe reportPerformance should report the size and seed too, so we could (in theory) detect whether certain maps have significant performance problems.

#794 fixed [PATCH] Camera height Dietger frapell
Description

There's like a "ceiling" where the camera cannot zoom out anymore.

This ceiling appears to be related to the terrain, so in maps like "Death Canyon", when you go over the canyon itself, the camera zooms in, and when you go back to your camp, you are really close to the units, and need to zoom out, which gets very annoying.

I think there should be a "ceiling", but how deep or tall the terrain is, shouldn't affect it.

#795 duplicate Construction queue frapell
Description

Right now, if you have a couple of villagers, and you want to build 7 houses, you can select the house from the buildings, hold down SHIFT, and place the 7 houses. What happens is that they all get their foundations, and the villagers start from the last one. They continue with the rest of them, just because they "see" a building not finished, and go there, but if the building is not in their radius to check if there are things to do, then they do nothing.

I think, this should work as follows: If you hold SHIFT, when you place several buildings, they should start building the first one, and all the others you place, should be remembered to be build later, as if you quickly selected the building to build right after they finished. Perhaps a "ghost" building should be there so you can know how many buildings are left, something like "Warzone 2100" does.

One really nice thing to have, would be ways to handle this queues, like, having extra control over these "ghost buildings" that you can cancel, move priority, etc.

#796 wontfix Multiple clicks to select units frapell
Description

If you double click over a specific unit, it will select all units of the same type that are currently visible.

I would like to suggest, implementing a 2-click, 3-click, and 4-click selections.

2-click: This will select all units of this type, that are currently idle.

3-click: This will select all units of this type, visible at the moment (like 2-click selection is right now)

4-click: This will select all units of this type all across the map, no matter where they are.

#797 fixed Allow archers to move on top of the walls frapell
Description

When building defenses with walls and towers, you place archers on these towers and they stay there. What i propose here, is, you build walls and towers, and for each tower, the amount of possible archers increase by say, 5, in the whole set of walls and towers (provided they are all built together as a whole). Archers do not need to stay inside the towers, they can move over the walls, so they can fire from any place in the wall, or get to another tower and fire from there.

With this, it will not happen that you will get a lot of towers built on parts where the enemy never gets, and you have a lot of archers there, doing nothing.

Perhaps it is something you can allow archers to do or not, if they stay inside a specific tower, they get the extra protection the tower gives, but they are stuck there and cannot move. On the other hand, if they can move, they can be killed if they stay over the wall, but they are able to move.

#798 fixed Update Doxygen documentation for Pyrogenesis Philip Taylor Erik Johansson
Description

The documentation at http://svn.wildfiregames.com/docs/ needs to be updated.

#799 fixed [PATCH] Add "back to work" button Itms MiniMe
Description

Hi!

What I'm missing the most in 0 A.D. is the possibility to send units (citizen-soldiers) back to their last assigned work (i.e. resource gathering) after using them for battle. It's a hassle to reassign them manually each time, so this would be a great improvement, especially because in 0 A.D. it's "normal" to use units for battle and resource gathering.

Btw, there is such a button in other games too (e.g. "Empires:DOTMW"), where citizens are able to fight...

#800 invalid Fix AI assignments / names historic_bruno
Description

When an AI player tries to send a chat message, it is listed only as "Unknown player". I think that's just one symptom of AI player assignment being a bit hacky. They should be handled about the same as a human player, perhaps using the AI name as their own (i.e. "Demobot" instead of "Player 2") in the UI and also being able to send chat messages. If all the AIs are named "Player #" then it's easy to forget which is which, for comparison purposes.

We could even have a database of historical names to be chosen at random for the AIs, adding some personality.

#801 fixed [PATCH] Templates sorting utility historic_bruno fcxSanya
Description

Currently second-level elements (which represent components) in simulation templates ordered chaotically, and this is better to have any order than don't have order at all, so I proposed to use the alphabetical order.

Attached patch add to svn small utility, which consists from shell script and xsl template.

#802 fixed Blender animations messed up in-game Zaggy1024
Description

When an animation is exported from Blender into the game, sometimes the bones, when they're supposed to rotate just a small distance, rotate around 360 degrees to get to their intended orientation. This could be some sort of problem with the Blender exporter, but I tried importing the animations back into Blender, and they played correctly, so it seems more likely that it's a problem in the engine.

A set of animations for the lion, containing a couple broken ones: http://www.mediafire.com/?udi4a302f3g2j0y

#803 fixed Minimap broken fabio
Description

The circular minimaps are broken here since a while. Example on current build from svn on Linux with Death Canion:

http://img194.imageshack.us/img194/3881/0adbrokenminimap.png

EDIT: this is a mesa (Linux) driver problem: see this bug for more info: https://bugs.freedesktop.org/show_bug.cgi?id=36762

#804 fixed [PATCH] Building Placement Restrictions historic_bruno historic_bruno
Description

Buildings should have restrictions on where they can be placed:

  • Docks can only be built in a shallow coastal area (where villagers can reach it to build and created boats will be water units).
    • Possibly have docks autorotate to be perpendicular to the shore, so the user is not burdened with doing this.
  • Other buildings must be built on land.
  • There may be restrictions by territory (once #41 is implemented), e.g. requiring a building to be on user's own and/or ally territory.

(See simulation\components\BuildRestrictions.js for more details)

#805 fixed [PATCH] Support double-click on unit group buttons Philip Taylor
Description

When you assign unit groups (with ctrl+1 etc) it shows a little numbered button at the side of the screen. Double-clicking the button should have the same effect as double-pressing the digit key (i.e. move the camera to the units).

This probably needs some changes to the GUI engine, particularly IGUIButtonBehavior::HandleMessage to detect double-clicks and send a different message type (GUIM_DOUBLE_PRESSED, script event doublepress or something, probably in addition to the standard press event (since some other buttons want to treat it like two separate presses)), then updateGroups in mods/public/gui/session/session.js should set button.ondoublepress appropriately.

#806 wontfix Use JS_SetFunctionCallback for profiling Kenny Long Philip Taylor
Description

Use JS_SetFunctionCallback instead of JS_SetCallHook so that the JITs don't get disabled. (Also, need to build with --enable-trace-jscalls.)

#807 fixed Implement profiling for any thread historic_bruno
Description

Currently the profiler is restricted to the main thread, so e.g. scripts that run in other threads can't use the profiling functions. According to Philip, it's hierarchical and each threads needs its own hierarchy, also timings on other threads are independent of frame rendering. So perhaps the profiler should be designed to support one instance per thread, and then those threads would each use their own local profiler.

Potential areas of benefit:

  • Random map scripts
  • AI scripts (once multithreaded)
  • Pathfinding (once multithreaded)
  • ?

Also of interest: #806, which will allow script profiling with JIT enabled.

#808 fixed Walk through Iberian walls michael Martin Nissen
Description

The Iberian walls ain't solid and anybody can walk right through, friend or foe. Though I have seen some foes taking the long way around, Iberian walls are defect!

#809 fixed Random maps need more stone historic_bruno Kieran P
Description

The lack of stone is causing random maps to become unplayable the longer you play on them (due to the good thigns needing stone).

Add more stone to random maps. Check the resource balance overall.

#810 fixed Props should have a "selectable" setting Zaggy1024
Description

Some units have no actual model, but use attached actors (i.e. for the trader, it has a donkey attached, and a "driver" pulling it), and since it doesn't make them selectable, you can't select the unit just by clicking on it, but you have to drag around it (which makes it impossible to select an enemy unit like that).

#811 fixed Unhelpful error message when unable to write file Philip Taylor
Description

When the game is unable to write a file (in particular when it's trying to create a cache file when it doesn't have write permission to the directory), it gives an error like

io.h(73): Assertion failed: "fd >= 0"
Assertion failed: "fd >= 0"
Location: io.h:73 (Validate)

...

errno = 0 (?)
OS error = ?

(via io::Store -> io::Run -> io::Operation::Validate) which is very uninformative. In contrast, if CreateDirectories fails due to permission problems, it says "Function call failed: return value was -110300 (Insufficient access rights to open file)" - it should do something similar when failing to create files.

#813 fixed Remove Persians and Carthaginians Kieran P
Description

As per http://www.wildfiregames.com/forum/index.php?showtopic=14669&pid=218814&st=0&#entry218814

We don't want to cause errors.

#814 fixed Passive or inactive soldiers Martin Nissen
Description

Using svn revision 9388, in some games soldiers cant attack and don't even show a sword for attack selection. And don't react when attacked. It's not faction specific and it's not every time, even when setting the same criteria for a game.

#815 duplicate Teams appear broken Kieran P
Description

See http://www.wildfiregames.com/forum/index.php?showtopic=14670&pid=218828&st=0&#entry218828

Apparently you can only attack allies, which is messed up. Please investigate and fix.

#816 fixed Change release name to Edetani Kieran P
#817 fixed Adding garrisoning flags Pureon Kieran P
Description

When a building has units garrisoned, it should have a flag on the highest point of it, to indicate units are in there.

A suggestion from Fabio also suggested that the flag should be high adjusted depending on the amount of units garrisoned.

flag at base position: < 50% garrisoned units
flag at mid: >= 50% garrisoned units
flag at top: all units garrisoned
#818 fixed Garrisoned units on ships don't increase fire power Kieran P
Description

When units are garrisoned in a ship, they do not seem to increase the amount of arrows fired from it.

It should act like towers, and increase the amount of arrows fired.

#819 fixed Add dust particles for building destruction Art Department Kieran P
Description

We have the animation and the sound. Now we just need the dust to go with the building destruction.

It'd be nice for Alpha 5 if someone wants something to do, but otherwise, it can wait for the next release.

#820 fixed Change default map to Death Canyon Kieran P
#821 fixed Decrease intensity of building construction particles michael Kieran P
Description

The dust is a bit strong right now. Make less of it, and in a lighter shade.

#822 fixed Make square maps fit within the minimap circle historic_bruno Kieran P
Description

We need the corners around the circular minimap for buttons.

Make square maps fit into that circle, and rotate nicely.

#823 fixed Improve idle workers button Kieran P
Description

With #822 completed, remove the old idle units button, and put this one into the lower right of the minimap edges.

http://trac.wildfiregames.com/browser/ps/trunk/binaries/data/mods/public/art/textures/ui/session/icons/single/minimap-idle.png?rev=9264

Will probably require either triangular click boundaries, or click z-indexes

#824 fixed [PATCH] Prettify unit/building selection ring vts Kieran P
Description

Prettify the unit/building selection ring. Change it from the 1px white line to a 1px white line, then a 2px fill of the users colour, then another 1px white line. Then apply this to all building, unit, animal, resource etc selection rings.

Attached is an example, please excuse the uglyness, it's an example, not a mockup ;-P

#825 fixed Make Enter/Esc work when a dialog is open Kieran P
Description

Should be able to press enter when a dialog is opened.

e.g. if I select a unit, then hit "Delete" on the keyboard, I should be able to press enter to confirm it.

Likewise, if it doesn't work already, 'Escape' on the keyboard should trigger the 'cancel' action.

#826 fixed Fix unit double click selection with units of different ranks Brian Kieran P
Description

Change the unit click selection code:

one click = selects single unit

two click = selects all units of the same type and rank

three clicks = selects on units of the same type (disregards rank)

#827 fixed Failing test on Ubuntu 10.10 fabio
Description
Running 251 tests........................................................................ERROR: JavaScript error: simulation/components/Formation.js line 190
ReferenceError: IID_Identity is not defined
  ([object Array],true)@simulation/components/Formation.js:190
  (true)@simulation/components/Formation.js:133
  ([object Object])@simulation/components/UnitAI.js:371
  ([object Object],[object Object])@simulation/helpers/FSM.js:250
  ([object Object])@simulation/components/UnitAI.js:1453
  TestFormationExiting(0)@simulation/components/tests/test_UnitAI.js:112
  ()@simulation/components/tests/test_UnitAI.js:129

In TestComponentScripts::test_scripts:
../../../source/pch/test/../../../source/simulation2/components/tests/test_scripts.h:44: Error: Test failed: L"Running script simulation/components/tests/test_UnitAI.js"
../../../source/pch/test/../../../source/simulation2/components/tests/test_scripts.h:44: Error: Assertion failed: scriptInterface.LoadScript(pathname, wcontent)
..................................................................................................................................................................................
Failed 1 of 251 tests
Success rate: 99%
#828 fixed Celt-Iberia scenario double units control michael Martin Nissen
Description

When starting Celt-Iberia scenario with player 1 me, player 2 Jubot and player 3 Demo bot, player 1 have control of, what I believe should have been, player 3's starting units. They start attacking player 3's civi center, while player 3 controlled units appears progressively.

Tested 3 times, same result.

#829 fixed Woman and units get stuck in anything Kenny Long Martin Nissen
Description

It still occurs, that woman and units gets stuck between trees, houses and other obstacles. I think it reoccurred after formations went active. Units often walks into trees and get stuck, but it's still possible to point-walk them out again. Other times units gets detached from a control group when they are stuck.

If units, mostly >6, are placed into a control group while in a tree area, some units can place them self where they cant get out again.

#830 fixed [PATCH] improve 0ad ubuntu packages compression fabio
Description

Ubuntu packages are compressed with default (-6) lzma compression. Using -9 compression decrease a bit the package size for faster downloads.

Also using xz for compressing source packages.

#831 fixed Ranged units do not always face their targets when attacking. michael
Description

Ranged units do not always face their targets when attacking. This leads to strange-looking behavior during battles.

To confirm this, watch an enemy unit walk into range of your ranged units and watch your ranged units' behavior as they throw their projectiles. As the enemy unit moves position, your ranged units will not reorient themselves to face the enemy. Their projectiles will fly toward the enemy even though your units may be facing the opposite direction. Manually tasking your units to re-target the enemy units seems to correct this for a small time.

#832 fixed Consistent Assertion Failures with sound enabled when loading maps in a certain order Jan Wassenberg Kieran P
Description

Ubuntu 11.04 (Classic Gnome Desktop - not unity), ATI 5770 with official proprietary drivers

r9430 (and possibly earlier) Loading the maps in any of these orders causes a consistent and immediate assertion failure. Loading the same map twice does not seem to change anything. It does not cause the error when using -quickstart.

acropolis --> celt-iberia --> death_canyon

celt-iberia --> acropolis --> death_canyon

death_canyon --> celt-iberia --> acropolis

death_canyon --> acropolis --> celt-iberia

[edit] Each of these maps has a different default civ. Civ specific music was recently added (and the new tracks are large).

*See Philip's comment below for more information.


Assertion failed: "removed" Location: file_cache.cpp:187 (Reserve)

Call stack:

(0x83828d0) /home/brian/0ad/binaries/system/pyrogenesis() [0x83828d0] (0x83333b2) /home/brian/0ad/binaries/system/pyrogenesis() [0x83333b2] (0x83340b0) /home/brian/0ad/binaries/system/pyrogenesis() [0x83340b0] (0x8334814) /home/brian/0ad/binaries/system/pyrogenesis() [0x8334814] (0x8392b89) /home/brian/0ad/binaries/system/pyrogenesis() [0x8392b89] (0x8390bad) /home/brian/0ad/binaries/system/pyrogenesis() [0x8390bad] (0x83481a8) /home/brian/0ad/binaries/system/pyrogenesis() [0x83481a8] (0x835dfbe) /home/brian/0ad/binaries/system/pyrogenesis() [0x835dfbe] (0x8358b63) /home/brian/0ad/binaries/system/pyrogenesis() [0x8358b63] (0x834b1b6) /home/brian/0ad/binaries/system/pyrogenesis() [0x834b1b6] (0x8359bdb) /home/brian/0ad/binaries/system/pyrogenesis() [0x8359bdb] (0x834b1b6) /home/brian/0ad/binaries/system/pyrogenesis() [0x834b1b6] (0x8357ff3) /home/brian/0ad/binaries/system/pyrogenesis() [0x8357ff3] (0x8192ea6) /home/brian/0ad/binaries/system/pyrogenesis() [0x8192ea6] (0xb753026f) /home/brian/0ad/binaries/system/libmozjs-ps-release.so(+0x25626f) [0xb753026f]

errno = 0 (?) OS error = ?


#833 fixed Consistent Assertion Failures with sound enabled when loading maps with large battles Jan Wassenberg brian
Description

Ubuntu 11.04 (Classic Gnome Desktop - not unity), ATI 5770 with official proprietary drivers

r9403 (and possibly earlier) I get an error if I run the large_combat_demo or we_are_legion. They do not give the assertion failure immediately though. I even got it on the Latium RMS during a battle. It does not cause the error when using -quickstart.


Assertion failed: "cpu_CAS(&al_srcs_allocationStates[i], kInUse, kAvailable)" Location: snd_mgr.cpp:561 (al_src_free)

Call stack:

(0x8369c30) /home/brian/Desktop/Link to pyrogenesis() [0x8369c30] (0x83212a4) /home/brian/Desktop/Link to pyrogenesis() [0x83212a4] (0x83215a7) /home/brian/Desktop/Link to pyrogenesis() [0x83215a7] (0x8321a45) /home/brian/Desktop/Link to pyrogenesis() [0x8321a45] (0x833fd43) /home/brian/Desktop/Link to pyrogenesis() [0x833fd43] (0x833ffef) /home/brian/Desktop/Link to pyrogenesis() [0x833ffef] (0x8333ae9) /home/brian/Desktop/Link to pyrogenesis() [0x8333ae9] (0x833febf) /home/brian/Desktop/Link to pyrogenesis() [0x833febf] (0x833f048) /home/brian/Desktop/Link to pyrogenesis() [0x833f048] (0x8343c4e) /home/brian/Desktop/Link to pyrogenesis() [0x8343c4e] (0x8056198) /home/brian/Desktop/Link to pyrogenesis() [0x8056198] (0xb6e1ae37) /lib/i386-linux-gnu/libc.so.6(libc_start_main+0xe7) [0xb6e1ae37] (0x8054f01) /home/brian/Desktop/Link to pyrogenesis() [0x8054f01]

errno = 0 (?) OS error = ?


#834 worksforme [NEEDS INFO] [CRASH] Function call failed brian
Description

Happened while playing a regular game on Latium. Will provide more details later.


Function call failed: return value was -100021 (Invalid Handle (argument)) Location: h_mgr.cpp:659 (h_free)

Call stack:

(0x8380f50) /home/brian/0ad/binaries/system/pyrogenesis() [0x8380f50] (0x8331a32) /home/brian/0ad/binaries/system/pyrogenesis() [0x8331a32] (0x8332730) /home/brian/0ad/binaries/system/pyrogenesis() [0x8332730] (0x8331fdc) /home/brian/0ad/binaries/system/pyrogenesis() [0x8331fdc] (0x83482da) /home/brian/0ad/binaries/system/pyrogenesis() [0x83482da] (0x834b864) /home/brian/0ad/binaries/system/pyrogenesis() [0x834b864] (0x8351d23) /home/brian/0ad/binaries/system/pyrogenesis() [0x8351d23] (0x8347d5e) /home/brian/0ad/binaries/system/pyrogenesis() [0x8347d5e] (0x8347fc4) /home/brian/0ad/binaries/system/pyrogenesis() [0x8347fc4] (0x83855f2) /home/brian/0ad/binaries/system/pyrogenesis() [0x83855f2] (0x83493c5) /home/brian/0ad/binaries/system/pyrogenesis() [0x83493c5] (0x8183e45) /home/brian/0ad/binaries/system/pyrogenesis() [0x8183e45] (0x8056fca) /home/brian/0ad/binaries/system/pyrogenesis() [0x8056fca] (0x80586d1) /home/brian/0ad/binaries/system/pyrogenesis() [0x80586d1] (0xb6ce5e37) /lib/i386-linux-gnu/libc.so.6(libc_start_main+0xe7) [0xb6ce5e37] (0x8054f01) /home/brian/0ad/binaries/system/pyrogenesis() [0x8054f01]

errno = 0 (?) OS error = ?


"That form of the stack trace is mostly useless - you should be able to select the "debugger" option on assertion failures, which'll open gdb in the terminal (assuming you started the game from there), then you can type "bt full" to get a useful backtrace (then "q" to quit)"

#835 fixed UnitAI - gathering animation played while unit still approaching resource historic_bruno
Description

Try moving a gather-capable unit in the vicinity of a resource target, such as a mine. Then if you tell the unit to gather while it's moving close to the target, it will start playing the gathering animation even though it's still moving to the target. I'm guessing this is an issue with the states in UnitAI, but the gathering animation should not be played until the unit is at the resource and has stopped moving.

#836 fixed broken build with enet 1.3 fabio
Description

Can't build on Debian sid and Ubuntu oneiric (included the official 0 A.D. PPA packages at https://launchpad.net/~wfg/+archive/0ad.dev/+packages) because of incompatibility with libenet 1.3. I am sure this is a known problem, but let's officially report anyway.

#838 fixed ERROR: CCmpPosition called on entity when IsInWorld is false Kieran P
Description

Got the following error when playing the game. It happened right after having garrisoned 20 units into a fortress, but the garrisoning failed. The units disappeared off world, but didn't show up in the garrisoned unit panel when the fortress was selected, they had disappeared.

ERROR: CCmpPosition::GetInterpolatedTransform called on entity when IsInWorld is false

ERROR: CCmpPosition::GetPosition called on entity when IsInWorld is false

#839 fixed function FireArrows: TypeError: cmpIdentity is null Kieran P
Description

Got the following error when playing the game. It happened right after having garrisoned 20 units into a fortress, but the garrisoning failed. The units disappeared off world, but didn't show up in the garrisoned unit panel when the fortress was selected, they had disappeared.

ERROR: Error in timer on entity 3836, IID 35, function FireArrows: TypeError: cmpIdentity is null ()@simulation/components/GarrisonHolder.js:68 ()@simulation/components/BuildingAI.js:119 ([object Object],0)@simulation/components/BuildingAI.js:145 ([object Object])@simulation/components/Timer.js:89

#840 fixed TypeError: entState is null Kieran P
Description

Got the following error when playing the game. It happened right after having garrisoned 20 units into a fortress, but the garrisoning failed. The units disappeared off world, but didn't show up in the garrisoned unit panel when the fortress was selected, they had disappeared.

ERROR: JavaScript error: gui/session/selection.js line 48 TypeError: entState is null ([object Array])@gui/session/selection.js:48 updateUnitCommands([object Object],[object GUIObject],[object GUIObject],[object Array])@gui/session/unit_commands.js:361 updateSelectionDetails()@gui/session/selection_details.js:280 onSimulationUpdate()@gui/session/session.js:232 onTick()@gui/session/session.js:172 eventhandler91 (tick)([object Object])@sn tick:0

#841 fixed ERROR: Script message handler OnHealthChanged failed Kieran P
Description

Got the following error when playing the game. It happened right after having garrisoned 20 units into a fortress, but the garrisoning failed. The units disappeared off world, but didn't show up in the garrisoned unit panel when the fortress was selected, they had disappeared.

ERROR: Script message handler OnHealthChanged failed

#842 fixed ReferenceError: cmpPosition is not defined Kieran P
Description

Got the following error when playing the game. It happened right after having garrisoned 20 units into a fortress, but the garrisoning failed. The units disappeared off world, but didn't show up in the garrisoned unit panel when the fortress was selected, they had disappeared.

ERROR: JavaScript error: simulation/components/GarrisonHolder.js line 148 ReferenceError: cmpPosition is not defined (3839)@simulation/components/GarrisonHolder.js:148 ()@simulation/components/GarrisonHolder.js:203 ([object Object])@simulation/components/GarrisonHolder.js:217 (3918)@simulation/components/Health.js:116 ()@simulation/components/Health.js:77 ProcessCommand(1,[object Object])@simulation/helpers/Commands.js:182

#843 fixed ERROR: Failed to call ProcessCommand() global script function Kieran P
Description

Got the following error when playing the game. It happened right after having garrisoned 20 units into a fortress, but the garrisoning failed. The units disappeared off world, but didn't show up in the garrisoned unit panel when the fortress was selected, they had disappeared.

ERROR: Failed to call ProcessCommand() global script function

#844 fixed Idle villagers button broken (garrisoned idle units not shown) ben Kieran P
Description

I'm clicking on it and 9/10 times nothing happens, 1/10 times it actually finds an idle unit.

#845 invalid Heap corruption in Windows (VC2010 debug build) Jan Wassenberg
Description

Wanted to host an MP game in a self-compiled debug build. Clicked Host, continue, and corruption is detected with the following call stack:

 	ntdll.dll!77de0844() 	
 	[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll]	
 	ntdll.dll!77d9ae38() 	
 	ntdll.dll!77d9aa6e() 	
 	ntdll.dll!77d43070() 	
 	ntdll.dll!77de10eb() 	
 	ntdll.dll!77d9ac93() 	
 	ntdll.dll!77d43070() 	
 	ntdll.dll!77de1a64() 	
 	ntdll.dll!77d9a9af() 	
 	ntdll.dll!77d43070() 	
 	ntdll.dll!77de1a64() 	
 	ntdll.dll!77d9a9af() 	
 	ntdll.dll!77d42ffa() 	
 	kernel32.dll!772c14d1() 	
>	msvcr100d.dll!_heap_alloc_base(unsigned int size=44)  Line 55	C
 	msvcr100d.dll!_heap_alloc_dbg_impl(unsigned int nSize=8, int nBlockUse=1, const char * szFileName=0x00000000, int nLine=0, int * errno_tmp=0x002cd39c)  Line 431 + 0x9 bytes	C++
 	msvcr100d.dll!_nh_malloc_dbg_impl(unsigned int nSize=8, int nhFlag=0, int nBlockUse=1, const char * szFileName=0x00000000, int nLine=0, int * errno_tmp=0x002cd39c)  Line 239 + 0x19 bytes	C++
 	msvcr100d.dll!_nh_malloc_dbg(unsigned int nSize=8, int nhFlag=0, int nBlockUse=1, const char * szFileName=0x00000000, int nLine=0)  Line 302 + 0x1d bytes	C++
 	msvcr100d.dll!malloc(unsigned int nSize=8)  Line 56 + 0x15 bytes	C++
 	msvcr100d.dll!operator new(unsigned int size=8)  Line 59 + 0x9 bytes	C++
 	pyrogenesis_dbg.exe!std::_Allocate<std::_Container_proxy>(unsigned int _Count=1, std::_Container_proxy * __formal=0x00000000)  Line 36 + 0x15 bytes	C++
 	pyrogenesis_dbg.exe!std::allocator<std::_Container_proxy>::allocate(unsigned int _Count=1)  Line 187 + 0xb bytes	C++
 	pyrogenesis_dbg.exe!std::_String_val<char,std::allocator<char> >::_String_val<char,std::allocator<char> >(std::allocator<char> _Al={...})  Line 469 + 0xa bytes	C++
 	pyrogenesis_dbg.exe!std::basic_string<char,std::char_traits<char>,std::allocator<char> >::basic_string<char,std::char_traits<char>,std::allocator<char> >(std::basic_string<char,std::char_traits<char>,std::allocator<char> > && _Right="Simulation")  Line 702 + 0x55 bytes	C++
 	pyrogenesis_dbg.exe!std::_Pair_base<ScriptInterface const *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > >::_Pair_base<ScriptInterface const *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > >(const ScriptInterface * && _Val1=0x0b0eba48, std::basic_string<char,std::char_traits<char>,std::allocator<char> > && _Val2="Simulation")  Line 146	C++
 	pyrogenesis_dbg.exe!std::pair<ScriptInterface const *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > >::pair<ScriptInterface const *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > ><ScriptInterface const *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > >(std::pair<ScriptInterface const *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > && _Right=(0x0b0eba48 {m=auto_ptr {m_runtime={...} m_cx=0x04a85a30 m_glob=0x0d402028 ...} }, "Simulation"))  Line 256	C++
 	pyrogenesis_dbg.exe!std::allocator<std::pair<ScriptInterface const *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::construct(std::pair<ScriptInterface const *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > * _Ptr=0x0b0ebd0c (0x0b0eba48 {m=auto_ptr {m_runtime={...} m_cx=0x04a85a30 m_glob=0x0d402028 ...} }, <Bad Ptr>), std::pair<ScriptInterface const *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > && _Val=(0x0b0eba48 {m=auto_ptr {m_runtime={...} m_cx=0x04a85a30 m_glob=0x0d402028 ...} }, "Simulation"))  Line 202 + 0x33 bytes	C++
 	pyrogenesis_dbg.exe!std::_Cons_val<std::allocator<std::pair<ScriptInterface const *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >,std::pair<ScriptInterface const *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::pair<ScriptInterface const *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >(std::allocator<std::pair<ScriptInterface const *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > & _Alval={...}, std::pair<ScriptInterface const *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > * _Pdest=0x0b0ebd0c (0x0b0eba48 {m=auto_ptr {m_runtime={...} m_cx=0x04a85a30 m_glob=0x0d402028 ...} }, <Bad Ptr>), std::pair<ScriptInterface const *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > && _Src=(0x0b0eba48 {m=auto_ptr {m_runtime={...} m_cx=0x04a85a30 m_glob=0x0d402028 ...} }, "Simulation"))  Line 281	C++
 	pyrogenesis_dbg.exe!std::vector<std::pair<ScriptInterface const *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<ScriptInterface const *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > >::push_back(std::pair<ScriptInterface const *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > && _Val=(0x0b0eba48 {m=auto_ptr {m_runtime={...} m_cx=0x04a85a30 m_glob=0x0d402028 ...} }, "Simulation"))  Line 650 + 0x20 bytes	C++
 	pyrogenesis_dbg.exe!CScriptStatsTable::Add(const ScriptInterface * scriptInterface=0x0b0eba48, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & title="Simulation")  Line 43 + 0x33 bytes	C++
 	pyrogenesis_dbg.exe!ScriptInterface::ScriptInterface(const char * nativeScopeName=0x0146e8e4, const char * debugName=0x0146e8d8, const boost::shared_ptr<ScriptRuntime> & runtime={...})  Line 487 + 0x23 bytes	C++
 	pyrogenesis_dbg.exe!CComponentManager::CComponentManager(CSimContext & context={...}, bool skipScriptFunctions=false)  Line 59 + 0x89 bytes	C++
 	pyrogenesis_dbg.exe!CSimulation2Impl::CSimulation2Impl(CUnitManager * unitManager=0x0b0eb790, CTerrain * terrain=0x0b0eb740)  Line 51 + 0x4d bytes	C++
 	pyrogenesis_dbg.exe!CSimulation2::CSimulation2(CUnitManager * unitManager=0x0b0eb790, CTerrain * terrain=0x0b0eb740)  Line 314 + 0x66 bytes	C++
 	pyrogenesis_dbg.exe!CGame::CGame(bool disableGraphics=false)  Line 67 + 0xb9 bytes	C++
 	pyrogenesis_dbg.exe!`anonymous namespace'::StartNetworkHost(void * cbdata=0x02e4d1b8, std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > playerName="Jan")  Line 220 + 0x21 bytes	C++
 	pyrogenesis_dbg.exe!ScriptInterface_NativeWrapper<void>::call<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >,void (__cdecl*)(void *,std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >)>(JSContext * cx=0x048f2468, unsigned __int64 & __formal=18446462607322775552, void (void *, std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >)* fptr=0x00b54d57, std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > a0="Jan")  Line 45 + 0x75 bytes	C++
 	pyrogenesis_dbg.exe!ScriptInterface::call<void,std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >,&`anonymous namespace'::StartNetworkHost>(JSContext * cx=0x048f2468, unsigned int argc=1, unsigned __int64 * vp=0x044a00b8)  Line 97 + 0x1a0 bytes	C++
 	mozjs-ps-debug.dll!5f650324() 	
 	mozjs-ps-debug.dll!5f66182d() 	
 	mozjs-ps-debug.dll!5f62a287() 	
 	mozjs-ps-debug.dll!5f62a115() 	
 	mozjs-ps-debug.dll!5f7006e3() 	
 	mozjs-ps-debug.dll!5f68fbd8() 	
 	mozjs-ps-debug.dll!5f64fa2c() 	
 	mozjs-ps-debug.dll!5f64fe97() 	
 	mozjs-ps-debug.dll!5f650e63() 	
 	mozjs-ps-debug.dll!5f5b9870() 	
 	mozjs-ps-debug.dll!5f5b9b6d() 	
 	pyrogenesis_dbg.exe!OBJECT_TO_JSVAL(JSObject * obj=0x002cefa8)  Line 220 + 0x9 bytes	C++
 	pyrogenesis_dbg.exe!IGUIObject::SendEvent(EGUIMessageType type=GUIM_PRESSED, const CStr8 & EventName={...})  Line 503	C++
 	pyrogenesis_dbg.exe!IGUIButtonBehavior::HandleMessage(SGUIMessage & Message={...})  Line 66 + 0x35 bytes	C++
 	pyrogenesis_dbg.exe!CButton::HandleMessage(SGUIMessage & Message={...})  Line 86	C++
 	pyrogenesis_dbg.exe!IGUIObject::SendEvent(EGUIMessageType type=GUIM_MOUSE_RELEASE_LEFT, const CStr8 & EventName={...})  Line 499 + 0x13 bytes	C++
 	pyrogenesis_dbg.exe!CGUI::HandleEvent(const SDL_Event_ * ev=0x002cf488)  Line 207 + 0x2e bytes	C++
 	pyrogenesis_dbg.exe!CGUIManager::HandleEvent(const SDL_Event_ * ev=0x002cf488)  Line 202 + 0x38 bytes	C++
 	pyrogenesis_dbg.exe!gui_handler(const SDL_Event_ * ev=0x002cf488)  Line 48 + 0xf bytes	C++
 	pyrogenesis_dbg.exe!in_dispatch_event(const SDL_Event_ * ev=0x002cf488)  Line 60 + 0x12 bytes	C++
 	pyrogenesis_dbg.exe!PumpEvents()  Line 149 + 0x9 bytes	C++
 	pyrogenesis_dbg.exe!Frame()  Line 309	C++
 	pyrogenesis_dbg.exe!RunGameOrAtlas(int argc=1, const char * * argv=0x03dc5db8)  Line 492 + 0x5 bytes	C++
 	pyrogenesis_dbg.exe!main(int argc=1, char * * argv=0x03dc5db8)  Line 511 + 0xd bytes	C++
 	pyrogenesis_dbg.exe!wmain(int argc=1, wchar_t * * argv=0x03dc5210)  Line 373 + 0x14 bytes	C++
 	pyrogenesis_dbg.exe!__tmainCRTStartup()  Line 552 + 0x19 bytes	C
 	pyrogenesis_dbg.exe!wmainCRTStartup()  Line 371	C
 	pyrogenesis_dbg.exe!CallStartupWithinTryBlock()  Line 385 + 0x5 bytes	C++
 	pyrogenesis_dbg.exe!wseh_EntryPoint()  Line 413	C++
 	kernel32.dll!772c3677() 	
 	ntdll.dll!77d49f02() 	
 	ntdll.dll!77d49ed5() 	

I strongly recommend we delay this release until MUCH more testing has been done. Launching atlas from in-game also failed before I recompiled it ("attempt to load the CRT in an invalid fashion" or similar).

#846 wontfix [PATCH] memleak in CJSObject::AddProperty Jan Wassenberg
Description

How to reproduce: build in debug mode, run, click editor button on main menu, exit editor via [x] button.

The following allocations leak:

{2367220} normal block at 0x00BA9690, 20 bytes long.
 Data: <   ]        N   > 14 DC BE 5D 01 00 00 00 13 02 00 00 4E 00 00 00 
{839470} normal block at 0x0A522160, 52 bytes long.
 Data: <            d a > 01 00 00 00 04 00 00 00 13 00 00 00 64 00 61 00 
[...]	
{792147} normal block at 0x0A542BD0, 8 bytes long.
 Data: <        > FF FF FF FF FF FF FF FF 
{3972} normal block at 0x00AF9AD0, 12 bytes long.
 Data: <  U         > 20 E7 55 01 0A 0E D4 00 ED 81 D2 00 
{3966} normal block at 0x00AF9E00, 8 bytes long.
 Data: <  Q ,   > 20 93 51 01 2C 04 00 00 
{3960} normal block at 0x00AF9CA8, 12 bytes long.
 Data: <  U         > 20 E7 55 01 14 1A D2 00 AE ED D2 00 
{3954} normal block at 0x00AF9B40, 12 bytes long.
 Data: <  U ,`  t2  > 20 E7 55 01 2C 60 D3 00 74 32 D2 00 
{3949} normal block at 0x00AF9320, 12 bytes long.
 Data: <  U  9   U  > 20 E7 55 01 D4 39 D4 00 0B 55 D2 00 
{3944} normal block at 0x00AF98B8, 8 bytes long.
 Data: <  Q "   > 20 93 51 01 22 04 00 00 
{3938} normal block at 0x00AF9760, 8 bytes long.
 Data: <  U (   > B4 E7 55 01 28 04 00 00 
{3932} normal block at 0x00AF9608, 8 bytes long.
 Data: <  U $   > 94 E7 55 01 24 04 00 00 
{3926} normal block at 0x00AF94B0, 8 bytes long.
 Data: <  Q !   > 20 93 51 01 21 04 00 00 
{3920} normal block at 0x00AE31B8, 8 bytes long.
 Data: <  Q     > 20 93 51 01 20 04 00 00 
{3914} normal block at 0x00AF91C8, 12 bytes long.
 Data: <  U  W  (j  > 20 E7 55 01 FD 57 D3 00 28 6A D2 00 
{3907} normal block at 0x00AF62C8, 12 bytes long.
 Data: <  U         > 20 E7 55 01 A6 EB D2 00 E6 0A D3 00 
{3896} normal block at 0x00AE3328, 8 bytes long.
 Data: <  Q     > 20 93 51 01 E6 03 00 00 
{3890} normal block at 0x00C27280, 8 bytes long.
 Data: <  Q     > 20 93 51 01 E4 03 00 00 
{3884} normal block at 0x00AE0DA0, 8 bytes long.
 Data: <  Q     > 20 93 51 01 E5 03 00 00 

3884 has the following call stack:

	msvcr100d.dll!operator new(unsigned int size=8)  Line 59 + 0x9 bytes	C++
	pyrogenesis_dbg.exe!CJSObject<CGameViewImpl,0>::AddProperty<bool>(const CStrW & PropertyName={...}, bool * Native=0x000003e5, bool PropReadOnly=false)  Line 340 + 0x7 bytes	C++
	pyrogenesis_dbg.exe!CGameViewImpl::ScriptingInit()  Line 387 + 0x4a bytes	C++
	pyrogenesis_dbg.exe!CGameView::ScriptingInit()  Line 367	C++
	pyrogenesis_dbg.exe!RegisterJavascriptInterfaces()  Line 310	C++
	pyrogenesis_dbg.exe!InitScripting()  Line 334	C++
	pyrogenesis_dbg.exe!Init(const CmdLineArgs & args={...}, int __formal=0)  Line 815	C++
	pyrogenesis_dbg.exe!RunGameOrAtlas(int argc=1, const char * * argv=0x00c25db8)  Line 488 + 0xb bytes	C++
	pyrogenesis_dbg.exe!main(int argc=1, char * * argv=0x00c25db8)  Line 512 + 0xd bytes	C++
	pyrogenesis_dbg.exe!wmain(int argc=1, wchar_t * * argv=0x00c25210)  Line 373 + 0x14 bytes	C++
	pyrogenesis_dbg.exe!__tmainCRTStartup()  Line 552 + 0x19 bytes	C
	pyrogenesis_dbg.exe!wmainCRTStartup()  Line 371	C
	pyrogenesis_dbg.exe!CallStartupWithinTryBlock()  Line 385 + 0x5 bytes	C++
	pyrogenesis_dbg.exe!wseh_EntryPoint()  Line 413	C++
#847 fixed [PATCH] Mac: Not all screen space is being used Echelon9 Kieran P
Description

On Mac OS X, only 1024x768 appears to be rendered, even though my screen size is 1280x800.

It would be nice to be able to play on a Mac using actual full screen.

#849 fixed Assertion failed error when trying to save a map in Atlas Erik Johansson
Description

Every time I try to save a map in Atlas I get the following error:

Assertion failed: "0 && (L"FYI: WARN_IF_FALSE reports that a function failed. Feel free to ignore or suppress this warning.")"
Location: waio.cpp:432 (waio_Preallocate)

Call stack:

waio_Preallocate (waio.cpp:432)
    fd = 7 (0x00000007)
    size = 656423 (0x00000000000A0427)

io::Store<io::DefaultCompletedHook,io::DefaultIssueHook> (io.h:291)
    pathname = (unavailable)
    data = 0x161B1000
    size = 656423 (0x000A0427)
    p = 0x0012F8C0 -> 
        alignment = 1 (0x0000000000000001)
        blockSize = 0 (0x00000000)
        queueDepth = 1 (0x00000001)

    completedHook = 0x00408403 -> (io::DefaultCompletedHook)
    issueHook = 0x00408403 (see above)
    op = 
        fd = 7 (0x00000007)
        opcode = 0 (0x00000000)
        offset = 2819315317342208 (0x000A042700000000)
        size = 1592884485391646720 (0x161B100000000000)
        buf = 0xCF1B0820

    file = 
        pathname = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 7

        fd = 7 (0x00000007)
        opcode = 3474655240 (0xCF1B0808)

    status_ = 32082840131 (0x0000000778494A43)

RealDirectory::Store (real_directory.cpp:57)
    this = (unavailable)
    name = 0x0012F900 -> 
        path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
        separator = [8] { 20512, 318, 2312, 53019, 63880, 18, 0, 0 }

    fileContents = 0x0012F800 -> 
        px = 0x005E2360 -> "0"
        pn = 
            pi_ = 0x00643DE8 -> 
                use_count_ = 0 (0x00000000)
                weak_count_ = 0 (0x00000000)



    size = 656423 (0x000A0427)

VFS::CreateFile (vfs.cpp:139)
    this = (unavailable)
    pathname = 0x0012FADC -> 
        path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
        separator = [8] { 47 ('/'), 0, 2768, 53019, 64380, 18, 6305, 92 ('\') }

    fileContents = 0x0012F9C8 -> 
        px = 0x161B1000 (see above)
        pn = 
            pi_ = 0x133B2848 -> 
                use_count_ = 2 (0x00000002)
                weak_count_ = 1 (0x00000001)



    size = 656423 (0x000A0427)
    directory = 0x01354328 -> 
        m_files = (error -100500 while analyzing map<Path,VfsFile >)
        m_subdirectories = (error -100500 while analyzing map<Path,VfsDirectory >)
        m_realDirectory = 
            px = 0x0062006F -> 
                (IFileLoader)
                m_path = 
                    path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
                    separator = [8] { 3072, 0, 22528, 23680, 3072, 0, 24576, 23680 }

                m_priority = 1551915008 (0x5C805800)
                m_flags = 3072 (0x00000C00)
                m_watch = 
                    px = 0x5C806000 -> 
                        link = 
                            m_prev = (unavailable - internal error)

                            m_next = (unavailable - internal error)


                        request = 
                            px = (unavailable - internal error)

                            pn = 
                                pi_ = (unavailable - internal error)




                    pn = 
                        pi_ = 0x00000F00



            pn = 
                pi_ = 0x0134F628 -> 
                    use_count_ = 20248104 (0x0134F628)
                    weak_count_ = 20248104 (0x0134F628)



        m_shouldPopulate = 0 (0x00000000)

    name = 
        path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
        separator = 26297

    file = 
        m_name = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 0

        m_size = 3474655540 (0xCF1B0934)
        m_mtime = 91125118528389124 (0x0143BDD000000004)
        m_priority = 4228666 (0x0040863A)
        m_loader = 
            px = 0x161B1008 -> (IFileLoader)
            pn = 
                pi_ = 0x0012F9C4 -> 
                    use_count_ = 370872320 (0x161B1000)
                    weak_count_ = 322644040 (0x133B2848)




    s = (ScopedLock)
    status_ = 87517328819879936 (0x0136EC8C00000000)

CFilePacker::Write (fileio.cpp:68)
    this = (unavailable)
    filename = 0x0012FADC (see above)
    payloadSize_le = 370872320 (0x161B1000)

CMapWriter::SaveMap (mapwriter.cpp:65)
    this = (unavailable)
    pathname = 0x0012FADC (see above)
    pTerrain = 0x0143BDD0 -> 
        m_MapSize = 257 (0x00000101)
        m_MapSizePatches = 16 (0x00000010)
        m_Patches = 0x14200024 -> 
            
                m_Bounds = 
                    m_Data = [2] 
                        
                            X = 0.000000 (0x00000000)
                            Y = 0.000000 (0x00000000)
                            Z = 0.000000 (0x00000000)

                        
                            X = 64.000000 (0x42800000)
                            Y = 22.382513 (0x41B30F63)
                            Z = 64.000000 (0x42800000)


                m_Transform = 
                    _11 = 1.000000 (0x3F800000)
                    _21 = 0.000000 (0x00000000)
                    _31 = 0.000000 (0x00000000)
                    _41 = 0.000000 (0x00000000)
                    _12 = 0.000000 (0x00000000)
                    _22 = 1.000000 (0x3F800000)
                    _32 = 0.000000 (0x00000000)
                    _42 = 0.000000 (0x00000000)
                    _13 = 0.000000 (0x00000000)
                    _23 = 0.000000 (0x00000000)
                    _33 = 1.000000 (0x3F800000)
                    _43 = 0.000000 (0x00000000)
                    _14 = 0.000000 (0x00000000)
                    _24 = 0.000000 (0x00000000)
                    _34 = 0.000000 (0x00000000)
                    _44 = 1.000000 (0x3F800000)
                    _data = [16] 
                        1.000000 (0x3F800000)
                        0.000000 (0x00000000)
                        0.000000 (0x00000000)
                        0.000000 (0x00000000)
                        0.000000 (0x00000000)
                        1.000000 (0x3F800000)
                        0.000000 (0x00000000)
                        0.000000 (0x00000000)
                        0.000000 (0x00000000)
                        0.000000 (0x00000000)
                        1.000000 (0x3F800000)
                        0.000000 (0x00000000) ...
                    _data2d = [4] 
                        [4] { 1.000000 (0x3F800000), 0.000000 (0x00000000), 0.000000 (0x00000000), 0.000000 (0x00000000) }
                        [4] { 0.000000 (0x00000000), 1.000000 (0x3F800000), 0.000000 (0x00000000), 0.000000 (0x00000000) }
                        [4] { 0.000000 (0x00000000), 0.000000 (0x00000000), 1.000000 (0x3F800000), 0.000000 (0x00000000) }
                        [4] { 0.000000 (0x00000000), 0.000000 (0x00000000), 0.000000 (0x00000000), 1.000000 (0x3F800000) }

                m_InvTransform = 
                    _11 = 0.000000 (0x00000000)
                    _21 = 0.000000 (0x00000000)
                    _31 = 0.000000 (0x00000000)
                    _41 = 0.000000 (0x00000000)
                    _12 = 0.000000 (0x00000000)
                    _22 = 0.000000 (0x00000000)
                    _32 = 0.000000 (0x00000000)
                    _42 = 0.000000 (0x00000000)
                    (too much output; skipping to next top-level symbol)

                m_RenderData = 0x00000000
                m_BoundsValid = true 

            m_bWillBeDrawn = false
            m_MiniPatches = [16] 
                [16] 
                    
                        Tex = 0x131FAB50 -> 
                            m_Tag = { (error -100500 while analyzing string >) }
                            m_pProperties = 
                                px = 0x13206550 -> 
                                    m_pParent = 
                                        px = 0x13147F88 -> 
                                            m_pParent = 
                                                px = 0x00000000
                                                pn = 
                                                    pi_ = 0x00000000


                                            m_BaseColor = 0 (0x00000000)
                                            m_HasBaseColor = false
                                            m_MovementClass = { (error -100500 while analyzing string >) }
                                            m_Groups = (error -100500 while analyzing vector<CTerrainGroup * >)

                                        pn = 
                                            pi_ = 0x13076918 -> 
                                                use_count_ = 74 (0x0000004A)
                                                weak_count_ = 1 (0x00000001)



                                    m_BaseColor = 0 (0x00000000)
                                    m_HasBaseColor = false
                                    m_MovementClass = { (error -100500 while analyzing string >) }
                                    m_Groups = (error -100500 while analyzing vector<CTerrainGroup * >)

                                pn = 
                                    pi_ = 0x13206FE8 -> 
                                        use_count_ = 9 (0x00000009)
                                        weak_count_ = 1 (0x00000001)



                            m_Texture = 
                                px = 0x131F3B88 -> 
                                    m_Properties = 
                                        m_Path = 
                                            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
                                            separator = "/r✃"

                                        m_Filter = 9987 (0x00002703)
                                        m_Wrap = 10497 (0x00002901)
                                        m_Aniso = 2.000000 (0x40000000)

                                    m_Handle = 622770258065 (0x0000009100000091)
                                    m_BaseColour = 4286154066 (0xFF798552)
                                    m_State = LOADED
                                    m_TextureManager = 0x013E9918 -> 
                                        m_VFS = 
                                            px = 0x01354328 (see above)
                                            pn = 
                                                pi_ = 0x0135C040 -> 
                                                    use_count_ = 4 (0x00000004)
                                                    weak_count_ = 1 (0x00000001)



                                        m_CacheLoader = 
                                            m_VFS = 
                                                px = 0x01354328 (see above)
                                                pn = 
                                                    pi_ = 0x0135C040 (see above)


                                            m_FileExtension = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)

                                        m_DisableGL = false
                                        m_TextureConverter = 
                                            m_VFS = 
                                                px = 0x01354328 (see above)
                                                pn = 
                                                    pi_ = 0x0135C040 (see above)


                                            m_HighQuality = false
                                            m_WorkerThread = 1544 (0x00000608)
                                            m_WorkerMutex = 0x00161178
                                            m_WorkerSem = 0x0000060C
                                            m_RequestQueue = (error -100500 while analyzing deque<boost::shared_ptr<CTextureConverter::ConversionRequest> >)
                                            m_ResultQueue = (error -100500 while analyzing deque<boost::shared_ptr<CTextureConverter::ConversionResult> >)
                                            m_Shutdown = false

                                        m_DefaultHandle = 4294967297 (0x0000000100000001)
                                        m_ErrorHandle = 8589934594 (0x0000000200000002)
                                        m_ErrorTexture = 
                                            px = 0x0135B330 -> 
                                                m_Properties = 
                                                    m_Path = 
                                                        path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
                                                        separator = "/f✃"

                                                    m_Filter = 9987 (0x00002703)
                                                    m_Wrap = 10497 (0x00002901)
                                                    m_Aniso = 1.000000 (0x3F800000)

                                                m_Handle = 8589934594 (0x0000000200000002)
                                                m_BaseColour = 0 (0x00000000)
                                                m_State = LOADED
                                                m_TextureManager = 0x013E9918 (see above)
                                                m_Self = 
                                                    px = 0x0135B330 (see above)
                                                    pn = 
                                                        pi_ = 0x01403F18 -> 
                                                            use_count_ = 1 (0x00000001)
                                                            weak_count_ = 2 (0x00000002)




                                            pn = 
                                                pi_ = 0x01403F18 (see above)


                                        m_TextureCache = 
                                            table_ = 
                                                
                                                    
                                                        buckets_ = 0x13228798 -> 
                                                            next_ = 0x1323CFC8 -> 
                                                                next_ = 0x1322BAB0 -> 
                                                                    next_ = 0x131DD1E0 -> 
                                                                        next_ = 0x00000000




                                                        bucket_count_ = 769 (0x00000301)
                                                        allocators_ = 
                                                            
                                                                (error -100500 while analyzing )
                                                                (error -100500 while analyzing )



                                                    
                                                        current_ = false
                                                        funcs_ = [2] { { data_ = { buf = [2] { [8] { 0, 0, 103 ('g'), 101 ('e'), 95 ('_'), 49 ('1'), 48 ('0'), 240 }, [8] { 0, 103 ('g'), 101 ('e'), 95 ('_'), 49 ('1'), 48 ('0'), 240, 2 } }, align_ = 
                                                                        t0 = [8] { 0, 0, 103 ('g'), 101 ('e'), 95 ('_'), 49 ('1'), 48 ('0'), 240 }
                                                                        t1 = [8] { 0, 0, 103 ('g'), 101 ('e'), 95 ('_'), 49 ('1'), 48 ('0'), 240 }
                                                                        t2 = [8] { 0, 0, 103 ('g'), 101 ('e'), 95 ('_'), 49 ('1'), 48 ('0'), 240 }
                                                                        t3 = [8] { 0, 0, 103 ('g'), 101 ('e'), 95 ('_'), 49 ('1'), 48 ('0'), 240 }
                                                                        t4 = [8] { 0, 0, 103 ('g'), 101 ('e'), 95 ('_'), 49 ('1'), 48 ('0'), 240 }
                                                                        t5 = [8] { 0, 0, 103 ('g'), 101 ('e'), 95 ('_'), 49 ('1'), 48 ('0'), 240 }
                                                                        t6 = [8] { 0, 0, 103 ('g'), 101 ('e'), 95 ('_'), 49 ('1'), 48 ('0'), 240 }
                                                                        t7 = [8] { 0, 0, 103 ('g'), 101 ('e'), 95 ('_'), 49 ('1'), 48 ('0'), 240 }
                                                                        t8 = [8] { 0, 0, 103 ('g'), 101 ('e'), 95 ('_'), 49 ('1'), 48 ('0'), 240 }
                                                                        t9 = [8] { 0, 0, 103 ('g'), 101 ('e'), 95 ('_'), 49 ('1'), 48 ('0'), 240 }
                                                                        t10 = [8] { 0, 0, 103 ('g'), 101 ('e'), 95 ('_'), 49 ('1'), 48 ('0'), 240 }
                                                                        t11 = [8] { 0, 0, 103 ('g'), 101 ('e'), 95 ('_'), 49 ('1'), 48 ('0'), 240 }
                                                                        t12 = [8] { 0, 0, 103 ('g'), 101 ('e'), 95 ('_'), 49 ('1'), 48 ('0'), 240 }
                                                                        t13 = [8] { 0, 0, 103 ('g'), 101 ('e'), 95 ('_'), 49 ('1'), 48 ('0'), 240 }
                                                                        t14 = [8] { 0, 0, 103 ('g'), 101 ('e'), 95 ('_'), 49 ('1'), 48 ('0'), 240 }
                                                                        t15 = [8] { 0, 0, 103 ('g'), 101 ('e'), 95 ('_'), 49 ('1'), 48 ('0'), 240 }
                                                                        t16 = [8] { 0, 0, 103 ('g'), 101 ('e'), 95 ('_'), 49 ('1'), 48 ('0'), 240 }
                                                                        t17 = [8] { 0, 0, 103 ('g'), 101 ('e'), 95 ('_'), 49 ('1'), 48 ('0'), 240 }
                                                                        t18 = [8] { 0, 0, 103 ('g'), 101 ('e'), 95 ('_'), 49 ('1'), 48 ('0'), 240 }
                                                                        t19 = [8] { 0, 0, 103 ('g'), 101 ('e'), 95 ('_'), 49 ('1'), 48 ('0'), 240 }
                                                                        t20 = [8] { 0, 0, 103 ('g'), 101 ('e'), 95 ('_'), 49 ('1'), 48 ('0'), 240 }
                                                                        t21 = [8] { 0, 0, 103 ('g'), 101 ('e'), 95 ('_'), 49 ('1'), 48 ('0'), 240 }
                                                                        t22 = [8] { 0, 0, 103 ('g'), 101 ('e'), 95 ('_'), 49 ('1'), 48 ('0'), 240 }
                                                                        t23 = [8] { 0, 0, 103 ('g'), 101 ('e'), 95 ('_'), 49 ('1'), 48 ('0'), 240 }
 } }, { data_ = { buf = "ge_10ð", align_ = 
                                                                        t0 = "ge_10ð"
                                                                        t1 = "ge_10ð"
                                                                        t2 = "ge_10ð"
                                                                        t3 = "ge_10ð"
                                                                        t4 = "ge_10ð"
                                                                        t5 = "ge_10ð"
                                                                        t6 = "ge_10ð"
                                                                        t7 = "ge_10ð"
                                                                        t8 = "ge_10ð"
                                                                        t9 = "ge_10ð"
                                                                        t10 = "ge_10ð"
                                                                        t11 = "ge_10ð"
                                                                        t12 = "ge_10ð"
                                                                        t13 = "ge_10ð"
                                                                        t14 = "ge_10ð"
                                                                        t15 = "ge_10ð"
                                                                        t16 = "ge_10ð"
                                                                        t17 = "ge_10ð"
                                                                        t18 = "ge_10ð"
                                                                        t19 = "ge_10ð"
                                                                        t20 = "ge_10ð"
                                                                        t21 = "ge_10ð"
                                                                        t22 = "ge_10ð"
                                                                        t23 = "ge_10ð"
 } } }

                                                    size_ = 752 (0x000002F0)
                                                    mlf_ = 1.000000 (0x3F800000)
                                                    cached_begin_bucket_ = 0x13228798 (see above)
                                                    max_load_ = 769 (0x00000301)



                                        m_HotloadFiles = 
                                            table_ = 
                                                
                                                    
                                                        buckets_ = 0x1322A008 -> 
                                                            next_ = 0x00000000

                                                        bucket_count_ = 769 (0x00000301)
                                                        allocators_ = 
                                                            
                                                                (error -100500 while analyzing )
                                                                (error -100500 while analyzing )



                                                    
                                                        current_ = false
                                                        funcs_ = "L_Aû"

                                                    size_ = 763 (0x000002FB)
                                                    mlf_ = 1.000000 (0x3F800000)
                                                    cached_begin_bucket_ = 0x1322A00C -> 
                                                        next_ = 0x13212FB8 -> 
                                                            next_ = 0x00000000


                                                    max_load_ = 769 (0x00000301)



                                        m_SettingsFiles = 
                                            table_ = 
                                                
                                                    
                                                        buckets_ = 0x1339EFF8 -> 
                                                            next_ = 0x00000000

                                                        bucket_count_ = 17 (0x00000011)
                                                        allocators_ = 
                                                            
                                                                (error -100500 while analyzing )
                                                                (error -100500 while analyzing )



                                                    
                                                        current_ = false
                                                        funcs_ = "B_t"

                                                    size_ = 11 (0x0000000B)
                                                    mlf_ = 1.000000 (0x3F800000)
                                                    cached_begin_bucket_ = 0x1339F010 -> 
                                                        next_ = 0x13289AA8 -> 
                                                            next_ = 0x00000000


                                                    max_load_ = 17 (0x00000011)




                                    m_Self = 
                                        px = 0x131F3B88 (see above)
                                        pn = 
                                            pi_ = 0x131FABA0 -> 
                                                use_count_ = 2 (0x00000002)
                                                weak_count_ = 9 (0x00000009)




                                pn = 
                                    pi_ = 0x131FABA0 (see above)


                            m_BaseColor = 0 (0x00000000)
                            m_BaseColorValid = false
                            m_Groups = (error -100500 while analyzing vector<CTerrainGroup * >)

                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)
 ...
                [16] 
                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)
 ...
                [16] 
                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)
 ...
                [16] 
                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)
 ...
                [16] 
                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)
 ...
                [16] 
                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)
 ...
                [16] 
                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)
 ...
                [16] 
                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)

                    
                        Tex = 0x131FAB50 (see above)
                        Priority = 0 (0x00000000)
 ... ...
            m_X = 0 (0x00000000)
            m_Z = 0 (0x00000000)
            m_Parent = 0x0143BDD0 (see above)

        m_Heightmap = 0x13298008 -> 16384 (0x4000)
        m_BaseColour = 
            R = [8] { 255 (0xFF), 255 (0xFF), 255 (0xFF), 255 (0xFF), 0 (0x00), 0 (0x00), 0 (0x00), 0 (0x00) }
            G = [8] { 255 (0xFF), 255 (0xFF), 255 (0xFF), 0 (0x00), 0 (0x00), 0 (0x00), 0 (0x00), 7 (0x07) }
            B = [8] { 255 (0xFF), 255 (0xFF), 0 (0x00), 0 (0x00), 0 (0x00), 0 (0x00), 7 (0x07), 0 (0x00) }
            A = [8] { 255 (0xFF), 0 (0x00), 0 (0x00), 0 (0x00), 0 (0x00), 7 (0x07), 0 (0x00), 4 (0x04) }


    pWaterMan = 0x013E5020 -> 
        m_WaterTexture = [60] 
            
                px = 0x1325BA58 -> 
                    m_Properties = 
                        m_Path = 
                            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
                            separator = "/r✃"

                        m_Filter = 9987 (0x00002703)
                        m_Wrap = 10497 (0x00002901)
                        m_Aniso = 1.000000 (0x3F800000)

                    m_Handle = 94489280534 (0x0000001600000016)
                    m_BaseColour = 2245252051 (0x85D3D3D3)
                    m_State = LOADED
                    m_TextureManager = 0x013E9918 (see above)
                    m_Self = 
                        px = 0x1325BA58 (see above)
                        pn = 
                            pi_ = 0x1328A008 -> 
                                use_count_ = 2 (0x00000002)
                                weak_count_ = 9 (0x00000009)




                pn = 
                    pi_ = 0x1328A008 (see above)


            
                px = 0x13238F98 -> 
                    m_Properties = 
                        m_Path = 
                            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
                            separator = "/r✃"

                        m_Filter = 9987 (0x00002703)
                        m_Wrap = 10497 (0x00002901)
                        m_Aniso = 1.000000 (0x3F800000)

                    m_Handle = 240518168632 (0x0000003800000038)
                    m_BaseColour = 2245252051 (0x85D3D3D3)
                    m_State = LOADED
                    m_TextureManager = 0x013E9918 (see above)
                    m_Self = 
                        px = 0x13238F98 (see above)
                        pn = 
                            pi_ = 0x1328A038 -> 
                                use_count_ = 2 (0x00000002)
                                weak_count_ = 9 (0x00000009)




                pn = 
                    pi_ = 0x1328A038 (see above)


            
                px = 0x1325B7F0 -> 
                    m_Properties = 
                        m_Path = 
                            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
                            separator = "/r✃"

                        m_Filter = 9987 (0x00002703)
                        m_Wrap = 10497 (0x00002901)
                        m_Aniso = 1.000000 (0x3F800000)

                    m_Handle = 244813135929 (0x0000003900000039)
                    m_BaseColour = 2245252051 (0x85D3D3D3)
                    m_State = LOADED
                    m_TextureManager = 0x013E9918 (see above)
                    m_Self = 
                        px = 0x1325B7F0 (see above)
                        pn = 
                            pi_ = 0x1328A0A8 -> (too much output; skipping to next top-level symbol)



                pn = 
                    pi_ = 0x1328A0A8 (see above)


            
                px = 0x1325B460 -> 
                    m_Properties = 
                        m_Path = 
                            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
                            separator = "/r✃"

                        m_Filter = 9987 (0x00002703)
                        m_Wrap = 10497 (0x00002901)
                        m_Aniso = 1.000000 (0x3F800000)

                    m_Handle = 532575944828 (0x0000007C0000007C)
                    m_BaseColour = 2245252051 (0x85D3D3D3)
                    m_State = LOADED
                    m_TextureManager = 0x013E9918 (see above)
                    m_Self = 
                        px = 0x1325B460 (see above)
                        pn = 
                            pi_ = 0x1328A118 -> 
                                use_count_ = 2 (0x00000002)
                                weak_count_ = 9 (0x00000009)




                pn = 
                    pi_ = 0x1328A118 (see above)


            
                px = 0x1328A188 -> 
                    m_Properties = 
                        m_Path = 
                            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
                            separator = [8] { 47 ('/'), 0, 9987, 0, 10497, 0, 0, 16256 }

                        m_Filter = 9987 (0x00002703)
                        m_Wrap = 10497 (0x00002901)
                        m_Aniso = 1.000000 (0x3F800000)

                    m_Handle = 115964117019 (0x0000001B0000001B)
                    m_BaseColour = 2228474835 (0x84D3D3D3)
                    m_State = LOADED
                    m_TextureManager = 0x013E9918 (see above)
                    m_Self = 
                        px = 0x1328A188 (see above)
                        pn = 
                            pi_ = 0x1328A1E0 -> 
                                use_count_ = 2 (0x00000002)
                                weak_count_ = 9 (0x00000009)




                pn = 
                    pi_ = 0x1328A1E0 (see above)


            
                px = 0x1328A250 -> 
                    m_Properties = 
                        m_Path = 
                            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
                            separator = [8] { 47 ('/'), 0, 9987, 0, 10497, 0, 0, 16256 }

                        m_Filter = 9987 (0x00002703)
                        m_Wrap = 10497 (0x00002901)
                        m_Aniso = 1.000000 (0x3F800000)

                    m_Handle = 408021893215 (0x0000005F0000005F)
                    m_BaseColour = 2228474835 (0x84D3D3D3)
                    m_State = LOADED
                    m_TextureManager = 0x013E9918 (see above)
                    m_Self = 
                        px = 0x1328A250 (see above)
                        pn = 
                            pi_ = 0x1328A2A8 -> 
                                use_count_ = 2 (0x00000002)
                                weak_count_ = 9 (0x00000009)




                pn = 
                    pi_ = 0x1328A2A8 (see above)


            
                px = 0x1328A318 -> 
                    m_Properties = 
                        m_Path = 
                            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
                            separator = [8] { 47 ('/'), 0, 9987, 0, 10497, 0, 0, 16256 }

                        m_Filter = 9987 (0x00002703)
                        m_Wrap = 10497 (0x00002901)
                        m_Aniso = 1.000000 (0x3F800000)

                    m_Handle = 223338299444 (0x0000003400000034)
                    m_BaseColour = 2228474835 (0x84D3D3D3)
                    m_State = LOADED
                    m_TextureManager = 0x013E9918 (see above)
                    m_Self = 
                        px = 0x1328A318 (see above)
                        pn = 
                            pi_ = 0x1328A370 -> 
                                use_count_ = 2 (0x00000002)
                                weak_count_ = 9 (0x00000009)




                pn = 
                    pi_ = 0x1328A370 (see above)


            
                px = 0x1328A3E0 -> 
                    m_Properties = 
                        m_Path = 
                            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
                            separator = [8] { 47 ('/'), 0, 9987, 0, 10497, 0, 0, 16256 }

                        m_Filter = 9987 (0x00002703)
                        m_Wrap = 10497 (0x00002901)
                        m_Aniso = 1.000000 (0x3F800000)

                    m_Handle = 249108103226 (0x0000003A0000003A)
                    m_BaseColour = 2228474835 (0x84D3D3D3)
                    m_State = LOADED
                    m_TextureManager = 0x013E9918 (see above)
                    m_Self = 
                        px = 0x1328A3E0 (see above)
                        pn = 
                            pi_ = 0x1328A438 -> 
                                use_count_ = 2 (0x00000002)
                                weak_count_ = 9 (0x00000009)




                pn = 
                    pi_ = 0x1328A438 (see above)

 ...
        m_NormalMap = [60] 
            
                px = 0x1327C580 -> 
                    m_Properties = 
                        m_Path = 
                            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
                            separator = [8] { 47 ('/'), 0, 9987, 0, 10497, 0, 0, 16256 }

                        m_Filter = 9987 (0x00002703)
                        m_Wrap = 10497 (0x00002901)
                        m_Aniso = 1.000000 (0x3F800000)

                    m_Handle = 210453397553 (0x0000003100000031)
                    m_BaseColour = 4286480383 (0xFF7E7FFF)
                    m_State = LOADED
                    m_TextureManager = 0x013E9918 (see above)
                    m_Self = 
                        px = 0x1327C580 (see above)
                        pn = 
                            pi_ = 0x1327C5D8 -> 
                                use_count_ = 2 (0x00000002)
                                weak_count_ = 9 (0x00000009)




                pn = 
                    pi_ = 0x1327C5D8 (see above)


            
                px = 0x1327C770 -> 
                    m_Properties = 
                        m_Path = 
                            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
                            separator = [8] { 47 ('/'), 0, 9987, 0, 10497, 0, 0, 16256 }

                        m_Filter = 9987 (0x00002703)
                        m_Wrap = 10497 (0x00002901)
                        m_Aniso = 1.000000 (0x3F800000)

                    m_Handle = 558345748610 (0x0000008200000082)
                    m_BaseColour = 4286480383 (0xFF7E7FFF)
                    m_State = LOADED
                    m_TextureManager = 0x013E9918 (see above)
                    m_Self = 
                        px = 0x1327C770 (see above)
                        pn = 
                            pi_ = 0x1327C7C8 -> 
                                use_count_ = 2 (0x00000002)
                                weak_count_ = 9 (0x00000009)




                pn = 
                    pi_ = 0x1327C7C8 (see above)


            
                px = 0x1327C960 -> 
                    m_Properties = 
                        m_Path = 
                            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
                            separator = [8] { 47 ('/'), 0, 9987, 0, 10497, 0, 0, 16256 }

                        m_Filter = 9987 (0x00002703)
                        m_Wrap = 10497 (0x00002901)
                        m_Aniso = 1.000000 (0x3F800000)

                    m_Handle = 463856468076 (0x0000006C0000006C)
                    m_BaseColour = 4286480383 (0xFF7E7FFF)
                    m_State = LOADED
                    m_TextureManager = 0x013E9918 (see above)
                    m_Self = 
                        px = 0x1327C960 (see above)
                        pn = 
                            pi_ = 0x1327C9B8 -> 
                                use_count_ = 2 (0x00000002)
                                weak_count_ = 9 (0x00000009)




                pn = 
                    pi_ = 0x1327C9B8 (see above)


            
                px = 0x1327CB50 -> 
                    m_Properties = 
                        m_Path = 
                            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
                            separator = [8] { 47 ('/'), 0, 9987, 0, 10497, 0, 0, 16256 }

                        m_Filter = 9987 (0x00002703)
                        m_Wrap = 10497 (0x00002901)
                        m_Aniso = 1.000000 (0x3F800000)

                    m_Handle = 476741369967 (0x0000006F0000006F)
                    m_BaseColour = 4286480383 (0xFF7E7FFF)
                    m_State = LOADED
                    m_TextureManager = 0x013E9918 (see above)
                    m_Self = 
                        px = 0x1327CB50 (see above)
                        pn = 
                            pi_ = 0x1327CBA8 -> 
                                use_count_ = 2 (0x00000002)
                                weak_count_ = 9 (0x00000009)




                pn = 
                    pi_ = 0x1327CBA8 (see above)


            
                px = 0x1327CD40 -> 
                    m_Properties = 
                        m_Path = 
                            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
                            separator = [8] { 47 ('/'), 0, 9987, 0, 10497, 0, 0, 16256 }

                        m_Filter = 9987 (0x00002703)
                        m_Wrap = 10497 (0x00002901)
                        m_Aniso = 1.000000 (0x3F800000)

                    m_Handle = 386547056730 (0x0000005A0000005A)
                    m_BaseColour = 4286480383 (0xFF7E7FFF)
                    m_State = LOADED
                    m_TextureManager = 0x013E9918 (see above)
                    m_Self = 
                        px = 0x1327CD40 (see above)
                        pn = 
                            pi_ = 0x1327CD98 -> 
                                use_count_ = 2 (0x00000002)
                                weak_count_ = 9 (0x00000009)




                pn = 
                    pi_ = 0x1327CD98 (see above)


            
                px = 0x1327CF30 -> 
                    m_Properties = 
                        m_Path = 
                            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
                            separator = [8] { 47 ('/'), 0, 9987, 0, 10497, 0, 0, 16256 }

                        m_Filter = 9987 (0x00002703)
                        m_Wrap = 10497 (0x00002901)
                        m_Aniso = 1.000000 (0x3F800000)

                    m_Handle = 382252089433 (0x0000005900000059)
                    m_BaseColour = 4286480383 (0xFF7E7FFF)
                    m_State = LOADED
                    m_TextureManager = 0x013E9918 (see above)
                    m_Self = 
                        px = 0x1327CF30 (see above)
                        pn = 
                            pi_ = 0x1327CF88 -> 
                                use_count_ = 2 (0x00000002)
                                weak_count_ = 9 (0x00000009)




                pn = 
                    pi_ = 0x1327CF88 (see above)


            
                px = 0x1327D120 -> 
                    m_Properties = 
                        m_Path = 
                            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
                            separator = [8] { 47 ('/'), 0, 9987, 0, 10497, 0, 0, 16256 }

                        m_Filter = 9987 (0x00002703)
                        m_Wrap = 10497 (0x00002901)
                        m_Aniso = 1.000000 (0x3F800000)

                    m_Handle = 403726925918 (0x0000005E0000005E)
                    m_BaseColour = 4286480383 (0xFF7E7FFF)
                    m_State = LOADED
                    m_TextureManager = 0x013E9918 (see above)
                    m_Self = 
                        px = 0x1327D120 (see above)
                        pn = 
                            pi_ = 0x1327D178 -> 
                                use_count_ = 2 (0x00000002)
                                weak_count_ = 9 (0x00000009)




                pn = 
                    pi_ = 0x1327D178 (see above)


            
                px = 0x1327D310 -> 
                    m_Properties = 
                        m_Path = 
                            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
                            separator = [8] { 47 ('/'), 0, 9987, 0, 10497, 0, 0, 16256 }

                        m_Filter = 9987 (0x00002703)
                        m_Wrap = 10497 (0x00002901)
                        m_Aniso = 1.000000 (0x3F800000)

                    m_Handle = 468151435373 (0x0000006D0000006D)
                    m_BaseColour = 4286480383 (0xFF7E7FFF)
                    m_State = LOADED
                    m_TextureManager = 0x013E9918 (see above)
                    m_Self = 
                        px = 0x1327D310 (see above)
                        pn = 
                            pi_ = 0x1327D368 -> 
                                use_count_ = 2 (0x00000002)
                                weak_count_ = 9 (0x00000009)




                pn = 
                    pi_ = 0x1327D368 (see above)

 ...
        m_WaterCurrentTex = 0 (0x00000000)
        m_WaterColor = 
            r = 0.300000 (0x3E99999A)
            g = 0.350000 (0x3EB33333)
            b = 0.700000 (0x3F333333)
            a = 1.000000 (0x3F800000)

        m_RenderWater = true 
        m_WaterScroll = (bool)0x6C
        m_WaterHeight = 5.000000 (0x40A00000)
        m_WaterMaxAlpha = 0.850000 (0x3F59999A)
        m_WaterFullDepth = 4.000000 (0x40800000)
        m_WaterAlphaOffset = -0.050000 (0xBD4CCCCD)
        m_SWaterSpeed = 0.001500 (0x3AC49BA6)
        m_TWaterSpeed = 0.001500 (0x3AC49BA6)
        m_SWaterTrans = 0.000000 (0x00000000)
        m_TWaterTrans = 0.000000 (0x00000000)
        m_SWaterScrollCounter = 0.000000 (0x00000000)
        m_TWaterScrollCounter = 0.000000 (0x00000000)
        m_WaterTexTimer = 0 (0x0000000000000000)
        m_ReflectionTexture = 21 (0x00000015)
        m_RefractionTexture = 22 (0x00000016)
        m_ReflectionTextureSize = 128 (0x00000080)
        m_RefractionTextureSize = 128 (0x00000080)
        m_ReflectionMatrix = 
            _11 = 4.511769 (0x40906069)
            _21 = 0.000000 (0x00000000)
            _31 = 0.000000 (0x00000000)
            _41 = 0.000000 (0x00000000)
            _12 = 0.000000 (0x00000000)
            _22 = -4.672655 (0xC0958664)
            _32 = 0.203568 (0x3E50742F)
            _42 = 0.500000 (0x3F000000)
            _13 = 0.000000 (0x00000000)
            _23 = 2.697759 (0x402CA814)
            _33 = 0.866025 (0x3F5DB3D7)
            _43 = 0.866025 (0x3F5DB3D7)
            _14 = -1353.530640 (0xC4A930FB)
            _24 = -1085.293335 (0xC487A963)
            _34 = -130.150040 (0xC3022669)
            _44 = -131.632202 (0xC303A1D8)
            _data = [16] 
                4.511769 (0x40906069)
                0.000000 (0x00000000)
                0.000000 (0x00000000)
                0.000000 (0x00000000)
                0.000000 (0x00000000)
                -4.672655 (0xC0958664)
                0.203568 (0x3E50742F)
                0.500000 (0x3F000000)
                0.000000 (0x00000000)
                2.697759 (0x402CA814)
                0.866025 (0x3F5DB3D7)
                0.866025 (0x3F5DB3D7) ...
            _data2d = [4] 
                [4] { 4.511769 (0x40906069), 0.000000 (0x00000000), 0.000000 (0x00000000), 0.000000 (0x00000000) }
                [4] { 0.000000 (0x00000000), -4.672655 (0xC0958664), 0.203568 (0x3E50742F), 0.500000 (0x3F000000) }
                [4] { 0.000000 (0x00000000), 2.697759 (0x402CA814), 0.866025 (0x3F5DB3D7), 0.866025 (0x3F5DB3D7) }
                [4] { -1353.530640 (0xC4A930FB), -1085.293335 (0xC487A963), -130.150040 (0xC3022669), -131.632202 (0xC303A1D8) }

        m_RefractionMatrix = 
            _11 = 4.511769 (0x40906069)
            _21 = 0.000000 (0x00000000)
            _31 = 0.000000 (0x00000000)
            _41 = 0.000000 (0x00000000)
            _12 = 0.000000 (0x00000000)
            _22 = 4.672655 (0x40958664)
            _32 = -0.188759 (0xBE414A29)
            _42 = -0.500000 (0xBF000000)
            _13 = 0.000000 (0x00000000)
            _23 = 2.697759 (0x402CA814)
            _33 = 0.866025 (0x3F5DB3D7)
            _43 = 0.866025 (0x3F5DB3D7)
            _14 = -1353.530640 (0xC4A930FB)
            _24 = -1132.019897 (0xC48D80A3)
            _34 = -128.188400 (0xC300303B)
            _44 = -126.632202 (0xC2FD43B0)
            _data = [16] 
                4.511769 (0x40906069)
                0.000000 (0x00000000)
                0.000000 (0x00000000)
                0.000000 (0x00000000)
                0.000000 (0x00000000)
                4.672655 (0x40958664)
                -0.188759 (0xBE414A29)
                -0.500000 (0xBF000000)
                0.000000 (0x00000000)
                2.697759 (0x402CA814)
                0.866025 (0x3F5DB3D7)
                0.866025 (0x3F5DB3D7) ...
            _data2d = [4] 
                [4] { 4.511769 (0x40906069), 0.000000 (0x00000000), 0.000000 (0x00000000), 0.000000 (0x00000000) }
                [4] { 0.000000 (0x00000000), 4.672655 (0x40958664), -0.188759 (0xBE414A29), -0.500000 (0xBF000000) }
                [4] { 0.000000 (0x00000000), 2.697759 (0x402CA814), 0.866025 (0x3F5DB3D7), 0.866025 (0x3F5DB3D7) }
                [4] { -1353.530640 (0xC4A930FB), -1132.019897 (0xC48D80A3), -128.188400 (0xC300303B), -126.632202 (0xC2FD43B0) }

        m_WaterTint = 
            r = 0.280000 (0x3E8F5C29)
            g = 0.300000 (0x3E99999A)
            b = 0.590000 (0x3F170A3D)
            a = 1.000000 (0x3F800000)

        m_RepeatPeriod = 16.000000 (0x41800000)
        m_Shininess = 150.000000 (0x43160000)
        m_SpecularStrength = 0.400000 (0x3ECCCCCD)
        m_Waviness = 8.000000 (0x41000000)
        m_Murkiness = 0.450000 (0x3EE66666)
        m_ReflectionTint = 
            r = 0.280000 (0x3E8F5C29)
            g = 0.300000 (0x3E99999A)
            b = 0.590000 (0x3F170A3D)
            a = 1.000000 (0x3F800000)

        m_ReflectionTintStrength = 0.000000 (0x00000000)

    pSkyMan = 0x013E54F0 -> 
        m_RenderSky = true 
        m_HorizonHeight = -150.000000 (0xC3160000)
        m_SkySet = { (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >) }
        m_SkyTexture = [5] 
            
                px = 0x1328EEB8 -> 
                    m_Properties = 
                        m_Path = 
                            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
                            separator = "/m✃"

                        m_Filter = 9987 (0x00002703)
                        m_Wrap = 33071 (0x0000812F)
                        m_Aniso = 1.000000 (0x3F800000)

                    m_Handle = 429496729700 (0x0000006400000064)
                    m_BaseColour = 4287932864 (0xFF94A9C0)
                    m_State = LOADED
                    m_TextureManager = 0x013E9918 (see above)
                    m_Self = 
                        px = 0x1328EEB8 (see above)
                        pn = 
                            pi_ = 0x132B8450 -> 
                                use_count_ = 2 (0x00000002)
                                weak_count_ = 8 (0x00000008)




                pn = 
                    pi_ = 0x132B8450 (see above)


            
                px = 0x1328EDB0 -> 
                    m_Properties = 
                        m_Path = 
                            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
                            separator = "/5✃"

                        m_Filter = 9987 (0x00002703)
                        m_Wrap = 33071 (0x0000812F)
                        m_Aniso = 1.000000 (0x3F800000)

                    m_Handle = 158913789989 (0x0000002500000025)
                    m_BaseColour = 4287735229 (0xFF91A5BD)
                    m_State = LOADED
                    m_TextureManager = 0x013E9918 (see above)
                    m_Self = 
                        px = 0x1328EDB0 (see above)
                        pn = 
                            pi_ = 0x132B84D8 -> 
                                use_count_ = 2 (0x00000002)
                                weak_count_ = 8 (0x00000008)




                pn = 
                    pi_ = 0x132B84D8 (see above)


            
                px = 0x1328ECA8 -> 
                    m_Properties = 
                        m_Path = 
                            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
                            separator = "/6✃"

                        m_Filter = 9987 (0x00002703)
                        m_Wrap = 33071 (0x0000812F)
                        m_Aniso = 1.000000 (0x3F800000)

                    m_Handle = 515396075640 (0x0000007800000078)
                    m_BaseColour = 4286486194 (0xFF7E96B2)
                    m_State = LOADED
                    m_TextureManager = 0x013E9918 (see above)
                    (too much output; skipping to next top-level symbol)

                pn = 
                    pi_ = 0x132B8580 -> 
                        use_count_ = 2 (0x00000002)
                        weak_count_ = 8 (0x00000008)



            
                px = 0x1328EBA0 -> 
                    m_Properties = 
                        m_Path = 
                            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
                            separator = [8] { 47 ('/'), 46 ('.'), 9987, 0, 33071, 0, 0, 16256 }

                        m_Filter = 9987 (0x00002703)
                        m_Wrap = 33071 (0x0000812F)
                        m_Aniso = 1.000000 (0x3F800000)

                    m_Handle = 373662154839 (0x0000005700000057)
                    m_BaseColour = 4289905107 (0xFFB2C1D3)
                    m_State = LOADED
                    m_TextureManager = 0x013E9918 (see above)
                    m_Self = 
                        px = 0x1328EBA0 (see above)
                        pn = 
                            pi_ = 0x132B8628 -> 
                                use_count_ = 2 (0x00000002)
                                weak_count_ = 8 (0x00000008)




                pn = 
                    pi_ = 0x132B8628 (see above)


            
                px = 0x1328EA98 -> 
                    m_Properties = 
                        m_Path = 
                            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
                            separator = [8] { 47 ('/'), 46 ('.'), 9987, 0, 33071, 0, 0, 16256 }

                        m_Filter = 9987 (0x00002703)
                        m_Wrap = 33071 (0x0000812F)
                        m_Aniso = 1.000000 (0x3F800000)

                    m_Handle = 266287972414 (0x0000003E0000003E)
                    m_BaseColour = 4289377219 (0xFFAAB3C3)
                    m_State = LOADED
                    m_TextureManager = 0x013E9918 (see above)
                    m_Self = 
                        px = 0x1328EA98 (see above)
                        pn = 
                            pi_ = 0x132B86D0 -> 
                                use_count_ = 2 (0x00000002)
                                weak_count_ = 8 (0x00000008)




                pn = 
                    pi_ = 0x132B86D0 (see above)



    pLightEnv = 0x00648748 -> 
        m_Elevation = 0.785398 (0x3F490FD8)
        m_Rotation = 5.497790 (0x40AFEDE5)
        m_TerrainShadowTransparency = 0.000000 (0x00000000)
        m_SunDir = 
            X = -0.270597 (0xBE8A8BC0)
            Y = -0.923880 (0xBF6C835E)
            Z = 0.270599 (0x3E8A8BF1)

        m_LightingModel = (error -100500 while analyzing string >)
        m_SunColor = 
            X = 0.749020 (0x3F3FBFC6)
            Y = 0.749020 (0x3F3FBFC6)
            Z = 0.749020 (0x3F3FBFC6)

        m_TerrainAmbientColor = 
            X = 0.501961 (0x3F008084)
            Y = 0.501961 (0x3F008084)
            Z = 0.501961 (0x3F008084)

        m_UnitsAmbientColor = 
            X = 0.501961 (0x3F008084)
            Y = 0.501961 (0x3F008084)
            Z = 0.501961 (0x3F008084)


    pCamera = 0x0140015C -> 
        m_Orientation = 
            _11 = 1.000000 (0x3F800000)
            _21 = 0.000000 (0x00000000)
            _31 = 0.000000 (0x00000000)
            _41 = 0.000000 (0x00000000)
            _12 = 0.000000 (0x00000000)
            _22 = 0.866025 (0x3F5DB3D7)
            _32 = 0.500000 (0x3F000000)
            _42 = 0.000000 (0x00000000)
            _13 = 0.000000 (0x00000000)
            _23 = -0.500000 (0xBF000000)
            _33 = 0.866025 (0x3F5DB3D7)
            _43 = 0.000000 (0x00000000)
            _14 = 300.000000 (0x43960000)
            _24 = 118.382507 (0x42ECC3D8)
            _34 = 214.570450 (0x43569209)
            _44 = 1.000000 (0x3F800000)
            _data = [16] 
                1.000000 (0x3F800000)
                0.000000 (0x00000000)
                0.000000 (0x00000000)
                0.000000 (0x00000000)
                0.000000 (0x00000000)
                0.866025 (0x3F5DB3D7)
                0.500000 (0x3F000000)
                0.000000 (0x00000000)
                0.000000 (0x00000000)
                -0.500000 (0xBF000000)
                0.866025 (0x3F5DB3D7)
                0.000000 (0x00000000) ...
            _data2d = [4] 
                [4] { 1.000000 (0x3F800000), 0.000000 (0x00000000), 0.000000 (0x00000000), 0.000000 (0x00000000) }
                [4] { 0.000000 (0x00000000), 0.866025 (0x3F5DB3D7), 0.500000 (0x3F000000), 0.000000 (0x00000000) }
                [4] { 0.000000 (0x00000000), -0.500000 (0xBF000000), 0.866025 (0x3F5DB3D7), 0.000000 (0x00000000) }
                [4] { 300.000000 (0x43960000), 118.382507 (0x42ECC3D8), 214.570450 (0x43569209), 1.000000 (0x3F800000) }

        m_ProjMat = 
            _11 = 4.721337 (0x40971531)
            _21 = 0.000000 (0x00000000)
            _31 = 0.000000 (0x00000000)
            _41 = 0.000000 (0x00000000)
            _12 = 0.000000 (0x00000000)
            _22 = 5.671282 (0x40B57B24)
            _32 = 0.000000 (0x00000000)
            _42 = 0.000000 (0x00000000)
            _13 = 0.000000 (0x00000000)
            _23 = 0.000000 (0x00000000)
            _33 = 1.007843 (0x3F810101)
            _43 = 1.000000 (0x3F800000)
            _14 = 0.000000 (0x00000000)
            _24 = 0.000000 (0x00000000)
            _34 = -32.125492 (0xC2008081)
            _44 = 0.000000 (0x00000000)
            _data = [16] 
                4.721337 (0x40971531)
                0.000000 (0x00000000)
                0.000000 (0x00000000)
                0.000000 (0x00000000)
                0.000000 (0x00000000)
                5.671282 (0x40B57B24)
                0.000000 (0x00000000)
                0.000000 (0x00000000)
                0.000000 (0x00000000)
                0.000000 (0x00000000)
                1.007843 (0x3F810101)
                1.000000 (0x3F800000) ...
            _data2d = [4] 
                [4] { 4.721337 (0x40971531), 0.000000 (0x00000000), 0.000000 (0x00000000), (too much output; skipping to next top-level symbol) }
                [4] { 0.000000 (0x00000000), 5.671282 (0x40B57B24), 0.000000 (0x00000000), 0.000000 (0x00000000) }
                [4] { 0.000000 (0x00000000), 0.000000 (0x00000000), 1.007843 (0x3F810101), 1.000000 (0x3F800000) }
                [4] { 0.000000 (0x00000000), 0.000000 (0x00000000), -32.125492 (0xC2008081), 0.000000 (0x00000000) }

        m_NearPlane = 16.000000 (0x41800000)
        m_FarPlane = 4096.000000 (0x45800000)
        m_FOV = 0.349066 (0x3EB2B8C2)
        m_ViewPort = 
            m_X = 0 (0x00000000)
            m_Y = 0 (0x00000000)
            m_Width = 812 (0x0000032C)
            m_Height = 679 (0x000002A7)

        m_ViewFrustum = 
            m_aPlanes = [10] 
                
                    m_Norm = 
                        X = -4.721337 (0xC0971531)
                        Y = -0.500000 (0xBF000000)
                        Z = 0.866025 (0x3F5DB3D7)

                    m_Dist = 1289.768799 (0x44A1389A)

                
                    m_Norm = 
                        X = 4.721337 (0x40971531)
                        Y = -0.500000 (0xBF000000)
                        Z = 0.866025 (0x3F5DB3D7)

                    m_Dist = -1543.033203 (0xC4C0E110)

                
                    m_Norm = 
                        X = 0.000000 (0x00000000)
                        Y = 4.411474 (0x408D2ACC)
                        Z = 3.701666 (0x406CE81A)

                    m_Dist = -1316.509521 (0xC4A4904E)

                
                    m_Norm = 
                        X = 0.000000 (0x00000000)
                        Y = -5.411474 (0xC0AD2ACC)
                        Z = -1.969615 (0xBFFC1C5C)

                    m_Dist = 1063.245117 (0x4484E7D8)

                
                    m_Norm = 
                        X = 0.000000 (0x00000000)
                        Y = 0.003922 (0x3B808080)
                        Z = -0.006792 (0xBBDE9280)

                    m_Dist = 33.118683 (0x42047988)

                
                    m_Norm = 
                        X = 0.000000 (0x00000000)
                        Y = -1.003922 (0xBF808080)
                        Z = 1.738843 (0x3FDE926A)

                    m_Dist = -286.383087 (0xC38F3109)

                
                    m_Norm = 
                        X = 0.000000 (0x00000000)
                        Y = 0.000000 (0x00000000)
                        Z = 0.000000 (0x00000000)

                    m_Dist = 0.000000 (0x00000000)

                
                    m_Norm = 
                        X = 0.000000 (0x00000000)
                        Y = 0.000000 (0x00000000)
                        Z = 0.000000 (0x00000000)

                    m_Dist = 0.000000 (0x00000000)
 ...
            m_NumPlanes = 6 (0x00000006)


    pCinema = 0x01400438 -> 
        m_Active = true 
        m_DrawCurrentSpline = false
        m_DrawLines = false
        m_ValidCurrent = false
        m_CurrentPath = (error -100406 while analyzing _Tree<<CStrW,CCinemaPath>::iterator)
        m_Paths = (error -100500 while analyzing map<CStrW,CCinemaPath >)
        m_PathQueue = (error -100500 while analyzing list<CCinemaPath >)

    pSimulation2 = 0x013E4B50 -> 
        m = 0x013EA790 -> 
            m_SimContext = 
                m_ComponentManager = 0x013EA7A0 -> 
                    m_ScriptInterface = 
                        m = (error -100406 while analyzing auto_ptr<ScriptInterface_impl>)

                    m_SimContext = 0x013EA790 (see above)
                    m_CurrentComponent = 0 (0x00000000)
                    m_CurrentlyHotloading = false
                    m_ComponentTypesById = (error -100500 while analyzing map<int,CComponentManager::ComponentType >)
                    m_ComponentsByInterface = (error -100500 while analyzing vector<boost::unordered_map<size_t,IComponent *,boost::hash<size_t>,equal_to<size_t> > >)
                    m_ComponentsByTypeId = (error -100500 while analyzing map<int,map<size_t,IComponent * > >)
                    m_LocalMessageSubscriptions = (error -100500 while analyzing map<int,vector<int > >)
                    m_GlobalMessageSubscriptions = (error -100500 while analyzing map<int,vector<int > >)
                    m_ComponentTypeIdsByName = (error -100500 while analyzing map<string >,int >)
                    m_MessageTypeIdsByName = (error -100500 while analyzing map<string >,int >)
                    m_MessageTypeNamesById = (error -100500 while analyzing map<int,string > >)
                    m_InterfaceIdsByName = (error -100500 while analyzing map<string >,int >)
                    m_DestructionQueue = (error -100500 while analyzing vector<size_t >)
                    m_NextScriptComponentTypeId = 70 (0x00000046)
                    m_NextEntityId = 11 (0x0000000B)
                    m_NextLocalEntityId = 536870912 (0x20000000)
                    m_RNG = 
                        lcf = 
                            _x = 78606 (0x000000000001330E)



                m_UnitManager = 0x01430120 -> 
                    m_Units = (error -100500 while analyzing vector<CUnit * >)
                    m_ObjectManager = 0x014000A4 -> 
                        m_MeshManager = 0x0140005C -> 
                            m_MeshMap = 
                                table_ = 
                                    
                                        
                                            buckets_ = 0x00000000
                                            bucket_count_ = 11 (0x0000000B)
                                            allocators_ = 
                                                
                                                    (error -100500 while analyzing )
                                                    (error -100500 while analyzing )



                                        
                                            current_ = false
                                            funcs_ = [2] { { data_ = { buf = [1] { [8] { 0, 0, 0, 0, 0, 0, 0, 0 } }, align_ = 
                                                            t0 = [8] { 0, 0, 0, (too much output; skipping to next top-level symbol),  }
                                                            t1 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t2 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t3 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t4 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t5 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t6 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t7 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t8 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t9 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t10 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t11 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t12 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t13 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t14 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t15 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t16 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t17 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t18 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t19 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t20 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t21 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t22 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t23 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
 } }, { data_ = { buf = [1] { [8] { 0, 0, 0, 0, 0, 0, 0, 0 } }, align_ = 
                                                            t0 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t1 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t2 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t3 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t4 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t5 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t6 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t7 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t8 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t9 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t10 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t11 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t12 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t13 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t14 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t15 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t16 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t17 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t18 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t19 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t20 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t21 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t22 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t23 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
 } } }

                                        size_ = 0 (0x00000000)
                                        mlf_ = 1.000000 (0x3F800000)
                                        cached_begin_bucket_ = 0x00000000
                                        max_load_ = 0 (0x00000000)



                            m_ColladaManager = 0x01400058 -> 
                                m = 0x01439218 -> 
                                    dll = 
                                        m_Name = 0x005F888C -> "Collada"
                                        m_Handle = 0x00000000

                                    set_logger = 0x00000014
                                    set_skeleton_definitions = 0x00000019
                                    convert_dae_to_pmd = 0x0000001A
                                    convert_dae_to_psa = 0x0000001C



                        m_SkeletonAnimManager = 0x01400080 -> 
                            m_Animations = 
                                table_ = 
                                    
                                        
                                            buckets_ = 0x00000000
                                            bucket_count_ = 11 (0x0000000B)
                                            allocators_ = 
                                                
                                                    (error -100500 while analyzing )
                                                    (error -100500 while analyzing )



                                        
                                            current_ = false
                                            funcs_ = [2] { { data_ = { buf = [1] { [8] { 0, 0, 0, 0, 0, 0, 0, 0 } }, align_ = 
                                                            t0 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t1 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t2 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t3 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t4 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t5 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t6 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t7 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t8 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t9 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t10 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t11 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t12 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t13 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t14 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t15 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t16 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t17 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t18 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t19 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t20 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t21 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t22 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t23 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
 } }, { data_ = { buf = [1] { [8] { 0, 0, 0, 0, 0, 0, 0, 0 } }, align_ = 
                                                            t0 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t1 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t2 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t3 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t4 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t5 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t6 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t7 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t8 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t9 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t10 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t11 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t12 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t13 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t14 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t15 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t16 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t17 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t18 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t19 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t20 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t21 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t22 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
                                                            t23 = [8] { 0, 0, 0, 0, 0, 0, 0, 0 }
 } } }

                                        size_ = 0 (0x00000000)
                                        mlf_ = 1.000000 (0x3F800000)
                                        cached_begin_bucket_ = 0x00000000
                                        max_load_ = 0 (0x00000000)



                            m_ColladaManager = 0x01400058 (see above)

                        m_Simulation = 0x013E4B50 (see above)
                        m_Objects = (error -100500 while analyzing map<CObjectManager::ObjectKey,CObjectEntry * >)
                        m_ObjectBases = (error -100500 while analyzing map<CStrW,CObjectBase * >)


                m_Terrain = 0x0143BDD0 (see above)

            m_ComponentManager = 
                m_ScriptInterface = 
                    m = (error -100406 while analyzing auto_ptr<ScriptInterface_impl>)

                m_SimContext = 0x013EA790 (see above)
                m_CurrentComponent = 0 (0x00000000)
                m_CurrentlyHotloading = false
                m_ComponentTypesById = (error -100500 while analyzing map<int,CComponentManager::ComponentType >)
                m_ComponentsByInterface = (error -100500 while analyzing vector<boost::unordered_map<size_t,IComponent *,boost::hash<size_t>,equal_to<size_t> > >)
                m_ComponentsByTypeId = (error -100500 while analyzing map<int,map<size_t,IComponent * > >)
                m_LocalMessageSubscriptions = (error -100500 while analyzing map<int,vector<int > >)
                m_GlobalMessageSubscriptions = (error -100500 while analyzing map<int,vector<int > >)
                m_ComponentTypeIdsByName = (error -100500 while analyzing map<string >,int >)
                m_MessageTypeIdsByName = (error -100500 while analyzing map<string >,int >)
                m_MessageTypeNamesById = (error -100500 while analyzing map<int,string > >)
                m_InterfaceIdsByName = (error -100500 while analyzing map<string >,int >)
                m_DestructionQueue = (error -100500 while analyzing vector<size_t >)
                m_NextScriptComponentTypeId = 70 (0x00000046)
                m_NextEntityId = 11 (0x0000000B)
                m_NextLocalEntityId = 536870912 (0x20000000)
                m_RNG = 
                    lcf = 
                        _x = 78606 (0x000000000001330E)



            m_DeltaTime = 0 (0x0000000000000000)
            m_LastFrameOffset = 1.000000 (0x3F800000)
            m_StartupScript = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            m_MapSettings = 
                m_Val = 
                    px = 0x133D88D0 -> -281444620208296 (0xFFFF000711637758)
                    pn = 
                        pi_ = 0x133B21C8 -> 
                            use_count_ = 1 (0x00000001)
                            weak_count_ = 1 (0x00000001)




            m_LoadedScripts = (error -100500 while analyzing set<Path >)
            m_TurnNumber = 0 (0x00000000)
            m_EnableOOSLog = false


    pathnameXML = 
        path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
        separator = 2624

    packer = 
        m_writeBuffer = 
            m_capacity = 370872320 (0x161B1000)
            m_data = 
                px = 0x133B2848 (see above)
                pn = 
                    pi_ = 0x000A0427 -> 
                        use_count_ = (unavailable - internal error)

                        weak_count_ = (unavailable - internal error)




            m_size = 20211980 (0x0134690C)



AtlasMessage::fSaveMap (maphandlers.cpp:132)
    msg = 0x1339B518 -> 
        (AtlasMessage::IMessage)
        filename = 
            buf = 0x13283A88 -> "test2.pmp"
            length = 10 (0x0000000A)


    pathname = 
        path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
        separator = 2768

    writer = 
        (CMapIO)


AtlasMessage::fSaveMap_wrapper (maphandlers.cpp:123)
    msg = 0x1339B518 (see above)

BeginAtlas (gameloop.cpp:211)
    args = 0x0012FE04 -> 
        m_Args = (error -100500 while analyzing vector<pair<CStr8,CStr8> >)
        m_Arg0 = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = [8] { 0, 267, 23703, 267, 24, 0, 23718, 267 }


    dll = 0x784851C5 -> 
        m_Name = 0x83C3C959 -> (unavailable - internal error)

        m_Handle = 0xD233FFC8

    hooks = 
        override_gl_upload_caps = 0x01345728 -> 
        get_log_dir = 0x00000001
        bundle_logs = 0x00000000
        translate = 0x00516012 -> (CmdLineArgs::Has)
        translate_free = 0x01353BD8 -> 
        log = 0x00000008
        display_error = 0x00000000

    uiThread = 6869328 (0x0068D150)
    msgPasser = 
        (AtlasMessage::MessagePasser)
        m_Mutex = 
            m_Mutex = 0x00000000

        m_SemaphoreName = { (error -100500 while analyzing string >) }
        m_Semaphore = 0x7C910041 -> 2215624836 (0x840FC084)
        m_Queue = (error -100500 while analyzing queue<AtlasMessage::IMessage *,deque<AtlasMessage::IMessage * > >)
        m_Trace = (bool)0x20

    paths = 
        m_root = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 32752

        m_rdata = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 28032

        m_data = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 32672

        m_config = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 0

        m_cache = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 23912

        m_logs = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 47 ('/')


    last_activity = 1.24693e-303 (0x010B5D0000000001)
    recent_activity = false
    time = 7.36102e+223 (0x6E6974740070614D)
    ev = 
        ev = 
            type = 26 (0x1A)
            active = { type = 26 (0x1A), gain = 0 (0x00), state = 0 (0x00) }
            key = 
                type = 26 (0x1A)
                keysym = { sym = 31, unicode = 22360 (0x5758) }

            motion = { type = 26 (0x1A), x = 0 (0x0000), y = 31 (0x001F) }
            button = 
                type = 26 (0x1A)
                button = 0 (0x00)
                state = 0 (0x00)
                x = 31 (0x001F)
                y = 0 (0x0000)

            resize = { type = 26 (0x1A), w = 31 (0x0000001F), h = 20207448 (0x01345758) }
            expose = { type = 26 (0x1A) }
            quit = { type = 26 (0x1A) }
            user = { type = 26 (0x1A), code = 31 (0x0000001F), data1 = 0x01345758 }


    length = 0.000000 (0x00007367)
    last_time = 9.27 (0x40228A3D70A3D70A)
    name = (error -100500 while analyzing string >)
    sleepUntil = 7.36102e+223 (0x6E6974740070614D)

ATLAS_RunIfOnCmdLine (atlas.cpp:77)
    args = 0x0012FD4C -> 
        m_Args = (error -100500 while analyzing vector<pair<CStr8,CStr8> >)
        m_Arg0 = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = [8] { 47 ('/'), 0, 23728, 267, 0, 0, 23696, 267 }


    force = false

RunGameOrAtlas (main.cpp:437)
    argc = 2 (0x00000002)
    argv = 0x010B7FE8 -> 0x010B5CF0 -> "pyrogenesis.exe"
    args = 
        m_Args = (error -100500 while analyzing vector<pair<CStr8,CStr8> >)
        m_Arg0 = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 23728


    paths = 
        m_root = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 65068

        m_rdata = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 23703

        m_data = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 0

        m_config = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 0

        m_cache = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 65204

        m_logs = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 3240


    replay = 
        m_Stream = 0x7C9100C4 -> (error -100406 while analyzing basic_istream<char,char_traits<char> >)

    mod = 
        path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
        separator = 65128

    zip = 
        path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
        separator = 0

    paths = 
        m_root = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 65068

        m_rdata = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 23703

        m_data = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 0

        m_config = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 0

        m_cache = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 65204

        m_logs = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 3240


    builder = 
        m_VFS = 
            px = 0x00000000
            pn = 
                pi_ = 0x00000020


        m_Files = (error -100500 while analyzing vector<Path >)
        m_TempDir = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 7



main (main.cpp:511)
    argc = 2 (0x00000002)
    argv = 0x010B7FE8 (see above)

wmain (wseh.cpp:380)
    argc = 2 (0x00000002)
    argv = 0x010B5AD8 -> 0x010B5AE4 -> "pyrogenesis.exe"
    utf8_argv = (error -100500 while analyzing vector<char * >)
    ret = 6598816 (0x0064B0A0)
    utf8 = (error -100500 while analyzing string >)

__tmainCRTStartup (crtexe.c:583)
    nested = 3859516104 (0xE60B8AC8)

CallStartupWithinTryBlock (wseh.cpp:397)
    ret = 141340693 (0x086CB015)

RegisterWaitForInputIdle (:0)


errno = 0 (?)
OS error = 0 (no error code was set)

I can "Continue" past it, and it appears a second time, then the files is eventually saved and everything works, so it doesn't seem to be a serious problem in that sense. Should probably be fixed anyway though :)

#851 worksforme Error 404 after donation Brian Stempin Andrea
Description

After I made a donation with PayPal I got this error message:

The requested URL /0ad/success.php was not found on this server.

Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.

#852 fixed JuBot units build up interrupts resources to Civ Centre James Baillie Martin Nissen
Description

JuBot is getting really good and quick. But while it's quick to build groups of various types, it's really bad to rally them away from the buildings. That sometimes leads to a blockade of resources coming in. See attached image.

#853 fixed JuBot builds new Civ Centres out of sight in Shroud-of-Darkness James Baillie Martin Nissen
Description

This one ain't seen before. JuBot places 62 new Civ Centres sites within minutes and on the same spot, near original. Happened after loosing everything besides 2 women and a horse unit, which was placed inside Shroud-of-Darkness from building site. There was no buildings or JuBot units left besides the 3.

Have a screenshot of game summary showing 63 enemy Civ Centres destroyed.

#854 invalid Javelinist throw missiles backward Art Department Badmadblacksad
Description

When they fight Javelinists throw missiles backward (the spear point to the back)

to seet it : launch atlas, switch to the actor viewer and select celt_infantry_javelinist, Animation=melee and Play.

#855 fixed Unused files in windows installer? ben fabio
Description

I installed 0ad alpha 4 for Windows on a friend PC and noticed that it install some files which appears to be unused by the game. Some examples: avcodec-51.dll avformat-51.dll avutil-49.dll FColladaD.dll (debug version, but standard version is already included) mozjs-ps-debug.dll (ditto) msvc* (many versions) and possibly others.

Maybe something can be removed.

#856 fixed [PATCH] Serengeti tree bug fix Art Department Kephra Nurmi
Description

Serengeti map contains a tree owned by player 1.

#857 fixed [PATCH] Sahel Watering Holes - PlayerData / civilisation bug fix Art Department Kephra Nurmi
Description

Playerdata in Sahel Watering Holes claim 4 times "hele", while player 3 and 4 have "celt" units and building. This prevents the AI from building units and structures.

#858 fixed Remove old simulation code historic_bruno
Description

We have two simulation directories in the game's source code, simulation\ which contains the old simulation code and simulation2\ which is the new. Since we no longer use the old, it should be deleted from the project and possibly simulation2 should be refactored to simulation.

#859 fixed [PATCH] Control groups don't recognise promotions Philip Taylor
Description

When a unit gets promoted after collecting enough XP, it gets dropped from any control groups it was assigned to. Probably need to have EntityGroupsContainer do something a bit like EntitySelection.prototype.checkRenamedEntities does to update after entity renamings (though it might need a little refactoring so the same rename list is passed to both classes that need it).

#860 fixed Crash upon exiting the game Magne Djupvik
Description

Operating System : Debian GNU/Linux 6.0.1

Kernel : Linux 2.6.32-5-amd64 (x86_64) C

Library : GNU C Library version 2.11.2 (stable)

Default C Compiler: GNU C Compiler version 4.4.5 (Debian 4.4.5-8)

Processor : 4x Intel(R) Core(TM) i5 CPU 750 @ 2.67GHz

Memory : 2025MB (1445MB used)

OpenGL Renderer : GeForce GTS 250/PCI/SSE2

Resolution : 1920x1080 pixels

h_mgr.cpp(659): Function call failed: return value was -100022 (Invalid handle)
Function call failed: return value was -100022 (Invalid handle)
Location: h_mgr.cpp:659 (h_free)

Call stack:

(0x7013bd) ./pyrogenesis() [0x7013bd]
(0x6aa114) ./pyrogenesis() [0x6aa114]
(0x6aa816) ./pyrogenesis() [0x6aa816]
(0x6aa999) ./pyrogenesis() [0x6aa999]
(0x6d13a4) ./pyrogenesis() [0x6d13a4]
(0x6d3499) ./pyrogenesis() [0x6d3499]
(0x6d0b5d) ./pyrogenesis() [0x6d0b5d]
(0x6d0ddf) ./pyrogenesis() [0x6d0ddf]
(0x708303) ./pyrogenesis() [0x708303]
(0x513186) ./pyrogenesis() [0x513186]
(0x414df5) ./pyrogenesis() [0x414df5]
(0x415b13) ./pyrogenesis() [0x415b13]
(0x7f58d18efc4d) /lib/libc.so.6(__libc_start_main+0xfd) [0x7f58d18efc4d]
(0x4134c9) ./pyrogenesis() [0x4134c9]

errno = 0 (?)
OS error = ?


0x00007f58d197178d in nanosleep () at ../sysdeps/unix/syscall-template.S:82
82	../sysdeps/unix/syscall-template.S: Ingen slik fil eller filkatalog.
	in ../sysdeps/unix/syscall-template.S
(gdb) bt
#0  0x00007f58d197178d in nanosleep () at ../sysdeps/unix/syscall-template.S:82
#1  0x00007f58d1971600 in __sleep (seconds=<value optimized out>)
    at ../sysdeps/unix/sysv/linux/sleep.c:138
#2  0x0000000000705ad9 in udbg_launch_debugger ()
    at ../../../source/lib/sysdep/os/unix/udbg.cpp:76
#3  0x0000000000706b23 in try_gui_display_error (text=<value optimized out>, 
    manual_break=<value optimized out>, allow_suppress=true, no_continue=false)
    at ../../../source/lib/sysdep/os/unix/unix.cpp:173
#4  0x0000000000706c7c in sys_display_error (
    text=0x7f58cb61f000 L"Function call failed: return value was -100022 (Invalid handle)\r\nLocation: h_mgr.cpp:659 (h_free)\r\n\r\nCall stack:\r\n\r\n(0x7013bd) ./pyrogenesis() [0x7013bd]\n(0x6aa114) ./pyrogenesis() [0x6aa114]\n(0x6aa81"..., flags=<value optimized out>)
    at ../../../source/lib/sysdep/os/unix/unix.cpp:214
#5  0x00000000006aa82c in debug_DisplayError (
    description=<value optimized out>, flags=6, 
    lastFuncToSkip=<value optimized out>, pathname=<value optimized out>, 
    line=659, func=<value optimized out>, suppress=0xa0cf08, 
    context=<value optimized out>) at ../../../source/lib/debug.cpp:466
#6  0x00000000006aa999 in debug_OnError (err=-100022, suppress=0xa0cf08, 
    file=0x76c318 L"../../../source/lib/res/h_mgr.cpp", line=659, 
    func=0x76c8f6 "h_free") at ../../../source/lib/debug.cpp:541
#7  0x00000000006d13a4 in h_free (h=@0x7f5881fd7c10, type=0x9fee60)
---Type <return> to continue, or q <return> to quit---
    at ../../../source/lib/res/h_mgr.cpp:659
#8  0x00000000006d3499 in GLCursor::destroy (c=0x7f5881fd7c00)
    at ../../../source/lib/res/graphics/cursor.cpp:110
#9  Cursor_dtor (c=0x7f5881fd7c00)
    at ../../../source/lib/res/graphics/cursor.cpp:178
#10 0x00000000006d0b5d in h_free_idx (idx=646, hd=0x7f5881fd7bd0)
    at ../../../source/lib/res/h_mgr.cpp:615
#11 0x00000000006d0ddf in Shutdown () at ../../../source/lib/res/h_mgr.cpp:840
#12 0x0000000000708303 in ModuleShutdown (initState=0xa07cb8, 
    shutdown=0x6d0d20 <Shutdown>) at ../../../source/lib/module_init.cpp:71
#13 0x0000000000513186 in Shutdown ()
    at ../../../source/ps/GameSetup/GameSetup.cpp:657
#14 0x0000000000414df5 in RunGameOrAtlas (argc=<value optimized out>, 
    argv=<value optimized out>) at ../../../source/main.cpp:493
#15 0x0000000000415b13 in main (argc=1, argv=0x7fff3d752d38)
    at ../../../source/main.cpp:511
Current language:  auto
The current source language is "auto; currently asm".
#861 wontfix Music on new website does not play on IE7 Brian Stempin Brian Stempin
Description

Quite some time ago, it was brought to my attention that the following page did not work correctly on IE: http://wildfiregames.com/wordpress/media/music/. It turns out that Windows needs the Ogg Vorbis codec installed in order for IE/WMP to play the music. Instructions here: http://social.msdn.microsoft.com/Forums/en-US/windowspro-audiodevelopment/thread/439dbc92-fdc7-4744-9e5b-c68fa8aaad87. I'll try it when I get some free time. We should auto-detect IE and prompt them with instructions of some sort.

#862 needsinfo [NEEDS INFO] Max pop limit gets raised when unit with more than 1 pop is created Erik Johansson
Description

(9:43:18 PM) erik_feneur: hmmm, seems like there's a housing bug somewhere. when I have less pop left than necessary for a unit, but haven't filled up the limit it gets raised when the unit is created. (9:43:18 PM) erik_feneur: eg if I have 232 max pop, but units fill up to 230, then a 4 pop unit is created and the max is raised to 234 automagically

I'll try and reproduce it and write a better description/title tomorrow, but I just wanted to post this so I wouldn't forget about it.

#863 fixed When changing player the old one is "Unassigned" rather than "JuBot" fabio
Description

If "You" are assigned to "Player 1" and then select "You" on "Player 2", "Player 1" is then reassigned to "Unassigned". Since "JuBot" is the default AI, "Player 1" should use it.

#864 fixed Upgrade Windows libraries Philip Taylor
Description

Currently the Windows build uses precompiled libraries, some of which were built with VC6, some with VC2005 (mozjs zlib1 nvtt jpeg-6b libpng zlib1 libcurl enet). Two problems:

  • Some are very old (as far back as 2004), so there are probably new versions with security fixes and bug fixes and performance improvements etc.
  • The VC2005 CRT requires sometimes-painful manifest stuff.

It might be nice to rebuild the libraries with their latest versions, and the latest compiler (VC2010 unless you're reading this in the future) which hopefully doesn't have the manifest problems.

Need to make sure that the libraries are still compatible with the oldest compiler version that we want the game to support (currently probably VC2008; upgrading everyone and everything to VC2010 would be nice but will not be trivial).

#865 fixed Stances Badmadblacksad
Description

I tried to implement stances recently. I give up for a few days as I've got boring school work to do..

I tried to match those requirements : http://www.wildfiregames.com/forum/index.php?showtopic=13725

so, I just attach a patch. If you have time, and a better way to do theses things, please comment.

#866 fixed Error during compiling on Mac OS X Jan Wassenberg Kieran P
Description

% make CONFIG=Release

Building mocks_real

make[1]: `../../../binaries/system/libmocks_real.a' is up to date.

Building network

make[1]: `../../../binaries/system/libnetwork.a' is up to date.

Building simulation2

Simulation2.cpp

In file included from ../../../libraries/spidermonkey-tip/include-unix/release/js/jspubtd.h:47,

from ../../../libraries/spidermonkey-tip/include-unix/release/js/jsapi.h:49,

from ../../../source/scriptinterface/ScriptTypes.h:41,

from ../../../source/scriptinterface/ScriptVal.h:21,

from ../../../source/simulation2/helpers/SimulationCommand.h:21,

from ../../../source/simulation2/Simulation2.h:23,

from ../../../source/simulation2/Simulation2.cpp:20:

../../../libraries/spidermonkey-tip/include-unix/release/js/jsval.h:154: warning: redundant redeclaration of ‘void js_static_assert(int*)’ in same scope

../../../libraries/spidermonkey-tip/include-unix/release/js/jsval.h:120: warning: previous declaration of ‘void js_static_assert(int*)’

../../../libraries/spidermonkey-tip/include-unix/release/js/jsval.h:168: warning: redundant redeclaration of ‘void js_static_assert(int*)’ in same scope

../../../libraries/spidermonkey-tip/include-unix/release/js/jsval.h:154: warning: previous declaration of ‘void js_static_assert(int*)’

In file included from ../../../source/ps/Filesystem.h:22,

from ../../../source/simulation2/Simulation2.cpp:34:

../../../source/lib/file/io/io.h: In function ‘Status io::Store(const OsPath&, const void*, size_t, const io::Parameters&, const CompletedHook&, const IssueHook&)’:

../../../source/lib/file/io/io.h:287: error: ‘O_DIRECT’ was not declared in this scope

../../../source/lib/file/io/io.h: In function ‘Status io::Load(const OsPath&, void*, size_t, const io::Parameters&, const CompletedHook&, const IssueHook&)’:

../../../source/lib/file/io/io.h:326: error: ‘O_DIRECT’ was not declared in this scope

make[1]: * [obj/simulation2_Release/Simulation2.o] Error 1

make: * [simulation2] Error 2

#867 fixed Shadows flicker michael
Description

I've noticed that the shadows tend to flicker now. This occurs on both my laptop and desktop. The laptop uses a mobile nvidia card and my desktop uses an ati Radeon card, so it does not appear to be graphics card-specific. Both use Windows 7 64-bit however. I notice no other graphical issues in either case, just the flickering shadows. When I say "flickering" I mean the shadows turn off and on in rapid succession. There is not a consistent interval to this either.

#868 fixed [PATCH] Move wxWidgets Unix config files to XDG basedir location leper Philip Taylor
Description

Atlas uses wxConfig (in source/tools/atlas/AtlasUI/Misc/DLLInterface.cpp) which is wxFileConfig on Unixes. By default that uses the config file "~/.Atlas Editor". It would be cleaner to store it alongside the game's own config files in probably ~/.config/0ad/config/atlas.ini (unless overridden by environment variables, as per basedir).

#869 fixed Handle or prevent invalid player IDs in scenarios historic_bruno
Description

It's possible to place units in Atlas for up to 8 players, but if the number of players is changed (either by manually editing the XML or with the player editor) then some units may have invalid player IDs. This causes errors when the scenario is loaded. Part of the problem can be addressed in Atlas itself, perhaps not saving units that are not assigned to a valid player. Or the player can be notified with a message "Player X has units assigned which will be lost. Continue?" It can also be solved by the map reader, e.g. not adding entities that have invalid player IDs.

Otherwise the game logic fails unpredictably.

#870 fixed Mac OS X binary on http://wildfiregames.com/0ad/ Raymond
Description

There are currently a Mac OS X build of 0ad alpha 5 on: http://ciderhouse.opal.ne.jp/wp/english/zeroad and http://mac.softpedia.com/get/Games/0-A-D.shtml available (source: http://www.wildfiregames.com/forum/index.php?showtopic=14764)

Please copy this link(s) to: http://trac.wildfiregames.com/wiki/LatestReleaseMac

#871 fixed upgrade Trac philip Raymond
Description

Currently there is Trac 1.0.1 installed.

#872 fixed [PATCH] Display more info for training units brian Petr Kovar
Description

This patch displays more information in tooltip for units that is possible to train.

Show additionaly those traits:

  • Armour
  • Attack
  • Health
  • Speed

I think it could be useful (especialy for new players) to have more information about each unit you can train.

#873 fixed [PATCH] Population Bonus on new line Petr Kovar
Description

In construction tooltip is not population bonus on new line as all others attributes everywhere else. This patch fix it.

#874 fixed Make player settings clearer for Atlas RMS Philip Taylor
Description

Currently the "Random map" part of the Map section in Atlas doesn't indicate how to control the number of players (and their civs etc) that will be used when generating the map, and it's unintuitive that you have to switch to the Player section and edit the current map's settings to control it.

Maybe it would be sufficient for the "Random map" area to have a "Edit players" button that simply switches to the Player section (like the toolbar button) so people might be able to figure out they're linked, or some descriptive text, or something like that.

#875 fixed Out of memory errors should work nicer historic_bruno Kieran P
Description

See http://www.wildfiregames.com/forum/index.php?showtopic=14859

We should show them a warning in game about out of memory, not just in the logs.

#876 fixed [PATCH] Make CInput caret more visible kingadami Kenny Long
Description

Currently the caret (data entry point) for CInput is a small line that is drawn under the character position to the right of the current insert point. A flashing vertical line would be ideal and is standard practice. At a minimum we need to thicken up the line or do something to make it more visible.

This becomes more important as we start to use CInput for things like in game messaging. The blinking cursor would provide an indication that the input area is active and make it clear where you are in the text box.

#877 invalid Scroll bar bug in CInput Beau Kenny Long
Description

There is a bug in the CInput vertical scroll bar handling logic. If you enter enough text to cause the vertical scroll bar to appear, pressing the down arrow button on the scroll bar (scroll up) will cause the application to fail with an out of bounds exception.

You can test this on the feedback window that appears on the main menu screen.

#878 fixed Garrisoned prop point error on Iberian civil centre Art Department historic_bruno
Description

To reproduce, play any map with an Iberian civil centre and delete or destroy it. You get the following error:

ERROR: Failed to find matching prop point called "garrisoned" in model "art/meshes/structural/iber_civic_centre.dae" for actor "civil_centre"

Edit: Also occurs when garrisoning units in the civil centre.

#879 fixed Disable FoW for AI players Philip Taylor
Description

r9657 made UnitAI take account of FoW and refuse to move to targets unless they're visible. The AI players cheat and ignore FoW (to avoid a load of extra complexity and pain), but now their units will probably refuse orders and cause confusion if the AI decides to attack a hidden enemy. Things should be changed so the whole map is always revealed (from the perspective of GetLosVisibility at least) to AI players.

#880 fixed [PATCH] Fix unit selection cheat historic_bruno
Description

As reported on the forum, it's possible to add enemy units to a selection of your own units, and thus control them (make them build things for you, attack themselves, etc.)

This patch adds two checks to prevent this: one is in the GUI so it's not actually possible to add enemy units to your selection, but this is not foolproof. The other check is in the simulation code (Commands.js), which filters out the list of selected entities according to the player's ownership. The patch also tests the state of the "Control all units" dev command, so it's still possible to use that for testing.

#881 duplicate Fix pathing mismatches between different path finding algorithms Philip Taylor Kenny Long
Description

This ticket was created as a result of ticket #829. Units were getting stuck because of differences between the long and short pathfinder obstacle detection thresholds. A fix/hack was put into CCmpUnitMotion to compensate for this difference. This fixed the units getting stuck problem in most cases.

Now we need to make the long and short path finders agree about passable/impassable more closely so that we get better paths and have less chance of getting stuck.

The problem is described in detail here: http://www.wildfiregames.com/forum/index.php?showtopic=14883

Philip describes two possible solutions in the forum post above. We need to implement both of these and see which one plays the best and causes the least amount of code friction.

#882 fixed Test failure fabio
Description

With current r9713 on Ubuntu 11.04:

Running 251 tests........................................................................ERROR: JavaScript error: simulation/components/UnitAI.js line 1413
TypeError: cmpOwnership is null
  (1)@simulation/components/UnitAI.js:1413
  TestFormationExiting(0)@simulation/components/tests/test_UnitAI.js:81
  ()@simulation/components/tests/test_UnitAI.js:133

In TestComponentScripts::test_scripts:
../../../source/pch/test/../../../source/simulation2/components/tests/test_scripts.h:44: Error: Test failed: L"Running script simulation/components/tests/test_UnitAI.js"
../../../source/pch/test/../../../source/simulation2/components/tests/test_scripts.h:44: Error: Assertion failed: scriptInterface.LoadScript(pathname, wcontent)
..................................................................................................................................................................................
Failed 1 of 251 tests
Success rate: 99%
#883 fixed Scenarios - missing template errors Art Department historic_bruno
Description

Think this is all, but might as well do a regexp search too.

Acropolis:

ERROR: Failed to find file: "simulation/templates/units/hele_super_ranged_polis.xml"
ERROR: Failed to find file: "simulation/templates/other/thebes_sacred_band_hoplitai.xml"

Miletus:

ERROR: Failed to find file: "simulation/templates/other/sparta_hellenistic_phalangitai.xml"
ERROR: Failed to find file: "simulation/templates/other/thebes_sacred_band_hoplitai.xml"

Necropolis:

ERROR: Failed to find file: "simulation/templates/other/thebes_sacred_band_hoplitai.xml"

Saharan Oases:

ERROR: Failed to find file: "simulation/templates/other/thebes_sacred_band_hoplitai.xml"

The Massacre of Delphi:

ERROR: Failed to find file: "simulation/templates/other/thebes_sacred_band_hoplitai.xml"
#884 wontfix VC2008 Express test failures historic_bruno
Description

This test fails with the following output:

c:\users\ben\devel\ps\source\scriptinterface\tests\../../../source/scriptinterface/tests/test_ScriptInterface.h(141): Error: Expected (std::wstring(script.ToString(val.get())) == std::wstring(L"({x:1, z:[2, \"3\\u263A\\uFFFD\"], y:true})")), found (L"({x:1, z:[2, \"3\\u263A\\uFFFD\\uFFFD\\uFFFD\"], y:true})" != L"({x:1, z:[2, \"3\\u263A\\uFFFD\"], y:true})")

There are also program errors (three if you keep pressing continue):

#1:

Function call failed: return value was -100703 (Invalid UTF-8 sequence)
Location: utf8.cpp:84 (RaiseError)

Call stack:

RaiseError (utf8.cpp:84)
    err = -100703 (0xFFFFFFFFFFFE76A1)
    perr = (unavailable)

UTF8Codec::Decode (utf8.cpp:134)
    srcPos = 0x0030F92C -> 0x001EF4EE -> [8] { 160 (0xA0), 128 (0x80), 34 (0x22), 10 (0x0A), 32 (0x20), 32 (0x20), 93 (0x5D), 44 (0x2C) }
    srcEnd = 0x001EF504 -> [8] { 0 (0x00), 240 (0xF0), 173 (0xAD), 186 (0xBA), 171 (0xAB), 171 (0xAB), 171 (0xAB), 171 (0xAB) }
    err = 0x00000000
    offsets = [5] { 0 (0x00000000), 0 (0x00000000), 12416 (0x00003080), 925824 (0x000E2080), 63447168 (0x03C82080) }

wstring_from_utf8 (utf8.cpp:237)
    src = 0x0030FA4C -> (error -100500 while analyzing string >)
    err = 0x00000000
    srcPos = 0x00000001

ScriptInterface::ParseJSON (scriptinterface.cpp:897)
    this = (unavailable)
    string_utf8 = 0x0030FA4C (see above)
    attrsW = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
    string = (error -100500 while analyzing wstring<utf16_traits >)
    vp = 8 (0x0000000000000008)

TestScriptInterface::test_json (test_scriptinterface.h:140)
    this = (unavailable)
    val = 
        m_Val = 
            px = 0x05E0B1B0 -> 7118796211726961984 (0x62CB0B700461CD40)
            pn = 
                pi_ = 0x0030F998 -> 
                    use_count_ = 2029312 (0x001EF700)
                    weak_count_ = 1955361129 (0x748C7169)




    script = 
        m = (error -100406 while analyzing auto_ptr<ScriptInterface_impl>)

    input = (error -100500 while analyzing string >)
    stringified = (error -100500 while analyzing string >)
    e = 0x0030F9B8 -> (error -100406 while analyzing exception)
    e = 0x00000405
    e = 0x001EDCA8 -> (error -100406 while analyzing exception)

CxxTest::RealTestDescription::run (realdescriptions.cpp:99)
    this = (unavailable)
    e = 0x0030FA84 -> (error -100406 while analyzing exception)

CxxTest::TestRunner::runTest (testrunner.h:77)
    this = (unavailable)
    td = 0x00D26FC4 -> 
        
            _next = 0x00000000
            _prev = 0x00D26FA8 -> 
                _next = 0x00D26FC4 (see above)
                _prev = 0x00D26F8C -> 
                    _next = 0x00D26FA8 (see above)
                    _prev = 0x00D26F70 -> 
                        _next = 0x00D26F8C (see above)
                        _prev = 0x00D26F54 -> 
                            _next = 0x00D26F70 (see above)
                            _prev = 0x00D26F38 -> 
                                _next = 0x00D26F54 (see above)
                                _prev = 0x00D26F1C -> 
                                    _next = 0x00D26F38 (see above)
                                    _prev = 0x00D26F00 -> 
                                        _next = 0x00D26F1C (see above)
                                        _prev = 0x00D26EE4 -> 
                                            _next = 0x00D26F00 (see above)
                                            _prev = 0x00000000
                                            _active = true 

                                        _active = true 

                                    _active = true 

                                _active = true 

                            _active = true 

                        _active = true 

                    _active = true 

                _active = true 

            _active = true 


    sg = 
        _abortTestOnFail = false
        _maxDumpSize = 3209980 (0x0030FAFC)


CxxTest::TestRunner::runSuite (testrunner.h:63)
    this = (unavailable)
    sd = 0x00D26EC0 -> 
        
            _next = 0x00D26FE8 -> 
                _next = 0x00D27030 -> 
                    _next = 0x00D27078 -> 
                        _next = 0x00D270DC -> 
                            _next = 0x00D27140 -> 
                                _next = 0x00D27190 -> 
                                    _next = 0x00D27224 -> 
                                        _next = 0x00D2726C -> 
                                            _next = 0x00D27538 -> 
                                                _next = 0x00D27668 -> 
                                                    _next = 0x00D27814 -> 
                                                        _next = 0x00D27878 -> 
                                                            _next = 0x00D278F8 -> 
                                                                _next = 0x00000000
                                                                _prev = 0x00D27878 (see above)
                                                                _active = true 

                                                            _prev = 0x00D27814 (see above)
                                                            _active = true 

                                                        _prev = 0x00D27668 (see above)
                                                        _active = true 

                                                    _prev = 0x00D27538 (see above)
                                                    _active = true 

                                                _prev = 0x00D2726C (see above)
                                                _active = true 

                                            _prev = 0x00D27224 (see above)
                                            _active = true 

                                        _prev = 0x00D27190 (see above)
                                        _active = true 

                                    _prev = 0x00D27140 (see above)
                                    _active = true 

                                _prev = 0x00D270DC (see above)
                                _active = true 

                            _prev = 0x00D27078 (see above)
                            _active = true 

                        _prev = 0x00D27030 (see above)
                        _active = true 

                    _prev = 0x00D26FE8 (see above)
                    _active = true 

                _prev = 0x00D26EC0 (see above)
                _active = true 

            _prev = 0x00D26E24 -> 
                _next = 0x00D26EC0 (see above)
                _prev = 0x00D26CFC -> 
                    _next = 0x00D26E24 (see above)
                    _prev = 0x00D26C28 -> 
                        _next = 0x00D26CFC (see above)
                        _prev = 0x00D26BC4 -> 
                            _next = 0x00D26C28 (see above)
                            (too much output; skipping to next top-level symbol)

                        _active = true 

                    _active = true 

                _active = true 

            _active = true 


    sg = 
        _abortTestOnFail = false
        _maxDumpSize = 3210048 (0x0030FB40)


CxxTest::PsTestRunner::runWorld (pstestwrapper.h:80)
    this = (unavailable)
    wd = 
        
            
                _next = 0x00000000
                _prev = 0x00C45501 -> 
                    _next = 0xC01BC82B -> 
                        _next = (unavailable - internal error)

                        _prev = (unavailable - internal error)

                        _active = (unavailable - internal error)


                    _prev = 0xC823D0F7 -> 
                        _next = (unavailable - internal error)

                        _prev = (unavailable - internal error)

                        _active = (unavailable - internal error)


                    _active = (bool)0x8B

                _active = (bool)0x64



    sg = 
        
            _abortTestOnFail = false
            _maxDumpSize = 13393572 (0x00CC5EA4)



CxxTest::PsTestRunner::runAllTests (pstestwrapper.h:16707566)
    listener = 0x00D2ABC8 -> (CxxTest::TestListener)

CxxTest::PsTestWrapper::runGui (pstestwrapper.h:96)
    this = (unavailable)
    argc = 0x0030FD50 -> 1 (0x00000001)
    argv = 0x001E42C0 -> 0x001E42C8 -> "c:\Users\Ben\devel\ps\binaries\system\test.exe"
    listener = 0x0030FBA0 -> (CxxTest::TestListener)

main (test_root.cpp:17)
    argc = 1 (0x00000001)
    argv = 0x001E42C0 (see above)

__tmainCRTStartup (crtexe.c:586)
    nested = 4187511306 (0xF9985A0A)

BaseThreadInitThunk (:0)

RtlInitializeExceptionChain (:0)

RtlInitializeExceptionChain (:0)


errno = 0 (?)
OS error = 0 (no error code was set)

#2:

Function call failed: return value was -100703 (Invalid UTF-8 sequence)
Location: utf8.cpp:84 (RaiseError)

Call stack:

RaiseError (utf8.cpp:84)
    err = -100703 (0xFFFFFFFFFFFE76A1)
    perr = (unavailable)

UTF8Codec::Decode (utf8.cpp:134)
    srcPos = 0x0030F92C -> 0x001EF4EF -> [8] { 128 (0x80), 34 (0x22), 10 (0x0A), 32 (0x20), 32 (0x20), 93 (0x5D), 44 (0x2C), 10 (0x0A) }
    srcEnd = 0x001EF504 -> [8] { 0 (0x00), 240 (0xF0), 173 (0xAD), 186 (0xBA), 171 (0xAB), 171 (0xAB), 171 (0xAB), 171 (0xAB) }
    err = 0x00000000
    offsets = [5] { 0 (0x00000000), 0 (0x00000000), 12416 (0x00003080), 925824 (0x000E2080), 63447168 (0x03C82080) }

wstring_from_utf8 (utf8.cpp:237)
    src = 0x0030FA4C -> (error -100500 while analyzing string >)
    err = 0x00000000
    srcPos = 0x00000001

ScriptInterface::ParseJSON (scriptinterface.cpp:897)
    this = (unavailable)
    string_utf8 = 0x0030FA4C (see above)
    attrsW = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
    string = (error -100500 while analyzing wstring<utf16_traits >)
    vp = 8 (0x0000000000000008)

TestScriptInterface::test_json (test_scriptinterface.h:140)
    this = (unavailable)
    val = 
        m_Val = 
            px = 0x05E0B1B0 -> 7118796211726961984 (0x62CB0B700461CD40)
            pn = 
                pi_ = 0x0030F998 -> 
                    use_count_ = 2029312 (0x001EF700)
                    weak_count_ = 1955361129 (0x748C7169)




    script = 
        m = (error -100406 while analyzing auto_ptr<ScriptInterface_impl>)

    input = (error -100500 while analyzing string >)
    stringified = (error -100500 while analyzing string >)
    e = 0x0030F9B8 -> (error -100406 while analyzing exception)
    e = 0x00000405
    e = 0x001EDCA8 -> (error -100406 while analyzing exception)

CxxTest::RealTestDescription::run (realdescriptions.cpp:99)
    this = (unavailable)
    e = 0x0030FA84 -> (error -100406 while analyzing exception)

CxxTest::TestRunner::runTest (testrunner.h:77)
    this = (unavailable)
    td = 0x00D26FC4 -> 
        
            _next = 0x00000000
            _prev = 0x00D26FA8 -> 
                _next = 0x00D26FC4 (see above)
                _prev = 0x00D26F8C -> 
                    _next = 0x00D26FA8 (see above)
                    _prev = 0x00D26F70 -> 
                        _next = 0x00D26F8C (see above)
                        _prev = 0x00D26F54 -> 
                            _next = 0x00D26F70 (see above)
                            _prev = 0x00D26F38 -> 
                                _next = 0x00D26F54 (see above)
                                _prev = 0x00D26F1C -> 
                                    _next = 0x00D26F38 (see above)
                                    _prev = 0x00D26F00 -> 
                                        _next = 0x00D26F1C (see above)
                                        _prev = 0x00D26EE4 -> 
                                            _next = 0x00D26F00 (see above)
                                            _prev = 0x00000000
                                            _active = true 

                                        _active = true 

                                    _active = true 

                                _active = true 

                            _active = true 

                        _active = true 

                    _active = true 

                _active = true 

            _active = true 


    sg = 
        _abortTestOnFail = false
        _maxDumpSize = 3209980 (0x0030FAFC)


CxxTest::TestRunner::runSuite (testrunner.h:63)
    this = (unavailable)
    sd = 0x00D26EC0 -> 
        
            _next = 0x00D26FE8 -> 
                _next = 0x00D27030 -> 
                    _next = 0x00D27078 -> 
                        _next = 0x00D270DC -> 
                            _next = 0x00D27140 -> 
                                _next = 0x00D27190 -> 
                                    _next = 0x00D27224 -> 
                                        _next = 0x00D2726C -> 
                                            _next = 0x00D27538 -> 
                                                _next = 0x00D27668 -> 
                                                    _next = 0x00D27814 -> 
                                                        _next = 0x00D27878 -> 
                                                            _next = 0x00D278F8 -> 
                                                                _next = 0x00000000
                                                                _prev = 0x00D27878 (see above)
                                                                _active = true 

                                                            _prev = 0x00D27814 (see above)
                                                            _active = true 

                                                        _prev = 0x00D27668 (see above)
                                                        _active = true 

                                                    _prev = 0x00D27538 (see above)
                                                    _active = true 

                                                _prev = 0x00D2726C (see above)
                                                _active = true 

                                            _prev = 0x00D27224 (see above)
                                            _active = true 

                                        _prev = 0x00D27190 (see above)
                                        _active = true 

                                    _prev = 0x00D27140 (see above)
                                    _active = true 

                                _prev = 0x00D270DC (see above)
                                _active = true 

                            _prev = 0x00D27078 (see above)
                            _active = true 

                        _prev = 0x00D27030 (see above)
                        _active = true 

                    _prev = 0x00D26FE8 (see above)
                    _active = true 

                _prev = 0x00D26EC0 (see above)
                _active = true 

            _prev = 0x00D26E24 -> 
                _next = 0x00D26EC0 (see above)
                _prev = 0x00D26CFC -> 
                    _next = 0x00D26E24 (see above)
                    _prev = 0x00D26C28 -> 
                        _next = 0x00D26CFC (see above)
                        _prev = 0x00D26BC4 -> 
                            _next = 0x00D26C28 (see above)
                            (too much output; skipping to next top-level symbol)

                        _active = true 

                    _active = true 

                _active = true 

            _active = true 


    sg = 
        _abortTestOnFail = false
        _maxDumpSize = 3210048 (0x0030FB40)


CxxTest::PsTestRunner::runWorld (pstestwrapper.h:80)
    this = (unavailable)
    wd = 
        
            
                _next = 0x00000000
                _prev = 0x00C45501 -> 
                    _next = 0xC01BC82B -> 
                        _next = (unavailable - internal error)

                        _prev = (unavailable - internal error)

                        _active = (unavailable - internal error)


                    _prev = 0xC823D0F7 -> 
                        _next = (unavailable - internal error)

                        _prev = (unavailable - internal error)

                        _active = (unavailable - internal error)


                    _active = (bool)0x8B

                _active = (bool)0x64



    sg = 
        
            _abortTestOnFail = false
            _maxDumpSize = 13393572 (0x00CC5EA4)



CxxTest::PsTestRunner::runAllTests (pstestwrapper.h:16707566)
    listener = 0x00D2ABC8 -> (CxxTest::TestListener)

CxxTest::PsTestWrapper::runGui (pstestwrapper.h:96)
    this = (unavailable)
    argc = 0x0030FD50 -> 1 (0x00000001)
    argv = 0x001E42C0 -> 0x001E42C8 -> "c:\Users\Ben\devel\ps\binaries\system\test.exe"
    listener = 0x0030FBA0 -> (CxxTest::TestListener)

main (test_root.cpp:17)
    argc = 1 (0x00000001)
    argv = 0x001E42C0 (see above)

__tmainCRTStartup (crtexe.c:586)
    nested = 4187511306 (0xF9985A0A)

BaseThreadInitThunk (:0)

RtlInitializeExceptionChain (:0)

RtlInitializeExceptionChain (:0)


errno = 0 (No error reported here)
OS error = 487 (Attempt to access invalid address.)

#3:

Function call failed: return value was -100703 (Invalid UTF-8 sequence)
Location: utf8.cpp:84 (RaiseError)

Call stack:

RaiseError (utf8.cpp:84)
    err = -100703 (0xFFFFFFFFFFFE76A1)
    perr = (unavailable)

UTF8Codec::Decode (utf8.cpp:134)
    srcPos = 0x0030F92C -> 0x001EF4F0 -> ""
  ],
  "y": true
}"
    srcEnd = 0x001EF504 -> [8] { 0 (0x00), 240 (0xF0), 173 (0xAD), 186 (0xBA), 171 (0xAB), 171 (0xAB), 171 (0xAB), 171 (0xAB) }
    err = 0x00000000
    offsets = [5] { 0 (0x00000000), 0 (0x00000000), 12416 (0x00003080), 925824 (0x000E2080), 63447168 (0x03C82080) }

wstring_from_utf8 (utf8.cpp:237)
    src = 0x0030FA4C -> (error -100500 while analyzing string >)
    err = 0x00000000
    srcPos = 0x00000001

ScriptInterface::ParseJSON (scriptinterface.cpp:897)
    this = (unavailable)
    string_utf8 = 0x0030FA4C (see above)
    attrsW = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
    string = (error -100500 while analyzing wstring<utf16_traits >)
    vp = 8 (0x0000000000000008)

TestScriptInterface::test_json (test_scriptinterface.h:140)
    this = (unavailable)
    val = 
        m_Val = 
            px = 0x05E0B1B0 -> 7118796211726961984 (0x62CB0B700461CD40)
            pn = 
                pi_ = 0x0030F998 -> 
                    use_count_ = 2029312 (0x001EF700)
                    weak_count_ = 1955361129 (0x748C7169)




    script = 
        m = (error -100406 while analyzing auto_ptr<ScriptInterface_impl>)

    input = (error -100500 while analyzing string >)
    stringified = (error -100500 while analyzing string >)
    e = 0x0030F9B8 -> (error -100406 while analyzing exception)
    e = 0x00000405
    e = 0x001EDCA8 -> (error -100406 while analyzing exception)

CxxTest::RealTestDescription::run (realdescriptions.cpp:99)
    this = (unavailable)
    e = 0x0030FA84 -> (error -100406 while analyzing exception)

CxxTest::TestRunner::runTest (testrunner.h:77)
    this = (unavailable)
    td = 0x00D26FC4 -> 
        
            _next = 0x00000000
            _prev = 0x00D26FA8 -> 
                _next = 0x00D26FC4 (see above)
                _prev = 0x00D26F8C -> 
                    _next = 0x00D26FA8 (see above)
                    _prev = 0x00D26F70 -> 
                        _next = 0x00D26F8C (see above)
                        _prev = 0x00D26F54 -> 
                            _next = 0x00D26F70 (see above)
                            _prev = 0x00D26F38 -> 
                                _next = 0x00D26F54 (see above)
                                _prev = 0x00D26F1C -> 
                                    _next = 0x00D26F38 (see above)
                                    _prev = 0x00D26F00 -> 
                                        _next = 0x00D26F1C (see above)
                                        _prev = 0x00D26EE4 -> 
                                            _next = 0x00D26F00 (see above)
                                            _prev = 0x00000000
                                            _active = true 

                                        _active = true 

                                    _active = true 

                                _active = true 

                            _active = true 

                        _active = true 

                    _active = true 

                _active = true 

            _active = true 


    sg = 
        _abortTestOnFail = false
        _maxDumpSize = 3209980 (0x0030FAFC)


CxxTest::TestRunner::runSuite (testrunner.h:63)
    this = (unavailable)
    sd = 0x00D26EC0 -> 
        
            _next = 0x00D26FE8 -> 
                _next = 0x00D27030 -> 
                    _next = 0x00D27078 -> 
                        _next = 0x00D270DC -> 
                            _next = 0x00D27140 -> 
                                _next = 0x00D27190 -> 
                                    _next = 0x00D27224 -> 
                                        _next = 0x00D2726C -> 
                                            _next = 0x00D27538 -> 
                                                _next = 0x00D27668 -> 
                                                    _next = 0x00D27814 -> 
                                                        _next = 0x00D27878 -> 
                                                            _next = 0x00D278F8 -> 
                                                                _next = 0x00000000
                                                                _prev = 0x00D27878 (see above)
                                                                _active = true 

                                                            _prev = 0x00D27814 (see above)
                                                            _active = true 

                                                        _prev = 0x00D27668 (see above)
                                                        _active = true 

                                                    _prev = 0x00D27538 (see above)
                                                    _active = true 

                                                _prev = 0x00D2726C (see above)
                                                _active = true 

                                            _prev = 0x00D27224 (see above)
                                            _active = true 

                                        _prev = 0x00D27190 (see above)
                                        _active = true 

                                    _prev = 0x00D27140 (see above)
                                    _active = true 

                                _prev = 0x00D270DC (see above)
                                _active = true 

                            _prev = 0x00D27078 (see above)
                            _active = true 

                        _prev = 0x00D27030 (see above)
                        _active = true 

                    _prev = 0x00D26FE8 (see above)
                    _active = true 

                _prev = 0x00D26EC0 (see above)
                _active = true 

            _prev = 0x00D26E24 -> 
                _next = 0x00D26EC0 (see above)
                _prev = 0x00D26CFC -> 
                    _next = 0x00D26E24 (see above)
                    _prev = 0x00D26C28 -> 
                        _next = 0x00D26CFC (see above)
                        _prev = 0x00D26BC4 -> 
                            _next = 0x00D26C28 (see above)
                            (too much output; skipping to next top-level symbol)

                        _active = true 

                    _active = true 

                _active = true 

            _active = true 


    sg = 
        _abortTestOnFail = false
        _maxDumpSize = 3210048 (0x0030FB40)


CxxTest::PsTestRunner::runWorld (pstestwrapper.h:80)
    this = (unavailable)
    wd = 
        
            
                _next = 0x00000000
                _prev = 0x00C45501 -> 
                    _next = 0xC01BC82B -> 
                        _next = (unavailable - internal error)

                        _prev = (unavailable - internal error)

                        _active = (unavailable - internal error)


                    _prev = 0xC823D0F7 -> 
                        _next = (unavailable - internal error)

                        _prev = (unavailable - internal error)

                        _active = (unavailable - internal error)


                    _active = (bool)0x8B

                _active = (bool)0x64



    sg = 
        
            _abortTestOnFail = false
            _maxDumpSize = 13393572 (0x00CC5EA4)



CxxTest::PsTestRunner::runAllTests (pstestwrapper.h:16707566)
    listener = 0x00D2ABC8 -> (CxxTest::TestListener)

CxxTest::PsTestWrapper::runGui (pstestwrapper.h:96)
    this = (unavailable)
    argc = 0x0030FD50 -> 1 (0x00000001)
    argv = 0x001E42C0 -> 0x001E42C8 -> "c:\Users\Ben\devel\ps\binaries\system\test.exe"
    listener = 0x0030FBA0 -> (CxxTest::TestListener)

main (test_root.cpp:17)
    argc = 1 (0x00000001)
    argv = 0x001E42C0 (see above)

__tmainCRTStartup (crtexe.c:586)
    nested = 4187511306 (0xF9985A0A)

BaseThreadInitThunk (:0)

RtlInitializeExceptionChain (:0)

RtlInitializeExceptionChain (:0)


errno = 0 (No error reported here)
OS error = 487 (Attempt to access invalid address.)
#885 fixed [PATCH] GUI code improvement kromxp
Description

--The problem--

The gui code (source/gui) uses many variables linked with js and the xml reader (I suppose), these variables are added using AddSetting(type, stringy_name). Later many of this variables are getted/setted using GUI<type>::SetSetting and GUI<type>::GetSetting

These getters and setters was searching on a std::map each time. Using a profiler (gprof) on my computer, these appears on the top, taking > 7% of the running time. Running the game for around 1 minute would generate ~20 millions calls to these functions, this is because many of this calls was done each loop when redrawing the screen.

--Suggested solution--

When creating the new types, the old code using a dynamically allocated variable. With the new changes it can use member variables of the calling class.

Then, because the values now are stored in member variables, almost all the parts that was using the old code to find the values now just get the value of the member variable which is an order of magnitude faster than searching a map.

In case the variables are "Setted", care has been taken to generate the set events so other parts of the code might receive it, just like it was done before.

After applying the changes, the numbers of calls to std::map::find reduced drastically (some thousands after couple of minutes), and those are mostly coming from js code (which should be the correct way in this case). Now takes less than 0.1% of the running time.

#886 fixed Prop point position within static Collada meshes do not get exported or interpreted correctly by the game. historic_bruno michael
Description

Prop points get moved and pitched 90 degrees when exported from Max to Collada and into the Game. Not sure if this is an exporter issue or a game engine issue where the game does not interpret the Collada data correctly.

#887 wontfix [PATCH] Catch terrain patch vertex height for water rendering philip kromxp
Description

The proposed small patch catches the vertex heights of the patches used.

When rendering water if there is not any vertex below water level, the whole patch is skipped. For the patches that are shown, their height levels are cached and faster to access.

It also fixes the // TODO: stop using g_Game

An improvement by using this patch could be to only call the TerrainRenderer::RenderWater if any of the patches has been submitted to be rendered with any vertex below water level.

#888 fixed AI speed has decreased James Baillie Kieran P
Description

The AI is slower in Alpha 6 than it was in the previous release. We need to really optimize this.

One AI on a map is unbearably slow as it progresses. The game should be able to easily cope with 8 AI (standard "big" game).

Work out ways to increase the AI speed and implement them.

#889 fixed [ATLAS] Map save / load rework historic_bruno brian
Description

We need to make the map saving/loading more mod friendly (per Philip's request). This means Atlas presents maps as files within mods, not arbitrary paths on the user's system. File extensions should be abstracted away, overwriting existing files should be handled nicely, etc.

Part of #1943.

#890 worksforme Soldiers destroy towers instead of repair them Adrián Chaves
Description

Playing with Iberians, I sent some soldiers to repair a tower (not the wall tower, the other one), and although it had a repair animation, they where slowly destroying it instead.

#891 fixed Animals can attack buildings Erik Johansson
Description

Some animals are meant to be aggressive and attack the players units, that works fine as far as I can tell. However, at the moment they also attack buildings, something they shouldn't :) Perhaps it's something that's difficult to do, in that case it might benefit from being done at the same time that most cavalry/infantry units will be stopped from attacking buildings. Either way, the easiest way to limit it (especially since there is/might be edge cases like the Iberian Champion Javelinists which are cavalry units, but can attack buildings) is to add a new tag in the XMLs? Something like <CanAttackBuildings />?

#892 fixed Add paths to random maps historic_bruno historic_bruno
Description

One thing missing from the rmgen API is the ability to place paths. Paths are conceptually a line connecting two points, with some parametric variation in curviness. They can be used for roads, rivers, and many other things. The current plan for implementation is an area placer called PathPlacer which can be used in place of clumps.

An example of how this might look on the Cantabrian Highlands map: http://imgur.com/gIpf0

#893 fixed Unit spawning should respect passability class historic_bruno historic_bruno
Description

Unit spawning is broken because it only considers unit obstructions, meaning both trained and ungarrisoned units can be spawned on terrain that violates their passability class. This is one of the causes of "land ships", #771 and #818. I'm working on a fix for #804 which should also fix this (using the PassabilityClass defined in pathfinder.xml).

A few considerations:

  • The current behavior is bad, when spawning fails it just places the unit in the middle of the building which in the case of docks can expose a subtlety of the pathfinder: units on impassable border tiles (as between land and water) can move to other impassable tiles but not actually cross the boundary - meaning they get stuck as land ships if they move onto land.
  • Expand the search outward when spawning units, boats are large and docks have limited space to spawn units.
  • If a unit fails to spawn after training, it could be left blocking the training queue until it finds space or is cancelled. This will require some changes to the queue design and notification of the user.
  • If a unit fails to ungarrison, it could be left garrisoned unless the ejection is forced (e.g. a unit changes ownership while garrisoned)
#894 invalid Javascript errors and warnings when using Alt, Ctrl or Shift keys frapell
Description

I get this messages each time i press the "Alt", "Ctrl" or "Shift" keys:

Alt: WARNING: JavaScript warning: gui/session/input.js line 1143 reference to undefined property g_Groups.groups[groupId] ERROR: JavaScript error: gui/session/input.js line 1143 TypeError: g_Groups.groups[groupId] is undefined

performGroup("snap",(void 0))@gui/session/input.js:1143 handleInputAfterGui([object Object])@gui/session/input.js:682

Ctrl: WARNING: JavaScript warning: gui/session/input.js line 1161 reference to undefined property g_Groups.groups[groupId] ERROR: JavaScript error: gui/session/input.js line 1161 TypeError: g_Groups.groups[groupId] is undefined

performGroup("save",(void 0))@gui/session/input.js:1161 handleInputAfterGui([object Object])@gui/session/input.js:682

Shift: WARNING: JavaScript warning: gui/session/selection.js line 390 reference to undefined property this.groups[groupName] ERROR: JavaScript error: gui/session/selection.js line 390 TypeError: this.groups[groupName] is undefined

((void 0),[object Array])@gui/session/selection.js:390 performGroup("add",(void 0))@gui/session/input.js:1155 handleInputAfterGui([object Object])@gui/session/input.js:682

This happens in the following scenarios:

  • When no units nor buildings are selected
  • When a building is selected
  • When a single unit is selected
  • When a group of units are selected

This does not happen when i have a single unit or a group of units selected and i have a building to build.

The keys work despite of these errors.

#895 duplicate Atlas crashes when it does not have rights to write to a file Darth_Malloc Luke Martinez
Description

When atlas is run without root access in linux it crashes when saving into a folder that requires root access (0ad installation folder, etc.)

Reproduce: LINUX 1) Open a map in atlas 2) modify a bit 3) Try to save in ~/mods/public/scenarios/* 4) Permissions Error and crash.

It should at least ask for permissions or (at worst) ask me to save on a folder that I have permissions to.

Thanks, luke

#896 duplicate Brush/plane slice operation causes rare assertion failure Erik Johansson
Description

I'm not 100% sure how I got the following error, just using the flatten tool a lot. I'll see if I get it again, but I'll post the error message:

Assertion failed: "idx < si.newv.size()"
Location: Brush.cpp:246 (CBrush::Slice)

Call stack:

CBrush::Slice (brush.cpp:246)
    this = (unavailable)
    plane = 0xFFFFFFFF -> 
        m_Norm = 
            X = (unavailable - internal error)

            Y = (unavailable - internal error)

            Z = (unavailable - internal error)


        m_Dist = (unavailable - internal error)


    result = 0x00000005
    firstInFace = 5 (0x00000005)
    si = 
        v = (error -100500 while analyzing vector<SliceVertexInfo >)
        newv = (error -100500 while analyzing vector<NewVertexInfo >)
        thisFaceNewVertex = 3732780 (0x0038F52C)
        original = 0x0038F4E8 -> 
            m_Vertices = (error -100500 while analyzing vector<CVector3D >)
            m_Faces = (error -100500 while analyzing vector<size_t >)

        result = 0x0038F508 -> 
            m_Vertices = (error -100500 while analyzing vector<CVector3D >)
            m_Faces = (error -100500 while analyzing vector<size_t >)


    startInResultFaceArray = 6 (0x00000006)
    i = 3732828 (0x0038F55C)
    cur = 14 (0x0000000E)

CBrush::Intersect (brush.cpp:297)
    this = (unavailable)
    frustum = 0x03CFDDA0 -> 
        m_aPlanes = [10] 
            
                m_Norm = 
                    X = 1.696903 (0x3FD9341C)
                    Y = -1.762556 (0xBFE19B6D)
                    Z = 0.104325 (0x3DD5A878)

                m_Dist = -0.000019 (0xB79F08D9)

            
                m_Norm = 
                    X = -0.622785 (0xBF1F6ED4)
                    Y = 1.763787 (0x3FE1C3C7)
                    Z = 1.582765 (0x3FCA9808)

                m_Dist = 0.000016 (0x378949FF)

            
                m_Norm = 
                    X = -2.342355 (0xC015E926)
                    Y = -2.664490 (0xC02A8701)
                    Z = 2.678723 (0x402B7031)

                m_Dist = 0.000019 (0x37A097C0)

            
                m_Norm = 
                    X = 3.416473 (0x405AA77E)
                    Y = 2.665722 (0x402A9B2F)
                    Z = -0.991633 (0xBF7DDBA4)

                m_Dist = -0.000022 (0xB7B6569A)

            
                m_Norm = 
                    X = -0.004212 (0xBB8A0680)
                    Y = -0.000005 (0xB6A20A00)
                    Z = -0.006616 (0xBBD8CB80)

                m_Dist = 32.125492 (0x42008081)

            
                m_Norm = 
                    X = 1.078330 (0x3F8A06B8)
                    Y = 0.001236 (0x3AA20A0B)
                    Z = 1.693706 (0x3FD8CB5C)

                m_Dist = -32.125492 (0xC2008081)

            
                m_Norm = 
                    X = 0.000000 (0x00000000)
                    Y = 0.000000 (0x00000000)
                    Z = 0.000000 (0x00000000)

                m_Dist = 0.000000 (0x00000000)

            
                m_Norm = 
                    X = 0.000000 (0x00000000)
                    Y = 0.000000 (0x00000000)
                    Z = 0.000000 (0x00000000)

                m_Dist = 0.000000 (0x00000000)
 ...
        m_NumPlanes = 6 (0x00000006)

    result = 0x0038F52C -> 
        m_Vertices = (error -100500 while analyzing vector<CVector3D >)
        m_Faces = (error -100500 while analyzing vector<size_t >)

    buf = 
        m_Vertices = (error -100500 while analyzing vector<CVector3D >)
        m_Faces = (error -100500 while analyzing vector<size_t >)


CBound::IntersectFrustumConservative (bound.cpp:174)
    this = (unavailable)
    frustum = 0x03CFDDA0 (see above)
    brush = 
        m_Vertices = (error -100500 while analyzing vector<CVector3D >)
        m_Faces = (error -100500 while analyzing vector<size_t >)

    buf = 
        m_Vertices = (error -100500 while analyzing vector<CVector3D >)
        m_Faces = (error -100500 while analyzing vector<size_t >)


ShadowMapInternals::CalcShadowMatrices (shadowmap.cpp:228)
    this = (unavailable)
    minZ = 0.343842 (0x3EB00C0F)
    shift = 
        X = 0.277283 (0x3E8DF7FD)
        Y = 439.700012 (0x43DBD99A)
        Z = 0.000000 (0x00000000)

    lightToTex = 
        _11 = 0.000000 (0x19F1647A)
        _21 = 0.000000 (0x0038F600)
        _31 = 0.000000 (0x0038F60C)
        _41 = 0.000000 (0x00CE6C51)
        _12 = 0.000000 (0x00DC9608)
        _22 = 0.000000 (0x19F1647A)
        _32 = 5.921517 (0x40BD7D12)
        _42 = 0.000000 (0x19F1647A)
        _13 = 5.921517 (0x40BD7D12)
        _23 = 0.000000 (0x03CD1D30)
        _33 = 0.000000 (0x0CA8D970)
        _43 = 0.000000 (0x19F1647A)
        _14 = 5.921517 (0x40BD7D12)
        _24 = 0.000000 (0x0038F868)
        _34 = 0.000000 (0x00CE6C86)
        _44 = 5.921517 (0x40BD7D12)
        _data = [16] 
            0.000000 (0x19F1647A)
            0.000000 (0x0038F600)
            0.000000 (0x0038F60C)
            0.000000 (0x00CE6C51)
            0.000000 (0x00DC9608)
            0.000000 (0x19F1647A)
            5.921517 (0x40BD7D12)
            0.000000 (0x19F1647A)
            5.921517 (0x40BD7D12)
            0.000000 (0x03CD1D30)
            0.000000 (0x0CA8D970)
            0.000000 (0x19F1647A) ...
        _data2d = [4] 
            [4] { 0.000000 (0x19F1647A), 0.000000 (0x0038F600), 0.000000 (0x0038F60C), 0.000000 (0x00CE6C51) }
            [4] { 0.000000 (0x00DC9608), 0.000000 (0x19F1647A), 5.921517 (0x40BD7D12), 0.000000 (0x19F1647A) }
            [4] { 5.921517 (0x40BD7D12), 0.000000 (0x03CD1D30), 0.000000 (0x0CA8D970), 0.000000 (0x19F1647A) }
            [4] { 5.921517 (0x40BD7D12), 0.000000 (0x0038F868), 0.000000 (0x00CE6C86), 5.921517 (0x40BD7D12) }

    offsetX = 0.343842 (0x3EB00C0F)
    texscalex = 5.921517 (0x40BD7D12)
    texscaley = 5497927542043857700000000000000000.000000 (0x778788CD)
    offsetY = -0.553332 (0xBF0DA732)
    texscalez = -0.939027 (0xBF706414)
    scale = 
        X = -0.203328 (0xBE503543)
        Y = 252.507553 (0x437C81EF)
        Z = 340282346638528860000000000000000000000.000000 (0x7F7FFFFF)


ShadowMap::BeginRender (shadowmap.cpp:434)
    this = (unavailable)

CRenderer::RenderShadowMap (renderer.cpp:931)
    this = (unavailable)
    transparentShadows = 
        px = 0x19F1647A -> (RenderModifier)
        pn = 
            pi_ = 0x0038F78C -> 
                use_count_ = 13934493 (0x00D49F9D)
                weak_count_ = 0 (0x00000000)



    shadowTransp = 0.000000 (0x03C55438)

CRenderer::RenderSubmissions (renderer.cpp:1530)
    this = (unavailable)
    waterScissor = 
        m_Data = [2] 
            
                X = -1.#QNAN0 (0xFFFFFFFF)
                Y = 0.000000 (0x0038F708)
                Z = 0.000000 (0x03D24910)

            
                X = 0.000000 (0x0A64AA30)
                Y = 5.921517 (0x40BD7D12)
                Z = 0.000000 (0x19A56E88)


    reflectionScissor = 
        x1 = 253191815 (0x0F176687)
        y1 = 1086160146 (0x40BD7D12)
        x2 = 430272136 (0x19A56E88)
        y2 = 1086160146 (0x40BD7D12)

    refractionScissor = 
        x1 = 3733260 (0x0038F70C)
        y1 = 3733272 (0x0038F718)
        x2 = 13528145 (0x00CE6C51)
        y2 = 14456328 (0x00DC9608)

    dirty = 
        x1 = 64061216 (0x03D17F20)
        y1 = 210461408 (0x0C8B62E0)
        x2 = 253191815 (0x0F176687)
        y2 = 2005371085 (0x778788CD)


CRenderer::RenderScene (renderer.cpp:1792)
    this = (unavailable)
    scene = 0x03CB9568 -> (Scene)
    frustum = 
        m_aPlanes = [10] 
            
                m_Norm = 
                    X = -1.040495 (0xBF852EEF)
                    Y = 1211.236450 (0x44976791)
                    Z = 1.603598 (0x3FCD42B1)

                m_Dist = -0.940888 (0xBF70DE01)

            
                m_Norm = 
                    X = 1.595981 (0x3FCC491B)
                    Y = -859.250427 (0xC456D007)
                    Z = -2.600444 (0xC0266DAE)

                m_Dist = 0.550317 (0x3F0CE18E)

            
                m_Norm = 
                    X = 3.563219 (0x40640BC8)
                    Y = -1054.831055 (0xC483DA98)
                    Z = 2.195049 (0x400C7BB0)

                m_Dist = -2.428372 (0xC01B6A74)

            
                m_Norm = 
                    X = -3.007733 (0xC0407EB2)
                    Y = 1406.817139 (0x44AFDA26)
                    Z = 0.001590 (0x3AD06080)

                m_Dist = 0.007365 (0x3BF15580)

            
                m_Norm = 
                    X = -0.002178 (0xBB0EC300)
                    Y = 30.745148 (0x41F5F610)
                    Z = -0.406985 (0xBED0604A)

                m_Dist = -1.885421 (0xBFF15578)

            
                m_Norm = 
                    X = 0.557665 (0x3F0EC31A)
                    Y = 321.240845 (0x43A09ED4)
                    Z = 0.000000 (0x00000000)

                m_Dist = 0.000000 (0x00000000)

            
                m_Norm = 
                    X = 0.000000 (0x00000000)
                    Y = 0.000000 (0x00000000)
                    Z = 0.000000 (0x00000000)

                m_Dist = 0.000000 (0x00000000)

            
                m_Norm = 
                    X = 0.000000 (0x00000000)
                    Y = 0.000000 (0x00000000)
                    Z = 0.000000 (0x00000000)

                m_Dist = 0.000000 (0x00000000)
 ...
        m_NumPlanes = 63798520 (0x03CD7CF8)


CGameView::Render (gameview.cpp:470)
    this = (unavailable)

Render (gamesetup.cpp:215)
    skycol = 
        r = 1.000000 (0x3F800000)
        g = -170141183460469230000000000000000000000.000000 (0xFF000000)
        b = 0.000000 (0x00000000)
        a = 0.000000 (0x00200000)

    skystring = { (error -100500 while analyzing string >) }
    cursorName = { (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >) }

ViewGame::Render (view.cpp:248)
    this = (unavailable)
    vp = 
        m_X = 0 (0x00000000)
        m_Y = 1476 (0x000005C4)
        m_Width = 762 (0x000002FA)
        m_Height = 3212836864 (0xBF800000)

    costClass = 0 (0x00)
    goal = 
        type = POINT
        x = 
            value = 0 (0x00000000)

        z = 
            value = 0 (0x00000000)

        u = 
            X = 
                value = 0 (0x00000000)

            Y = 
                value = 0 (0x00000000)


        v = 
            X = 
                value = 0 (0x00000000)

            Y = 
                value = 0 (0x00000000)


        hw = 
            value = 0 (0x00000000)

        hh = 
            value = 63207156 (0x03C476F4)



BeginAtlas (gameloop.cpp:268)
    args = 0x00000000
    dll = 0x03C27528 -> 
        m_Name = 0x03C303D8 -> [8] { 64 ('@'), 142, 209, 12, 0, 0, 0, 0 }
        m_Handle = 0x03C278F8

    hooks = 
        override_gl_upload_caps = 0x03C27A70 -> 
        get_log_dir = 0x00000000
        bundle_logs = 0x00000000
        translate = 0x00C073F2 -> (CmdLineArgs::Has)
        translate_free = 0x0D0E9378 -> 
        log = 0x00000051
        display_error = 0x00000000

    uiThread = 6 (0x00000006)
    msgPasser = 
        (AtlasMessage::MessagePasser)
        m_Mutex = 
            m_Mutex = 0x00000020

        m_SemaphoreName = { (error -100500 while analyzing string >) }
        m_Semaphore = 0x00000002
        m_Queue = (error -100500 while analyzing queue<AtlasMessage::IMessage *,deque<AtlasMessage::IMessage * > >)
        m_Trace = (bool)0x20

    paths = 
        m_root = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 31320

        m_rdata = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 428

        m_data = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 360

        m_config = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 55534

        m_cache = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 10192

        m_logs = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 47 ('/')


    last_activity = 1.08646e-311 (0x0000020000000125)
    recent_activity = false
    time = 6.0267e+175 (0x646E756F72416574)
    ev = 
        ev = 
            type = 26 (0x1A)
            active = { type = 26 (0x1A), gain = 0 (0x00), state = 0 (0x00) }
            key = 
                type = 26 (0x1A)
                keysym = { sym = 31, unicode = 31360 (0x7A80) }

            motion = { type = 26 (0x1A), x = 0 (0x0000), y = 31 (0x001F) }
            button = 
                type = 26 (0x1A)
                button = 0 (0x00)
                state = 0 (0x00)
                x = 31 (0x001F)
                y = 0 (0x0000)

            resize = { type = 26 (0x1A), w = 31 (0x0000001F), h = 63076992 (0x03C27A80) }
            expose = { type = 26 (0x1A) }
            quit = { type = 26 (0x1A) }
            user = { type = 26 (0x1A), code = 31 (0x0000001F), data1 = 0x03C27A80 }


    length = 0.000000 (0x03007400)
    last_time = 7549.07 (0x40BD7D11EEF0839A)
    name = (error -100500 while analyzing string >)
    sleepUntil = 6.0267e+175 (0x646E756F72416574)

ATLAS_RunIfOnCmdLine (atlas.cpp:77)
    args = 0x0038FC1C -> 
        m_Args = (error -100500 while analyzing vector<pair<CStr8,CStr8> >)
        m_Arg0 = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = [8] { 47 ('/'), 30598, 64980, 56 ('8'), 32 (' '), 0, 57382, 30598 }


    force = false

RunGameOrAtlas (main.cpp:437)
    argc = 2 (0x00000002)
    argv = 0x03C27A50 -> 0x03C26CE0 -> "pyrogenesis.exe"
    args = 
        m_Args = (error -100500 while analyzing vector<pair<CStr8,CStr8> >)
        m_Arg0 = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 64980


    paths = 
        m_root = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 7885

        m_rdata = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 1

        m_data = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 64824

        m_config = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 0

        m_cache = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 64900

        m_logs = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 18902


    replay = 
        m_Stream = 0x00020024 -> (error -100406 while analyzing basic_istream<char,char_traits<char> >)

    mod = 
        path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
        separator = 63062

    zip = 
        path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
        separator = 0

    paths = 
        m_root = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 7885

        m_rdata = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 1

        m_data = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 64824

        m_config = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 0

        m_cache = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 64900

        m_logs = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 18902


    builder = 
        m_VFS = 
            px = 0x00000000
            pn = 
                pi_ = 0x00000020


        m_Files = (error -100500 while analyzing vector<Path >)
        m_TempDir = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 72 ('H')



main (main.cpp:511)
    argc = 2 (0x00000002)
    argv = 0x03C27A50 (see above)

wmain (wseh.cpp:380)
    argc = 2 (0x00000002)
    argv = 0x03C26C98 -> 0x03C26CA4 -> "pyrogenesis.exe"
    utf8_argv = (error -100500 while analyzing vector<char * >)
    ret = 13873581 (0x00D3B1AD)
    utf8 = (error -100500 while analyzing string >)

__tmainCRTStartup (crtexe.c:583)
    nested = 0 (0x00000000)

CallStartupWithinTryBlock (wseh.cpp:397)
    ret = 939161476 (0x37FA7784)

BaseThreadInitThunk (:0)

RtlInitializeExceptionChain (:0)

RtlInitializeExceptionChain (:0)


errno = 0 (No error reported here)
OS error = 487 (Ett försök gjordes att använda en ogiltig adress.)

(The Swedish text means more or less: An attempt was made to use an invalid address.)

#897 fixed javascript common api lexa
Description

In data/mods/public/simulation/ai/base.js

There seem to be an error at line 90:

this.OnUpdate();

Should be

this.OnUpdate(state);

#898 fixed Multiplayer game crashes in lobby when selecting text Kenny Long Luke Martinez
Description

Selecting text with the mouse in the lobby (or when selecting a name) crashes the game.

Reproduced on: Windows 7, Fedora.

#899 fixed snd_mgr causes crash at exit and during game historic_bruno
Description

OS: WinXP

Build: [9845] release or debug in VS2008 express


I can reproduce the first error by simply exiting the game:

Function call failed: return value was -100022 (Invalid handle)
Location: h_mgr.cpp:763 (h_force_free)

Call stack:

h_force_free (h_mgr.cpp:763)
    h = 42949673666 (0x0000000A000002C2)
    type = 0x00643298 -> 
        init = 0x00402CE0 -> (UniqueRangeDeleterNone)
        reload = 0x0041BC60 -> (SndData_reload)
        dtor = 0x0041AC60 -> (SndData_dtor)
        validate = 0x00419270 -> (SndData_validate)
        to_string = 0x00418510 -> (SndData_to_string)
        user_size = 24 (0x00000018)
        name = 0x005E6BF0 -> "SndData"


hsd_list_free_all (snd_mgr.cpp:861)

al_shutdown (snd_mgr.cpp:650)

Shutdown (gamesetup.cpp:664)
    __formal = 0 (0x00000000)
    LINE_624_ = 
        m_t0 = 7.21416e-307 (0x00603608402BC9C3)
        m_description = 0x005BA13D -> [8] { 50307, 32788, 52285, 25875, 0, 5493, 42125, 36 ('$') }

    LINE_629_ = 
        m_t0 = 7.21416e-307 (0x00603608402BC9C3)
        m_description = 0x005BA13D (see above)

    LINE_634_ = 
        m_t0 = 7.21416e-307 (0x00603608402BC9C3)
        m_description = 0x005BA13D (see above)

    LINE_641_ = 
        m_t0 = 7.21416e-307 (0x00603608402BC9C3)
        m_description = 0x005BA13D (see above)

    LINE_647_ = 
        m_t0 = 7.21416e-307 (0x00603608402BC9C3)
        m_description = 0x005BA13D (see above)

    LINE_651_ = 
        m_t0 = 7.21416e-307 (0x00603608402BC9C3)
        m_description = 0x005BA13D (see above)

    LINE_655_ = 
        m_t0 = 7.21416e-307 (0x00603608402BC9C3)
        m_description = 0x005BA13D (see above)

    LINE_661_ = 
        m_t0 = 7.21416e-307 (0x00603608402BC9C3)
        m_description = 0x005BA13D (see above)

    LINE_674_ = 
        m_t0 = 7.21416e-307 (0x00603608402BC9C3)
        m_description = 0x005BA13D (see above)


RunGameOrAtlas (main.cpp:493)
    argc = 1 (0x00000001)
    argv = 0x093F5880 -> 0x093F5990 -> "C:\devel\0ad\ps\binaries\system\pyrogenesis.exe"
    args = 
        m_Args = (error -100500 while analyzing vector<pair<CStr8,CStr8> >)
        m_Arg0 = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 576


    paths = 
        m_root = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 65068

        m_rdata = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 22823

        m_data = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 0

        m_config = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 0

        m_cache = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 65204

        m_logs = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 331


    replay = 
        m_Stream = 0x00000001

    mod = 
        path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
        separator = 65128

    zip = 
        path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
        separator = 4

    paths = 
        m_root = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 65068

        m_rdata = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 22823

        m_data = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 0

        m_config = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 0

        m_cache = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 65204

        m_logs = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 331


    builder = 
        m_VFS = 
            px = 0x00000000
            pn = 
                pi_ = 0x00000002


        m_Files = (error -100500 while analyzing vector<Path >)
        m_TempDir = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 47 ('/')



main (main.cpp:511)
    argc = 1 (0x00000001)
    argv = 0x093F5880 (see above)

wmain (wseh.cpp:380)
    argc = 1 (0x00000001)
    argv = 0x093F5210 -> 0x093F5218 -> "C:\devel\0ad\ps\binaries\system\pyrogenesis.exe"
    utf8_argv = (error -100500 while analyzing vector<char * >)
    ret = 6009910 (0x005BB436)
    utf8 = (error -100500 while analyzing string >)

__tmainCRTStartup (crtexe.c:583)
    nested = 0 (0x00000000)

CallStartupWithinTryBlock (wseh.cpp:397)
    ret = 2766642449 (0xA4E79D11)

RegisterWaitForInputIdle (:0)


errno = 0 (No error reported here)
OS error = 2 (The system cannot find the file specified.)

The second error occurs during the game, seemingly when I do something to trigger a sound, like tasking units to move or gather a resource.

Function call failed: return value was -100010 (Logic error in code)
Location: snd_mgr.cpp:114 (al_ReportError)

Call stack:

al_ReportError (snd_mgr.cpp:114)
    err = 40964 (0x0000A004)
    caller = 0x005E6E10 -> "al_buf_free"
    line = 436 (0x000001B4)

al_buf_free (snd_mgr.cpp:436)
    al_buf = 854772512 (0x32F2CB20)

h_reload (h_mgr.cpp:715)
    vfs = 0x0064F2EC -> 
        px = 0x093F64D0 -> (IVFS)
        pn = 
            pi_ = 0x093F7210 -> 
                use_count_ = 4 (0x00000004)
                weak_count_ = 1 (0x00000001)



    pathname = 0xEBDE1DD3 -> 
        path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
        separator = (unavailable - internal error)


    ret = 21675767935008767 (0x004D01FEFFFFFFFF)
    key = 4010463037 (0xEF0ACF3D)
    h = 23358192525442160 (0x0052FC270012FC70)

ReloadChangedFiles (filesystem.cpp:87)
    notifications = (error -100500 while analyzing vector<DirWatchNotification >)
    pathname = 
        path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
        separator = 53005


Frame (main.cpp:296)
    need_update = (bool)0x44
    TimeSinceLastFrame = -0.000000 (0x80000000)
    need_render = (bool)0x3E
    down = [3] { -0.866025 (0xBF5DB3D7), -0.500000 (0xBF000000), 0.000000 (0x0012FEB8) }

RunGameOrAtlas (main.cpp:492)
    argc = 1 (0x00000001)
    argv = 0x093F5880 -> 0x093F5990 -> "C:\devel\0ad\ps\binaries\system\pyrogenesis.exe"
    args = 
        m_Args = (error -100500 while analyzing vector<pair<CStr8,CStr8> >)
        m_Arg0 = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 576


    paths = 
        m_root = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 65068

        m_rdata = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 22823

        m_data = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 0

        m_config = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 0

        m_cache = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 65204

        m_logs = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 53133


    replay = 
        m_Stream = 0x00000001

    mod = 
        path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
        separator = 65128

    zip = 
        path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
        separator = 4

    paths = 
        m_root = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 65068

        m_rdata = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 22823

        m_data = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 0

        m_config = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 0

        m_cache = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 65204

        m_logs = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 53133


    builder = 
        m_VFS = 
            px = 0x00000000
            pn = 
                pi_ = 0x00000002


        m_Files = (error -100500 while analyzing vector<Path >)
        m_TempDir = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 47 ('/')



main (main.cpp:511)
    argc = 1 (0x00000001)
    argv = 0x093F5880 (see above)

wmain (wseh.cpp:380)
    argc = 1 (0x00000001)
    argv = 0x093F5210 -> 0x093F5218 -> "C:\devel\0ad\ps\binaries\system\pyrogenesis.exe"
    utf8_argv = (error -100500 while analyzing vector<char * >)
    ret = 6009910 (0x005BB436)
    utf8 = (error -100500 while analyzing string >)

__tmainCRTStartup (crtexe.c:583)
    nested = 0 (0x00000000)

CallStartupWithinTryBlock (wseh.cpp:397)
    ret = 1606451003 (0x5FC07F3B)

RegisterWaitForInputIdle (:0)


errno = 0 (No error reported here)
OS error = 2 (The system cannot find the file specified.)
#900 worksforme Crash running two instances of the game at once historic_bruno
Description

OS: WinXP

Build: [9845] release or debug in VS2008 express


I get this error when I have one instance of the game open and then open a new one, it's unable to start (pressing continue does seem to work but only momentarily, as other errors occur).

Assertion failed: "GetLastError() == ERROR_FILE_NOT_FOUND"
Location: mahaf.cpp:350 (Init)

Call stack:

Init (mahaf.cpp:350)
    s = 
        m_lastError = 2090328352 (0x7C97E120)

    driverPathname = 
        path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
        separator = 65134


ModuleInit (module_init.cpp:47)
    initState = 0x0064AEDC -> 4294867266 (0xFFFE7942)
    init = 0x00424AA0 -> (Init)

mahaf_Init (mahaf.cpp:372)

CounterHPET::MapRegisters (hpet.cpp:152)
    registers = 0x0064ACA4 -> 0x00000000

CounterHPET::Activate (hpet.cpp:61)
    this = (unavailable)
    revision = (unavailable)
    vendorID = (unavailable)

GetNextBestSafeCounter (whrt.cpp:77)
    counter = 0x0012FEF0 -> (ICounter)
    nextCounterId = 1 (0x00000001)
    buf = [100] 
        12844
        94 ('^')
        25536
        67 ('C')
        64930
        30275
        5
        0
        46 ('.')
        21044
        1
        0 ...

InitCounter (whrt.cpp:108)

whrt_Init (whrt.cpp:303)

winit_CallInitFunctions (winit.cpp:89)

wstartup_InitAndRegisterShutdown (wstartup.cpp:109)

initterm_e (:0)

__tmainCRTStartup (crtexe.c:483)
    nested = 0 (0x00000000)

CallStartupWithinTryBlock (wseh.cpp:397)
    ret = 1229579465 (0x4949E4C9)

RegisterWaitForInputIdle (:0)


errno = 0 (Unknown error (0, 0x0))
OS error = 2 (The system cannot find the file specified.)

This leads to other errors like:

ERROR: CVFSFile: file shaders/model_common.vp couldn't be opened (vfs_load: -110300)
ERROR: CVFSFile: file shaders/solid.fp couldn't be opened (vfs_load: -110300)
ERROR: CVFSFile: file shaders/solid_tex.fp couldn't be opened (vfs_load: -110300)
ERROR: CVFSFile: file shaders/solid_color.fp couldn't be opened (vfs_load: -110300)

and

Assertion failed: "p"
Location: trace.cpp:218 (Trace::Allocate)

Call stack:

Trace::NotifyLoad (trace.cpp:160)
    this = (unavailable)
    pathname = 0x0B9FB934 -> 
        path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
        separator = [8] { 47 ('/'), 0, 0, 0, 47496, 2975, 2, 0 }

    size = 2442 (0x0000098A)

VFS::LoadFile (vfs.cpp:187)
    this = (unavailable)
    pathname = 0x0B9FB934 (see above)
    fileContents = 0x0012FB5C -> 
        px = 0x1024C000 -> "!!ARBfp1.0
#ifdef USE_FP_SHADOW
  OPTION ARB_fragment_program_shadow;
#endif

#ifdef LIGHTING_MODEL_old
  #define CLAMP_LIGHTING
#endif

#ifdef CLAMP_LIGHTING // for compat with old scenarios that expect clamped lighting
  #define MAD_MAYBE_SAT MAD_SAT
#else
  #define MAD_MAYBE_SAT MAD
#endif

#ifdef USE_OBJECTCOLOR
  PARAM objectColor = program.local[0];
#endif

PARAM shadingColor = program.local[1];
PARAM ambient = program.local[2];

#ifdef USE_SHADOW_PCF
  PARAM shadowOffsets1 = p"
        pn = 
            pi_ = 0x0BA06E68 -> 
                use_count_ = 2 (0x00000002)
                weak_count_ = 1 (0x00000001)



    size = 0x0012FB64 -> 2442 (0x0000098A)
    s = (ScopedLock)
    directory = 0x1024B000 -> 
        m_files = (error -100500 while analyzing map<Path,VfsFile >)
        m_subdirectories = (error -100500 while analyzing map<Path,VfsDirectory >)
        m_realDirectory = 
            px = 0x70203D20 -> 
                (IFileLoader)
                m_path = 
                    path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
                    separator = (unavailable - internal error)


                m_priority = (unavailable - internal error)

                m_flags = (unavailable - internal error)

                m_watch = 
                    px = (unavailable - internal error)

                    pn = 
                        pi_ = (unavailable - internal error)




            pn = 
                pi_ = 0x72676F72 -> 
                    use_count_ = (unavailable - internal error)

                    weak_count_ = (unavailable - internal error)




        m_shouldPopulate = 1814981985 (0x6C2E6D61)

    file = 0x0012FB64 (see above)

CVFSFile::Load (filesystem.cpp:112)
    this = (unavailable)
    vfs = 0x0064F2EC -> 
        px = 0x093F64D0 -> (IVFS)
        pn = 
            pi_ = 0x093F6FF0 -> 
                use_count_ = 4 (0x00000004)
                weak_count_ = 1 (0x00000001)



    filename = 0x0B9FB934 (see above)

CShaderProgramARB::Reload (shaderprogram.cpp:110)
    this = (unavailable)
    vertexFile = 
        m_Buffer = 
            px = 0x0FD54430 -> "èP^"
            pn = 
                pi_ = 0x000006DC


        m_BufferSize = 270843904 (0x1024C000)

    vertexCode = { (error -100500 while analyzing string >) }
    fragmentCode = { (error -100500 while analyzing string >) }
    fragmentFile = 
        m_Buffer = 
            px = 0x0BA06E68 (see above)
            pn = 
                pi_ = 0x0000098A


        m_BufferSize = 16907208 (0x0101FBC8)

    preprocessor = 
        Source = 0x0012FACC -> [8] { 12, 251, 18, 0, 241, 206, 92 ('\'), 0 }
        SourceEnd = 0x0012FBE8 -> [8] { 216, 18, 76 ('L'), 0, 236, 117 ('u'), 158, 11 }
        Line = 1244100 (0x0012FBC4)
        BOL = (bool)0x20
        EnableOutput = 2089877600 (0x7C910060)
        MacroList = 0xFFFFFFFF -> 
            Name = 
                Type = (unavailable - internal error)

                Allocated = (unavailable - internal error)

                String = (unavailable - internal error)

                Buffer = (unavailable - internal error)

                Length = (unavailable - internal error)


            NumArgs = (unavailable - internal error)

            Args = (unavailable - internal error)

            Value = 
                Type = (unavailable - internal error)

                Allocated = (unavailable - internal error)

                String = (unavailable - internal error)

                Buffer = (unavailable - internal error)

                Length = (unavailable - internal error)


            Body = 
                Type = (unavailable - internal error)

                Allocated = (unavailable - internal error)

                String = (unavailable - internal error)

                Buffer = (unavailable - internal error)

                Length = (unavailable - internal error)


            Next = (unavailable - internal error)

            ExpandFunc = (unavailable - internal error)

            Expanding = (unavailable - internal error)


        ErrorData = 0x7C91005D

    it = (error -100406 while analyzing _Tree<<CStr8,CStr8>::iterator)

CShaderManager::ReloadChangedFile (shadermanager.cpp:206)
    this = (unavailable)
    path = 0x0012FC70 -> 
        path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
        separator = [8] { 47 ('/'), 18, 30724, 32424, 64708, 18, 16217, 93 (']') }

    files = 
        { { (error -100500 while analyzing iterator<forward_iterator_tag,pair<Path const ,set<boost::weak_ptr<CShaderProgram> > >,int,pair<Path const ,set<boost::weak_ptr<CShaderProgram> > > *,pair<Path const ,set<boost::weak_ptr<CShaderProgram> > > &>) } }
        base_ = 
            bucket_ = 0x0B9FABA8 -> 
                next_ = 0x005E4554 -> 
                    next_ = 0x00403580 -> 
                        next_ = 0x042444F6 -> 
                            next_ = 0x00000000




            node_ = 0x0B9FD8FC -> 
                next_ = 0x0BA01750 -> 
                    next_ = 0x0B9FD878 -> 
                        next_ = 0x00000000





    program = 
        px = 0x0B9FABA8 (see above)
        pn = 
            pi_ = 0x0B9FD8FC (see above)



CShaderManager::ReloadChangedFileCB (shadermanager.cpp:193)
    param = 0x09684DE4
    path = 0x0012FC70 (see above)

ReloadChangedFiles (filesystem.cpp:85)
    notifications = (error -100500 while analyzing vector<DirWatchNotification >)
    pathname = 
        path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
        separator = 30724


Frame (main.cpp:296)
    need_update = (bool)0x37
    TimeSinceLastFrame = 0.000000 (0x093F5884)
    need_render = (bool)0x3E
    down = [3] { 0.000000 (0x005BA13D), 0.000000 (0x005B9310), 0.000000 (0x0012FEB8) }

RunGameOrAtlas (main.cpp:492)
    argc = 1 (0x00000001)
    argv = 0x093F5880 -> 0x093F5990 -> "C:\devel\0ad\ps\binaries\system\pyrogenesis.exe"
    args = 
        m_Args = (error -100500 while analyzing vector<pair<CStr8,CStr8> >)
        m_Arg0 = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 576


    paths = 
        m_root = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 65068

        m_rdata = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 22823

        m_data = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 0

        m_config = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 0

        m_cache = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 65204

        m_logs = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 30852


    replay = 
        m_Stream = 0x00000001

    mod = 
        path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
        separator = 65128

    zip = 
        path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
        separator = 4

    paths = 
        m_root = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 65068

        m_rdata = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 22823

        m_data = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 0

        m_config = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 0

        m_cache = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 65204

        m_logs = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 30852


    builder = 
        m_VFS = 
            px = 0x00000000
            pn = 
                pi_ = 0x00000002


        m_Files = (error -100500 while analyzing vector<Path >)
        m_TempDir = 
            path = (error -100500 while analyzing basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 47 ('/')



main (main.cpp:511)
    argc = 1 (0x00000001)
    argv = 0x093F5880 (see above)

wmain (wseh.cpp:380)
    argc = 1 (0x00000001)
    argv = 0x093F5210 -> 0x093F5218 -> "C:\devel\0ad\ps\binaries\system\pyrogenesis.exe"
    utf8_argv = (error -100500 while analyzing vector<char * >)
    ret = 6009910 (0x005BB436)
    utf8 = (error -100500 while analyzing string >)

__tmainCRTStartup (crtexe.c:583)
    nested = 0 (0x00000000)

CallStartupWithinTryBlock (wseh.cpp:397)
    ret = 1196924228 (0x47579D44)

RegisterWaitForInputIdle (:0)


errno = 0 (No error reported here)
OS error = 2 (The system cannot find the file specified.)
#901 fixed Troubleshoot Atlas camera lag historic_bruno
Description

Lately I notice the camera movement in Atlas is very laggy, the screen will freeze for roughly 1s and suddenly it has jumped across the map. I'm not sure if everyone experiences this, but mentioning it in IRC shows I'm not alone. Also it occurs on a fairly high spec computer: Win 7 64-bit, Intel Sandy Bridge i7-2600k, 8GB RAM, etc. Camera movement in Atlas should be very smooth and I haven't noticed an issue like this during games.

#902 fixed Allow setting rally points while constructing buildings Josh Raymond
Description

It is possible to set waypoints for construction buildings (different types of barracks) while this buildings are in construction? This is also possible in other real-time strategy games like StarCraft II.

#903 fixed [PATCH] Premake4 makefile dependency tracking broken for PCH Yves Philip Taylor
Description
  • Run make scriptinterface
  • Edit a file like lib/status.h and add #error 1
  • Run make scriptinterface
  • It doesn't try rebuilding anything at all

It ought to rebuild everything and hit the error. Looks like dependencies of the .gch file are being ignored entirely and not triggering rebuilds.

#904 duplicate Crash on script hotloading vts
Description

I encountered the following crash when hotloading GuiInterface.js. The exe was started using the -quickstart option. I've attached crashlog.dmp and crashlog.txt.

Operating System : Windows Vista Home Premium 32-bit SP2
Compiler: VC9 SP1
Processor: Intel(R) Core(TM)2 Duo CPU E6750 @ 2.66GHz
Memory : 3325MB (1440MB used)
Graphics Card: NVIDIA GeForce GTS 250 1GB GDDR3 PCI-E
Graphics Driver: NVIDIA ForceWare 257.21
Resolution : 1920x1080 pixels

Details: unhandled exception (PSERROR_CVFSFile_InvalidBufferAccess("CVFSFile_InvalidBufferAccess"))

Location: unknown:0 (RtlInitializeExceptionChain)

Call stack:

(error while dumping stack: No stack frames found)
errno = 0 (No error reported here)
OS error = 0 (no error code was set)
#905 fixed [PATCH] Improvement to bones' skinning gruby
Description

Bones' skinning can be improved by SSE for example.

#906 fixed [PATCH] Position cursor at end of line when browsing console history Ross Bearman
Description

After a request from vtsj on IRC, I've patched CConsole to position the cursor at the end of the line when browsing up or down through history.

Currently if you type something and then press up or dow it will show all entries that start with that string; however if the cursor is then moved to the end of the line the next search up or down will search for that entire string. Therefore in order to implement the positioning of the cursor at the end of the line, the prefix search would have to be removed.

Common shells (Windows cmd, bash and others) don't use this kind of prefix searching, although zsh implements a separate functionality for searching through history.

After a short discussion with Phillip on IRC I decided to submit this patch and allow the developers to decide whether it's more intuitive/useful to have the cursor at the end of the line or the prefix searching.

#907 fixed [PATCH] Wrong window position on Windows with taskbar on top vts
Description

On Windows, if the taskbar is at the top of the screen, windows spawned at (0,0) will slide under the taskbar and hide the min/max/X controls. This small patch first queries for the usable desktop area and spawns the window relative to that instead.

#908 fixed CCmpVision's AlwaysVisible is broken philip vts
Description

For the rally points, it is necessary to be able to render their marker flags inside the SoD. This can be specified by setting the AlwaysVisible property of the Vision component to true. However, this currently has no effect, and entities with this property remain invisible in the SoD.

To reproduce:

  • Edit templates/special/actor.xml and edit the AlwaysVisible property to true.
  • Observe that no actors are visible in the SoD.

After a discussion with Philip on IRC it became clear that this is a feature that didn't get implemented when the LOS rendering code was rewritten, and that it will probably involve non-trivial changes to rendering code.

#909 fixed Assertion failure on allocating 0 bytes from pool when rendering terrain iznogood
Description

Hi. When I start the game I can see the menu, but when I try to start to play on a map I got an error at the end of the loading.

#910 fixed Units disappear if ungarissoned too fast Deiz vts
Description

If several units are garrisoned inside a building and you ungarrison them all individually by clicking the unload button really fast, units are sometimes lost. The number of units that is garrisoned does not seem to matter, as I have observed it to happen even for 2 units.

To reproduce:

  • Start a new singleplayer game on Gallic Fields.
  • Select more than 2 of the starting units and garrison them in the Palisade Fort closest to the camera.
  • Select the palisade fort, set a rally point, and keep hitting the single-unit unload button as fast as you can.
  • Observe how fewer units exit the fort than were originally garrisoned.
#911 fixed Enemy goats count towards the victory condition Ross Bearman
Description

Enemy goats (possisbly all herd animals) must be killed and harvested in order to win. However it's impossible to harvest them after killing them as they "belong" to the enemy.

Suggested fix: Remove herd animals from the win condition. Allow players to harvest eachothers herd animals. Fix death animation for enemy herd animals.

#912 invalid [PATCH] Fix handler_stack_top in input.cpp cristian
#913 fixed [PATCH] Crash starting game on Oasis II Michael D. Hafer vts
Description

Starting a game on Oasis II crashes the game. An PSERROR_File_InvalidType exception is thrown in ps/trunk/ps/FileIo.cpp at line 138, because the file size recorded in the the maps/scenarios/Oasis II.pmp file header does not add up to the actual file size.

Commit [9921] last updated the file to 659.456 bytes, but apparently the filesize recorded in the header did not get updated accordingly. This value should be the total file size minus the header size (which is 12) in little-endian order, so this can be fixed by setting bytes 8-12 to F4 0F 0A 00 (=659.444).

Assigned to Mythos_Ruler as he requested for this to be looked at on IRC. No patch attachment since this is a binary edit.

#914 fixed [PATCH] Fixed-angle/huge bounding boxes cause unintuitive selection behaviour vts vts
Description

To determine which units are to be highlighted/selected when the mouse is at a certain position, a ray is cast from the camera to the point on the terrain pointed to by the mouse, and this ray is checked for intersections with the bounding boxes of all the Selectable entities in the scene. If multiple objects' bounding boxes are intersected, the one where the ray passes the closest by its center wins.

However, the bounding boxes ignore the rotation of the models. This can cause the visual outline of the object to differ greatly from the bounding boxes used for hit testing, which causes unintuitive selection/highlight behaviour: typically buildings or trees are selected even though the mouse is nowhere near them. Some trees have massive bounding boxes, which does not help.

Also, this prevents the user from setting the a building's rally point at many points in the terrain, because seemingly unrelated objects will be highlighted instead.

The example screenshots below are also attached:

http://i.imgur.com/kmcaO.jpg

The red outline is the bounding box of the currently highlighted tree. Even though the mouse is halfway up the screen, some random tree is selected all the way down.

http://i.imgur.com/Ggl6d.jpg

Again, the red outline is the bounding box, the blue is the actual floorplan. Any 2D mouse location within the red outlines will cause the building to be highlighted. This makes it impossible to set the rally point near the top of the outline under the metal mine, even though that location would otherwise be perfectly valid.

#915 fixed Crash on game exit Roland Häder
Description

The game crashes at exit, see attached crash log for details.

#916 fixed [PATCH] Spaces in paths might break SpiderMonkey build ben Philip Taylor
Description

Spaces in paths might break the SpiderMonkey build with errors like

Can't open perl script "../build/autoconf/acoutput-fast.pl": No such file or directory
not updating unwritable cache ./config.cache
creating ./config.status
creating Makefile
sed: can't read ../Makefile.in: No such file or directory
...

Ought to test and maybe fix that.

#917 needsinfo [NEEDS INFO] Error with enet build scripts Mark
Description

Error when compiling and running the game with r9335.

OS: ubuntu 10.10 32 bit

(04:29:52 PM) Philip`: Mark1: It's something with the enet build scripts that needs fixing, but I don't have time to look into it now

mark@mark-K52Dr:~/Desktop/game/binaries/system$ ./pyrogenesis
./pyrogenesis: error while loading shared libraries: libenet.so.0debian1: cannot open shared object file: No such file or directory

#918 fixed Fix rendering of territories with holes vts Philip Taylor
Description

Consider territory assignments like:

00000000
01111110
01012130
01111110
00000000

where 0 is neutral. CCmpTerritoryManager::ComputeBoundaries will find the outer edge of the 1s, but not the inner edge around the 0 hole or the 2 hole. (The 3 isn't a hole since the outer edge already surrounds it.)

Might need to add a 'already processed' flag to tiles instead of setting them to 0, and then add a 'already has territory boundary at the +j edge of this tile' flag which is set when walking the boundary, then if we find a tile with different owner to its -j neighbour and that neighbour isn't neutral and doesn't have the edge flag then start a new walk around that edge to produce the inner boundary (with inverted direction). Or something like that.

#920 fixed Crash on exit: Handle tag mismatch (stale reference?) historic_bruno
Description

OS: Win 7 Pro 64-bit
Version: [9967] release build (32-bit), compiled with VC 2010 express

First time I've seen this type of error on this computer and not sure that I can reproduce it :/ Hope there's some info here that helps.


Function call failed: return value was -120003 (Handle tag mismatch (stale reference?))
Location: h_mgr.cpp:235 (h_data_tag)

Call stack:

h_data_tag_type (h_mgr.cpp:247)
    h = 600834437 (0x0000000023D00185)
    type = 0x002D6060 -> 
        init = 0x0021D9D0 -> (OglTex_init)
        reload = 0x0021DA20 -> (OglTex_reload)
        dtor = 0x0021C820 -> (OglTex_dtor)
        validate = 0x0021D2A0 -> (OglTex_validate)
        to_string = 0x0021C860 -> (OglTex_to_string)
        user_size = 64 (0x00000040)
        name = 0x0029CFB8 -> "OglTex"

    hd = (unavailable)

h_free (h_mgr.cpp:583)
    h = 0x03A0F280 -> 60879008 (0x0000000003A0F0A0)
    type = 0x002D6060 (see above)
    hd = 0x03A0F280 (see above)

ogl_tex_free (ogl_tex.cpp:557)
    ht = 0x03A10E3C -> 0 (0x0000000000000000)

UniFont_dtor (unifont.cpp:70)
    f = 0x03A10E3C (see above)

Shutdown (h_mgr.cpp:747)

ModuleShutdown (module_init.cpp:72)
    initState = 0x002DA8CC -> 4294867266 (0xFFFE7942)
    shutdown = 0x0021FE60 -> (Shutdown)

h_mgr_shutdown (h_mgr.cpp:761)

Shutdown (gamesetup.cpp:672)
    __formal = 0 (0x00000000)
    LINE_624_ = 
        m_t0 = 56.3885 (0x404C31BA344CB175)
        m_description = 0x00280078 -> "resource modules"

    LINE_629_ = 
        m_t0 = 56.3885 (0x404C31BA344CB175)
        m_description = 0x00280078 (see above)

    LINE_634_ = 
        m_t0 = 56.3885 (0x404C31BA344CB175)
        m_description = 0x00280078 (see above)

    LINE_641_ = 
        m_t0 = 56.3885 (0x404C31BA344CB175)
        m_description = 0x00280078 (see above)

    LINE_647_ = 
        m_t0 = 56.3885 (0x404C31BA344CB175)
        m_description = 0x00280078 (see above)

    LINE_651_ = 
        m_t0 = 56.3885 (0x404C31BA344CB175)
        m_description = 0x00280078 (see above)

    LINE_655_ = 
        m_t0 = 56.3885 (0x404C31BA344CB175)
        m_description = 0x00280078 (see above)

    LINE_661_ = 
        m_t0 = 56.3885 (0x404C31BA344CB175)
        m_description = 0x00280078 (see above)

    LINE_674_ = 
        m_t0 = 56.3885 (0x404C31BA344CB175)
        m_description = 0x00280078 (see above)


RunGameOrAtlas (main.cpp:493)
    argc = 2 (0x00000002)
    argv = (unavailable)
    args = 
        m_Args = (unsupported vector<pair<CStr8,CStr8> >)
        m_Arg0 = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 92 ('\')


    paths = 
        m_root = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 0

        m_rdata = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 8

        m_data = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 62776

        m_config = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 10072

        m_cache = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 14458

        m_logs = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 10066


    replay = 
        m_Stream = 0x00000000

    mod = 
        path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
        separator = 57914

    zip = 
        path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
        separator = 23

    paths = 
        m_root = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 0

        m_rdata = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 8

        m_data = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 62776

        m_config = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 10072

        m_cache = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 14458

        m_logs = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 10066


    builder = 
        m_VFS = 
            px = 0x020A2750 -> (IVFS)
            pn = 
                pi_ = 0x002A0035 -> 
                    use_count_ = 1811939328 (0x6C000000)
                    weak_count_ = 1979737344 (0x76006500)



        m_Files = (unsupported vector<Path >)
        m_TempDir = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 335



main (main.cpp:511)
    argc = 2 (0x00000002)
    argv = 0x020A7B38 -> 0x01FC83F0 -> "C:\Users\Ben\devel\ps\binaries\system\pyrogenesis.exe"

wmain (wseh.cpp:380)
    argc = 2 (0x00000002)
    argv = 0x01FC7A00 -> 0x01FC7A0C -> "C:\Users\Ben\devel\ps\binaries\system\pyrogenesis.exe"
    utf8_argv = (unsupported vector<char * >)
    ret = 33323520 (0x01FC7A00)
    utf8 = (unsupported basic_string<char,char_traits<char> >)

CallStartupWithinTryBlock (wseh.cpp:397)
    ret = 0 (0x00000000)

RtlInitializeExceptionChain (:0)

RtlInitializeExceptionChain (:0)


errno = 0 (No error reported here)
OS error = 487 (Attempt to access invalid address.)
#921 fixed [PATCH] Improve UI notification for failing attempts to build historic_bruno historic_bruno
Description

There are now a number of restrictions on where a building can be placed and possible limitations on how many can be built, in addition to its cost. Currently we don't distinguish between all these cases, a failure is indicated by a red-colored placement preview or sometimes a UI notification. To make this clearer, the following are proposed:

  • Add return values that indicate the failing restriction(s) to at least the following functions: BuildRestrictions.CheckPlacement, BuildLimits.AllowedToBuild, GuiInterface.SetBuildingPlacementPreview CCmpObstruction.CheckFoundation, CCmpPathfinder.CheckBuildingPlacement, CCmpPathfinder.CheckUnitPlacement. Some examples:
    • Building site obstructed
    • Building site on invalid terrain (must be placed on [land, shore])
    • Building site outside world boundaries
    • Building site not allowed in [fog of war, shroud of darkness]
    • Building site not allowed in this territory (must be placed on [own, neutral, enemy, ally] territory)
    • Dock must be built facing into water(?)
    • [Building name] too close to an existing [building name] (must be placed at least [X] units away).
  • Show a tooltip like the trade setup tooltip that follows the cursor and gives a reason why the building can't be placed in the current location.
  • Numeric build limits don't rely on placement, so the user should be prevented from selecting the building in the UI. Maybe the icon can be greyed out, but the user can still click on it to get the exact message ("Limit of X reached for this building") and/or it could be indicated in the tooltip.
  • Similarly, if the user has insufficient resources, they shouldn't be able to try placing it. Instead we could change the icon tooltip to list in red the lacking resources (I've seen this in some RTS games and it's very clear), if they click the icon anyway it will tell them how much of each resource they need.
  • I think we'll want a similar system for technologies, where buildings with unsatisfied prerequisites can't be selected in the UI.
  • Of course all these restrictions must be checked not only by the UI (which is intended only to notify the user) but also within the simulation itself, to prevent cheats with modified UIs.
  • Some restrictions may be best indicated visually on the terrain, like minimum distance between civ centres or docks being restricted to shores.
#922 fixed Keep unit hitpoints percent unchanged when it promoted fcxSanya fcxSanya
Description

Currently when unit promoted it become full health. Health should be changed to the same percent as unit had before promotion. See discussion here: http://www.wildfiregames.com/forum/index.php?showtopic=1219&view=findpost&p=223855

#923 fixed Increase and balance stats for Carthaginian rank upgrades michael michael
Description

Each promoted citizen-soldier for Carthage needs new increased stats for each rank. Iberians, Greeks, and Celts all have these stat upgrades, but Carthage does not yet.

#924 fixed [PATCH] Fix Actor Editor build in Windows historic_bruno
Description

Actor Editor has never worked for me in Windows, but apparently it is still used. So I've tried fixing the manifest issues, based on the same "hacks" used in the game itself. I'm not sure it would work in a 64-bit build, but at least the 32-bit build works for me in Windows 7 64-bit (compiled with VC2010 Express).

#925 needsinfo [NEEDS INFO] unhandled exception (Access violation writing 0x004D2F9C) rdb
Description

Error occurred when using the Atlas editor.

Details: unhandled exception (Access violation writing 0x004D2F9C) Location: unknown:0 (?) Call stack: 695DC61F 6991E77B 6991A122 695C4804

#926 fixed Smooth Fog of War (FoW) Android GRRR
Description

do not let the fog of war be revealed jumpily, i mean do not let it go back tile by tile when a unit enters unexplored areas... rather make it draw back smoothly like in age of empires online: example

this would be a graphical feature only to make the game look fresh. no need to touch gameplay.

philip left a short comment on the issue in the forums.

#927 fixed [ATLAS] Increasing number of players is broken historic_bruno historic_bruno
Description

If you open a map in Atlas with e.g. 2 players, and increase that to 3 players, the PlayerManager component won't get updated because that only happens when a map is loaded. So PlayerManager and the player settings in Atlas are out of sync, which hasn't been a problem until lately. Now that we have territories and build limits, there will be warnings if you try to place a building for the newly created player (their ID doesn't exist) and even incorrect rendering of its territory borders.

A possible solution is to reload the map (at least run simulation init?) when the number of players is changed, which shouldn't happen too often. Or we can try to add some special logic to manually add/remove players, which seems like a hack.

Also I've noticed two related bugs that affect the Atlas UI:

  • When you load a map, the player dropdown on the object panel doesn't get updated to the correct number of players.
  • If you load a map and then increase the number of players, the default player data is not always loaded in the player panel. It seems like this worked in the past, maybe not.
#928 fixed [ATLAS] Invalid player ID warnings in actor viewer historic_bruno
Description

When you open actor viewer in Atlas, there are hundreds of warnings like these occurring in the background:

WARNING: GetPlayerByID: no player defined for id '0' (0)@simulation/components/PlayerManager.js:28

only they aren't rendered, so you don't notice them until returning to editor mode or checking the logs. There's no more call stack given, so it's likely some part of the engine is using PlayerManager when it shouldn't be.

#929 duplicate Actor Editor can't find libAtlasUI.so in Linux historic_bruno
Description

As reported here, Actor Editor builds as part of Atlas but it won't run on Linux. It's trying to use a path relative to the build directory to locate libAtlasUI.so, instead of the library's output directory (which is binaries/system). This is a bug in both our new and old build system.

#930 fixed [PATCH] Incremental update of pathfinder's passability grid Itms Sylvain Gadrat
Description

When there is changes of the terrain or passability obstructions on the map, the pathfinder has to update a tile based representation of the world. This grid of tiles is needed by the long pathfinder to compute speedily long range paths.

Currently, when the pathfinder need to update its grid, it recompute the full grid instead of taking care only about regions that are modified. It is a little waste of time.

Since the grid is easy to compute there is nothing worrying for now but it can become harmful when we will try to optimize the pathfinder. Optimizations will need to have a way to reprocess only modified tiles because it is basically done by precomputing more than the tile grid.

This ticket is related to some "TODOs" in the simulation code that can be found

  • in CCmpPathfinder::HandleMessage()
  • in CCmpPathfinder::UpdateGrid()
  • in CCmpObstructionManager::Rasterize()
#931 duplicate [PATCH] Fix OpenAL issues on OS X stwf Jan Wassenberg
Description

OS X CoreAudio has some trouble with our reuse of sources (see http://www.wildfiregames.com/forum/index.php?showtopic=15066). There are various bandaids such as FIFO reuse (thus giving CoreAudio more time to finish what it's doing before we reset the source properties). However, one proper fix might be to just generate/delete sources anew.

This used to be super expensive on hardware implementations, but OpenALsoft should manage much faster. I have implemented this approach (see attached patch) and run a quick test.

With the old suballocator, running -autostart="We Are Legion", sending the front middle guy forwards and waiting for the dust to clear, I see tc_OpenAL_source: 3790.03 kc (5203x) (about 0.2 us per alloc). The new patched version gets tc_OpenAL_source: 239.762 Mc (5411x). Apparently the battle went slightly differently, there were also more casualties, but the per-alloc cost is indeed higher (14 us). Still nothing to worry about; I think this approach is fine on software implementations of OpenAL.

I'd appreciate people testing this on OS X, which requires removing the little kill-switch in hwdetect.js.

Questions:

1) does this fix the issues?

2) is the per-alloc overhead [converting the above number to seconds by dividing by the CPU clock and normalizing according to the number of calls (in parentheses)] similar?

Jan - this didn't work. See my notes below. (kenny)

#932 fixed Cast shadow onto water surface. wraitii Amish Coelho
Description

Currently shadows of objects next to water go right through and fall on the ground below the water. This makes objects that float on water(ships)seem unreal and as if they are floating on air, so to speak. It would be nice to have shadows cast on the surface of the water.

#934 fixed Remove Premake3 build scripts Kieran P
Description

Remove the old build scripts in favour of the Premake4 ones. We do not want to be supporting two build systems!

#935 fixed [PATCH] Use standard SDL in Windows (remove custom API) historic_bruno
Description

Via Philip in IRC (referring to #907):

It might be best to just try retiring wsdl and switching to standard SDL,
which would hopefully handle this stuff automatically
...
It should be pretty straightforward to set up (disable CONFIG2_WSDL
and provide the necessary DLLs etc) - the tricky bit is just
testing that everything still works (cursors, fullscreen, multi-
monitor, Atlas, etc)

Relevant code is source\lib\sysdep\os\win\wsdl.cpp

#936 fixed Fish cause strange Dock placement behavior michael
Description

Fish allow the player to place a dock foundation, but do not allow the building to be constructed, so the units will continue trying to build the dock forever. Fish, via a vis dock placement, should have one of two behaviors:

-- The foundation can be placed and the fish are "destroyed."

or

-- Fish block foundation placement.

This is particularly a problem for the Carthaginian Naval Harbour, since its foundation footprint is so large.

#937 fixed Delete/Kill command no longer works michael
Description

error: gui/session/input.js line: 1098

#939 fixed Match Setup Screen Does Not Render Player Color Correctly michael
Description

In match setup screen, sometimes the custom player colors do not render the correct color. I believe they are defaulting to black or something. Select the Cycladic Archipelago IV or Peloponnese map to see this.

#941 fixed [PATCH] Experiment with camera FOV Philip Taylor
Description

Extracts from #glest IRC:

15:48 <@softcoder> Philip`, i mentioned this before, people don't like the camera view in 0ad
15:48 <@softcoder> if the camera 'felt more 3d' like in glest I think it would make a lot more people happy
15:50 <@softcoder> A number of people have mentioned to me (When i told them to look at 0ad) its isometric
15:51 < Philip`> softcoder: Maybe it's an issue of having a narrow FOV?
15:51 <@softcoder> i think outs is 45
15:51 < Philip`> Ours is 20 degrees, I believe
15:52  * Philip` has no idea why it's that, other than it being what someone picked about eight years ago and then nobody bothered changing it
15:53 < Swyter> FYI: BFME2 uses a 45º camera

Might be good to try changing CGameView::defaultFOV to see if it can make things look better. (Also, move it into the config file so it's easier to experiment.)

#944 fixed [ATLAS] Apply image to terrain / import heightmap historic_bruno
Description

Making realistic maps would be easier if we could overlay map textures on the terrain and paint elevation accordingly. We could also add an import heightmap feature, where an existing bitmap image gets interpreted as heightmap data.

http://www.wildfiregames.com/forum/index.php?showtopic=14959

#945 needsinfo Linux nVidia TwinView Malfunctions Scott
Description

On an nVidia card under linux when using the nVidia drivers, if one has a dual-monitor setup, the game takes control of both monitors and displays precisely in the center of them, resulting in extremely delayed mouse movements (since these are handled by OpenGL), and making the windowed mode the only option to play the game.

#946 duplicate [SOUND] Music stops playing when returning to main menu stwf historic_bruno
Description

The main menu and in-game music play correctly the first time you start a game, but it's silent after you exit and return to the main menu. If you repeat this procedure sometimes the main menu music will start to play, but it sounds very choppy.

#947 fixed [PATCH] Fix OS X app bundle Yves historic_bruno
Description

The new build system with Premake4 creates an app bundle for GCC and Xcode. It's incomplete, only generating the binary, and won't run properly. It seems all the game data and libraries should be copied into the bundle using the appropriate structure, which would be a nice official distribution method for OS X. It doesn't seem practical for SVN users because they want the structure of the SVN, not an app bundle. So perhaps the default compile on OS X should be a plain binary, but using a new flag an app bundle gets generated (once we work out the technical details).

Also worth investigating is how Xcode3 manages to compile and run an incomplete bundle (it works for me).

#948 fixed [PATCH] Add buttonSound attribute to buttons historic_bruno brian
Description

We want all buttons to sound the same. To avoid editing all the onPress functions scattered throughout, we should add an attribute that can reference the sound file. Ideally, this attribute would be included in the style so it would only have to be changed in one place.

It will probably involve adding another GUI property and making CButton detect it and do whatever PlaySound does.

#949 fixed Use the system's mouse sensitivity until you have implemented an options page. alexhultman
Description

You should use the same mouse sensitivity as the operating system. Why? Because people are familiar with their own mouse sensitivity settings from the operating system. You could just get the absolute mouse position and draw the game cursor from that. This should be fair enough until you implement the options page. I'm on Linux and the game runs great but I can't play with this low sensitivity. On Windows the game seems to use another sensitivity.

#950 fixed Scenarios broken by territories Art Department historic_bruno
Description

Following is a list of scenarios that break with territories (isolated buildings are slowly destroyed):

  • Acropolis - scout towers (all players), Naos and Stoa (player 1)
  • Miletus - some walls extend outside the starting territory (player 1)
  • Necropolis: Naos and Stoa (player 1)
#951 fixed Make max population available to an AI Jonathan Waller
Description

The max population is useful for an AI to know when to stop building houses since they won't increase the limit any further. I have created a patch which adds a line to GuiInterface.js for this.

#952 invalid Solve the gender unconsistency alexhultman
Description

First of all I want to say that I absolutley love this project. This game will surely be a classic for ages since it can be forked and compiled for new platforms when needed. I just have one thought about the gender unconsistency. Women are obviously the main workers in the game but some men can work too.

  • Why can't women build advanced structures? This makes no sence.
  • Why can some warrirors (like three kinds minus the cavalry ones) also work? Shouldn't women be the workers only? I believe you are trying to make something new here but I really feel this just adds to the gameplay complexity. Don't get me wrong, I'm all about gender equality but it feels right to let warriors (men) be warriors and workers (hard working women) be workers. At least they should be able to build what the men can build.

Also, there is unconsistency in the "find idle workers" button. This button finds women, working men but also men that are on a horse and obviously cannot work. I really believe making women the workers and men the warriors can reduce gameplay complexity. Also, you will face major animation problems with the current approach since men that are both warriors and workers often have shields and spears and stuff but when they are lumbering wood or minig their equipment just disappear. I hardly think you could fix that glitch. I love women but I really think you should let them be the workers (who can build advanced structures too) and let men be the warriors. (Okay some Heroes are women but you get the idea)

This is obviously inspired by Age of Empies. I love that game and have played it since I was a kid. They use villagers for constructing things and gathering stuff and warriors for war. I think that is a key thing. Any thoughts about his?

#953 fixed [PATCH] local.cfg adds keys instead of replacing them philip vts
Description

When defining custom keys in local.cfg, the keys appear to work in addition to the existing ones from default.cfg, rather than instead of them.

For instance. Specifying

hotkey.camera.left = Q, LeftArrow

in local.cfg causes the Q key to activate both camera.left and the existing camera.rotate.cw from default.cfg:

hotkey.camera.rotate.cw = "Ctrl+LeftArrow", "Ctrl+A", Q

The same is true for e.g. trying to change hotkey.console.toggle; the keys specified in local.cfg will work in addition to the ones from default.cfg, not instead of.

Also, using local.cfg to try and set the Escape key to certain commands does not work. hotkey.menu.toggle = Escape does not toggle the menu ingame when Escape is pressed, but the F10 key from default.cfg still does.

#954 fixed Icon needs be in higher resolution Art Department alexhultman
Description

Just a reminder. 256 x 256 should be enough.

EDIT: 128x128 icon committed.

An icon without the shadow should be better (as for OS X) see: http://www.wildfiregames.com/forum/index.php?showtopic=15902 Icon without shadow available at: http://www.wildfiregames.com/forum/index.php?showtopic=15902&st=0&p=237549&#entry237549

#955 fixed Please add alpha version also in main menu fabio
Description

Currently it only shows the svn revision. It will ease identification of game version.

Alpha version (along with svn revision) is alredy shown during gameplay.

#956 fixed In-Game music no longer plays brian michael
Description

Music no longer plays in the game. Greek peace track, Carthaginian peace track, etc. This has happened within the last day or two.

#957 fixed Test failure fabio
Description

On Ubuntu Linux using r10256:

Running 253 tests......................................................................ERROR: JavaScript error: simulation/components/GuiInterface.js line 63
TypeError: cmpPlayer.GetMaxPopulation is not a function
  ()@simulation/components/GuiInterface.js:63
  ()@simulation/components/tests/test_GuiInterface.js:123

In TestComponentScripts::test_scripts:
../../../source/pch/test/../../../source/simulation2/components/tests/test_scripts.h:44: Error: Test failed: L"Running script simulation/components/tests/test_GuiInterface.js"
../../../source/pch/test/../../../source/simulation2/components/tests/test_scripts.h:44: Error: Assertion failed: scriptInterface.LoadScript(pathname, wcontent)
......................................................................................................................................................................................
#958 fixed [PATCH] Allow building in fog of war, within player's territory historic_bruno historic_bruno
Description

A player's territory will always be explored (either visible or in FoW), so they should be allowed to build anywhere in that territory. CmpRangeManager::GetLosVisibility() can't be used to check FoW because it uses rendering concepts like RetainInFog that would break preview entities. The attached patch adds CmpRangeManager::GetLosState() which checks the internal LOS state and reveal all players flag, returning a value corresponding to explored, unexplored or visible. It also moves the visibility check into BuildRestrictions for consistency.

#959 fixed Simultaneous unit queuing for buildings historic_bruno
Description

If multiple of the same building are selected and a unit is trained, it will only queue in the first selected building. It would be more useful if the unit was queued in each of them simultaneously. I'm not sure how to handle this when multiple different buildings are selected (probably just hide the command panel buttons in that case since it's not clear which set should be displayed).

#960 fixed Add Latin Small Letter Schwa (ə) to fonts historic_bruno
Description

The native name of the Carthaginian infantry javelinists (Səḫīr Kidōn) references the small Latin schwa (U+0259 in IPA Extensions of the Unicode standard) which is not yet included in our fonts. I don't know how we usually handle this, should we add in all letters up to and including the schwa (we have a gap between U+0241 and U+1E00)? Need we include all the IPA Extensions for completeness (about 100 new characters)?

The characters are defined in charset.txt, all the fonts would need to be rebuilt (see the fontbuilder2 utility for details).

#961 fixed Music Manager stwf historic_bruno
Description

Currently the music code is a broken mess, full of hacks, and the GUI scripts are responsible for most of the logic. We need a music manager implemented in the engine, preferably with a worker thread so it's independent of the render loop. Maybe a reasonable level of abstraction is that of a simple media player:

  • Playlist/queue is created with track paths
  • Playlist can be played/stopped/paused
  • Fade when switching tracks
  • Play sequentially or randomly (default)
  • Optional looping
  • Gain setting

This task may require changes to snd_mgr as well, if it doesn't provide the functionality we need.

#962 invalid Proposal: Females should be able to build any structure alexhultman
Description

I posted a similar ticket before that got tagged invalid because I proposed a lot of invalid things also. I'm opening this ticket exclusively to flag my proposal to let females build any structure.

Why should you need to train a warrior/constructor to build war structures? Maybe you mean it takes a warrior to build a warriors structure, but that doesn't make any sense because then how can a novice warrior/constructor build something that can train champions and heroes? The student does not defeat it's master if you know what I mean. Females should be like villagers in Age of Empires i believe.

Please let this ticket be open to allow for discussion, even if it's a designers decision at the end.

#963 fixed AI bot scripts - civic center trainingQueue lexa
Description

Between the alpha 7 and the svn versions, issues appeared with my AI bot, but it is not visible when you are a human.

Test case :

  • The game starts
  • The civic center trainingQueue starts empty, and make it build a woman
  • The trainingQueue has 1 entity and it builds it correctly
  • At the end, the entity is released but the trainingQueue still has 1 element

I have traced the element 0 in the queue and it has a progress property which is always 0 during the training of the unit, and it goes straight to a number close to 1 when the unit is released.

#964 fixed Crash during mission startup on Sis integrated card AlexanderR
Description

After starting match on any map game shows black space or glitches instead of textures and crashes sooner or later. Maybe this is caused by graphical driver without OpenGL support and therefore running in software emulation mode. Drivers are up to date, most DirectX games and many free (Lugaru, Warzone2100 and others) OpenGL-based run with low fps on my hardware, but very few crashes.

#965 fixed Allow media keys for changing volume in game alexhultman
Description

There is currently no way to change volume in game. You have to guess what volume to use, enter the game and test, leave the game and adjust, enter again and play. Media keys should be enabled to allow easy volume adjustment and control e.g. rhytmbox.

#966 fixed Incorrect Transparent Water Randering on core i3 HD 3000 Aritra Chakraborty
Description

On core i3 HD 3000 integrated graphics water does not render properly . Water rendered perfectly with alpha 5 and alpha 6 however alpha 7 water rendering error for better description see attached image . It shows part of the water of the tropical island map .

#967 duplicate Wild Animals Destroy Buildings Aritra Chakraborty
Description

Some of my villagers angered a wild elephant and the wild elephant followed my villagers back to the town center where it killed all the villagers and then started attacking the town center . After a while the town center was destroyed .

#969 fixed [PATCH] Territory support for the AI Jonathan Waller
Description

This patch gives the AI a map of the territories in the game.

The main issue with the patch is that territory data is regenerated each turn which is inefficient. I have tried looking at the DirtyID for the grid generated but it is always 0.

As historic_bruno mentioned build restrictions data needs to be added to the gamestate. Currently I don't think is is urgent since only docks and CCs are different and they need special handling already by an AI script.

There is a post on the forums here.

#970 invalid Celtic War Dogs (Coun) Carry food ? Aritra Chakraborty
Description

I found this very strange that if a coun(Clectic War Dog) Kills an animal it carries back food to deposit at nearest deposit point .

#971 fixed Sheep run away too fast for villagers to try to kill them Aritra Chakraborty
Description

Sheep reared for food run away to fast for villagers trying to kill them for food . (they should run at least at a speed less than wild animals ).

#972 fixed [PATCH] Pass events to AI Jonathan Waller
Description

An events array is created by AIInterface and AIProxy but isn't exposed by base.js. This patch just gives the array to the AI's.

#973 fixed [PATCH] Add naval / water map support to AIs mimo alexhultman
Description

The AI should build a dock, train a boat and then attack when it feels like it has a strong army.

#974 fixed JuBot should not be able to place non-civ center structures outside of its own territory alexhultman
Description

Currently JuBot is placing structures outside of its territory. You can place a civ center to capture new territory but often I see enemy structures that's not a civ center way out of territory.

#975 worksforme Game slows down drstically when I destroy JuBots Town Center Aritra Chakraborty
Description

The moment I destroy JuBot's Town Center the game almost freezes as JuBot calculates where to construct a new town center . Only after it starts constructing the new town center the game gradually limps back to normal speed . Sometimes if I destroy JuBot before it creates the town center the game jumps to double or quadruple normal speed .

#976 fixed Alpha 7 doesn't start in Windows Dionos
Description

In my case, the latest version won't run in Windows 7 32 bit (updated version). The version number is Alpha 7 (0ad-r10288-alpha-win32) and it is installed in the default directory. I tried completely uninstalling the previous version, restarting the system and running the executable as administrator.

When "pyrogenesis.exe" is opened, it seems to read on the harddisc, but nothing happens. After less than half a minute the HD is no longer accessed and the game remains visible in task manager using more than 90% CPU. It can only be stopped by ending the process. No logs are generated.

The debug output is in the attachment.

#977 fixed Random map generation on different platforms can cause multiplayer OOS error historic_bruno
Description

With certain combinations of systems, there are multiplayer out-of-sync errors when playing random maps. It appears to be a difference in floating point precision, some entity positions differ by 0.00001 or 0.00002 units.

One such configuration:

  • Host: Ubuntu 11.04 64-bit, Intel Core i7-2600K (SSE2), custom build GCC (Release)
  • Client: Windows XP 32-bit, Athlon XP 2000+ (non-SSE2), custom build VC2010 Express (Release)

OOS logs are attached for comparison.

#978 worksforme Rare crash in Intel drivers in glvwprintf on Win7 gudo
Description

Using SVN at r10318. Not sure what caused it, haven't been able to re-produce.

#979 fixed [PATCH] Prop variations not working when attached to specific animations vts michael
Description

When a unit has been set up to attach a prop only when a certain animation is playing, it will only show the first variant, rather than randomly choosing a variant from the list.

Examples:

  • All the fauna units' blood decals don't randomize.
  • If you set multiple people farming, there ought to be two variants of the hoe being used, but only one is ever chosen.
#981 fixed Carthage StartEntities - no merceneries Kephra Nurmi
Description

Carthage should have only own troops as StartEntities and not mercenaries.

#982 fixed Add "debugging mode" to command handling historic_bruno
Description

Since we've temporarily disabled build restrictions for AIs, it has revealed subtle flaws in AI logic, since previously commands would silently fail under certain conditions. So a "debugging mode" is proposed for Commands.js, which would optionally show errors that occur during command handling ("Gather failed: resource not owned by player", "Construct failed: invalid location", etc.) The idea is this mode could be used by AI developers to test changes in their scripts (and possibly UI devs?). Really it only needs to be a flag set somewhere, which parts of Commands.js would check before displaying a message on failure. Even a simple message would be helpful.

#983 fixed [PATCH] Add AI metadata and rawEntity to destroy events Jonathan Waller
Description

Currently when an entity is destroyed the metadata is lost with no way for the AI to access it. This means when an entity is destroyed an AI can find out nothing about it unless it has cached the detail somewhere else. Forcing AI's to make a secondary metadata cache is not good so this patch puts the metadata into the event object.

The metadata is added to an array so player 2's metadata is in metadata[2] etc. This is because the events object is shared between AI's.

#985 fixed test show: "APIC: all zero" Jan Wassenberg fabio
Description

Since some days when I run the tests on my Ubuntu 10.10 I get this output:

Running 253 tests.............................................................APIC: all zero
................................................................................................................................................................................................OK!

Dunno if it's a problem or not...

#986 fixed [ATLAS] Crashes when trying to open non-existant file Luke Martinez
Description

Hi, Atlas crashes when trying to open non-existent file.

I was trying to save but must have mindlessly clicked open instead.

Reproduce:
Open Atlas
Press Open
Type filename
Press Open
ERROR Message.

Lost my work, :)
Thanks,

Asmartgoat
me@… (without the name of the editor)

#987 fixed editor: OpenGL errors fabio
Description

When running '0ad -editor' I get the following GL errors (note also that I am using mesa compiled with --enable-debug which shows also some other useful errors):

$ ./0ad -editor
[Thread debugging using libthread_db enabled]
TIMER| LoadDLL: 621.435 ms
[New Thread 0xb5befb70 (LWP 2897)]
Cache: 200 (total: 1493) MiB
[New Thread 0xa7adfb70 (LWP 2898)]
TIMER| InitVfs: 2.28409 ms
TIMER| InitScripting: 1.73954 ms
TIMER| CONFIG_Init: 5.40969 ms
[New Thread 0xa6cffb70 (LWP 2899)]
[New Thread 0xa64feb70 (LWP 2900)]
[New Thread 0xa44feb70 (LWP 2901)]
r300: DRM version: 2.9.0, Name: ATI RV530, ID: 0x71c5, GB: 1, Z: 2
r300: GART size: 509 MB, VRAM size: 256 MB
r300: AA compression RAM: YES, Z compression RAM: YES, HiZ RAM: YES
APIC: not unique
TIMER| RunHardwareDetection: 19.6156 ms
[New Thread 0xa37e8b70 (LWP 2902)]
TIMER| InitRenderer: 3.03768 ms
TIMER| ps_console: 15.347 ms
TIMER| ps_lang_hotkeys: 1.26615 ms
TIMER| common/emptyinit.xml: 817.491 us
GAME STARTED, ALL INIT COMPLETE
Mesa: User error: GL_INVALID_VALUE in glScissor
GL_INVALID_VALUE
OpenGL error(s) occurred: 0501
Mesa: User error: GL_INVALID_VALUE in glOrtho
ERROR: CRenderer::EndFrame: GL errors occurred
TIMER| shutdown actor stuff: 2.654 us
TIMER| shutdown TexMan: 3.562 us
[Thread 0xa37e8b70 (LWP 2902) exited]
TIMER| shutdown Renderer: 4.92157 ms
TIMER| shutdown SDL: 655.111 us
TIMER| shutdown UserReporter: 2.445 us
TIMER| shutdown ScriptingHost: 596.235 us
TIMER| shutdown ConfigDB: 2.165 us
TIMER| resource modules: 12.4155 ms
TIMER TOTALS (9 clients)
-----------------------------------------------------
  xml_validation: 21.1427 Mc (19x)
  tc_ShaderValidation: 8672.78 kc (17x)
  tc_pool_alloc: 10.9776 Mc (3494x)
  tc_linkProgram: 0 c (0x)
  tc_compileShader: 0 c (0x)
  tc_transform: 1554.28 kc (126x)
  tc_plain_transform: 346.502 kc (126x)
  tc_dds_transform: 1018.72 kc (378x)
  tc_png_decode: 12.245 Mc (16x)
-----------------------------------------------------
TIMER| shutdown misc: 573.187 us
[Thread 0xb5befb70 (LWP 2897) exited]
lost connection to FAM[Thread 0xa7adfb70 (LWP 2898) exited]
[Thread 0xa64feb70 (LWP 2900) exited]
[Thread 0xa6cffb70 (LWP 2899) exited]
[Thread 0xa44feb70 (LWP 2901) exited]

Program exited normally.

I recall I see something similar already reported on the forums. EDIT: forum thread: http://www.wildfiregames.com/forum/index.php?showtopic=15164

#988 fixed SIGSEGV: fScrollConstant (msg=0x87ea6b0) at ../../../source/tools/atlas/GameInterface/Handlers/CameraCtrlHandlers.cpp:66 fabio
Description

While using the editor I got the following Segmentation fault:

$ ./0ad -editor
[Thread debugging using libthread_db enabled]
TIMER| LoadDLL: 1.10503 s
[New Thread 0xb5befb70 (LWP 2872)]
Cache: 200 (total: 1493) MiB
[New Thread 0xa7cdfb70 (LWP 2873)]
TIMER| InitVfs: 4.095 ms
TIMER| InitScripting: 3.27695 ms
TIMER| CONFIG_Init: 19.3886 ms
[New Thread 0xa6effb70 (LWP 2874)]
[New Thread 0xa66feb70 (LWP 2875)]
[New Thread 0xa4624b70 (LWP 2876)]
r300: DRM version: 2.9.0, Name: ATI RV530, ID: 0x71c5, GB: 1, Z: 2
r300: GART size: 509 MB, VRAM size: 256 MB
r300: AA compression RAM: YES, Z compression RAM: YES, HiZ RAM: YES
APIC: all zero
TIMER| RunHardwareDetection: 61.2039 ms
[New Thread 0xa3c3cb70 (LWP 2877)]
TIMER| InitRenderer: 11.5959 ms
TIMER| ps_console: 38.365 ms
TIMER| ps_lang_hotkeys: 1.27956 ms
TIMER| common/emptyinit.xml: 28.337 ms
GAME STARTED, ALL INIT COMPLETE
Mesa: User error: GL_INVALID_VALUE in glScissor
GL_INVALID_VALUE
OpenGL error(s) occurred: 0501
Mesa: User error: GL_INVALID_VALUE in glOrtho
ERROR: CRenderer::EndFrame: GL errors occurred
TIMER| shutdown actor stuff: 2.863 us
TIMER| shutdown TexMan: 2.934 us
[Thread 0xa3c3cb70 (LWP 2877) exited]
TIMER| shutdown Renderer: 4.99875 ms
TIMER| shutdown SDL: 641.912 us
TIMER| shutdown UserReporter: 1.956 us
TIMER| shutdown ScriptingHost: 536.591 us
TIMER| shutdown ConfigDB: 1.955 us
TIMER| resource modules: 15.4666 ms
TIMER TOTALS (9 clients)
-----------------------------------------------------
  xml_validation: 43.1689 Mc (19x)
  tc_ShaderValidation: 29.8825 Mc (17x)
  tc_pool_alloc: 25.0317 Mc (2409x)
  tc_linkProgram: 0 c (0x)
  tc_compileShader: 0 c (0x)
  tc_transform: 2809.59 kc (126x)
  tc_plain_transform: 858.286 kc (126x)
  tc_dds_transform: 1504.18 kc (378x)
  tc_png_decode: 28.9777 Mc (16x)
-----------------------------------------------------
TIMER| shutdown misc: 594.838 us

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0xb5befb70 (LWP 2872)]
fScrollConstant (msg=0x87ea6b0) at ../../../source/tools/atlas/GameInterface/Handlers/CameraCtrlHandlers.cpp:66
66		if (g_Game->GetView()->GetCinema()->IsPlaying())
Undefined command: "".  Try "help".
Kill the program being debugged? (y or n) [answered Y; input not from terminal]

I am however unable to reproduce it and it may be related to #987.

#989 invalid Entity with soldier class but no position Jonathan Waller
Description

When Pureon was testing against qBot he hit the error TypeError: ent.position() is undefined in the block of code http://pastebin.com/GFzwHLCG

The full contents of interestinglog are attached.

It was about 10 minutes into a game on Oasis IV with qBot as hele. JuBot was also playing.

Since the line with the error is only run when the entity has CitizenSoldier or Super class I think it must be an engine bug for position to not be defined.

The version of qBot at the time was: https://github.com/quantumstate/qBot/commit/77a95a4160166cf23962d62001324f5b8c45efd7

#990 fixed [PATCH] build with system provided libmozjs185 infyquest
Description

This is a build system patch to build with system provided libmozjs185 especially on linux. This helps in removing dependency on building SpiderMonkey on linux.

#991 fixed [PATCH] add attackStrengths and armorStrengths functions to ai api for bots infyquest
Description

Adds attackStrengths and armorStrengths functions to ai api for bots. This will help for all the bots in accessing their strengths and enemies strengths.

this removes todo in entity.js for attack and armor

#992 fixed error: attributes are not allowed on a function-definition fcxSanya
Description

I have following error when trying to compile r10384 with gcc 4.5.2:

../../../source/lib/allocators/unique_range.cpp:53:80: error: attributes are not allowed on a function-definition
#996 fixed [PATCH] Capturing Buildings sanderd17 historic_bruno
Description

This should fit in nicely with our new territories implementation and proposed unit conversion. Currently all units can attack structures, but this will change so that only siege units destroy buildings while capturing will replace their attacking behavior. Some outdated info from the design doc:

  • Longest capture time
  • Small capture radius
  • No capture if enemy already has ownership and is within one of their unit's LOS
  • Cannot capture if garrisoned
  • Cannot capture if hitpoints are not reduced to a specified percentage
  • Capturing an enemy structure changes the ownership of a structure from the previous owner to the new owner. It does not allow the player to research another civilisation's technologies or train units that are unavailable to the player's civilisation. However the visual structure remains the same.
#998 fixed gfx::CardName gets confused by multiple GPUs Jan Wassenberg Philip Taylor
Description

I have an Intel HD Graphics 3000 plus a GeForce GTX 560 Ti, both enabled in the BIOS, on 64-bit Win7. My monitor is connected to the GF card, and that card is used for rendering the game. Also I have Lucid Virtu installed but set to "off" (I don't know if that will affect anything).

(If I switch the monitor connection to the motherboard's video output, then restart the game, the Intel GPU is used for rendering instead (judging by performance and the list of extensions), but I'm not doing that in this bug.)

system_info.txt says

Graphics Card  : Intel(R)  HD Graphics Family

which is wrong or at least misleading. (GL_RENDERER gives a more correct value of "NVIDIA Corporation GeForce GTX 560 Ti/PCI/SSE2".)

This happens because gfx::CardName calls wgfx_CardName which gets a wmiMap of

[0]	("AcceleratorCapabilities", NULL)
[1]	("AdapterCompatibility", BSTR = 0x00478a14 "Intel Corporation")
[2]	("AdapterDACType", BSTR = 0x00468854 "Internal")
[3]	("AdapterRAM", I4 = -244785152)
[4]	("Availability", I4 = 8)
[5]	("CapabilityDescriptions", NULL)
[6]	("Caption", BSTR = 0x00478a5c "Intel(R)  HD Graphics Family")
[7]	("ColorTableEntries", NULL)
[8]	("ConfigManagerErrorCode", I4 = 0)
[9]	("ConfigManagerUserConfig", BOOL =  0)
[10]	("CreationClassName", BSTR = 0x00478ab4 "Win32_VideoController")
[11]	("CurrentBitsPerPixel", NULL)
[12]	("CurrentHorizontalResolution", NULL)
[13]	("CurrentNumberOfColors", NULL)
[14]	("CurrentNumberOfColumns", NULL)
[15]	("CurrentNumberOfRows", NULL)
[16]	("CurrentRefreshRate", NULL)
[17]	("CurrentScanMode", NULL)
[18]	("CurrentVerticalResolution", NULL)
[19]	("Description", BSTR = 0x00478afc "Intel(R)  HD Graphics Family")
[20]	("DeviceID", BSTR = 0x0047844c "VideoController2")
[21]	("DeviceSpecificPens", NULL)
[22]	("DitherType", NULL)
[23]	("DriverDate", BSTR = 0x00478b54 "20110831000000.000000-000")
[24]	("DriverVersion", BSTR = 0x00478be4 "8.15.10.2509")
[25]	("ErrorCleared", NULL)
[26]	("ErrorDescription", NULL)
[27]	("ICMIntent", NULL)
[28]	("ICMMethod", NULL)
[29]	("InfFilename", BSTR = 0x00478c1c "oem2.inf")
[30]	("InfSection", BSTR = 0x00478c54 "iSNBD0")
[31]	("InstallDate", NULL)
[32]	("InstalledDisplayDrivers", BSTR = 0x00478d44 "igdumd64.dll,igd10umd64.dll,igd10umd64.dll,igdumdx32,igd10umd32,igd10umd32")
[33]	("LastErrorCode", NULL)
[34]	("MaxMemorySupported", NULL)
[35]	("MaxNumberControlled", NULL)
[36]	("MaxRefreshRate", NULL)
[37]	("MinRefreshRate", NULL)
[38]	("Monochrome", BOOL =  0)
[39]	("Name", BSTR = 0x00478dfc "Intel(R)  HD Graphics Family")
[40]	("NumberOfColorPlanes", NULL)
[41]	("NumberOfVideoPages", NULL)
[42]	("PNPDeviceID", BSTR = 0x004786fc "PCI\VEN_8086&DEV_0112&SUBSYS_D0001458&REV_09\3&13C0B0C5&0&10")
[43]	("PowerManagementCapabilities", NULL)
[44]	("PowerManagementSupported", NULL)
[45]	("ProtocolSupported", NULL)
[46]	("ReservedSystemPaletteEntries", NULL)
[47]	("SpecificationVersion", NULL)
[48]	("Status", BSTR = 0x00478e54 "OK")
[49]	("StatusInfo", NULL)
[50]	("SystemCreationClassName", BSTR = 0x00478ec4 "Win32_ComputerSystem")
[51]	("SystemName", BSTR = 0x00478f0c "PHILIP-PC")
[52]	("SystemPaletteEntries", NULL)
[53]	("TimeOfLastReset", NULL)
[54]	("VideoArchitecture", I4 = 5)
[55]	("VideoMemoryType", I4 = 2)
[56]	("VideoMode", NULL)
[57]	("VideoModeDescription", NULL)
[58]	("VideoProcessor", BSTR = 0x00478f44 "Intel(R) HD Graphics Family")

so it's only seeing the Intel one.

#999 fixed [PATCH] Healing leper historic_bruno
Description

The Heal Action is used by the Healer unit to regenerate the health of the player's organic units. While the action is applied to a viable damaged target, his hitpoints increase until restored to maximum, while the entity performs his "Heal" animation.

Note that as with most actions, multiple entities can be tasked to the same target to speed up the rate of regeneration.

XML.Entity.Actions.Heal

#1000 fixed Please consider enabling https on trac and forum fabio
Description

At least with a self signed certificate, but google reveals that at least a CA ( http://www.godaddy.com/ssl/ssl-open-source.aspx ) gives a 1 year free certificate to open source projects. There were too many security problems involving open source projects recently. Https is just a little step on improving security.

#1001 fixed [PATCH] Attack Move Jonathan Waller
Description

The attack-move command should be implemented. This is a move command where the units attack any enemies that come into sight along the route, once the enemies are destroyed the units continue walking to the destination.

#1002 wontfix Unreasonably poor perfomance in main menu AlexanderR
Description

I have recently installed fresh Arch Linux and latest 2D drivers on my notebook along with LLVM-backed Mesa 3D renderer. 3D perfomance is poor but 2D is nice - Teeworlds works with 20-30 fps, for example.

The question is - why does pure 2D animation in main menu go with 3-5 fps?

#1004 fixed [PATCH] ActorEditor fails to load libAtlasUI at runtime Yves Yves
Description

Description

Running ActorEditor, ArchiveViewer or FileConverter return this error on Linux/Mac systems when build with the generated makefiles or XCode:

Linux:

./ArchiveViewer: error while loading shared libraries: ../../../binaries/system/libAtlasUI.so: cannot open shared object file: No such file or directory

Mac:

dyld: Library not loaded: ../../../binaries/system/libAtlasUI.dylib
  Referenced from: /Users/[User]/Projects/0ad/binaries/system/./ActorEditor
  Reason: image not found
Trace/BPT trap

Running "objdump -p ActorEditor | grep AtlasUI" on Linux returns

  NEEDED               ../../../binaries/system/libAtlasUI.so

This relative path is wrong when the binary is in binaries/system. Removing the path from LDDEPS in the makefile or replacing it by a correct one solves the problem on Linux.

On OSX for both the makefiles and Xcode, there's an additional -install_name option required for linking libAtlasUI.


PATCH:

I've created a patch to only add static library projects to LDDEPS in makefiles. Unfortunately I'm not sure if I fully understand the reason why some libraries are added with the -l flag and also with a full relative path as LDDEPS. Premake only does this with Projects defined in its scripts as "StaticLib" or "SharedLib" and not for external libraries. I've tried replacing "links" with "linkoptions" only for the action "gmake", but it doesn't work because build-order-dependencies get lost this way. The advantage of my solution is that it won't change anything for the other platforms (e.g. Visual Studio).

For the Mac I've added an install_name option. It's probably not a very clean solution like I did it, but I didn't want to change too much and risk other bugs just to fix this one.


Question:

What is ColourTester? It has the same problem but I couldn't find any sources or buildscripts for it.

#1005 invalid Shadows look bad dreambeast
Description

Shadows look bad in 10288-release, but they were ok earlier (in betas).

Os:     Ubuntu 11.4

GPU:  ATI RV770 [Radeon HD 4850] (Proprietary driver)

#1006 worksforme glDrawElements crash in CPatchRData::RenderBases Erik Johansson
Description
Much to our regret we must report the program has encountered an error.

Please let us know at http://trac.wildfiregames.com/ and attach the crashlog.txt and crashlog.dmp files.

Details: unhandled exception (Access violation reading 0x2EC010A4)

Location: unknown:0 (?)

Call stack:

(error while dumping stack: No stack frames found)
errno = 0 (No error reported here)
OS error = 0 (no error code was set)

After playing just say a minute or so at most the above did appear in an error dialog. Using the latest autobuild (from 10409) and SVN version 10427, but according to Ben it's an error in the terrain rendering code so that shouldn't be the problem.

#1007 fixed Female Citizens change clothes before dying ben Aritra Chakraborty
Description

I noticed this strange bug when killing some female citizens with archers in oasis 2 map. Just when they are struck by the final arrow they change there look clothes , hair colour etc just before the death animation kicked in . Tested on alpha 7 . I played carthagian faction . Jubot played greek faction .

#1008 wontfix Hide unexplored territory borders in FOW historic_bruno
Description

Currently if any part of the map is in your FOW, you can see the territory borders, as well as new and existing buildings (#599). I think you should have to explore the map to discover territory border changes, except for your own borders of course. So perhaps similar to the concept of "mirage entities" suggested in #599, there could be "mirage borders".

#1009 fixed JuBot doesn't understand territory limitations for mills historic_bruno
Description

JuBot is trying to build mills close to resources outside it's territory (which isn't allowed due to build restrictions, see [10408]), but the influence map for building placement leads it to the edges of its territory and it keeps trying to place more and more mills during the game. I think it should do two things: not worry about trying to build mills for a resource far outside it's own territory, and more importantly, have some logic for territory expansion. But at least the broken mill placement should be fixed.

#1010 worksforme Error in BuildingAI FireArrows when a player with a tower is defeated Jonathan Waller
Description

When testing with qBot vs JuBot I encountered this error which appeared repeatedly as soon as the "You have Won" dialog appeared.

ERROR: Error in timer on entity 3114, IID 38, function FireArrows: TypeError: Engine.QueryInterface(target, IID_Position) is null ("Ranged",3108)@simulation/components/Attack.js:160 ([object Object],0)@simulation/components/BuildingAI.js:162 ([object Object])@simulation/components/Timer.js:93

I have a test scenario which allows fairly rapid reproduction of this error which I could upload if it would be helpful, but I would guess any map with a tower of a defeated player with an enemy in range should reproduce this.

#1012 fixed [PATCH] COLLADA: Support special vertex weight index on skinned models historic_bruno historic_bruno
Description

For skinned models, the COLLADA 1.4.1 spec allows a special vertex weight index of -1, which indicates the weight applies to the bind-shape matrix* instead of a particular bone, as seen in this example:

<skin>
  <source id="joints"/>
  <source id="weights"/>
  <vertex_weights count="4">
    <input semantic="JOINT" source="#joints"/>
    <input semantic="WEIGHT" source="#weights"/>
    <vcount>3 2 2 3</vcount>
    <v>
      -1 0 0 1 1 2
      -1 3 1 4
      -1 3 2 4
      -1 0 3 1 2 2
    </v>
  </vertex_weights>
</skin>

(*The bind-shape matrix represents the transform of the bind-shape prior to skinning, it transforms the bind-shape from object space to bind-space. It's specified by a <bind_shape_matrix> element in the <skin> or assumed to be an identity transform. See pages 4.6-4.8 of the COLLADA spec for more notes.)

Currently if you try to add such a model to the game, it will fail to import since the PMD converter thinks there are more than 256 bones (the -1 index is typecast to an unsigned int). Apparently Blender 2.60a likes to export such models and seems to have made general improvements to animation exporting, so we should find a way to implement this.

As a workaround, it may be possible to export animations with Blender 2.6 and the corresponding models with an older version.

#1013 fixed Atlas will not run Darth_Malloc Darth_Malloc
Description

When the user tries to go into the atlas editor, it crashes. As a result of one or more of the changes made, it seems that the editor is unable to locate some of the files needed for it to run.

#1014 fixed Health Bar Bug on Cavalry Art Department fiasco
Description

Health bar covers the face of cavalry; perhaps present on other units as well.

#1015 invalid Game physics Darth_Malloc
Description

I have noticed that when two ships are next to each other, the two models will overlap into the same physical space. This issue is particularly pronounced with larger ships. What should happen is that one ship should stop when blocked by another, or the larger ship should push the smaller ship out of the way. While this may not seem significant, it is in fact critical to the matter of naval strategy. At the Battle of Salamis, one of the reasons that the Persians were defeated is that the vastness of their navy made it impossible for their ships to maneuver, making them easy prey for the Athenians. This would not have been a problem if their ships had been able to overlap into the same physical space! Thus in order to ensure realistic naval strategy, we must adhere faithfully to the laws of physics.

#1016 fixed [PATCH] Fix frame rate counter ben historic_bruno
Description

The frame rate counter (Shift+F) jumps around too much, the implementation should be filtering the time between frames to produce a smooth average, but it's obviously not working as intended.

#1018 duplicate Crash / Error Andrew
Description

After my population went over 150, and I started engaging in battle with other civs the game play slowed down dramatically. I checked the task manager and the exe was using over a Gig of memory.

My system setup is:

Win 7 Pro (64 bit) Intel(R) Core(TM) i5-2520M CPU @ 2.50GHz 8 GB RAM Intel(R) HD Graphics Family

Eventually the game crashed and gave me this error:

Much to our regret we must report the program has encountered an error.

Please let us know at http://trac.wildfiregames.com/ and attach the crashlog.txt and crashlog.dmp files.

Details: unhandled exception (Access violation reading 0x4FF87350)

Location: unknown:0 (?)

Call stack:

(error while dumping stack: No stack frames found) errno = 42 (?) OS error = 487 (Attempt to access invalid address.)

#1019 fixed [PATCH] AIProxy doesn't receive garrison updates. Jonathan Waller
Description

AIProxy provides the .garrisoned property which holds the units garrisoned. This is not updated however so it is always empty. This patch adds an update message to GarrisonHolder and listens for it in AIProxy.

#1020 worksforme Problem loading game data on Vista historic_bruno
Description

System specs:
MS Windows Vista 64 Bit
Intel Core 2 Duo T6600 (2,2 GHz)
NVidia GEforce 9600M GS (512 MB)
4 GB RAM

User says that since Alpha 5 they have been unable to play the game and receive errors like this:

ERROR: Could not load mesh 'art/meshes/structural/hele_civic_struct.dae'
ERROR: CObjectEntry::BuildVariation(): Model art/meshes/structural/hele_civic_struct.dae failed to load
ERROR: Could not load mesh 'art/meshes/structural/hele_civic_struct.dae'
ERROR: CObjectEntry::BuildVariation(): Model art/meshes/structural/hele_civic_struct.dae failed to load

I suggested uninstalling, deleting all game and cache folders, then reinstalling. This reduced the error frequency but they still occur. Report is from this forum topic.

#1021 fixed Atlas crashes any time there is a change within the game's directory. michael
Description

Open Atlas. Now SVN commit something. Atlas will crash upon completion of SVN commit.

Open Atlas. Save a new texture anywhere in the art folder. Atlas will crash.

Here is the error message:

Much to our regret we must report the program has encountered an error.

Please let us know at http://trac.wildfiregames.com/ and attach the crashlog.txt and crashlog.dmp files.

Details: unhandled exception (__int64(""))

Location: unknown:0 (RtlInitializeExceptionChain)

Call stack:

(error while dumping stack: No stack frames found)
errno = 13 (Insufficient access rights to open file)
OS error = 0 (no error code was set)
#1022 fixed [PATCH] Changing selection in actor viewer should display correct player colour Mitchell K historic_bruno
Description

If you change selections in the object panel with actor viewer open, the player colour of the displayed entity becomes grey, but it should match the colour of the selected player. Probably this involves sending a player ID in the SetActorViewer message (because the AtlasUI is in a separate thread from the engine and they communicate by messages), and then getting the player colour however it's done in other parts of the engine. If you select a player after switching actors, the colour updates correctly, so this is only a problem when switching actors.

#1023 fixed Wrong smoke position Art Department fabio
Description

It's happening since about 1-2 weeks on SVN:

http://img685.imageshack.us/img685/9518/screenshot0001l.png

I also installed official alpha VII and it's ok (just to confirm the regression is not from a graphic driver update).

#1025 fixed [PATCH] Add config option to toggle pause on window focus loss Mark Cho historic_bruno
Description

If you're playing a single player game and the window loses focus, the game will be paused until you return, which is OK but not everyone wants this behavior. It seems trivial to fix this by adding a new option to default.cfg such as

pauseonfocusloss = true
#1026 fixed Render preview entities regardless of LOS historic_bruno
Description

Preview entities are used when placing a new building, but currently the renderer treats them like any other entity and they get shaded by FoW/SoD. Instead there should be a new flag IgnoreLOS in the VisualActor component. From discussion in IRC:

<Philip`> (It's just something I've vaguely wanted to do, but vaguely think
it'll need some non-trivial changes to the renderer to allow per-model flags
that influence the shader selection)
#1027 fixed [PATCH] [ATLAS] Assertion failure in CBrush::Slice while editing map vts michael
Description

Assertion failed: "idx < si.newv.size()" Location: Brush.cpp:246 (CBrush::Slice)

Call stack:

(error while dumping stack: No stack frames found) errno = 0 (No error reported here) OS error = 0 (no error code was set)

#1028 fixed [PATCH] UI Enhancement: Right Click selection removal kingadami michael
Description

Currently, when multiple units are selected, the player can remove a unit (or group of like units) from the selection by ctrl+left clicking the icon portrait of that unit in the selection UI (center panel).

An enhancement here would be to also allow removal of units from the selection via simply right-clicking their icons in the center panel (no Ctrl key necessary). This does not replace the ctrl-left click, but adds a redundant method. Currently right-clicking icons in the center panel does nothing.

This is a GUI enhancement only/does not effect ctrl-clicking behavior in the game world.

#1029 fixed [PATCH] Spell colour/color properly ben Philip Taylor
Description

Currently the code and data files use a random mixture of "colour" and "color". To minimise confusion, we should change everything to use one form of spelling consistently. (Which form?) (There may be some other words with similar spelling problems.) (I don't think spelling in comments is worth caring about; only class names, XML element/attribute names, etc.)

#1030 fixed Bounding box changes broke farm selection vtsj Kieran P
Description

After the awesome changes to the bounding box selection, it seems farms are no longer selectable via single click. You need to drag select them. Bug in the code or just missing an XML on the entity?

#1031 fixed Config option to render cursors with OpenGL Philip Taylor Pureon
Description

Add a config option to render cursors using OpenGL instead of native Windows cursors. This will allow 0AD cursors to appear in game video recordings, rather than showing the default windows cursor.

#1033 fixed Profiler-related GL errors historic_bruno
Description

Here is the first error and the associated call stack from gDEBugger:

Breaked-on: glGetQueryiv(GL_CURRENT_TIME_NV , GL_QUERY_COUNTER_BITS , 0x0020E718)
Error-Code: GL_INVALID_ENUM
Error-Description: An unacceptable value is specified for an enumerated argument. The offending command is ignored, and has no other side effect than to set the error flag.
ReportGLLimits - hwdetect.cpp, line 493
RunHardwareDetection - hwdetect.cpp, line 197
InitGraphics - gamesetup.cpp, line 892
RunGameOrAtlas - main.cpp, line 494
main - main.cpp, line 516
wmain - wseh.cpp, line 380
__tmainCRTStartup - crtexe.c, line 552
CallStartupWithinTryBlock - wseh.cpp, line 396
BaseThreadInitThunk - kernel32.dll
RtlInitializeExceptionChain - ntdll.dll

That error occurs during startup and is not reported. The next occurs when enabling the profiler (F11) and is reported:

Breaked-on: glGenQueries(8 , 0x05A8B798)
Error-Code: GL_INVALID_OPERATION
Error-Description: The specified operation is not allowed in the current state. The offending function is ignored, having no side effect other than to set the error flag.
CProfiler2GPU_ARB_timer_query::RecordRegion - profiler2gpu.cpp, line 198
CProfiler2GPU::RegionLeave - profiler2gpu.cpp, line 835
CProfileViewer::RenderProfile - profileviewer.cpp, line 292
Render - gamesetup.cpp, line 273
Frame - main.cpp, line 385
RunGameOrAtlas - main.cpp, line 497
main - main.cpp, line 516
wmain - wseh.cpp, line 380
__tmainCRTStartup - crtexe.c, line 552
CallStartupWithinTryBlock - wseh.cpp, line 396
BaseThreadInitThunk - kernel32.dll
RtlInitializeExceptionChain - ntdll.dll
#1034 fixed Make qBot the default AI Jonathan Waller Kieran P
Description

Import qBot into 0 A.D. and make it the default bot for Alpha 8.

qBot development can (and probably should) still happen in the Git repo, and periodically, when features are completed and tested, pulled back into 0 A.D.

Therefore, I suggest quantumstate bring qBot AI into as stable a release as possible for the next Alpha release.

#1035 fixed Crash in JS_free when starting random map fabio
Description

When I try to start a random map sometimes I get this segmentation fault.

Program received signal SIGSEGV, Segmentation fault.
0xb799ab01 in JS_free () from /usr/lib/libmozjs185.so.1.0

I am on Ubuntu 11.04 32 bit and I am compiling r10615 against Ubuntu version of libmozjs.

#1036 fixed Path case-insensitivity causes problems with deleting files Philip Taylor
Description

The goal is to have file layout a bit like

mods/
  public/
    public.zip
      Carthage_Peace_2.ogg
    update.zip
      carthage_peace_2.ogg
      Carthage_Peace_2.ogg.DELETED

so the result after loading public.zip then update.zip is that there will be a single enumerable file carthage_peace_2.ogg.

Apparently that doesn't work. I think the problem may be that VFS uses std::map<VfsPath, ...> and VfsPath::operator< uses wcscasecmp, so the C.ogg and c.ogg will be considered equivalent paths and the c.ogg will override the C.ogg, then the C.ogg.DELETED will delete the c.ogg, ending up with no enumerable files.

Do paths really need to be compared case insensitively? That seems invalid on Unix, and insufficient (therefore probably not necessary?) on Windows (the paths "foobarbaz" and "FOOBARBAZ" are equivalent, but so is "FOOBAR~1", and I don't think we check for that amount of equivalence).

#1037 fixed CMapGeneratorWorker creates dangling JSContext pointers Philip Taylor
Description

CMapGeneratorWorker::RunThread deletes its m_ScriptInterface, while m_MapData still contain some StructuredClones generated via that ScriptInterface's context. StructuredClone stores a pointer to that context, which is used for JS_free in its destructor, so JS_free is being called later on a non-existent context, which can cause crashes.

The ScriptInterface mustn't be deleted until everything that refers to it (StructuredClones, CScriptValRooteds, etc) has been cleaned up.

#1038 wontfix Make Ctrl+0 clear current control group Erik Johansson
Description

At the moment Ctrl+0 creates a new control group, which of course is nice in that you have ten control groups available. There might be reasons why you want to remove any control group from the selected units. One way to do it, while still keeping the ten control groups would be to do something involving the Alt key. That would also make it possible to remove a single control group if/once units are able to be part of multiple control groups. Even in that case it would be nice to have a "remove all control groups" key combination. I'm very open for suggestions though :)

#1042 fixed Assertion failure in CCmpRallyPointRenderer::CreateMarker while using Atlas vts historic_bruno
Description

Possibly a component initialization order bug? (some info about that here)

To reproduce:

  1. Open Atlas.
  2. Create a civil centre.
  3. Start the simulation.
  4. Reset the simulation. Get the following assertion failure:
Assertion failed: "!cmpPlayerManager.null()"
Location: CCmpRallyPointRenderer.cpp:446 (CCmpRallyPointRenderer::CreateMarker)

Call stack:

CCmpRallyPointRenderer::CreateMarker (ccmprallypointrenderer.cpp:446)
    this = (unavailable)
    ownerId = 1 (0x00000001)

CCmpRallyPointRenderer::Init (ccmprallypointrenderer.cpp:413)
    this = (unavailable)
    paramNode = 0x0DFC7000 -> 
        m_Value = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
        m_Childs = (unsupported map<basic_string<char,char_traits<char> >,CParamNode >)
        m_IsOk = true 
        m_ScriptVal = 
            m_Val = 
                px = 0x00000000
                pn = 
                    pi_ = 0x00000000




    texturePropsBase = 
        m_Path = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 47 ('/')

        m_Filter = 9987 (0x00002703)
        m_WrapS = 33069 (0x0000812D)
        m_WrapT = 33071 (0x0000812F)
        m_Aniso = 4.000000 (0x40800000)

    texturePropsMask = 
        m_Path = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 47 ('/')

        m_Filter = 9987 (0x00002703)
        m_WrapS = 33069 (0x0000812D)
        m_WrapT = 33071 (0x0000812F)
        m_Aniso = 4.000000 (0x40800000)


CCmpProjectileManager::Deserialize (ccmpprojectilemanager.cpp:80)
    this = (unavailable)
    paramNode = 0x0DFC7000 (see above)
    __formal = 0x039AFA80 -> (IDeserializer)

CComponentManager::DeserializeState (componentmanagerserialization.cpp:311)
    this = (unavailable)
    stream = 0x0CA618B0 -> (basic_istream<char,char_traits<char> >)
    rng = (unsupported basic_string<char,char_traits<char> >)
    deserializer = 
        (IDeserializer)
        m_ScriptBackrefs = (unsupported map<size_t,JSObject * >)
        m_ScriptInterface = 0x0053FE80 -> 
            m = (auto_ptr<ScriptInterface_impl>)

        m_Stream = 0x0CA618B0 (see above)

    noParam = 
        m_Value = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
        m_Childs = (unsupported map<basic_string<char,char_traits<char> >,CParamNode >)
        m_IsOk = true 
        m_ScriptVal = 
            m_Val = 
                px = 0x00000000
                pn = 
                    pi_ = 0x00000000




    templateManager = 0x0DB0B1F8 -> 
        
            m_EntityId = 1 (0x00000001)
            m_SimContext = 0x0053FE70 -> 
                m_ComponentManager = 0x0053FE80 (see above)
                m_UnitManager = 0x00515BB8 -> 
                    m_Units = (unsupported vector<CUnit * >)
                    m_ObjectManager = 0x0B527ED4 -> 
                        m_MeshManager = 0x0B527E8C -> 
                            m_MeshMap = 
                                table_ = 
                                    
                                        
                                            buckets_ = 0x0D00CBA0 -> 
                                                next_ = 0x0B680EE0 -> 
                                                    next_ = 0x0B680C40 -> 
                                                        next_ = 0x00000000



                                            bucket_count_ = 11 (0x0000000B)
                                            allocators_ = 
                                                
                                                    (unsupported )
                                                    (unsupported )



                                        
                                            current_ = false
                                            funcs_ = "s/i"

                                        size_ = 8 (0x00000008)
                                        mlf_ = 1.000000 (0x3F800000)
                                        cached_begin_bucket_ = 0x0D00CBA0 (see above)
                                        max_load_ = 11 (0x0000000B)



                            m_ColladaManager = 0x0B527E88 -> 
                                m = 0x00515BF8 -> 
                                    dll = 
                                        m_Name = 0x015A288C -> "Collada"
                                        m_Handle = 0x00000000

                                    set_logger = 0x00000014
                                    set_skeleton_definitions = 0x00000019
                                    convert_dae_to_pmd = 0x0000001A
                                    convert_dae_to_psa = 0x0000001D



                        m_SkeletonAnimManager = 0x0B527EB0 -> 
                            m_Animations = 
                                table_ = 
                                    
                                        
                                            buckets_ = 0x0DD105A8 -> 
                                                next_ = 0x00000000

                                            bucket_count_ = 11 (0x0000000B)
                                            allocators_ = 
                                                
                                                    (unsupported )
                                                    (unsupported )



                                        
                                            (too much output; skipping to next top-level symbol)

                                        size_ = 1 (0x00000001)
                                        mlf_ = 1.000000 (0x3F800000)
                                        cached_begin_bucket_ = 0x0DD105C4 -> 
                                            next_ = 0x0D636AD0 -> 
                                                next_ = 0x00000000


                                        max_load_ = 11 (0x0000000B)



                            m_ColladaManager = 0x0B527E88 (see above)

                        m_Simulation = 0x004F96B8 -> 
                            m = 0x0053FE70 (see above)

                        m_Objects = (unsupported map<CObjectManager::ObjectKey,CObjectEntry * >)
                        m_ObjectBases = (unsupported map<CStrW,CObjectBase * >)


                m_Terrain = 0x00515B98 -> 
                    m_MapSize = 257 (0x00000101)
                    m_MapSizePatches = 16 (0x00000010)
                    m_Patches = 0x0A790024 -> 
                        
                            m_WorldBounds = 
                                m_Data = [2] 
                                    
                                        X = 0.000000 (0x00000000)
                                        Y = 0.000000 (0x00000000)
                                        Z = 0.000000 (0x00000000)

                                    
                                        X = 64.000000 (0x42800000)
                                        Y = 22.382513 (0x41B30F63)
                                        Z = 64.000000 (0x42800000)


                            m_Transform = 
                                _11 = 1.000000 (0x3F800000)
                                _21 = 0.000000 (0x00000000)
                                _31 = 0.000000 (0x00000000)
                                _41 = 0.000000 (0x00000000)
                                _12 = 0.000000 (0x00000000)
                                _22 = 1.000000 (0x3F800000)
                                _32 = 0.000000 (0x00000000)
                                _42 = 0.000000 (0x00000000)
                                _13 = 0.000000 (0x00000000)
                                _23 = 0.000000 (0x00000000)
                                _33 = 1.000000 (0x3F800000)
                                _43 = 0.000000 (0x00000000)
                                _14 = 0.000000 (0x00000000)
                                _24 = 0.000000 (0x00000000)
                                _34 = 0.000000 (0x00000000)
                                _44 = 1.000000 (0x3F800000)
                                _data = [16] 
                                    1.000000 (0x3F800000)
                                    0.000000 (0x00000000)
                                    0.000000 (0x00000000)
                                    0.000000 (0x00000000)
                                    0.000000 (0x00000000)
                                    1.000000 (0x3F800000)
                                    0.000000 (0x00000000)
                                    0.000000 (0x00000000)
                                    0.000000 (0x00000000)
                                    0.000000 (0x00000000)
                                    1.000000 (0x3F800000)
                                    0.000000 (0x00000000) ...
                                _data2d = [4] 
                                    [4] { 1.000000 (0x3F800000), 0.000000 (0x00000000), 0.000000 (0x00000000), 0.000000 (0x00000000) }
                                    [4] { 0.000000 (0x00000000), 1.000000 (0x3F800000), 0.000000 (0x00000000), 0.000000 (0x00000000) }
                                    [4] { 0.000000 (0x00000000), 0.000000 (0x00000000), 1.000000 (0x3F800000), 0.000000 (0x00000000) }
                                    [4] { 0.000000 (0x00000000), 0.000000 (0x00000000), 0.000000 (0x00000000), 1.000000 (0x3F800000) }

                            m_InvTransform = 
                                _11 = 0.000000 (0x00000000)
                                _21 = 0.000000 (0x00000000)
                                _31 = 0.000000 (0x00000000)
                                _41 = 0.000000 (0x00000000)
                                _12 = 0.000000 (0x00000000)
                                _22 = 0.000000 (0x00000000)
                                _32 = 0.000000 (0x00000000)
                                _42 = 0.000000 (0x00000000)
                                _13 = 0.000000 (0x00000000)
                                _23 = 0.000000 (0x00000000)
                                _33 = 0.000000 (0x00000000)
                                _43 = 0.000000 (0x00000000)
                                _14 = 0.000000 (0x00000000)
                                _24 = 0.000000 (0x00000000)
                                _34 = 0.000000 (0x00000000)
                                _44 = 0.000000 (0x00000000)
                                _data = [16] 
                                    0.000000 (0x00000000)
                                    0.000000 (0x00000000)
                                    0.000000 (0x00000000)
                                    0.000000 (0x00000000)
                                    0.000000 (0x00000000)
                                    0.000000 (0x00000000)
                                    0.000000 (0x00000000)
                                    0.000000 (0x00000000)
                                    0.000000 (0x00000000)
                                    0.000000 (0x00000000)
                                    0.000000 (0x00000000)
                                    0.000000 (0x00000000) ...
                                _data2d = [4] 
                                    [4] { 0.000000 (0x00000000), 0.000000 (0x00000000), 0.000000 (0x00000000), 0.000000 (0x00000000) }
                                    [4] { 0.000000 (0x00000000), 0.000000 (0x00000000), 0.000000 (0x00000000), 0.000000 (0x00000000) }
                                    [4] { 0.000000 (0x00000000), 0.000000 (0x00000000), 0.000000 (0x00000000), 0.000000 (0x00000000) }
                                    [4] { 0.000000 (0x00000000), 0.000000 (0x00000000), 0.000000 (0x00000000), 0.000000 (0x00000000) }

                            m_RenderData = 0x00000000
                            m_BoundsValid = true 

                        m_bWillBeDrawn = false
                        m_MiniPatches = [16] 
                            [16] 
                                
                                    Tex = 0x0D835CB8 -> 
                                        m_Tag = { (unsupported basic_string<char,char_traits<char> >) }
                                        m_pProperties = 
                                            px = 0x0D7EA718 -> 
                                                m_pParent = 
                                                    px = 0x0D730B78 -> 
                                                        m_pParent = 
                                                            px = 0x00000000
                                                            pn = 
                                                                pi_ = 0x00000000


                                                        m_BaseColor = 0 (0x00000000)
                                                        m_HasBaseColor = false
                                                        m_MovementClass = { (unsupported basic_string<char,char_traits<char> >) }
                                                        m_Groups = (unsupported vector<CTerrainGroup * >)

                                                    pn = 
                                                        pi_ = 0x0B5301F8 -> 
                                                            use_count_ = 20 (0x00000014)
                                                            weak_count_ = 1 (0x00000001)



                                                m_BaseColor = 0 (0x00000000)
                                                m_HasBaseColor = false
                                                m_MovementClass = { (unsupported basic_string<char,char_traits<char> >) }
                                                m_Groups = (unsupported vector<CTerrainGroup * >)

                                            pn = 
                                                pi_ = 0x0D836698 -> 
                                                    use_count_ = 16 (0x00000010)
                                                    weak_count_ = 1 (0x00000001)



                                        m_Texture = 
                                            px = 0x0D8425E0 -> 
                                                m_Properties = 
                                                    m_Path = 
                                                        path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
                                                        separator = "/r✃"

                                                    m_Filter = 9987 (0x00002703)
                                                    m_WrapS = 10497 (0x00002901)
                                                    m_WrapT = 10497 (0x00002901)
                                                    m_Aniso = 2.000000 (0x40000000)

                                                m_Handle = 9502865 (0x0000000000910091)
                                                m_BaseColour = 4287075159 (0xFF879357)
                                                m_State = LOADED
                                                m_TextureManager = 0x00503310 -> 
                                                    m_VFS = 
                                                        px = 0x0048DA40 -> (IVFS)
                                                        pn = 
                                                            pi_ = 0x0048CDB8 -> 
                                                                use_count_ = 4 (0x00000004)
                                                                weak_count_ = 1 (0x00000001)



                                                    m_CacheLoader = 
                                                        m_VFS = 
                                                            px = 0x0048DA40 (see above)
                                                            pn = 
                                                                pi_ = 0x0048CDB8 (see above)


                                                        m_FileExtension = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)

                                                    m_DisableGL = false
                                                    m_TextureConverter = 
                                                        m_VFS = 
                                                            px = 0x0048DA40 (see above)
                                                            pn = 
                                                                pi_ = 0x0048CDB8 (see above)


                                                        m_HighQuality = false
                                                        m_WorkerThread = 952 (0x000003B8)
                                                        m_WorkerMutex = 0x005E09B0
                                                        m_WorkerSem = 0x000003B4
                                                        m_RequestQueue = (unsupported deque<boost::shared_ptr<CTextureConverter::ConversionRequest> >)
                                                        m_ResultQueue = (unsupported deque<boost::shared_ptr<CTextureConverter::ConversionResult> >)
                                                        m_Shutdown = false

                                                    m_DefaultHandle = 65537 (0x0000000000010001)
                                                    m_ErrorHandle = 131074 (0x0000000000020002)
                                                    m_ErrorTexture = 
                                                        px = 0x0048BDB8 -> 
                                                            m_Properties = 
                                                                m_Path = 
                                                                    path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
                                                                    separator = "/f✃"

                                                                m_Filter = 9987 (0x00002703)
                                                                m_WrapS = 10497 (0x00002901)
                                                                m_WrapT = 10497 (0x00002901)
                                                                m_Aniso = 1.000000 (0x3F800000)

                                                            m_Handle = 131074 (0x0000000000020002)
                                                            m_BaseColour = 0 (0x00000000)
                                                            m_State = LOADED
                                                            m_TextureManager = 0x00503310 (see above)
                                                            m_Self = 
                                                                px = 0x0048BDB8 (see above)
                                                                pn = 
                                                                    pi_ = 0x005173E8 -> 
                                                                        use_count_ = 1 (0x00000001)
                                                                        weak_count_ = 2 (0x00000002)




                                                        pn = 
                                                            pi_ = 0x005173E8 (see above)


                                                    m_TextureCache = 
                                                        table_ = 
                                                            
                                                                
                                                                    buckets_ = 0x0D858F30 -> 
                                                                        next_ = 0x00000000

                                                                    bucket_count_ = 769 (0x00000301)
                                                                    allocators_ = 
                                                                        
                                                                            (unsupported )
                                                                            (unsupported )



                                                                
                                                                    current_ = false
                                                                    funcs_ = [2] { { data_ = { buf = [2] { [8] { 3, 3, 0, 0, 0, 0, 0, 183 }, 3 }, align_ = 
                                                                                    t0 = 3
                                                                                    t1 = 3
                                                                                    t2 = 3
                                                                                    t3 = 3
                                                                                    t4 = 3
                                                                                    t5 = 3
                                                                                    t6 = 3
                                                                                    t7 = 3
                                                                                    t8 = 3
                                                                                    t9 = 3
                                                                                    t10 = 3
                                                                                    t11 = 3
                                                                                    t12 = 3
                                                                                    t13 = 3
                                                                                    t14 = 3
                                                                                    t15 = 3
                                                                                    t16 = 3
                                                                                    t17 = 3
                                                                                    t18 = 3
                                                                                    t19 = 3
                                                                                    t20 = 3
                                                                                    t21 = 3
                                                                                    t22 = 3
                                                                                    t23 = 3
 } }, { data_ = { buf = [2] { [8] { 0, 0, 0, 0, 0, 183, 2, 0 }, 0 }, align_ = 
                                                                                    t0 = 0
                                                                                    t1 = 0
                                                                                    t2 = 0
                                                                                    t3 = 0
                                                                                    t4 = 0
                                                                                    t5 = 0
                                                                                    t6 = 0
                                                                                    t7 = 0
                                                                                    t8 = 0
                                                                                    t9 = 0
                                                                                    t10 = 0
                                                                                    t11 = 0
                                                                                    t12 = 0
                                                                                    t13 = 0
                                                                                    t14 = 0
                                                                                    t15 = 0
                                                                                    t16 = 0
                                                                                    t17 = 0
                                                                                    t18 = 0
                                                                                    t19 = 0
                                                                                    t20 = 0
                                                                                    t21 = 0
                                                                                    t22 = 0
                                                                                    t23 = 0
 } } }

                                                                size_ = 695 (0x000002B7)
                                                                mlf_ = 1.000000 (0x3F800000)
                                                                cached_begin_bucket_ = 0x0D858F34 -> 
                                                                    next_ = 0x0D8A21B0 -> 
                                                                        next_ = 0x0D78C838 -> 
                                                                            next_ = 0x00000000



                                                                max_load_ = 769 (0x00000301)



                                                    m_HotloadFiles = 
                                                        table_ = 
                                                            
                                                                
                                                                    buckets_ = 0x0D859BB8 -> 
                                                                        next_ = 0x00000000

                                                                    bucket_count_ = 769 (0x00000301)
                                                                    allocators_ = 
                                                                        
                                                                            (unsupported )
                                                                            (unsupported )



                                                                
                                                                    current_ = false
                                                                    funcs_ = [2] { { data_ = { buf = [1] { [8] { 4, 0, 0, 214, 2, 0, 0, 0 } }, align_ = 
                                                                                    t0 = 4
                                                                                    t1 = 4
                                                                                    t2 = 4
                                                                                    t3 = 4
                                                                                    t4 = 4
                                                                                    t5 = 4
                                                                                    t6 = 4
                                                                                    t7 = 4
                                                                                    t8 = 4
                                                                                    t9 = 4
                                                                                    t10 = 4
                                                                                    t11 = 4
                                                                                    t12 = 4
                                                                                    t13 = 4
                                                                                    t14 = 4
                                                                                    t15 = 4
                                                                                    t16 = 4
                                                                                    t17 = 4
                                                                                    t18 = 4
                                                                                    t19 = 4
                                                                                    t20 = 4
                                                                                    t21 = 4
                                                                                    t22 = 4
                                                                                    t23 = 4
 } }, { data_ = { buf = [1] { [8] { 0, 0, 214, 2, 0, 0, 0, 0 } }, align_ = 
                                                                                    t0 = 0
                                                                                    t1 = 0
                                                                                    t2 = 0
                                                                                    t3 = 0
                                                                                    t4 = 0
                                                                                    t5 = 0
                                                                                    t6 = 0
                                                                                    t7 = 0
                                                                                    t8 = 0
                                                                                    t9 = 0
                                                                                    t10 = 0
                                                                                    t11 = 0
                                                                                    t12 = 0
                                                                                    t13 = 0
                                                                                    t14 = 0
                                                                                    t15 = 0
                                                                                    t16 = 0
                                                                                    t17 = 0
                                                                                    t18 = 0
                                                                                    t19 = 0
                                                                                    t20 = 0
                                                                                    t21 = 0
                                                                                    t22 = 0
                                                                                    t23 = 0
 } } }

                                                                size_ = 726 (0x000002D6)
                                                                mlf_ = 1.000000 (0x3F800000)
                                                                cached_begin_bucket_ = 0x0D859BBC -> 
                                                                    next_ = 0x0D8329A8 -> 
                                                                        next_ = 0x00000000


                                                                max_load_ = 769 (0x00000301)



                                                    m_SettingsFiles = 
                                                        table_ = 
                                                            
                                                                
                                                                    buckets_ = 0x0B606B60 -> 
                                                                        next_ = 0x0B5D7BE8 -> 
                                                                            next_ = 0x00000000


                                                                    bucket_count_ = 53 (0x00000035)
                                                                    allocators_ = 
                                                                        
                                                                            (unsupported )
                                                                            (unsupported )



                                                                
                                                                    current_ = false
                                                                    funcs_ = [2] { { data_ = { buf = [1] { [8] { 0, 0, 0, 31, 0, 0, 0, 0 } }, align_ = 
                                                                                    t0 = 0
                                                                                    t1 = 0
                                                                                    t2 = 0
                                                                                    t3 = 0
                                                                                    t4 = 0
                                                                                    t5 = 0
                                                                                    t6 = 0
                                                                                    t7 = 0
                                                                                    t8 = 0
                                                                                    t9 = 0
                                                                                    t10 = 0
                                                                                    t11 = 0
                                                                                    t12 = 0
                                                                                    t13 = 0
                                                                                    t14 = 0
                                                                                    t15 = 0
                                                                                    t16 = 0
                                                                                    t17 = 0
                                                                                    t18 = 0
                                                                                    t19 = 0
                                                                                    t20 = 0
                                                                                    t21 = 0
                                                                                    t22 = 0
                                                                                    t23 = 0
 } }, { data_ = { buf = [1] { [8] { 0, 0, 31, 0, 0, 0, 0, 0 } }, align_ = 
                                                                                    t0 = 0
                                                                                    t1 = 0
                                                                                    t2 = 0
                                                                                    t3 = 0
                                                                                    t4 = 0
                                                                                    t5 = 0
                                                                                    t6 = 0
                                                                                    t7 = 0
                                                                                    t8 = 0
                                                                                    t9 = 0
                                                                                    t10 = 0
                                                                                    t11 = 0
                                                                                    t12 = 0
                                                                                    t13 = 0
                                                                                    t14 = 0
                                                                                    t15 = 0
                                                                                    t16 = 0
                                                                                    t17 = 0
                                                                                    t18 = 0
                                                                                    t19 = 0
                                                                                    t20 = 0
                                                                                    t21 = 0
                                                                                    t22 = 0
                                                                                    t23 = 0
 } } }

                                                                size_ = 31 (0x0000001F)
                                                                mlf_ = 1.000000 (0x3F800000)
                                                                cached_begin_bucket_ = 0x0B606B60 (see above)
                                                                max_load_ = 53 (0x00000035)




                                                m_Self = 
                                                    px = 0x0D8425E0 (see above)
                                                    pn = 
                                                        pi_ = 0x0D836710 -> 
                                                            use_count_ = 2 (0x00000002)
                                                            weak_count_ = 9 (0x00000009)




                                            pn = 
                                                pi_ = 0x0D836710 (see above)


                                        m_BaseColor = 4287075159 (0xFF879357)
                                        m_BaseColorValid = true 
                                        m_Groups = (unsupported vector<CTerrainGroup * >)

                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)
 ...
                            [16] 
                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)
 ...
                            [16] 
                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)
 ...
                            [16] 
                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)
 ...
                            [16] 
                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)
 ...
                            [16] 
                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)
 ...
                            [16] 
                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)
 ...
                            [16] 
                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)

                                
                                    Tex = 0x0D835CB8 (see above)
                                    Priority = 0 (0x00000000)
 ... ...
                        m_X = 0 (0x00000000)
                        m_Z = 0 (0x00000000)
                        m_Parent = 0x00515B98 (see above)

                    m_Heightmap = 0x0D8C1B88 -> 16384 (0x4000)
                    m_BaseColour = 
                        R = [8] { 255 (0xFF), 255 (0xFF), 255 (0xFF), 255 (0xFF), 0 (0x00), 0 (0x00), 0 (0x00), 0 (0x00) }
                        G = 255 (0xFF)
                        B = 255 (0xFF)
                        A = 255 (0xFF)





    numComponentTypes = 47 (0x0000002F)
    i = 13 (0x0000000D)
    ctid = 27 (0x0000001B)
    ctname = (unsupported basic_string<char,char_traits<char> >)
    numComponents = 1 (0x00000001)
    j = 0 (0x00000000)
    ent = 11 (0x0000000B)

SimState::Thaw (simstate.cpp:41)
    this = (unavailable)

ViewGame::RestoreState (view.cpp:325)
    this = (unavailable)
    label = 0x039AFB60 -> (unsupported basic_string<wchar_t,char_traits<wchar_t> >)

AtlasMessage::fSimStateRestore_wrapper (mischandlers.cpp:131)
    msg = 0x0D2E4B28 -> (AtlasMessage::IMessage)

RunEngine (gameloop.cpp:171)
    data = 0x003DF6B4
    hooks = 
        override_gl_upload_caps = 0x00000000
        get_log_dir = 0x00000000
        bundle_logs = 0x00000000
        translate = 0x00000000
        translate_free = 0x00000000
        log = 0x00000000
        display_error = 0x01495AC0 -> (AtlasDisplayError)

    msgPasser = 0x003DEC98 -> 
        (AtlasMessage::MessagePasser)
        m_Mutex = 
            m_Mutex = 0x005951F0

        m_SemaphoreName = { (unsupported basic_string<char,char_traits<char> >) }
        m_Semaphore = 0x00427CA8 -> 540 (0x0000021C)
        m_Queue = (unsupported queue<AtlasMessage::IMessage *,deque<AtlasMessage::IMessage * > >)
        m_Trace = false

    last_activity = 35.0672 (0x4041889A50029B49)
    args = 
        m_Args = (unsupported vector<pair<CStr8,CStr8> >)
        m_Arg0 = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 92 ('\')


    recent_activity = true 
    time = 2.10768e-307 (0x0042F1E02C5814E4)
    ev = 
        ev = 
            type = 10 (0x0A)
            active = { type = 10 (0x0A), gain = 209 (0xD1), state = 130 (0x82) }
            key = 
                type = 10 (0x0A)
                keysym = { sym = 1076594528, unicode = 63328 (0xF760) }

            motion = { type = 10 (0x0A), x = 3970 (0x0F82), y = 34656 (0x8760) }
            button = 
                type = 10 (0x0A)
                button = 209 (0xD1)
                state = 130 (0x82)
                x = 34656 (0x8760)
                y = 16427 (0x402B)

            resize = { type = 10 (0x0A), w = 1076594528 (0x402B8760), h = 5371744 (0x0051F760) }
            expose = { type = 10 (0x0A) }
            quit = { type = 10 (0x0A) }
            user = { type = 10 (0x0A), code = 1076594528 (0x402B8760), data1 = 0x0051F760 }


    length = 0.000000 (0x0D2E4B28)
    last_time = 35.1173 (0x40418F05381DA643)
    msg = 0x0D2E4B28 (see above)
    name = (unsupported basic_string<char,char_traits<char> >)
    sleepUntil = 2.10768e-307 (0x0042F1E02C5814E4)

thread_start (wpthread.cpp:624)
    param = 0x005993E8
    ret = 0x6B980350

endthreadex (:0)

endthreadex (:0)

RtlInitializeExceptionChain (:0)

RtlInitializeExceptionChain (:0)


errno = 0 (No error reported here)
OS error = 0 (no error code was set)
#1043 fixed Marker line to rally point still drawn after rally point is unset vts Jonathan Waller
Description

Steps to reproduce:

  1. Set the rally point for a building.
  2. Unset the rally point by right licking on the building itself. (Line and marker vanish).
  3. Deselect the building.
  4. Reselect the building.

Now the rally point is drawn as going to the point which you set initially. Units act properly by staying where they are spawned.

#1044 fixed [PATCH] Autogarrison newly trained units in the production building mimo Jonathan Waller
Description

The player should be able to set the rally point of a building on itself so that trained units are automatically garrisoned. Units should not appear outside of the building at all and ungarrisoning should result in the units being ejected. Will also require a fix for the rally point line drawing code so that the rally point line is removed when the rally point position is set.

#1046 fixed [PATCH] Setting rally point on attackable entities maveric Jonathan Waller
Description

Players may want to set the rally point on an enemy entity and have the trained/ungarrisoned units attack. How should this be implemented for mobile enemies?

#1047 fixed Error on Game Startup gerbilOFdoom
Description

OS: Windows 7 Professional SP1 x32
GPU: nVidia GeForce GTS 250
CPU: Intel Core 2 Duo E6750
RAM: 4GB DDR2 (I know only 3.5 gigs are usable)

Assertion failed: "period_fs <= 0x05F5E100" Location: hpet.cpp:72 (CounterHPET::Activate)

Call stack:

013BE7C2

013B031E

013702BF

errno = 0 (Unknown error (0, 0x0)) OS error = 0 (no error code was set)
#1048 fixed Units can't attack goats michael
Description

Goats trained from the Corral are no longer attackable.

#1049 fixed Error when setting corral rally point on resource historic_bruno
Description

To reproduce:

  1. Build a corral.
  2. Set rally point on any resource.
  3. Train a goat. When it's trained, you get this error:
ERROR: Animal got moved into INDIVIDUAL.* state
#1050 fixed [PATCH] Codeblocks not relinking after static libraries change Yves Yves
Description

Changing something in the static libraries and running "build" does correctly recompile the changed files but does not relink pyrogenesis. The dependency-settings under "Project settings>Project's dependencies" are set correctly, but they only seem to affect the build order rather than the linking behaviour.

According to the Codeblocks Wiki it looks like the dependencies for linking have to be specified separately under "Build targets>Dependencies...>External dependency files". After doing this, the linking worked correctly.

Because our version of premake doesn't support this, another customization is required.

#1051 invalid Civic centres can be built in Fog-of-war Erik Johansson
Description

Civic centres can currently be built anywhere on the map that is explored, probably due to the changes that allows buildings to be built anywhere in your territory (as enemy buildings cannot exist there, at least not yet, eventually the roman special siege fortress buildings will, but perhaps those could show up for the enemy or something to avoid having trouble with them?). Civic centres should not be buildable anywhere in FoW though as they can be built anywhere on the map (except enemy/ally territory of course). Hopefully it's an easy fix.

#1052 fixed Rally points set on resource droppoff buildings/farms being constructed should allow for change of focus if building is completed mimo Erik Johansson
Description

Not really a requirement, but it would be a nice improvement if units would e.g. start to gather from a farm if a rally point was set on it before it was finished and start looking for nearby resources if the rally point was set on a farmstead/mill. 

#1053 fixed Add queued / multiple orders to rally points leper historic_bruno
Description

Units support queued orders (waypoints) which the player can use by holding down the shift key when assigning orders. So our rally points should also support queued orders, with the same hotkey. For instance if you want trained units to follow a specific path, you could give multiple rally points with the same shift hotkey. I guess this would require changes to the rally point line renderer to support connecting multiple way points (maybe it should share its implementation with #657) and instead of having a single rally point order, there would be an array with all orders after the first being queued.

#1054 fixed [PATCH] multiplayer with no humans broken Matt Doerksen daemacles
Description

It is possible to host a multiplayer game with only bots. When launched, gui/session/session.js fails because playerState is undefined.

#1056 duplicate Trade Routes MishFTW
Description

An interesting feature to have. Similar to the trade routes in AOE 3. You build a trading post near the route and profit from it. In the game we could either build a market or create a trading post building for this purpose. From this building, you gain the resource of your choice.

#1057 fixed Fauna animations Zaggy1024 Zaggy1024
Description

Since Blender works for getting animations in the game now, I'm going to start working on making fauna animations.

#1058 fixed [PATCH] Refuse to run as root leper Philip Taylor
Description

Sometimes people try running the game as root (via sudo etc) on Linux. That's terribly insecure, and causes problems if the game tries creating directories like ~/.config/0ad/ in the (non-root) user's home directory while running as root (which I think happens occasionally), because the directory ownership will be wrong.

The game should probably detect on startup that the user is root, and print some error message (saying how it's terribly insecure) and terminate, to stop people doing dangerous things.

#1059 wontfix Detailed documentation of default mod "public" files/filestructure gerbilOFdoom
Description

A major aspect of the game that I find lacking is documentation. The wiki currently contains descriptions of the source code and method descriptions, but a layout of the "public" mod cannot be found. This is all fine for current developers, but future developers need to find their way around the code. To help speed up the process, a map/list of file references would go a long way. My thought is an easy-to-search system where a person can jump in at, for example, the event handler for a mouse click and be given references to the points where a mouse click is processed. 

I probably have my head in the clouds here, but I'm going to look into documenting my exploration of the code and getting a start on this. For now, I'm going to start at function declarations and work out where they are used. Any suggestions on how to make the searchable references would be nice.

#1060 wontfix [PATCH] The conditional expressions of the 'if' operators situated alongside each other are identical Echelon9
Description

There are two 'if' operators with identical conditional expressions close to each other. This is either a potential error or excessive code.

#1061 fixed [PATCH] There are identical sub-expressions 'm_totalDeallocatedBytes' to the left and to the right of the '<=' operator. Echelon9
Description

There are identical sub-expressions to the left and to the right of the '<=' operator, likely a logic error.

Proposed patch, based on the surrounding lines as context is attached.

#1062 fixed [PATCH] It is odd that pointer to 'char' type is compared with the '\0' value. Probably meant: *ext == '\0'. Echelon9
Description

A potential error: a pointer to the char type is compared to value '\0'. It is highly probable that the pointer dereferencing operation is missing.

Proposed patch attached.

#1063 fixed [PATCH] The return value of function 'remove_if' is required to be utilized. Echelon9
Description

Calls of some functions are senseless if their results are not used.

Example: The std::remove function does not remove elements from the container. It only shifts the elements and brings the iterator back to the beginning of the trash. Suppose we have the vector<int> container that contains elements 1,2,3,1,2,3,1,2,3. If we execute the code "remove( v.begin(), v.end(), 2 )", the container will contain elements 1,3,1,3,?,?,?, where ? is some trash. The function will bring the iterator back to the first senseless element, so if we want to remove these trash elements, we must write the code this way: "v.erase(remove(v.begin(), v.end(), 2), v.end())".

Proposed code is attached.

#1064 fixed [PATCH] Performance improvement. It is more effective to use the prefix form of ++iterator (vs iterator++) Echelon9
Description

An iterator is changed in the program code by the increment/decrement postfix operator. Since the previous iterator's value is not used, you may replace the postfix operator with the prefix one. In some cases, the prefix operator will work faster than the postfix one, especially in Debug-versions.

The prefix increment operator changes the object's state and returns itself already changed.

The situation with the postfix increment operator is more complicated. The object's state must change but it is the previous state which is returned. So an additional temporary object is created.

Reference: Scott Meyers' Rule 6. Distinguish between prefix increment and decrement operators, in:

Meyers, Scott. More Effective C++: 35 New Ways to Improve Your Programs and Designs. Addison-Wesley, Reading, Mass., 1996. ISBN-10: 020163371X. ISBN-13: 9780201633719.

#1065 fixed [PATCH] Incorrect format on the third actual argument of the 'fprintf' function. The SIGNED integer type argument is expected. Echelon9
Description

Within the ScriptingInterface.cpp file, two occurrences of a format string expecting signed ints when the data itself is an unsigned int.

Proposed fix attached for the two cases in this file.

#1067 fixed Attack bonuses Kieran P
Description

Certain units are stronger against others and weaker against others.

Change Attack.js to support this functinoality.

#1068 invalid Error on load(?) in Windows 8 Aviv
Description

Reported by Justin Jacoby on Facebook:

Details: unhandled exception (Access violation writing 0x00000000) Location: unknown:0 (?) Call stack: (error while dumping stack: No stack frames found) errno = 0 (No error reported here) OS error = 487 (Attempt to access invalid address.)

#1069 worksforme [NEEDS MORE INFO] Building Premake4 (release) fails Vincent-Xavier
Description

Just after os_getcwd.c Creating obj/Release path_isabsolute.c

x86_64-pc-linux-gnu-gcc fails on not find amd64. I send you a copy of my running environment.

#1071 duplicate [MAC OSX 10.7] Crash at startup Clement Cohen
Description

Process: pyrogenesis [37443] Path: /Users/USER/Documents/*/pyrogenesis.app/Contents/MacOS/pyrogenesis Identifier: pyrogenesis Version: ??? (???) Code Type: X86-64 (Native) Parent Process: launchd [368]

Date/Time: 2011-12-27 16:29:09.427 +0100 OS Version: Mac OS X 10.7.2 (11C74) Report Version: 9 Sleep/Wake UUID: 790E9BEE-8F8B-4799-A052-E61DE57EFAA4

Interval Since Last Report: 59537 sec Crashes Since Last Report: 4 Per-App Crashes Since Last Report: 2 Anonymous UUID: 4485EB9E-FADD-4B9C-B91E-08AA8E06FDAA

Crashed Thread: 0

Exception Type: EXC_BREAKPOINT (SIGTRAP) Exception Codes: 0x0000000000000002, 0x0000000000000000

Application Specific Information: dyld: launch, loading dependent libraries

Dyld Error Message:

Library not loaded: @executable_path/libmozjs185-ps-release.1.0.dylib Referenced from: /Users/USER/Documents/*/pyrogenesis.app/Contents/MacOS/pyrogenesis Reason: image not found

Binary Images:

0x10d9c1000 - 0x10de12ff7 +pyrogenesis (??? - ???) <6B23154D-3F7B-3E38-AFF1-479CFC32A897> /Users/USER/Documents/*/pyrogenesis.app/Contents/MacOS/pyrogenesis 0x10e0db000 - 0x10e106fff com.apple.audio.OpenAL (1.5.1 - 1.5.1) <5B954EC6-08B6-3255-932C-DDAB908E72F4> /System/Library/Frameworks/OpenAL.framework/Versions/A/OpenAL 0x10e118000 - 0x10e14cfe7 +libjpeg.8.dylib (12.0.0 - compatibility 12.0.0) <ED5FAB04-2B04-3EB0-8DAD-64ED4F620961> /opt/local/lib/libjpeg.8.dylib 0x10e155000 - 0x10e174fff +libpng15.15.dylib (20.0.0 - compatibility 20.0.0) <48C87023-FB13-393C-8FD4-DE4F1803ECA3> /usr/X11/lib/libpng15.15.dylib 0x10e180000 - 0x10e193fff +libz.1.dylib (1.2.5 - compatibility 1.0.0) <C9756B5C-85C1-38AA-8861-27FDE74BCF0B> /opt/local/lib/libz.1.dylib

0x7fff6d5c1000 - 0x7fff6d5f5ac7 dyld (195.5 - ???) <4A6E2B28-C7A2-3528-ADB7-4076B9836041> /usr/lib/dyld 0x7fff99841000 - 0x7fff99850ff7 com.apple.opengl (1.7.5 - 1.7.5) <2945F1A6-910C-3596-9988-5701B04BD821> /System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL

Model: MacBookPro6,2, BootROM MBP61.0057.B0C, 2 processors, Intel Core i5, 2.4 GHz, 4 GB, SMC 1.58f16 Graphics: NVIDIA GeForce GT 330M, NVIDIA GeForce GT 330M, PCIe, 256 MB Graphics: Intel HD Graphics, Intel HD Graphics, Built-In, 288 MB Memory Module: BANK 0/DIMM0, 2 GB, DDR3, 1067 MHz, 0x802C, 0x384A53463235363634485A2D314731443120 Memory Module: BANK 1/DIMM0, 2 GB, DDR3, 1067 MHz, 0x802C, 0x384A53463235363634485A2D314731443120

#1072 wontfix SpiderMonkey does not compile on Mac OS Lion - patch attached pbernery
Description

While update_workspaces was running, I got this error while it was configuring build for SpiderMonkey:

configure: error: installation or configuration problem: C compiler cannot create executables.
ERROR: SpiderMonkey build failed

I was on the SpiderMonkey Mozilla build web page that it can be compiled on Mac OS with some tricks on the command line. I updated the build.sh file for that. It compiles.

You can find attached to this ticket the patch to apply on build.sh to make it work on Mac OS Lion.

#1073 fixed Mac OS Lion : compilation script forgets to move dylib files in .app package. pbernery
Description

The produced .app folder is not usable as is because the .dylib files built are not copied or linked in the pyrogenesis folder. When trying to execute pyrogenesis, the following error occurs:

dyld: Library not loaded: @executable_path/libmozjs185-ps-release.1.0.dylib
  Referenced from: <ad>/binaries/system/pyrogenesis.app/Contents/MacOS/./pyrogenesis
  Reason: image not found

I managed to make it work by making a symbolic link of all dylib files in the pyrogenesis folder:

cd <ad>/binaries/system/pyrogenesis.app/Contents/MacOS
ln -s ../../../*.dylib .

The executable launches (on the command line only by typing ./pyrogenesis, not by opening the .app folder) and works pretty well. I just miss the sound but this should be another problem.

#1074 fixed [PATCH] Compile on GCC broken by r10815 Echelon9
Description

An addition in r10815 breaks compilation on GCC flavours with:

source/lib/sysdep/arch/x86_x64/cache.cpp:643: error: explicit qualification in declaration of 'const x86_x64::Cache* x86_x64::Caches(size_t)'

Fix attached.

#1075 fixed Mac OS Lion: building with libSDL from MacPorts disable fullscreen pbernery
Description

The wiki page for build process says to use the libSDL from MacPorts as it the easiest way to install. However, the current version (1.2.14) has a bug on Lion: it can't create fullscreen OpenGL screen (see bug report here).

The bug is fixed in 1.2 development version. We should may be update the install Wiki page.

#1076 fixed Boost spews excessive warnings Josh Matthews
Description

It can be frustrating to find actual errors among all of the boost output. I don't know if this is just an OSX 10.6.8, gcc 4.2.1 thing (since I see mentions of CLANG in the warnings), but it would be nice to get this cleaned up.

#1077 fixed [PATCH] Add bool operator conversion to CmpPtr leper Josh Matthews
Description

Consider the elegance of |if (cmpVisual)| instead of |if (!cmpVisual.null())|.

#1078 fixed [PATCH] Fix unreachable resources on random maps O.Davoodi historic_bruno
Description

Try to avoid placing resources on hills because of the pathfinding issues they cause.

#1079 worksforme Add a hotkey to exit the program immediately Josh Matthews
Description

I get a little bit more annoyed every time I need to use the mouse to exit the current match, then quit the program by clicking too many dialog boxes.

#1080 wontfix Sync logs from multiple local clients stomp on each other Josh Matthews
Description

When running multiple clients locally, if a sync error occurs then all clients attempt to write to the same file (oos_dump.txt). It would be nice to dump to a filename that includes the player ID to avoid data being stomped upon.

#1081 wontfix Selection box draws in front of minimap Josh Matthews
Description

This looks pretty weird.

#1082 fixed [PATCH] Add "Random" option for selecting civilizations in match setup. ben O.Davoodi
Description

All of the games have such option when player wants to choose a civ from dropbox.

#1083 fixed Function call failed: wsysdep.cpp:357 and mahaf.cpp:300 Programmer B. Guns
Description

I just tried to build the latest revision (r10828) in Microsoft visual C++ 2010 Express (Administrator) I have windows 7 64 bit. The errors happen both in release and debug mode.

This happens:

  1. This project is out of date: engine - Release Win32 Would you like to build it? I click YES
  1. 2 errors - I posted in Original post. When I suppress both I can start the game though. Starting a game appears to give no problems, Although in debug mode Oasis is painfully slow ( even with my top rig)..
#1084 fixed qBot fails to handle not having a civ center Jonathan Waller gerbilOFdoom
Description

On map Gallic Fields, the Romans do not have a civ center. qBot throws errors because "myCivCentres.toEntityArray()[0]" returns a null value when a civ center is not present. I added a null check, but the error popped back up when the economy portion of qBot couldn't find "accessibility" because it wasn't defined due to my null check. I read something about the game slowing down excessively when a civ center is destroyed, don't know if it has been fixed or not but this is probably the issue. Assigning to quantumstate, pretty sure he's the developer of qBot.

#1085 fixed [PATCH] It's odd that the argument of sizeof() operator is &freqMhz Echelon9
Description

Using the reference operator (&) is going to return the size of the pointer from sizeof(), rather than the size of the object.

Should be using the dereference operator (*).

#1086 fixed [PATCH] Incorrect format on the fourth actual argument of the 'swprintf_s' function. The SIGNED integer type argument is expected. Echelon9
Description

Within the ogl_tex.cpp file, an occurrence of a format string expecting signed int when the data itself is an unsigned int, GLuint.

Proposed patch attached.

#1087 fixed [PATCH] (snd_mgr) Incorrect format on the fourth actual argument of the 'swprintf_s' function. The SIGNED integer type argument is expected. Echelon9
Description

Within the snd_mgr.cpp file, two occurrences of a format string expecting signed int when the data itself is an unsigned int, ALuint.

Proposed patch attached.

#1089 fixed [PATCH] Properly serialize AI data in saved games mimo historic_bruno
Description

AIs require some serializer enhancements to properly save/load their data, unlike the rest of the simulation. We used a hack in Alpha 8, basically resetting the AIs to their initial state when loading a saved game. This is less than ideal because an AI might be in the middle of planning some task when the game was saved, information it would lose under the current system.

#1090 fixed [PATCH] Improve load game UI mimo historic_bruno
Description

Currently when loading a saved game, it shows a list with timestamp and map name for each game. I would like to see at minimum:

  • Timestamp
  • Map name
  • User's description of the game
  • Players
    • Name / player number
    • Civ
    • Status (defeated/active)
  • Elapsed time

Possible enhancements:

  • Small screenshot
  • Game version; mod(s) used

It doesn't all have to be shown on one line, but rather have a common UI panel to display details for the currently selected game.

#1091 fixed Using Windows SDL libs results in manifest problem ben historic_bruno
Description

While working on #935, I noticed the game wouldn't start due to an "application configuration" error after disabling wsdl. It turns out the prebuilt SDL static libs have a different VC80 manifest dependency (8.0.50727.762) than the rest of the game, this results in multiple VC80.CRT entries in the embedded manifest and the error. So the SDL libs should be rebuilt with VC 8.0.50727.4053, which is VC++ 2005 SP 1 with the July 2009 security update applied. Unless there's some other way of solving this :)

#1092 fixed Crash saving games in debug-mode: Compartment mismatch Yves Yves
Description

When saving a game in debug-mode it crashes. Apparently the reason is that SavedGames::Save tries calling "SetProperty" with a value returned by the GUI's scriptinterface using it's own instance of scriptinterface (simulation.GetScriptInterface()).

simulation.GetScriptInterface().SetProperty(metadata.get(), "gui", gui->GetSavedGameData());

Each scriptinterface uses its own Spidermonkey runtime with an own compartment. the Value returned by gui->GetSavedGameData() "contains" another compartment than the one contained in the scriptinterface object of simulation. Spidermonkey checks if they match and raises an exception in debug mode because they don't.

In release mode everything seems to work fine, but there are probably some hidden problems there too because the compartments don't match either.

According to the Spidermonkey documentation objects of one compartment can't be used in another one by default, but there seem to be ways to interchange objects between compartments. I've started looking into spidermonkey a few hours ago, so I don't yet fully understand it. I'll need a bit more time before I know more details and what an appropriate solution would be.

#1093 fixed Create multiple instances of WP Brian Stempin Brian Stempin
Description

We need to create multiple instances of WordPress so that teams can work without fear of accidentally stepping on another team's toes. We need the following installations:

Platform dev Content Skinning/Theme work

plus an additional installation for bringing completed parts of the 3 dev instances together.

#1094 fixed Move current WP installation in with the others Brian Stempin Brian Stempin
Description

The database is full of stuff already. Instead of cluttering it with additional DBs, it would be nice if the current WP installation would move into the development database.

#1095 fixed Identify and install WP plugins Brian Stempin Brian Stempin
Description

The skinning and content folks will need some plugins to do some of their jobs, so plugin installation and testing needs to start. Once installed, others will need to verify that they work as expected and then get those plugins installed into their regions.

#1096 fixed Clean out DB Jan Middelkoop Brian Stempin
Description

Our DB has a lot of cruft in it. Cleaning it out makes DB development easier and saves us some much-needed disk space.

#1097 fixed Clean out the web server's file system Jan Middelkoop Brian Stempin
Description

Our web server has several directories that have fallen out of use and take up space. Some of them are past attempts at creating a new website. Some of them are of unknown origin. Cleaning them out would save space and make site development easier.

#1098 fixed Garrisoned units heal instantly Jonathan Waller
Description

If you garrison and eject a unit it will come out with full health, they should heal gradually over time instead.

#1099 fixed Configure and eval the Musopress Discography WP plugin gerbilOFdoom Brian Stempin
Description

This plugin is for Bandcamp integration. It's installed and needs to be set up and demo-ed.

#1100 fixed Configure and eval the WPBandcamp plugin gerbilOFdoom Brian Stempin
Description

The WPBandcamp plugin has been installed on our plugin-dev WP instance. It needs to be configured and demo-ed.

#1101 fixed Configure and eval the TubePress plugin Brian Stempin Brian Stempin
Description

The TubePress plugin was installed in the plugin-dev WP instance. It needs to be configured and evaluated.

#1102 fixed Configure and eval the NextGEN plugin Brian Stempin Brian Stempin
Description

The NextGEN gallery plugin was installed in the plugin-dev WP instance. It needs to be set up an eval-ed.

#1103 fixed Configure and eval the Google Analytics plugin Geek337 Brian Stempin
Description

This plugin was installed in our plugin-dev WP instance. It needs to be configured and evaluated.

#1106 fixed Repair permission issues with the WP installs Brian Stempin Brian Stempin
Description

File due to: http://www.wildfiregames.com/forum/index.php?showtopic=15524&view=findpost&p=232300

When WP was installed, write permissions weren't given to any of the subdirs. Some of these directories need write permissions in order to have files uploaded, etc. All instances within /0adwebdev must be repaired.

#1107 fixed Identify, install, and eval a few syntax highlighting plugins gerbilOFdoom Brian Stempin
Description

Filed due to: http://www.wildfiregames.com/forum/index.php?showtopic=15524&view=findpost&p=232300

If we're going to have a dev blog, then we definitely need a nice way to show code snippets. I'd like to install a few plugins, let people play with them, and then settle on one.

#1109 fixed [PATCH] Atlas Enhancement: Map re-sizing position Stan michael
Description

In Atlas, I want to be able to choose from where to re-size a map--corners or center.

Attached image may make it clearer.

#1111 fixed [PATCH] aoe3ed - Support WxWidgets 2.9 for ArchiveViewer and FileConverter Yves
Description

I've discussed it with Philip and even though we've decided to remove those components from the repository, I'm uploading the Patch here. It's tested on Ubuntu with wxWidgets 2.8 and on Snow Leopard with wxWidgets 2.9. Maybe someone can use it sometime...

1 2 3 4 5 6
Batch Modify
Note: See TracBatchModify for help on using batch modify.
Note: See TracQuery for help on using queries.