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
#336 invalid Land Ram - Ramming Andy Matt Sherman
Description

Land Ram - Ramming SDD #288

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

#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

#4303 fixed Entity LimitChangers not working correctly Silier elexis
Description

In the attached replay with r18889 I managed to produce 7 Juggernaut ships, despite the limit should be 5.

The GUI only offers the option to produce a new ship only briefly and disabled the button after one or few turns.

#4881 fixed Start Mods button only works as intended when saving the mods Silier elexis
Description

The mod selection screen has a button to save the mods and one to start the mods.

So the user might assume that the mods could be launched without saving the configuration too if theere is no dialog asking for the changes to be saved before 'starting' them.

The code also looks like it intends to launch the selected mods without saving:

function startMods()
{
	// always sort mods before starting
	sortMods();
	Engine.SetMods(["mod"].concat(g_modsEnabled));
	Engine.RestartEngine();
}

But it doesn't actually work, tested on svn, a22, a21 and a19 (while confirming that the mod attempted to start can be started after saving).

That RestartEngine call goes straight to restart_engine() of main.cpp. It sets quit to true which means the frame rendering infinite loop in the main thread is left. restart had been set to true which means that the same process is going to reinitialize everything. So it ought to be supported to restart without saving.

RunGameOrAtlas

#5109 fixed Tech modified cost wrong in observermode / Team bonus not visible if Observer item is selected Silier elexis
Description

The iberian team bonus is skirmisher cost 40 instead of 50 wood. But in Observermode it depends on the selected perspective whether it is displayed correctly in the tooltip.

Reproduce:

  1. Gamesetup:
    1.a. 3 players
    1.b. civs: Iber, Gaul, Anything
    1.c. teams: 112
    1.d. Set all slots to unassigned, so you start as an observer
  1. Session:
    2.a. Start the match
    2.b. Select the Gaul CC and notice it says 50 wood when it should be 40
    2.c. Select the Gaul player perspective and notice it says 40 wood

Reproducible with a22 and a23.

#5119 fixed Enforce formation required member count Silier temple
Description

Formations require a certain number of members to form, but that isn't enforced when removing members so we can end up with a formation consisting of a single unit, for example.

(Some care should be taken with twin formations.)

#5282 fixed Petra serialization error when ceasefire ends Silier elexis
Description

As reported by DangerousI on https://wildfiregames.com/forum/index.php?/topic/24727-javascript-error-petrabot-typeerror/&tab=comments#comment-360274

In multiplayermode there occurs this error when ceasefire runs out:

ERROR: JavaScript error: simulation/ai/petra/_petrabot.js line 140
TypeError: savedEvents[key][ i] is undefined 
#5374 fixed Differentiating building structure voices from repairing it Silier Stan
Description

Currently when ordering units to build something they use the repair sound instead of the building sound. That is because there is no building state, only repairing ones.

Basically, when units are building a structure, they are repairing it.

It would be nice to have two different sounds for it. The female template has this line:

      <order_build>voice/{lang}/civ/civ_{gender}_build.xml</order_build>

We currently have the sounds for Latin but not Greek, they would need to be added as well.

#5417 fixed Add GameDataPaths URL to Windows crash error message Silier Silier
Description

A lot of users which report error, do not attache log files. Mostly they do after they are asked and are provided with link to datapaths page.

So in the displayed error message should be said where that files are located or provided link to web page with datapaths.

Also it should be considered to make that filenames bold for example to outstand from another text message.

#5459 fixed Bug: unverified mod makes 0 ad mod downloader unable to function. Silier nani
Description

Steps to reproduce:

1) Be a user in mod.io with an already verified and public mod.
2) Upload a new version of your mod but without verification.
3) Set that unverified mod as the current active release.
4) Go to 0ad mod downloader page and see as you get an "metadata_blob not decode as an object" error.
5) Make again (with mod.io) the verified mod the current active release to stop getting the error.

#5557 fixed Garrison pickup bug. Silier Freagarach
Description

As discovered in Phab:D665, when one tasks unit A to garrison ship 1, ship 1 tries to pickup unit A. When tasking unit A to garrison ship 2 before it has reached ship 1, ship 1 still follows unit A and ship 2 does not try to pickup unit A. This is caused by unit A not changing states thus not going through "leave" (thus not resetting "this.pickup").

#5588 fixed Unit max health not changing when promoted. Silier Freagarach
Description

In SVN 22890, when promoting a unit with the cheat from the dev. menu the max health is not changed. This could be not limited to only health but also to other components that cache values and only use "OnValueModification" to refresh them.

#5589 fixed PETRA.getLandAccess gamePosToMapPos p is undefined common-api/map-module.js Silier Freagarach
Description

SVN 22882. At turn 1092 an error occurred:

ERROR: JavaScript error: simulation/ai/common-api/map-module.js line 44
TypeError: p is undefined 

http://irclogs.wildfiregames.com/2019-09/2019-09-10-QuakeNet-%230ad-dev.log

#5610 fixed Unit doesn't attack enemies nearby after killing one Silier elexis
Description

In this replay, the hero unit that attacked the passive gatherers of the enemy stopped attacking units that were just in front of him.

Sometimes it was idling until receiving another order, other times it decided to go for capturing the CC (probably hit by an arrow).

#5626 fixed UnitMotionFlying IsMoveRequested error Silier Stan
Description

Steps to reproduce:

  • Open Atlas.
  • Open a map, for ex Temperate Roadway (2)
  • Place a plane assigned to player 1
  • Run the simulation, the plane will try to attack enemies, and warnings will pop up.
    Error calling component script function IsMoveRequested

Expected behavior:

  • Warnings should not appear
#5635 fixed Crash in non-GLSL mode when gpuskinning is enabled Silier Stan
Description

If one adds in their user.cfg the line

    gpuskinning = "true"

and then tries to disable GLSL the game will crash.

That's because ARB does not support VertexAttribPointer. One lazy solution is to check for that in the RenderModel() and PrepareModelDef() functions in InstancingModelRenderer.cpp and anywhere else it's called.

Also one might not notice the lack of support because in ShaderProgram.cpp debug_warn() instead of LOGGERROR() are used so it doesn't show up in the interestinglog.html file. This could be fixed as well

#5656 fixed INDIVIDUAL.COMBAT.CHASING but idling Silier elexis
Description

In this replay with r23292, there are two skirmisher cavalry units of mine that received queued orders to hunt deer.

But instead of going there, they stood around in the idle animation in INDIVIDUAL.COMBAT.CHASING state.

When they received a non-queued order, the state was reset.

Replay at Phab:F1188774

#5666 fixed CCmpRangeManager: No owners in query for entity 0 Silier elexis
Description

As reported on Phab:rP23012, the following error happens quite often:

"CCmpRangeManager: No owners in query for entity 0"

The error message is spammed very frequently, probably whenever some animal or gaia soldier wants to attack, so it disrupts gameplay and IMO must be fixed for the release.

#5668 fixed Missing cmpTechnologyManager check in Commands.js Silier Silier
Description

In components/helpers/Commands.js when upgrade command is passed, there is missing check for cmpTechnologyManager existence, which does not exist for all players (currently gaia player, but can be more).

This can lead to error of undefined component and should be fixed. Putting at lower priority, because GUI is patched against this problem.

#5675 fixed " and undefined have won the game" victory chat message when ceasefire ended Silier elexis
Description

When starting a game with exactly one player that instantly wins the game (consequest victory) and after that ceasefire running out will trigger first the correct victory chat message, then a broken and undefined have won the game chat message, initiated from the ceasefiremanager.

The bug could be reproduced on a23b.

#5712 fixed Capture points not initialised properly. Silier Freagarach
Description

I noticed something weird with walls. If you build one piece, then upgrade to the next phase, its CP go from 1200 to 1320 for Athens. But new wall pieces are not affected. For Britons the CP change from 1200 to 960.

I traced the issue to the capture points not being initialised properly. this.maxCp is used without value modifications on init, but when a OnValueModification message is received modifications are applied.

#5749 fixed Upgrading a tower reset its upgrade queue Silier serveurix
Description

Try to upgrade a watch tower to guard tower and then start the "sentries" upgrade so that the tower turns into a guard tower before "sentries" finishes. Sentries will be cancelled as the tower becomes a guard tower and you will have to start it again.

#5761 fixed Units refuse to enter formation Silier elexis
Description

In this r23670 replay units received a formation order, then move orders. Then new units were trained, selected along with the existing formation. The GUI said they were not in formation, clicking on the formation did not make them enter formation. This happens at minute 1 in the replay.

I didn't have time to isolate the bug, hopefully it's a user error.

#5773 duplicate Entrenched army camp (Roman) can be placed but not built Silier Andy Alt
Description

Noticed this in 2 separate games in the last 7 days, on 0.0.23 (21946P-release). The Roman entrenched army camp was placed, but hp never exceeds 1. I've attached 2 screenshots and the 2 replays. For the first replay, the bug happens around 1h:04m, in the middle of the map, near a completed entrenched army camp; for the second replay, around 42m.

Other than the replay, I don't know how to reproduce this.

#5785 fixed [svn]When re-hosting, map preview shows incorrect biome Silier Andy Alt
Description

Hosted a game, set map to Mainland. Changed biome to Autumn, map preview correct at that point. Played game. Ended game. Rehosted with same settings, so the biome was still set to Autumn, but preview showed Temperate biome. Reproducible.

On the svn version, from GitHub, at commit a176d92

I hosted through the svn lobby. The incorrect map preview also appeared to the player connected to me.

#5824 fixed When one deletes file in replays, compatible filter ticks itself Silier Silier
#5844 fixed TypeError: g_Settings.PlayerDefaults[(this.playerIndex + 1)] is undefined Silier SOFe
Description

Selecting the custom scenario as attached in the setup screen leads to the attached error.

There is no visible problem with scenario editor.

#5850 fixed Security issue: GUI file access, protected config values, and mods Silier wraitii
Description

As discussed on IRC.

We have protected config entries that can't be used by JS, such as userreport.id. However, the gui can just `Engine.ReadFile('config/user.cfg') and get that data anyways.

Further, WriteJSONFile can overwrite any file.

These all seem like problems, particularly since we do prevent some access in the simulation ReadJSONFile for example.

#5864 fixed Units with large passability fail to reach goal with minimum range. Silier Silier
Description

Steps to cleanest reproduction.

Give ranged unit without packing state large passability.
Give it minumum range 26, max range 80.
Move it close to target.
Order it to attack target.

Unit will move out of minimum range, but unitmotion does not send success message.
Depending on if target moved, it sends likelyfailure or obstructed messages, resulting on following with attackmove on likelyfailure or being stuck in approaching state forever.

#5948 fixed AI is not researching free (cost or time) technologies Silier Silier
#5949 fixed Show indicator in list of matches in lobby that match requires password Silier Silier
Description

rP24728 allowed hosts to require password from clients before joining the match. It would be nice if there would be some indicator before the match name.

#5966 fixed Cheering problems Silier wraitii
Description

See https://code.wildfiregames.com/rP24034#48390

#6044 fixed Need to check for mods compatibility in game start Silier Silier
Description

Need to check for mods compatibility in game start, because when changing game versions it crashes games and produces errors when mods are set to be always enabled.

#6053 fixed Gray out incompatible mods in the mod selector Silier Stan
Description

When you have a lot of mods it becomes quickly impossible to see eaily which are compatible with your version and which aren't.

It would be nice to:
1) Gray out mods that are incompatible like mp games and replays.
2) Being able to filter only compatible mods.

#6119 fixed Incompatible replays can be viewed via 'Summary' screen Silier Langbart
Description

There seems to be a bug with Replay Games screen, in the GIF below I had no mods enabled and wanted to start a replay that required the "Autociv" mod, I couldn't start it by double clicking or using the GUI Start Replay button, but clicking Summary and then Watch Replay it worked.

The bug can be reproduced for A23b, A24b and the current SVN version [25124].

In relation to this problem, Angen also wrote on IRC 0ad-dev (26/mar/21):

[...] also I am not sure if even viewing summary should be possible as mod could remove classes or resources from statistics

#6141 fixed UnitMotionFlying error Silier Stan
Description
ERROR: Error in timer on entity 14157, IID7, function Attack: 
TypeError: cmpTargetUnitMotion.EstimateFuturePosition is not a function 
Attack.prototype.PerformAttack@simulation/components/Attack.js:635:38 
Attack.prototype.Attack@simulation/components/Attack.js:539:8 
Timer.prototype.OnUpdate@simulation/components/Timer.js:139:44 

Steps to reproduce:

  • Make a plane kill a unit
#6145 fixed Can't see unselectable civilizations names in Gamesetup. Silier Stan
Description

Currently one can set civs to not be selectable in gamesetup, e.g a NPC civ, however, if you were to force that civ in the map it would display unknown

https://i.imgur.com/VHQF5LB.png

In the example above the mod has a NPC civ called Zuna, which is not selectable and not playable and also because of the bug not visible and marked as Unknown.

introduced by: Phab:rP23374

Relevant files

binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/PerPlayer/Dropdowns/PlayerCiv.js
binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/GameSettingControlDropdown.js
#6153 fixed Remove un-loked icon in lobby Silier yelihor871
Description

The unlocked lobby icon makes knowing if games are locked a bit difficult. It may not be that big of a deal for the normal users but for people with lower vision, this is an accessibility issue. I have good vision but for example, when I am going through open games, I often also click on the restricted ones because the visibility of system status is poor on these lock icons.

This

https://i.ibb.co/rsD61c4/Screenshot-from-2021-04-17-12-35-17.png

Should be something like this

https://i.ibb.co/xSJpPBC/Screenshot-from-2021-04-17-12-35-17.png

#6236 fixed Disabling 'background pause' doesnt work Silier Grapjas
Description

The game pauses after alt tabbing out of the game when the setting is disabled.

#6263 fixed UnitAI formationcotroller is undefined Silier Silier
Description

https://wildfiregames.com/forum/topic/41264-alpha-25-pre-releaserelease-candidate-build-testing/?do=findComment&comment=444687

ERROR: JavaScript error: simulation/components/UnitAI.js line 258 cmpControllerAI is null Order.FormationWalk@simulation/components/UnitAI.js:258:8

From replay by Freagarach:

ERROR: JavaScript error: simulation/components/UnitAI.js line 258 cmpControllerAI is null

Order.FormationWalk@simulation/components/UnitAI.js:258:8
FSM.prototype.ProcessMessage@globalscripts/FSM.js:265:17
UnitAI.prototype.FinishOrder@simulation/components/UnitAI.js:3824:26
Order.Attack@simulation/components/UnitAI.js:402:16
FSM.prototype.ProcessMessage@globalscripts/FSM.js:265:17
UnitAI.prototype.FinishOrder@simulation/components/UnitAI.js:3824:26
Order.Attack@simulation/components/UnitAI.js:402:16
FSM.prototype.ProcessMessage@globalscripts/FSM.js:265:17
UnitAI.prototype.FinishOrder@simulation/components/UnitAI.js:3824:26
Order.Attack@simulation/components/UnitAI.js:402:16
FSM.prototype.ProcessMessage@globalscripts/FSM.js:265:17
UnitAI.prototype.FinishOrder@simulation/components/UnitAI.js:3824:26
Order.Attack@simulation/components/UnitAI.js:402:16
FSM.prototype.ProcessMessage@globalscripts/FSM.js:265:17
UnitAI.prototype.FinishOrder@simulation/components/UnitAI.js:3824:26
Order.Attack@simulation/components/UnitAI.js:402:16
FSM.prototype.ProcessMessage@globalscripts/FSM.js:265:17
UnitAI.prototype.FinishOrder@simulation/components/UnitAI.js:3824:26
Order.Attack@simulation/components/UnitAI.js:402:16
FSM.prototype.ProcessMessage@globalscripts/FSM.js:265:17
UnitAI.prototype.FinishOrder@simulation/components/UnitAI.js:3824:26
Order.Attack@simulation/components/UnitAI.js:402:16
FSM.prototype.ProcessMessage@globalscripts/FSM.js:265:17
UnitAI.prototype.FinishOrder@simulation/components/UnitAI.js:3824:26
Order.Attack@simulation/components/UnitAI.js:402:16
FSM.prototype.ProcessMessage@globalscripts/FSM.js:265:17
UnitAI.prototype.FinishOrder@simulation/components/UnitAI.js:3824:26
Order.Attack@simulation/components/UnitAI.js:402:16
FSM.prototype.ProcessMessage@globalscripts/FSM.js:265:17 UnitAI.prototype.FinishOrder@simulation/components/UnitAI.js:3824:26
Order.Attack@simulation/components/UnitAI.js:402:1
FSM.prototype.ProcessMessage@globalscripts/FSM.js:265:17
UnitAI.prototype.FinishOrder@simulation/components/UnitAI.js:3824:26
enter@simulation/components/UnitAI.js:2196:15
FSM.prototype.SwitchToNextState@globalscripts/FSM.js:366:14
FSM.prototype.ProcessMessage@globalscripts/FSM.js:274:8
UnitAI.prototype.ProcessMessage@simulation/components/UnitAI.js:4277:15
Attack.prototype.StopAttacking@simulation/components/Attack.js:526:14
Resistance.prototype.OnOwnershipChanged@simulation/components/Resistance.js:181:62

ERROR: Script message handler OnOwnershipChanged failed
#6288 fixed Non-visual replay broken Silier Langbart
Description

Starting a commands.txt file non-visually, with the latest SVN [25852] version, results in this error warning:

picus@Picus 0ad % binaries/system/pyrogenesis -mods=public -replay=/Users/picus/Library/Application\ Support/0ad/replays/0.0.25/Valihrant\ vs\ Lorenz/commands.txt         
WARNING: Incompatible replay mods detected.
The mods of the replay are:
public (0.0.25)

These mods are enabled:

ERROR: CVFSFile: file simulation/data/pathfinder.rng couldn't be opened (vfs_load: -110100)
ERROR: CXeromyces: failed adding validator for 'simulation/data/pathfinder.rng'
ERROR: CCacheLoader failed to find archived or source file for: "simulation/data/pathfinder.xml"
ERROR: CVFSFile: file simulation/data/territorymanager.rng couldn't be opened (vfs_load: -110100)
ERROR: CXeromyces: failed adding validator for 'simulation/data/territorymanager.rng'
ERROR: CCacheLoader failed to find archived or source file for: "simulation/data/territorymanager.xml"
ERROR: CCacheLoader failed to find archived or source file for: "simulation/data/pathfinder.xml"
ERROR: File 'maps/random/continent.js' does not exist
ERROR: CMapGeneratorWorker::Run: Failed to load RMS 'maps/random/continent.js'
libc++abi.dylib: terminating with uncaught exception of type PSERROR_Game_World_MapLoadFailed
zsh: abort      binaries/system/pyrogenesis -mods=public 
picus@Picus 0ad %

The problem can be noticed for the first time with the changeset [25850].

PS: I have tried all three combinations (Phab:D4220, Phab:D4222, and d4220&d4222), but none have fixed the non-visual replay issue.

#6312 fixed The map size is displayed incorrectly when changing Silier Langbart
Description

In the following GIF I change the Map Size to Giant but it stays the same, only when I switch to another map and back again it shows the correct size.

The bug can be noticed for the first time with changeset [25077].
The bug was first reported by maroder. I create the ticket only so that the error is not forgotten.

The

#6392 fixed Sorting by "has password" in lobby game list does nothing. Silier nani
Description

Sorting by "has password" in lobby game list does nothing.

#6429 fixed [BUG] Barter&Trade button causes errors Silier Langbart
Description

Error message appear when using the Barter&Trade button.

to reproduce

  • Watch a replay
  • Select a player with the playerviewcontrol
  • Press the Barter&Trade button
  • Select observer mode via the playerviewcontrol

(the issue is not reproducible with the Diplomacy button)

error codes

0 A.D. (0.0.26) Main log (warnings and errors only)
ERROR: JavaScript error: gui/session/trade/TradeDialogBarterPanel.js line 27 Script value conversion check failed: v.isBoolean() (got type undefined) update@gui/session/trade/TradeDialogBarterPanel.js:27:3 updatePanels@gui/session/trade/TradeDialog.js:67:20 updateIfOpen@gui/session/trade/TradeDialog.js:62:9 onSimulationUpdate@gui/session/session.js:675:3 resetTemplates@gui/session/session.js:448:2 onSelectionChange@gui/session/top_panel/PlayerViewControl.js:119:4

ERROR: Errors executing script event "SelectionChange"

ERROR: JavaScript error: gui/session/trade/TradeDialogBarterPanel.js line 27 JS_ReportError was called update@gui/session/trade/TradeDialogBarterPanel.js:27:3 updatePanels@gui/session/trade/TradeDialog.js:67:20 updateIfOpen@gui/session/trade/TradeDialog.js:62:9 onSimulationUpdate@gui/session/session.js:675:3 resetTemplates@gui/session/session.js:448:2 onSelectionChange@gui/session/top_panel/PlayerViewControl.js:119:4

ERROR: JavaScript error: gui/session/trade/TradeDialogBarterPanel.js line 27 Script value conversion check failed: v.isBoolean() (got type undefined) update@gui/session/trade/TradeDialogBarterPanel.js:27:3 updatePanels@gui/session/trade/TradeDialog.js:67:20 updateIfOpen@gui/session/trade/TradeDialog.js:62:9 onTick@gui/session/session.js:631:4 __eventhandler52 (Tick)@session Tick:1:1

ERROR: Errors executing script event "Tick"
...

reproducible

The issue is reproducible for A25b [25860] , but not for A24b [24937].

bisect

The issue can be noticed for the first time with [25365].

solution(1)

Simply adding || false to Line 27 in TradeDialogBarterPanel.js

Line 
20 update()
21 {
22 let playerState = GetSimState().players[g_ViewedPlayer];
23 let canBarter = playerState && playerState.canBarter;
24
25 this.barterButtonManager.setViewedPlayer(g_ViewedPlayer);
26 this.barterButtonManager.update();
27 this.barterNoMarketsMessage.hidden = canBarter *|| false*;
28 this.barterResources.hidden = !canBarter;
29 this.barterHelp.hidden = !canBarter;
30 this.barterHelp.tooltip = sprintf(
31 translate(this.InstructionsTooltip), {
32 "quantity": this.barterButtonManager.getSelectedButton().BarterResourceSellQuantity,
33 "hotkey": colorizeHotkey("%(hotkey)s", "session.massbarter"),
34 "multiplier": this.barterButtonManager.getSelectedButton().Multiplier
35 });
36 }
37};
#6442 fixed Crash when joining local game on Hostname Silier Asger
Description

When I try to join Freagarach his game in the local network using Hostname it just crashes the game. When we try it using the IP it works fine

#6509 fixed Numbering of the control groups Silier Langbart
Description

Youtuber Alistair Findlay reports an issue on the current development version.

issue

Watch video ~18min:10sec

Control group should not be from 0-9, but rather from 1-10.

solution

Silier has already made a patch. It is better to also make a ticket to increase the chances that it will not be forgotten to be added to the game.

related tickets

#773

#6511 fixed Pressing the Enter key should close the chat if nothing is typed. Silier Langbart
Description

Youtuber Alistair Findlay reports an inconvenience on the current development version.

issue

Watch the video ~29min:50sec
When opening the chat window and nothing has been typed into the chat field pressing the Enter key should close the window.

elexis

[23:51:00] elexis 29:47 should be simple
#5913 fixed Hide ip and port from users until they want to join, add optional password Angen user1 Stan
Description

The lobby currently displays the IPs of the users. this should not happen.

#2807 fixed [PATCH] Check the list of enabled mods when running a replay from the command line Arno Hemelhof Itms
Description

Right now the replay mode fails when no mod is specified, we should check that and inform the user about what is happening.

Maybe this is part of a more general task, which is including mod data in commands.txt and other logging stuff.

We can use the list of mods in the commands.txt to make sure everything is fine.

#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

#452 fixed Extended Latin characters show up as question marks in diamonds on loading screen Art Department Aviv
#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.

#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

#667 wontfix Fields constructed using a hammer Art Department Сергей
#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).

#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.

#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.

#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.

#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.

#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"
#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)
#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

#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.

#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).

#1133 invalid Add missing mines Art Department O.Davoodi
Description

Here is a list of missing mines:

  • Large metal and stone mines for alpine
  • All mines for polar
  • All mines for steppe
  • Small metal mine and large stone mine for savannah
  • It is also better to change the texture for small stone mine of tropic
#1160 fixed WP Theming - Menu header backgrounds Art Department Brian Stempin
Description

We need the image for the background on the menu bar underneath the header image. In order to make things more maintainable, it'd be nice if we were told which color to make the div and we were supplied with a texture PNG to layer over top. That way, we could easily change parts of our theme without requesting new art.

#1161 fixed WP Theming - Menu item mouse-over arg Art Department Brian Stempin
Description

We need the art work for what should appear when a user mouses over a menu item. It would be nice if we were supplied with a texture that we could apply a solid color underneath via CSS, allowing us to change colors without requesting new art.

#1162 fixed WP Theming - Arrow images for image carrousel Art Department Brian Stempin
Description

The image carrousel in our prototype has some fancy-dancy arrows used to scroll through the images. We need art for these arrows so that we can appropriately style the gallery on the front page.

#13 fixed [PATCH] Formations Badmadblacksad Stuart Walpole
Description
#1385 fixed Implement wall gates Badmadblacksad- vts
Description

The current wall system as implemented in #786/r11760 does not yet have a way to add gates to an existing wall. It should be possible to select a single long wall segment and click a UI button to transform it into a gate, at a certain cost.

From an implementation point of view, this is likely to require support for multiple obstruction shapes per entity. Specifically, for the gates to operate properly, we'll need a way for a part of the obstruction box corresponding to the physical gate part in the model to be an independent shape, on which we can toggle the BLOCK_MOVEMENT flag to allow units through while open, or block them while closed.

#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.
#1471 duplicate bug with fraps BazonTSK BazonTSK
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 (No error reported here) OS error = 0 (no error code was set)

#1475 duplicate Bot attack building BazonTSK BazonTSK
Description

In the attack bot on any building can be one unit to kill all enemy units. The bot does not attack him.

#3512 fixed [PATCH] Send a phase up notification to your teammates Bichtiades Stan
Description

Currently only Petra does this. It would be nice that your allies gets notified you phase up, especially since shared vision is now a tech and not automatic.

#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

#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.

#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.

#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)

#688 fixed New Loading Screen Brian, Michael Kieran P
Description

Implement new loading screen to match mockups.

#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).

#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

#3000 fixed [PATCH] GUI: Hero icon area in upper left limited to one hero at a time Stephen Imhoff brian
Description

The hero icon area in the upper left of the screen should provide an icon for each hero the player has. In normal gameplay only a single hero can be trained at a time. However, since scenarios may want to allow multiple heroes, we should include all the heroes that a player has in the hero area (with some reasonable limit, like 10).

An example scenario with multiple heroes is the Gaul Sandbox Demo map.

#3824 fixed [PATCH] WxWidgets 3.1 : Horizontal alignment flags are ignored in horizontal sizers Stephen Imhoff spongebrot
Description

I just compiled WxWidgets 3.1 to use with Atlas editor. When trying to run Atlas (same from Main-Menu or the .bat file) i get an assertion error: wxBoxSizer::DoInsert(): Horizontal alignment flags are ignored in horizontal sizers

[01]wxBoxSizer::DoInsert [02]PlayerSettingsControl::PlayerSettingsControl \source\tools\atlasui\scenarioeditor\sections\player\player.cpp:563

When i continue execution Atlas still starts and also the Player control is rendered correctly.

#3826 fixed [PATCH] Improve FindIdleUnits of GUIInterface Stephen Imhoff elexis
Description

hasIdleWorker of session.js (see r17674) calls the GuiInterface.js function FindIdleUnits for every type of g_WorkerTypes. Instead it should rather support the passing of the whole array. FindIdleUnits itself should not loop twice over playerEntities but only once.

#2030 fixed [PATCH] "Save As" Function Crynux Laurens Bosman
Description

Hello Wildfire

The game should have a "Save As" function added to the game. As of right now this function is missing. You are only able to save the game as a "Quick Save" which gives the saved file a name according to the date and time of the save and the map played on. So if you have multiple games on the same map it is hard to find the game you want to resume.

Hopefully this will be implemented soon.

Thanks L. Bosman

#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.

#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’
#5942 duplicate Improve physics realism DanW58 DanW58
Description

Rotational speed and acceleration are too high for the bigger and heavier units, such as the high tower siege engine and all ships. Specially ships, which spin around on a dime. This contrasts with the fact that their linear motion is quite slow. Together, these contradicting features further contradict real world water dynamics of ship hulls, which can pick up some linear speed, but are almost incapable of turning in place; in fact, they can only do so by having small ships push them around. Feels as if the AI is directly dictating the facing direction without any physical constraints. Physics is my thing; I could probably help with this, with some pointers as to where to find the relevant code files.

#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

#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.

#4471 duplicate Unknown Error When Trying To Create Account For Multiplayer DeathlyDara DeathlyDara
Description

As soon as I click multiplayer and try create a new account, I get an unknown error after clicking create account. I have a unique password and a unique Username.

Please help as my friend created his own account on his laptop right next to me, with no errors.

#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.
#1173 fixed [PATCH] Make rally points work for trade Deiz Jonathan Waller
Description

When setting the rally point for a market on another market, any trained traders should automatically start a trade route between the two markets.

#1187 fixed [PATCH] Hotkey to display all health bars Deiz historic_bruno
Description

A hotkey pressed to show health bars for all units on screen at once. This would be handy during battles so you could quickly see the health of all units without needing to select them. The hotkey could be either a toggle or active only when held down.

Related and perhaps unnecessary feature: show health of units with recently changed hitpoints, i.e. those being healed or damaged. If implemented, it should be a config option and separate from the "show all" feature.

#1291 fixed [PATCH] Menu doesn't disappear automatically Deiz Aleksey
Description

Menu doesn't disappear automatically: after you open it, even if you click anywhere on the map, it will not turn off.

#1319 fixed "Are you sure" dialog for deleting entities should accept a return keypress to mean "yes" Deiz vts
Description

The "are you sure?" dialog for deleting entities should accept a return keypress to mean "yes". It's annoying to have to reach for your mouse and point and click "Yes" when you want to quickly delete an entity. Alternatively (or additionally), as proposed by Mythos_Ruler, we could also have another press of the Delete key to accept the dialog.

#1334 fixed [PATCH] Make allies visible on map and minimap Deiz rdxi
Description

Each player still maintains their own LoS calculations. But when the game renders the LoS onscreen, combine Ally LoS (that is, LoS of all players on the same team) at render time to give one big LoS for same team members.

Eventually LoS techs will be implemented. So keep that in mind when implementing this (make sure any LoS tech would only affect the current players LoS - it shouldn't expand the LoS of allies).

#1355 fixed [PATCH] Hardware cursors should be disabled before SDL shutdown Deiz historic_bruno
Description

Since #748, I get this error on Linux when shutting down the game:

TIMER| shutdown SDL: 3.27935 ms
TIMER| shutdown UserReporter: 308.556 us
TIMER| shutdown ScriptingHost: 1.77063 ms
TIMER| shutdown ConfigDB: 0.207 us
SDL_GetWMInfo is not implemented on this platform
TIMER| resource modules: 2.98616 ms

We shouldn't be using SDL_* functions after it's shut down, instead we should free and disable hardware cursors before SDL.

Here's the call stack:

#0  get_wminfo (wminfo=...) at ../../../source/lib/sysdep/os/unix/x/x.cpp:422
        ret = 0
#1  0x0000000000c3b658 in sys_cursor_free (cursor=0x23e07e0)
    at ../../../source/lib/sysdep/os/unix/x/x.cpp:504
        impl = 0x23e07e0
        wminfo = {version = {major = 1 '\001', minor = 2 '\002', 
            patch = 14 '\016'}, subsystem = SDL_SYSWM_X11, info = {x11 = {
              display = 0x8bf2b8, window = 20, lock_func = 0x23cefb0, 
              unlock_func = 0xd34ad4, fswindow = 12841884, 
              wmwindow = 140737184310608, gfxdisplay = 0x1112990}}}
#2  0x0000000000be5b7d in Cursor_dtor (c=0x7fffede0a850)
    at ../../../source/lib/res/graphics/cursor.cpp:187
        __func__ = "Cursor_dtor"
#3  0x0000000000bddba0 in h_free_hd (hd=0x7fffede0a810)
    at ../../../source/lib/res/h_mgr.cpp:561
        vtbl = 0x110b240
#4  0x0000000000bde5b6 in Shutdown () at ../../../source/lib/res/h_mgr.cpp:784
        hd = 0x7fffede0a810
        s = {<No data fields>}
#5  0x0000000000bb88a4 in ModuleShutdown (initState=0x11129e8, 
    shutdown=0xbde53c <Shutdown()>) at ../../../source/lib/module_init.cpp:71
        latchedInitState = 17947872
        __func__ = "ModuleShutdown"
#6  0x0000000000bde696 in h_mgr_shutdown ()
    at ../../../source/lib/res/h_mgr.cpp:798
No locals.
#7  0x000000000090ee1a in Shutdown ()
    at ../../../source/ps/GameSetup/GameSetup.cpp:699
        LINE_692_ = {m_t0 = 15.855938576, 
          m_description = 0xcc3fa8 L"resource modules"}
#8  0x00000000006fe6ae in RunGameOrAtlas (argc=1, argv=0x7fffffffe238)
    at ../../../source/main.cpp:527
        args = {
          m_Args = {<std::_Vector_base<std::pair<CStr8, CStr8>, std::allocator<std::pair<CStr8, CStr8> > >> = {
              _M_impl = {<std::allocator<std::pair<CStr8, CStr8> >> = {<__gnu_cxx::new_allocator<std::pair<CStr8, CStr8> >> = {<No data fields>}, <No data fields>}, _M_start = 0x0, _M_finish = 0x0, 
                _M_end_of_storage = 0x0}}, <No data fields>}, m_Arg0 = {
            path = {static npos = <optimized out>, 
              _M_dataplus = {<std::allocator<wchar_t>> = {<__gnu_cxx::new_allocator<wchar_t>> = {<No data fields>}, <No data fields>}, 
                _M_p = 0x111b7b8 L"/home/ben/0ad/binaries/system/pyrogenesis_dbg"}}, separator = 47 L'/'}}
        ran_atlas = false
        res = 1.0000000000000001e-09
#9  0x00000000006fe97c in main (argc=1, argv=0x7fffffffe238)
    at ../../../source/main.cpp:569
No locals.
#1365 fixed [PATCH] Always show hero selection rings Deiz historic_bruno
Description

To make heroes stand out more with the new selection rings, they should have a variation of their selection ring always shown (faded color or 50% alpha?). Because we might want this behavior for more than heroes, it seems better to make this a general property of the Selectable component rather than special casing heroes.

#1373 fixed Unit counter does not update when units are garrisoned Deiz frapell
Description

When you select a bunch of units, in the middle section of the bottom panel, you get the portrait of the unit with the number of units of that type. Let's call this "Unit count"

when you select a bunch of units, say 10, the "Unit count" correctly displays the number "10". If you now send those 10 units to gather in some tower (or anywhere else), 5 will enter the structure, but the "Unit count" still displays a 10, when, in fact you only have 5.

The only moment when the "Unit count" gets updated, is when you have only 1 unit left without gathering.

#1406 fixed Units walk over foundations waiting to be constructed Deiz fabio
Description

Friendly units should try to avoid walking over foundations. Otherwise they block the building from being built.

Savegame is attached, which is a good test case with a steady stream of trade units.

#1422 fixed [PATCH] Auto-gather all type of nearby treasures Deiz fabio
Description

When a unit receive the order to gather a treasure, after getting it, it will automatically only collects near treasures of the same type (food, stone or metal). It would be nice if it will also automatically collect all type of near treasures.

This was discussed here: http://www.wildfiregames.com/forum/index.php?showtopic=16000

#1431 fixed [PATCH] Technologies in process of research should show up along the side of the screen Deiz michael
Description

The icons of technologies currently being researched, along with green progress overlay, could show up along the side of the screen for visual quick-reference. Mouseover/hover can show a tooltip with the pertinent information. Queued items are not to be included--only those items in progress.

Possible enhancements include:

  • Include units being trained in this feature.
  • Click icon to center camera and select appropriate structure.
#1473 fixed Formation bug when separate units ordered to move to point between them Deiz BazonTSK
Description

Two units, separated by distance, both selected and tasked to meet in the middle, do not actually move to the selected point. They move a bit and then stop.

All can be seen on the video http://youtu.be/GfFFNdKFoPA

#1508 fixed [PATCH] Font loader incorrectly assumes 32bpp Deiz Deiz
Description

Last night I optipng'd a few font PNGs that I'd rendered for Brian. This lead to severe memory issues and apparently segfaults. 0 A.D. assumes that "rgba" fonts will be RGBA, although as they actually only contain grayscale plus alpha, any PNG optimization program will set the colour type to grayscale+alpha rather than RGBA.

Auto-detection for colour types is present, it just doesn't work properly on the 8bpp fonts because 8bpp is typically interpreted as grayscale, not alpha. However, all the other format assumptions that choose_fmt() makes are unambiguous: 16bpp is grayscale+alpha, 24bpp is RGB, 32bpp is RGBA.

My patch is quite trivial and I've confirmed it works for grayscale+alpha, RGB, and RGBA images.

#1511 fixed Workers will start building field foundations when the building they worked on is built Deiz wraitii
Description

Builders, when they become idle, will switch to any nearby foundation and start building it. While this is the intended behavior, it has the unfortunate side-effect of also working with farms: a builder may see an unbuilt farm and go build it... Turning him into a farmer when the farm is finished.

I find it inconvenient: one usually wants to return the builders to their original task/something else and one may "lose" units from sight.

I suggest changing the UnitAI behavior to only work with all nearby non-field foundations.

#1524 fixed [PATCH] GUI's right panel types can clash Deiz Deiz
Description

While the display of construction and training icons in the GUI seems to be mutually exclusive, trading icons can be shown over top of other icons, e.g. if your first selected entity is a trader and your selection also includes a builder.

The patch also fixes a few related usability issues: Technologies are now listed provided there's only one row of icons, and the first selected unit's right panel is never clobbered by subsequent units.

An example of the latter occurs when selecting one of the few units that produces other units, followed by a builder (resulting in the trainable units disappearing).

#1528 wontfix [PATCH] Implicit js->C++ type conversions are non-fatal Deiz Deiz
Description

Because js->C++ value conversion errors are non-fatal, Engine.SetSimRate() will attempt to set the sim rate to NaN if you pass it something that isn't a float.

This also includes no-argument cases, i.e. a literal "Engine.SetSimRate()", causing 0 A.D. to hang indefinitely. I've managed to fat-finger that particular line twice.

Trivial patch just checks using the isnan macro and prints an error if so.

#1529 fixed Walls can be constructed on top of existing walls Deiz gudo
Description

Steps to recreate:

*Build a wall segment long enough for a gate
*Turn said segment into a gate
*Attempt to build a wall over the gate (re-build the exact same segment)

*It is impossible to build other structures inside the gate.
*This will work regardles of wether or not the gate is locked.
*This will only work when you try to rebuild the exact same segment that you turned into a gate. (You cannot have a new wall bisect a gate)

#1530 fixed [PATCH] Load dialogue uses UTC instead of local time. Deiz Deiz
Description

Mozilla's documentation indicates that the regular date-related functions will always use local time.

Aside from very minor edge cases (displayed times shifting by an hour in DST locales, when DST starts or stops) I think this is a no-brainer usability improvement.

#1535 fixed Jubot error Deiz CoolleR
Description

Jubot AI incorrectly works. Screenshot attached

#1539 fixed Show wall gate upgrade cost in tooltip Deiz historic_bruno
#1544 fixed [PATCH] Selection order is not preserved when renaming entities Deiz Deiz
Description

As the GUI's selection state depends on SpiderMonkey's ordering of keys in objects (insertion order), detecting renamed entities, removing the old and adding the new will shift entities from their old position to the end of the selection.

The only way to preserve the order is by rebuilding the selection and groups as necessary, which is luckily quite simple.

#1551 fixed [PATCH] Fix gate closing range for enemy units Deiz historic_bruno
Description

Current behavior is that gates open once a player unit is within passRange of the gate and they close when no units are within that same range. This creates a problem with enemy units as they can be relatively far away yet keep the gate from closing or locking. They should have a much closer distance check than ally/player-owned units.

See #619 for related comments.

#1552 fixed [PATCH] Improve handling of mixed gate and long wall selections Deiz Deiz
Description

Patch removes the mutual exclusivity between gate locking icons and gate conversion icons. If a selection contains both gates and convertible walls, both types of icons will be shown.

The sort order is dependent on the primary selection. E.g. if the primary selected entity is a gate and the second selected entity is a long wall, the icons will be [Lock] [Unlock] [Convert to Gate]. If the selection were the other way around, it would be [Convert to Gate] [Lock] [Unlock].

I've also opted to highlight both the Lock and Unlock buttons if there are selected gates with both of those states. Clicking one of the buttons will set all selected gates to that state.

#1558 fixed [PATCH] Drop-down lists are not reinitialized properly. Deiz Deiz
Description

As the HandleMessage functions all return void, there's no way to easily determine whether a dropdown's child list has been modified after handling a message.

For a demonstration of the issue at present, go to set up a match, change the map selection filter to "Old Maps" - notice the dropdown is still large despite there being zero maps. Now, change back to 'Default' and notice it's only showing one map.

More or less, the buggy behaviour results in the dropdown rectangle's size lagging until it has been assigned to twice.

Having the list track when it's updated its items allows the dropdown to detect the modification and reinitialize the list size properly.

#1561 fixed [PATCH] Clicking on empty space always clears selection Deiz Deiz
Description

Proper behaviour is to only do that when neither the add nor remove hotkeys are pressed, such that the selection never gets reset when a player misclicks while trying to add or remove a single unit from the selection.

#1600 fixed Handle 'remain' corpses as discrete entities Deiz Deiz
Description

Per IRC discussion, the current way 'remain' corpses are handled presents several issues. Currently this behaviour is only used for huntable animals.

When units with the 'remain' property in cmpHealth die, they simply play the death animation but continue to exist. UnitAI makes this work by overriding a number of movement-related functions, so that corpses don't start moving around.

Absent an ownership change to Gaia, players that own these animals will have LOS from the corpses until the resources are harvested, and enemy buildings will fire on the corpses until they're destroyed.

Ideally, the promotion logic should be genericized and implemented inside each component, so that unit promotion, gate conversion, and units dying and becoming resources all share common code.

#1605 fixed Add a "Used" section to each of the resources in the stats screen Deiz Erik Johansson
Description

It would be really nice to be able to see how much of each resource you have used in the post-game statistics. I imagine it would be easiest/best to do it similar to how the barter statistics are done, just add a "/ Used" to the top and "/ #####" to the resource display to the right of each resource displayed as gathered.

#1641 fixed Fix wall preview to show unaffordable segments in red Deiz historic_bruno
Description

This bug has annoyed me a few times. It appears that I can build a long wall when the preview looks normal, if I don't pay attention to the exact cost and my current resource count, it will only build part of the wall which can be totally useless especially given #1566. To make this clearer, it should show unaffordable parts of the wall in red, which may be the entire wall or only the end of it (I don't think it's bad to reuse the red shading from build restrictions in this case).

#1669 fixed Failing to complete garrison order breaks unit state Deiz zoot
Description

If a unit fails to complete a queued garrison order (e.g. because the garrison holder is full) and the next order in the queue is a "combat" order (e.g. kill a chicken), the unit will enter a bizarre state throwing errors like this on every order given to the unit thereafter (even after the queue has been executed):

ERROR: Tried to process unhandled event 'Timer' in state 'INDIVIDUAL.GARRISON.GARRISONED'

#1673 fixed Unit "build wall" commands are always queued Deiz zoot
Description

If a gathering citizen soldier is given a command (without holding down Shift) to build a wall, it will not execute it immediately, but add it to its command queue.

Reproduced on Acropolis 1 playing Gauls:

  1. Select a citizen soldier and command it to gather.
  2. While it is gathering, command it to build a Palisade.
  3. The unit continues to gather instead executing the command immediately.
#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.

#6558 fixed ratings engine always counts me as lost Dunedan The Elder Rabbit
Description

Even when I win a game the ratings engine calls me as lost after the game in the lobby and reduces my rating https://trac.wildfiregames.com/raw-attachment/ticket/6558/Screenshot%20from%202022-06-09%2000-06-29.png

related ticket

#4540

#6740 fixed scrolling on dropdown menus causes lobby to refresh over and over Dunedan sternstaub
Description

using the scroll wheel on a dropdown menu in a hosted game causes the lobby to refresh multiple times

steps to reproduce:

1) creating a game on the multiplayer lobby

2) scroll down a dropdown menu for any option which is represented in the lobby grid view, e.g. map or player count

3) click on the small speech bubble on the right to open the lobby view

4) see how every second or so, the lobby completely refreshes, cycling through all the options which have been selected ("hovered", so to speak) in the game settings.

i have no idea if this only affects the player who created the match (and did the scrolling) or the whole public lobby.

bisect

[24686]

#1721 fixed [PATCH] Add "score" tab in post-game summary EMontana EMontana
Description
  • Adds a Score tab in post-game summary with score for economy, military, technology and total.
  • Adds 4 new counters in StatisticsTracker (resource value of unitsLost, buildingsLost, enemyUnitsKilled and enemyBuildingsDestroyed).
#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.

#2338 fixed [PATCH] Crash in FreeUPnPUrls on OS X 64-bit Echelon9 Petr
Description

When I go to Multiplayer / Host game, 0AD will crash back to my desktop. This happens always. I am using Alpha 15 64bit, latest MAC OS X, MacBook Pro.

The crashing thread in both reports is thread 10 (the UPnP thread). The error is in both cases "pointer being freed was not allocated" in FreeUPnPUrls(), so we seem to have an incorrect pointer in the urls struct. (Possibly unrelated, but GetUPNPUrls() doesn't check for success of malloc)

Thread 10 Crashed:
0   libsystem_kernel.dylib          0x00007fff8dc6b866 __pthread_kill + 10
1   libsystem_pthread.dylib         0x00007fff94c7b35c pthread_kill + 92
2   libsystem_c.dylib               0x00007fff9008dbba abort + 125
3   libsystem_malloc.dylib          0x00007fff91a06093 free + 411
4   com.wildfiregames.0ad           0x000000010067b328 FreeUPNPUrls + 152
5   com.wildfiregames.0ad           0x0000000100018aba CNetServerWorker::SetupUPnP(void*) + 1438
6   libsystem_pthread.dylib         0x00007fff94c7a899 _pthread_body + 138
7   libsystem_pthread.dylib         0x00007fff94c7a72a _pthread_start + 137
8   libsystem_pthread.dylib         0x00007fff94c7efc9 thread_start + 13
Thread 10 Crashed:
0   libsystem_kernel.dylib          0x00007fff8dc6b866 __pthread_kill + 10
1   libsystem_pthread.dylib         0x00007fff94c7b35c pthread_kill + 92
2   libsystem_c.dylib               0x00007fff9008dbba abort + 125
3   libsystem_malloc.dylib          0x00007fff91a06093 free + 411
4   com.wildfiregames.0ad           0x000000010067b328 FreeUPNPUrls + 152
5   com.wildfiregames.0ad           0x0000000100018aba CNetServerWorker::SetupUPnP(void*) + 1438
6   libsystem_pthread.dylib         0x00007fff94c7a899 _pthread_body + 138
7   libsystem_pthread.dylib         0x00007fff94c7a72a _pthread_start + 137
8   libsystem_pthread.dylib         0x00007fff94c7efc9 thread_start + 13
#2655 fixed [PATCH] ActorEditor, regardless of configuration, always links against Release libAtlasUI.dylib Echelon9 Echelon9
Description

See output below from Mac otools when inspecting binaries/system/ActorEditor_dbg:

$ otool -L binaries/system/ActorEditor_dbg 
binaries/system/ActorEditor_dbg:
	@executable_path/libAtlasUI.dylib (compatibility version 0.0.0, current version 0.0.0)
	/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.0.0)
	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)

Note that it is linked against libAtlasUI.dylib, not libAtlasUI_dbg.dylib.

ActorEditor is unable to open on Mac in the Debug configuration, without this fix.

#1513 fixed [PATCH] Bug on Deep Forest random map FeXoR historic_bruno
Description

See http://www.wildfiregames.com/forum/index.php?showtopic=16201 for original report.

The problem is Deep Forest is placing chickens (possibly other things?) inside the player's starting CC, which indirectly cripples AI but it doesn't help the player either :)

#2944 fixed [PATCH] Make RMGen wall placement more generic so no/less tweaking is needed if new civs are added FeXoR FeXoR
Description

This patch includes:

  • Adding function getCivList() to RMGen lib library.js that works even before civ data are fully loaded (needed for RMGen lib wall_builder.js, used by RMS wall_demo.js)
  • Avoiding explicitly naming the civ strings in RMGen lib wall_builder.js and RMS wall_demo.js so no patching is needed for them if a new civ is added. If a mod sticks to the entity template naming syntax ("structures/"+[civ string]+"_"+[building type]) and has all needed wall elements (wall_tower, wall_short, wall_medium, wall_long, wall_gate) the wall builder now will work for all "default" placement methods (there are advanced functions/arguments that still will cause failure in some cases).
  • Tweaking RMS wall_demo.js to use the full map width and due to the added civ recommending map size "Giant" for it.
  • Spellcheck and explanations: Fixed some explaining in RMGen lib misc.js and some typos in the changed files

Some questions that arose while writing the patch:

  • Wouldn't it be better to load the civ data during RMGen import RMS.LoadLibrary("rmgen"); instead of the map objects initialization InitMap(); so RMGen libs can use them? (This would remove the need of getCivList())
  • Civ theb is not a full faction AFAIK. This is still explicitly named and avoided (which is bad on it's own). Will this cause problems? Is there a way to avoid the explicit naming?
  • Some wall styles (like rome_siege and palisades) are not a civ. I have no idea how to avoid explicit naming in such cases (and patching will be required if further cases like this are added). Is this OK?
#3764 fixed [PATCH] Add heightmap manipulation library for random maps FeXoR FeXoR
Description

I collected the functions used for heightmap generation and manipulations in a library heightmap_manipulation.js.

Some where already use by maps and thus needed to be changed: Belgian Uplands and Schwarzwald.

Also some Global variables for heightmaps are now in library.js.

Some basic terrain "painting" function is also preasent now in misk.js.

A demo map is also added: Realistic Terrain Demo

#3900 fixed [PATCH] Seperate _kalis RMGen library FeXoR FeXoR
Description

Since most maps don't use the libs gaia.js and setup.js and to destiguish them more as a specific approach for random map generation I propose seperating them into another directory. That also avoids unneeded namespace flooding.

They are quite closely tied up so they will likely be needed both or none anyways.

Since some of the functions and the maps using them focus on multiplayer teams I propose the name mp-team.

We might want to do this for other libs as well.

#3968 fixed [PATCH] Remove duplicat of getDistance FeXoR FeXoR
Description

Removing function euclid_distance and replace the (single) use of it with existing function getDistance.

#3988 fixed [PATCH] Move building angle from maps to libs FeXoR FeXoR
Description

This patch removes the constant BUILDING_ANGlE from all random maps. Some of the maps need that angle though so a variable buildingAngle is added to library.js in rmgen.

Also the parameters that usually are given that angle are made optional (and a few others e.g. so that all after an optional argument are also optional).

The "Map initialization" comments where also removed when adjacent to a changed line for there is also a logged message stating the same.

#4012 fixed [PATCH] Phoenician levant has unreachable trees FeXoR sanderd17
Description

Pheonician levant (or was it Phoenician) has a lot of unreachable trees on the map boundary.

It's easy to find them via the obstruction overlay.

This is because on square maps, there's a border of 3 tiles wide that's unpassable and allows the terrain to fade to black.

The following patch should fix it (apparently map size is expressed in tiles instead of meters?).

#4068 fixed [PATCH] Prepare random map lib map.js for further libraries FeXoR FeXoR
Description

This patch splits getFullEntityList() - gathering all entities including those placed with terrain - from getMapData().

This is a prerequirement of two libs (and an addition of functionality on it's own):

  • beautifier.js by wraitii placing matching actors arround present entities
  • collision.js a debug lib that detects overlapping entities - like the good old chicken in civic centre
#4152 fixed [PATCH] Schwarzwald tiny map - tile is undefined FeXoR elexis
Description

As reported by bb today in irc and comment:12:ticket:2787, this error still occurs on schwarzwald with tiny mapsizes:

ERROR: JavaScript error: maps/random/heightmap/heightmap.js line 128
TypeError: tile is undefined
  distributeEntitiesByHeight@maps/random/heightmap/heightmap.js:128:1
  @maps/random/schwarzwald.js:266:78

Replay:

start {"settings":{"PlayerData":[{"Name":"elexis","Civ":"brit","Color":{"r":46,"g":46,"b":200},"AI":"","AIDiff":3,"Team":0},{"Name":"Player 2","Civ":"mace","Color":{"r":150,"g":20,"b":20},"AI":"","AIDiff":3,"Team":0},{"Name":"Player 3","Civ":"athen","Color":{"r":50,"g":165,"b":5},"AI":"","AIDiff":3,"Team":1}],"Seed":28622,"CheatsEnabled":true,"AISeed":64793,"Size":128,"GameType":"conquest","VictoryScripts":["scripts/TriggerHelper.js","scripts/ConquestCommon.js","scripts/Conquest.js"],"WonderDuration":1,"PopulationCap":300,"Ceasefire":0,"StartingResources":50000,"Name":"Schwarzwald","Description":"A forest heavy map with a lake in the middle and plenty of resources.","RatingEnabled":false,"RevealMap":true,"Script":"schwarzwald.js","BaseTerrain":["temp_grass_plants","temp_plants_bog"],"BaseHeight":0,"Preview":"schwarzwald.png","LockTeams":false,"TriggerScripts":["scripts/TriggerHelper.js","scripts/ConquestCommon.js","scripts/Conquest.js"],"CircularMap":true,"mapType":"random"},"map":"maps/random/schwarzwald","mapType":"random","mapPath":"maps/random/","mapFilter":"default","matchID":"134F4A8798F833C3","gameSpeed":1,"script":"schwarzwald.js","timestamp":"1464660017","engine_version":"0.0.21","mods":["mod","public"]}
#4174 fixed [PATCH] Heightmap interpolation FeXoR elexis
Description

The new maps by _kali which come with a digital elevation model (like pompeii) have some interpolation issues if the mapsize exceeds the provided resolution.

The current algorithm is to interpolate with one neighboring tile. Instead something better like bicubic interpolation could be used.

The attached patch attempts to implement that, but somehow the result doesn't have any effect. The map "howe sound" found in https://github.com/0ADMods/maps_random_by_kali/ already has these artifacts with mapsize medium.

#4218 fixed [PATCH] Split bicubicInterpolation to 1D and 2D so both are available FeXoR FeXoR
Description

This is just an improvement of BicubicInterpolation.js. It splits the 1D part and uses it in the 2D part. That way it is much more readable as well as the 1D function is now also available.

Also the swapped x/y coordinates where fixed.

Thanks Vladislav for the changes!

#4245 fixed [PATCH] New random map Caledonian Meadows FeXoR FeXoR
Description

See it's history at https://wildfiregames.com/forum/index.php?/topic/17642-random-map-realistic-terrain-demo

This map is IMO now ready to be added. The code has sadly become quite complex and I want to optimize it. However, IMO it's worth to be added so players can enjoy and test the map as well as the general approach of these kinds of maps in the comming Alpha 21.

#4262 fixed [PATCH] Summary screen: Fix Map control percentages FeXoR pilino1234
Description

The "At peak" and "At finish" values are the wrong way around in the summary screen. So, when a player was defeated, their peak map control would be shown as 0%, and their final map control would be their actual peak value.

I've put my fix here: https://github.com/pilino1234/0ad/commit/3a665ee

#4275 fixed [PATCH] Optimize Caledonian Meadows FeXoR FeXoR
Description

This optimizes the map Caledonean Meadows by:

  • Drastically decreasing load time (by a factor of ~20)
  • Paths should now be able to be used by siege engines
  • Adding load progress points
  • Slightly increased flattening at start locations

This should also fix load errors that where reported (Thus fixing a real defect).

After eccessive testing things that still can be improved:

  • Iberian walls can have trees in them (both if the wall is very irregular or if start location very close to high ground)
  • Not all resource spots have terrain texture
#4296 fixed [PATCH] Fix typo breaking random map latium FeXoR FeXoR
Description

Changeset r18876 initializes "tree" l474 but tries to access "trees" l476. Also tree is a string, strees was an array, index t is undefined.

I thought we are in feature freeze and this would also include style patches (Similar: r18881 made WIP patch #2944 much harder to apply)

#4368 fixed Add another path placement method to rmgen lib FeXoR FeXoR
Description

The two maps Deep Forest and Schwarzwald both use the same path placement method. That method is much more irregular and allows path bended to either side as well as roughly straight paths. So it would be a nice addition to the much more regular existing path placement method in the libs.

This method should be put into the rmgen lib as a function to be then used in both maps.

Schwarzwald should have the ammount of paths changed to one roughly straight one to the lake and one to each naigboring player from each player ... while we're at it ;)

#5112 fixed createObjectGroups should not break when receiving an empty areas array FeXoR elexis
Description

On this tiny Nile map, I got an error message instead of a finished mapgeneration.

Creating reeds...ERROR: JavaScript error: maps/random/rmgen/library.js line 185
TypeError: pickRandom(...) is undefined
  createObjectGroupsByAreas/placeFunc@maps/random/rmgen/library.js:185:38
  retryPlacing@maps/random/rmgen/library.js:113:16
  createObjectGroupsByAreas@maps/random/rmgen/library.js:189:9
  createObjectGroupsByAreasDeprecated@maps/random/rmgen/library.js:133:9
  @maps/random/the_nile.js:198:1

Alpha 23 / r21655, replay:

start {"settings":{"PlayerData":[{"Name":"elexis","Civ":"pers","Color":{"r":150,"g":20,"b":20},"AI":"","AIDiff":5,"AIBehavior":"defensive","Team":-1},{"Name":"Player 2","Civ":"kush","Color":{"r":21,"g":55,"b":149},"AI":"","AIDiff":3,"AIBehavior":"random","Team":-1},{"Name":"Player 3","Civ":"gaul","Color":{"r":86,"g":180,"b":31},"AI":"","AIDiff":3,"AIBehavior":"random","Team":-1},{"Name":"Indibil","Civ":"iber","Color":{"r":231,"g":200,"b":5},"AI":"petra","AIDiff":0,"AIBehavior":"balanced","Team":-1},{"Name":"Player 5","Civ":"rome","Color":{"r":50,"g":170,"b":170},"AI":"","AIDiff":3,"AIBehavior":"random","Team":-1},{"Name":"Kashta","Civ":"kush","Color":{"r":160,"g":80,"b":200},"AI":"petra","AIDiff":3,"AIBehavior":"random","Team":-1},{"Name":"Player 7","Civ":"pers","Color":{"r":220,"g":115,"b":16},"AI":"","AIDiff":3,"AIBehavior":"random","Team":-1},{"Name":"Player 8","Civ":"athen","Color":{"r":64,"g":64,"b":64},"AI":"","AIDiff":3,"AIBehavior":"random","Team":-1}],"VictoryConditions":["conquest","wonder","regicide"],"Size":128,"PopulationCap":300,"StartingResources":1000,"Ceasefire":0,"RelicCount":2,"RelicDuration":20,"WonderDuration":0,"RegicideGarrison":false,"Nomad":false,"RevealMap":true,"ExploreMap":true,"DisableTreasures":false,"DisableSpies":false,"LockTeams":false,"LastManStanding":true,"CheatsEnabled":true,"Name":"The Nile","Script":"the_nile.js","Description":"A calm wide river, representing the Nile River in Egypt, divides the map into western and eastern parts.","Keywords":["naval"],"RatingEnabled":false,"Preview":"the_nile.png","Seed":1647258984,"AISeed":2821901706,"BaseTerrain":"grass1_spring","BaseHeight":0,"XXXXXX":"Optionally define other things here, like we would for a scenario","GameType":"conquest","VictoryScripts":["scripts/TriggerHelper.js","scripts/ConquestCommon.js","scripts/Conquest.js","scripts/WonderVictory.js","scripts/Regicide.js"],"VictoryDuration":20,"CircularMap":true,"TriggerScripts":["scripts/TriggerHelper.js","scripts/ConquestCommon.js","scripts/Conquest.js","scripts/WonderVictory.js","scripts/Regicide.js"],"mapType":"random"},"mapType":"random","mapPath":"maps/random/","mapFilter":"all","gameSpeed":1,"script":"the_nile.js","map":"maps/random/the_nile","matchID":"9DA6FCAD95C9B1A8","timestamp":1522858830,"engine_version":"0.0.23","mods":[["public","0.0.23"]]}

It throws the error message when wanting to pick a random point of a random area. But this fails in case the areas is an empty array.

Instead it should fail silently and just not place anything.

#5345 fixed An extra argument is passed to Array.shift FeXoR False Vision
Description

A am reading the source code for a while now.

I found out in

"\data\mods\public\maps\random\rmgen\math.js"

Line 140 where there is

pointsToAdd.shift(i);

The argument is extra as Array.shift does not accept any args.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/shift

#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.

#1832 fixed Entities should abandon chase if their target is in FOW Freagarach mimo
Description

When you attack an dangerous animal, and then retreat, this animal will always chase you even if you flee to the opposite side of the map, completely out of its vision. There is a comment in the ShouldAbandonChase method saying that CCmpUnitMotion should take care to stop it if the target is lost in FoW, but this does not seem to work with animals. So here is a simple patch which stops the chase if the target is too far from the animal which chase it.

#3394 fixed Violent units follow enemies through the fog of war Freagarach elexis
Description

According to UnitAI.js:

respondChaseBeyondVision: start chasing, and don't stop even if it's out of this unit's vision range (though still visible to the player)

However the enemy units are also followed if they have reached the fog of war and are invisible to the player. The violent units seem to just follow the path of the enemy (instead of walking the shortest / direct path to the current enemy location).

Reproduce: (1) make men violent (2) Alt+D, enable the change-perspective tool (3) move an enemy cavalry in range of the violent men and run away

Since the cavalry can run faster than the soldiers can walk, the enemy cavalry is soon invisible to the player. You can then move whereever you want to, the violent men will always find you (kinda creepy).


A second thing which I'm not sure about:

Aren't violent men supposed to attack all enemies if any of the players units sees that enemy? Currently the violent guys only attack units in vision range.

#3397 fixed Option to select between generic and specific name or to select both Freagarach Stan
Description

As stated in the discussion here :

http://wildfiregames.com/forum/index.php?s=541f7aea38c912e7f965f18c8f0cc04d&showtopic=20031

it would be nice to be able to switch between general and specific name, because it seems it confuse new players.

Feneur simply stated that instead of reading you could just pick the icons, however wowgetoffyourcellphone and OP thinks specific names should be off by default.

#4801 fixed Move damage types to json files Freagarach leper
Description

Currently damage type definitions are specified in globalscripts/DamageTypes.js.

The structure of this is quite similar to how we handle Resources (see Resources.js in the same folder).

It would be nice to move the actual damage types to JSON files and load them from there. This would make it easier for modders to add new damage types (eg magic damage).

Since we don't need as many properties for damage types as for resources we should be good with a code, a name (which is currently the same as the code, but translated), and some order property (which is used to sort the damage types, thus allowing to change the display order in the gui).

An extension to this would be changing the schemas (and adjusting the code to deal with that) of all users of damage types (cmpAttack, cmpDamageReceiver, cmpDeathDamage) to allow specifying only a few damage types.

#5007 fixed Relics should not be attacked - Allow units without health and use it for relics Freagarach elexis
Description

All units that can attack but cannot or do not want to capture (gaia, elephants, females, petra AI) attack relics, but relics are indestructable, so there won't be any damage dealt.

What we really want is to remove the Health component of relics entirely.

This means that the health bar is also not rendered in the selection group / top panel.

There is a patch halfway done in in the early revisions of Phab:D341 before it was replaced with the preliminary cleanup.

#5177 fixed Giant Jebel Barkal doesn't generate Freagarach Shuvra
Description

i can't create random map in jebel barkel.it shows errors while starting it.

#5409 fixed Triple Left Click doesn't work Freagarach futurecrafter
Description

Triple Left Click: On unit: select all of your units of the same kind and the same rank on the screen.

When I triple click any unit it doesn't select the units that are not on the screen.

#5511 fixed Units actually attacking an allied storehouse Freagarach elexis
Description

In this r22484 replay at minute 23:35, bbs units attacked my storehouse that had just been captured by territory few moments ago (including health reduction), at the very top / north of the map.

So this might or might not be different from #3484.

#5593 fixed Unify UnitAI and "AnimalAI". Freagarach Freagarach
Description

There are some tickets about AnimalAI (#563, #1724, #3919), some suggest splitting the behaviour of animals from UnitAI. That would lead to much duplication and nigh any benefit.

IMHO we should rather unify the two, letting animals be able to behave exactly the same as "normal" units and vice versa (e.g. humans wandering).

#5847 fixed Can't capture relics Freagarach Asger
Description

If I want to capture a relic it wont work, i have more then 10 men surounding the relic but nothing happens. I am using the development version.

#5863 fixed Command group camera move does not work if one of the units in the group are garrisoned Freagarach Alistair_Findlay
Description

Double press on building command group moves the camera to those grouped units, but it doesn't work if any of the units in that group are garrisoned.

When double pressing the key for a command group, when that function is deciding where to put the camera it should ignore if any of the grouped units are garrisoned.

#5890 fixed Move TraderGain-helper to cmpMarket. Freagarach Freagarach
Description

We currently have a helper file TraderGain.js with one function (CalculateTraderGain). This could be moved to cmpMarket.

#5892 fixed Allow users to PushOrderFront. Freagarach Freagarach
Description

Often when gathering a player wants to construct a building and then go back to gathering. One can order an entity to build something and queue an gathering order, but that means one has to select multiple entities from the same resource. It would be easier (and just plain nice) to be able to push orders to the front of the queue.

#5902 wontfix Allow entities without resistance. Freagarach Freagarach
Description

Currently, cmpResistance is not needed to damage a target (Attacking.js-helper) since just no resistance is assumed.

However, range queries looking for a target need an interface that is implemented, which currently is cmpResistance.

This means that when one has an entity without cmpResistance, it technically _can_ be attacked, but [Unit|Building]AI won't take that entity into account and as such won't be attacked.

It was discussed (r22754 / rP22754) that a proper fix is probably adding a Attackable / Targetable component which could be used for this purpose (and maybe other purposes as well, e.g. distribute attacks).

#5915 fixed GUI errors out when captured buildings with paired techs of a different civ. Freagarach Freagarach
Description

https://wildfiregames.com/forum/index.php?/topic/24732-de-alpha-24/page/2/

#5925 fixed Attack notification sound is broken Freagarach OptimusShepard
Description

When I get a attack notification, there is no sound notification anymore.

#5946 fixed Map control (peak) displays a zero for both defeated parties in miscellaneous summary Freagarach Langbart
Description

Miscellaneous summary showed both defeated parties with zero "map control (peak)", which is impossible.

The problem described above occurs first with changeset [24721]

#5985 fixed Improve mirage internals. Freagarach Freagarach
Description

Currently, mirages implement the functions they mirage "bare metal", i.e. cmpMirage.GetCurrentAmount() returns the saved amount of resources for the miraged entity. That will give problems when multiple components implement the same function name.

The calling function QueryMiragedInterface in the Player.js-helper, could just as well return an object belonging to the miraged component.

So:

  • Save the functions and values in an object, per component, in Mirage.js.
  • Change the function call to return the object instead of calling functions on cmpMirage.

While at it, I suggest more stuff:

  • Don't initialise null values (refs #5979).
  • Make the components responsible for what needs to be miraged?
#6008 fixed Errors: entering /clear in lobby Freagarach Langbart
Description

Entering '/clear' in the chat field in the lobby results in the following error:

ERROR: Property 'caption' does not exist!
ERROR: Errors executing script event "Press"
ERROR: JavaScript error: gui/lobby/LobbyPage/Chat/ChatMessagesPanel.js line 50 invalid property id clearChatMessages@gui/lobby/LobbyPage/Chat/ChatMessagesPanel.js:50:3 handler@gui/lobby/LobbyPage/Chat/ChatCommandHandler.js:162:27 handleChatCommand@gui/lobby/LobbyPage/Chat/ChatCommandHandler.js:55:18 submitChatInput@gui/lobby/LobbyPage/Chat/ChatInputPanel.js:40:32

Image screenshot Tested with the RC Bundle: 0ad-0.0.24rc1-24875-alpha-osx64
I will attach 1 file:

  • 0ad-0.0.24rc1-24875-alpha-osx64interestinglog.html

(I have just created a ticket so that the bug will not be forgotten.)

#6022 fixed Units with UnitAI in wrong state after upgrading whilst being garrisoned. Freagarach Freagarach
Description

They are expected to be in GARRISON.GARRISONED, but are in INDIVIDUAL.IDLE.

I haven't found it affecting behaviour negatively and it might even be fixed after one of my garrisoning-patches, but making the ticket to not forget to check.

#6046 fixed order queue not flushed Freagarach snelius
Description

test scenario:
do A
then unselect unit
then select same unit again
do B (give another order queue)

A) give unit orders in a queue to

  1. build a barrack (no SHIFT pressed)
  2. build a house (with SHIFT button pressed => add next step to new queue "A")
  3. go to gather berries (with SHIFT button pressed => next step to A queue)

B) give unit orders in a queue to

  1. build a barrack (no SHIFT pressed => queue A should be flushed like in a23)
    In this step simply right click on a barrack which is actually being build without SHIFT button pressed.
  2. build a house (with SHIFT button pressed => add next step to new queue "B")
  3. go cut wood (with SHIFT button pressed => next step to B queue)

Expected result: after building house unit should gather wood BUT will gather berries, i.e. queue A is remembered but should have been erased in step B.1 - this step should overwrite or flush old queue A.

Please see attached replay from a24 revision 24933

#6052 fixed Formation Garrison bug. Freagarach Freagarach
Description

As reported by @wowgetoffyourcellphone on the forum there may be an error upon garrisoning a formation that doesn't need to approach.

#6085 fixed Wood gathers go to the wrong tree Freagarach Langbart
Description

I noticed a strange behavior of wood gathers. In the GIF below I create 10 spearmen in the CC and send them to a tree, two lumberjacks don't go where they are supposed to go.

I tested it with [24999] and [25000] the strange behavior can first be noticed with [25000].

#6089 fixed PetraAI marks non-garrisonHolder as one. Freagarach Freagarach
Description

See attached log and replay.

#6090 fixed PushOrderFront doesn't work with construction. Freagarach Freagarach
Description

Have an entity gather, pushorderfront to cunstruct a building, notice the entity won't gather after finishing construction.

#6128 fixed Units don't enter the tower Freagarach Langbart
Description

Units no longer automatically enter the tower as they did in A24b.

This behavior can first be noticed with changeset [25139].

#6135 fixed Add trading state in UnitAI. Freagarach Freagarach
Description

Currently, in UnitAI trading is handled by PerformTradeAndMoveToNextMarket which seems like it should just be converted to a substate, TRADING, of TRADE.

#6162 fixed Mercenaries are duplicated Freagarach Stan
Description

Steps to reproduce

  • Garrison mercenaries
  • Do the upgrade to lvl2
  • Notice you now have duplicated mercenaries outside the building and inside it.

Or see attached replay.

#6170 fixed Tried to change to non-existent state 'RETURNRESOURCE.APPROACHING' Freagarach Stan
Description

Playing with rP25379 mysticjim got a bunch of errors

#6172 fixed Errors AutoQueue Freagarach Langbart
Description

While playing a game with two humans against three AI's, I got some errors, but am not sure how to reproduce the problem. It definitely has to do with the AutoQueue feature. I just took a snapshot while the errors were displayed.

I had six barracks selected and pressed AutoQueueOn.

I have also attached the replay file (6_may_21.zip). SVN version: 25389

#6175 fixed Rally point - pick up treasures bug Freagarach Langbart
Description

While playing the latest SVN version [25403] on a random map called Lower Nubia, I received some errors while collecting treasures. To reproduce this, send all your starting units to collect treasures around the CC, start producing units in the CC and set the rally point on the treasures. Once a unit is in production but there are no more treasures around the CC, the errors occur.

0 A.D. (0.0.25) Main log (warnings and errors only)
ERROR: Error in timer on entity 150, IID80, function ProgressTimeout: ReferenceError: target is not defined
UnitAI.prototype.CollectTreasureNearPosition@simulation/components/UnitAI.js:5625:3 
collect-treasure-near-position/<@simulation/helpers/Commands.js:85:14
collect-treasure-near-position@simulation/helpers/Commands.js:84:67 
ProcessCommand@simulation/helpers/Commands.js:53:23 
ProductionQueue.prototype.SpawnUnits@simulation/components/ProductionQueue.js:748:18 
ProductionQueue.prototype.ProgressTimeout@simulation/components/ProductionQueue.js:840:26 
Timer.prototype.OnUpdate@simulation/components/Timer.js:139:44

Engine exited successfully on 2021-05-09 at 02:23:28 with 1384 message(s), 1 error(s) and 0 warning(s).

The problem is not reproducible for A24b. I will attach a replay file - 9_may_21.zip
This behavior can be observed for the first time with the changeset version [24999].

#6185 fixed [PetraAI] - Split bases from HQ. Freagarach Freagarach
Description

Currently, HQ also does the process of updating individual bases. There should be a separate module, baseManager (current baseManager could be renamed to base, similar to worker) that is updated by the HQ. (Naming could be argued.)

Rationale: The HQ should only care about high-level stuff, the rest should be delegated to managers.

#6233 fixed Unit in the outpost should not be displayed as idle Freagarach Langbart
Description

A user named Palaiologos has discovered that a soldier in an outpost shows up as "idle", which should not be true.

Everytime you press Alt+., the soldier gets selected as well.

#6237 fixed Collecting treasures has no order confirmation sound. Freagarach Freagarach
Description

Reported on the forum by Gurken Khan: https://wildfiregames.com/forum/topic/41264-alpha-25-pre-releaserelease-candidate-build-testing/?do=findComment&comment=437100.

Forgot in r24989.

#6250 fixed PetraAI produces too much siege and ships. Freagarach Stan
Description

See https://wildfiregames.com/forum/topic/45178-a25-svn-version-25810-not-playable/. Probably introduced in r25584.

  • She constructs a lot of siege without using it. (Uses most of it after r25826.)
  • She constructs way too much ships without using them. (Fixed in r25828.)

For the first point, it seems that a lot of attack plans are present, since AttackPlan.addSiegeUnits is called quite a lot, even though Siege is constructed.

The second point was the result of ships having class Ranged and thus PetraAI training them when asked to train Ranged units. Fixed by trying to train Infantry+Ranged.

#6260 fixed Units in formation ignore enemies when patroling or doing attack-move Freagarach Silier
Description

Reproted by ValihrAnt on forums:

https://wildfiregames.com/forum/topic/41264-alpha-25-pre-releaserelease-candidate-build-testing/page/14/?tab=comments#comment-444235

I did some quick messing around with formations and found a new issue now.
When I unit attack move or patrol when in formation, only one of the units in 
the formation will attack while the rest continue moving onwards, right 
through the enemies. Attack move and patrol without formation seems to be just fine though.
#6266 fixed Formation controller is in individual state after trying to collect treasure Freagarach Silier
Description

see https://code.wildfiregames.com/rP24989.

Reported by: @wowgetoffyourcellphone in https://wildfiregames.com/forum/topic/39973-a25-feedbacks-from-testing/page/15/?tab=comments#comment-444979.

#6302 fixed Warning in Atlas about GetTechModifiedProperty Freagarach Langbart
Description

Starting an AI simulation in Atlas throws the following warnings:

WARNING: GetTechModifiedProperty: numeric modification format not recognised : ({affects:["Unit", "Structure"], multiply:(void 0)})
WARNING: GetTechModifiedProperty: numeric modification format not recognised : ({affects:["Unit", "Structure"], multiply:(void 0)})

The problem can be reproduced consistently for the current SVN [25877] version, for A25, for A24b, but the warnings do not occur in A23b.

Steps:

  • Open Atlas
  • Click on Change Players
  • Select AI for player 1
  • Click on Generate map

Stan wrote under patch D3784

Pretty sure it started with the modifiers manager in A24.

The warnings do not appear at [21945] (A23b macOS), I managed to compile up to [24278] and the warnings still appear.

The ModifiersManager.js was added with [22767], but I am not able to compile with this changeset number, I get problems with the library files on macOS.

#6303 fixed Error when viewing a replay following a specific player Freagarach Langbart
Description

While watching a replay, errors popped up:

ERROR: JavaScript error: simulation/components/GuiInterface.js line 258 Script value conversion check failed: v.isNumber() (got type Object) GuiInterface.prototype.GetEntityState@simulation/components/GuiInterface.js:258:36 GuiInterface.prototype.ScriptCall@simulation/components/GuiInterface.js:2141:20 GetEntityState@gui/session/session.js:205:28 EntitySelection.prototype.addList@gui/session/selection.js:297:34 playercommand@gui/session/messages.js:279:15 handleNotifications@gui/session/messages.js:358:43 onSimulationUpdate@gui/session/session.js:667:2 __eventhandler54 (SimulationUpdate)@session SimulationUpdate:1:1

ERROR: Error calling component script function ScriptCall

I used the A25b version.

These errors can be reproduced consistently if you set the view to Mr.michael and Follow them. At about the 8th minute they start to appear.
Or you set the view on airo and follow them, then the errors appear twice once at 1min:15sec and one more time at 7min:20sec. For all other players no errors appear at all

I will attach the replay as a zip file: Mr.michael.zip

#6317 fixed Can't use fields Freagarach givensga
Description

In the Nile River (4) there appear to be fields already created. When I task villagers (male or female) to use them, they go to the middle of the field with hoe over their shoulders and then immediately come back empty handed. It may be my fault, but I have tried everything I can think of. It appears that the AI is also not using them. Alpha 25.

#6325 fixed Files set executable which should not Freagarach Ralph Sennhauser
Description

Following files are set excecutable

source/gui/tests/test_GuiManager.h
source/lib/file/vfs/tests/test_vfs_util.h
source/renderer/RenderingOptions.cpp
source/renderer/RenderingOptions.h
source/simulation2/components/tests/test_HierPathfinder.h
source/simulation2/helpers/VertexPathfinder.h
source/simulation2/tests/test_EntityMap.h

Change permission from 755 to 644

#6328 fixed Negative amount of resource gatherers Freagarach Langbart
Description

While playing the latest SVN version, the amount of resource gatherers in the top panel displayed a negative number.

In the attached replay, the issue can be observed for the blue Player around the 3min:10sec mark. Attached replay: negative_resourceGatherers.zip

The cause of the problem might be related to my experiments with the cheat code wololo (see wiki/Manual_Cheats). I turned a few units of the red player into my people. But I remember that I also saw a negative number in Delenda Est because slaves can be captured there.

EDIT: When I change the ownership (via cheat code) of one of my enemy units to mine, the status of the unitAI changes. It subtracts a food gatherer from me (Player 1), but the number for my enemy (Player 2) does not change. I assume the issues sits in ResourceGatherer.js or UnitAI.js.

Issue is reproducible for A24b.

#6347 fixed Link to the correct tutorial Freagarach Langbart
Description

Under the latest SVN version [25945], the Starting Economy Walkthrough tutorial is loaded under Learn to Play.

When you start the Tutorial campaign, the Introduction Tutorial is listed first and the Starting Economy Walkthrough is listed second.

A patch to fix the problem has already been created, I just created a ticket so that the problem is not forgotten.

#6363 fixed Split tasks from ProductionQueue. Freagarach Freagarach
Description

As it stands now, the Production Queue (PQ) takes care of quite some stuff (producing units and researching techs). In my recent train trips, I've thought out some way to reduce its scope a bit.

Why: The PQ should only care about its queue, getting that done and delegating specific tasks to components specialised in those specifics.

How: This means that we should have two more components (for now).

  1. Researcher.
  2. Trainer (do notice it technically should be able to produce structures).

In this scenario, the PQ gets an order to produce a unit, it delegates that to the trainer component and adds an item to its queue to keep track of the progress. Here, the trainer does the hard work of resources, population etc.

Idem for the researcher component.

Caveats: One thing to discuss is how to handle doing work. Is it the PQ telling the specific component that it may do stuff on every timeout (seems sane), or keep it for the components itself (how to handle fractions of timeouts then?).

It undoes some of the work I've done towards having both a tech and a unit in the same queue item, but I think I was overengineering that anyway.

#6377 fixed UnitAI error code being displayed Freagarach Langbart
Description

When playing a game on Alpha 25b [25860], some errors occurred and even when viewing the replay with and without mods, the error remains the same.

0 A.D. (0.0.25) Main log (warnings and errors only)
ERROR: JavaScript error: simulation/components/UnitAI.js line 6143 Failed to construct Vector3D object

ERROR: Failed to call ProcessCommand() global script function

Engine exited successfully on 2021-11-10 at 21:53:01 with 1604 message(s), 2 error(s) and 0 warning(s).

The error is displayed only once after about 10 seconds in the game. I will attach the replay as a zip file, I have never seen this error before.

Line 6143 in Unitai.js at [25860]

Line 
6137UnitAI.prototype.RememberTargetPosition = function(orderData)
6138{
6139 if (!orderData)
6140 orderData = this.order.data;
6141 let cmpPosition = Engine.QueryInterface(orderData.target, IID_Position);
6142 if (cmpPosition && cmpPosition.IsInWorld())
6143 orderData.lastPos = cmpPosition.GetPosition();
6144};
#6381 fixed [PetraAI] Attacks occur later Freagarach Langbart
Description

A user named marder reported via IRC 0ad-dev 12/Nov/21 that he observed a different behavior with the PetraAI, the attacks occur later than usual.

11:25 < marder> hey, did something change about the AI behavior in svn?
11:26 < marder> if I remember correctly very hard aggressive petra used to rush around minute 7
11:26 < marder> but when I play now in svn that doesn't happen until 15 min (or even later) in
11:27 < marder> in the last games I played regardless of the map petra never tried to rush
11:28 < marder> and this makes it much easier to beat the ai


Testing the AI on a map called the_limes_2p from the community-maps-2 mod.

the_limes_2p

Autostart command

~/0ad/binaries/system/pyrogenesis -quickstart -conf=mod.enabledmods:"mod public community-maps-2" -autostart="scenarios/the_limes_2p" -autostart-ai=3:petra -autostart-aidiff=3:5

Up to [25875], the attack from the AI (green player) always occurred around the 10-minute mark; with [25876], the AI is more hesitant and puts its resources into building towers rather than attacking.

third_macedonian_war

Autostart command

~/0ad/binaries/system/pyrogenesis -quickstart -conf=mod.enabledmods:"mod public" -autostart="scenarios/third_macedonian_war" -autostart-ai=2:petra -autostart-aidiff=2:5 -autostart-ai=3:petra -autostart-aidiff=3:5

#6387 fixed PanelEntity aura tooltip missing Freagarach Langbart
Description

The getAurasTooltip was added with [19536] and could be seen in the bundled release version A22 - Venustas, but somewhere between [19922] (the release number of A22) and [21945] (the release number of A23) the Aura tooltip no longer shows up.

Line 145 in gui/session/PanelEntity.js

Line 
139PanelEntity.prototype.Tooltips = [
140 getCurrentHealthTooltip,
141 getCurrentCaptureTooltip,
142 getAttackTooltip,
143 getResistanceTooltip,
144 getEntityTooltip,
145 getAurasTooltip
146];

[19922] contains auras

warn(uneval(panelEntState));
WARNING: ({id:7115, template:"units/sele_hero_antiochus_great", alertRaiser:null, builder:null, canGarrison:true, identity:{rank:"", classes:["Unit", "ConquestCritical", "Organic", "Human", "Hero", "Soldier", "Cavalry", "Melee", "Spear"], visibleClasses:["Hero", "Soldier", "Cavalry", "Melee", "Spear"], selectionGroupName:""}, fogging:null, foundation:null, garrisonHolder:null, gate:null, guard:{entities:[]}, market:null, mirage:null, pack:null, upgrade:null, player:1, position:{x:596.5880432128906, y:43.86955261230469, z:804.4444732666016}, production:null, rallyPoint:null, resourceCarrying:[], rotation:{x:0, y:0, z:0}, trader:null, unitAI:{state:"INDIVIDUAL.IDLE", orders:[], hasWorkOrders:false, canGuard:true, isGuarding:(void 0), canPatrol:true, possibleStances:["violent", "aggressive", "defensive", "passive", "standground"], isIdle:true}, visibility:"visible", hitpoints:1500, maxHitpoints:1500, needsRepair:false, needsHeal:false, canDelete:true, armour:{hack:13, pierce:12, crush:27}, attack:{Melee:{hack:24, pierce:52, crush:0, splash:false, minRange:0, maxRange:6, prepareTime:500, repeatTime:3500, elevationBonus:0, elevationAdaptedRange:(void 0)}, Capture:{value:15, splash:false, minRange:0, maxRange:4, prepareTime:0, repeatTime:1000, elevationBonus:0, elevationAdaptedRange:(void 0)}}, buildingAI:null, heal:null, isBarterMarket:null, loot:{xp:400, food:10, wood:0, stone:0, metal:25}, obstruction:{controlGroup:7115, controlGroup2:0}, turretParent:null, promotion:null, repairRate:null, buildRate:null, resourceDropsite:null, resourceGatherRates:{treasure:1}, resourceSupply:null, resourceTrickle:null, speed:{walk:16.5, run:26}, auras:{'units/heroes/hero_garrison':{name:"Inspired Defense", description:"When garrisoned in a structure or a siege engine, the hero gives it a bonus of +2 capture points recovery rate.", radius:null}, 'units/heroes/sele_hero_antiochus_great':{name:"Ilarch\xE8s", description:"All cavalry gains +2 levels of all armor types.", radius:null}}, extended:true})
warn(uneval(getAurasTooltip(panelEntState)));
WARNING: "[font=\"sans-bold-13\"]Inspired Defense:[/font] [font=\"sans-13\"]When garrisoned in a structure or a siege engine, the hero gives it a bonus of +2 capture points recovery rate.[/font]\n[font=\"sans-bold-13\"]Ilarch\xE8s:[/font] [font=\"sans-13\"]All cavalry gains +2 levels of all armor types.[/font]"

[21945] does not contain auras

warn(uneval(panelEntState));
WARNING: ({id:2172, player:1, template:"ungarrisonable|units/mace_hero_craterus", identity:{rank:"", classes:["Unit", "ConquestCritical", "Organic", "Human", "Hero", "Soldier", "Infantry", "Melee", "Sword"], visibleClasses:["Hero", "Soldier", "Infantry", "Melee", "Sword"], selectionGroupName:"", canDelete:true}, position:{x:304.16773986816406, y:25, z:807.832763671875}, hitpoints:1000, maxHitpoints:1000, needsRepair:false, needsHeal:false, canGarrison:false, unitAI:{state:"INDIVIDUAL.IDLE", orders:[], hasWorkOrders:false, canGuard:true, isGuarding:(void 0), canPatrol:true, selectableStances:["violent", "aggressive", "defensive", "passive", "standground"], isIdle:true}, guard:{entities:[]}, resourceCarrying:[], resourceGatherRates:{treasure:1}, visibility:"visible", attack:{Melee:{Hack:22, Pierce:0, Crush:0, splash:false, minRange:0, maxRange:3.5, prepareTime:375, repeatTime:750, elevationBonus:0, elevationAdaptedRange:(void 0)}, Capture:{value:15, splash:false, minRange:0, maxRange:4, prepareTime:0, repeatTime:1000, elevationBonus:0, elevationAdaptedRange:(void 0)}}, armour:{Hack:12, Pierce:12, Crush:25}, loot:{food:10, wood:0, stone:0, metal:25, xp:400}, speed:{walk:9.44989013671875, run:15.74981689453125}})
warn(uneval(getAurasTooltip(panelEntState)));
WARNING: ""
#6391 fixed Crashes during game save. Cannot serialize NaN values Freagarach nwtour
Description

Crashes during game save:

ERROR: Cannot serialize NaN values.
ERROR: Script component Player of entity 6 failed to serialize: Serialize_InvalidScriptValue
Serializing:
({playerID:4, name:"\u0427\u0430\u043D\u0434\u0440\u0430\u0433\u0443\u043F\u0442\u0430 \u041C\u0430\u0443\u0440\u044C\u044F", civ:"maur", color:{r:0.9058823529411765, g:0.7843137254901961, b:0.0196078431372549, a:1}, diplomacyColor:(void 0), displayDiplomacyColor:false, popUsed:NaN, popBonuses:0, maxPop:100, trainingBlocked:false, resourceCount:{food:190, wood:175, stone:262, metal:339}, resourceGatherers:{food:0, wood:0, stone:0, metal:0}, tradingGoods:[{goods:"food", proba:0}, {goods:"wood", proba:0}, {goods:"stone", proba:70}, {goods:"metal", proba:30}], team:1, teamsLocked:false, state:"active", diplomacy:[-1, -1, 1, 1, 1, 1], sharedDropsites:false, formations:["special/formations/null", "special/formations/box", "special/formations/column_closed", "special/formations/line_closed", "special/formations/column_open", "special/formations/line_open", "special/formations/flank", "special/formations/battle_line", "special/formations/skirmish", "special/formations/wedge"], startCam:(void 0), controlAllUnits:false, isAI:true, cheatsEnabled:true, panelEntities:[], resourceNames:{food:"Food", wood:"Wood", stone:"Stone", metal:"Metal"}, disabledTemplates:{}, disabledTechnologies:{}, spyCostMultiplier:1, barterEntities:[], barterMultiplier:{buy:{food:"1.0", metal:"1.0", stone:"1.0", wood:"1.0"}, sell:{food:"1.0", metal:"1.0", stone:"1.0", wood:"1.0"}}})
terminate called after throwing an instance of 'PSERROR_Serialize_InvalidScriptValue'
  what():  Serialize_InvalidScriptValue
Аварийный останов
#6399 fixed Move possible formations from Identity to UnitAI. Freagarach Freagarach
Description

A formation member needs UnitAI, so it would be best to have the possible formation stored there, instead of in cmpIdentity.

Reason: Keep data close to where it is used.

#6400 fixed Move some information from cmpFormation to cmpIdentity. Freagarach Freagarach
Description

Currently, the cmpFormation contains the name and icon (and a tooltip) of a formation. This overlaps with the function of cmpIdentity. We could just enable the cmpIdentity for formations and store the name and icon there. We could then also add some history about the formations and their specific names.

Reason: Reduce duplication accross components.

#6408 fixed Cheat code behaviour change for technology research time Freagarach Langbart
Description

While testing the latest GIT version [26136], I noticed that the cheat code gift from the gods no longer reduces the research time for researched technology to zero.

reproduce

  • Start a game
  • Enter gift from the gods
  • Click the civic center and select Cartography
  • Research time is not zero

bisect

Doing git bisect, the behaviour change starts with changeset [26015].

The ticket can be closed if the change was intentional.

#6415 fixed Training UI bug Freagarach Grapjas
Description

Reported by Purgator_ on the forum

When the blacksmith is selected along with other buildings that can produce units, the ui will make it seem like you can train multiple units per click.

For example: selecting Blacksmith + temple will look like you can train now 2 priests per click.

blacksmith + blacksmith + temple will make it look like you can train 3 priests per click.

The bug is only visually in the UI and doesn't actually train 2 units.

#6416 fixed Errors selecting an obstructor object in Atlas Freagarach Langbart
Description

to reproduce

  • Run scenarios/units_demo.xml in Atlas.
  • Select the object obstructors/placement. See picture below for more clarity. No errors should occur up to this point.
  • Press Play
  • Select it again --> Stream of errors
ERROR: Errors executing script event "Tick"

ERROR: JavaScript error: gui/session/unit_actions.js line 1943 entState.identity is undefined getActionInfo@gui/session/unit_actions.js:1943:50 actionCheck@gui/session/unit_actions.js:1228:34 hotkeyActionCheck@gui/session/unit_actions.js:1217:16 determineAction@gui/session/input.js:267:34 updateCursorAndTooltip@gui/session/input.js:111:31 onTick@gui/session/session.js:619:2 __eventhandler2 (Tick)@session Tick:1:1

The problem can be reproduced for A25b [25860]. The object was introduced with [25559]. I suspect this is the buggy commit.

Adding <Identity>

The errors disappear when adding an <Identity> tag to it.

#6421 fixed Create a cmpRequirements. Freagarach Freagarach
Description

There are several components using requirements (auras, techs, entities (identity)) it would be nice to have one component handling requirements, such as civ, entity and technology requirements. That would allow to e.g. put formations behind a technology. It would also allow more complex requirements for entities, like we have now for technologies (and auras?).

For the specs, look at the technologies, especially the "all" "any" "none" characteristics.

#6444 fixed Some maps are broken. Freagarach Freagarach
Description

Including:

  • Survival of the fittest.
  • Regicide games.

Introduced in r26298.

#6446 fixed [BUG] Stuck units supplying resources Freagarach Langbart
Description

A user named FFFF reported a bug via the forum.

to reproduce

  • Start a game, take a few units and build a fence around the stone mine, make sure the units are inside.
  • Start mining
  • Note that the units can drop resources at the fence.

See GIF below for more clarity.

bisect

[25215] is the changeset where this error first occurs.

reproducible

For A26 and A25b, the issue is not reproducible for A24b.

#6452 fixed Not paused items show as paused. Freagarach Langbart
Description

See patch.

#6458 fixed Error in the tutorial Freagarach marder
Description

In svn 26636 I get an error in the starting tutorial

ERROR: JavaScript error: maps/scripts/TriggerHelper.js line 389 cmpTechnologyManager.IsTechnologyStarted is not a function TriggerHelper.HasDealtWithTech@maps/scripts/TriggerHelper.js:389:55 IsDone@maps/tutorials/starting_economy_walkthrough.js:363:25 Trigger.prototype.NextGoal@maps/scripts/Tutorial.js:44:29 OnTrainingQueued@maps/tutorials/starting_economy_walkthrough.js:353:10 Trigger.prototype.DoAction@simulation/components/Trigger.js:371:19 Trigger.prototype.CallEvent@simulation/components/Trigger.js:332:9 Trainer.prototype.Item.prototype.Queue@simulation/components/Trainer.js:110:13 Trainer.prototype.QueueBatch@simulation/components/Trainer.js:630:12 ProductionQueue.prototype.Item.prototype.QueueEntity@simulation/components/ProductionQueue.js:51:27 ProductionQueue.prototype.Item.prototype.Queue@simulation/components/ProductionQueue.js:32:15 ProductionQueue.prototype.AddItem@simulation/components/ProductionQueue.js:334:12 train@simulation/helpers/Commands.js:368:61 ProcessCommand@simulation/helpers/Commands.js:53:23

#6461 fixed Attack walk with formations is broken. Freagarach Freagarach
Description

When tasking a formation to attack-move its members will receive multiple orders to attack. Up to when the formation controller reaches its position. For e.g. pikeman, this means they will never really attack their target.

A solution could be to stop the formation controller when it has found a target.

Steps to reproduce:

  • Task a formation to attack-move past an enemy unit.
#6490 fixed Idle error Freagarach Langbart
Description

to reproduce

  • start a game
  • select all your units
  • click any kind of formation
  • select them all with the following hotkey combo
    • alt (include offscreen) + # (select next idle unit)

ERROR: CCacheLoader failed to find archived or source file for: "art/textures/ui/session/portraits/formations/box.png"

IRC 0ad-dev 3/Apr/22

[07:23:38] Freagarach Langbart: #6490 is caused by giving formations cmpIdentity.
#6492 fixed Autoqueue corral issue Freagarach Langbart
Description

to reproduce

  • Build 3 corrals
  • Have 200 food in your resource counter (e.g. i want pizza 200)
  • Select all three corrals and press the autoqueue icon, start producing sheep (50 food each).
  • 3 sheep are made and after that 2 corrals turn off the autoqueue. so far so good.
  • Why are 2 icons displayed in the corral that is still producing?
  • See image below for more clarity.

reproducible

A25b [25860]: Issue is reproducible
A24b [24937]: autoqueue does not exist, it was added with [25381]

The ticket can be closed if it is not a problem. I just expected these two icons not to be displayed, that's all.

#6512 fixed Water weed Freagarach Langbart
Description

azayrahmad made some remarks in the forum about the gather_water_weeding.json tech.

I'm Indonesian where rice is our staple food. As far as I know there is no weed that supply rice plants with nutrients (weeds are robbing rice's nutrients, if any). There are some that could be planted side by side with rice, but it's for land optimization, not to improve the rice's nutrients.

  • Introduced by artoo (udeved) with commit fe32e78 (29/Jan/20)
  • Removed by Nescio0 wit commit 498061f (16/Jul/20)
  • Reintroduced by artoo (udeved) with commit de1bd77 (25/Sep/21)

issue(s)

The extra to in the description should at least be removed or remove/ change the entire tech.
gather_farming_water_weeding.json

Line 
1{
2 "genericName": "Water Weeding",
3 "description": "Grow water weeds to to supply rice plants with nutricients.",
4 "cost": {
5 "wood": 300,
#6521 fixed Allow to set the biome with the autostart command Freagarach Langbart
Description

issue

The -autostart-seed=SEED flag allows a specific random map to be loaded, this is great for testing. The changes made with commit [26584] now also load different biomes. This forces you to load the same map multiple times to get the specific seed/ biome you want to test.

to reproduce

  • Choose a random map that has several biomes, e.g., Mainland.
  • Start this map with the -autostart-seed flag from the command line, e.g.
    binaries/system/pyrogenesis -conf=mod.enabledmods:"public" -autostart="random/mainland" -autostart-seed=100
    
  • Close 0 A.D. and run the same command again, usually a different biome will appear.

possible solution

Add a -autostart-biome flag to the command line.

  • source/ps/GameSetup/GameSetup.cpp

    a b bool Autostart(const CmdLineArgs& args)  
    965965            CStr num = args.Get("autostart-players");
    966966            numPlayers = num.ToUInt();
    967967        }
     968        // Set biome if wanted
     969        if (args.Has("autostart-biome"))
     970        {
     971            CStr biome = args.Get("autostart-biome");
     972            Script::SetProperty(rq, settings, "Biome", biome);
     973        }
    968974        // Set up player data
    969975        for (size_t i = 0; i < numPlayers; ++i)
    970976        {
  • tested with the following command
    binaries/system/pyrogenesis -conf=mod.enabledmods:"public" -autostart="random/mainland" -autostart-seed=100 -autostart-biome="generic/nubia"
    

related ticket

#6548 fixed Error with maps created in the atlas with the victory condition "Conquest Civic Centers" Freagarach Langbart
Description

to reproduce

  • Start the Scenario Editor (aka Atlas)
  • Tick Conquest Civic Centers and save the map.
  • Start it normally from the GUI with the 0 A.D. app.
  • Errors appear when selecting the map in the game setup.

errors

ERROR: Error in timer: TypeError: this.conditions[name] is undefined _add@gamesettings/attributes/VictoryConditions.js:73:7 onMapChange@gamesettings/attributes/VictoryConditions.js:53:9 init/<@gamesettings/attributes/VictoryConditions.js:14:38 _trigger@gui/common/Observable.js:45:12 set@gui/common/Observable.js:35:11 selectMap@gamesettings/attributes/Map.js:44:3 call@gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Dropdowns/MapSelection.js:124:23 updateTimers@gui/common/timer.js:61:8 onTick@gui/gamesetup/SetupWindow.js:107:3 @gui/gamesetup/SetupWindow.js:57:64

What is the issue?

The VictoryConditions in the newly created .xml file lists conquest_civic_centres.

Line 
1 ],
2 "Preview": "",
3 "RevealMap": false,
4 "VictoryConditions": [
5 "conquest_civic_centres"
6 ]
7}
8]]></ScriptSettings>

The Map.cpp file takes the Title of the VictoryConditions makes it lower case and fills the gaps with an underscore.

Line 
189 for (const std::string& victoryConditionJson : victoryConditionData)
190 {
191 AtObj victoryCondition = AtlasObject::LoadFromJSON(victoryConditionJson);
192 long index = wxWindow::NewControlId();
193 wxString title = wxString::FromUTF8(victoryCondition["Data"]["Title"]);
194 std::string escapedTitle = title.Lower().ToStdString();
195 std::replace(escapedTitle.begin(), escapedTitle.end(), ' ', '_');
196 AtObj updateCondition = *(victoryCondition["Data"]["Title"]);
197 updateCondition.setString(escapedTitle.c_str());
198 m_VictoryConditions.insert(std::pair<long, AtObj>(index, victoryCondition));
199 CREATE_CHECKBOX(this, vcGridSizer, title, "Select " + title + " victory condition.", index);
200 }

In the game setup the function loadVictoryConditions checks for the filename NOT the title.

Line 
215/**
216 * Loads available victoryCondtions from json files.
217 *
218 * @returns {Array|undefined}
219 */
220function loadVictoryConditions()
221{
222 let subdir = "victory_conditions/";
223
224 let victoryConditions = listFiles(g_SettingsDirectory + subdir, ".json", false).map(victoryScriptName => {
225 let victoryCondition = loadSettingValuesFile(subdir + victoryScriptName + ".json");
226 if (victoryCondition)
227 victoryCondition.Name = victoryScriptName;
228 return victoryCondition;
229 });
230
231 if (victoryConditions.some(victoryCondition => victoryCondition == undefined))
232 return undefined;
233
234 return victoryConditions.sort((a, b) => a.GUIOrder - b.GUIOrder || (a.Title > b.Title ? 1 : a.Title > b.Title ? -1 : 0));
235}

The end result differs from the actual file name conquest_civiccentres.json. The issue does not occur with capture_the_relic.json.

reproducible

Issue can be reproduced up to A25, in A24 there was no option in Atlas to do this. It was added with [25422].

possible solution

Simplest solution is changing the file name from conquest_civiccentres.json to conquest_civic_centres.json.

#6566 fixed Han gather_grain animation is not chosen correctly for Spearman and Pikeman Freagarach Langbart
Description

I could not find the steps to reproduce the problem conclusively, but it happened to me at least twice and only with the Han. See the attached replay (animation_broke_rice_gather.txt) and the GIF below for more clarity. The unit still farms, but the gather_grain animation does not work properly.

possibly related

Similar sounding problem reported by borg via the forum

EDIT 12/Jun/22 with [26937]

The issue is still noticeable, see attached replay (farmMe_rP26937.txt ~3min mark) and GIF below for more clarity. The unit simply stops the animation, still gathering though.

EDIT 13/Jun/22

Reproduce: Add a small distance between the rice field and the drop point, so that the unit has to walk. The problem can only be observed for Han citizen-soldiers.

Seems to do with approach_rice.xml and the line <variant file="biped/approach_rice.xml"/> in the binaries/data/mods/public/art/actors/units/han/ files. Ref: [26937]

Update

to reproduce

  • Open Atlas and place a CC and a Han rice field next to each other without leaving a gap between them.
  • Place a han/infantry_spearman_b.xml and a han/infantry_halberdman_b.xml and start the simulation. (Only these two unit types - Spearman and Pikeman - are affected by the Han.)
  • Order them to gather
  • Wait until they reach the CC, the animation for gathering is not chosen.

issue

wiki/Actors#Randomnessandselections

If two variants have equal frequency values, they have equal chance of being selected.

I think in Atlas the top line is always chosen, moving the line for gather_grain above carry_food would also work, at least in Atlas.

  • binaries/data/mods/public/art/actors/units/han/infantry_spearman_b.xml

    a b  
    3333  </group>
    3434  <group>
    3535    <variant file="biped/base_spearman_shield_relax.xml"/>
     36    <variant file="biped/gather_grain.xml"/>
    3637    <variant file="biped/carry_food.xml">
    3738      <props>
    3839        <prop actor="props/units/helmets/han_ricehat.xml" attachpoint="helmet"/>
     
    4344    <variant file="biped/formations/anti_cavalry_back.xml"/>
    4445    <variant file="biped/attack_slaughter.xml"/>
    4546    <variant file="biped/gather_tree.xml"/>
    46     <variant file="biped/gather_grain.xml"/>
    4747    <variant file="biped/gather_fruit.xml"/>
    4848    <variant file="biped/gather_meat.xml"/>
    4949    <variant file="biped/gather_rock.xml"/>

possible solution

  • binaries/data/mods/public/art/actors/units/han/infantry_spearman_b.xml

    a b  
    3838        <prop actor="props/units/helmets/han_ricehat.xml" attachpoint="helmet"/>
    3939      </props>
    4040    </variant>
    41     <variant file="biped/attack_capture.xml"/>
    42     <variant file="biped/formations/anti_cavalry_front.xml"/>
    43     <variant file="biped/formations/anti_cavalry_back.xml"/>
    44     <variant file="biped/attack_slaughter.xml"/>
    45     <variant file="biped/gather_tree.xml"/>
    46     <variant file="biped/gather_grain.xml"/>
    47     <variant file="biped/gather_fruit.xml"/>
    48     <variant file="biped/gather_meat.xml"/>
    49     <variant file="biped/gather_rock.xml"/>
    50     <variant file="biped/gather_ore.xml"/>
    51     <variant file="biped/gather_ruins.xml"/>
    52     <variant file="biped/gather_praise.xml"/>
    53     <variant file="biped/build.xml"/>
    54     <variant file="biped/build_farm.xml"/>
    55     <variant file="biped/death_infantry.xml"/>
    5641    <variant file="biped/carry_meat.xml"/>
    5742    <variant file="biped/carry_wood.xml"/>
    5843    <variant file="biped/carry_stone.xml"/>
     
    6853    <variant file="biped/approach_praise.xml"/>
    6954  </group>
    7055  <group>
    71     <variant name="Idle"/>
     56    <variant frequency="1" name="Idle"/>
     57    <variant file="biped/attack_capture.xml"/>
     58    <variant file="biped/attack_slaughter.xml"/>
     59    <variant file="biped/gather_tree.xml"/>
     60    <variant file="biped/gather_grain.xml"/>
     61    <variant file="biped/gather_fruit.xml"/>
     62    <variant file="biped/gather_meat.xml"/>
     63    <variant file="biped/gather_rock.xml"/>
     64    <variant file="biped/gather_ore.xml"/>
     65    <variant file="biped/gather_ruins.xml"/>
     66    <variant file="biped/gather_praise.xml"/>
     67    <variant file="biped/build.xml"/>
     68    <variant file="biped/build_farm.xml"/>
     69    <variant file="biped/death_infantry.xml"/>
    7270  </group>
    7371  <material>player_trans.xml</material>
    7472</actor>

additional nitpick

Other actors, such as romans/infantry_spearman_b.xml, should receive a similar treatment.

#6570 fixed Naval Shipyard unusable Freagarach Langbart
Description

An issue was reported by Freagarach via IRC 0ad-dev 11/Jun/22

[...] Carths Super Dock is broken.

to reproduce

  • Build the Carthaginian Naval Shipyard and try to produce something
  • Warnings shows up
WARNING: Trainer without Production Queue found: 2204.

note

Tested all the other civs and I think this is the only structure that has this problem, at least the ones that are accessible in the main game.

#6571 fixed Phasing up with cheat code for Athens Freagarach Langbart
Description

to reproduce

  • Start a game with Athen (other civs are fine)
  • enter gift from the gods or back to the future
  • Note that the phase symbol is not changing in the Civic Centre.

bisecting guessing

I assume it is this one [26298]

reproducible

The issue is not reproducible in A25b [25860]

possible solution

  • binaries/data/mods/public/simulation/helpers/Cheat.js

    a b function Cheat(input)  
    117117        else
    118118            return;
    119119
    120         if (TechnologyTemplates.Has(parameter + "_" + cmpPlayer.civ))
    121             parameter += "_" + cmpPlayer.civ;
     120        const civMe = Engine.QueryInterface(playerEnt, IID_Identity).GetCiv();
     121        if (TechnologyTemplates.Has(parameter + "_" + civMe))
     122               parameter += "_" + civMe;
    122123        else
    123124            parameter += "_generic";
    124125
#6580 fixed Trouble with merging formations Freagarach Langbart
Description

Issue No.1 - conversion check

This issue was first reported by andy5995 in the forum

errors

ERROR: JavaScript error: simulation/components/Formation.js line 931
Script value conversion check failed: v.isString() || v.isNumber() || v.isBoolean() (got type undefined)
  Formation.prototype.ComputeMotionParameters@simulation/components/Formation.js:931:16
  Formation.prototype.AddMembers@simulation/components/Formation.js:449:7
  Formation.prototype.ShapeUpdate@simulation/components/Formation.js:973:8
  Timer.prototype.OnUpdate@simulation/components/Timer.js:139:44
ERROR: Script message handler OnUpdate failed

to reproduce

Note: The steps for reproduction could not be clearly determined, the following points only increase the probability of the error occurring.

  • Start a map with three unit groups, each with at least 4 entities.
  • Position them far apart and select them all.
  • First choose the None formation and after that the Box formation
  • Units should not come together, but only form a formation at the position they are currently at.
  • Now order all three groups to come together by clicking at the center point.
  • Check the images below and the first minute of the attached replay for more clarity: conversion_check.txt

possible solution for issue no.1

  • binaries/data/mods/public/simulation/components/Formation.js

    a b Formation.prototype.ShapeUpdate = function()  
    969969        // Merge the members from the twin formation into this one
    970970        // twin formations should always have exactly the same orders.
    971971        let otherMembers = cmpOtherFormation.members;
     972        if (otherMembers.length == 0)
     973            continue;
    972974        cmpOtherFormation.RemoveMembers(otherMembers);
    973975        this.AddMembers(otherMembers);
    974976        Engine.DestroyEntity(this.twinFormations[i]);

Issue No.2

It is related to problem no. 1. If the group is not successfully merged, there is a big problem that prevents any interaction with the game when trying to select certain units that have not been successfully merged into the new large formation.

errors

ERROR: JavaScript error: gui/session/selection.js line 500
GetEntityState(...) is null
  EntitySelection.prototype.addFormationMembers@gui/session/selection.js:500:39
  EntitySelection.prototype.setHighlightList@gui/session/selection.js:433:20
  handleInputBeforeGui@gui/session/input.js:529:16

to reproduce

Note: The steps for reproduction could not be clearly determined, the following points only increase the probability of the error occurring.

  • Try the steps from issue no.1 with a mixture of different unit types.
  • This might take multiple runs to occur.
  • Watch the replay GetEntityState_null.txt till 50 seconds have gone by and then try to select all the units that have tried to merge.

bisect

(not yet)

reproducible

Could not trigger any of the errors described above in A25b, I guess the problem must have been introduced after [25860].

additional notes

Tested on [26983] with default settings.

#6583 fixed Garrison with formation gives errors. Freagarach Freagarach
Description

Start a match, make a formation, garrison the formation in the CC. Unload the CC, watch the errors when hovering.

#6648 fixed %(resource)s are not translated in AI private messages Freagarach Gurken Khan
Description

When AIs make demands in private messages the resources are not translated but use the English terms like "food".

PetraAI bot doesn't recognize defeat of competitor, it's trading with (11/Oct/22)

possible solution ?

  • binaries/data/mods/public/simulation/ai/petra/chatHelper.js

    a b PETRA.chatAnswerRequestDiplomacy = function(gameState, player, requestType, resp  
    225225        "message": "/msg " + gameState.sharedScript.playersData[player].name + " " +
    226226            pickRandom(this.answerDiplomacyRequestMessages[requestType][response]),
    227227        "translateMessage": true,
    228         "translateParameters": requiredTribute ? ["_amount_", "_resource_", "_player_"] : ["_player_"],
     228        "translateParameters": { "_resource_": "withinSentence" } ,
    229229        "parameters": requiredTribute ?
    230             { "_amount_": requiredTribute.wanted, "_resource_": requiredTribute.type, "_player_": player } :
     230            { "_amount_": requiredTribute.wanted, "_resource_": Resources.GetNames()[requiredTribute.type], "_player_": player } :
    231231            { "_player_": player }
    232232    });
    233233};
  • the Resources.GetNames()[requiredTribute.type] transforms wood into Wood
  • the { "_resource_": "withinSentence" } for finding the correctly translated word with the translateObjectKeys function in ChatMessageFormatPlayer.js.

l10n/nl.public-gui-other.po

Line 
7285#. Translation: Word as used at the beginning of a sentence or as a single-
7286#. word sentence.
7287#: simulation/data/resources/wood.jsonname
7288msgctxt "firstWord"
7289msgid "Wood"
7290msgstr "Hout"
7291
7292#. Translation: Word as used in the middle of a sentence (which may require
7293#. using lowercase
7294#. for your language).
7295#: simulation/data/resources/wood.jsonname
7296msgctxt "withinSentence"
7297msgid "Wood"
7298msgstr "Hout"
7299
7300#. Translation: Word as used at the beginning of a sentence or as a single-
7301#. word sentence.
7302#: simulation/data/resources/wood.jsonsubtypes.tree
7303msgctxt "firstWord"
7304msgid "Tree"
7305msgstr "Boom"

note

the missing space in the dutch text, which can be seen in the image above, is a problem of the translator and is not caused by this patch

l10n/nl.public-simulation-other.po

Line 
245#: simulation/ai/petra/chatHelper.js:81
246#, javascript-format
247msgid ""
248"%(_player_)s, you must send me a tribute of %(_amount_)s %(_resource_)s "
249"before I accept an alliance with you."
250msgstr "%(_player_)s, u moet eerst %(_amount_)s%(_resource_)s als geschenk sturen voordat ik een bondgenootschap met u accepteer."
#6651 fixed Structure Tree shouldn't fail for empty history strings Freagarach Stan
Description

Currently if a civilization has no history string, like for instance the ponies in ponies ascendant, the structure tree breaks with the following error

ERROR: JavaScript error: gui/reference/structree/StructreePage.js line 51 Script value conversion check failed: v.isString()  v.isNumber()  v.isBoolean() (got type undefined)

History being an optional tag in cmpIdentity (https://github.com/0ad/0ad/blob/master/binaries/data/mods/public/simulation/components/Identity.js#L45) it is not required to be there.

#6654 fixed AI sometimes makes demands to an already defeated player Freagarach Gurken Khan
Description

Sometimes the AI tries to negotiate with a player that's already defeated: makes no sense.

See: PetraAI bot doesn't recognize defeat of competitor, it's trading with (11/Oct/22)

analysing the replay from the forum link above

11:40 `User` wants to become neutral with `Lysander`
11:40 `Lysander` wants `1000 Food`
11:50 `User` sends `Lysander` `1000 Food`
11:50 `User` becomes neutral with `Lysander`

30:00 `User` wants to become allied with `Lysander` 
30:00 `Lysander` wants `1000 Food`
30:00-31:00 `User` sends `Lysander` `400 Food` (and `200 Metal, 100 Wood`)
31:10 `User` resigns
32:10 `Lysander` wants the remaining `600 Food` (asking a private message)

to reproduce

  • start a match with some AI's
  • try to make an alliance, where the AI asks you for a tribute
  • only send a part of the tribute
  • get defeated, for example with cheat code exodia 1
  • AI asks you in a private message, for the rest

note

To see private messages from the AI when watching the replay:

  1. either change the name in the user.cfg to the name of the player, whose private messages from the AI you would like to see or
  2. change the name in the attached replay file

#6656 fixed Athens Gymnasium has no TerritoryInfluence boost Freagarach Langbart
Description

to reproduce

  • start a normal map with Athen
  • enter cheat code: back to the future to reach Town Phase
  • build a Gymnasium at the border
  • see GIF below for more clarity - gymnasium vs barracks

bisect

  • [24104] removed the TerritoryInfluence from the template_structure_special file.

Nescio: Removes <TerritoryInfluence> from template_structure_special.xml, since that belongs in most of its children too.

possible solution

Give it the same boost as the Athen Council Chamber (Prytaneion)

templates/structures/athen/prytaneion.xml - Line 48

  • binaries/data/mods/public/simulation/templates/structures/athen/gymnasium.xml

    a b  
    4646      <constructed>interface/complete/building/complete_gymnasium.xml</constructed>
    4747    </SoundGroups>
    4848  </Sound>
     49  <TerritoryInfluence>
     50    <Root>false</Root>
     51    <Radius>38</Radius>
     52    <Weight>40000</Weight>
     53  </TerritoryInfluence>
    4954  <Trainer>
    5055    <BatchTimeModifier>0.7</BatchTimeModifier>
    5156    <Entities datatype="tokens">

optional

  • Add a test to one of the entity python tools that children of the template_structure_special.xml file should have a TerritoryInfluence boost.
#6657 fixed Elite units small discrepancy between maxHitpoints and hitpoints Freagarach Langbart
Description

to reproduce

  • start the units_demo map
pyrogenesis -autostart="scenarios/units_demo" -autostart-victory="endless"
  • seek the Mauryan Hero Healer Acharya Chanakya, somewhere in the back rows. You will find him, because he is the only one walking around .

  • the Healer is going to some Elite units to heal them, for example the Cretan Mercenary Archer
  • select the Cretan Mercenary Elite Archer, toggle the Developer Overlay Alt+D and the option Display selection state
    • the difference between hitpoints and maxHitpoints is only 0.00000000000001 == 1E-14

Line 
66 </TrainingRestrictions>
67 <Vision>
68 <Range>100</Range>
69 </Vision>
70</Entity>
Line 
53 </Sound>
54 <Vision>
55 <Range>30</Range>
56 </Vision>
57</Entity>

minimal amount of units to reproduce the issue

  • change the units_demo.js to only show three units. the combo is enough to create the discrepancy in health points.
    • binaries/data/mods/public/maps/scenarios/units_demo.js

      a b let maxh = 0;  
      3131let gap = 14;
      3232
      3333let cmpTemplateManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_TemplateManager);
      34 for (let template of cmpTemplateManager.FindAllTemplates(actors))
       34for (let template of ["units/mace/hero_pyrrhus_i", "units/iber/catafalque", "units/maur/elephant_archer_e"])
      3535{
      3636    print(template + "...\n");

intended behavior

  • the hitpoints for all elite units should be the same as the maxHitpoints when the game starts

cause of the issue

See the comment by Stan suggesting floating point math

❯ node
Welcome to Node.js v19.1.0.
> 0.1+0.2
0.30000000000000004

possible solution

one-line change, there is a calculation being made in the Health.js file.

example units/maur/elephant_archer_e

# this.hitpoints * newMaxHitpoints / oldMaxHitpoints
❯ node
Welcome to Node.js v19.1.0.
> 233.75000000000003*292.18750000000006/233.75000000000003
# 292.1875
  • binaries/data/mods/public/simulation/components/Health.js

    a b Health.prototype.RecalculateValues = function()  
    465465    let newMaxHitpoints = ApplyValueModificationsToEntity("Health/Max", +this.template.Max, this.entity);
    466466    if (oldMaxHitpoints != newMaxHitpoints)
    467467    {
    468         let newHitpoints = this.hitpoints * newMaxHitpoints/oldMaxHitpoints;
     468        let newHitpoints = (this.hitpoints === oldMaxHitpoints) ? newMaxHitpoints : this.hitpoints * newMaxHitpoints / oldMaxHitpoints;
    469469        this.maxHitpoints = newMaxHitpoints;
    470470        this.SetHitpoints(newHitpoints);
    471471    }
#6659 fixed RelaxNGValidator validate entity errors on changeset 27241 for elephant Freagarach Langbart
Description

to reproduce

  • start scenarios/units_demo map
  • errors fill the screen

logs

0 A.D. (0.0.27) Main log (warnings and errors only)
ERROR: RelaxNGValidator: Validation error: (null):0: Extra element food in interleave

ERROR: RelaxNGValidator: Validation error: units/cart/champion_elephant:1: Element Resources failed to validate content

ERROR: RelaxNGValidator: Validation error: (null):0: Extra element food in interleave

ERROR: RelaxNGValidator: Validation error: units/cart/champion_elephant:1: Element Loot failed to validate content

ERROR: RelaxNGValidator: Validation failed for '(null)'

ERROR: Failed to validate entity template 'units/cart/champion_elephant'

ERROR: Failed to load units/cart/champion_elephant

ERROR: RelaxNGValidator: Validation error: (null):0: Extra element food in interleave

ERROR: RelaxNGValidator: Validation error: units/kush/champion_elephant:1: Element Resources failed to validate content

ERROR: RelaxNGValidator: Validation error: (null):0: Extra element food in interleave

ERROR: RelaxNGValidator: Validation error: units/kush/champion_elephant:1: Element Loot failed to validate content

ERROR: RelaxNGValidator: Validation failed for '(null)'

ERROR: Failed to validate entity template 'units/kush/champion_elephant'

ERROR: Failed to load units/kush/champion_elephant

ERROR: RelaxNGValidator: Validation error: (null):0: Extra element food in interleave

ERROR: RelaxNGValidator: Validation error: units/maur/champion_elephant:1: Element Resources failed to validate content

ERROR: RelaxNGValidator: Validation error: (null):0: Extra element food in interleave

ERROR: RelaxNGValidator: Validation error: units/maur/champion_elephant:1: Element Loot failed to validate content

ERROR: RelaxNGValidator: Validation failed for '(null)'

ERROR: Failed to validate entity template 'units/maur/champion_elephant'

ERROR: Failed to load units/maur/champion_elephant

ERROR: RelaxNGValidator: Validation error: (null):0: Extra element food in interleave

ERROR: RelaxNGValidator: Validation error: units/pers/champion_elephant:1: Element Resources failed to validate content

ERROR: RelaxNGValidator: Validation error: (null):0: Extra element food in interleave

ERROR: RelaxNGValidator: Validation error: units/pers/champion_elephant:1: Element Loot failed to validate content

ERROR: RelaxNGValidator: Validation failed for '(null)'

ERROR: Failed to validate entity template 'units/pers/champion_elephant'

ERROR: Failed to load units/pers/champion_elephant

ERROR: RelaxNGValidator: Validation error: (null):0: Extra element food in interleave

ERROR: RelaxNGValidator: Validation error: units/ptol/champion_elephant:1: Element Resources failed to validate content

ERROR: RelaxNGValidator: Validation error: (null):0: Extra element food in interleave

ERROR: RelaxNGValidator: Validation error: units/ptol/champion_elephant:1: Element Loot failed to validate content

ERROR: RelaxNGValidator: Validation failed for '(null)'

ERROR: Failed to validate entity template 'units/ptol/champion_elephant'

ERROR: Failed to load units/ptol/champion_elephant

ERROR: RelaxNGValidator: Validation error: (null):0: Extra element food in interleave

ERROR: RelaxNGValidator: Validation error: units/sele/champion_elephant:1: Element Resources failed to validate content

ERROR: RelaxNGValidator: Validation error: (null):0: Extra element food in interleave

ERROR: RelaxNGValidator: Validation error: units/sele/champion_elephant:1: Element Loot failed to validate content

ERROR: RelaxNGValidator: Validation failed for '(null)'

ERROR: Failed to validate entity template 'units/sele/champion_elephant'

ERROR: Failed to load units/sele/champion_elephant

bisect

[27241]

#6670 fixed Negative used resources in summary Freagarach Langbart
Description

reported by KarloManco in the forum: resourcesUsed counter bug (21/Dec/22)

When a unit which is being trained is cancelled, the resourcesUsed counter is decreased by twice the cost of this unit

to reproduce

  • Click on any building to train a new unit
  • Cancel the unit before it is completed.
  • Check in the summary the Resources Used field

reproducible

issue is not reproducible in A25b [25860]

bisect

[26000]

possible solution

KarloManco:

I have checked (in the newest version, [27288]) that by commenting lines 153 and 154 in the mentioned file (Trainer.js) the issue sees to be solved.

#6682 fixed Python checkrefs.py update required after changeset 27245 Freagarach Langbart
Description

to reproduce

  • navigate to 0ad/source/tools/entity
  • run python3 checkrefs.py -u
  • among other files, two techs are listed phase_city.json and phase_town.json
WARNING - Unused file 'public/simulation/data/technologies/phase_city.json'
WARNING - Unused file 'public/simulation/data/technologies/phase_town.json'

bisect

[27245]

related tickets

#6691 fixed Template viewer for mace storehouse tech displays wrong time Freagarach Langbart
Description

reported by 0ad is the best rts game in the forum: Game guide of Macedonians error reporting (24/Dec/22)

Macedonian has warehouse technology - 100% of the study time. However, when the player clicks on "Learn Game > Structure > Warehouse (right mouse button)" or clicks on the right mouse button of the warehouse in the game, it shows the cost time. This may confuse the player.

bisect

  • likley introduced with the introduction of the new civbonus for the Macedonians in [26627]

related ticket

possible solution ?

  • binaries/data/mods/public/gui/reference/viewer/ViewerPage.js

    a b class ViewerPage extends ReferencePage  
    7676
    7777            let researchers = templateLists.techs.get(currentTemplateName);
    7878            if (researchers && researchers.length)
     79            {
    7980                this.currentTemplate.researchedByListOfNames = researchers.map(researcher => getEntityNames(this.TemplateParser.getEntity(researcher, this.activeCiv)));
     81
     82                const {techCostMultiplier} = this.TemplateParser.getEntity(researchers[0], this.activeCiv);
     83                for (const res in this.currentTemplate.cost)
     84                    if (this.currentTemplate.cost[res])
     85                        this.currentTemplate.cost[res] *= techCostMultiplier[res];
     86            }
    8087        }
    8188
    8289        if (this.currentTemplate.builder && this.currentTemplate.builder.length)
#6705 fixed GAIA woman requirement errors Freagarach Langbart
Description

to reproduce

  • start a game with any civ, except Han
  • type exodia 1 or resign immediately
  • select a GAIA woman

errors

ERROR: Error calling component script function ScriptCall
 ERROR: JavaScript error: simulation/helpers/Requirements.js line 124
cmpTechManager is null
  RequirementsHelper.prototype.AllRequirementsMet@simulation/helpers/Requirements.js:124:6
  RequirementsHelper.prototype.AreRequirementsMet@simulation/helpers/Requirements.js:93:14
  GuiInterface.prototype.AreRequirementsMet@simulation/components/GuiInterface.js:667:50
  GuiInterface.prototype.ScriptCall@simulation/components/GuiInterface.js:2130:20
  setupButton@gui/session/selection_panels.js:169:34
  setupUnitPanel@gui/session/unit_commands.js:94:35
  updateUnitCommands@gui/session/unit_commands.js:152:18
  updateSelectionDetails@gui/session/selection_details.js:537:20
  updateGUIObjects@gui/session/session.js:730:2
  onSimulationUpdate@gui/session/session.js:680:2
  __eventhandler54 (SimulationUpdate)@session SimulationUpdate:1:1

bisect

[27245]

possible solution ?

  • binaries/data/mods/public/simulation/helpers/Requirements.js

    a b RequirementsHelper.prototype.AllRequirementsMet = function(template, cmpTechMana  
    121121        if (requirementType === "Techs")
    122122            for (const tech of requirement.split(" "))
    123123                if (tech[0] === "!" ? cmpTechManager.IsTechnologyResearched(tech.substring(1)) :
    124                     !cmpTechManager.IsTechnologyResearched(tech))
     124                    !cmpTechManager?.IsTechnologyResearched(tech))
    125125                    return false;
    126126    }
    127127    return true;
#6707 fixed Animal actor on siege catapult changes color through packing Freagarach Langbart
Description

This issue was reported by Aristippus of Cyrene in the forum

to reproduce

  • start a game with Han, or any other civ that has a catapult
  • unpack it and pack it a couple of times, pay attention to the color of the animal
HAN

MACE

reproducible

  • this has been the case since at least A24 [24937]

possible workaround

  • change the settings to None for Model appearance randomization

expected behaviour

  • the animal actor changes back to its original color instead of choosing a random color
#6724 fixed Requirement tooltip errors for Ptolemaic barracks Freagarach Langbart
Description

to reproduce

  • start map with ptol
  • build && select a Barrack
  • errors
  • the Royal Guard Infantry has two requirements phase_city and unlock_champion_infantry

errors

ERROR: JavaScript error: gui/common/l10n.js line 69
Script value conversion check failed: v.isString() || v.isNumber() || v.isBoolean() (got type undefined)
  translate@gui/common/l10n.js:69:36
  getRequirementsTooltip@gui/common/tooltips.js:975:23
  setupButton@gui/session/selection_panels.js:1051:4
  setupUnitPanel@gui/session/unit_commands.js:94:35
  updateUnitCommands@gui/session/unit_commands.js:152:18
  updateSelectionDetails@gui/session/selection_details.js:537:20
  updateGUIObjects@gui/session/session.js:730:2
  onSimulationUpdate@gui/session/session.js:680:2
  __eventhandler6 (SimulationUpdate)@session SimulationUpdate:1:1
ERROR: Errors executing script event "SimulationUpdate"

bisect

likley [27245]

possible solution

related ticket to requirement feature

#6705

#6727 fixed Rally point relics Freagarach Langbart
Description

to reproduce

  • start a map with some relics
    # command line
    pyrogenesis -autostart-size=128 -autostart="random/mainland" -autostart-victory=capture_the_relic -autostart-reliccount=14
    
  • train a horse in your CivicCenter
  • set the rally point from the CivicCenter to a relic
  • notice the horse will not move to the relic after it has been trained

bisect

#6739 fixed Orange flashing pop counter on cheat code Freagarach Langbart
Description

to reproduce

  • start a map with a civ of your own choice
  • enter gift from the gods
  • select CC and enter salad bowl 200
    • You may have to run the command twice for civs with a large CC like Han/Ptol/Maur
  • notice the pop counter blinks orange
  • delete all units, it still flashes
  • it only stops when producing a new unit
  • minimal replay (~1min)

reproducible

  • does not occur in A25b
  • starts to occur with A26

bisect

(none, likely [26000])

possible solution ?

  • binaries/data/mods/public/simulation/components/Trainer.js

    a b Trainer.prototype.Item.prototype.Spawn = function()  
    304304    }
    305305    if (this.count)
    306306    {
     307        const cmpProductionQueue = Engine.QueryInterface(this.trainer, IID_ProductionQueue);
     308        if (cmpProductionQueue.queue.length)
    307309        cmpPlayer.BlockTraining();
    308310
    309311        if (!this.spawnNotified)
#6744 fixed Negative animal costs and eco points in the summary Freagarach Langbart
Description

to reproduce

  • build a corral
  • make a sheep
  • check summary => score => economy score
  • check summary => resources => gathered/used

reproducible

  • works correctly in Alpha XXI Ulysses [18915]

  • Alpha XXII Venustas [19922] it shows the correct resources, but the economy score shows -5

  • Alpha XXIII [21946] negative eco score and wrong gathered/used

@temple wrote: (26/Nov/17) We keep track of the vegetarian food gathered, so I think the vegetarian ratio is still correct. It can get weird if we train some sheep but don't gather them, since that counts as negative food gathered, so the ratio could be over 100% or even negative in the very early game. But I don't think that's anything to worry about.

  • Phab:rP20543 (concerned raised - 20/Oct/19)

    @elexis wrote: It changes history, once a resource was gathered, it will remain true that the resource was gathered. Therefore the number of resources gathered should be monotonically increasing. Since the economy score is also the number of resources gathered divided by 10, it equally becomes possible to reduce the score over time. Even possible to get negative score by starting the match, training some sheep and not gathering them.

simulation/components/StatisticsTracker.js

Line 
219 if (cmpUnitEntityIdentity.HasClass("Domestic") && costs)
220 {
221 // Subtract costs for sheep/goats/pigs to get the net food gain/use for corralling
222 this.resourcesUsed.food -= costs.food;
223 this.resourcesGathered.food -= costs.food;
224 }

expected behavior

  • gather resource counter never becomes negative
  • no change of the history by subtracting the used resources
  • no negative eco points
#6746 fixed Animal becomes idle for queued garrison Freagarach Langbart
Description

to reproduce

  • build and select two corrals
  • press ctrl while keeping shift pressed, right-click on the first corral and then on the second corral
  • make animals, note that the animal from the first corral does not go into the second corral once the first corral is full

expected behavior

  • animal goes into the second corral and does not become idle
#6750 fixed After queued construction of several fields, woman becomes idle Freagarach Langbart
Description

to reproduce

  • start a game with the Han select at least 4 women and task them to build two rice fields
    • You can also choose another civ, but then you would need 6 women
  • hold the shift key pressed while giving the order
  • when the second field is fully constructed, one woman becomes idle

bisect

[27559]

#6771 fixed Unable to start AI sandbox difficulty from the command line Freagarach Langbart
Description

to reproduce

Line 
12-autostart-ai=PLAYER:AI sets the AI for PLAYER (e.g. 2:petra)
13-autostart-aidiff=PLAYER:DIFF sets the DIFFiculty of PLAYER's AI (0: sandbox, 5: very hard)
14-autostart-aiseed=AISEED sets the seed used for the AI random generator (default 0, use -1 for random)
pyrogenesis -autostart="random/mainland" -autostart-ai=1:petra -autostart-aidiff=1:0 -autostart-player=-1

errrors

0 A.D. (0.0.27) Main log (warnings and errors only)
ERROR: JavaScript error: gamesettings/attributes/PlayerAI.js line 51 Engine.ConfigDB_GetValue is not a function fromInitAttributes@gamesettings/attributes/PlayerAI.js:51:46 fromInitAttributes@gamesettings/GameSettings.js:90:17 AutoStart@autostart/autostart.js:6:17 autostartHost@autostart/entrypoint.js:49:23

Engine exited successfully on 2023-04-01 at 14:38:55 with 423 message(s), 1 error(s) and 0 warning(s).

reproducible

bisect (not tested, just a guess based on previous tickets)

related tickets

#6899 fixed Player kills hostile animal owned by AI - errors about orderData undefined Freagarach Norse_Harold
Description

Summary: If a player kills a wild animal that is hostile and owned by an AI-controlled player then a large amount of warnings and errors appear.

Versions known to be affected: release version alpha 0.0.26, dev a27 version r27624, dev a27 version rc1 r27645.

Expected results: Either it is not possible for the scenario editor to create a map that causes these symptoms, or the errors do not occur when an AI-owned hostile animal is killed.

Actual results: A large amount of warning and error messages appear. Excerpts are attached.

Steps to reproduce the symptoms:

  • Extract the "Flatland with player-owned bears.zip" file to the mods/user/maps/scenarios folder in your 0ad game data folder.
  • Load the scenario "Flatland with player-owned bears". Slot yourself as player 1, and slot 1 AI in the remaining slots.
  • Use the cheat "gift from the gods" (type it in chat) to get p3, a lot of resources, and fast building.
  • Build a stable and produce 50 cavalry.
  • Send the cavalry to attack AI-controlled player 2, toward the east (3 o'clock).
  • After fighting with an AI-controlled opponent and killing one of its bears, the error should appear continuously until the AI player is neutralized.

Computing Environnment (OS brand and version, hardware, relevant driver version and other software versions): The OS I have used for testing is Linux. The problem does not seem to be hardware dependent, as others have observed the same symptoms.

Relevant logs, files that reproduce the symptoms, screenshots, etc.: (attached)

Credits: First reported by seregadushka and Alexandra in this forum post.

#2494 fixed Split the POT file of the public mod in more manageable POTs Adrián Chaves Adrián Chaves
Description

Reasons

We should do this because it makes the life of translators easier:

  • It gives them an implicit context, as each POT will only have strings pertaining to certain areas of the game.
  • It helps them focus on the strings that matter the most. For example, we could have a POT file for GUI strings, and translators could try to keep that at 100% first, before they start working on other translations.

Deciding How to Split

Criteria for the split:

  • We should aim for POT files with less than 1000 strings each.
  • We should try to keep POT files specific to a topic. For example, a POT for the GUI, a POT for map descriptions, a POT for help (e.g. manual), etc.

We should also decide on the barrier for languages to enter the game based on the splitted POT files. Do we want all files to be at 90%? Do we want some at 100%? Do we care if some of them are at 0%, 25%, 50%, or 75%?

Changes to the l10n Folder Structure

In order to avoid having hundreds of files around in the l10n folder, once we split the POT files we should have a subfolder of l10n for each POT file:

  • l10n
    • messages.json
    • public.gui
      • template.pot
      • de.po
    • public.maps
      • template.pot
      • gl.po

As you see, having different folders allows us to use simpler names for the actual POT and PO files, as the subfolders should be enough to ensure that there is no conflict with other mods.

Implementation

Before the Split

  1. Decide which POT files we will have and what content will each of them contain.
  1. Ensure that both the engine (C++) internationalization and our internationalization tools (e.g. message extraction) work OK with subfolders in l10n and the proposed file names.
  1. Create the scripts required for the change:
  • A script to generate the splitted PO files from the existing PO files once the splitted POT files are ready. (See the expected logic below)
  • A script to upload the splitted translations to Transifex.
  1. Announce in Transifex which day this will happen (it can be announced a couple of days before). During the split, we will announce when the process starts (translators should not work on translations from then on) and then announce it once it is finished and translators can start working on the new resources.

Script to Generate Splitted PO Files

Logic in pseudo-code:

for each original PO file:
    for each POT file:
        Copy the PO file into the folder where the POT file is, with the new PO name (e.g. de.po).
        Update the PO file using the POT file. `msgmerge -U de.po template.pot` leaves old translations behind, which we do not want in a split. In https://drupal.org/node/11311 they have a suggestion (--compendium) that might be what we need.

Steps for the Split

  1. Generate the new POT files.
  2. Announce the start of the task in Transifex.
  3. Pull the latest translations from Transifex.
  4. Create the new resources in Transifex.
  5. Run the script to generate the splitted PO files.
  6. Delete the old PO and POT files (locally only).
  7. Add config files (.tx/config) for the Transifex client to the new l10n subfolders that match them to a resource in Transifex.
  8. Run the script that uploads the new PO files to Transifex.
  9. Announce the end of the task in Transifex, as well as the new requirements for translations to be distributed with the game (if there have been changes in this regard).
#2637 fixed tinygettext: collision in add_translation Adrián Chaves Adrián Chaves
Description

Since the split of the translation files, tinygettext throws warnings such as:

tinygettext: collision in add_translation: 'Chalkaspides' -> 'Chalkaspides' vs 'Chalkaspides'

Those warning should only be printed if the transations are different.

#4613 fixed Chart dropdowns contains wrongs values (colored types from common table) Adrián Chaves Vladislav Belov
Description

Look at the image below.

https://trac.wildfiregames.com/raw-attachment/ticket/4613/issue.PNG

Players could think that something is wrong, because they don't see colored types of value. So we need to display just a name, instead of this duplication.

#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.

#1118 fixed Identify, install, and eval a twitter plugin MishFTW Brian Stempin
Description

Discussion thread: http://www.wildfiregames.com/forum/index.php?showtopic=15563

#1128 fixed WP Theming - Rough Body MishFTW Brian Stempin
Description

This ticket is for modifying index.php, home.php, and style.css to create a rough version of our theme. index.php handles things like the page width, background, etc. Once basic CSS, HTML, and PHP are put into place, artwork needs to be identified and requested.

#1129 fixed WP Theming - Rough Header MishFTW Brian Stempin
Description

This ticket is for modifying header.php and style.css to create a rough version of our theme's header. Once basic CSS, HTML, and PHP are put into place, artwork needs to be identified and requested.

#1130 fixed WP Theming - Rough Footer MishFTW Brian Stempin
Description

This ticket is for modifying footer.php and style.css to create a rough version of our theme. Once basic CSS, HTML, and PHP are put into place, artwork needs to be identified and requested.

#1134 fixed Install WP jQuery UI Plugin MishFTW MishFTW
Description

The jQuery User Interface library is now easier to integrate with WordPress via this plugin. Very customizable and a time saver.

#1137 fixed WP Theming - Rough Sidebar MishFTW MishFTW
Description

This ticket is for modifying sidebar.php (to include all widgets and plugins) and call it it in all pages.

#1146 duplicate WP Coding - Create .htaccess file MishFTW MishFTW
Description

Create a .htaccess file on the new site instance. For permalink structure change.

Forum discussion: http://www.wildfiregames.com/forum/index.php?showtopic=15615

#1153 fixed WP Theming - Rough Post MishFTW Brian Stempin
Description

Our rough page is in place, but we now need to make sure that posts display correctly.

#1157 fixed WP Theming - Rough Menus MishFTW Brian Stempin
Description

The menus described in the prototype image are pretty complex. Time to whip out some CSS-FU!

#1175 fixed WP Theming - Rough Download Button MishFTW MishFTW
Description

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

#1221 fixed WP Widget Dev - Revision Log MishFTW MishFTW
Description

Concept has a revision log for the sidebar. Similar to Community Updates. Forum discussion: http://www.wildfiregames.com/forum/index.php?showtopic=15803

#1236 fixed WP Theming - Fine Footer MishFTW MishFTW
Description

Finalize the universal footer with all art and content.

#1240 fixed WP THeming - Final Menus MishFTW Brian Stempin
Description

It's time to finish polishing the menus! We need to add art work, etc.

#1241 fixed WP Theming - Final Image Carousel MishFTW Brian Stempin
Description

Time to polish the image carrousel. Final art adjustments, size adjustments, etc.

#1244 fixed WP Theming - Final Header/Footer MishFTW Brian Stempin
Description

Time to add that last little bit of art work and to take care of any quarks!

#1246 fixed Theme Finalization - Documentation and code cleanup MishFTW Brian Stempin
Description

Once we get towards the end of our 1.0 theme journey, we need to start doing some documentation and cleanup. A wiki page exists for our theme and we should work to populate it. We should also review any code we wrote and make sure that it's fit for public consumption.

#1248 fixed Website Content Creation - Music page MishFTW Brian Stempin
Description

A web dev and one other person should team up to create the Media-> Music page. This will require choosing one of the plugins from the plugin-dev instance, installing it into the content-dev instance, and configuring it in the appropriate place.

#1252 fixed WP Theming - News Template MishFTW MishFTW
Description

Create a template for displaying news, archives, etc as defined here. Modifications to functions.php; style.css; news-page.php;

Forum discussion

#1453 fixed Website Content Creation - Download Page MishFTW MishFTW
Description

Set up and style a page dedicated to downloading the game as described in the page specifications.

#1573 fixed Migrate posts from IP to WP MishFTW Brian Stempin
Description

We don't want to lose all of our front-page content when we move to WP. The task is to migrate the posts from the front page of the current website to the content-dev theme.

#1585 fixed Theme Finalization - Install Cache Plugin MishFTW MishFTW
Description

Wordpress creates a bunch of requests. Although our local images can be sprited, each plugin adds a request. A cache and minify plugin will help alleviate the number or requests, making load time faster.

#1779 worksforme Improve Fallback for no scripts on website MishFTW MishFTW
Description

Currently if scripts are not enabled, there is just a banner. The content is still displayed but can be very problematic and disrupt the layout of the site. So this task will take care of hiding certain content if scripts are disabled.

#1541 invalid Greek Fortress Update Daniel Daniel
Description

Add more details, improve some areas.

Needs current Greek Fortress Mesh and Greek Props, such as shields and weapons.

#325 invalid Arrow Impact - Metal Goblor Matt Sherman
Description

Arrow Impacting Metal SDD# 223

Specifications

MONO
2 Seconds
Non-Looping

12 sounds req'd

#6687 fixed Tooltip trickle food rate for garrisoned animals Grapjas Langbart
Description

description

  • [27244] allowed to garrison domestic animals into the corral to get a resource trickle of food.

problem

The trickle rate per animal (cow, goat, ...) is unclear.

possible solutions

Idea NO.1

Idea NO.2

  • write the trickle rate in the tooltip of the animal template

nitpick

Information about the animals garrisoning in the corral and the free supply of food is described twice.

#2595 fixed [PATCH] Games with cheats enabled must not be rated Jia Henry Jia Henry
Description

There's a bug that you can have cheats enabled and the game is still rated. This means that 1 player can simply cheat and resign the other player to get a higher rating.

I have created a patch which will automatically disable cheats if rate game is enabled and automatically disable rated game if cheats are enabled.

I have attached the SVN diff

#2523 fixed Make skirmish entities more mod friendly Idanwin sanderd17
Description

Currently, to adapt the skirmish entities to a mod that simply adds a civ, you need to copy the skirmish entities to the mod, and adapt a line on each of them.

This breaks loading multiple mods, as they overwrite each others changes.

Instead, it would be better to define a mapping of skirmish replacements in the civ.json files, and let the skirmish replacement component get the info from there (through the player component).

#5395 duplicate Performance problem omar omar
Description

Before telling you about the problem, I would like to tell you that you have created a jewel of a video game.

My problem is performance and I have a low-middle-range PC and when I leave the uppercase pressed the game lagged me a lot and it does not leave me a very pleasant gaming experience. I would like them to do more performance tests and fix the errors. Thank you.

#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.

#3113 fixed [PATCH] Provide information about carried resources of a selection Imarok Kalle Richter
Description

It'd be nice to be an overview of which resources (and eventually how much of it) is carried in sum by a selection of units. This would serve to avoid sending a group of units carrying a valuable amount of resources of one type to collect another type and thus dropping the carried resources.

#3114 fixed [PATCH] Display healing process of garrisoned units Imarok Kalle Richter
Description

It'd be nice to have a display of the health of garrisoned units which are healing and thus allow to monitor that healing process.

#3150 fixed [PATCH] Inconsistent exploration score for teams in summary gui Imarok mimo
Description

In the miscellaneous tab, the map exploration % is correctly computed, taking into account the common part between the different members of the team. But the exploration score displayed in the score tab is a simple sum of the exploration scores of the members of the team: the common explored area should also be taken into account there.

#3216 fixed [PATCH] Add capture statistics to summary screen Imarok sanderd17
Description

Since capturing in SVN, the summary screen with the building stats isn't of big value anymore.

It would be better if the captured and lost buildings would also be shown (in case of lack of space, they could be added to the created and destroyed buildings).

#3339 fixed [PATCH] Command line option for pid+timestamp in OOS-log filename Imarok elexis
Description

If you try to reproduce an out-of-sync error, host a game with one instance, join as a client with the second instance of 0ad and actually manage to produce an out of sync error, then both instances of 0ad will write the ooslog to the same file. Thus one file will be overwritten and you can't diff the files.

attachment:t3255_use_timestamp_and_pid_for_oosdump_filename.patch:ticket:3255 contains a patch that adds the current unix timestamp and process id to the filename and thereby prevents the file from being overwritten.

However since oos dumps are very big (dozens of megabytes) multiple files should only be created if the application was started with a specific command line argument.

#3370 fixed Filter lobby list based on mods Imarok leper
Description

Lobby games should supply their mods when hosting and clients should filter games based on that (or at least color them in some way and issue a warning when trying to join them).

#3433 fixed [PATCH] Fix replay menu loading time by using a cache file Imarok elexis
Description

This problem was reported in ticket:3258#comment:15

Problem: If you open the replay menu, it will read all replay files it finds in the sim_log directory.

While the parsing in C++ is quite optimized (only reads the first and last 5 or so lines) and also the JS & GUI handling is fast enough (half a second for 2500 replays), having to open these files the first time can take up to a minute. This is because the files are scattered around on the harddrive and it needs some mechanical work to locate the files.

After that the files are loaded into the HDD cache and this process only takes milliseconds.

Reproduce: On linux you can drop the HDD cache by executing:

echo 3 | sudo tee /proc/sys/vm/drop_caches

Solution: The correct solution to address this disk I/O problem is to have a custom cache file. This way files will be read only once, ever. (Immediately after the game or when opening the menu and finding new files).

#3436 fixed [PATCH] Replay Menu - singleplayer / multiplayer filter Imarok elexis
Description

It would be nice to filter singleplayer / multiplayer games in the replay menu.

Whether a game is networked should be should to the commands.txt file.

If we continue to display incompatible replays, we should filter those by the turn length, which are 200ms for singleplayer and 500ms for multiplayer.

Feature suggested by Stan.

#3437 fixed Add link from summary screen to replay Imarok elexis
Description

Adding a link to replay the game you just played (or replayed) to the summary screen would be great.

In case the user played a lobby game, it should display a message box confirming that the user wants to leave the lobby. Don't forget to actually end the XmppConnection in that case.

#3491 fixed Map Ping Imarok Stan
Description

It would be nice to have the ability to ping a location on the minimap and/or map and have that ping notify allies and/or enemies ("stay out of this area if you know what's good for you!"), to indicate critical issues.

It would just be a right click on the minimap that would trigger a sound and white concentric circles (could be color coded - red for attack, blue for scout, green to occupy etc). A similar actor could be represented at the location of the ping on the actual map.

Possible additional features

  • Make a ping limit so user cannot spam the command.
  • Make different versions ? So user can give different informations.
  • Differentiate pings of different players.
#3549 fixed Secure authentication - prevent joins as a different player Imarok elexis
Description

The current implementation of the NetServer allows users to join as a different player.

Reproduce:

  1. Alice, bob and carol start a game, (no matter if lobby or rated)
  2. Bob disconnects
  3. Eve notices that there are less players connected than the list displays
  4. Eve tries to join the game, but can't connect as the game already started
  5. Eve clicks on multiplayer -> join. The IP address is the one of alice' game
  6. Eve tries to connect with one of the names (including the rating as that's part of the name)
  7. After some tries, eve successfuly joins as Bob. Carol doesn't know its eve, as even the chat messages indicate it's bob.

The code we need to change for this can be found in CNetServerWorker::AddPlayer:

	// Try to match username next
	for (PlayerAssignmentMap::iterator it = m_PlayerAssignments.begin(); it != m_PlayerAssignments.end(); ++it)
	{
		if (!it->second.m_Enabled && it->second.m_Name == name && usedIDs.find(it->second.m_PlayerID) == usedIDs.end())
		{
			playerID = it->second.m_PlayerID;
			m_PlayerAssignments.erase(it); // delete the old mapping, since we've got a new one now
			goto found;
		}
	}

But notice we have this other TODO in CNetServerWorker::OnAuthenticate:

		// Search for an old disconnected player of the same name
		// (TODO: if GUIDs were stable, we should use them instead)

We might need some secure authentication token, like the jabber ID for lobbied games.

#3561 fixed Summary screen - team totals wrong Imarok elexis
Description

If you have match with a lot of trade, you will see that the value of the team barter efficiency can become bigger than 100%. The percent-values are actually added instead of averaged.

For example if there is a team with two players and they both have 50% barter efficiency, then the team value should display 50% too instead of 100%, which is quite misleading.

#3575 fixed [PATCH] Allow hosting on different UDP ports Imarok elexis
Description

It would be nice to be able to host on different UDP ports.

Once we have dedicated servers (#3556), we could host multiple games simultaneously on a single server with a single IP address.

To be done for this ticket:

  • Hosting players entering the gamesetup in lobbygames need to send the port they use to the lobby server
  • The lobby bot needs to send the port in the gamelist
  • Players that want to join a lobbied game need to use this port when joining

If we could do this in a19, then we could use the dedicated server after the release. Besides allowing users to play that don't find a server to join and can't host (#2305), it would also allow us to switch from a free-for-all lobby to a lobby with only certified hosts. This means that potentially malicious players won't be able to see the IP addresses of other players (they will only be able to see the IPs of the certified hosts, which might be a single wfg server in harsh times).

#3742 fixed [PATCH] Restore selection after replay Imarok elexis
Description

If one replays a game using the replaymenu, the summary screen will appear. If one closes that screen, it will return to the replay menu. It would be ideal if it would not only return there but also restore the selection and sorting order.

Those three variables (selected directory, selected column, sorting order) need to be passed

  • from the replaymenu to the loading screen (reallyStartVisualReplay in replay_actions.js)
  • from the loading screen to the session
  • from the session to the summary screen
  • from the summary screen back to the replaymenu.

Those variables need to be added to the argument of the SwitchGuiPage calls.

#3823 fixed [PATCH] Correctly handle commands for multiple units Imarok Itms
Description

When there are multiple units in the selection, we're facing several problems, which arise from the fact that the GUI uses the first unit of the selection (this first unit being the one with the lowest entity ID).

Problems include:

  • The back-to-work button does not always show up (workaround included in r17880 and reverted afterwards)
  • #2205
  • #3302
  • Building structures when female citizens and soldiers are selected together

and possibly others.

This should be fixed by passing selection instead of unitEntState from unit_commands to selection_panels and change the code depending on that. (comment:8) (One should keep in mind, selection only contains the entity ids, so one has to use GetExtendedEntityState or GetEntityState)

#3841 fixed [PATCH] Ingame player summary screen and allied resource/population tooltips Imarok elexis
Description

1. Ingame player score The ingame summary screen could become available to players, so they can check their own stats (suggested by scythetwirler) and optimize their strategy if desired.

Impact: Players who attempt to benefit ("cheat") from seeing their own score still need to invest time. The score alone doesn't show any more information than what is already available to the player (besides the exact quantities).

2. New tech: Additionally, after researching a new tech at the market (could be a successor the to shared-ally-vision tech aka Cartography), players should be able to see the score of mutual allies. It should always hide the score of enemies. Observers should always be able to see the complete score. A new icon will be needed for the tech.

3. Session GUI tooltips: Once the tech is researched, the player should be able to see the resources and population number of mutually allied players in the tooltips of the session GUI. This way the player doesn't need to open the summary score and can check allied overall state quicker and more frequently.

Impact:

  • Incentivizes team play.
  • Requires a decision from the player whether to invest in the tech or save resources.
  • The neutral diplomacy stance becomes a bit more interesting in diplomacy games (as mutually neutral players don't see the score, but are prevented from attacking each other).
#3911 fixed [PATCH] Make AI Settings visible to players Imarok Imarok
Description

It would be nice if players in the multiplayer gamesetup can see the AI settings but not modify them (as it is made with "More Options")

#3942 fixed [PATCH] Don't show the aiconfig button when unassigned Imarok Imarok
Description

The aiconfig button should not be showed when there is no player or ai assigned to this slot.

#3948 fixed [PATCH] Sheep in summary screen Imarok elexis
Description

The total unit number in the summary screen includes animals, so it is not possible to find out how many females or humans a player owns.

Since everyone looks at the total number of units to estimate the strength of an economy of a player, animals should not be included there.

They could be listed in a another column. This will fit 1280x1024. For 1024x768 the current amount of columns already doesn't fit, so adding one more (with less relevant stats like this one) might be okay, especially since there will be scrolling sometime.

#4167 fixed [PATCH] Colorize selected units in observermode Imarok elexis
Description

If a client is in observermode all units become selectable. Thus it is not possible to distinguish which units are owned by which player (especially if they have the identical unit type).

The selection panel should show which units are owned by which player by (1) grouping the units by playerID (2) adding a border in the playercolor (same as in r18362)

#4230 fixed Options warning: incompatible value for WaterUgly Imarok Vladislav Belov
Description

If reset all options to default and ugly water enabled then next warning appears after reloading: warning: Incompatible renderer option value for WaterUgly

It's printed by gui/options/options.js

if (Engine["Renderer_Get" + keyRenderer + "Enabled"]() !== checked)
{
	warn("Incompatible renderer option value for " + keyRenderer);
	Engine["Renderer_Set" + keyRenderer + "Enabled"](checked);
}

I think it happens because () !== checked not inverted for invertedboolean type, but I'm not sure yet.

#4251 fixed [PATCH] Paired techs don't work with the multiple commands handling Imarok Itms
Description

Reported here: https://wildfiregames.com/forum/index.php?/topic/21145-latest-commit-breaks-paired-techs/

In 0ad without mods, there is the paired techs for walls and Seleucids have also paired techs in fortress, if you want to test that.

#4261 fixed NetClient FSM error when pausing while others are loading Imarok elexis
Description

If a multiplayergame starts, one client having finished the loading screen and pausing while the others are still loading (or synchronizing?), the following error occurs for that loading client and it doesn't show the pause overlay to the client once it's finished:

Net client: Error running FSM update (type=21 state=6)

type 21 is NMT_CLIENT_PAUSED, state 6 is NCS_LOADING (can perhaps occur with NCS_JOIN_SYNCING too)

Error message reported by siole. I could not reproduce this issue locally (since the two instances load simultaenously, and since rejoins seem properly implemented), but it occured in two games for multiple clients (on caledonian meadows, which is a slow loading map). The pause packet was introduced in r18204, #1950.

  • NMT means NetMessageType and is defined in NetMessages.h
  • NSS means NetServerSessionState and is defined in NetServer.h
  • NCS means NetClient state and is defined in NetClient.h
#4264 fixed [PATCH] Fix training tooltip with multiple selection Imarok Imarok
Description

first bug: select 1 barrack: train time is 10; select 2 barracks: train time is 18 second bug: the train costs weren't displayed correctly for units with an training limit > 1 but < ∞ (to reproduce: set hero limit to 7, select two hero train buildings -> the tooltip and button caption shows the same as for one building)

patch: https://github.com/imarok/0ad/tree/multiple_batch_time

#4273 fixed [PATCH] Make g_EntityCommands use all entities but not only the first Imarok Imarok
Description

patch: https://github.com/0ad/0ad/compare/master...Imarok:3823_multiple_selection_followup

#4292 fixed [PATCH] Remove deprecated water parameters Imarok Imarok
Description

As stated here: https://github.com/0ad/0ad/blob/3bf098b1bf47e313c0d2bd952812cc365fd9ec93/source/graphics/MapReader.cpp#L752 the parameters LightingModel, Shininess, ReflectionTint and ReflectionTintStrength are deprecated. So they should be removed together with all their occurences.

#4294 fixed [PATCH] No retries with the SimpleGroup placer Imarok elexis
Description

On some maps we can notice that the random map placement algorithm just doesn't place the resources we want it to place, even when passing gazillions of retries.

This can be noticed with metal on the map latium or fish on the map corinthian isthmus.

The reason for that being the retry loop used by createObjectGroups and createObjectGroupsByAreas of placer.js being broken if a SimpleGroup or a RandomGroup is passed, because these functions just return true or false while all other place functions return an array or undefined. The retry loop needs the array to decide how often it has to retry.

The bug exists at least since alpha 19, most likely since the introduction of these functions.

Unfortunately this means that many resource amount numbers in random map scripts are wrong as they hid the bug by increasing the amount of res, leaving us to rebalance all maps.

#4302 fixed [PATCH] Disable right-click playercommands to observers Imarok elexis
Description

While all buttons are disabled to observers, the rightclick actions in input.js miss an observer check. It still tries to execute the command when switching the playerperspective, thus f.e. play the soundfile of units moving, or setting the rallypoint visually, while posting the sim command silently fails.

#4328 fixed [PATCH] Linear splash damage for bolt shooters Imarok elexis
Description

Bolt shooters should have linear splash damage, thus being able to hit multiple units with one shot, making the bolt shooter more realistic and useful to the player.

#4360 fixed HWDetect for AMD Ryzen CPUs triggers Assertion failed: "cache.Validate()" Imarok c
Description

Hi, I'm running the game on my debian setup triggers various errors. I first reported the problem on Debian's BTS (link). I thought the crash was total, but I can run the game to a certain point.

Please find attached (bubu2.log) what I managed to get with gdb. I didn't "continue" but exited on 1st error. I'm getting various backtraces depending on the way I proceeded so hopefully this one is the good one.

#4369 fixed [PATCH] Force ready gamesetup button Imarok elexis
Description

Multiplayer games with more than 10 clients take a considerable amount of effort and chat to setup.

Some players do not care about the gamesettings but accept all terms and conditions to play, thus become annoyed by having to click ready repeatedly or otherwise being forced to follow the chat.

There could be a new "Stay ready" button in the gamesetup that is only visible or enabled if the "I'm ready" button is clicked.

#4375 fixed Display which clients are still in the loading screen Imarok elexis
Description

When a multiplayergame has finished the gamesetup phase, clients will load the map. Few clients are loading significantly slower, so often people ask in the chat who is missing.

Instead we could show a message (for example in the network warning panel) who is still missing.

Network implementation: Whenever CheckGameLoadStatus of NetServer.cpp is called, the server noticed that a client has finished the loading sceen and could thus broadcast a message to the other clients.

The existing LoadedGame message defined in NetMessages.h can be extended. The message type is currently only used when the client informs the server of having finished the loading screen, and used when the server informs the clients that all clients have finished.

So the type can receive a new GUID argument that is empty in the current use cases and gets the GUID in the new use case.

functions_global_object.js sets the network warning panel.

#4410 fixed [PATCH] Don't say late observers are rejoining Imarok Imarok
Description

When a late observer joins It says: Player is starting to rejoin and Player has rejoined. excpected: s/rejoin/join

#4423 fixed [PATCH] Gamesetup - Hide mapfilter choices if there are no maps matching the filter Imarok fatherbushido
Description

When trying to load a random map of new maps, I got:

WARNING: JavaScript warning: gui/gamesetup/gamesetup.js line 1261 reference to undefined property Engine.GetGUIObjectByName(...).list_data[(Math.floor(...) + 1)]

WARNING: JavaScript warning: Script value conversion check failed: v.isString()
v.isNumber() (got type undefined)

ERROR: File 'maps/random/undefined' does not exist ERROR: CMapGeneratorWorker::Run: Failed to load RMS 'maps/random/undefined'

#4425 fixed Rallypoint on huntable animals broken Imarok elexis
Description

When setting a rallypoint on a huntable animal like chicken or deer, the trained unit moves to the animal and heads back to the building instead of killing and gathering.

Bug reported by Hannibal Barca.

#4452 fixed Unintended "Host is ready" chat message Imarok elexis
Description

The host is always considered to be ready (as he/she decides to start the game and thus implied to be ready). The "player is ready!" chat message should be seen if and only if the player has clicked the ready button. Therefore there should be no "host is ready!" chat message. After r18322, but not before sometimes, clients observed it though.

Imarok could reproduce the issue by

  1. Start a host
  2. Enter the gamesetup with a second client and press ready
  3. Enter the gamesetup with a third client

The second client will see the "host is ready" message while the host doesn't see it.

If the a client clicks ready and another client joins, the message is seen again for all clients but not the host.

Furthermore the "ready" button of the client that clicked it still says "I'm not ready!", despite the fact of a ready reset and while the playername is not highlighted in green (which represents readiness).

#4498 fixed [PATCH] Add spies to the summary screen Imarok elexis
Description

As proposed in https://wildfiregames.com/forum/index.php?/topic/21704-spy-trader/&page=2#comment-327768 we could have an entry in the summary screen under Miscellaneous displaying the number of successful bribes.

#4501 fixed Undefined player in the lobby match information Imarok Imarok
Description

As some skirmish (and scenario?) maps have no playername property set, this player shows up as undefined in the lobby information. This should probably fixed in gamesetup.

#4552 fixed Show summary graphs for team scores Imarok Imarok
Description

We should show the graphs for team scores in the summary. refs #3403

#4555 fixed Remember selected graphs when switching tabs in summary Imarok Imarok
Description

When switching tabs in the summary we should remember and restore the selected graphs.

#4620 fixed Undefined player.sequences.time when instantly winning a rated game Imarok elexis
Description

Getting this stack when winning a rated game on the first turn (for example by both players being in the same team). It doesn't matter if there is a second client or not:

WARNING: JavaScript warning: gui/session/session.js line 1577
reference to undefined property player.sequences.time
ERROR: JavaScript error: gui/session/session.js line 1577
TypeError: player.sequences.time is undefined
  reportGame@gui/session/session.js:1577:7
  playerFinished@gui/session/session.js:548:3
  g_NotificationsTypes.won@gui/session/messages.js:334:3
  handleNotifications@gui/session/messages.js:541:4
  onSimulationUpdate@gui/session/session.js:804:2
  selectViewPlayer@gui/session/session.js:510:2
  __eventhandler221 (selectionchange)@viewPlayer selectionchange:0:1
  init@gui/session/session.js:321:87
  reallyStartGame@gui/loading/loading.js:102:2
#4767 fixed Use the mouse wheel to adjust the batch size Imarok Imarok
Description

It would be nice to temporarily adjust the batch size with the mouse wheel. (This is mainly a reminder ticket for my self)

#4789 fixed Crash on Slackware 14.2 Imarok Itms
Description

From http://irclogs.wildfiregames.com/2017-09/2017-09-24-QuakeNet-%230ad.log, around 10:31.

Apparently the issue has been reproduced by the Slackware maintainer (whom we should add to the list of package maintainers to ping upon release, by the way). There is an actual trace provided but the funky things happen in the constructor so I'd say it would be easier to try to reproduce than to try to guess what happens.

Starting program: /shared/0/0ad-0.0.22-alpha/binaries/system/pyrogenesis_dbg

Program received signal SIGSEGV, Segmentation fault.

#0  0xb6672805 in std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::basic_string(std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&) () from /usr/lib/libstdc++.so.6

#1  0x08155113 in Path::Path (this=0xbfffee84) at ../../../source/lib/path.h:77

#2  0x084b3b29 in CmdLineArgs::GetArg0 (this=0x8ce2850 <g_args>) at ../../../source/ps/GameSetup/CmdLineArgs.cpp:92

#3  0x084b1f0e in Paths::Paths (this=0xbffff014, args=...) at ../../../source/ps/GameSetup/Paths.cpp:35
        subdirectoryName = 0xbfffef84 "\260\205\071\266\324J\235\b"

#4  0x0851a6ad in VisualReplay::GetDirectoryName () at ../../../source/ps/VisualReplay.cpp:48
        
#5  0x0851e645 in __static_initialization_and_destruction_0 (__initialize_p=1, __priority=65535) at ../../../source/ps/VisualReplay.cpp:43

Note that there is a separate ticket for building on Slackware-current.

#5005 fixed Show rank icon above status bars Imarok Imarok
Description

https://i.imgur.com/NpK6KVK.png

#5044 fixed Command-line replay complains about mods Imarok elexis
Description

When doing a non-visual replay we get this error:

WARNING: JavaScript warning: Script value conversion check failed: v.isString() || v.isNumber() (got type object)
WARNING: The mod 'public,0.0.23' is required by the replay file, but wasn't passed as an argument!
WARNING: The mod 'mod' wasn't used when creating this replay file, but was passed as an argument!
WARNING: The mod 'public' wasn't used when creating this replay file, but was passed as an argument!
#5132 fixed "You have been attacked by" hint the location Imarok Imarok
Description

It would be nice if the "You have been attacked by" messages were clickable. On click they would move the camera to the location the attack has taken place. (It often occurs, that a player gets such message, but doesn't know it's origin.)

#5412 fixed HardwareDetection - AMD processor - ACPI SRAT table contains unknown APIC IDs Imarok Drain
Description

I am on Windows 7 and when I want to execute 0ad, I get an error message containing the following: (I will also attach the crashlog to this ticket.)

Function call failed: return value was -100010 (Logic error in code)
Location: apic.cpp:121 (IndexFromApicId)

Call stack:

IndexFromApicId (apic.cpp:121)
    apicIds = 0x014DBA64 -> [8] { 0 (0x00), 1 (0x01), 2 (0x02), 3 (0x03), 8 (0x08), 9 (0x09), 10 (0x0A), 11 (0x0B) }
    apicId = 4 (0x04)

ProcessorFromApicId (apic.cpp:131)
    apicId = 4 (0x04)

ExtractProximityDomainsFromSRAT (wnuma.cpp:236)
    srat = 0x00000000
    proximityDomainNumber = 0 (0x00000000)

InitTopology (wnuma.cpp:277)
    proximityDomains = (unsupported map<size_t,ProximityDomain >)

ModuleInit (module_init.cpp:47)
    initState = 0x014D9B0C -> 4294867266 (0xFFFE7942)
    init = 0x013B14E0 -> (InitTopology)

numa_NumNodes (wnuma.cpp:297)

RunHardwareDetection (hwdetect.cpp:313)
    LINE_202_ = 
        m_t0 = 0.963197 (0x3FEED2826A286D36)
        m_description = 0x0145EB84 -> "RunHardwareDetection"

    rq = 
        mContext = 0x0639CA40 -> (JSContext)

    global = 
        { 
                (js::ValueOperations<JS::Rooted<JS::Value> >)
 }
        stack = 0x81818080 -> (unavailable - internal error)

        prev = 0x83838282 -> 
            (js::RootedBase<void *>)
            stack = (unavailable - internal error)

            prev = (unavailable - internal error)

            ptr = (unavailable - internal error)


        ptr = 
            data = 
                asBits = -8680821844409482108 (0x8787868685858484)
                s = { payload = 
                        i32 = 2240119940 (0x85858484)
                        u32 = 2240119940 (0x85858484)
                        boo = 2240119940 (0x85858484)
                        str = 0x85858484 -> (JSString)
                        sym = 0x85858484 (see above)
                        obj = 0x85858484 (see above)
                        cell = 0x85858484 (see above)
                        ptr = 0x85858484 (see above)
                        why = -2054847356
                        word = 2240119940 (0x85858484)
                        uintptr = 2240119940 (0x85858484)
, tag = -2021161338 }
                asDouble = -2.17437e-272 (0x8787868685858484)
                asPtr = 0x85858484 (see above)



    caps3 = 2139061886 (0x7F7F7E7E)
    un = 
        sysname = "Win7"
        nodename = "STEFAN-PC"
        release = "SP 1"
        version = "6.1.7601"
        machine = "x86"

    file = 
        m_Buffer = (shared_ptr<unsigned char>)
        m_BufferSize = 12383 (0x0000305F)

    code = (unsupported basic_string<char,char_traits<char> >)
    tmpVal = 
        { 
                (js::ValueOperations<JS::Rooted<JS::Value> >)
 }
        stack = 0x8D8D8C8C -> (unavailable - internal error)

        prev = 0x8F8F8E8E -> 
            (js::RootedBase<void *>)
            stack = (unavailable - internal error)

            prev = (unavailable - internal error)

            ptr = (unavailable - internal error)


        ptr = 
            data = 
                asBits = -7812739770352562032 (0x9393929291919090)
                s = { payload = 
                        i32 = 2442236048 (0x91919090)
                        u32 = 2442236048 (0x91919090)
                        boo = 2442236048 (0x91919090)
                        str = 0x91919090 -> (JSString)
                        sym = 0x91919090 (see above)
                        obj = 0x91919090 (see above)
                        cell = 0x91919090 (see above)
                        ptr = 0x91919090 (see above)
                        why = -1852731248
                        word = 2442236048 (0x91919090)
                        uintptr = 2442236048 (0x91919090)
, tag = -1819045230 }
                asDouble = -2.27107e-214 (0x9393929291919090)
                asPtr = 0x91919090 (see above)



    caps0 = 2105375868 (0x7D7D7C7C)
    scriptInterface = 
        m_CxPrivate = { pScriptInterface = 0x0028E850 -> 
                m_CxPrivate = { pScriptInterface = 0x0028E850 (see above), pCBData = 0x97979696 }
                m = (unique_ptr<ScriptInterface_impl,default_delete<ScriptInterface_impl> >)
                m_rng = 0x9B9B9A9A -> 
                    lcf = 
                        _x = (unavailable - internal error)



                m_CustomObjectTypes = (unsupported map<basic_string<char,char_traits<char> >,ScriptInterface::CustomType >)
, pCBData = 0x97979696 (see above) }
        m = (unique_ptr<ScriptInterface_impl,default_delete<ScriptInterface_impl> >)
        m_rng = 0x9B9B9A9A (see above)
        m_CustomObjectTypes = (unsupported map<basic_string<char,char_traits<char> >,ScriptInterface::CustomType >)

    settings = 
        { 
                (js::ValueOperations<JS::Rooted<JS::Value> >)
 }
        stack = 0x0639CA74 -> 0x0028E86C -> 
            (js::RootedBase<void *>)
            stack = 0x0639CA74 (see above)
            prev = 0x00000000
            ptr = 0x05461A60

        prev = 0x00000000
        ptr = 
            data = 
                asBits = -515307595168 (0xFFFFFF8805461A60)
                s = { payload = 
                        i32 = 88480352 (0x05461A60)
                        u32 = 88480352 (0x05461A60)
                        boo = 88480352 (0x05461A60)
                        str = 0x05461A60 (see above)
                        sym = 0x05461A60 (see above)
                        obj = 0x05461A60 (see above)
                        cell = 0x05461A60 (see above)
                        ptr = 0x05461A60 (see above)
                        why = 88480352
                        word = 88480352 (0x05461A60)
                        uintptr = 88480352 (0x05461A60)
, tag = -120 }
                asDouble = -1.#QNAN (0xFFFFFF8805461A60)
                asPtr = 0x05461A60 (see above)



    caps2 = 2307491976 (0x89898888)
    caps1 = 2341177994 (0x8B8B8A8A)

InitGraphics (gamesetup.cpp:1004)
    args = (unavailable)
    flags = (unavailable)
    installedMods = (unavailable)
    profilerGPUEnable = (bool)0x65
    setup_vmode = (bool)0x77
    context = [2048] 
        0 (0x00)
        80 (0x50)
        4 (0x04)
        0 (0x00)
        0 (0x00)
        240 (0xF0)
        255 (0xFF)
        118 (0x76)
        240 (0xF0)
        0 (0x00)
        252 (0xFC)
        118 (0x76)
        0 (0x00)
        0 (0x00)
        0 (0x00)
        0 (0x00) ...
    buf = [500] 
        27694
        29934
        61809
        29935
        740
        0
        5788
        0
        4388
        0
        62464
        40 ('(') ...
    context = [2048] 
        0 (0x00)
        80 (0x50)
        4 (0x04)
        0 (0x00)
        0 (0x00)
        240 (0xF0)
        255 (0xFF)
        118 (0x76)
        240 (0xF0)
        0 (0x00)
        252 (0xFC)
        118 (0x76)
        0 (0x00)
        0 (0x00)
        0 (0x00)
        0 (0x00) ...
    context = [2048] 
        0 (0x00)
        80 (0x50)
        4 (0x04)
        0 (0x00)
        0 (0x00)
        240 (0xF0)
        255 (0xFF)
        118 (0x76)
        240 (0xF0)
        0 (0x00)
        252 (0xFC)
        118 (0x76)
        0 (0x00)
        0 (0x00)
        0 (0x00)
        0 (0x00) ...
    rq = 
        mContext = 0x000007A0

    setup_gui = (bool)0x20
    data = 
        { 
                (js::ValueOperations<JS::Rooted<JS::Value> >)
 }
        stack = 0x00000000
        prev = 0x00000000
        ptr = 
            data = 
                asBits = 1996226560 (0x0000000076FC0000)
                s = { payload = 
                        i32 = 1996226560 (0x76FC0000)
                        u32 = 1996226560 (0x76FC0000)
                        boo = 1996226560 (0x76FC0000)
                        str = 0x76FC0000 -> (JSString)
                        sym = 0x76FC0000 (see above)
                        obj = 0x76FC0000 (see above)
                        cell = 0x76FC0000 (see above)
                        ptr = 0x76FC0000 (see above)
                        why = 1996226560
                        word = 1996226560 (0x76FC0000)
                        uintptr = 1996226560 (0x76FC0000)
, tag = 0 }
                asDouble = 9.86267e-315 (0x0000000076FC0000)
                asPtr = 0x76FC0000 (see above)



    scriptInterface = (shared_ptr<ScriptInterface>)
    e = 0x00000001

RunGameOrAtlas (main.cpp:632)
    argc = 1 (0x00000001)
    argv = 0x002B0008 -> 0x002B0028 -> "C:\Users\Stefan\AppData\Local\0 A.D. alpha\binaries\system\pyrogenesis.exe"
    replayFile = 
        path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
        separator = 47 ('/')

    modsToInstall = (unsupported vector<Path >)
    scriptEngine = 
        (Singleton<ScriptEngine>)
        m_Runtimes = (unsupported list<JSRuntime const * >)

    args = 
        m_Args = (unsupported vector<pair<CStr8,CStr8> >)
        m_Arg0 = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 92 ('\')

        m_ArgsWithoutName = (unsupported vector<CStr8 >)

    res = 2.86287e-010 (0x3DF3AC6964BA1217)
    modPath = 
        path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
        separator = 60713

    paths = 
        m_root = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 2047

        m_rdata = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 16385

        m_gameData = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 0

        m_userData = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 13319

        m_config = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 15232

        m_cache = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 19712

        m_logs = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 312


    replay = 
        m_Stream = 0x3DF3AC69 -> (basic_istream<char,char_traits<char> >)

    mod = 
        path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
        separator = 31792

    zip = 
        path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
        separator = 0

    mods = (unsupported vector<CStr8 >)
    paths = 
        m_root = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 13409

        m_rdata = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 11

        m_gameData = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 15300

        m_userData = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 56488

        m_config = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 63336

        m_cache = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 63364

        m_logs = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 0


    builder = 
        m_VFS = (shared_ptr<IVFS>)
        m_Files = (unsupported vector<Path >)
        m_TempDir = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 52533

        m_NumBaseMods = 6095160 (0x005D0138)

    installedMods = (unsupported vector<CStr8 >)
    installer = 
        m_VFS = (shared_ptr<IVFS>)
        m_ModsDir = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 0

        m_TempDir = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 0

        m_CacheDir = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 160

        m_InstalledMods = (unsupported vector<CStr8 >)

    paths = 
        m_root = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 13409

        m_rdata = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 11

        m_gameData = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 15300

        m_userData = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 56488

        m_config = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 63336

        m_cache = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 63364

        m_logs = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 0



SDL_main (main.cpp:680)
    argc = 1 (0x00000001)
    argv = 0x002B0008 (see above)

main_utf8 (sdl_windows_main.c:126)
    argc = 1 (0x00000001)
    argv = 0x002B0008 (see above)

wmain (sdl_windows_main.c:151)
    argc = 1 (0x00000001)
    wargv = 0x0062BCA8 -> 0x0062BCB0 -> 67 (0x0043)
    wenvp = 0x0062D510 -> 14800 (0x39D0)
    argv = 0x002B0008 (see above)
    retval = 0 (0x00000000)
    i = 1 (0x00000001)

CallStartupWithinTryBlock (wseh.cpp:364)
    ret = 0 (0x00000000)

RtlInitializeExceptionChain (:0)

RtlInitializeExceptionChain (:0)


errno = 0 (No error reported here)
OS error = 0 (no error code was set)
#5608 fixed Add a hotkey to see the last alarm position Imarok Stan
Description

Currently when attacked you have no way to quickly go there. With a hotkey one could just press spacebar for instance and go there.

Reported here https://wildfiregames.com/forum/index.php?/topic/27053-request-battle-sounds/

This will be helped with #3491

#5620 fixed UserReporter thread always uses max CPU resources since r22772 Imarok Imarok
Description

Since r22772 the UserReporter worker thread always uses the maximum CPU resources though occupying a whole virtual core.

#5695 fixed Middle mouse button get stuck Imarok Stan
Description

When playing a game today with Freagarach, I noticed the middle mouse button get stuck quite often for some reason, might be r23505

Steps to reproduce:

  • Press the middle mouse button.
  • Drag until your cursor is over the minimap or any GUI element.
  • Release the middle mouse button.
  • Notice it's still enabled.
#5782 fixed Opening the summary as gaia throws errors Imarok Imarok
Description

To reproduce:

  • Start game
  • Change perspective to Gaia
  • Open the summary
#5924 fixed Game speed multiplier sometimes outside overlay box Imarok Imarok
Description

When you start a game with speed multiplier 1 and then change it the multiplier will be displayed outside the overlay box (first noticed by Freagarach): https://i.ibb.co/Kq0c1jV/Bildschirmfoto-von-2021-01-16-18-02-00.png

It did not happen on A23 because there the multiplier was displayed on the same line as the gameduration.

#5926 fixed Game speed button unusable in min resolution Imarok Imarok
Description

When one observes a player the follow button text overlays the game speed button so the game speed button gets unusable: https://i.ibb.co/K7s52Qn/screenshot0094.png

It worked in A23: https://i.ibb.co/7QL4rSh/screenshot0093.png

#5973 fixed Segfault by spamming the minimap location Imarok Stan
Description

Reproductible in A23B and A24. When loading a game, if you spam the area where the minimap should be, if you do it enough you can get the game to crash as it triggers a reading access violation.

>	[Cadre en ligne] pyrogenesis.exe!CVector3D::{ctor}(float) Ligne 39	C++
 	pyrogenesis.exe!CMatrix3D::GetIn() Ligne 281	C++
 	[Cadre en ligne] pyrogenesis.exe!CMiniMap::GetAngle() Ligne 236	C++
 	pyrogenesis.exe!CMiniMap::GetMouseWorldCoordinates(float & x, float & z) Ligne 217	C++
 	pyrogenesis.exe!CMiniMap::FireWorldClickEvent(int button, int __formal) Ligne 247	C++
 	pyrogenesis.exe!CMiniMap::HandleMessage(SGUIMessage & Message) Ligne 149	C++
 	pyrogenesis.exe!IGUIObject::SendMouseEvent(EGUIMessageType type, const CStr8 & eventName) Ligne 403	C++
 	pyrogenesis.exe!CGUI::HandleEvent(const SDL_Event_ * ev) Ligne 181	C++
 	pyrogenesis.exe!CGUIManager::HandleEvent(const SDL_Event_ * ev) Ligne 311	C++
 	pyrogenesis.exe!gui_handler(const SDL_Event_ * ev) Ligne 53	C++
 	pyrogenesis.exe!in_dispatch_event(const SDL_Event_ * ev) Ligne 63	C++
 	pyrogenesis.exe!PumpEvents() Ligne 249	C++
 	pyrogenesis.exe!Frame() Ligne 394	C++
 	pyrogenesis.exe!RunGameOrAtlas(int argc, const char * * argv) Ligne 685	C++
 	pyrogenesis.exe!SDL_main(int argc, char * * argv) Ligne 736	C++
 	[Code externe]	
 	pyrogenesis.exe!CallStartupWithinTryBlock() Ligne 365	C++
 	[Code externe]	
 	kernel32.dll![Les frames ci-dessous sont peut-être incorrects et/ou manquants, aucun symbole chargé pour kernel32.dll]	Inconnu

#5998 fixed Errors when selecting the Persian Phoenician trireme Imarok wraitii
Description
ERROR: JavaScript error: globalscripts/Templates.js line 519
	template is undefined
	  GetTechnologyBasicDataHelper@globalscripts/Templates.js:519:4
	  GetTechnologyDataHelper@globalscripts/Templates.js:537:40
	  GetTechnologyData@gui/session/session.js:236:41
	  getRequiredTechnologyTooltip@gui/common/tooltips.js:873:32
	  setupButton@gui/session/selection_panels.js:986:4
	  setupUnitPanel@gui/session/unit_commands.js:94:35
	  updateUnitCommands@gui/session/unit_commands.js:152:18
	  updateSelectionDetails@gui/session/selection_details.js:513:20
	  updateGUIObjects@gui/session/session.js:673:2
	  onTick@gui/session/session.js:601:3
	  __eventhandler284 (Tick)@session Tick:1:1</p>
#6041 fixed Right click on batch order while holding the shift key Imarok Langbart
Description

For example, if you place a batch order to produce women in your civic center and right-click on the women icon before releasing the SHIFT key, you cannot issue any more commands in the game also the batch is paused. You must press SHIFT before issuing orders again. See image below for more clarity.

This error can be reproduced in A23b

#2455 fixed Texture System Update IronNerd IronNerd
Description

This is a precursor to changes in OglTex that will be required for the OpenGL 2 update.

The change is mostly refactoring to make the interface more consistent with the rest of the project, but it has some incidental improvements. Free is automatically called in the destructor, making it harder to accidentally leak memory and requiring a mild update to the get_average_colour function. Some sections of code have been made shorter or more readable by the update.

This will probably be due for another (smaller) revisit mid-way through the renderer update, sometime after cubemaps have native support and external references to member variables have been mostly reduced to the codecs.

#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?

#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).

#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...

#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()
#1257 fixed [PATCH] move the banner of spawn point along with the unit Itms Евгений
Description

If I set a spawn point of any buildings on unit that can transport people(like Aries), and move this units, the banner of spawn point not move, but people from this buildings will continue to go to the Aries. This can be confusing. Need to move the banner along with the Aries.

#1259 fixed Selected units that can't reach each other won't move when tasked Itms Евгений
Description

In some cases (as in the screenshot) units do not move anywhere, if I give them order to move. This occurs when the difficult terrain between the units. Sometimes the units begin to move (when they are closer), but only after a few seconds (up to ten). If I give order to attack (or gather resources), they immediately move towards the enemy (or resource).

Screenshot: http://i.imgur.com/qBZW6.jpg

Game version: Alpha 9 Ides of March. My PC: Windows 7 Ultimate, 64-bit

(Service Pack 1), AMD Phenom(tm) 9850 Quad-Core Processor 2.49 GHz, GeForce? GTX 260 (driver version 295.73), (two monitors 1920x1200, 1440x900), 4 Gb RAM.

#1366 fixed [PATCH] Unit deaths inside the Fog of War Itms michael
Description

It would be nice to be able to see your soldier(s) die in the Fog of War (FoW), instead of the current behavior where they instantly disappear when they die.

#1518 wontfix Submit premake modifications to upstream Itms leper
Description

We bundle a modified version of premake 4.3 to create our workspaces (VS projects, makefiles, ...).

Some of our modifications are bug fixes (relative paths, precompiled headers), enhancements (cxxtest support, nasm support) or extensions to upstream features (os_getversion support for POSIX sytems (os_getversion is a backport from premake-4.4-beta4)).

It would be nice to

  • submit these modifications to upstream by adding a pull request there. See the premake contribution guidelines for information on how to submit patches.
  • add diff/patch files and a readme describing the use of the modification to the premake dir (analogous to how we handle nvtt modifications). (could be useful for the first task)

The attached file is a diff against the imported premake version (see link above) before r11970.

#1589 fixed [PATCH] Add access to entity templates for RMGEN/RMS Itms FeXoR
Description

Untill now there is no way to access the entity templates data from RMGEN area of code. Some things could be done much more tidy if there where (like placing walls, avoid placing chickens inside the civil centres obstruction etc.). I have really no idea how to do this so I open a ticket for it.

#1756 fixed Long/Tile Pathfinder Rewrite Itms Kieran P
Description

For continuing Philip's pathfinder work. For the short-range pathfinder rewrite, see #1942.

See the following posts for progress so far:

Also pathfinder.pdf for some concepts of the new pathfinder design.

#1914 fixed Units often refuse to mine metal and stone Itms Pippijn van Steenhoven
Description

Since alpha 13, worker units sent to mine metal and stone now, more often than not, move to the mine, but then stop and just stand there. It happened with the metal mine on a generated map and both types of mines on Death Canyon 3.

#2013 fixed Sahel watering holes contains animals in deep water. Itms Josh
Description

I received a report that when attacking animals and the animals flee till they are on water, after they die they are un-gatherable from. (sahel watering holes, scenario version) My suggested fix would be adding a check for gatherer accessibility when the animal dies and if it is not accessible move it to accessible land. Screenshot : http://www.rhizogen.es/~ac/vrac/bugreports/animalsinwater0052.png

#2116 fixed [PATCH] Allow resetting splash screen Itms historic_bruno
Description

Currently, there is a boolean splashscreenenable config option that allows the user to not see the "splash screen" at startup. That's fine if the content of the splash screen never changes, but if we want to post an update in a new release, it would be more flexible to have an integer value to compare instead of a boolean. (Even more flexible would be a way to stream news and content into the game e.g. notifying of a new release, and maybe we should think about that for the future)

#2154 fixed [PATCH] Add an alert button (kind of Town Bell) Itms Itms
Description

This feature works like this :

  • A new component, named AlertRaiser, allows for example CCs to sound the alarm
  • The alert is effective just in a range which can be adjusted in AlertRaiser (I chose initial territory extension for CCs, which are for the moment the only template implementing this component)
  • The alarm can be triggered in 'yellow alert' (ie. normal mode) and all female citizens look for a place to garrison. Then, one can trigger the 'end of alert', or pass into 'red alert', in that case all units try to garrison
  • The feature uses the back to work behaviour when the alert ends.
  • The End of Alert is effective across the entire map, but ungarrisons only the units garrisoned by the ungarrisonning AlertRaiser

I need artwork for the feature, please visit these posts : http://www.wildfiregames.com/forum/index.php?showtopic=17703 http://www.wildfiregames.com/forum/index.php?showtopic=18000

#2206 fixed [PATCH] Improve the "back to work" behaviour Itms Itms
Description

This patch allows units to remember a queue of work orders, and not a single one (useful for instance when constructing several buildings).

It also reduces the code and makes the button show up only when it's necessary (thanks mimo !)

The back-to-work button now also works for formations and its members.

#2271 fixed Support VC++ 2013 Itms historic_bruno
Description

Known issues:

  • Build Boost libs for VC++ 2013
#2342 fixed Auto garrison units produced during an Alert Itms Itms
Description

During an Alert, newly trained units should be put under alert if the level of alert is high enough.

There is also a bunch of bugs to correct with the feature.

#2353 fixed [PATCHES] Multiple Town Bell defects Itms Michael
Description

I got an JS error using the town bell during am MP game. (r14508)

The units went into the buildings but when I ended the alarm, I got this error and some units didn't leave the buildings. Perhaps the units which where not in the civic center did not leave thier shelter. But I'm not sure about that.

ERROR: JavaScript error: simulation/components/AlertRaiser.js line 89 TypeError: cmpUnitAI is null ()@simulation/components/AlertRaiser.js:89 ProcessCommand(4,[object Object])@simulation/helpers/Commands.js:440

I'm not sure, if this is enough information for you to get a clue whats the problem...

#2407 fixed [PATCH] Selecting only idling units Itms Oimat
Description

#1598 and #1989 would allow having a wide range of way to select units. I propose to add the following:

  • Pressing '.' while selecting units with the mouse, select only the idle workers.
  • Pressing '/' while selecting units with the mouse, select only the idle military units.

(See HotKeys)

That would be very usefull for selecting workers that finished a metal mine and are waiting too close to the women (farming), near the first cc for example.

If the other patchs mentionned above are included too, that would allow to select 3 idling females that are waiting near the cc to create a new farm, and infinite other possibilities

#2430 fixed Improve the RangeManager (and other components) spatial subdivision system Itms wraitii
Description

One of the reasons why the game is slow in the later game is that our current implementation of Spatial Subdivisions isn't really clever, and leads to slowness (in particular because we need to sort and make unique keys in the queries).

We need to improve on that system. A quadtree was proposed and rejected, since it wasn't really more useful (it has the same uniqueness limitation in a basic implementation). So we need something else.

#2474 fixed [PATCH] Raise alert positioning Itms rogue-spectre
Description

I enjoy the new raise/increase alert buttons. I think would be even better with little modification.

1 - align buttons in order when "raise alert" is pressed the "increase alert level" is positioned at the exact same place as "raise alert" was in order to save time when the enemy is coming.

2 - move the position of the end alert in order it's not under "increase alert level" to avoid canceling the previous order by over clicking to raise alert.

3 - change a little the color of the "increased alert level"

#2487 duplicate [PATCH] Gather mod informations and configuration Itms Itms
Description

Based on my old #2118 patch, I propose this one, aimed at gathering mod data in a file at the root of the mod. The system should be general enough to suit every mod. Please give me feedback about it!

#2497 fixed [PATCH] Display how many remaining buildings are needed to advance phase Itms Itms
Description

This simple patch displays in the tooltip how many buildings more are necessary to change phase.

#2502 fixed Show icons when at the end of a line Itms Adrián Chaves
Description

Our GUI engine does not show icons if they are at the end of a line.

For example, if you switch the order of resource icons to "cost icon" (currently it is "icon cost"), the last icon in tooltips of "Insufficient resources" will not be displayed.

This prevents translations that actually need to place icons after the cost amount to do so. Or worse, they will do so, not test the translation, and users will find out that the icon is missing.

#2548 fixed Allow translating “Join Game” differently Itms Adrián Chaves
Description

In the main menu, *Join Game* stands for joining a game that you still have to specify. In the lobby, it stands for joining the game currently selected in the list of games.

Some langauges (e.g. Galician) require to translate “Join Game” differently in each of those contexts.

Note: In addition to providing an i18n context to allow different translations, provide a translator comment to explain what each “Join Game” stands for.

#2558 fixed [PATCH] Crash in VFS when calling non-existing AI Itms sanderd17
Description

I was loading the demo map for the Egyptians in the Aristeia mod (https://github.com/0ADMods/Aristeia commit 7c7b483cbb8e0b694ed85e20be99cb9cd090a867). That map is a bit outdated (with non-existing units, but also still referring qbot-wc). This caused the AIManager and VFS to crash hard, while it should just give some warnings and default to unassigned (as the gamesetup screen warns). I don't know were it would be best to catch the problem. Mods shouldn't be able to crash the C++ side this hard, so I guess it has to be changed in the Engine.

It could be related to loading a map in a mod too (as this makes the VFS operations more complex).

sander@ArchingFar gcc %gdb ../../../binaries/system/pyrogenesis                      11:24
GNU gdb (GDB) 7.7
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i686-pc-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from ../../../binaries/system/pyrogenesis...done.
(gdb) run -mod=aristeia
Starting program: /home/sander/0ad/trunk/binaries/system/pyrogenesis -mod=aristeia
warning: Could not load shared library symbols for linux-gate.so.1.
Do you need "set solib-search-path" or "set sysroot"?
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/usr/lib/libthread_db.so.1".
warning: File "/usr/lib/libstdc++.so.6.0.19-gdb.py" auto-loading has been declined by your `auto-load safe-path' set to "$debugdir:$datadir/auto-load".
To enable execution of this file add
	add-auto-load-safe-path /usr/lib/libstdc++.so.6.0.19-gdb.py
line to your configuration file "/home/sander/.gdbinit".
To completely disable this security protection add
	set auto-load safe-path /
line to your configuration file "/home/sander/.gdbinit".
For more information about this security protection see the
"Auto-loading safe path" section in the GDB manual.  E.g., run from the shell:
	info "(gdb)Auto-loading safe path"
Cache: 200 (total: 2832) MiB
[New Thread 0xa80d0b40 (LWP 15600)]
TIMER| InitVfs: 206.347 ms
[New Thread 0xa78cfb40 (LWP 15601)]
[New Thread 0xa6effb40 (LWP 15602)]
[New Thread 0xa6202b40 (LWP 15603)]
[Thread 0xa6202b40 (LWP 15603) exited]
[New Thread 0xa6202b40 (LWP 15604)]
[New Thread 0xa18ffb40 (LWP 15605)]
Sound: AlcInit success, using OpenAL Soft
[New Thread 0xa17feb40 (LWP 15606)]
TIMER| CONFIG_Init: 138.664 ms
[New Thread 0xa0afeb40 (LWP 15607)]
[New Thread 0xa02fdb40 (LWP 15608)]
ATTENTION: default value of option force_s3tc_enable overridden by environment.
[New Thread 0x9e296b40 (LWP 15609)]
TIMER| RunHardwareDetection: 227.369 ms
TIMER| write_sys_info: 94.612 ms
[Thread 0x9e296b40 (LWP 15609) exited]
[New Thread 0x9d8ffb40 (LWP 15610)]
TIMER| InitRenderer: 115.835 ms
TIMER| ps_console: 45.7776 ms
TIMER| ps_lang_hotkeys: 1.17094 ms
TIMER| common/modern/setup.xml: 43.4762 ms
TIMER| common/modern/styles.xml: 593.61 us
TIMER| common/modern/sprites.xml: 16.8866 ms
TIMER| common/setup.xml: 1.22371 ms
TIMER| common/sprite1.xml: 18.3821 ms
TIMER| common/styles.xml: 413.116 us
TIMER| common/common_sprites.xml: 4.95895 ms
TIMER| common/common_styles.xml: 1.2001 ms
TIMER| common/init.xml: 46.8984 ms
TIMER| pregame/sprites.xml: 14.5408 ms
TIMER| pregame/styles.xml: 388.355 us
TIMER| pregame/mainmenu.xml: 252.28 ms
TIMER| common/global.xml: 979.18 us
libpng warning: iCCP: Not recognizing known sRGB profile that has been edited
sys_cursor_create: using Xcursor to create 32 x 32 cursor
[New Thread 0x9e296b40 (LWP 15611)]
[New Thread 0x9c5ddb40 (LWP 15612)]
[New Thread 0x9bddcb40 (LWP 15613)]
TIMER| common/modern/setup.xml: 427.851 us
TIMER| common/modern/styles.xml: 309.133 us
TIMER| common/modern/sprites.xml: 5.43917 ms
TIMER| common/setup.xml: 859.68 us
TIMER| common/sprite1.xml: 2.27297 ms
TIMER| common/styles.xml: 53.97 us
TIMER| common/common_sprites.xml: 2.64289 ms
TIMER| common/common_styles.xml: 344.405 us
TIMER| gamesetup/setup.xml: 35.2336 ms
TIMER| gamesetup/sprites.xml: 838.372 us
TIMER| gamesetup/styles.xml: 298.133 us
TIMER| gamesetup/gamesetup.xml: 73.4166 ms
TIMER| common/global.xml: 925.119 us
tinygettext: Couldn't translate: Egyptians
tinygettext: Couldn't translate: TBI ...
tinygettext: Couldn't translate: Nubians
tinygettext: Couldn't translate: Sea People
tinygettext: Couldn't translate: Egyptians Demo
tinygettext: Couldn't translate: Waterfall Demo
tinygettext: Couldn't translate: A desert map, generally wide open, except for the Nile River running through the middle.
WARNING: AI "qbot-wc" not present. Defaulting to unassigned.
TIMER| common/modern/setup.xml: 342.155 us
TIMER| common/modern/styles.xml: 235.081 us
TIMER| common/modern/sprites.xml: 2.73978 ms
TIMER| common/setup.xml: 812.238 us
TIMER| common/sprite1.xml: 2.3254 ms
TIMER| common/styles.xml: 55.386 us
TIMER| common/common_sprites.xml: 2.68514 ms
TIMER| common/common_styles.xml: 345.961 us
TIMER| common/init.xml: 1.89199 ms
TIMER| loading/styles.xml: 12.4016 ms
TIMER| loading/sprites.xml: 4.3719 ms
TIMER| loading/loading.xml: 19.4616 ms
TIMER| common/global.xml: 1.35228 ms
tinygettext: Couldn't translate: Egyptians Demo
sys_cursor_create: using Xcursor to create 32 x 32 cursor
libpng warning: iCCP: Not recognizing known sRGB profile that has been edited
libpng warning: iCCP: Not recognizing known sRGB profile that has been edited
libpng warning: iCCP: Not recognizing known sRGB profile that has been edited
ERROR: CCacheLoader failed to find archived or source file for: "simulation/templates/units/nubi_infantry_javalinist_b.xml"
ERROR: Failed to load entity template 'units/nubi_infantry_javalinist_b'
ERROR: Failed to find matching prop point called "garrisoned" in model "art/meshes/structural/egypt_barracks.dae" for actor "barracks"
ERROR: CCacheLoader failed to find archived or source file for: "simulation/templates/structures/egypt_mill.xml"
ERROR: Failed to load entity template 'structures/egypt_mill'
ERROR: Failed to load entity template 'structures/egypt_mill'
ERROR: Failed to find matching prop point called "garrisoned" in model "art/meshes/structural/migdol2.dae" for actor "fortress"
ERROR: CCacheLoader failed to find archived or source file for: "simulation/templates/units/athen_support_converter_a.xml"
ERROR: Failed to load entity template 'units/athen_support_converter_a'
ERROR: Failed to find matching prop point called "garrisoned" in model "art/meshes/structural/egypt_large_temple.dae" for actor "large_temple"
vfs.cpp(105): Function call failed: return value was -110100 (VFS directory not found)
Function call failed: return value was -110100 (VFS directory not found)
Location: vfs.cpp:105 (GetDirectoryEntries)

Call stack:

(0x8465fac) /home/sander/0ad/trunk/binaries/system/pyrogenesis() [0x8465fac]
(0x841e13c) /home/sander/0ad/trunk/binaries/system/pyrogenesis() [0x841e13c]
(0x841e487) /home/sander/0ad/trunk/binaries/system/pyrogenesis() [0x841e487]
(0x843a8da) /home/sander/0ad/trunk/binaries/system/pyrogenesis() [0x843a8da]
(0x843bad8) /home/sander/0ad/trunk/binaries/system/pyrogenesis() [0x843bad8]
(0x81119ec) /home/sander/0ad/trunk/binaries/system/pyrogenesis() [0x81119ec]
(0x811486b) /home/sander/0ad/trunk/binaries/system/pyrogenesis() [0x811486b]
(0x8115564) /home/sander/0ad/trunk/binaries/system/pyrogenesis() [0x8115564]
(0x80b0d95) /home/sander/0ad/trunk/binaries/system/pyrogenesis() [0x80b0d95]
(0xb79fc555) /home/sander/0ad/trunk/binaries/system/libmozjs24-ps-release.so(+0xa1555) [0xb79fc555]
(0xb79fe92f) /home/sander/0ad/trunk/binaries/system/libmozjs24-ps-release.so(+0xa392f) [0xb79fe92f]
(0xb7a09a7c) /home/sander/0ad/trunk/binaries/system/libmozjs24-ps-release.so(+0xaea7c) [0xb7a09a7c]
(0xb79fc520) /home/sander/0ad/trunk/binaries/system/libmozjs24-ps-release.so(+0xa1520) [0xb79fc520]
(0xb7a0abbc) /home/sander/0ad/trunk/binaries/system/libmozjs24-ps-release.so(+0xafbbc) [0xb7a0abbc]
(0xb7ab32cf) /home/sander/0ad/trunk/binaries/system/libmozjs24-ps-release.so(_Z19JS_CallFunctionNameP9JSContextP8JSObjectPKcjPN2JS5ValueES7_+0xef) [0xb7ab32cf]
(0x8193146) /home/sander/0ad/trunk/binaries/system/pyrogenesis() [0x8193146]

errno = 0 (Try again later)
OS error = ?


(C)ontinue, (S)uppress, (B)reak, Launch (D)ebugger, or (E)xit?
E

Program received signal SIGABRT, Aborted.
0xb7fdd424 in __kernel_vsyscall ()
(gdb) bt
#0  0xb7fdd424 in __kernel_vsyscall ()
#1  0xb6d614f6 in raise () from /usr/lib/libc.so.6
#2  0xb6d62c83 in abort () from /usr/lib/libc.so.6
#3  0x0846c07d in sys_display_error (
    text=text@entry=0x9a841000 L"Function call failed: return value was -110100 (VFS directory not found)\r\nLocation: vfs.cpp:105 (GetDirectoryEntries)\r\n\r\nCall stack:\r\n\r\n(0x8465fac) /home/sander/0ad/trunk/binaries/system/pyrogenesis()"..., flags=flags@entry=6) at ../../../source/lib/sysdep/os/unix/unix.cpp:263
#4  0x0841e570 in CallDisplayError (flags=<optimized out>, 
    text=0x9a841000 L"Function call failed: return value was -110100 (VFS directory not found)\r\nLocation: vfs.cpp:105 (GetDirectoryEntries)\r\n\r\nCall stack:\r\n\r\n(0x8465fac) /home/sander/0ad/trunk/binaries/system/pyrogenesis()"...) at ../../../source/lib/debug.cpp:378
#5  debug_DisplayError (
    suppress=0x85feebc <VFS::GetDirectoryEntries(Path const&, std::vector<CFileInfo, std::allocator<CFileInfo> >*, std::vector<Path, std::allocator<Path> >*) const::suppress__>, 
    func=<optimized out>, line=105, pathname=<optimized out>, lastFuncToSkip=0x8539428 L"debug_OnError", context=0xbfffe000, flags=4, 
    description=0xbfffd9c0 L"Function call failed: return value was -110100 (VFS directory not found)") at ../../../source/lib/debug.cpp:469
#6  debug_OnError (err=-110100, 
    suppress=suppress@entry=0x85feebc <VFS::GetDirectoryEntries(Path const&, std::vector<CFileInfo, std::allocator<CFileInfo> >*, std::vector<Path, std::allocator<Path> >*) const::suppress__>, 
    file=file@entry=0x853f5b4 L"../../../source/lib/file/vfs/vfs.cpp", line=line@entry=105, 
    func=func@entry=0x853f7b2 <VFS::GetDirectoryEntries(Path const&, std::vector<CFileInfo, std::allocator<CFileInfo> >*, std::vector<Path, std::allocator<Path> >*) const::__func__> "GetDirectoryEntries") at ../../../source/lib/debug.cpp:546
#7  0x0843a8da in VFS::GetDirectoryEntries (this=0x86244a8, path=..., fileInfos=0xbfffe980, subdirectoryNames=0x0) at ../../../source/lib/file/vfs/vfs.cpp:105
#8  0x0843bad8 in vfs::GetPathnames (fs=..., path=..., filter=filter@entry=0x84f43c4 L"*.js", pathnames=...) at ../../../source/lib/file/vfs/vfs_util.cpp:43
#9  0x081119ec in CAIWorker::LoadScripts (this=0x9b074ac, moduleName=...) at ../../../source/simulation2/components/CCmpAIManager.cpp:257
#10 0x0811486b in CAIWorker::CAIPlayer::Initialise (this=0x9915e68, callConstructor=callConstructor@entry=true) at ../../../source/simulation2/components/CCmpAIManager.cpp:96
#11 0x08115564 in AddPlayer (callConstructor=true, difficulty=2 '\002', player=2, aiName=..., this=0x9b074ac) at ../../../source/simulation2/components/CCmpAIManager.cpp:426
#12 CCmpAIManager::AddPlayer (this=0x9b07478, id=..., player=2, difficulty=2 '\002') at ../../../source/simulation2/components/CCmpAIManager.cpp:855
#13 0x080b0d95 in call<std::basic_string<wchar_t>, int, unsigned char, void (ICmpAIManager::*)(std::basic_string<wchar_t>, int, unsigned char)> (a2=<optimized out>, a1=<optimized out>, a0=..., 
    fptr=&virtual ICmpAIManager::AddPlayer(std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >, int, unsigned char), c=<optimized out>)
    at ../../../source/scriptinterface/NativeWrapperDefns.h:70
#14 ScriptInterface::callMethod<void, std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >, int, unsigned char, &class_ICmpAIManager, ICmpAIManager, &ICmpAIManager::AddPlayer> (cx=0x97eba48, argc=3, vp=0x8686aa8) at ../../../source/scriptinterface/NativeWrapperDefns.h:121
#15 0xb79fc555 in CallJSNative (args=..., native=<optimized out>, cx=0x97eba48) at ../jscntxtinlines.h:321
#16 js::Invoke (cx=0x97eba48, args=..., construct=construct@entry=js::NO_CONSTRUCT) at /home/sander/0ad/trunk/libraries/source/spidermonkey/mozjs24/js/src/vm/Interpreter.cpp:481
#17 0xb79fe92f in Interpret (cx=cx@entry=0x97eba48, state=...) at /home/sander/0ad/trunk/libraries/source/spidermonkey/mozjs24/js/src/vm/Interpreter.cpp:2298
#18 0xb7a09a7c in js::RunScript (cx=0x97eba48, state=...) at /home/sander/0ad/trunk/libraries/source/spidermonkey/mozjs24/js/src/vm/Interpreter.cpp:438
#19 0xb79fc520 in js::Invoke (cx=cx@entry=0x97eba48, args=..., construct=construct@entry=js::NO_CONSTRUCT)
    at /home/sander/0ad/trunk/libraries/source/spidermonkey/mozjs24/js/src/vm/Interpreter.cpp:500
#20 0xb7a0abbc in js::Invoke (cx=cx@entry=0x97eba48, thisv=..., fval=..., argc=argc@entry=1, argv=argv@entry=0xbffff4e0, rval=rval@entry=0xbffff4d8)
    at /home/sander/0ad/trunk/libraries/source/spidermonkey/mozjs24/js/src/vm/Interpreter.cpp:531
#21 0xb7ab32cf in JS_CallFunctionName (cx=0x97eba48, objArg=0x9b140040, name=name@entry=0x84f563a "InitGame", argc=argc@entry=1, argv=argv@entry=0xbffff4e0, rval=rval@entry=0xbffff4d8)
    at /home/sander/0ad/trunk/libraries/source/spidermonkey/mozjs24/js/src/jsapi.cpp:5625
#22 0x08193146 in ScriptInterface::CallFunction_ (this=this@entry=0x97eb88c, val=..., name=name@entry=0x84f563a "InitGame", argc=argc@entry=1, argv=argv@entry=0xbffff4e0, ret=...)
    at ../../../source/scriptinterface/ScriptInterface.cpp:984
#23 0x080a5e4e in CallFunctionVoid<CScriptVal> (a0=..., name=0x84f563a "InitGame", val=..., this=0x97eb88c) at ../../../source/scriptinterface/ScriptInterface.h:463
#24 CSimulation2::InitGame (this=0x97e3478, data=...) at ../../../source/simulation2/Simulation2.cpp:659
#25 0x081a94fa in CGame::ReallyStartGame (this=0x97ec5f8) at ../../../source/ps/Game.cpp:218
#26 0x08068cbb in ProgressiveLoad () at ../../../source/main.cpp:220
#27 Frame () at ../../../source/main.cpp:313
#28 RunGameOrAtlas (argc=argc@entry=2, argv=argv@entry=0xbffff9e4) at ../../../source/main.cpp:478
#29 0x0805afa4 in main (argc=2, argv=0xbffff9e4) at ../../../source/main.cpp:520
(gdb) quit
A debugging session is active.

	Inferior 1 [process 15596] will be killed.

Quit anyway? (y or n) y
#2587 fixed [PATCH] in team result screen: wrong map discovered total percentage Itms Tom Brewe
Description

When playing in a team the calculated amount of map discovered is being added, resulting in eg: Player 1: 60% Player 2: 70% Total: 130%

Better would be to have a total of 70%. So calculating the max() instead of the sum.

#2635 fixed [PATCH] Aborting delete of an unit or building with ESC renders UI unusable. Itms thorkill
Description

When you try to delete/remove an unit or building by:

  • selecting your unit/building
  • hit DELETE
  • hit ESC

you will render the UI of the game unusable - you can not exit (pause comes), you can not delete any units/buildings. On top of the screen pop-ups this message:

WARNING: A messagebox was called when a previous callback function is still set, aborting!

#2639 fixed [PATCH] Kunobelinos hero description Itms Haommin
Description

I thought the original text was a little confusing, so I rewrote some of the sentences to try and structure it better.

This is the original text:

"Kunobelinos, perhaps better known by the latinized form of Cunobelin, was a powerful ruler centered in the territory around modern day Colchester. Ruling the Catuvellauni from Kamulodunon(better known as Camulodunum), he was a warrior king who conquered a neighboring tribe, the Trinovantes, and was referred to by the Romans as the King of the Britons. The Trinovantes, while having been Roman allies, were not able to call for Roman aide, as they were conquered shortly after the Roman's own disaster in Germania. Kunobelinos died of disease after subjugating the great majority of the southern half of Britain (his coins were being minted as far as the borders of what would become Wales). When he died, his son Togdumnos replaced him, who died in battle with the Romans, and was subsequently replaced by his brother, Karatakos. It is an irony that it was his third son that initially invited this Roman reprisal. Kunobelinos seems to have been indifferent to the Romans. He traded with them freely, but had few qualms subjugating known Roman allies, and even sent Adminius as a fosterling to be educated in Roman Gaul. This accounted for Adminius's friendships among the Romans, and he was given lordship over the Cantaci, who inhabited Kent, by his father. This area was the prime area of Roman influence and trade in Britain, and he shrewdly observed his youngest son's friendship with powerful Roman and Gallo-Roman politicians and traders would be of use administrating the region. His other sons though had no love for the Romans, and when Kunobelinos died, Togdumnos, now king, arrested, executed, or expelled numerous Roman sympathizers, including his own brother Adminius, and the deposed Atrebates king, Verica, who appealed to their connections in the Roman Empire for aide in recovering their lands. Kunobelinos in his own time though was possibly one of the greatest of all British kings. He conquered huge portions of land from originally ruling over only four minor tribes in a confederation, the Catuvellauni, and achieved recognition as king of Britain. This recognition was so great that tribes in Cambria even came to assist his sons against the Romans and their British allies, and Kunobelinos was held up by the post-Roman Britons as one of their great heroes; a conqueror and uniter of petty kingdoms, something the post-Roman Britons or Romano-British sorely needed."

And this is my proposal:

"Kunobelinos (perhaps better known by the latinized form of Cunobelin) was a powerful ruler of the Catuvellauni. He was referred to by Romans as the King of the Britons. His domains extended around the city of Kamulodunon (known as Camulodunum), modern day Colchester. The Roman defeat in the battle of Teutoburg Forest (Germania) allowed Kunobelinos to conquer a neighboring tribe, the Trinovantes, who were Roman allies and couldn't receive Roman aide. Kunobelinos seems to have been indifferent to the Romans. He traded with them freely, but had few qualms subjugating known Roman allies, and even sent his youngest son Adminius as a fosterling to be educated in Roman Gaul. This accounted for Adminius's friendships among the Romans.

Adminius was given lordship over the Cantaci, who inhabited Kent, by his father. This area was the prime area of Roman influence and trade in Britain, and Kunobelinos shrewdly observed his youngest son's friendship with powerful Roman and Gallo-Roman politicians and traders would be of use administrating the region. His other sons though had no love for the Romans. When Kunobelinos died of disease, he was replaced by his son Togdumnos, who arrested, executed, or expelled numerous Roman sympathizers. These included his own brother Adminius, and the deposed Atrebates king, Verica, who appealed to their connections in the Roman Empire for aide in recovering their lands. Togdumnos died in battle with the Romans, and was subsequently replaced by his brother, Karatakos. It is an irony that it was his third son that initially invited this Roman reprisal.

Kunobelinos in his own time though was possibly one of the greatest of all British kings. He conquered the great majority of the southern half of Britain (his coins were being minted as far as the borders of what would become Wales). He started ruling over only four minor tribes in a confederation, the Catuvellauni, and ended up achieving recognition as king of Britain. This recognition was so great that tribes in Cambria even came to assist his sons against the Romans and their British allies, and Kunobelinos was held up by the post-Roman Britons as one of their great heroes; a conqueror and uniter of petty kingdoms, something the post-Roman Britons or Romano-British sorely needed."

What do you think?

#2671 fixed [PATCH] Change a scope in the Attack component for more modding flexibility Itms Radagast
Description

In simulation/components/Attack.js the Schema is already stored in the Attack.prototype.

It would be nice for mods (e.g. convert_attack on 0ADMods) if the other schemas (e.g. bonusSchema, preferredClassesSchema, ..) also were stored in the prototype to easily reuse those schema defintions without hurting the single source principle (currently the global var schema variables have to be copied over in the AttackConvertAttack.js).

Please comment if there are any issues we should address.

Could be generalized for all components.

#2672 fixed Allow enabling post processing effects in-game Itms Adomas Jackevičius
Description

Hello,

After installing 0 A.D. on Arch Linux when I launched it I set graphics options what I call to "max" and when I entered game it was BLACK SCEEEN. I got confused. Disabling one by one options in Graphics Options menu I found out that Post Processing causes the trouble. To enable Post Processing I had to restart the game, but the tooltip did not mention that. Not sure if it's a bug, but it should reload the engine so it displays correctly after settings change or smth.

Running Arch Linux x86_64 on GTX 780 GPU

#2678 fixed pyrogenesis segfaults on load game Itms Patrick
Description

Currently At revision 15536.

Across several days of pulling down revisions and clean builds I crash every time trying to load a game. Playing and saving seem to work fine, but if I try to go back in and load a game it seg-faults reliably. Here's the backtrace from the crashing thread, I haven't tried to debug it myself since I figure you might already know about it, but if you want me to, I can chase it down.

Program terminated with signal SIGSEGV, Segmentation fault.
#0  std::_Rb_tree<unsigned int, unsigned int, std::_Identity<unsigned int>, std::less<unsigned int>, std::allocator<unsigned int> >::_M_insert_unique (
    this=0x0, __v=@0x7fff57211d40: 150)
    at /usr/include/c++/4.8.3/bits/stl_tree.h:1315
1315        _M_get_insert_unique_pos(const key_type& __k)
(gdb) bt
#0  std::_Rb_tree<unsigned int, unsigned int, std::_Identity<unsigned int>, std::less<unsigned int>, std::allocator<unsigned int> >::_M_insert_unique (
    this=0x0, __v=@0x7fff57211d40: 150)
    at /usr/include/c++/4.8.3/bits/stl_tree.h:1315
#1  0x00000000004cef1e in insert (__x=@0x7fff57211d40: 150, 
    this=<optimized out>) at /usr/include/c++/4.8.3/bits/stl_set.h:463
#2  AddToTile (ent=150, tile=<optimized out>, this=0x3fa4c00)
    at ../../../source/simulation2/components/CCmpRangeManager.cpp:1441
#3  CCmpRangeManager::ResetDerivedData (this=0x3fa4c00, 
    skipLosState=<optimized out>)
    at ../../../source/simulation2/components/CCmpRangeManager.cpp:684
#4  0x00000000004a385c in CComponentManager::DeserializeState (this=0x3131a78, 
    stream=...)
    at ../../../source/simulation2/system/ComponentManagerSerialization.cpp:333
#5  0x0000000000465ee3 in CSimulation2::DeserializeState (
    this=<optimized out>, stream=...)
    at ../../../source/simulation2/Simulation2.cpp:753
#6  0x000000000056de77 in CGame::LoadInitialState (this=0x3135270)
    at ../../../source/ps/Game.cpp:189
#7  0x000000000056dc15 in MemFunThunk<CGame> (param=0x36efaf0)
    at ../../../source/ps/LoaderThunks.h:60
#8  0x0000000000572508 in LDR_ProgressiveLoad (
    time_budget=time_budget@entry=0.01, 
    description=description@entry=0x7fff572124a0 L"Loading game", 
    max_chars=max_chars@entry=100, 
    progress_percent=progress_percent@entry=0x7fff57212260)
    at ../../../source/ps/Loader.cpp:228
#9  0x0000000000424892 in ProgressiveLoad () at ../../../source/main.cpp:211
#10 Frame () at ../../../source/main.cpp:316
#11 RunGameOrAtlas (argc=argc@entry=1, argv=argv@entry=0x7fff57212788)
    at ../../../source/main.cpp:488
#12 0x0000000000418eb7 in main (argc=1, argv=0x7fff57212788)
    at ../../../source/main.cpp:530
#2698 duplicate Fix serialization tests Itms Itms
Description

Even if I fixed the OOS problems introduced in r15508, the serialization tests still fails. I'm going to work above all on #599, but this problem must be fixed eventually.

#2699 fixed Fix RMS Gulf of Bothnia to work for 1 player Itms FeXoR
Description

Player angle was NAN for one player so it fails to generate.

#2709 fixed [PATCH] Update entities visibility at the beginning of the game Itms Itms
Description

The territories don't explore the map anymore when the borders change. However, the territory should still be explored at the beginning of the game.

#2712 fixed Mirages visible for AI players Itms mimo
Description

There is a problem with the new fogging r15612 when switching players. A simple way to reproduce it is to start a skirmish map with an AI as player 2, send your cavalry in a suicide mission inside the AI city, then switch to the AI perspective and try to delete one of the AI buildings which have been in the LOS of the cavalry: the building will be destroyed, but the mirage will appear at its place, and if we try to destroy the mirage, we get the message that we can't destroy it because in fog-of-war. If now user 2 is set to "not assigned" instead of AI and we repeat all the steps, the behaviour is as expected.

#2714 fixed [PATCH] Defeat music not played Itms Itms
Description

When you loose a game (by destroying all your buildings and units), the associated music is not played, you still hear the ambient track.

Based on regression tests, this is caused by r15612.

#2715 fixed Impossible to win a game in Scenario maps Itms Itms
Description

Reported by Evulant on IRC.

When all enemy units have been killed, nothing happens, and quiting the game yields the "abandon" message.

This is probably related to exact stack rooting changes, and the problem is apparently here since several days.

#2728 fixed Gaia's tower on Mediterranean Cove is not miraged under the Conquest victory condition Itms mimo
Description

gaia buildings disappears when they go out of LOS while they should be miraged like players' buildings.

#2744 fixed Victory music fails to play Itms brian
Description

Victory music is failing to play when the victory popup is displayed. It continues playing the regular ambient or battle music instead.

[Edit] Did not see ticket #2714, so this is roughly a duplicate.

#2756 fixed Game crashing when loading a map Itms Stan
Description

Steps to reproduce :

1.Open a 2v2 Map 2.Set all the players to petra very hard 3.Set popcap to 100

  1. Tick All options
  2. Set all the civs to britons for instance
  3. Launch the game
  4. Wait till it crashes. (One or two minutes). Works if you run it on background.

Expected Output :

It shouldn't crash, cause I want to play :P

Possible Reasons :

I have petra set to debug (This is the only modified file in SVN)

What version of the product are you using? On what operating system?

Windows 8.1.1 64bits r15691

#2760 fixed [PATCH] Oos svn 15692 Itms Oimat
Description

Quit a multiplayer game and join it again.

Played against alpha. Reproduced the bug twice.

#2762 fixed [PATCH] Missing script file in the mod selector Itms Radagast
Description

In the Mod selection screen the removal of the common/init.xml in page_modmod.xml resulted in the functions_utility_list.js is missing and results in an error when ordering enabled mods.

Other than that Sander and leper once again managed to simplify my gui code. Thanks.

#2778 fixed GUI Using a lot of turn time ~150ms/per frame Itms Stan
Description

Steps to reproduce :

  • Open Atlas : Place 200 hoplites
  • Select Them
  • Open the profiler (F11)

Expected Output :

This was not present in A16 and shouldn't be there in A17

Possible Causes :

Some modifications to gui files must have triggered it

OS/Version

r15702  Windows 8.1.1 64bits on an I5-3210 HD8750M 8GB Ram.

#2779 fixed [PATCH] JS warnings in the game setup screen for guest players Itms Stan
Description

When playing on the lobby I get those warnings. (See attached screenshot)

#2786 needsinfo [NEEDS INFO] weird bug of kleroukhia built and unbuilt at the same time Itms serveurix
Description

This bug, also known as the Schroedinger's Kleroukhia Syndrome, designates the weird case of a Kleroukhia that appears as built to the citizen (builders/gatherers) around, but appears as unbuilt to the GUI of the game. Graphically, it looks like a finished Kleroukhia dropped over a Kleroukhia underpinning.

Later in the game the Kleroukhia appeared as built in the GUI (100% HP, possibility to train units), but still had its underpinnings on the map.

I've only encoutered this bug once, I suppose it's extremely rare, but the oddity of the situation made it worth mentionning.

Right after being built (the citizen drop their wood in it) : http://pix.toile-libre.org/upload/original/1410167968.png

Later in the game : http://pix.toile-libre.org/upload/original/1410168015.png

#2859 fixed [PATCH] sprintf.js - Out of date Itms Shane Grant
Description

It doesn't appear that any changes to Alexei's sprintf.js since 2010 have been implemented, and in particular there was a change in May of this year that increased the performance by 20%. See:

https://github.com/alexei/sprintf.js/issues/6

Attached is a patch updating to the current version from Github:

https://github.com/alexei/sprintf.js

In the patch I added the current license to the top so it is in the same file.

#2882 fixed [PATCH] 200 FPS in main menu Itms Salesome
Description

When starting the game, the FPS counter shows around 200 FPS in the main menu (see attached screenshot).

I think, there should be a hard-coded limit of 60 or 30 FPS.

#2900 fixed [PATCH] Implement Rotary Mill Aura Itms Niek
Description

Attached patch implements the planned rotary mill aura by bonusing nearby farming with 25%. Also updates the tooltip and removes the technology.

#2908 fixed [PATCH] Use short pathfinder update when colliding with entities Itms ickylevel
Description

The patch is not the final one, the code will have to be made cleaner. It's just here for testing purpose.

Instead of recalculating everything when a unit hits another entity, the pathfinder will just update the short range path, improving performance. The calculation is done immediately as opposed to the 'next' turn. This has to be checked and verified in multiplayer.

#2913 fixed [PATCH] Better way to handle visibilities in the simulation Itms Itms
Description

My work on #599 allowed me to work on the visibility systems (fog-of-war, line of sight, etc.), and currently, a large part of the visibility logic is handled by the RangeManager system component, especially in this function.

As a consequence, scripted components can't influence the visibility of an entity. Mods, but also planned features for the main game (like Iberian camouflaged units), would need a way to influence this visibility. Also, the way I plan to tackle #2710 needs it.

I propose to separate this logic into a Visibility component. Several things could benefit from this change.

I think it would be better to do changes in separate patches/commits, to avoid complexity and possible regressions. So I set this ticket as a task, and I will use it to track the changes. Remaining planned changes:

  • Create the Visibility component
  • Find a way to remove the hardcoded and duplicated VIS_FOO in the scripted components Fogging, Mirage and Visibility
  • Move template items GetRetainInFog and AlwaysVisible from Vision to Visibility
  • Update component documentations (RangeManager, Visibility), including code comments
  • Fix #2710 with the new system
  • Improve #958 with the new system if possible (see this TODO)
  • For fun, implement camouflaging for some units
#2930 fixed mirages problems Itms mimo
Description

since latest commit (r15958) I've seen mirages appearing where they should not: after my troops destroyed an enemy building, when the place of the building goes out of visibility a mirage appears. To reproduced it, here is a saved game. After a few seconds, a barrack mirage will appear where the camera is centered. But as I was testing the AI, I used the charts mods and you should use it also to be able to read the saved game

#2942 fixed [PATCH] Add Seleucids wall style for random maps Itms FeXoR
Description

Added the new Seleucids wall style to wall_builder.js RMGen library and wall_demo.js random map script.

This also fixes a bug in the random map "Fortress" (wrong buildings for Seleucids and thus they are building the wrong units).

#2951 fixed [PATCH] Dynamically generate templates for special entites Itms Itms
Description

Currently, the generation of special templates ("preview|", "foundation|", etc.) is entirely hardcoded in TemplateLoader.cpp.

Several problems can arise, including the following:

  • This is bad for modding, obviously
  • Template validation is made difficult, especially in the case of program tests.

It would be nice to have a more generic extensible scriptable way to define subset templates.

#2960 fixed AI should support different map resolutions Itms mimo
Description

The AI uses internally 3 kinds of maps:

  • the passability map (from simulation)
  • the territory map, containing the owner of each cell (from simulation)
  • resource map (created internally)

In the present code, all maps were supposed to have cells of 4x4m as passability and territory maps from simulation were 4x4 maps. But in the new pathFinder branch being developped, the passability map will be 1x1m while the territory one will be 8x8m. So the AI should be able to cope with maps of different resolutions.

#2961 fixed [PATCH] Don't select units while dragging selection bandbox Itms Alex
Description

Don't select units while dragging selection bandbox which causes vast performance improvements.

During busy game situations, trying to select many units can cause critical performance issues because the game keeps calculating which units shall be selected again and again during the drag operation.

Practically, there's no advantage in seeing/knowing what entities are getting selected with my selection rectangle - I just tested the gameplay and really adored the overall improved performance coming with that solved issue!

#2969 fixed [PATCH] In Atlas, random maps also generate mirages Itms AlThePhoenix
Description

Couldn't think of a very descriptive title, feel free to change it.

When generating a random map in Atlas (e.g. a normal-sized Continent map), mirages are placed, too. While still in Atlas, everything is fine until you save that map and either start the game normally and try to play the map or restart Atlas and load the map you saved before. You will be greeted by an endless chain of warnings. It seems like most of the generated mirages are trees.

		<Entity uid="6510">
			<Template>mirage|gaia/flora_tree_pine</Template>
			<Player>0</Player>
			<Position x="786.72826" z="1073.16172"/>
			<Orientation y="1.05866"/>
			<Actor seed="5300"/>
		</Entity>

Right now you can get rid of the warnings by manually editing out the mirages of the saved maps' .xml.

https://dl.dropboxusercontent.com/u/93679544/0AD%20logs/atlasmirage-interestinglog.html https://dl.dropboxusercontent.com/u/93679544/0AD%20logs/Aegean_Sea_Test_Mirages.zip

#3016 fixed [PATCH] Add some player statistics to the basic simulation state Itms agentx
Description

sharedAI.playersData[playerid].statistics used to have an array of useful information:

buildingsConstructed buildingsLost buildingsLostValue civCentresBuilt enemyBuildingsDestroyed enemyBuildingsDestroyedValue enemyCivCentresDestroyed enemyUnitsKilled enemyUnitsKilledValue percentMapExplored resourcesBought resourcesGathered resourcesSold resourcesUsed tradeIncome treasuresCollected tributesReceived tributesSent unitsLost unitsLostValue unitsTrained

Please make this data available again.

#3032 fixed Units/buildings/resources are not visible in observer mode for the most part of time Itms tau
Description

svn revision 16266

In observer mode, units, buildings and resources are not visible for the most part of time. Units can be mostly seen when they are moving, other stuff - probably when it is in their view range (?). Just start a MP match between bots (or humans, doesn't matter), wait a few seconds and see as an observer what happens.

#3033 fixed [PATCH] Cheats don't work in SP Itms tau
Description

svn revision 16266

In singeplayer mode, cheats do not work.

#3065 fixed [Information Leak] Identify enemy location with controlgroups Itms elexis
Description

If you add a controlgroup to an enemy unit, then you can jump to the unit, even if it is inside the fog of war.

Steps to reproduce:

	-Start two instances of 0ad, host locally on the first instance & join with the second one
	-Start the game and for both players put diplomacy to neutral to prevent attacks
	-Move a unit of player 1 to the base of player 2
	-As player 2, create a controlgroup for the player 1 unit
	-As player 1, move the unit out of the base
	-As player 2, jump to the controlgroup

Expected result: Camera shouldn't move. Actual result: Camera moves to the correct position of the enemy, although it is inside the fog of war.

Additionnal Details : The follow unit function works as expected, since it stops when the enemy unit enters the fog of war. Also the GUI hides the information like health points, if the unit is inside the fog of war.

#3084 fixed Alignment error in German AI configuration Itms Raymond
Description

The German text "KI-Schwierigkeitsgrad:" is not fully readable. See screenshot.

#3097 fixed Whale always moving to the right side of the map on Cycladic Archipelago Itms elexis
Description

When playing the random map Cycladic Archipelago, one can notice that most of the whale instantaneously decides to move to the right side of the map. After 2-4 minutes of gametime usually all whale has gathered in this area, giving players on those islands a huge food advantage, since

(a) whale has 2000 food (instead of 1000 for regular fish) (b) fishboats have 2 times faster gathering speed in comparison to women on fields (c) players on the left side have less fish, since the whale run away.

#3107 fixed OOS on rejoin - mirages and visibilities of foundations Itms elexis
Description

We played a 4v4 and had an out of sync. WhiteLion played as yellow, I played as green. At some point he disconnected. I think the oos came after the rejoin.

I provided WhiteLion and my oos_dump and my commands.txt.

The diff is very short. Until now leper found:

01:39 <@leper> seems like mirages and visibilities or something like that 01:40 <@leper> notice two consecutive entities with identical positions, owner, and some other values?

#3151 fixed OOS on rejoin - different visibilities for structures after resign Itms elexis
Description

We played the a18 version, fpre rejoined and we got this oos error. Both oos_dump's and a commands.txt are attached.

(1) When comparing the files, we can see that there is visibilities: 128 instead of visibilities: 144 in line 86762 or 1365789 (i.e. in the beginning / at 6% of the file)

(2) The other differences are missing entities near the end of the dump in line 1341163 or 1365789 (i.e. at 98% of the file), probably a result of (1). Im not 100% sure if it is only missing entities, or if there are actually entities that differ, since the diff tool sometimes shows differences of different entities as if they occured in the same entity...

#3154 fixed Formations - Attack order fails by targeting the formation and not the individual unit Itms elexis
Description

In a game that started as 4v4, people disconnected without resigning, resigned & quit and changed displomacy multiple times. Also the private chat ("/msg <nickname> <text>") was used.

At turn 3120 player 1 and 3 issued non-queued attack commands:

turn 3120 500
cmd 1 {"type":"attack","entities":[164,4127,4128,4132,4133,4134,4135,4136,4403,4573,4633,4642,4672,4715,4727,4740,4806,4807,4808,4809,4810,5147,5148,5149,5150,5151,5152,5153,5154,5155,5156,5366,5367,5368,5369,5370,5371,5372,5373,5374,5375,5589,5590,5591,5592,5593,5594,5595,5596,5597,5598],"target":4793,"queued":false}
cmd 3 {"type":"attack","entities":[3720,4159,4161,4214,4216,4218,4789,4790,4791,4792,4793],"target":5593,"queued":false}
end

This is when the following error message appeares:

WARNING: JavaScript warning: simulation/components/Player.js line 557
reference to undefined property this.diplomacy[id]
WARNING: JavaScript warning: simulation/components/Player.js line 570
reference to undefined property this.diplomacy[id]

Which means that the error occurs in the return part of the following functions in Player.js:

/**
 * Check if given player is our enemy
 */
Player.prototype.IsEnemy = function(id)
{
	return this.diplomacy[id] < 0;
};

/**
 * Check if given player is neutral
 */
Player.prototype.IsNeutral = function(id)
{
	return this.diplomacy[id] == 0;
};

The error is reproducable by replaying the attached commands.txt file.

Additional Information: Player 1 = me was defeated after I deleted all units at turn 4175 (therefore no resign command in the logfile) Player 2 = left without resign shortly after turn 28 (looked like network timeout) Player 3+4 = remaining players alive as the game ended Player 5-8 resigned (turn 538, 956, 1435 and 2571)

#3164 fixed (De)serialisation fails on nested Map objects Itms tom
Description

An error occurred loading the game, the game crashes. I tested 16528, the game fails to load a saved game, load game again after loading, the game crashes.

BTW: when I shut down the computer start your computer, start the game again loading the save game, the game crashes. My os is win8 64bit.

See forum for logs: http://wildfiregames.com/forum/index.php?showtopic=19804&hl=

#3165 fixed [PATCH] Persist Match Settings - Enabling Rated games breaks settings for non-lobby multiplayer games Itms elexis
Description

Reproduce: Host a lobby match with rated games enabled. Close. Host a multiplayer match without lobby. Teams will be locked, even if you try to disable it and cheats can never be enabled too.

This is forced by the enabled but invisible rated games option. The singleplayer settings are saved in a separate file and don't seem to be affected, since I can enabled and disable locked teams.

Fix: The persist match settings should ignore the rated games settings for non-lobby multiplayer matches and disable it by default, since that option is not available in the UI either.

#3174 fixed [PATCH] Make the ptol lighthouse reveal the shore Itms Itms
Description

Attached is a patch that implements the TBI feature of the Ptolemaic lighthouse.

#3179 fixed Information Leak - I see dead people Itms elexis
Description

You can see corpses through the fog of war.

Reproduce by hosting a game, joining with a second instance, scouting the enemy CC, deleting the scout and then deleting some enemy units with the other instance.

Result: You can see the corpses.

I'd post a link to the scene of the sixth sense, but its under copyright... :P

Thanks to ffm for reporting it to me!

#3188 fixed Serializer crashes when rejoining Itms elexis
Description

For some days I get a crash with like 50% probability when I rejoin a hosted game with the most recent svn version.

StdDeserializer.cpp(114): Assertion failed: "m_ScriptBackrefs.size() > tag"
Assertion failed: "m_ScriptBackrefs.size() > tag"
Location: StdDeserializer.cpp:114 (GetScriptBackref)
#3190 fixed [PATCH] Update cppformat Itms leper
Description

Currently we use 0.11 while the latest upstream version is 2.1.1 (naming scheme changed, so just 7 versions outdated).

https://github.com/cppformat/cppformat/releases

Also see #3011 for some changes to the bundled version (that should be reapplied or dropped depending on the change (since some where done upstream in a similar/different way)). The remaining changes should be submitted upstream if applicable.

#3196 fixed [PATCH] Limit arrows on certain buildings Itms sanderd17
Description

Garrisoning units has different advantages currently:

  • It increases arrows shot in defensive buildings
  • Some buildings heal your units
  • It's possible to transport them in ships
  • It's good against the enemy trying to capture the building

For some of these effects, you need a big garrison capacity (f.e. big ships need to be able to transport a lot of units). However, if the fire rate enlarges linearly with the number of garrisoned units, the building becomes overpowered. So some buildings would profit from limiting the arrow count to a certain number:

  • The roman army camp should be limited to somewhere between a defense tower and a fortress. In history, it mostly served as protection for the army, while battles were being hold outside. Garrisoning more units will indeed protect them, and protect the building from being captured
  • Many ships need to have a limited fire power. A big sea battle requires many ships, while you can transport many units with a few ships
#3209 fixed [PATCH] Changing the map shouldn't reset the victory condition without a reason Itms elexis
Description

If you anticipate playing a wonder game and change the map, the victory condition will be set to conquest back again. Often it won't be noticed until the wonder is built.

I see that not all maps might support alternative victory conditions. However if wonder mode is supported, the victory condition shouldn't be reset to conquest after changing a map. The other settings like population capacity are not reset either.

#3253 fixed [PATCH] Playernames not initialized correctly Itms elexis
Description

"Player X" instead of the actual playername is displayed in many places, for example

  • in the wonder victory message ("Player X will have won in Y", see #3226)
  • in the tooltip of trade carts (getTradingTooltip in utility_functions.js)
  • in the tooltips for tributing resources
  • in the commands.txt file (correct playernames would be needed by visual replay #9 and the menu #3258)
  • If someone disconnects and another player resigns, then the name of the disconnected player will change to "Player X" in all places where the correct playername was printed before (for example in the panels or diplomacy menu). This is because updateDiplomacy() in messages.js overwrites the player data with the default playernames.
  • in the summary screen for disconnected players because of the bug above
#3258 fixed [PATCH] Visual Replay Menu Itms elexis
Description

0ad will have the functionality to replay a game visually (see #9). To make this feature accessible to all users, a menu should be added that allows the user to select and start replays.

Features:

A new main menu item called "Replay" should be placed below the Singleplayer and Multiplayer buttons.

If clicked, it should show a list with selectable items, one for each replay file (commands.txt) found, similar to the Singleplayer->LoadGame dialog.

If an item is selected, it should display useful information of that match, including date, time, playernames, map thumbnail, victory condition and population count.

The dialog should have buttons "Cancel", "Delete" and "Play".

Also another text input line would be great, where you can enter some arbitrary strings, like playernames, mapnames, victory condition in order to filter the items displayed and find particular games quickly.

Technical Requirements:

The commands.txt must contain the engine version so that it can be checked explicitly for compability before replaying the file. It should also contain a timestamp, so that the date value won't be lost if players share their files over the internet.

The engine version is currently saved in XmppClient.cpp and should be moved to another file. Refs #2745.

m_client->disco()->setVersion("Pyrogenesis", "0.0.19");
#3262 fixed crash when trying to start game (utf8 decoding) Itms Igor Gnatenko
Description

utf8.cpp(84): Function call failed: return value was -100703 (Invalid UTF-8 sequence) Function call failed: return value was -100703 (Invalid UTF-8 sequence) Location: utf8.cpp:84 (RaiseError)

#3271 fixed [PATCH] OOS on rejoin - different mirage order Itms elexis
Description

This out of sync error happened when I rejoined an a18 match. The only real difference is that two entities have swapped IDs. Their properties are identical as far as I have checked (the tree even has the same amount of wood in both versions).

--- oos_dump_ffm.txt	2015-05-27 01:12:35.000000000 +0200
+++ oos_dump_elexis.txt	2015-05-27 01:12:35.000000000 +0200
@@ -9318,15 +9318,15 @@
     id: 6743
     template: "mirage|gaia/flora_tree_oak_aut"
     id: 6744
     template: "foundation|structures/rome_storehouse"
     id: 6745
-    template: "mirage|gaia/flora_tree_oak_aut"
+    template: "mirage|foundation|structures/rome_storehouse"
     id: 6746
     template: "mirage|gaia/flora_tree_oak_aut"
     id: 6747
-    template: "mirage|foundation|structures/rome_storehouse"
+    template: "mirage|gaia/flora_tree_oak_aut"
     id: 6748
     template: "mirage|gaia/flora_tree_oak_aut"
     id: 6749
     template: "mirage|gaia/flora_tree_oak_aut"
     id: 6750

The other differences are follow ups (properties for the wrong IDs of those two entities) and irrelevant local entities (waypoint flags & dead units) at the end of the log.

#3293 fixed [PATCH] OOS error can display who is oos Itms elexis
Description

(1) Out-of-sync error messages should display which players are actually out of sync. This has the advantage that players don't need to guess which player is fine and which is not. The host checks in CNetServerTurnManager::NotifyFinishedClientUpdate if all clients are in sync. The list of clients that are oos should be sent along with the CSyncErrorMessage.

(2) If the CSyncErrorMessage is received by the clients, the list of oos players should be saved in a global variable and displayed in the game & player info dialog #3263.

(3) Also the hash values in the oos error message shouldn't be displayed, since they don't contain any information at all and only distract and confuse users.

#3294 fixed Obstruction size issues breaking naval trade (carthaginians) Itms serveurix
Description

Carthaginian merchant ships can't trade, they just go to the dock target and stand there, not going back to their second dock target. Apparently (as sanderd17 said on IRC), it's related to obstruction : carthaginians have an obstruction of 6 when others like romans have an obstruction of 8, so carthaginian ships get stuck against the dock because they can't get close enough of it. As mentioned by sanderd17 on IRC, this obstruction problem can happen for other units too, so it need to be solved on a general level.

#3296 fixed [PATCH] Grid Update performance Itms Itms
Description

This ticket implements more clever updates for the passability grid.

#3297 fixed Units don't go to closest points on round targets Itms Itms
Description

Units going back to a round CC will always go to the door of that CC instead of going to the closest point.

This is a bug I thought I had fixed in the pathfinding branch, but it appears that I only fixed it for square buildings.

#3298 fixed [Atlas] Grid updates don't happen while the simulation is not ran Itms Itms
Description

Introduced in r16764, not difficult to fix but that commit was more urgent and makes Atlas usable.

#3308 fixed Naval map management by the AI no more working Itms mimo
Description

The AI needs to know what are the passable tiles, either for land or naval units, but it also needs to know which tiles are adequate for loading or unloading units from a ship. With the old pathFinder, this was done by looking at the tiles which were passable both for land and naval units because this information was available without clearance. But in the new pathFinder, we have the land passable tiles without clearance, but the smallest clearance for naval units is 4, so that there is usually no more any overlap and the AI is unable to find a landing place in most islands. The best solution would be to add a new passability class "default-water-only" which would be the analoguous of "default-terrain-only" for water. But as there are already 8 classes, that's may-be not desired. Another possibility would be to change the "ship-small" class, reducing its clearance. As it is only used for fishing ships which have an obstruction of 2, putting 2 instead of 4 as clearance should work for the pathFinder and would allow to recover most of the overlaps for the AIs to be able to find landing places. Or possibly another solution I didn't think of ?

Edit: according to the comments in pathfinder.xml, default-terrain-only is used only by the AI and not the pathFinder. As it is static (no need to update it), it could be removed from the passability grid leaving room for another possible class and be transfered to the AI as a second grid (with the default-water-only) only at initialization.

#3311 fixed [PATCH] Show number of trade carts and looted resources in summary screen Itms elexis
Description

Currently the "Units" tab shows Infantry, Worker, Cavalry, Champion, Heroes and Navy. But having a good trade is essential for winning games with long duration, the number of trade carts should be added to this table. It would also show how many trade carts were killed.

Also the "Resources" tab should show the amount of loot that people got by killing trade carts and workers that carried resources.

#3318 fixed unit_support_healer relies on missing voice soundgroups Itms s0600204
Description

Units that have the unit_support_healer base template as a parent (or a parent of a parent, etc.) use the following two sound groups:

<order_attack>voice/{lang}/civ/civ_{gender}_go_out_against.xml</order_attack>
<order_gather>voice/{lang}/civ/civ_{gender}_gather_together.xml</order_gather>

This works for a healer where {lang} is "latin", because the appropriate soundgroup files exist for both genders.

However, if the healer is both male and greek, then we get an error about a missing file if that healer is tasked to gather a treasure (or attack for those healers that can do that). (If the healer is female, no problem - the soundgroups exist for them.)

To replicate:

  1. Start a session as athen|mace|spart on a map with treasures (Bactria, for example)
  2. Advance to the town phase, build a temple, and train a healer
  3. Task that healer to gather a treasure
  4. Observe the warning/error that the soundgroup doesn't exist

Possible solution - change the voice groups to:

<order_gather>voice/{lang}/civ/civ_{gender}_attack.xml</order_gather>
<order_gather>voice/{lang}/civ/civ_{gender}_gather.xml</order_gather>

Ref. #3220

#3323 fixed [PATCH] Summary screen fails if a team number is skipped Itms elexis
Description

If you start a match with team 1 and team 3 but no team 2, then the summary screen throws some errors and doesn't display any results at all:

WARNING: JavaScript warning: gui/summary/summary.js line 198
reference to undefined property g_Teams[i]
WARNING: JavaScript warning: gui/summary/layout.js line 248
reference to undefined property g_Teams[i]
WARNING: ClientArea definitions may only contain numerics. Your input: '50 NaN 100% NaN'
ERROR: JavaScript error: gui/summary/layout.js line 254
Error: Invalid value for setting 'size'
  updateGeneralPanelTeams@gui/summary/layout.js:254:3
  updatePanelData@gui/summary/summary.js:76:2
  selectPanel@gui/summary/summary.js:66:2
  init@gui/summary/summary.js:201:2
  leaveGame@gui/session/session.js:344:8
  g_messageBoxCallbackFunction@gui/common/functions_global_object.js:34:4
  init/action@gui/msgbox/msgbox.js:76:5

A null element was added to g_Teams implicitly, so two simple checks have been added in the patch attached.

#3324 fixed [PATCH] The cancel button in the options window does not cancel changes Itms Mark Otaris
Description

When changing an option in the options window and clicking on the cancel button, the change is not saved but still appears if the options window is reopened without restarting the game.

Steps to reproduce:

  1. Start 0 A.D.
  2. Open the options window.
  3. Change a setting (toggle one of the settings, for example).
  4. Click the cancel button.
  5. Reopen the settings window without restarting the game.

Expected result:

The change has been reverted, and the settings are in the state they were in when starting 0 A.D.

Actual result:

The change has not been reverted, and is still there.

However, if 0 A.D. is restarted and the options window is opened again, then it will in fact have been reverted, which is not the case if the button to save changes is clicked on.

#3327 fixed Shared Ally Vision Problem Itms elexis
Description

Today a problem has occured with a game on r16838. Player 4 (yellow) researched a the tech at the market at minute 10. Then at minute 11 his ally (Player 3, green) scouted the enemy base (Player 2, red). Player 4 could see the units in the field of view of the scouting cavalry, however the buildings and resources were invisible.

Furthermore the units were still visible after the scout left for about 30 seconds (the units become invisible one by one).

Reproduce by replaying the attached file with r16838, 10x speed to fast forward and change the perspective to player 4 with the developers overlay.

Refs #2055.

There was a similar bug, fixed in r16359 (thanks to trompetin17 for finding the revision), so maybe it is only missing an update somewhere.

#3329 fixed Capturing - Units will attack if capture order is issued on a mirage / structure in fog of war Itms elexis
Description

If you select some units and click on an enemy building that is inside the fog of war, then the units will go there and attack the building instead of capture it.

The command issued in that case is:

cmd 1 {"type":"attack","entities":[3377,3378,3379,3380,3381,3382,3383,3384,3385,3386],"target":3488,"allowCapture":true,"queued":false}

The order is issued to the mirage instead of the original entity.

#3337 fixed [PATCH] Improve the UnitMotion component to improve the pathfinder Itms wraitii
Description

This is a general purpose ticket for issues with CcmpUnitMotion, which is somewhat dumb. This is the code that actually makes unit move, including calls to the pathfinding components. It handles a variety of logic and is linked with UnitAI in non-obvious ways.

The most important current issue is that units can get stuck if they need to go around a unit (units aren't counted in the long range pathfinder obstructions), and the short-range pathfinder can't find a path. The attached patch fixes the simpler cases by keeping the waypoints instead of scraping them (so units don't simply forget where they were going if there is an obstruction) and telling potential idle units to move away to clear the space in some cases. It seems to work fairly well, but some edge cases still happen where the units gets stuck. Needs some testing for the "trader route" case. I however believe it improves on the current situation and thus should be committed.

A better fix would probably rely on giving order through unitAI but that requires bigger and more complex changes to unitMotion.

#3363 fixed Units can't reach CC Itms fabio
Description

Units try to drop food and stone, continually walking in the same position next to the CC but are never able to reach it and drop their load.

commands.txt with 2015-07-29 svn.

Screenshot: http://wildfiregames.com/forum/uploads//monthly_07_2015/post-8891-0-11437200-1438256645.png

Originally reported here.

#3364 fixed SAFE_DELETE(g_Game); crashes for scenario map "Arcadia" Itms elexis
Description

Reproduce: Start a single or multiplayergame on that map and click on exit.

It fails on EndGame() in GameSetup.cpp when doing

SAFE_DELETE(g_Game);

Error:

*** Error in `./pyrogenesis': free(): invalid next size (normal): 0x00000000095d7400 ***
#3372 fixed construction doesn't start if there is an animal on the construction area Itms rogue-spectre
Description

Hi,

One can order to build a building where some living animals are present but the construction won't start. In the case of chicken they can be hidden in boxes of the construction site and are not easily visible. One must kill them or make them leave in order the construction can start. I think that two behaviours could avoid this :

1 - Don't allow building where there are some animals/people - assuming once the building area is defined, no one can go "inside" the construction site.

2 - "Order" animals to leave a construction site, this could be justified as they will be annoyed by the construction noises.

nice day.

#3376 fixed [PATCH] Units stuck at obstruction corners Itms Itms
Description

Moving silure's report from #3363 to here. This is a discrepancy between short and long pathfinder. I'm investigating to find a way to fix that.


After chasing a camel the unit get stuck at CC, this happens only with Mauryans (r16927).

#3378 fixed Crash on rejoin (percentage of map controlled) Itms elexis
Description

If you start a multiplayergame on the skirmish map "Northern Island (2)" or "Neareastern Badlands (4)" and then rejoin with the other client, you get this crash:

CCmpTerritoryManager.cpp(538): Assertion failed: "m_TerritoryTotalPassableCellCount > 0"
Assertion failed: "m_TerritoryTotalPassableCellCount > 0"
Location: CCmpTerritoryManager.cpp:538 (GetTerritoryPercentage)

Refs #3321 r16933

That commit initially sets m_TerritoryTotalPassableCellCount = 0; but requires ENSURE(m_TerritoryTotalPassableCellCount > 0); in the according line.

Sounds like that value should either be serialized or computed again when rejoining.

The serializationtest doesn't fail.

#3391 fixed [PATCH] Lists are sorted when clicking on the first item Itms elexis
Description

If you click 4 pixels below the header of a sortable OList, then the list will be sorted and the first item will be selected. But since you clicked below the header, it shouldn't sort - only select the first item.

The issue was introduced with the initial commit r16781 that implements sortable lists #2405 and is caused by adding those 4 pixels explicitly:

CPos leftTopCorner = m_CachedActualSize.TopLeft() + CPos(xpos, 4);

Setting that value to 0 solves the issue.

(Having greater or smaller column heights as defined in m_HeadingHeight(30.f) doesn't change the bug)

You can easily reproduce the issue with the playerlist in the lobby. But also the visual replay menu #3258 will suffer from this flaw.

#3425 fixed Crash - Serialize OutOfBounds Itms elexis
Description

No clue yet why that happened. Just built a tower with 2 spearmen, garrissoned it and killed one or more passive enemy units. The crash happened just after the first or second kill on turn 79.

Occured on r17026. Reproduce by replaying the attached commands.txt.

#3429 fixed UnitAI - FinishOrder called when order queue is empty Itms silure
Description

At turn 352 (r17033):

ERROR: FinishOrder called for entity 531 (units/brit_support_female_citizen) when order queue is empty
  UnitAI.prototype.FinishOrder@simulation/components/UnitAI.js:3500:7
  UnitAI.prototype.UnitFsmSpec.INDIVIDUAL.WALKING.MoveCompleted@simulation/components/UnitAI.js:1498:5
  FSM.prototype.ProcessMessage@simulation/helpers/FSM.js:274:29
  UnitAI.prototype.OnMotionChanged@simulation/components/UnitAI.js:3836:63
#3430 fixed [PATCH] UnitAI - undefined property this.order.data.type while gathering Itms Kieran P
Description

These errors got repeated hundreds of times.

WARNING: JavaScript warning: simulation/components/UnitAI.js line 2218
reference to undefined property this.order.data.type
ERROR: JavaScript error: simulation/components/UnitAI.js line 2218
TypeError: this.order.data.type is undefined
  UnitAI.prototype.UnitFsmSpec.INDIVIDUAL.GATHER.GATHERING.enter@simulation/components/UnitAI.js:2218:11
  FSM.prototype.SwitchToNextState@simulation/helpers/FSM.js:376:1
  FSM.prototype.ProcessMessage@simulation/helpers/FSM.js:284:4
  UnitAI.prototype.OnMotionChanged@simulation/components/UnitAI.js:3840:63
ERROR: Script message handler OnMotionChanged failed
ERROR: Error in timer on entity 7325, IID 89, function TimerHandler: TypeError: resourceType is undefined
  UnitAI.prototype.UnitFsmSpec.INDIVIDUAL.GATHER.GATHERING.Timer@simulation/components/UnitAI.js:2262:1
  FSM.prototype.ProcessMessage@simulation/helpers/FSM.js:274:29
  UnitAI.prototype.TimerHandler@simulation/components/UnitAI.js:3798:68
  Timer.prototype.OnUpdate@simulation/components/Timer.js:100:4
#3439 fixed Update build proces to Visual Studio 2015 Itms Niek
Description

Currently building fails with VS2015, fixing that would be nice.

#3480 fixed Pathfinder - some compiler warnings Itms elexis
Description
In file included from ../../../source/simulation2/helpers/LongPathfinder.h:21:0,
                 from ../../../source/simulation2/helpers/LongPathfinder.cpp:20:
../../../source/simulation2/helpers/LongPathfinder.cpp: In member function ‘void LongPathfinder::ComputePath(entity_pos_t, entity_pos_t, const PathGoal&, pass_class_t, std::vector<CircularRegion>, WaypointPath&)’:
../../../source/simulation2/helpers/Pathfinding.h:102:59: warning: suggest parentheses around ‘-’ inside ‘<<’ [-Wparentheses]
 #define PASS_CLASS_MASK_FROM_INDEX(id) ((pass_class_t)(1u << id))
                                                           ^
../../../source/simulation2/helpers/Pathfinding.h:103:28: note: in expansion of macro ‘PASS_CLASS_MASK_FROM_INDEX’
 #define SPECIAL_PASS_CLASS PASS_CLASS_MASK_FROM_INDEX(PASS_CLASS_BITS-1) // 16th bit, used for special in-place computations
                            ^
../../../source/simulation2/helpers/LongPathfinder.cpp:1109:32: note: in expansion of macro ‘SPECIAL_PASS_CLASS’
  ComputePath(x0, z0, origGoal, SPECIAL_PASS_CLASS, path);
                                ^
../../../source/simulation2/helpers/LongPathfinder.cpp: In member function ‘void LongPathfinder::GenerateSpecialMap(pass_class_t, std::vector<CircularRegion>)’:
../../../source/simulation2/helpers/Pathfinding.h:102:59: warning: suggest parentheses around ‘-’ inside ‘<<’ [-Wparentheses]
 #define PASS_CLASS_MASK_FROM_INDEX(id) ((pass_class_t)(1u << id))
                                                           ^
../../../source/simulation2/helpers/Pathfinding.h:103:28: note: in expansion of macro ‘PASS_CLASS_MASK_FROM_INDEX’
 #define SPECIAL_PASS_CLASS PASS_CLASS_MASK_FROM_INDEX(PASS_CLASS_BITS-1) // 16th bit, used for special in-place computations
                            ^
../../../source/simulation2/helpers/LongPathfinder.cpp:1129:10: note: in expansion of macro ‘SPECIAL_PASS_CLASS’
     n |= SPECIAL_PASS_CLASS;
          ^
../../../source/simulation2/helpers/Pathfinding.h:102:59: warning: suggest parentheses around ‘-’ inside ‘<<’ [-Wparentheses]
 #define PASS_CLASS_MASK_FROM_INDEX(id) ((pass_class_t)(1u << id))
                                                           ^
../../../source/simulation2/helpers/Pathfinding.h:103:28: note: in expansion of macro ‘PASS_CLASS_MASK_FROM_INDEX’
 #define SPECIAL_PASS_CLASS PASS_CLASS_MASK_FROM_INDEX(PASS_CLASS_BITS-1) // 16th bit, used for special in-place computations
                            ^
../../../source/simulation2/helpers/LongPathfinder.cpp:1139:10: note: in expansion of macro ‘SPECIAL_PASS_CLASS’
     n |= SPECIAL_PASS_CLASS;
          ^
#3708 fixed [PATCH] SpiderMonkey 38 Upgrade Itms leper
Description

SpiderMonkey 38 was released some time ago, and it brings some improvements like eg better ES6 support. I've started working on the upgrade and it compiles without problems right now, but there is still 1 test failures (which is to be expected and cannot easily be fixed since the function we relied on was removed). Some review, testing and suggestions would be nice. There is a commit for each upstream change that required a change in our code, or did not fit in any of those. The last commit contains some TODOs. The debug api was removed and JS_SetFunctionCallback which could have been used for our needs was also removed in SM37 (hinting at both the JS Debugger and the tracelogger). Given the high number of changes needed and for easier testing/reviewing the code is in the sm38 branch of my github repo. https://github.com/na-Itms/0ad/tree/sm38 (Note that this will be rebased (both on top of 0ad/0ad and interactively).)

#3729 fixed Migrate to premake5 Itms Itms
Description

We're currently using a modified version of premake4 to create our workspaces.

Premake5 is currently being developed and should reach a stable state soon, so we should try to start a soft migration by experimentally using their alphas along with our current version, and drop the latter when they release premake5.

Doing so will allow us:

  • to generate project files for VS 2015, which we cannot use right now.
  • to stop using a modified premake (see #1518), because premake5 allows us to create custom modules, which is a much more maintainable solution.

NB: They moved from BitBucket to GitHub so most of the links in the other ticket are broken, and I think one pull request vanished.

What has to be done:

I tried to give it a go but I am not fluent in Lua and don't know much about all of this building stuff. The module system seems powerful and well documented, so maybe it will be really easy for people working on it before (CCing Yves and leper) to write those modules.

#3744 fixed [PATCH] Credits page Itms Itms
Description

Hi, my credits page patch should be ready now.

I'm still missing some names, I'm currently contacting people, but in the meantime this is ready for review.

The translators are a specific case: there is a Python script that extracts their names from the .po files. Please comment on this matter. The output formatting is hideous, which is a shame because my script allows us to manually add people to the file. I didn't add the output in the patch (because of the poor formatting it makes a huge file), but you can test the script and see how it works.

This script might have to be added to the maintenance tasks script, but I can't really test .sh scripts here.

Finally, when I commit this I propose to make a change to SubmittingPatches so that new contributors add a change to the programming.json file. That way they can choose themselves how to be credited and this makes things easier. Do you agree with the proposal?

#3790 fixed [PATCH] Remove UnitMotion planning Itms mimo
Description

in UnitMotion, the function PlanNextStep introduced in r17229 tries to anticipate the obstructions from moving units in the following turns, but it has several problems as:

1) it is supposed to check two turns in advance, but as it is called before the current move, it effectively checks only one turn 2) it does not check if we have already a path in computation, which results in a lot of useless short path being computed 3) it does not check that the tested path will not go beyond our goal

These drawbacks are fixed by the attached patch. But the main problem remains which is that it does not take into account the motion of the obstructing units, so for example if units are following each others, the following ones will always be found obstructed and new short paths be recomputed. I've check using valgrind on 2000 turns of a 4 AIs game.

with svn, there is 2500 requestLongPath and 10400 requestShortPath, with the patch, there is 2500 requestLongPath and 9800 requestShortPath, without the planning, there is 2300 requestLongPath and 6500 requestShortPath, without any apparent effect on the unit movements.

These numbers are not fully comparable as the simulation is obviously different between these 3 cases, but it definitively shows that this planning creates a lot of short path requests. So my proposition is to completely remove it.

#3796 fixed [PATCH] CCacheLoader failed to find archived or source file for: "" Itms elexis
Description

This error occured in an alpha 19 match on turn 2037.

#3827 fixed Translation of the translators' languages in the credits Itms Itms
Description

There is a loophole in the process of choosing which languages will be included in a released version of the game: when a new language is included (for instance Bulgarian in A20), usually we wait for translation freeze, add it in remove-incomplete-translations.sh and we're done.

Now if we do that and add the new language in creditTranslators.py and run the script, that will modify the credit strings and break the string freeze (the name of the new language will have to be translated).

I think there is no way to fix that (the only way is to predict which languages will be 90% complete when we freeze the strings, which is dangerous).

We could decide not to translate the language name: then we have the possibility to put the language name in English, or in the language itself ("Français" for French, "Deutsch" for German, etc.) or both ("Español - Spanish").

This is blocking the string freeze currently.

#3849 fixed Queued commands to build in fog of war fails Itms _kali
Description

Queuing units to build something in the fog of war and then return to a point fails in SVN, but works in a19. I've noticed this 3 times in multiplayer games on SVN and reproduced locally vs. the sandbox AI.

Step 1 - Scout territory outside of your base. Step 2 - Select a group of worker units (men / women doesn't seem to matter) Step 3 - Hold down shift and place a house (barracks, forts, civ centers and docks seem to work too, probably all buildings) inside your territory, but in the fog of war (it seems to still reproduce wether the building is partially or completely in the fog of war) Step 4 - While still holding down shift, right click to a point on the map (to queue the units returning to a point)

Repeating these same steps but placing the building in the visible area (not the fog of war), executes the queued commands successfully, so I think it has something to do with the fog of war.

#3854 fixed Wall-builder spits an error when there aren't enough resources Itms sanderd17
Description

When you build a wall, but the last pieces turn red due to lack of resources, it throws to following error (once):

ERROR: [TryConstructWall] No entity ID set for constructed entity of template 'structures/rome_wall_tower'

Apart from that, it doesn't have any affect on the gameplay, so it's just mildly annoying and could cause some bug reports when this gets released.

#3869 fixed [PATCH] Build error at Fedora 23 Itms bb
Description

The build of svn, A19 and A20 fails at Fedora 23 when linking tests. It gives the following error:

 /usr/bin/ld: obj/test_Release/test_root.o: relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC
obj/test_Release/test_root.o: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
test.make:163: recipe for target '../../../binaries/system/test' failed
make[1]: *** [../../../binaries/system/test] Error 1
Makefile:92: recipe for target 'test' failed
make: *** [test] Error 2

Attached patch resolves the error and let the game run normally (it has been applied for me last few month).

#3884 fixed [PATCH] Add current OS X version to build-osx-bundle.sh Itms jurgemaister
Description

Currently, the script has the OS X version 10.10 hard coded into the SYSROOT path, but the current version of OS X is 10.11. I changed this to use the version running on the user's computer.

#3907 fixed [PATCH] Use range based for in network code Itms elexis
Description

About r17730: 18:13 <@leper> and that loop could use a range based for

While wiki:Coding_Conventions only states that range-based for should be prefered over for-each, the network code exclusively uses numerical loops. This patch changes all loops in the 3 relevant network files. Disclaimer: I dont like the patch, didn't enjoy writing it, pointless churn, wasted time and don't care if it's closed as wont fix.

#4010 fixed [PATCH] Wonder victory messages need to be deleted after win Itms elexis
Description

When someone wins a wonder victory game and an ally owns a wonder too, the message that he will win too should disappear (as only one player / team can win the game).

Furthermore building a new one shouldn't result in triggering the countdown again.

See EndGameManager.js and WonderVictory.js.

#4027 fixed Make mod installer Itms sanderd17
Description

It should be possible to install mods by opening a mod file with 0ad:

  • The modder makes a file available for download, named something like modName.pyromod (which is just the zip generated by the archivebuilder, which includes the mod.json file)
  • The player downloads the file to his downloads
  • Then the player is able to open the file with 0ad/pyrogenesis
  • The game places the mod zip in a new (TODO maybe allow overwriting the same mod if it is a newer version) mod folder.

Note that during the last step we can add a platform specific workaround for mods on Windows, as once a mod is mounted reading the mod.json from the zip is not possible.

#4148 invalid Upgrade cppformat 2.1.1 to fmtlib 3.x Itms Itms
Description

cppformat has a new version with lots of breaking changes for us (including, but not limited to the name change of the library).

https://github.com/fmtlib/fmt/releases

Once #3190 is taken care of, I will look into this new update.

#4190 fixed [PATCH] Make 0 A.D. large address aware on Windows for releases Itms Itms
Description

As considered in #1619, using the large address aware flag on Windows could fix some memory issues we have, by enabling the use of 2GB of RAM on every machine.

However, this does not fix the underlying memory issues, and worse, it masks them.

Attached patch, based on patch by echotangoecho, adds a build flag adding support for large addresses. This flag should be enabled for the autobuilder, so that release users and SVN playtesters can play without issues, but it shouldn't be enabled when compiling the game with update-workspaces.bat.

Question: How to do that with Jenkins?

#4191 fixed [PATCH] Clever map updates for the AI Itms Itms
Description

The underlying issue for the memory crash everybody experiences is the update of the passability map for the AI. It uses our custom ToJSVal for Grids which does the following:

  • Create a new array
  • Allocate memory for it and copy the data from m_PassabilityMap
  • Set the data property of m_PassabilityMapVal to the new array
  • (Later the old value of data will be deleted by the GC since it is not used anymore)

Thus, in the specific case of the AI map, this is sub-optimal and causes the allocation of a large chunk of memory (the entire passability map, array of size width*height*size(u16)) for nothing. This patch adds a custom function that modifies the already allocated passability data. It also uses that method for the territory map, which is allocated the same way but causes less problems since it is far smaller. Additionally, I propose to remove the function GetConnectivityGrid which is not used by the AI and has the same flaw. If the AI needs such a grid in the future, it should work the same way as the passability and territory ones. This fixes the memory crash I experience in large maps (like Stan's new Corinthian Isthmus(4)), but other people should also test it.

#4238 fixed The visual actor unit causes SEGFAULT when running without graphics Itms elexis
Description

The attached replay crashes with a SEGFAULT when doing a serializationtest on it (r18742).

Alpha 20 doesn't show this behavior, so it's a regression.

#4239 fixed [PATCH] Serialize the data in DataTemplateManager to avoid OOS on rejoin Itms Itms
Description

The data in DataTemplateManager (r18100) is only read from the disk so we don't serialize it. However, on rejoin, if a template had been loaded by the host, the next time this template is loaded, the guest will load a new JS object (which has the same content as the host's but it's not the same object).

Upon serialization, the objects will have different backrefs on the two instances, leading to a difference in the binary simstates.

#4242 fixed [PATCH] Rejoin-testing tool Itms Itms
Description

Even though -serializationtest allows us to spot any problem that could happen on rejoin, it's really slow and does not allow us to quickly reproduce the issue.

Attached patch, based on a hack by wraitii and elexis, adds a -rejointest=N cl option that is similar to -serializationtest but exactly simulates a rejoin. On turn N, a secondary simulation is set up with the serialized data from the primary one, and then both run but without deserializing everything on each turn: only states are compared.

This solution is really fast and you only need the host's commands.txt and the turn number where the guest joined (easy to find in their commands.txt).

Using this along with -ooslog makes debugging an OOS far less tedious.

#4244 fixed [PATCH] Remove unneeded ReserveScriptBackref from the StdDeserializer Itms Itms
Description

If I'm not mistaken, the ReserveScriptBackref system in the deserializer is useless. One must pay attention to creating the backref at the right moment (see r16959) but it's not needed to actually assign the backref after the object is populated.

I think this system was actually useful before we had exact stack rooting.

This patch also contains whitespace fixes, and it makes one of the tests more logical.

#4247 fixed [PATCH] Reading a saved game (with AIs) give a segmentation fault Itms mimo
Description

here is a log

Thread 1 "pyrogenesis" received signal SIGSEGV, Segmentation fault.
0x00007ffff73e8710 in js::GetProperty (vp=..., id=..., receiver=..., obj=..., cx=cx@entry=0x118c6220)
    at /data/kubuntu/jeux/0ad/svnbak/libraries/source/spidermonkey/mozjs-38.0.0/js/src/vm/NativeObject.h:1406
1406            return op(cx, obj, receiver, id, vp);
(gdb) bt
#0  0x00007ffff73e8710 in js::GetProperty (vp=..., id=..., receiver=..., obj=..., cx=cx@entry=0x118c6220)
    at /data/kubuntu/jeux/0ad/svnbak/libraries/source/spidermonkey/mozjs-38.0.0/js/src/vm/NativeObject.h:1406
#1  JS_ForwardGetPropertyTo (cx=cx@entry=0x118c6220, obj=..., id=..., onBehalfOf=..., vp=...)
    at /data/kubuntu/jeux/0ad/svnbak/libraries/source/spidermonkey/mozjs-38.0.0/js/src/jsapi.cpp:2663
#2  0x00007ffff73e874b in JS_GetPropertyById (cx=cx@entry=0x118c6220, obj=..., obj@entry=..., id=..., id@entry=..., vp=..., vp@entry=...)
    at /data/kubuntu/jeux/0ad/svnbak/libraries/source/spidermonkey/mozjs-38.0.0/js/src/jsapi.cpp:2652
#3  0x00007ffff73e88bc in JS_GetProperty (cx=cx@entry=0x118c6220, obj=obj@entry=..., name=name@entry=0x99e343 "data", vp=vp@entry=...)
    at /data/kubuntu/jeux/0ad/svnbak/libraries/source/spidermonkey/mozjs-38.0.0/js/src/jsapi.cpp:2690
#4  0x00000000005377eb in CAIWorker::UpdatePathfinder (this=this@entry=0x6556248, passabilityMap=..., globallyDirty=<optimized out>, 
    dirtinessGrid=..., nonPathfindingPassClassMasks=std::map with 5 elements = {...}, pathfindingPassClassMasks=std::map with 4 elements = {...})
    at ../../../source/simulation2/components/CCmpAIManager.cpp:533
#5  0x0000000000537ccc in CCmpAIManager::StartComputation (this=0x65561e0) at ../../../source/simulation2/components/CCmpAIManager.cpp:1119
#6  0x0000000000480593 in CSimulation2Impl::Update (this=0xf85c710, turnLength=<optimized out>, commands=std::vector of length 0, capacity 0)
    at ../../../source/simulation2/Simulation2.cpp:462
#7  0x000000000048238f in CSimulation2::Update (this=<optimized out>, turnLength=<optimized out>, commands=std::vector of length 0, capacity 0)
    at ../../../source/simulation2/Simulation2.cpp:691
#8  0x000000000044700c in CNetTurnManager::Update (this=<optimized out>, simFrameLength=<optimized out>, maxTurns=1)
    at ../../../source/network/NetTurnManager.cpp:173
#9  0x00000000005e0f7b in CGame::Update (this=0x82ad500, deltaRealTime=0.03586207702755928, doInterpolate=doInterpolate@entry=true)
    at ../../../source/ps/Game.cpp:401
#10 0x000000000042fe88 in Frame () at ../../../source/main.cpp:336
#11 RunGameOrAtlas (argc=argc@entry=1, argv=argv@entry=0x7fffffffdc08) at ../../../source/main.cpp:527
#12 0x0000000000421607 in main (argc=1, argv=0x7fffffffdc08) at ../../../source/main.cpp:567

could be due to r18759

#4266 fixed [PATCH] Ex-allies units visible in fog of war after changing the diplomacy Itms elexis
Description

In this alpha 21 / r18800 replay at minute 48, the blue player (me) declared war on an ally (green player, siole). Many units that were previously visible in siole's field of view were still visible in the fog of war after the diplomacy was changed to enemy (i.e. many (all?) units by the green player and some of the red players units that were seen by the green units). The bug can be reproduced by visually replaying the attached file and selecting the perspective of the blue player.

http://trac.wildfiregames.com/raw-attachment/ticket/4266/before.jpg http://trac.wildfiregames.com/raw-attachment/ticket/4266/after.jpg http://trac.wildfiregames.com/raw-attachment/ticket/4266/total.jpg

#4270 fixed [PATCH] OOS on rejoin - Visual Actor Itms elexis
Description

As #4239 was solved yesterday, we finally got to test for other OOS issues the first time since many months. Here, bb rejoined a game and triggered an OOS.

The textual simstate representations only differ in the visual actor component of 3 women and 1 spearman. They were all in the carry_wood animation for the host but in the walk animation for the rejoined client.

   VisualActor:
     base actor: "units/persians/infantry_spearman_b.xml"
     r: 1
     g: 1
     b: 1
     anim run threshold: 11.75
     anim name: "build"
     anim once: false
     anim speed: 1
     sound group: "resource/construction/con_wood.xml"
     anim desync: 0.05
     anim sync repeat time: 0
     length: 1
     key: "animation"
-    value: "carry_wood"
+    value: "walk"
     seed: 423
     actor: "units/persians/infantry_spearman_b.xml"
#4385 fixed [PATCH] aiAnalysisInfluenceGroup GuiInterface tests Itms elexis
Description

Fixes guiinterface regression tests. Someone might want to extend them.

#4446 fixed Get rid of Dehydra scripts Itms Itms
Description

We currently have one Dehydra script under ps/trunk/build/dehydra which can check our printf-like functions. It is supposed to complement GCC's own analysis.

However, Dehydra is completely left abandoned (https://developer.mozilla.org/en-US/docs/Archive/Mozilla/Dehydra) and we don't really use it anyways.

We should get rid of this and include the custom script in the static code analysis we are setting up. Basically, are cppcheck and clang's scan-build both unable to detect the issue? If yes, try to extend somehow one of them to detect it. Else just drop the dehydra code.

#4549 fixed Update to NVTT 2.1.1 Itms leper
Description

NVTT 2.1.1 was released in 2017.

It would also be nice to possibly unbundle NVTT, since there aren't any patches that are actually needed (memory leak fixes, compression fixes, etc) anymore.

https://github.com/na-Itms/0ad/tree/nvtt imports the new release, updates the needed patches, fixes the build of NVTT and 0 A.D.

Tested on Windows and Linux (build and mass-convert textures). Windows developers might get memory issues if they try to mass rebuild the textures, the --large-address-aware flags helps with that.

#4561 fixed Recent NVidia driver crashing 0AD Itms Roosi
Description
Error:
Function call failed: return value was -100102 (Case 2)
Location: wmi.cpp:62 (Init)

Call stack:

Init (wmi.cpp:62)
    pLoc = 
        m_pInterface = 0x00000033


ModuleInit (module_init.cpp:47)
    initState = 0x013E971C -> 4294867266 (0xFFFE7942)
    init = 0x012D5DD0 -> (Init)

wmi_GetClassInstances (wmi.cpp:108)
    className = 0x01396494 -> "Win32_SoundDevice"
    instances = 0x00CFEBFC -> (unsupported vector<map<basic_string<wchar_t,char_traits<wchar_t> >,tagVARIANT > >)
    pEnum = 
        m_pInterface = 0x0011A140 -> 
            (IUnknown)


    query = [200] 
        13056
        14382
        12854
        50 ('2')
        0
        0
        0
        0
        0
        0
        15
        0 ...
    pObj = 
        m_pInterface = 0x00CFEA2C -> 
            (IUnknown)


    instance = (unsupported map<basic_string<wchar_t,char_traits<wchar_t> >,tagVARIANT >)
    numReturned = 13565998 (0x00CF002E)
    name = 0x00CFEBD0 -> [8] { 17160, 302, 25748, 313, 60412, 207, 53335, 49440 }
    value = 
        vt = 26159 (0x662F)
        wReserved1 = 40577 (0x9E81)
        wReserved2 = 50704 (0xC610)
        wReserved3 = 17 (0x0011)
        llVal = 58524942375840676 (0x00CFEC2000CFEBA4)
        lVal = 13626276 (0x00CFEBA4)
        bVal = 164 (0xA4)
        iVal = 60324 (0xEBA4)
        fltVal = 0.000000 (0x00CFEBA4)
        dblVal = 9.09179e-305 (0x00CFEC2000CFEBA4)
        boolVal = 60324 (0xEBA4)
        scode = 13626276 (0x00CFEBA4)
        cyVal = { Lo = 13626276 (0x00CFEBA4), Hi = 13626400 (0x00CFEC20), int64 = 58524942375840676 (0x00CFEC2000CFEBA4) }
        date = 9.09179e-305 (0x00CFEC2000CFEBA4)
        bstrVal = 0x00CFEBA4 -> [8] { 9880, 3086, 60360, 207, 11646, 30650, 15, 0 }
        punkVal = 0x00CFEBA4 (see above)
        pdispVal = 0x00CFEBA4 (see above)
        parray = 0x00CFEBA4 (see above)
        pbVal = 0x00CFEBA4 (see above)
        piVal = 0x00CFEBA4 (see above)
        plVal = 0x00CFEBA4 (see above)
        pllVal = 0x00CFEBA4 (see above)
        pfltVal = 0x00CFEBA4 (see above)
        pdblVal = 0x00CFEBA4 (see above)
        pboolVal = 0x00CFEBA4 (see above)
        pscode = 0x00CFEBA4 (see above)
        pcyVal = 0x00CFEBA4 (see above)
        pdate = 0x00CFEBA4 (see above)
        pbstrVal = 0x00CFEBA4 (see above)
        ppunkVal = 0x00CFEBA4 (see above)
        ppdispVal = 0x00CFEBA4 (see above)
        pparray = 0x00CFEBA4 (see above)
        pvarVal = 0x00CFEBA4 (see above)
        byref = 0x00CFEBA4 (see above)
        cVal = 164
        uiVal = 60324 (0xEBA4)
        ulVal = 13626276 (0x00CFEBA4)
        ullVal = 58524942375840676 (0x00CFEC2000CFEBA4)
        intVal = 13626276 (0x00CFEBA4)
        uintVal = 13626276 (0x00CFEBA4)
        pdecVal = 0x00CFEBA4 (see above)
        pcVal = 0x00CFEBA4 (see above)
        puiVal = 0x00CFEBA4 (see above)
        pulVal = 0x00CFEBA4 (see above)
        pullVal = 0x00CFEBA4 (see above)
        pintVal = 0x00CFEBA4 (see above)
        puintVal = 0x00CFEBA4 (see above)
        pvRecord = 0x00CFEBA4 (see above)
        pRecInfo = 0x00CFEC20 -> 
            (IUnknown)

        decVal = 
            wReserved = 26159 (0x662F)
            scale = [8] { 129 (0x81), 158 (0x9E), 16 (0x10), 198 (0xC6), 17 (0x11), 0 (0x00), 164 (0xA4), 235 (0xEB) }
            sign = 158 (0x9E)
            signscale = 40577 (0x9E81)
            Hi32 = 1164816 (0x0011C610)
            Lo32 = 13626276 (0x00CFEBA4)
            Mid32 = 13626400 (0x00CFEC20)
            Lo64 = 58524942375840676 (0x00CFEC2000CFEBA4)



win_get_snd_info (wsnd.cpp:130)
    instances = (unsupported vector<map<basic_string<wchar_t,char_traits<wchar_t> >,tagVARIANT > >)
    names = (unsupported set<basic_string<wchar_t,char_traits<wchar_t> > >)
    versionList = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
    dlls = (unsupported set<basic_string<wchar_t,char_traits<wchar_t> > >)

WriteSystemInfo (util.cpp:87)
    cpuClock = 4.43749e-038 (0x382E33333FFE9AFB)
    driverInfo = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
    smbios = (unsupported basic_string<char,char_traits<char> >)
    un = 
        sysname = "622 ms"
        nodename = [16] { 18, 125 ('}'), 11, 10, 0, 0, 0, 15, 0, 0, 0, 0, 38 ('&'), 14, 12, 250 }
        release = [9] { 236, 162, 91 ('['), 0, 0, 16, 0, 0, 0 }
        version = [16] { 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 232, 18, 125 ('}'), 11, 168, 7 }
        machine = [9] { 14, 12, 211, 208, 32 (' '), 193, 232, 194, 182 }

    pathname = 
        path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
        separator = 46640

    cardName = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
    LINE_81_ = 
        m_t0 = 1.91294 (0x3FFE9B633EF10D12)
        m_description = 0x0136EF30 -> "write_sys_info"

    seconds = 4048229410262653691 (0x382E33333FFE9AFB)
    timestampBuf = [100] 
        40 ('(')
        0
        5
        0
        0
        0
        0
        0
        2
        0
        0
        0 ...

InitGraphics (gamesetup.cpp:1029)
    args = (unavailable)
    flags = (unavailable)
    profilerGPUEnable = false
    setup_vmode = false
    context = [2048] 
        192 (0xC0)
        112 (0x70)
        186 (0xBA)
        119 (0x77)
        212 (0xD4)
        239 (0xEF)
        207 (0xCF)
        0 (0x00)
        0 (0x00)
        0 (0x00)
        0 (0x00)
        0 (0x00)
        44 (0x2C)
        0 (0x00)
        0 (0x00)
        0 (0x00) ...
    buf = [500] 
        0
        0
        1088
        0
        63456
        207
        0
        0
        0
        256
        36 ('$')
        0 ...
    context = [2048] 
        192 (0xC0)
        112 (0x70)
        186 (0xBA)
        119 (0x77)
        212 (0xD4)
        239 (0xEF)
        207 (0xCF)
        0 (0x00)
        0 (0x00)
        0 (0x00)
        0 (0x00)
        0 (0x00)
        44 (0x2C)
        0 (0x00)
        0 (0x00)
        0 (0x00) ...
    context = [2048] 
        192 (0xC0)
        112 (0x70)
        186 (0xBA)
        119 (0x77)
        212 (0xD4)
        239 (0xEF)
        207 (0xCF)
        0 (0x00)
        0 (0x00)
        0 (0x00)
        0 (0x00)
        0 (0x00)
        44 (0x2C)
        0 (0x00)
        0 (0x00)
        0 (0x00) ...
    rq = 
        mContext = 0x00000000

    setup_gui = false
    data = 
        { 
                (js::ValueOperations<JS::Rooted<JS::Value> >)
 }
        stack = 0x77BE0000 -> 0xFFFFFDF4 -> 
            (js::RootedBase<void *>)
            stack = (unavailable - internal error)

            prev = (unavailable - internal error)

            ptr = (unavailable - internal error)


        prev = 0xB7D9D451 -> 
            (js::RootedBase<void *>)
            stack = (unavailable - internal error)

            prev = (unavailable - internal error)

            ptr = (unavailable - internal error)


        ptr = 
            data = 
                asBits = 13627564 (0x0000000000CFF0AC)
                s = { payload = 
                        i32 = 13627564 (0x00CFF0AC)
                        u32 = 13627564 (0x00CFF0AC)
                        boo = 13627564 (0x00CFF0AC)
                        str = 0x00CFF0AC -> (JSString)
                        sym = 0x00CFF0AC (see above)
                        obj = 0x00CFF0AC (see above)
                        cell = 0x00CFF0AC (see above)
                        ptr = 0x00CFF0AC (see above)
                        why = 13627564
                        word = 13627564 (0x00CFF0AC)
                        uintptr = 13627564 (0x00CFF0AC)
, tag = 0 }
                asDouble = 6.73291e-317 (0x0000000000CFF0AC)
                asPtr = 0x00CFF0AC (see above)



    scriptInterface = (shared_ptr<ScriptInterface>)
    e = 0x00000000

RunGameOrAtlas (main.cpp:525)
    argc = 2 (0x00000002)
    argv = 0x002A0008 -> 0x002A0028 -> "C:\Users\Roosi\AppData\Local\0 A.D. alpha\binaries\system\pyrogenesis.exe"
    replayFile = (unsupported basic_string<char,char_traits<char> >)
    scriptEngine = 
        (Singleton<ScriptEngine>)
        m_Runtimes = (unsupported list<JSRuntime const * >)

    args = 
        m_Args = (unsupported vector<pair<CStr8,CStr8> >)
        m_Arg0 = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 92 ('\')


    res = 0 (0x0000000000000000)
    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 = 72 ('H')

        m_gameData = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 0

        m_userData = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 0

        m_config = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 2

        m_cache = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 8

        m_logs = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 49840


    replay = 
        m_Stream = 0x00000004

    mod = 
        path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
        separator = 62185

    zip = 
        path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
        separator = 0

    mods = (unsupported vector<CStr8 >)
    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 = 72 ('H')

        m_gameData = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 0

        m_userData = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 0

        m_config = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 2

        m_cache = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 8

        m_logs = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 49840


    builder = 
        m_VFS = (shared_ptr<IVFS>)
        m_Files = (unsupported vector<Path >)
        m_TempDir = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 64728

        m_NumBaseMods = 2008690282 (0x77BA2E6A)


SDL_main (main.cpp:567)
    argc = 2 (0x00000002)
    argv = 0x002A0008 (see above)

main_utf8 (sdl_windows_main.c:126)
    argc = 2 (0x00000002)
    argv = 0x002A0008 (see above)

wmain (sdl_windows_main.c:151)
    argc = 2 (0x00000002)
    wargv = 0x00113AE0 -> 0x00113AEC -> 67 (0x0043)
    wenvp = 0x0010C948 -> 28528 (0x6F70)
    argv = 0x002A0008 (see above)
    retval = 0 (0x00000000)
    i = 2 (0x00000002)

CallStartupWithinTryBlock (wseh.cpp:364)
    ret = 19542336 (0x012A3140)

RtlGetAppContainerNamedObjectPath (:0)

RtlGetAppContainerNamedObjectPath (:0)


errno = 0 (No error reported here)
OS error = 0 (no error code was set)
#4564 fixed Upgrade the bundled gloox library Itms Itms
Description

From 1.0.13 to 1.0.20 (https://camaya.net/gloox/changelog/)

The latest version includes a change that would improve the user experience when registrations are disabled/limited (see also #3771).

#4596 fixed OOS on rejoin on Extinct Volcano Itms elexis
Description

In this r19667 game, I rejoined fatherbushidos game on Extinct Volcano and got an OOS on rejoin.

#4671 fixed Update lobby server, config and readme Itms elexis
Description

Some maintenance:

  • Phab:D280 will update the existing lobby to readme markdown.
  • The readme should recommend to use the STUN module for Phab:D364
  • The readme must mention to install the sqlalchemy utils module for Phab:D628
  • We must mention that python 3.3 or later will be required (because unicode literals are required for sqlalchemy_utils but removed after python 2.7 and reintroduced with python 3.3)
  • Therefore we must update the debian outdated wheezy server so that its python 3.2 can be updated to 3.3
  • The readmegistrations with unwanted characters as in Phab:D715 (see e can recommend to disable nickchanges for visitors and prevent nick rhttps://github.com/processone/ejabberd/issues/388 ) (a JS GUI string should probably be removed then)
#4705 fixed Use TLS for multiplayer lobby Itms rugk
Description

TLS should be used in the lobby in order to protect passwords.

Threat model: Any network attacker; three-letter agency or attacker in wifi

Edit: SSL is considered a requirement since May 25th 2018 following GDPR article 32.1.a https://gdpr-info.eu/art-32-gdpr/ (and there already have been Cease&Decist letter for trivial contact forms not using SSL).

Report by leper on Sep 7th 2013: https://github.com/JoshuaJB/0ad/issues/3

#4786 fixed Crash at start in snd_detect() Itms Jan
Description

Hey all.

New in the forum, but not to the game :)

0AD won´t start. It just crash.

Have play ver 22, but now it wont even start.

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 (No error reported here) OS error = 0 (no error code was set)


Now i just have to find a way to attach the files from logs

#4790 wontfix A23 libraries update Itms fabio
Description

Reminder for libraries to consider updating for A23, on Windows and OSX:

(see also #4362 for OSX)

(see also #3004 for Windows)

#4800 fixed [Atlas] Simulation Crash after resize Itms Stephen Imhoff
Description

In atlas, attempting to start the simulation after resizing the map results in a crash.

#4846 wontfix Make sure the Jenkins build script can patch itself Itms Itms
Description

Case in point: building Phab:D1026 failed with

build/jenkins/build-patch.sh: 69: cd: can't cd to build/workspaces/gcc

meaning that the unpatched version of the script was still being executed. As far as I know a script that modifies itself keeps track of the current position in the file, so I have to assume the issue comes from the patched code being higher in the file (line 69) than the place where the patching happens (line 102).

I don't see an obvious way to fix this so I'm opening this ticket for tracking future improvements. Suggestions are welcome as well :-)

#5006 fixed Fix AppData Itms elexis
Description

Since downstream reported few formatting issues with the file and proposed patches, we should consider fixing it for the release. refs #3734

#5017 fixed curl 7.54 doesn't compile on macos 10.13 Itms Ankh
Description

cUrl 7.54 fails to compile on macos. It was fixed in 7.56. See the ticket for details https://github.com/JuliaLang/julia/issues/23980 Changing version in ./build-osx-libs.sh fixes the issue.

#5035 fixed Enable Multi Processor Compilation on Windows Itms Stan
Description

Currently we do not make use of Multi Processor when buildings, which probably makes compilation slower depending on their spefications

In Visual Studio, the compiler flag is /MP (see screenshot below).

https://trac.wildfiregames.com/raw-attachment/ticket/5035/multi_processor_compilation.png

This can be fixed by updating premake5.lua.

#5094 fixed Specify charset in compiler commandline to avoid issues with different locales Itms Inari
Description

I got some errors when trying to compile the code (For reference, they were those: https://pastebin.com/7yh0UzJf)

Noticing that the errors seem to happen with unicode stuff I did some googling and found this github issue. Specifically the last post in it is of interest.

I have some of my locale settings set to Japanese, so I tried what the linked GitHub issue suggested and added the "/source-charset:utf-8" to the "test" project properties (in C/C++ -> Command Line) and recompiled and that seems to have fixed the errors.

It isn't a critical thing to add I guess, but it would be nice to add that to all projects, or at least make a note in the wiki about it?

#5379 fixed Drop Visual Studio 2013 Itms Itms
Description

This is mainly a ticket to remind myself of some things.

We now support Visual Studio 2015 in a stable way. 2013 support should be dropped because of its limited modern C++ support, and because it cannot be installed easily anymore (download sources are difficult to find).

Prior to dropping:

  • Commit redistributables for 2015 for players who don't have them installed
  • Make Jenkins build with 2015 instead of 2013
  • Commit glooxwrapper
  • Watch for bugs
  • Resolve #5527

Dropping:

  • Update premake scripts and update-workspaces.bat

After dropping:

To be considered:

  • Add support for 2017 and 2019. Easy to do in premake, but depends on whether whatever version of SpiderMonkey we use can be built with those.
#5527 fixed VS2015 requires Universal C Runtime (CRT) Itms historic_bruno
Description

As explained here, VS 2015 introduces the Universal CRT which is a component of Windows 10. Earlier versions of Windows must install update KB2999226, or the VCRedist package for VC++ 2015 (you already have it if you installed VS 2015). Windows XP users won't get the Windows update, so they must install the VCRedist package.

Another option is "app-local deployment", where we copy all of the UCRT DLLs from the Windows 10 SDK (although I tried this and it failed on XP; copying them from the vcredist package worked), alongside the rest of the game's binaries. There are 41 of them, but it's < 2 MB total:

C:\Program Files (x86)\Windows Kits\10\Redist\ucrt\DLLs\x86

api-ms-win-core-console-l1-1-0.dll
api-ms-win-core-datetime-l1-1-0.dll
api-ms-win-core-debug-l1-1-0.dll
api-ms-win-core-errorhandling-l1-1-0.dll
api-ms-win-core-file-l1-1-0.dll
api-ms-win-core-file-l1-2-0.dll
api-ms-win-core-file-l2-1-0.dll
api-ms-win-core-handle-l1-1-0.dll
api-ms-win-core-heap-l1-1-0.dll
api-ms-win-core-interlocked-l1-1-0.dll
api-ms-win-core-libraryloader-l1-1-0.dll
api-ms-win-core-localization-l1-2-0.dll
api-ms-win-core-memory-l1-1-0.dll
api-ms-win-core-namedpipe-l1-1-0.dll
api-ms-win-core-processenvironment-l1-1-0.dll
api-ms-win-core-processthreads-l1-1-0.dll
api-ms-win-core-processthreads-l1-1-1.dll
api-ms-win-core-profile-l1-1-0.dll
api-ms-win-core-rtlsupport-l1-1-0.dll
api-ms-win-core-string-l1-1-0.dll
api-ms-win-core-synch-l1-1-0.dll
api-ms-win-core-synch-l1-2-0.dll
api-ms-win-core-sysinfo-l1-1-0.dll
api-ms-win-core-timezone-l1-1-0.dll
api-ms-win-core-util-l1-1-0.dll
api-ms-win-crt-conio-l1-1-0.dll
api-ms-win-crt-convert-l1-1-0.dll
api-ms-win-crt-environment-l1-1-0.dll
api-ms-win-crt-filesystem-l1-1-0.dll
api-ms-win-crt-heap-l1-1-0.dll
api-ms-win-crt-locale-l1-1-0.dll
api-ms-win-crt-math-l1-1-0.dll
api-ms-win-crt-multibyte-l1-1-0.dll
api-ms-win-crt-private-l1-1-0.dll
api-ms-win-crt-process-l1-1-0.dll
api-ms-win-crt-runtime-l1-1-0.dll
api-ms-win-crt-stdio-l1-1-0.dll
api-ms-win-crt-string-l1-1-0.dll
api-ms-win-crt-time-l1-1-0.dll
api-ms-win-crt-utility-l1-1-0.dll
ucrtbase.dll
#5595 fixed Add continuous integration for macOS Itms Krinkle
Description

The Jenkins jobs that performs compilation of libs and source, and runs the tests, is currently testing Linux (GCC) and Windows (VS2015).

It'd be nice if we could get a third slave for macOS. Or if direct integration with code review isn't feasible yet, a first step could be to have post-merge builds on commit, hourly or nightly.

Some prior discussion:

#5694 fixed Stop using Python 2 in 0 A.D. Itms Guido Falsi
Description

This is a general ticket for the "Python 2 EOL" release blocker.

Tasks:

Distributions now expect python2 or python3.

#5709 fixed fcollada build fix for gcc 10 (WritePhysicsRigidBodyInstance) Itms pcpa
Description

Build will fail with a message in the pattern:

g++ -o "../../../binaries/system/libCollada.so" obj/Collada_Release/CommonConvert.o obj/Collada_Release/DLL.o obj/Collada_Release/Decompose.o obj/Collada_Release/GeomReindex.o obj/Collada_Release/Maths.o obj/Collada_Release/PMDConvert.o obj/Collada_Release/PSAConvert.o obj/Collada_Release/StdSkeletons.o obj/Collada
_Release/XMLFix.o obj/Collada_Release/precompiled.o    -L../../../binaries/system -L../../../libraries/source/fcollada/lib -L/usr/X11R6/lib -shared -Wl,-soname=libCollada.so -Wl,--no-undefined -Wl,--as-needed -Wl,-z,relro -Wl,-rpath,/usr/lib64/0ad -rdynamic -lFColladaSR -lxml2 -ldl
/usr/bin/ld: ../../../libraries/source/fcollada/lib/libFColladaSR.a(FAXInstanceExport.o): in function `FArchiveXML::WritePhysicsRigidBodyInstance(FCDObject*, _xmlNode*)':
/builddir/build/BUILD/0ad-0.0.23b-alpha/libraries/source/fcollada/src/FColladaPlugins/FArchiveXML/FAXInstanceExport.cpp:258: undefined reference to `_xmlNode* FArchiveXML::AddPhysicsParameter<FMVector3, 0>(_xmlNode*, char const*, FCDParameterAnimatableT<FMVector3, 0>&)'
/usr/bin/ld: /builddir/build/BUILD/0ad-0.0.23b-alpha/libraries/source/fcollada/src/FColladaPlugins/FArchiveXML/FAXInstanceExport.cpp:259: undefined reference to `_xmlNode* FArchiveXML::AddPhysicsParameter<FMVector3, 0>(_xmlNode*, char const*, FCDParameterAnimatableT<FMVector3, 0>&)'
collect2: error: ld returned 1 exit status

After bug report for gcc, and created a patch, it was eventually found that it is not a gcc fault, as reported at a similar issue at https://bugzilla.redhat.com/show_bug.cgi?id=1794127#c7

The explicit instantiation is required to make the code correct. The standard says in [temp.pre] p10:

A function template, member function of a class template, variable template, or static data member of a class template shall be defined in every translation unit in which it is implicitly instantiated unless the corresponding specialization is explicitly instantiated in some translation unit; no diagnostic is required.

The suggested patch is probably the best way to correct the issue.

Uncertain how to report this to FCollada upstream.

#5757 fixed Invalid/unsupported texture format r23304 on Linux Mint Itms GunChleoc
Description

Happens on program start:

$ gdb pyrogenesis
GNU gdb (Ubuntu 8.1-0ubuntu3.2) 8.1.0.20180409-git
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from pyrogenesis...done.
(gdb) run
Starting program: /media/cuideigin/Linux/sources/0ad/binaries/system/pyrogenesis 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
TIMER| InitVfs: 146.763 us
Writing the mainlog at /home/cuideigin/.config/0ad/logs/mainlog.html
[New Thread 0x7fffe5233700 (LWP 22103)]
TIMER| CONFIG_Init: 1.59175 ms
[New Thread 0x7fffe4a32700 (LWP 22104)]
[New Thread 0x7fffe4831700 (LWP 22105)]
[New Thread 0x7fffe4630700 (LWP 22106)]
[New Thread 0x7fffe442f700 (LWP 22107)]
[New Thread 0x7fffe422e700 (LWP 22108)]
[New Thread 0x7fffe402d700 (LWP 22109)]
[New Thread 0x7fffe3e2c700 (LWP 22110)]
[New Thread 0x7fffe3c2b700 (LWP 22111)]
[New Thread 0x7fffe3a2a700 (LWP 22112)]
[New Thread 0x7fffe3829700 (LWP 22113)]
[New Thread 0x7fffe3628700 (LWP 22114)]
[New Thread 0x7fffe3427700 (LWP 22115)]
[New Thread 0x7fffe3226700 (LWP 22116)]
[New Thread 0x7fffe3025700 (LWP 22117)]
[New Thread 0x7fffe2e24700 (LWP 22118)]
[New Thread 0x7fffe2c23700 (LWP 22119)]
[New Thread 0x7fffe16b8700 (LWP 22120)]
[Thread 0x7fffe16b8700 (LWP 22120) exited]
[New Thread 0x7fffe1637700 (LWP 22121)]
[New Thread 0x7fffe1637700 (LWP 22122)]
[Thread 0x7fffe1637700 (LWP 22121) exited]
[New Thread 0x7fffe0e36700 (LWP 22123)]
Sound: AlcInit success, using OpenAL Soft
[New Thread 0x7fff8bfff700 (LWP 22124)]
TIMER| shutdown ConfigDB: 0.332 us
[Thread 0x7fff8bfff700 (LWP 22124) exited]
[Thread 0x7fffe0e36700 (LWP 22123) exited]
TIMER| resource modules: 2.50807 ms
TIMER TOTALS (9 clients)
-----------------------------------------------------
  tc_pool_alloc: 0 c (0x)
  tc_png_decode: 0 c (0x)
[Thread 0x7fffe1637700 (LWP 22122) exited]
  tc_dds_transform: 0 c (0x)
  tc_transform: 0 c (0x)
  tc_plain_transform: 0 c (0x)
  tc_ShaderGLSLLink: 0 c (0x)
  tc_ShaderGLSLCompile: 0 c (0x)
  tc_ShaderValidation: 0 c (0x)
  xml_validation: 0 c (0x)
-----------------------------------------------------
TIMER| shutdown misc: 119.363 us
TIMER| InitVfs: 485.941 us
Writing the mainlog at /home/cuideigin/.config/0ad/logs/mainlog.html
TIMER| CONFIG_Init: 1.79592 ms
[New Thread 0x7fffe1637700 (LWP 22125)]
[New Thread 0x7fffe0e36700 (LWP 22126)]
Sound: AlcInit success, using OpenAL Soft
[New Thread 0x7fff8bfff700 (LWP 22127)]
[New Thread 0x7fffe24ff700 (LWP 22128)]
[New Thread 0x7fffe0c35700 (LWP 22129)]
[New Thread 0x7fff8b5ec700 (LWP 22130)]
Unknown cache/TLB descriptor 0xc3
UserReport written to /home/cuideigin/.config/0ad/logs/userreport_hwdetect.txt
TIMER| RunHardwareDetection: 6.18554 ms
[New Thread 0x7fff8adeb700 (LWP 22131)]
[Thread 0x7fff8adeb700 (LWP 22131) exited]
TIMER| write_sys_info: 18.8095 ms
[New Thread 0x7fff8adeb700 (LWP 22132)]
TIMER| InitRenderer: 1.76583 ms
TIMER| ps_console: 1.70363 ms
TIMER| ps_lang_hotkeys: 553.435 us
TIMER| common/modern/setup.xml: 327.969 us
TIMER| common/modern/styles.xml: 78.692 us
TIMER| common/modern/sprites.xml: 790.363 us
TIMER| common/setup.xml: 197.138 us
TIMER| common/sprites.xml: 265.227 us
TIMER| common/styles.xml: 45.866 us
TIMER| pregame/backgrounds/: 326.339 us
TIMER| pregame/sprites.xml: 81.43 us
TIMER| pregame/styles.xml: 21.64 us
TIMER| pregame/mainmenu.xml: 15.2294 ms
TIMER| common/global.xml: 163.807 us
TIMER| common/modern/setup.xml: 93.616 us
TIMER| common/modern/styles.xml: 82.07 us
TIMER| common/modern/sprites.xml: 733.826 us
TIMER| splashscreen/setup.xml: 119.073 us
TIMER| splashscreen/splashscreen.xml: 8.2213 ms
TIMER| common/global.xml: 162.804 us
tex_dds.cpp(418): Function call failed: return value was -120102 (Invalid/unsupported texture format)
Function call failed: return value was -120102 (Invalid/unsupported texture format)
Location: tex_dds.cpp:418 (decode_pf)

Call stack:

(0x555555b9146e) /media/cuideigin/Linux/sources/0ad/binaries/system/pyrogenesis(+0x63d46e) [0x555555b9146e]
(0x555555b2f781) /media/cuideigin/Linux/sources/0ad/binaries/system/pyrogenesis(+0x5db781) [0x555555b2f781]
(0x555555b317ab) /media/cuideigin/Linux/sources/0ad/binaries/system/pyrogenesis(+0x5dd7ab) [0x555555b317ab]
(0x555555bafa78) /media/cuideigin/Linux/sources/0ad/binaries/system/pyrogenesis(+0x65ba78) [0x555555bafa78]
(0x555555bae157) /media/cuideigin/Linux/sources/0ad/binaries/system/pyrogenesis(+0x65a157) [0x555555bae157]
(0x555555b824af) /media/cuideigin/Linux/sources/0ad/binaries/system/pyrogenesis(+0x62e4af) [0x555555b824af]
(0x555555b8518d) /media/cuideigin/Linux/sources/0ad/binaries/system/pyrogenesis(+0x63118d) [0x555555b8518d]
(0x555555963d73) /media/cuideigin/Linux/sources/0ad/binaries/system/pyrogenesis(+0x40fd73) [0x555555963d73]
(0x55555596d282) /media/cuideigin/Linux/sources/0ad/binaries/system/pyrogenesis(+0x419282) [0x55555596d282]
(0x55555596157f) /media/cuideigin/Linux/sources/0ad/binaries/system/pyrogenesis(+0x40d57f) [0x55555596157f]
(0x55555593db91) /media/cuideigin/Linux/sources/0ad/binaries/system/pyrogenesis(+0x3e9b91) [0x55555593db91]
(0x55555595c92b) /media/cuideigin/Linux/sources/0ad/binaries/system/pyrogenesis(+0x40892b) [0x55555595c92b]
(0x555555b22e58) /media/cuideigin/Linux/sources/0ad/binaries/system/pyrogenesis(+0x5cee58) [0x555555b22e58]
(0x555555b17faa) /media/cuideigin/Linux/sources/0ad/binaries/system/pyrogenesis(+0x5c3faa) [0x555555b17faa]
(0x555555ac9f7a) /media/cuideigin/Linux/sources/0ad/binaries/system/pyrogenesis(+0x575f7a) [0x555555ac9f7a]
(0x555555ac9f45) /media/cuideigin/Linux/sources/0ad/binaries/system/pyrogenesis(+0x575f45) [0x555555ac9f45]

errno = 0 (No error reported here)
OS error = ?
#5776 fixed Context mismatch in CGame::ReallyStartGame()? Itms Bellaz
Description

In CGame::ReallyStartGame(), in the block between L328-L333 'global' is rooted with the context of simulation (line 298). However, the rooted Object belongs to g_GUI->GetActiveGUI(), which has another context (g_GUI->GetActiveGUI()->GetScriptInterface()->GetContext()) . Therefore I think that global should be rooted with the context of g_GUI->GetActiveGUI()->GetScriptInterface() and not the one from m_Simulation2->GetScriptInterface() .

#6676 fixed python 3.11 build fix Itms fabio
Description

See https://salsa.debian.org/games-team/0ad/-/commit/7048ef33282782d9af46335c9d928dfa9d9f379d

#6696 fixed DumpSchema command line option segfaults on Linux Itms Stan
Description

When running the following command on Linux (macOS and Windows seem unaffected):

$ pyrogenesis -mod=public -dumpSchema

The file is generated correctly but a segfault occurs.

TIMER| InitVfs: 11.0418 ms
FILES| Main log written to '/home/builder/.config/0ad/logs/mainlog.html'
FILES| Interesting log written to '/home/builder/.config/0ad/logs/interestinglog.html'
TIMER| CONFIG_Init: 61.519 ms
Generated entity.rng
mozilla::detail::MutexImp::~MutexImpl: pthread_mutex_destroy failed: Device or resource busy
Segmentation fault (core dumped)

GameSetup.cpp#L600

Line 
593if (args.Has("dumpSchema"))
594{
595 CSimulation2 sim(NULL, g_ScriptContext, NULL);
596 sim.LoadDefaultScripts();
597 std::ofstream f("entity.rng", std::ios_base::out | std::ios_base::trunc);
598 f << sim.GenerateSchema();
599 std::cout << "Generated entity.rng\n";
600 exit(0);
601}

It seems that replacing exit(0) by return false prevents the segfault

 if (args.Has("dumpSchema"))
 {
     CSimulation2 sim(NULL, g_ScriptContext, NULL);
     sim.LoadDefaultScripts();
     std::ofstream f("entity.rng", std::ios_base::out | std::ios_base::trunc);
     f << sim.GenerateSchema();
     std::cout << "Generated entity.rng\n";
-    exit(0);
+    return false;
 }
#6698 wontfix Premake doesn't invalidate targets after changing defines Itms Stan
Description

To reproduce. On linux or macOS run update-workspaces.sh --without-upnpc AFTER BUILDING NETWORK.

<built-in>:1:9: warning: 'CONFIG2_MINIUPNPC' macro redefined [-Wmacro-redefined]
#define CONFIG2_MINIUPNPC 0
        ^
/Users/stan/0ad-svn/build/workspaces/gcc/../../../source/lib/config2.h:86:10: note: previous definition is here
# define CONFIG2_MINIUPNPC 1
         ^
1 warning generated.
Undefined symbols for architecture arm64:
  "_FreeUPNPUrls", referenced from:
      std::__1::__function::__func<CNetServerWorker::SetupUPnP()::$_0, std::__1::allocator<CNetServerWorker::SetupUPnP()::$_0>, void ()>::operator()() in libnetwork.a(NetServer.o)
  "_UPNP_AddPortMapping", referenced from:
      CNetServerWorker::SetupUPnP() in libnetwork.a(NetServer.o)
  "_UPNP_GetExternalIPAddress", referenced from:
      CNetServerWorker::SetupUPnP() in libnetwork.a(NetServer.o)
  "_UPNP_GetIGDFromUrl", referenced from:
      CNetServerWorker::SetupUPnP() in libnetwork.a(NetServer.o)
  "_UPNP_GetSpecificPortMappingEntry", referenced from:
      CNetServerWorker::SetupUPnP() in libnetwork.a(NetServer.o)
  "_UPNP_GetValidIGD", referenced from:
      CNetServerWorker::SetupUPnP() in libnetwork.a(NetServer.o)
  "_freeUPNPDevlist", referenced from:
      std::__1::__function::__func<CNetServerWorker::SetupUPnP()::$_0, std::__1::allocator<CNetServerWorker::SetupUPnP()::$_0>, void ()>::operator()() in libnetwork.a(NetServer.o)
  "_strupnperror", referenced from:
      CNetServerWorker::SetupUPnP() in libnetwork.a(NetServer.o)
  "_upnpDiscover", referenced from:
      CNetServerWorker::SetupUPnP() in libnetwork.a(NetServer.o)
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[1]: *** [../../../binaries/system/pyrogenesis] Error 1
make: *** [pyrogenesis] Error 2

#6710 fixed --with-system-premake is broken Itms Stan
Description

As reported on Phab:D3127 A made a mistake was made when adding a the --with-system-premake option in Phab:D2519/ Phab:rP23675. It does not go in the correct folder.

Patch by sera:

  • build/workspaces/update-workspaces.sh

    a b fi  
    104104
    105105# Now run premake to create the makefiles
    106106
     107cd ../premake/premake5
     108
    107109premake_command="premake5"
    108110if [ "$with_system_premake5" = "false" ]; then
    109111  # Build bundled premake
    110   cd ../premake/premake5
    111112  PREMAKE_BUILD_DIR=build/gmake2.unix
    112113  # BSD and OS X need different Makefiles
    113114  case "`uname -s`" in
#2946 invalid [PATCH] Improve unit behaviour when constructing buildings Jason Moul
Description
  • When building a large buildings, it happens that units stay on the foundation, blocking it’s construction. That’s frustrating for fortress which won’t be build near the enemy.
  • Units which can’t build, such as cavalry or special units. They should not stay around foundations because there are taking place of other builders. If you asked them to go that building, they should be a bit distant of the foundation.
  • Point 2 should probably also apply to actions other than building/repairing, such as hunting/gathering.
#1364 fixed Call to the Arms - Button JCWasmx86 Marcio
Description

A Button in GUI that call all citizen units are working forces to fight if your press that button in GUI order to select all Soldiers or citizen soldiers to attack.

All of the soldiers who are gathering will drop their resources off at the nearest dropsite, ready to defend against attackers.

this are Already discussed in forum and asked for many users http://www.wildfiregames.com/forum/index.php?showtopic=15951&st=0

#2540 fixed [PATCH] Internationalize the in-game MENU button Jaison Adrián Chaves
Description

When you play a game, there is a menu button on the upper-right corner.

Currently, that button uses an image: http://trac.wildfiregames.com/browser/ps/trunk/binaries/data/mods/public/art/textures/ui/session/icons/menu.png

It should use actual text instead, and that text should be translated.

#2866 fixed [PATCH]Alignment error in German stats screen Jaison Raymond
Description

buildings > "Verwaltungssitz"

market > "Tauscheffizienz" and "Handelseinkommen"

So please make the stats wider

#6356 fixed Map settings on scenario map change Jammyjamjamman Langbart
Description

With the changeset [25869] came a small bug, when running the scenario map Pathfinder Demo the options for Revealed, Explored and Allied seem all enabled, but when starting the map only the option Explored works.

When you exit the game and go back to the game setup, it suddenly looks like this. The option for Explored is set to Yes and the other options are set to No.

#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).

#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.

#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.

#1697 fixed Fill in missing content Aviv gerbilOFdoom
Description

-Index, bottom right - "About Wildfire Games"

Media Pages (Note: Images are in All-Int's FTP, just need to be added to the pages) -Concept Art -Screenshots -Wallpapers

Game Info -Factions missing full details, specifically overviews -Game Manual -History

#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.

#1496 fixed [PATCH] Ranged attack bugs when targeting garrisoning, formation, or dead units Josh historic_bruno
Description

There's a few bugs related to #18 / r11886, reproducible as follows:

  • Error: a unit is fired upon while garrisoning. Ranged enemy units approach and attack some of your units. Meanwhile garrison your units in e.g. towers. If there's enough attackers and enough of your units, by chance a missile will be fired while your units are garrisoning, when it "hits" the entity has gone off-world (into the tower).
  • Error: units are fired upon while in formation. Select several units and move them around an enemy ranged unit (towers work well) without stopping, until they get hit. This causes the null footprint error: the target entity is a "special/formation".
  • Attack fails: a unit dies while being fired upon. To reproduce this it helps to have several towers with units garrisoned inside, firing upon numerous enemy units.

The first and third cases need a solution where the target calculation is independent of whether the target entity still exists in-world (perhaps with a temporary entity created for that purpose as Philip originally suggested?) Otherwise we potentially ignore friendly fire and splash damage.

The second case should never happen, it's not possible for a player to target a formation but only a single entity in a formation. So something is going wrong with the target selection.

#1504 fixed [PATCH] Multiplayer lobby Josh Badmadblacksad-
Description

Hello, the multiplayer lobby is back, more than 6 months late. Sorry about that. The patch attached adds an in-game multiplayer lobby and a tool (XpartaMuPP) to manage created games. It uses the XMPP protocol.

After applying the patch, you will find a README in source/tools/XpartaMuPP/ which explains how to install and configure the XMPP server (ejabberd) and XpartaMuPP.

To build the game you will need to install the gloox library (cpp XMPP library). svn co svn://svn.camaya.net/gloox/branches/1.0 gloox-1.0 ./configure make make install

Let me know if you have any issue building / running the game with this patch, it will help me to improve the documentation.

The patch is not ready to be committed yet, I'm just asking for a review, and at the same time if anyone is willing to help me to improve the UI (there are great artists among you!), it would be much appreciated. Thanks.

#1924 fixed [PATCH] Display entity limits for buildings in the GUI Josh leper
Description

Some buildings have a limit of how many of that kind can be constructed (wonders (1), fortresses (10), towers (25)). It would be nice to make this easily visible to the user:

  • Gray out the icon if the limit is reached
  • Display how many buildings have been constructed/what the limit is

(Basically this is the same as is already implemented for units (heroes))

#1928 fixed [PATCH] Un-select All Units and Cancel Building Placement Using Esc Josh Josh
Description

Most RTS/citybuilder games I am aware of allow using Esc to un-select/cancel the current action

I think 0AD should also have this feature. Attached is a small patch which implements the hotkey.

#2032 fixed Move Javascript vector math to global namespace Josh Josh
Description

Currently there is JS vector math defined in a number of different places (AI, simulation, rmgen). The idea is to unify all the methods to globalscripts.

#2049 fixed [PATCH] Better ARM support Josh Josh
Description

Fix NVTT and FCollada build on ARM and fix some small 0AD compiler issues.

#2080 fixed Add maximum scrollbar size and fix minimum scrollbar size. Josh Josh
Description

There is currently a minimum_bar_size property for scrollbars, but no matching maximum_bar_size property and minimum_bar size itself is bugged.

I have attached a patch which fixes both issues and does some micro-optimization and fixes some typos in the scrollbar code.

#2121 fixed ARM build issues Josh fabio
Description

Recently after fixing nvtt package Debian and Ubuntu also enabled building armel and armhf 0ad. Both builds fail with different issues. The latest build status and logs are available here: https://buildd.debian.org/status/package.php?p=0ad&suite=sid

The arm specific build log are available at:

1) armel (fixed in SVN?)

fails with:

FCollada/FMath/FMRandom.cpp
FCollada/FMath/FMSkew.cpp
FCollada/FMath/FMVector3.cpp
FCollada/FMath/FMVolume.cpp
FCollada/FUtils/FUAssert.cpp
FCollada/FUtils/FUBase64.cpp
/tmp/ccEqcoJM.s: Assembler messages:
/tmp/ccEqcoJM.s:156: Error: selected processor does not support ARM mode `bkpt 0'
make[2]: *** [output/debug/FCollada/FUtils/FUAssert.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[2]: Leaving directory `/«PKGBUILDDIR»/libraries/source/fcollada/src'
make[1]: *** [override_dh_auto_build] Error 1
make: *** [build-arch] Error 2
dpkg-buildpackage: error: debian/rules build-arch gave error exit status 2
ERROR: FCollada build failed

2) armhf on Ubuntu 12.04

fails with:

../../../source/simulation2/helpers/Geometry.cpp: In function 'bool Geometry::TestRaySquare(CFixedVector2D, CFixedVector2D, CFixedVector2D, CFixedVector2D, CFixedVector2D)':
../../../source/simulation2/helpers/Geometry.cpp:239:1: error: unable to find a register to spill in class 'LO_REGS'
../../../source/simulation2/helpers/Geometry.cpp:239:1: error: this is the insn:
(insn 75 20 17 2 (set (reg/v:DI 141 [ sum ])
        (plus:DI (mult:DI (sign_extend:DI (reg:SI 245 [ a$value ]))
                (sign_extend:DI (reg:SI 241 [ u$value ])))
            (reg/v:DI 141 [ sum ]))) ../../../source/maths/FixedVector2D.h:200 49 {*mulsidi3adddi_v6}
     (nil))
../../../source/simulation2/helpers/Geometry.cpp:239: confused by earlier errors, bailing out

3) SSE warning:

when running test on a proper architecture this is printed:

No SSE available. Slow fallback routines will b used.

The message should be updated.

#2285 fixed Damage helper holds simulation aware data in static function Josh sanderd17
Description

The Damage helper script creates a new entity on the first missile fired and missed

Damage.dummyTargetEntity = Engine.AddEntity('special/dummy');

As the script is static, the dummyTargetEntity is always remembered, even if the game is terminated (without the engine closed). You can see this in Atlas:

  • Start on an empty map
  • place at least two enemy archers on the map, close to each other
  • start the simulation and let them fire until at least one arrow missed target
  • reset the simulation
  • Add a new entity, somewhere else on the map
  • When the simulation is started, the unit jumps to all positions of missed arrows, as it got the ID of the dummyTarget, and the id of the dummyTarget wasn't deleted.

Depending on the number of entities in previous games, it can even cause OOS problems if people didn't restart the entire game before starting a new game.

This should be solved properly, by adding a method to RangeManager that allows a range query around a position instead of just around an entity.

#2308 fixed Add proper license header and tests to hash functions for the lobby Josh leper
Description

We should add the proper license header to pbkdf2 and hmac_sha256 from sha.cpp. IIRC those are from OpenBSD.

Those functions also need some tests to verify that they do what they should. (Related: r14123)

#2312 fixed [PATCH] Redesign Lobby Login UI Josh Josh
Description

The current lobby login UI is not intuitive, wastes time, and is in the old UI style.

The following need to be done:

1. Update to the new UI style.

  1. If no saved login, show registration predominantly.
  2. If saved login, try logging in automatically (possibly confirm before logging in? Will require consideration.).

4. Consider removing option to specify nick on login.

#2358 fixed [PATCH] Make entity selection faster Josh Josh
Description

Right now, on every mouse movement event we call EntitySelection::PickEntitiesAtPoint. This sometimes happens multiple times per frame. The existing function loops through every entity that is selectable and computes their distance from the mouse which is very inefficient.

Here's a ~hour long profile of a normal game in 0AD: https://googledrive.com/host/0BwIjnJSd7iThRXRiN0ExcVVaeDQ/cpuprofile5.svg

As you can see, entity selection is a good 1.5%. (I've seen over 3% in some profiles) The in-game profiler also confirmed the problem showing ~5-15 calls of the function per frame, each taking ~50ms.

The attached patch improves the situation by getting a smaller group of entities from the range manager's spatial subdivisions before checking the distance of each one. Initial measurements from the in-game profiler show the new function taking ~45us which is an improvement of over a hundred times.

#2401 fixed Toggling the wireframe mode works in rated games Josh leper
Description

Users can toggle the wireframe mode (Alt+w) in rated games.

#2403 fixed Pressing the up arrow in the lobby after having a game selected crashes the game Josh leper
Description

If you select the first game here in the lobby but don't join it, and the game then disappears because it was closed or started and then press the "up" key on your keyboard the game crashes.

#2404 fixed Allow Unrated Games Josh Josh
Description

Display if a multiplayer game can be rated when started through the lobby and also allow the host to disable rating.

#2439 fixed Lobby ToS Visibility Josh Josh
Description

Once the lobby Terms of Service are finalized, they need to be made visible. This would most likely entail:

  • Requiring policy agreement at registration (full text).
  • Regular policy reminders on login page and lobby page (link).
#2453 fixed 0AD crashes when Chinese characters are used Josh Jia Henry
Description

Hi

When you set the nickname in multiplayer to something that is in Chinese the game crashes instantly.

I am unsure if this is also the case with other non ascii charachters as I have not tested it.

This may also happen when attempting to chat in game but I have never tried it.

#2463 duplicate Multiplayer : Lobby enhancement Josh openoliv
Description

Hi, I'm playing 0ad since some times. Really great game ! thanks to everbody involved !! GREAT work ! This said, I have a few bugs to report... let's start...

I'm on Linux (Arch)

Regarding the lobby, I think that a few enhancement could be nice :

  • I'm not sure how the ranking works, but it could be nice to see its own ranking somewhere on the gui.
  • Could be nice to be able to see the 10 (for e.g) last things said when we login, to help understand what's going on.
  • Should it be possible to see all the games that are currntly running ?s
#2491 fixed [PATCH] Keep XMPP connections alive Josh Josh
Description

Wake up gloox periodically to make sure no XMPP connections timeout.

#2510 duplicate Support inline link tag Josh scythetwirler
Description

It would be nice to be able to support XMPP subjects in the lobby containing clickable links to relevant pages in our wiki.

#2529 fixed [PATCH] Having more than one observer crashes Josh Josh
Description

Having more than one observer in a multiplayer game can frequently crash due to incorrect initial assignment of any observer in CNetServerWorker::AddPlayer (source:ps/trunk/source/network/NetServer.cpp#L609).

Possible solutions are initially assigning all joining players the ID -1 in the network code and allowing gamesetup to correct as needed. Or the network code could try to determine if a player should be an observer or not.

#2569 fixed Developer Overlay should not have a global, persistent config setting Josh scythetwirler
Description

If the Developer Overlay is enabled in the settings, it is automatically opened in unrated games which is only an annoyance. Therefore, the setting should be removed and the developer overlay should only be openable via keyboard shortcut.

#2606 invalid multiplayer host game doesn't work when enabled MASQUERADE in system Josh Igor Gnatenko
Description

Original question to firewalld maillist: https://lists.fedorahosted.org/pipermail/firewalld-users/2014-June/000184.html But I've tried to disable masquerade and it fixes my problem. I think game should work when masq enabled.

#2668 wontfix Alliances or Guilds for multiplayer. ("Guild-System") Josh Radagast
Description

Accounts' primary keys that are stored in the online database could be referenced in a new table called "alliance" or "guild".

` Ally | Member | isCouncillor


Gallic Alliance | Vercinget0rix | true Gallic Alliance | Getafix | true ... Free Cities | Venedig ` The civilization should probably be free to choose?

Game start changes required. When starting a multiplayer Alliance game from the Guild/Alliance-home, then all members that are currently online are given as parameter to the gamesetup screen and are automatically marked as allies (same team).

Several GUI pages could be useful:

  • Alliance/Guild home/lobby. (fortress or diplomacy/embassy saloon showing all members, marking those that are online in a lighter color hue).
  • Alliance/Guild ranking.

Essentially an own lobby.

Member functions:

  • Donate gold coins into the guild' treasury. (can be used for further upgrading the guild lobby, e.g. higher member limit. Starting with 4 members?)
  • Guild chat.

Councillor Functions:

  • Invite member. (best via setting up a poll, 50% of the members have to agree to. yes no vote.)
  • Kick member (dissolve alliance).

On top of Guilds, a online diplomacy system could be developed, allowing Guilds to forge alliances with other guilds. (though essentially this can be handled on a per game setting in the diplomacy panel. thus there are no changes needed.)

#3156 fixed [PATCH] Lobby: Spam filter hides chat scrollback partially Josh elexis
Description

When connecting to the multiplayer lobby, one receives a scrollback of the last 20 or so messages.

Unfortunately it doesn't display all messages in the scrollback, since the spam check filters out the last messages.

All scrollback messages are received OnTick() and all messages are posted into the addChatMessage function in lobby.js, where they are filtered out consequently according to the rules.

It should be fixed by disabling spam check until the scrollback was received completely.

It seems the last message in the scrollback is always the room message, i.e. :

"leper has set the subject to: This is the SVN lobby, if you don't know what this means, you should install the Alpha release."

#3219 invalid Spatial.h Compiler Warnings Josh Josh
Description

GCC complains about comparisons between the signed SUBDIVISION_SIZE constant and unsigned integers in Spatial.h at the moment.

The attached patch removes the warnings by making SUBDIVISION_SIZE unsigned and casting to signed integers as needed.

#3569 needsinfo Improve the Options Menu Josh Josh
Description

The help text (what pops up when you hover) on ceasefire overlay and FPS limiting is unclear. It defines itself with itself. This should be fixed as soon at the A19 string freeze ends.

We may also want to remove some settings to reduce clutter as well (eg. ceasefire overlay should always be shown, graphics settings should be simplified, etc).

#3832 fixed [PATCH] Lobby message timestamps improperly stored in GUI code Josh elexis
Description

When playing a long game and returning to the lobby, lobby.js polls all chatmessages received during that time.

These chatmessages don't contain a timestamp.

The spamfilter is applied to all of them and then naturally assumes that everyone spammed who sent more than 3 messages.

So don't apply the spamfilter when returning from the lobby and/or preferably fix the timestamps in XmppClient.cpp.

#4441 fixed [PATCH] Fixed source and destination overlap in memmove invoked by gfx::CardName Joshua Gerrard OMGtechy
Description

I wanted to contribute to the project, so I thought I good way to start would be to put 0ad through valgrind --track-origin=yes.

When I did so, one of the messages I got was the following:

TIMER| RunHardwareDetection: 3.9549 s
==7265== Source and destination overlap in memcpy_chk(0xffeffd128, 0xffeffd158, 108)
==7265==    at 0x4C352E7: __memcpy_chk (vg_replace_strmem.c:1574)
==7265==    by 0x8E0791: memmove (string3.h:59)
==7265==    by 0x8E0791: gfx::CardName[abi:cxx11]() (gfx.cpp:60)
==7265==    by 0x5E576B: WriteSystemInfo() (Util.cpp:133)
==7265==    by 0x634480: InitGraphics(CmdLineArgs const&, int) (GameSetup.cpp:1029)
==7265==    by 0x42F6BA: RunGameOrAtlas(int, char const**) (main.cpp:528)
==7265==    by 0x4219C6: main (main.cpp:571)

This is almost certainly an issue in valgrind, since memmove exists to allow said overlap, but it's easy to fix and allows people to use the offending valgrind version. I fixed it on that basis.

#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).

#1984 fixed [PATCH READY] Save GUI Sprites and Images in vectors / maps as pointers instead of objects JoshuaJB Jonas Platte
Description

When inserting into lists or vectors, the data is often reallocated and moved. The m_Sprites map in CGUI and the m_Images vector in CGUISprite save objects instead of pointers so there are many unnecessary construction and destruction operations, specially during startup.

This patch makes CGUI use std::map<CStr, CGUISprite*> instead of std::map<CStr, CGUISprite> and CGUISprite use std::vector<SGUIImage*> instead of std::vector<SGUIImage>.

#2240 fixed Rejoin Lockout JoshuaJB scythetwirler
Description

If a user crashes or leaves in the middle of a game, tries to reconnect and cancels the connection in during the "registering with server" pop up stage, he or she is locked out from ever rejoining that game.

#2456 fixed Interface update for tex_codec JoshuaJB IronNerd
Description

This is an interface update to tex_codec that makes each codec an implementation of an interface class and removes the need for explicit initialization of the system. Efficiency remains the same or slightly better.

#2676 fixed [PATCH] Prevent players in multiplayer games from sending commands for other players JoshuaJB historic_bruno
Description

It shouldn't be possible for players to send commands on behalf of other players, unless there is a cheat/developer option enabled to allow it.

#3047 fixed Improve clarity of XMPP error messages JoshuaJB Itms
Description

When using the game lobby, XMPP sometimes throws error messages, for instance "Registration not allowed". I would be interesting to add code to find the exact reason of such errors, so that users can find a way to fix them. (Currently, the most confused people seem to be translators trying to find good translations of those messages :P)

#3072 fixed [PATCH] Cleanup Summary Screen JoshuaJB Josh
Description

No text or code changes, just minor layout. Before: Summary page before After: Summary page after

#3386 fixed [PATCH] Lobby - freeze and duplicate users when returning from a match JoshuaJB elexis
Description

Bug Symptoms

(1) 0 A.D. freezes for a couple of seconds when returning to the lobby after playing a long game. (2) The playerlist sometimes contains online users twice and sometimes offline users once (while it should only display online users and no dupes).

Why the bug occurs

(1) Accumulation of thousands of presence updates The XmppClient caches all presence updates in its m_GuiMessageQueue variable. Usually the lobby code fetches all updates onTick, clearing that array frequently. But while playing a game, the lobby JS code is inactive. Therefore m_GuiMessageQueue accumulates over the course of a game, resulting in the application of thousands of those updates when returning to the lobby. Thus causing the freeze mentioned in (1).

(2) Applying those updates to a different playerlist The second symptom is caused by the accumulation of these updates and applying them after fetching a clean playerlist. The presence updates in m_GuiMessageQueue are only valid for the playerlist of the time when they were generated. But since we replace the playerlist with the most current one when returning from the lobby, these updates don't apply anymore!

This for example hits all these cases:

if (nickIndex == -1) // Left, but not present (TODO: warn about this?)
if (nickIndex == -1) // Changed nick, but not present (shouldn't ever happen)
if (nickIndex == -1) // Changed presence, but not online (shouldn't ever happen)

This is essentially the bug discovered in #3171 (ticket description and comments 1 to 9). All the patches there attempt to fix this problem by clearing the messages. But the patches after version 2 didn't correctly handle the g_joined bug described in #3287 and fixed in r16961.

#3525 fixed [PATCH] Percentage of mapcontrol not updated when phasing by cheat JoshuaJB elexis
Description

Reproduce:

  1. Start a game with cheats enabled on the default skirmish map
  2. Type "back to the future" into the chat
  3. Quit the game.

Notice in the summary screen it says "5%" territory control at peak but 9% territory control at finish.

Interestingly enough, if you build houses and then ordinarily click on aging without doing any further things (territory / grid changes), it will compute the correct number.

After cheat-phasing, StatisticsTracker.prototype.OnTerritoriesChanged will be called, but GetPercentMapControlled() returns the wrong value.

#3537 fixed [PATCH] Persist Match Settings - Have a rated game with cheats enabled JoshuaJB elexis
Description

Being able to load the previous gamesetup (presist-match-settings) has the bug of allowing a rated game with cheats enabled.

Reproduce:

  1. Delete matchsettings.mp.json in the config directory (see wiki:GameDataPaths)
  2. Open a non-lobby multiplayer game with cheats enabled (you don't need to start the game, clicking on back is sufficient)
  3. Start a lobbied multiplayer game.

Ratings will be checked by default, but cheats are still active. Select a tree and type "wololo" into the chat to confirm this.

#3557 fixed [PATCH] Doubleclicking on a game should result in joining it JoshuaJB elexis
Description

If you doubleclick a game in the lobby, the player should join that game. When doubleclicking a replay in the list, that replay should be started.

Feature proposed by ffm.

#3566 fixed [PATCH] Visual Replay - everything invisible after replay JoshuaJB elexis
Description

Reproduce:

  1. Replay any commands.txt
  2. Wait for it to finish
  3. After being asked if you want to exit, click no

Notice all buildings and units have become invisible.

This issue has become visible after r17159 but is in fact caused by the visual replay function executing one turn too much, i.e. a turn that doesn't actually exist in the replay.

Since the turn doesn't exist, m_TurnLength of that turn will be zero in the NetTurnManager, cauing m_DeltaSimTime to be zero too.

See also #3527.


This issue is easy to fix, but the more important question to me seems:

Why do buildings and trees disappear then?

It seems this is caused by the call to CSimulation2Impl::Interpolate.

Those things should not be interpolated, as their position never changes (performance issue). (Can be done in another ticket).

#3613 fixed [PATCH] Trigger points are missing the visibility component JoshuaJB AlThePhoenix
Description
ERROR: RelaxNGValidator: Validation error: preview%7Cspecial/trigger_point_A:1: Expecting an element RetainInFog, got nothing

ERROR: RelaxNGValidator: Validation error: preview%7Cspecial/trigger_point_A:1: Invalid sequence in interleave

ERROR: RelaxNGValidator: Validation error: preview%7Cspecial/trigger_point_A:1: Element Visibility failed to validate content

ERROR: RelaxNGValidator: Validation failed for '(null)'

ERROR: Failed to validate entity template 'preview|special/trigger_point_A'

The visibility component wasn't added to the template of trigger points and thus cannot be used in the editor (Survival of the Fittest might be bugged as well, didn't check that yet though).

#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.

#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.

#1152 fixed [PATCH] Rome support, defense tower fix for Jubot James Baillie gudo
Description

The attached patch does:

Adds support for Rome Fixes scout_tower/defense_tower naming issues Improves documentation tweaks some internal values

#2269 invalid Expand on Theban civilization K Keaton the Wise
Description

Expand Theban civilization to be usable in game

#2270 invalid Modpack K Keaton the Wise
Description

Lord of the Rings modpack

#2268 duplicate Add team score to game summary screen Grzes Kabza leper
Description

It would be nice to display a team score in the end game screen. It probably only makes sense to display this when the teams were locked.

Related files (all relative to binaries/data/mods/public):

  • gui/summary/*
  • gui/session/session.js (!leaveGame() for passing the data to the summary screen)
  • simulation/components/GuiInterface.js (for what data !leaveGame() has access to)

Somewhat related ticket #686.

#2521 needsinfo AfterBattle Music Keaton the Wise Keaton the Wise
Description

After the combat music is played during a battle, the music should change to something slow and sad as if mourning those who died in the battle.

#5376 fixed Remove Vector C++/JS prototype workaround from r14645 Krinkle Itms
Description

In r14645, a workaround was put at the end of vector.js to make the prototype available in C++.

The corresponding C++ code is in ScriptInterface.cpp. Vector2/3D.prototype is retrieved from JS, stored in a value called Vector2/3Dprototype and stored in C++ for future creations of instances of Vector2/3D. The correct way to do this would be to retrieve Vector2/3D and use JS_GetPrototype for the same purpose.

The issue

However, that doesn't seem to work. When moving units, for instance, errors pop along the line of "angleTo is not a function", showing that the methods of Vector2D are not present. But the units correctly move: the attributes of the object are here.

Upgrading to SM45 also makes the issue apparent: the workaround breaks with the update, and has to be adapted. Using JS_GetPrototype doesn't work with SM45 either.

My personal understanding is that, by asking the value of Vector2/3D from the C++ side, one does not get an object with a full prototype for some reason. So one has to get the prototype on the JS side, make a new object from it, and send the object to C++. I do not know why this works and the above doesn't.

How to reproduce (on SM38 or SM45)

The easiest way to reproduce is to not use the workaround: in C++, use the patch

-if (JS_GetProperty(m->m_cx, global, "Vector2Dprototype", &proto))
+if (JS_GetProperty(m->m_cx, global, "Vector2D.prototype", &proto))

to access directly the prototype instead of using the workaround. Then try to move some units.

How to fix

All my attempts at accessing the prototype in a meaningful way created the same issue as described above.

Alternatively, we could just define this prototype in C++ and make it available in JS (just like we do with GUI objects), but that would be acceptable only if vectors don't need to be moddable in any way (I think it is the case).

#5729 fixed gnutls-3.6.8 fails to build on macOS 10.15 Catalina Krinkle martin_2m
Description
ld: weak import of symbol '___darwin_check_fd_set_overflow' not supported because of option: -no_weak_imports for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[4]: *** [gnutls-cli-debug] Error 1
make[4]: *** Waiting for unfinished jobs....
make[3]: *** [all-recursive] Error 1
make[2]: *** [all] Error 2
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2
ERROR: GnuTLS build failed

I would like to recommend the following changes to build the libraries. I found the suggestions for these changes here https://gitlab.com/gnutls/gnutls/-/issues/966

I have set the versions for 'gnutls' to 3.6.13. The download URL and the version of 'icu' I set to 66.1.

Here is the patch file for build-osx-libs.sh

--- original_0ad/0ad/libraries/osx/build-osx-libs.sh    2020-04-23 14:23:04.000000000 +0200
+++ 0ad/libraries/osx/build-osx-libs.sh 2020-04-23 13:57:39.000000000 +0200
@@ -37,11 +37,11 @@
 GMP_VERSION="gmp-6.1.2"
 NETTLE_VERSION="nettle-3.5.1"
 # NOTE: remember to also update LIB_URL below when changing version
-GNUTLS_VERSION="gnutls-3.6.8"
+GNUTLS_VERSION="gnutls-3.6.13"
 GLOOX_VERSION="gloox-1.0.22"
 # OS X only includes part of ICU, and only the dylib
 # NOTE: remember to also update LIB_URL below when changing version
-ICU_VERSION="icu4c-59_1"
+ICU_VERSION="icu4c-66_1"
 ENET_VERSION="enet-1.3.13"
 MINIUPNPC_VERSION="miniupnpc-2.0.20180222"
 SODIUM_VERSION="libsodium-1.0.18"
@@ -656,7 +656,6 @@
 LIB_ARCHIVE="$LIB_VERSION.tar.xz"
 LIB_DIRECTORY="$LIB_VERSION"
 LIB_URL="https://www.gnupg.org/ftp/gcrypt/gnutls/v3.6/"
-
 mkdir -p gnutls
 pushd gnutls > /dev/null

@@ -695,7 +694,7 @@
           --without-p11-kit \
           --disable-tests \
           --disable-nls \
-    && make ${JOBS} && make install) || die "GnuTLS build failed"
+    && make ${JOBS} LDFLAGS= install) || die "GnuTLS build failed"
   popd
   touch .already-built
 else
@@ -754,7 +753,7 @@
 LIB_VERSION="${ICU_VERSION}"
 LIB_ARCHIVE="$LIB_VERSION-src.tgz"
 LIB_DIRECTORY="icu"
-LIB_URL="http://download.icu-project.org/files/icu4c/59.1/"
+LIB_URL="https://github.com/unicode-org/icu/releases/download/release-66-1/"

 mkdir -p $LIB_DIRECTORY
 pushd icu > /dev/null

#5777 fixed Graphic scales-down glitch on macOS 10.15 Catalina (red box) Krinkle Krinkle
Description

Reported in the forums:

Reported in previous tickets that were about other build issues on OSX

#2331 wontfix [ENHANCEMENT] Age Phase Sound LAVS / Lion.Kanzen Marcio
Description

I want to help to LAVS and therefore I felt free to add a new sound based on LAVS work to the game, obviously this is pretty easy for programmers and easy for me too.

Added Age Phase sound :

  • I duplicated one of current files and only changed the default sound.
  • I don't know what name should be given to the file and how to provide a diff.

Please answer on the forum topic : http://www.wildfiregames.com/forum/index.php?showtopic=17915

EDIT : Fixed the text to make it more easy to understand.

#4754 fixed German text overflow on loading screen Langbart Salesome
Description

This is a random find, when starting a game, I noticed there is a text overflow, see attached screenshot.

#6063 fixed Large number could be abbreviated. Langbart Freagarach
Description

https://wildfiregames.com/forum/topic/36707-display-problem%EF%BC%81/
Like 20000 -> 20k. One can even let the user choose the thresholds.

#6105 fixed Missing number for two skirmish maps Langbart Langbart
Description

Each Skirmish map has a number after its name that indicates the number of players set on that map, except for

  • Via Augusta and
  • Skirmish Demo

This bug can be reproduced for A23b and A24b and the current SVN version [25046].

#6110 fixed Fishing boats cannot hunt a whale Langbart Langbart
Description

Currently fishing boats cannot hunt whales. The bug was first reported by v32itas via IRC 0ad-dev chat (19/Mar/21).

I have tested the SVN version up to [24388] and still the fishing boats are not able to hunt the whale. The latest A23b version with changeset [21495] allows me to hunt the whale with fishing boats. Somewhere in between the bug was introduced.

Update: [22014] has removed the following line, if you add it back you can hunt a whale with a fishing boat again
public/simulation/templates/template_unit_fauna_hunt_whale.xml

<Classes datatype="tokens">SeaCreature</Classes>

Tested with the following map: Corinthian Isthmus (2)

Fishing boats were able to hunt sharks.

(I'm just creating the ticket so the bug will not be forgotten.)

#6178 fixed Option rated game not visible for observer Langbart Langbart
Description

When joining a 1v1 game as an observer, the only way to find out if the game is rated or not is to ask the players or search for RatingEnabled true or false in the commands.txt file.

Adding the information to the objectives dialog would solve this problem.

#6202 fixed Lobby Create match dialog is too small Langbart Stan
Description

Subj.

#6222 fixed Magadha has no description text Langbart Salesome
Description

The Magadha map - one of the new ones in Alpha 25 - doesn‘t have a proper map description, just dummy text.

“Give an interesting description of your map.” https://trac.wildfiregames.com/raw-attachment/ticket/6222/Magadha%20no%20description.jpg

#6314 fixed Tutorial inaccuracies Langbart Langbart
Description

A user named RobotWizard reported via IRC 0AD (6/Sep/21) some inaccuracies to the tutorial. All pictures below were taken from the camera angle when spawning in the game.

Grapes/ Berries

03:58 < RobotWizard> i looked for grapes for a minute then i realized they meant berries

Lake position

03:51 < RobotWizard> and the lake is southeast of the center not southwest?

#6316 fixed Missing color for the name in the profile panel Langbart Langbart
Description

In the current SVN version [25898] the name in the profile panel appears like this:

The issue can be reproduced for A25b up to A22.

The name in the profile panel used to be colored, as seen in this snapshot from Alpha 21.

#6341 fixed Positioning of the Generic/Specific name Langbart Langbart
Description

With [25116] the option was added to disable generic or specific names so that only one name remains. If only one is selected, the name should appear centered and with equal top and bottom margins.

At the moment it appears like this: A better way to display the name would be the following:

#6345 fixed Wrong message in the tutorial to send Female citizens to the rally point Langbart oumph
Description

The tutorial indicates "Start training a batch of Female Citizens in the Civic Center and set its rally point to the farm (right click on it).". But the rally point should be the field, not the farm.

(btw all translations have the same issue, like the French one https://www.transifex.com/wildfire-games/0ad/translate/#fr/public-tutorials/318537098 for example. The issue was reported by a beginner in French on https://linuxfr.org/news/sortie-de-0-a-d-alpha-25-yauna#comment-1868027 )

#6346 fixed Check compatibility with macOS 12 Langbart Langbart
Description

The file FixMacBuild.diff in the spidermonkey folder was added with [24644] and contained sdk_max_version = Version('11.99'), with macOS 12 this might not work anymore.

It could be as simple as increasing the number to solve the problem.

Create the ticket so that the problem is not forgotten.

Related IRC 0ad-dev conversation (29/Sep/21)

07:58 < Langbart> do we need to update the FixMacBuild file for macOS 12?
07:58 < Langbart> atm it is set at 11.99
08:05 < wraitii> mhh
08:06 < wraitii> maybe
08:06 < wraitii> re they releasing it as MacOS 12 or just 11.1 ?
08:06 < wraitii> oh yeah it's 12
#6352 fixed On Death Canyon (2), Petra bot stucks firing at the bridge with no visible effect Langbart lvd
Description

Versions: public beta 25, svn rev. 25952

Single player, map "Death Canyon (2)"

Petra: very easy, defensive, kushites

User: mauryans.

After some time into playing, suddenly lots of petra's troops stuck forever into firing at the bridge with no visible effect.

#6362 fixed [Atlas] Mercenaries experience bar Langbart Langbart
Description

Changeset [25624] caused a minor bug to the mercenary units in Atlas.

To reproduce

  • Open Atlas and Start the simulation via the Play button
  • Place the units/sele/infantry_archer_merc_b on the field
  • Select the entity, the experience bar extends to the orbit.

#6373 fixed Special letters broken in replay file path Langbart Langbart
Description

If your replay folder contains the letter ä, the file path in the replay window should show this character correctly, this was implemented with [19824] by elexis.

Changeset [24983] broke it. See image below for more clarity.

It would be good if this gets fixed so that the feature from ticket #6350 works more reliably.

#6378 fixed Wrong tooltip style for civ icon Langbart Langbart
Description

When you hover over the civ icon in the top bar, the default tooltip style is displayed, not the tooltip style defined in the .xml file.

It worked in Alpha18 [16409]

It no longer worked in Alpha19 [17298]

I suspect that the changeset [16610] is responsible for this.

#6380 fixed Wrong tooltip style for Civilization Overview page Langbart Langbart
Description

Hovering over the little i icon, the default tooltip style is displayed, not the tooltip style defined in the .xml file.

It worked in [25352]

It no longer worked in [25353]

#6422 fixed Often no passable path on unknown map with 2 players Langbart Langbart
Description

A problem was noticed by rollieoo on a certain map, both opponents cannot reach each other.

to reproduce

  • Set up a game
    • Player: 2
    • Maptype: Random
    • Map: Unknown
    • Landscape: Passes
  • try to get your units across the mountain, often this won't work

example:

~/0ad/binaries/system/pyrogenesis -conf=mod.enabledmods:"mod public" -quickstart -autostart="random/unknown" -autostart-seed=1563851758  -autostart-size=256 -autostart-player=-1

bisect

  • It was not possible for me to find the changeset number.
  • In a quick test in A24b, the mountain was overcomeable, but if you try a few times, the problem could also occur there.
  • The problem also occurs in A23b.

solution (1)

A simple solution would be to adjust the map creation for 2 players || numPlayers == 2 so that there is always a lake in between.

Line 656 in Unknown.js

Line 
656 if (randBool(2/5) *|| numPlayers == 2*)
657 {
658 g_Map.log("Create central lake");
659 createArea(
660 new ClumpPlacer(diskArea(fractionToTiles(0.1)), 0.7, 0.1, Infinity, mapCenter),
661 [
662 new SmoothElevationPainter(ELEVATION_SET, waterHeight, 3),
663 new TileClassPainter(clWater)
664 ]);
665 }

input from elexis (1) (22/Jan/22)

[08:52:57] Langbart Hello, do you think the solution is good enough for https://trac.wildfiregames.com/ticket/6422 ?
[...]
[10:34:17] elexis making a lake is certainly a possibility but it changes the map gameplay a lot
[...]
[10:44:32] elexis so I guess either the placer isnt returning an area or the painter isnt doing something to it
[10:45:24] elexis same with the "Fill area between the paths" part, also Im not sure why that one paints clWater there when there isnt any water, probably to have nothing else placed there, but thats often asking for bugs like fish on land
[10:45:57] elexis better would be to add a specific class clPassage and have all the remaining statements make sure not to place on clPassage (water and land alike), but (probably) unrelated
[...]
[10:49:12] elexis could also be that the passage is too small on the given mapsize or something
[10:49:27] elexis yeah that looks like it
[...]
[10:55:53] elexis but its probably a wrong parameter in the mapscript rather than a rmgen library bug, judging by the screenshot

solution (2)

Replace diskArea(fractionToTiles(0.05)) with 0. Line 666 in Unknown.js

Line 
666 else
667 {
668 g_Map.log("Fill area between the paths");
669 createArea(
670 new ClumpPlacer(*0*, 0.7, 0.1, Infinity, mapCenter),
671 [
672 new SmoothElevationPainter(ELEVATION_SET, heightMountain, 4),
673 new TileClassPainter(clWater)
674 ]);
675 }

input from elexis (2) (22/Jan/22)

[13:18:07] elexis so the problem is first it places the passage through the middle then it places the mountain in the middle blocking the passage
[...]
[13:19:23] elexis then the bug was probably introduced in the first version of the map

solution (3) by elexis

[13:25:51] elexis you add an if (n != 2)
[13:26:22] // Dont block the passage we just created if the passage goes through the center
#6455 fixed [BUG] Summary - Siege are no longer capturable Langbart Langbart
Description

A user named fmmaks reported a bug in the forum.

Siege units lost their ability to be captured with changeset [24685], it was forgotten to update the summary.

#6456 fixed [MAP] Empire should give a hint Langbart Langbart
Description

A user named Bablu reported an issue with the Empire map via IRC 0ad 12/Mar/22. The player starts with 2 CC on this particular map, but there is no warning/notice for this unusual setting during the game setup.

[18:20:36] Langbart we should add a RED message to it.
[18:20:40] Langbart what do u think?
[18:21:24] Bablu yes some way you should let the player know before the game starts. or you can tell it to your website
[18:21:51] Bablu i was searching for it through the whole month
#3610 fixed [PATCH] Projectiles do not cause any damage if the shooter dies Leander Hemelhof vikas MK
Description

Currently, projectile Damage depends on the shooter being alive.

This should not be the case and to achieve that some of the related logic should be moved from simulation/components/Attack.js to cmpDamage (in the same directory, which would be a system component created from simulation/helpers/Damage.js)

cmpDamage should keep information about who fired (player/entity) and when the damage should be applied. Most of this information is already stored in the current Damage helper object.

cmpDamage then uses a delay (see cmpTimer and the current usage of it in cmpAttack) to cause this damage.

Note that this ticket enables doing #1912 and #1911 (and possibly #1910) without any huge changes.

#2297 fixed (Seleucid Emblem) Marcio Marcio
Description

I was Finish as i was promise. http://www.wildfiregames.com/forum/index.php?showtopic=17735#entry279359

here is my render of Seleucid Emblem. a Work that learn about Seleucids and Blender Basics. I hope enjoy as I.

#3943 fixed [PATCH] Remove the hardcoded trading gain in petra LittleDev mimo
Description

Since r18108, the trading gain is no more hardcoded in the simulation, but available in the trader template (GainMultiplier). Petra should now use it, instead of the distUnitGain value hardcoded in ai/petra/config.js. This value is used at two different places inside petra to compute the expected gain from a new market, and should be replaced by the one extracted from the template (either the trader template for a land route, or the merchant template for a naval route).

#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.)

#1909 fixed Projectile hit animation Mate-86 Pureon
Description

When a projectile hits the target a particle animation is played. The particle should be assigned in the unit's actor file (alongside 'loaded-projectile' and 'projectile').

Case: Rock thrower hits ground creating dust and debris.

See the already implemented 'attack_impact' soundgroup which will be played alongside this particle animation.

#1910 fixed [PATCH] Unit death damage Mate-86 Pureon
Description

When a unit is destroyed the destruction causes damage to nearby units.

This will be configured in the unit template.

#1911 fixed Delayed damage Mate-86 Pureon
Description

A projectile hits the target/ground and only causes damage a few seconds later.

A particle animation should play when the damage is produced.

This functionality can be used for grenades.

#4033 fixed [PATCH] Siege Engines are not shown in the summary Mate-86 Imarok
Description
  1. Siege Engines should be listed in the summary
  2. The captured statistic for Siege Engines should be displayed/created too

http://trac.wildfiregames.com/raw-attachment/ticket/4033/captured-building.png

http://trac.wildfiregames.com/raw-attachment/ticket/4033/military-score.png

team summary fixed: http://trac.wildfiregames.com/raw-attachment/ticket/4033/teams_multiline.png

#4193 fixed [Patch] Loot tooltips Mate-86 elexis
Description

Looting is a relatively unknown feature. In particular it is completely intransparent how many resources are earned when killing enemies or destroying buildings.

For example destroying a temple yields 500 metal! Killing a trade cart or a gathering unit yields the resources the unit carried.

The sum of these resources should be shown where all the other tooltips are shown, for every unit.

#4779 fixed [PATCH] Projectile hit sound Mate-86 Mate-86
Description

Enhancement of the missile hit sound handling:

  1. Allow the engine playing the sound using the position only (currently an entity is needed). A new cpp function should address that in SoundManager. This should fix the issue when the attacker dies before the projectile hits.
  2. Introduce different kind of sounds in the template:
    1. the projectile hits the target or the ground (melee hit belongs here)
    2. the projectile starts causing the damage itself (eg. explodes) (useful when the damage is delayed, related ticket: #1911)
#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).

#302 invalid Test Matt Harrison Matt Sherman
Description

Test one

#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.

#1124 fixed [PATCH] Deposit resources when garrisoned in a dropsite Matt Doerksen Jonathan Waller
Description

When you garrison units in a dropsite (e.g. Civil Centre) they should deposit any resources which they are carrying.

#2562 fixed [PATCH] Move civ JSON data to simulation\data directory Matt Doerksen historic_bruno
Description

Currently, civilization JSON data is in the civs/ mod directory, originally it was intended mostly for use in the GUI. But now, it's used by the RMS (starting entities) and the simulation (formations). The files should be moved into simulation/data/, because files there can break multiplayer synchronization if modified, and it's nice to keep them all together.

#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.

#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

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

Flesh Impact - Multiple SDD# 271

Specifications

Stereo
2 minutes
Looping

1 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

#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

#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.
#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

#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
#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'
#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.

#1190 fixed [PATCH] Selected stances and formations need to be more obvious. Michael D. Hafer Ilya Radchenko
Description

The stances buttons currently have a little color if selected, but that color is hardly enough. Currently they have a nice border around them which turns a lighter grey when the mouse is over the button. I thin there needs to be a consistency and the border should also change for the selected stance.

See my attached screenshot, and modification.

#2565 fixed Egyptian ships throw stones instead of arrows Michael D. Hafer serveurix
Description

All egyptian military ships throw catapult projectiles instead of arrows. This bug is only graphical, the projectiles still have the velocity, power and sound of arrows.

#2586 fixed Champions from barracks and fortress are not treated the same by the double-click Michael D. Hafer serveurix
Description

If I double-click on a briton champion from the barracks, it will select only champions from the barracks, and if double-click on a briton champion from the fortress, it will select only champions from the fortress.

I don't know exactly which units or civs are affected by this bug, but it happens at least with briton champions and gaul champions.

Edit: it affects maurya champions too. Other civs don't seem to be affected.

#3102 fixed [PATCH] Map modification: Survival of the Fittest NiAypa NiAypa
Description

Hello,

I have just modified the random map "Survival of the Fittest".

Here is a link to the forum post

What I changed:

  • Waves now have different unit types (and strength), more are added as waves are coming
  • The first wave spawns at 5 minutes now instead of 10
  • Treasure seeker women now respawn when killed implemented as invincible woman.
  • Disabled the corral
  • Treasures now spawn more frequently & more randomly, also more treasures are spawned
  • More info messages are now displayed

More detailed description for the new waves:

The waves can now contain of Infantry, Champions, Elephants, Healers, Siege Units, and Heroes. As more waves are coming, more unit types will be attacking, and their share changes. I guess this is quite unbalanced still, since I did not yet have the opportunity to test well, since this map is supposed to be played with 4 Players.

Im still working on it, but I think it can be tested now especially for balancing So I open this ticket to hope more people can test that way (Im quite confused but testing from SVN would be the point).

I highly appreciate any feedback :)

And I hope, of course, that it will be included in Alpha 19

#1818 fixed Website Content Creation - Music Download Button Zion MishFTW
Description

A requested feature and something in the original plans but somehow escaped our attention. It can be hosted on another service or simply be a zip of all the music tracks in MP3 or OGG format.

#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

#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

#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

#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

#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

#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.
#4791 fixed Position units with freehand selection OptimusShepard OptimusShepard
Description

For a more tactical gameplay it would be interesting to have the ability to position my units quickly.

  1. You select some of your units
  2. Now you can press and hold M2 on your mouse and draw a line (If you only click, the units shall react as usual)
  3. When you release M2, your selected units should spread out on this line
  4. Optional: the units will automatically be set on defensive/standground

The advantage of drawing a line is that it can have every form you like. A ring around your catapults, a semicircular arrangement for your archers, a senseless "S", why not? No Problem

#5677 fixed Sharpening Pass OptimusShepard OptimusShepard
Description

The new antialiasing implementation FXAA makes the game a little bit blurry. Therefor a sharpening pass should be implemented. The level of sharpen could be selectable by slider.

AMD has released a free implementation on git, which seems to be the current best one, which is available. https://github.com/GPUOpen-Effects/FidelityFX/tree/master/FFX_CAS

It has been already ported to reshade. https://wccftech.com/amd-fidelityfx-cas-got-ported-to-reshade/

In the following I made some screenshots with reshade. The settings are CAS=off, CAS=0.0, CAS=0.3, CAS=0.5 and CAS=1.0. Good noticable on the detailed tree shadows, and textures of bulding and ground.

No CAS Non CAS

0.0 CAS 0.0 CAS

0.3 CAS 0.3 CAS

0.5 CAS 0.5 CAS

1.0 CAS 1.0 CAS

#6900 invalid Increasing / decreasing camera rotation speed is inverted Papnaas Papnaas
Description

When pressing hotkey for increasing / decreasing camera rotation speed values are decreased / increased. Info text will be displayed correctly, but value increase/decrease is inverted.

#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

#1617 invalid Bug report Alpha 10 (for vacancy) Pavel Smith
Description

Windows 7 Ultimate 64. 8gb RAM, 8600 gt. Build: May 13 2012 - 11858 (Alpha 10 Jhelum)

MapEditor:

  1. Objects can be superimposed on each other.

Game:

Core (important):

  1. Built disappear (Keshtzar, Jowgah, farm, wooden towers) - harvest is collecting, but the building does not appear on the map. (The cause did not understand)
  2. Sound is continue when minimized applications
  3. Any application running in the "always on top" in the game is not visible, but when you click the mouse in the area of the application, the game will be minimize.
  4. Not the realistic behavior of combat units (in the attack and the formation of the column (quickly and erratically))
  5. Units pass through each other
  6. Dead units fall into the ground (+ no blood)
  7. It is impossible to Save the name
  8. Units can not break up, if there is to meet each other.
  9. No debris from the destroyed buildings

Graphics:

  1. Weak graphics (no smoothing, blur, ladders, low poly objects (tree trunk - 3 polygons))
  2. No effects of combat (fragments when hit)
  3. Low light (picture does not look natural, harsh shadows)

Other:

  1. You must assign at Esc - main menu.
  2. No shortcuts control units (attack, patrol, etc.)
  3. No support for Russian letters
  4. Sometimes not show tooltips on icons in the upper left corner
  5. Military units can extract resources (it is negative).
#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
#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.

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

It needs to work.

#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.

#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
#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 ("******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************" != "****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************...")
#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.

#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.

#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?

#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.

#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.

#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.

#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
#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.

#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.

#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       
#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.

#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.

#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.)

#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.

#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

#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.

#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).

#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.

#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).

#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.
#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.

#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.

#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

#605 fixed Fix NVTT Philip Taylor Philip Taylor
Description

Apply the patch for this once it's available.

#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.

#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.

#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).

#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)

#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" />

#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?

#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).

#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
#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.
#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.

#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.

#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!

#798 fixed Update Doxygen documentation for Pyrogenesis Philip Taylor Erik Johansson
Description

The documentation at http://svn.wildfiregames.com/docs/ needs to be updated.

#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.

#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.

#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).

#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?

#3956 fixed [PATCH] Chat addressee dropdown selects "Everyone" if someone joins/leaves Pilzschaf elexis
Description

If the chat window is opened and someone rejoins or leaves, the dropdown selects "Everyone" as addressee (even if team-chat was selected before).

This is because the dropdown is updated and a new element being added or removed in that case. To solve it, the previously selected index must be remembered and restored.

Bug reported by Hannibal Barca and moe

#4101 fixed [PATCH] sound notification when people join hosted game menu Polakrity Andy Alt
Description

I think it would be helpful to have an audible alert when someone joins a hosted game lobby. I'd feel more free to minimize the window while checking on various other things while I"m waiting for the room to fill up. What other advantages would there be to this feature?

The forum thread for this patch: Link

#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)..
#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.

#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")).

#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
#1510 fixed WP Theming - Developers' Area Artwork Pureon MishFTW
Description

Something similar to, if not the same, shown in the mockup. Must be 230px wide.

#1781 fixed SPQR on Roman Entrenched Army Camp Pureon qwertz
Description

It seems that the two SPQR-signs on one of the Roman Entrenched Army Camp sides are mirror-inverted. I guess this is unintended? I'm on Rev 12990.

#2630 fixed Carpet textures "flicker" and get hidden by ground texture Pureon fabio
Description

Persian civic center has 4 of carpets on it. When you zoom or rotate the screen, 3 of the carpets on it (the two in front and the one on the back) "flicker" and get partially hidden by the ground texture (the one just behind the first two in the front seems not affected by this problem).

Since llvmpipe (software render) doesn't have this problem, as well other videos and screenshots found on the net, I previously reported this bug against the mesa r300 gallium graphics driver: https://bugs.freedesktop.org/show_bug.cgi?id=44126

However, as it is the case with #2143, this may be a limit of old graphics chips (confused by different textures on the same layer), which could eventually workarounded in 0ad. Maybe the affected carpets should be pushed a bit up (or they anyway could put the same as the not affected carpet).

Status update:

  • two front carpets of Persan CC: fixed in r15700
  • rear carpet Persian CC: bugged
  • hieroglyphics on Ptol CC: bugged

An example screenshot is shown below:

https://bugs.freedesktop.org/attachment.cgi

#2517 fixed [PATCH] Register all component classes as global Radagast sanderd17
Description

When someone makes a mod now, they have to copy the entire component over to their mod (which can be quite hard to maintain).

By registering all components as a global, mods can just extend functionality from the existing prototype in the public mod by doing that in a different file that's loaded afterwards (f.e. by creating an Attack.MyMod.js file to extend the Attack prototype defined in Attack.js).

There's a separate Engine function now to register variables as global (Engine.RegisterGlobal(name, var)), but it would be better to put this functionality inside the Engine.RegisterComponentType() method, so the actual JS components don't have to be modified.

As the schema gets saved to the Engine on RegisterComponentType, we should also allow to register the same component multiple times to allow schema overriding by mods (this might be less simple than the other part to get it right).

#2717 wontfix Unpack depending on unit stance Radagast Radagast
Description

Fixes a TODO in the UnitAI.js simulation component.

#2794 invalid [PATCH] Mod selection: Increase filter + sort robustness against omitted information within in mod info files (mod.json). Radagast Radagast
Description

Generic filter and sorting failed or lead to a warning (at the least) when mod-info-files omitted information e.g. the version number (test with millenniumad).

This proposal will address these issues.

#1995 fixed [PERFORMANCE] Memory allocation reduction Jorma Rebane Jorma Rebane
Description

Using MTuner data from a short run of the game, we can drastically improve 0 A.D. core engine performance, by reducing the number of allocations in the detected hotspots.

For more information, check the Memory Performance thread on the forums: http://www.wildfiregames.com/forum/index.php?showtopic=17310&st=20#entry270448

Sub-tickets: modeldef.cpp: #2006 parser.cpp: #2005 guimanager.cpp: #2007 textrenderer.cpp: #2027 shaderdefines.cpp: #2029

<progress>, <memblock>, <total memops>, <stacktrace>
(V),		size 4, 	count 61320, 	modeldef.cpp:300
(V),		size 8, 	count 61320, 	modeldef.cpp:301
(V),		size 48,	count 42028, 	parser.cpp:246
(V),		size 36,	count 40866, 	guimanager.cpp:273 & 265
(V),		size 8, 	count 32749, 	modeldef.cpp:241
(V),		size 32,	count 27638, 	textrenderer.cpp:136
(V),		size 8,		count 21952, 	cgui.cpp:986
(V),		size 16,	count 21952, 	textrenderer.cpp:77
(V),		size 16, 	count 21952, 	shaderdefines.cpp:135
(V),		size 48,	count 21952, 	cgui.cpp:954
(V),		size 12,	count 20688, 	modelrenderer.cpp:635
(V),		size 112,	count 17325, 	guirenderer.cpp:388
( ),		size 108,	count 16896,	patchrdata.cpp:173
(V),		size 8,		count 14852, 	shaderdefines.cpp:116
(x),		size 48,	count 14154, 	font.cpp:33
( ),		size 36,	count 13230, 	patchrdata.cpp:1025
(V),		size 48,	count 12008, 	parser.cpp:981
( ),		size 24, 	count 9783, 	patchrdata.cpp:1025
(V),		size 8,		count 9645, 	modelrenderer.cpp:433
(V),		size 8,		count 8935, 	modelrenderer.cpp:698
( ),		size 48,	count 8265, 	cgui.cpp:916
(V),		size 48,	count 8144, 	parser.cpp:933
( ),		size 93,	count 7806, 	guitext.cpp:266
( ),		size 132, 	count 7806, 	cgui.cpp:689
( ),		size 132,	count 7806, 	cgui.cpp:800 & 855
(V),		size 12,	count 7072, 	modelrenderer.cpp:636
(V),		,		,		textrenderer.cpp:77
(V),		,		,		textrenderer.cpp:179
( ),		,		,		patchrdata.cpp:1052
( ),		,		,		guitext.cpp:210
( ),		,		,		terraintextureentry.h:75
( ),		,		,		patchrdata.cpp:192
( ),		,		,		cgui.cpp:675
( ),		,		,		texturemanager.cpp:150
( ),		,		,		texturemanager.cpp:153
( ),		,		,		texturemanager.cpp:511
( ),		,		,		texturemanager.h:136
(V),		,		,		parser.cpp:639
( ),		,		,		componentmanager.cpp:620
#2005 wontfix [PATCH] CParser removed + Hotkey patch Jorma Rebane Jorma Rebane
Description

1) CParser was a horrible freak of a regex parser. It left a horrible memory footprint and slowed the game down during load times. After replacing it with something much much simpler, the game startup and exit time was noticeably faster (alloc/dealloc overhead probably).

How CTokenizer works:

A string tokenizer doesn't own the string or memory you give it, so make sure the resource exists while you parse.

    std::string input = " toggle = 'Alt+F' = else ";
    std::string key, value;

    CTokenizer tokenizer(input);
    CTokenizer token;

    if(tokenizer.next(token, '=')) // split tokens at '='
    {   // if a token was availablee (no EOS)
        token.trim().toString(key); // trim whitespace, then tostr
        // key == "toggle"
    }
    if(tokenizer.next(token, '='))
    {
        token.trim(" '").toString(value); // trim spaces and '
        // value == "Alt+F"
    }

2) Hotkey patch is a fix that was pretty easy to make - it makes hotkey triggers a lot faster and memory efficient than they used to be. No real functionality changed inside 0 A.D. - only the stuff under the hood got changed.

#2006 wontfix [PATCH] CModelDef slow/memory intensive load Jorma Rebane Jorma Rebane
Description

Check original Ticket: #1995

CModelDef fixes uploaded. This patch addresses two problems: 1) CModelDef loading performance

In order to make loading faster, had to change the format of cached binary model data. The new model cache files take a tiny bit more disk space, but in return they load several times faster and the loaded data takes less memory.

2) Complex dynamic objects in structs

One of the main perf hitters was a per-vertex (yes, per each vertex!) std::vector<float> for multiple UV's. This was replaced with 2x CVector2D UV0 & UV1. Another one was an std::string for model prop points, which was replaced with a fixed size buffer m_Name[20] and with an additional m_NameLength.

The result: much better memory performance and usage for model loading.

In order for this to work, I had to change the version of the PMD (binary model cache) format to 4 and change the way models are saved to PMD. This may invalidate any existing model cache. Backwards compatibility for versions 1, 2, 3 is there.

#2007 wontfix [PATCH] GuiManager TickObjects performance fix Jorma Rebane Jorma Rebane
Description

As reported in the Performance ticket: #1995

GuiManager::TickObjects made a full copy of PageStackType m_PageStack in every tick:

	PageStackType pageStack = m_PageStack;

PageStackType itself is an std::vector<SGUIPage> (yes, a by-value vector):

	typedef std::vector<SGUIPage> PageStackType;

SGUIPage is defined as:

	struct SGUIPage
	{
		CStrW name;
		boost::unordered_set<VfsPath> inputs;
		JSContext* cx;
		CScriptValRooted initData;
		shared_ptr<CGUI> gui;
	};

Due to these non-trivial types like unordered_set and CStrW, making a full copy of the pagestack vector resulted in some pretty serious memory allocation overhead. The data itself is in the #1995 performance ticket.

This patch provides a simple fix by using a const reference instead

#2020 wontfix [PATCH] Memory Pool + Bucket Allocator Jorma Rebane Jorma Rebane
Description

This patch adds a custom high performance memory pool implementation to 0 A.D. In addition an STL-compatible custom allocator (bucket_allocator<T>) is included.

Adding memory pools will greatly improve the overall performance of 0 A.D. In order to make this convenient a wrapper header "ps_stl.h" is also included that wraps the STL containers with the custom bucket allocator.

The bucket allocator uses Thread-Local-Storage to create a collection of memory-pools. It is called a bucket allocator because all allocations are divided into sized 'buckets':

Buckets [0..24]		4 8 12 16 20 24 
Buckets [25..64]	32 40 48 56 64 
Buckets [65..128]	80 96 112 128 
Buckets [129..256]	160 192 224 256 
Buckets [257..1024]	384 512 640 768 896 1024

Names of the wrapped stl containers in ps_stl.h:

ps::string
ps::stringstream
ps::wstring
ps::wstringstream
ps::vector<T>
ps::list<T>
ps::map<Key, T>
ps::set<T>
ps::unordered_map<Key, T>
ps::unordered_set<T>

These are the performance comparisons from the patch test suite:

    >> RELEASE Debugger Attached
    std_alloc fragmented:     2614ms
    std_alloc growshrink:     8156ms
    std_alloc temporaries:    86ms
    tls_bucket fragmented:    7ms
    tls_bucket growshrink:    4ms
    tls_bucket temporaries:   3ms
    stress_test std::stl:     628ms
    stress_test ps::stl:      48ms
     
    >> RELEASE No debugger
    std_alloc fragmented:     15ms
    std_alloc growshrink:     13ms
    std_alloc temporaries:    9ms
    tls_bucket fragmented:    5ms
    tls_bucket growshrink:    4ms
    tls_bucket temporaries:   4ms
    stress_test std::stl:     76ms
    stress_test ps::stl:      41ms

After adding this patch, the 0 A.D. source can be changed iteratively to include the new ps_stl.h wrapped containers without having to change the whole codebase.

#2027 wontfix [PATCH] TextRenderer allocation and cache fix Jorma Rebane Jorma Rebane
Description

Currently the CGUI::DrawText and CTextRenderer is quite inefficient.

In CTextRenderer, for every [text+font] chunk, a temporary object and a copy of the string is made:

	struct SBatch
	{
		CMatrix3D transform;
		CColor color;
		shared_ptr<CFont> font;
		std::wstring text; // <--- bad!
	};

This results in a huge amount of temporary wstring objects that get deleted right after the small batch has been rendered. This is extremely inefficient.

In order to speed this up, two changes were made:

  • Removed wstring from SBatch, replaced with text_index and text_length
  • Added m_TextBuffer, m_VertexBuffer and m_IndexBuffer

Using this very basic buffering we can avoid a huge number of memory operations:

	struct SBatch
	{
		CMatrix3D transform;
		CColor color;
		CFont* font;
		int text_index;
		int text_length;
	};

In the actual CGUI::DrawText method CTextRenderer is just a temporary object, which is very bad, since the temporary font cache and buffers inside CTextRenderer is destroyed.

Fortunately the VFS cache system never releases the font handles. However if this is true, then why cache fonts EVERY DRAW CALL if you end up deleting them anyways? This makes no sense at all.

Solution: Since CTextRenderer is actually used a lot, the Singleton pattern makes sense here.

#2028 fixed [BUG] CInput::UpdateText() crash in Debug build Jorma Rebane Jorma Rebane
Description

In VC++11.0 or higher, CInput::UpdateText() will crash in debug build with error: Iterators incompatible.

This is due to std::list<SRow>::erase invalidating the iterators and no code to update the active iterators.

The actual fix is very simple.

Previously the code relied on undefined behavior to run.

#2029 wontfix [PATCH] ShaderDefines freaky cache fix Jorma Rebane Jorma Rebane
Description

Currently the exceptionally strange cache method implemented in ShaderDefines.cpp is actually worse for performance.

With some small tweaks and removing a lot of unnecessary code, managed to reduce the number of CShaderParam instances to a bare minimum.

Also replaced weird cache system in ShaderManager. Much easier to combine hashes in ShaderManager than implementing custom hashers.

#2191 fixed [Premake] Add VS2012, EnableSSE2 and "--with-c++11" Jorma Rebane Jorma Rebane
Description

This patch adds three new features to the build system:

  • VS2012 project generation - premake4 now accepts "vs2012" and generates a correct solution file for VS2012.
  • EnableSSE2 - automatically enables SSE2 via premake flag "EnableSSE2"; This doesn't really change anything for gcc/icc, but is crucial to enable SSE2 code generation in VS projects. Using the default feature of premake which ignores EnableSSE2 on systems that don't support it.
  • "--with-c++11" - Special premake flag that passes -std=c++0x to gcc/icc. Simply pass --with-c++11 to enable C++11 features. For testing and possible migration to C++11 in the future.

I also added a new batch file that generates atlas build for VS2012. This is useful for developers who need to recompile AtlasUI.dll.

#2175 fixed [PATCH] DEBUG is not defined. RefinedCode RefinedCode
Description

In the javascript debugger, when I stop at a breakpoint, and try to open any of the variable branches in the values tab (locals,this,global) it never loads, and the spinner never goes away. So I opened chrome's developer tools and noticed whenever I try to open a branch, I get the following error:

Uncaught ReferenceError: DEBUG is not defined

This happens in the file source/tools/jsdebugger/js/src/debugger.js at lines:

-222 for the locals branch

-240 for the this branch

-204 for the global branch

Basically all three of those point to the same block of code, just repeated at different places:

error: function(jqXHR, textStatus, errorThrown)
{
	DEBUG(textStatus);
	DEBUG('error');
}

There is a function in the same file called 'debug()' not 'DEBUG()' which would probably be what it's looking for.

So I have created a patch which fixes this error.  A simple fix but I can get used to the patch submission process.  Hopefully I did it right as this is my first time submitting.

#2178 fixed [PATCH] Selections not cleared by quickload RefinedCode historic_bruno
Description

To reproduce:

  • Load map
  • Select some units
  • Quick save (Shift+F5)
  • Quick load (shift+F8)

Notice your selection is still active (ignored by the save process), but the selection rings are not visible.

#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

#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

#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

#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

#2310 fixed [PATCH] Graphic settings aren't saved between different executions José Manuel Santamaría Lema José Manuel Santamaría Lema
Description

Graphic settings aren't saved after you close the game, so if you had disabled shadows you have had to set that again each time you executed 0AD.

Santa is working on a patch.

#4300 fixed Quitting the game without seeing the summary page. Laurenz Reinthaler mimo
Description

When quitting the game, we automatically switch to the summary page, but we should have a way to not see it. A typical use case is when saving a game to follow it later, we may not want to see the infos about the enemies. Adding a checkbox in the quit confirmation window, which would ask if we want to see the summary (true by default if the player is defeated or winner and false if the player is still in game) would do the job.

#5673 duplicate Datacrash while starting Silberschmied3 Silberschmied3
Description

Function call failed: return value was -100010 (Logic error in code) Location: apic.cpp:121 (IndexFromApicId)

Call stack:

IndexFromApicId (apic.cpp:121)

apicIds = 0x0051BA64 -> [8] { 0 (0x00), 1 (0x01), 2 (0x02), 3 (0x03), 4 (0x04), 5 (0x05), 0 (0x00), 0 (0x00) } apicId = 8 (0x08)

ProcessorFromApicId (apic.cpp:131)

apicId = 8 (0x08)

ExtractProximityDomainsFromSRAT (wnuma.cpp:236)

srat = 0x05BBD598 ->

header =

signature = "SRAT" size = 400 (0x00000190) revision = "ÉAMD FAM_F_10" checksum = 201 (0xC9) oemId = "AMD FAM_F_10" oemTableId = "FAM_F_10" oemRevision = 100925440 (0x06040000) creatorId = "AMD " creatorRevision = 1 (0x00000001)

reserved1 = 1 (0x00000001) reserved2 = [8] { [8] { 0 (0x00), 0 (0x00), 0 (0x00), 0 (0x00), 0 (0x00), 0 (0x00), 0 (0x00), 0 (0x00) }, 0 (0x00), 0 (0x00), 0 (0x00), 0 (0x00), 0 (0x00), 0 (0x00), 0 (0x00) } affinities = [1] { { type = 0 (0x00), length = 16 (0x10) } }

proximityDomainNumber = 96195992 (0x05BBD598)

InitTopology (wnuma.cpp:277)

proximityDomains = (unsupported map<size_t,ProximityDomain >)

ModuleInit (module_init.cpp:47)

initState = 0x00519B0C -> 4294867266 (0xFFFE7942) init = 0x003F14E0 -> (InitTopology)

numa_NumNodes (wnuma.cpp:297)

RunHardwareDetection (hwdetect.cpp:313)

LINE_202_ =

m_t0 = 1.35406 (0x3FF5AA38B99DA2A8) m_description = 0x0049EB84 -> "RunHardwareDetection"

rq =

mContext = 0x05BD6FD8 -> (JSContext)

global =

{

(js::ValueOperations<JS::Rooted<JS::Value> >)

}

stack = 0x81818080 -> (unavailable - internal error)

prev = 0x83838282 ->

(js::RootedBase<void *>) stack = (unavailable - internal error)

prev = (unavailable - internal error)

ptr = (unavailable - internal error)

ptr =

data =

asBits = -8680821844409482108 (0x8787868685858484) s = { payload =

i32 = 2240119940 (0x85858484) u32 = 2240119940 (0x85858484) boo = 2240119940 (0x85858484) str = 0x85858484 -> (JSString) sym = 0x85858484 (see above) obj = 0x85858484 (see above) cell = 0x85858484 (see above) ptr = 0x85858484 (see above) why = -2054847356 word = 2240119940 (0x85858484) uintptr = 2240119940 (0x85858484)

, tag = -2021161338 }

asDouble = -2.17437e-272 (0x8787868685858484) asPtr = 0x85858484 (see above)

caps3 = 2139061886 (0x7F7F7E7E) un =

sysname = "Win7" nodename = "WAFFEL-PC" release = "SP 1" version = "6.1.7601" machine = "x86"

file =

m_Buffer = (shared_ptr<unsigned char>) m_BufferSize = 12383 (0x0000305F)

code = (unsupported basic_string<char,char_traits<char> >) tmpVal =

{

(js::ValueOperations<JS::Rooted<JS::Value> >)

}

stack = 0x8D8D8C8C -> (unavailable - internal error)

prev = 0x8F8F8E8E ->

(js::RootedBase<void *>) stack = (unavailable - internal error)

prev = (unavailable - internal error)

ptr = (unavailable - internal error)

ptr =

data =

asBits = -7812739770352562032 (0x9393929291919090) s = { payload =

i32 = 2442236048 (0x91919090) u32 = 2442236048 (0x91919090) boo = 2442236048 (0x91919090) str = 0x91919090 -> (JSString) sym = 0x91919090 (see above) obj = 0x91919090 (see above) cell = 0x91919090 (see above) ptr = 0x91919090 (see above) why = -1852731248 word = 2442236048 (0x91919090) uintptr = 2442236048 (0x91919090)

, tag = -1819045230 }

asDouble = -2.27107e-214 (0x9393929291919090) asPtr = 0x91919090 (see above)

caps0 = 2105375868 (0x7D7D7C7C) scriptInterface =

m_CxPrivate = { pScriptInterface = 0x0069EC10 ->

m_CxPrivate = { pScriptInterface = 0x0069EC10 (see above), pCBData = 0x97979696 } m = (unique_ptr<ScriptInterface_impl,default_delete<ScriptInterface_impl> >) m_rng = 0x9B9B9A9A ->

lcf =

_x = (unavailable - internal error)

m_CustomObjectTypes = (unsupported map<basic_string<char,char_traits<char> >,ScriptInterface::CustomType >)

, pCBData = 0x97979696 (see above) }

m = (unique_ptr<ScriptInterface_impl,default_delete<ScriptInterface_impl> >) m_rng = 0x9B9B9A9A (see above) m_CustomObjectTypes = (unsupported map<basic_string<char,char_traits<char> >,ScriptInterface::CustomType >)

settings =

{

(js::ValueOperations<JS::Rooted<JS::Value> >)

}

stack = 0x05BD700C -> 0x0069EC2C ->

(js::RootedBase<void *>) stack = 0x05BD700C (see above) prev = 0x00000000 ptr = 0x04D61A60

prev = 0x00000000 ptr =

data =

asBits = -515314935200 (0xFFFFFF8804D61A60) s = { payload =

i32 = 81140320 (0x04D61A60) u32 = 81140320 (0x04D61A60) boo = 81140320 (0x04D61A60) str = 0x04D61A60 (see above) sym = 0x04D61A60 (see above) obj = 0x04D61A60 (see above) cell = 0x04D61A60 (see above) ptr = 0x04D61A60 (see above) why = 81140320 word = 81140320 (0x04D61A60) uintptr = 81140320 (0x04D61A60)

, tag = -120 }

asDouble = -1.#QNAN (0xFFFFFF8804D61A60) asPtr = 0x04D61A60 (see above)

caps2 = 2307491976 (0x89898888) caps1 = 2341177994 (0x8B8B8A8A)

InitGraphics (gamesetup.cpp:1004)

args = (unavailable) flags = (unavailable) installedMods = (unavailable) profilerGPUEnable = false setup_vmode = false context = [2048]

0 (0x00) 0 (0x00) 2 (0x02) 0 (0x00) 28 (0x1C) 238 (0xEE) 105 (0x69) 0 (0x00) 28 (0x1C) 238 (0xEE) 105 (0x69) 0 (0x00) 28 (0x1C) 238 (0xEE) 105 (0x69) 0 (0x00) ...

buf = [500]

27694 29895 61809 29896 8939 37685 63424 105 ('i') 32096 29523 65535 65535 ...

context = [2048]

0 (0x00) 0 (0x00) 2 (0x02) 0 (0x00) 28 (0x1C) 238 (0xEE) 105 (0x69) 0 (0x00) 28 (0x1C) 238 (0xEE) 105 (0x69) 0 (0x00) 28 (0x1C) 238 (0xEE) 105 (0x69) 0 (0x00) ...

context = [2048]

0 (0x00) 0 (0x00) 2 (0x02) 0 (0x00) 28 (0x1C) 238 (0xEE) 105 (0x69) 0 (0x00) 28 (0x1C) 238 (0xEE) 105 (0x69) 0 (0x00) 28 (0x1C) 238 (0xEE) 105 (0x69) 0 (0x00) ...

rq =

mContext = 0x772CF4EA -> (JSContext)

setup_gui = (bool)0x40 data =

{

(js::ValueOperations<JS::Rooted<JS::Value> >)

}

stack = 0x00000000 prev = 0x0069EE58 ->

(js::RootedBase<void *>) stack = 0x00000000 prev = 0x00000000 ptr = 0x00000000

ptr =

data =

asBits = 6942764 (0x000000000069F02C) s = { payload =

i32 = 6942764 (0x0069F02C) u32 = 6942764 (0x0069F02C) boo = 6942764 (0x0069F02C) str = 0x0069F02C -> (JSString) sym = 0x0069F02C (see above) obj = 0x0069F02C (see above) cell = 0x0069F02C (see above) ptr = 0x0069F02C (see above) why = 6942764 word = 6942764 (0x0069F02C) uintptr = 6942764 (0x0069F02C)

, tag = 0 }

asDouble = 3.43018e-317 (0x000000000069F02C) asPtr = 0x0069F02C (see above)

scriptInterface = (shared_ptr<ScriptInterface>) e = 0x00000002

RunGameOrAtlas (main.cpp:632)

argc = 1 (0x00000001) argv = 0x006D0008 -> 0x006D0028 -> "C:\Users\Waffel\AppData\Local\0 A.D. alpha\binaries\system\pyrogenesis.exe" replayFile =

path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >) separator = 47 ('/')

modsToInstall = (unsupported vector<Path >) scriptEngine =

(Singleton<ScriptEngine>) m_Runtimes = (unsupported list<JSRuntime const * >)

args =

m_Args = (unsupported vector<pair<CStr8,CStr8> >) m_Arg0 =

path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >) separator = 92 ('\')

m_ArgsWithoutName = (unsupported vector<CStr8 >)

res = 4.9776e-010 (0x3E011A580DFA109E) modPath =

path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >) separator = 60713

paths =

m_root =

path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >) separator = 2047

m_rdata =

path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >) separator = 16385

m_gameData =

path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >) separator = 0

m_userData =

path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >) separator = 13319

m_config =

path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >) separator = 14840

m_cache =

path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >) separator = 19712

m_logs =

path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >) separator = 312

replay =

m_Stream = 0x3E011A58 -> (basic_istream<char,char_traits<char> >)

mod =

path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >) separator = 31400

zip =

path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >) separator = 65528

mods = (unsupported vector<CStr8 >) paths =

m_root =

path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >) separator = 13409

m_rdata =

path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >) separator = 11

m_gameData =

path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >) separator = 14928

m_userData =

path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >) separator = 528

m_config =

path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >) separator = 64312

m_cache =

path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >) separator = 64340

m_logs =

path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >) separator = 0

builder =

m_VFS = (shared_ptr<IVFS>) m_Files = (unsupported vector<Path >) m_TempDir =

path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >) separator = 52533

m_NumBaseMods = 8651064 (0x00840138)

installedMods = (unsupported vector<CStr8 >) installer =

m_VFS = (shared_ptr<IVFS>) m_ModsDir =

path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >) separator = 0

m_TempDir =

path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >) separator = 0

m_CacheDir =

path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >) separator = 160

m_InstalledMods = (unsupported vector<CStr8 >)

paths =

m_root =

path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >) separator = 13409

m_rdata =

path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >) separator = 11

m_gameData =

path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >) separator = 14928

m_userData =

path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >) separator = 528

m_config =

path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >) separator = 64312

m_cache =

path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >) separator = 64340

m_logs =

path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >) separator = 0

SDL_main (main.cpp:680)

argc = 1 (0x00000001) argv = 0x006D0008 (see above)

main_utf8 (sdl_windows_main.c:126)

argc = 1 (0x00000001) argv = 0x006D0008 (see above)

wmain (sdl_windows_main.c:151)

argc = 1 (0x00000001) wargv = 0x0088E890 -> 0x0088E898 -> 67 (0x0043) wenvp = 0x0088FE28 -> 26320 (0x66D0) argv = 0x006D0008 (see above) retval = 0 (0x00000000) i = 1 (0x00000001)

CallStartupWithinTryBlock (wseh.cpp:364)

ret = 0 (0x00000000)

RtlInitializeExceptionChain (:0)

RtlInitializeExceptionChain (:0)

errno = 0 (No error reported here) OS error = 0 (no error code was set)

#5336 fixed UI scale option Silier kaputt
Description

When trying to play 0ad on a 12.5" size laptop screen with 1920x1080 resolution, the font is a little too small to be seen comfortably. I am using Gnome 3 with X11 on Arch Linux.

Expected result: Larger fonts.

Possible solutions:

1) If it's already possible, update the documentation!

2) Add an option in "Settings->Options->General" to allow changing the font size. (I couldn't find one.)

3) Add an option in "Settings->Options->Graphics" to allow changing the display resolution, which I presume would result in a larger font as well. I tried changing the display resolution by creating ~/.config/0ad/configs/local.cfg with xres=1280 and yres=720. However, after restarting 0ad, the resolution is still 1920x1080. The log shows that the local.cfg with the smaller resolution is loaded. (This might be a separate bug?)

#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

#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.

#1209 fixed [PATCH] Set the traded goods for every Trader in a selected group of Traders O.Davoodi michael
Description

Set the traded goods for every Trader in a selected group of Traders. Eliminates having to do it one at a time.

Currently, you can only set the trade goods on one trader at a time. It would be best if this could be done with multiple selected traders at once.

#1210 fixed [PATCH] Player should be able to train units over all buildings in a selection. O.Davoodi michael
Description

Players should be able to train units in multiple buildings in a selection at the same time. For instance, if multiple Barracks are selected (usually via double click), then if the player clicks the "train spearman" button, a spearman should be added to the queues of all of the selected barracks. This removes unnecessary clicks and helps prevent carpal tunnel and tendonitis in players (known from experience).

#1215 fixed [PATCH] Trade can occur between two incomplete buildings O.Davoodi gudo
Description

When setting up a trade route, it is possible to trade between two incomplete structures.

Place two Market foundations, but do not build them. Attempt to establish a trade route between the two Trade will happen successfully.

#1388 fixed Bug on Hyrcanian Shores random map O.Davoodi historic_bruno
Description

Fish are placed on land, as originally reported here. Just look around player 1's base. I don't know if there's meant to be water or the fish should be something else?

#1408 fixed Remove trees from player bases on ALL random maps O.Davoodi historic_bruno
Description

We need to check every random map script and make sure clumps of trees or other resources are not placed too near the base. Reasons: it restricts building area for both players and AIs, and it obstructs the player's view of the game. A few scattered trees would be OK, but even those should be far enough away to be able to see the base and freely move units.

The scenarios are for the most part good examples of how a player's base area should look.

#1522 fixed [PATCH] RMS Deep Forest crashes with out of memory O.Davoodi FeXoR
Description

When generated on large or larger maps with only a few players the random map script fails with out of memory.

Here's a patch that fixes that by reducing the maximum tree density depending on map size and number of players.

#1533 fixed [PATCH] Now that gates work replace open entries with gates as the default for RMGEN wall placement O.Davoodi FeXoR
Description

In many cases entries was used (just a gap in the wall) since gates did not work. Now that gates are passable I removed the entries with gates in wall_builder.js for random map generation.

#1555 fixed [PATCH] Cheats O.Davoodi O.Davoodi
Description

http://www.wildfiregames.com/forum/index.php?showtopic=13439&hl=cheat&st=40

We should determine which cheats we really like to include. This patch adds 4 resource cheats and a reveal map one.

#1577 fixed two Chicken spawning inside Civic Centre on Alpine Lake. AI instability as results O.Davoodi rjs23
Description

http://img1.uploadscreenshot.com/images/orig/8/21507302655-orig.jpg

There are two chickens inside the building. One of the chickens died because one worker managed to reach it and killed it but could not gather it after it got slaughtered.

As seen in the picture, they're all gathering around it trying to approach it closer but they could not get any closer due to building obstruction.

I don't know how chickens got inside the building (not literally, but somehow it managed to get inside building's obstructions area).

It seems like a bug that rarely occur and sorta hard to reproduce.

I was playing random map: Alpine Lakes with 2 AI bot and 1 player (me) using default map size.

#1582 fixed [PATCH] Improve default player names. O.Davoodi wraitii
Description

The game uses the "Player X" template for player names when playing on a random map. While this is not a big letdown, it would be nice to use a system similar to AOE I/II, where the name of the AIs were historical rulers. (additionally, we could show the AI used in the endgame screen next to the player name).

#1654 fixed [PATCH] Adjust random map "Fortress" now that gates work O.Davoodi FeXoR
Description

With working gates there is no need to have an open entry and gates in the walls surrounding the players Civil Centres. Changes:

  • Replaced the entries with gates (Now that they work)
  • Replaced the gates with long walls (Since it was just a style thing)
  • Replaced walls with long walls (To fit the ingame wall placement defaults)
  • Added towers between gates and walls (To fit the ingame wall placement defaults)
  • Removed two wall segments per sede (To readjust fortress size)

NOTE: Since it's Spahbod's map he should confirm that this changes are wanted.

#1668 fixed [PATCH] Add "Random" option to map selection dropdown O.Davoodi O.Davoodi
Description

Here is a patch. Notice that there is no such an option for scenarios because of their non-fixed player count.

#1678 fixed [PATCH] Each culture should have an equal chance to be chosen by "random" option O.Davoodi O.Davoodi
Description

Currently, the chance that we would have a Hellenic faction chosen by "Random" option is much more than having Carthaginians. But all cultures should have an equal chance to be chosen.

#2045 fixed [PATCH] Cache technology modifiers based on both name and value O.Davoodi O.Davoodi
Description

Currently we only cache the technology modifiers based on the name of the value. In the current code, if the value changes, it is not registered in the TechManager and the older value is returned.

It has already broken the "TARDIS" cheat, which changes the player's maximum population. It can also cause problems in future (for example, when implementing a stat changer trigger effect).

To fix this, we can make the game cache the modifier based on both name and value.

#2258 fixed Atlas default player settings suboptimal for RMS O.Davoodi FeXoR
Description

Error description: Random maps don't generate properly (in some circumstances)

Reason: Not all players civilizations are set

To reproduce:

  • Open Atlas
  • Reduce the number of players to 2
  • Generate "Fortress" random map (working, all players beyond 2 will now have no civ set)
  • Increase the number of player to 3 (player 3 will still have no civ)
  • Generate "Fortress" random map (crashing)

This is due to player 3 will have no civ defined. On other maps that "only" leads to warnings about that and player 3 will get Athenian starting entities despite it's civ (which is undefined ofc.).

How to fix: I recommend to check all buttons for "civilization" in Atlas player settings by default (even if the number of player are reduced, a random map is generated and then the number of players is increased again). That is the initial state (if the number of players are NOT changed) anyway. Additionally I'd suggest to force all players civilizations to be set if the "Generate map" button is pressed (because RMS needs set civs - as is and in some cases anyway, see below).

(OPTIONAL: If it's wanted to generate maps with starting entities without a preset civ to enable the use of RMS as a basis of Skirmish Maps starting entities for the case civ = "random" (I guess) needs to be added (I don't know where). However, due to walls not having the same length for all civs and civs have different NUMBER of starting entities (e.g. Iberian civ bonus walls) RMS with walls will never be possible that way.)

#2262 fixed [PATCH] Advanced graphical options in random maps O.Davoodi O.Davoodi
Description

This patch allows our random map scripts to use the advanced graphical features (fog, bloom, etc.).

#2413 fixed [PATCH] Resource Trickle O.Davoodi O.Davoodi
Description

Resource trickle component for Persian Apadana (and possible future entities/mods).

#1325 fixed [PATCH] Replace ecvt() in FCollada with something else Stan historic_bruno
Description

FCollada uses the deprecated POSIX function ecvt to convert floats to strings, but it's not available on FreeBSD and it would be nice to have a portable replacement. The result needs to be compatible with the COLLADA schema which uses XML's xs:double type for floats.

Possible solutions:

It's a good idea to avoid ecvt implementations that depend on dtoa, because it's also not available on FreeBSD and there are numerous buggy versions of that code around which apparently break with compiler optimizations.

#1981 fixed Animal: Eurasian Brown Bear Stan michael
Description

Discussion:

Wikipedia: http://en.wikipedia.org/wiki/European_bear

A large hair mammal who will defend itself when threatened. Alpine, Desert, Mediterranean, Polar, Steppe, and Temperate biomes in 0 A.D.

Requires: Model, Texture, Animations (run, walk, idle, graze, attack, death)

#2288 fixed "Officer Helmet" Stan Enrique
Description

Officer helmet for ptolemies/seleucids. You should import a head mesh from the game to get the right size and form to fit.

Bottom left and bottom right helmets from this reference:

http://img837.imageshack.us/img837/7427/kolorowyp.jpg

#2293 fixed "Agema" helmet. Stan Enrique
Description

You should import a head mesh from the game to get the right size and form to fit.

References:

http://img268.imageshack.us/img268/2631/gg2f.jpg

#2296 fixed Improve escort/guard icons Stan mimo
Description

In the #2034 ticket, I've made some quick icons which could be improved. In particular art/textures/cursors/action-guard-disabled.png (it is a bit too dark), art/textures/cursors/action-remove-guard.png and art/textures/ui/session/icons/remove-guard.png

#4019 fixed [PATCH] assign back to work icon to the GUI. Stan Lionkanzen
Description

The 'back to work icon' is currently the same as the 'production' icon, and should be replaced by something that represents it's function.

There was no icon submitted in the ticket #799

#4634 fixed Wonder foundation size smaller than footprint Stan elexis
Description

When trying to select the briton wonder foundation, one has to click somewhere on the middle of it instead of anywhere on the footprint.

https://trac.wildfiregames.com/raw-attachment/ticket/4634/wonder_foundation_footprint.gif

#4782 fixed No window icon for the mod selector Stan leper
Description

We currently have no window icon for the mod manager. This occurs when starting the game without any mods (go to the mod manager, remove all mods, press start mods), and might also happen for some total conversion that doesn't use anything from our public mod (unlikely but still).

This currently throws a warning, which isn't very bad, but it would be nice to have a window icon.

#5087 fixed wrong placeholder for vercingetorix_infantry hero Stan mimo
Description

The icon of gaul_hero_vercingetorix_infantry is a cavalry hero (copied from gaul_hero_vercingetorix). That's quite disturbing in game. It should be replaced by an infantry one and, if no available icon, using one of the other infantry gaul heroes would be preferable than a cav one.

#5092 fixed ClumpPlacer seems to use incorrect formula to determine if placement failed for a given failFraction allowed. Stan Inari
Description

To check if placement has failed, ClumpPlacer allows to pass a failFraction to allow partial placement to still count as success. (ps/trunk/binaries/data/mods/public/maps/random/rmgen/placer/centered/ClumpPlacer.js#L103)

The formula to check if placement has failed seems a bit off though. It keeps track of a failed variable, increasing that by 1 each time a point fails to put.

In a quick test for an area with size 1200 there seem to be roughly 13500~15500 points that it attempts to put. It varies a bit because of the randomness involved in the placement.

So it can't just check that failed variable against the size multiplied by failFraction. It should instead keep track of how many points it tried to put and multiply that count by failFraction to check against failed.

ChainPlacer seems to do this already (ps/trunk/binaries/data/mods/public/maps/random/rmgen/placer/centered/ChainPlacer.js#L110).

This is also why #4810 seemed to be an issue, originally it passed a failFraction of 1, allowing for placement to proceed in any case. But that seems to not have worked as intended.

#5095 fixed Right click on the left panel doesn't work in observer mode Stan Stan
Description

As reported by one of our friendly neighbours at JDLL, when you right clicking on a unit or a technology doesn't make the detail window appear.

#5105 fixed Errors when deleting the macedonian siege workshop Stan elexis
Description
ERROR: Failed to find matching prop point called "barrelshield" in model "art/meshes/structural/hele_workshop.dae" for actor "workshop"
ERROR: Failed to find matching prop point called "greekbarrel" in model "art/meshes/structural/hele_workshop.dae" for actor "workshop"
ERROR: Failed to find matching prop point called "greekbucket" in model "art/meshes/structural/hele_workshop.dae" for actor "workshop"
ERROR: Failed to find matching prop point called "greekshield" in model "art/meshes/structural/hele_workshop.dae" for actor "workshop"
ERROR: Failed to find matching prop point called "greekshields" in model "art/meshes/structural/hele_workshop.dae" for actor "workshop"
ERROR: Failed to find matching prop point called "greekspears" in model "art/meshes/structural/hele_workshop.dae" for actor "workshop"
ERROR: Failed to find matching prop point called "greekswords" in model "art/meshes/structural/hele_workshop.dae" for actor "workshop"
#5165 fixed Zip files with comments trip assertion on game startup Stan Teiresias
Description

Placing a .zip file with a "zip file comment" below the $0AD-HOME/binaries/data/mods/public folder (so the pyrogenesis engine will scan it) causes a startup assertion to fire on all of my machines. On Windows, it said "(error while formatting error message)" while on Linux and FreeBSD it reports an assertion in archive_zip@500 has tripped.

The attached test.zip file trips the problem on my machines when placed e.g. in $0AD-HOME/binaries/data/mods/public/simulation/ai, and was built using the buildzipwithcomment.sh file inside that archive.

Note: The actual zip command was created using the zipnote utility. The tool crashed on both Linux and FreeBSD for me, so I fetched the source from ftp://ftp.info-zip.org/pub/infozip/src/zip30.tgz and debugged into it. It seems that the fclose(x); instruction in zipnote.c:666 is trying to close a file already closed in zipnote.c:552, and my stdlibs seem unforgiving to it. So I patched the zipnote.c and used that to create the comment. That's why the buildzipwithcomment.sh explicitly calls ./zipnote

(I actually encountered this problem during AI breeding as the jasmine archive is a commented zip file, and destilled it down to the test.zip)

#5255 fixed FreeBSD porting patches Stan Guido Falsi
Description

Hi,

While updating the FreeBSD port to Alpha 23 I encountered a few problems, especially on FreeBSD 12 (the development version) due to the newer version of clang.

I'm planning to send code reviews for the required patches, grouping them logically. I need some time to port them to the present subversion tree.

I'll track those reviews here for reference, if that's ok.

#5269 fixed Rightclick on production queue selection panel buttons should be possible even if left-click is disabled Stan OptimusShepard
Description

If you haven't enough resources for a upgrade, building, unit etc. you can't get information by right click on it. It should be a problem with the c++ code

#5558 fixed Duplicate medit_city_tile terrain detected by Checkrefs.pl Stan Stan
Description

Currently when running the checkrefs.pl script, one gets the following error:

Duplicate terrain name 'medit_city_tile' (from 'art/terrains/biome-mediterranean/medit_city_tile.xml' and 'art/terrains/road/medit_city_tile.xml')

Both files were added in r12306

The PMP format doesn't care about paths, so for him only the first texture matters, the other one gets replaced by the first when placed in the editor. Only the preview is correct, I believe it's because it is loaded differently.

The following maps use 'medit_city_tile' (used by writing a small c# code that parsed all the PMP files)

    binaries/data/mods/public/maps/scenarios/Arcadia.pmp
    binaries/data/mods/public/maps/scenarios/Battle for the Tiber.pmp
    binaries/data/mods/public/maps/scenarios/Bridge_demo.pmp
    binaries/data/mods/public/maps/scenarios/Campaign Test Map.pmp
    binaries/data/mods/public/maps/scenarios/Miletus.pmp
    binaries/data/mods/public/maps/scenarios/Multiplayer_demo.pmp
    binaries/data/mods/public/maps/scenarios/Peloponnese.pmp
    binaries/data/mods/public/maps/scenarios/Sandbox - Iberians.pmp
    binaries/data/mods/public/maps/scenarios/Sandbox - Macedonians.pmp
    binaries/data/mods/public/maps/scenarios/Territory Demo.pmp
    binaries/data/mods/public/maps/scenarios/The Massacre of Delphi.pmp
    binaries/data/mods/public/maps/scenarios/Third Macedonian War.pmp
    binaries/data/mods/public/maps/skirmishes/Acropolis Bay (2).pmp
    binaries/data/mods/public/maps/skirmishes/Corinthian Isthmus (2).pmp
    binaries/data/mods/public/maps/skirmishes/Corinthian Isthmus (4).pmp
    binaries/data/mods/public/maps/skirmishes/Corsica and Sardinia (4).pmp
    binaries/data/mods/public/maps/skirmishes/Egypt (3v3).pmp
    binaries/data/mods/public/maps/skirmishes/Greek Acropolis (2).pmp
    binaries/data/mods/public/maps/skirmishes/Greek Acropolis (4).pmp
    binaries/data/mods/public/maps/skirmishes/Greek Acropolis Night (2).pmp
    binaries/data/mods/public/maps/skirmishes/Sicilia (2).pmp
    binaries/data/mods/public/maps/skirmishes/Sicilia_Nomad.pmp
    binaries/data/mods/public/maps/skirmishes/Skirmish Demo.pmp
    binaries/data/mods/public/maps/tutorials/Introductory_Tutorial.pmp
    binaries/data/mods/public/maps/random/atlas_mountains.js
    binaries/data/mods/public/maps/random/corsica.js
    binaries/data/mods/public/maps/random/cycladic_archipelago.js
    binaries/data/mods/public/maps/random/guadalquivir_river.js
    binaries/data/mods/public/maps/random/hellas_biomes.js
    binaries/data/mods/public/maps/random/latium.js
    binaries/data/mods/public/maps/random/mediterranean.js

SOLUTION 1 :

  • Rename terrains/roads/medit_city_tile.xml to medit_city_road.xml and the subsequent textures
  • Add missing textures <texture name="normTex" file="types/medit_city_tile_2_norm.png"/> <texture name="specTex" file="types/medit_city_tile_2_spec.png"/>
  • Update material to make use of those.

Pros:

  • Easy
  • Few files to edit.

Cons:

  • Workaround solution

SOLUTION 2 :

  • Switch the two file contents
  • Add missing textures <texture name="normTex" file="types/medit_city_tile_2_norm.png"/> <texture name="specTex" file="types/medit_city_tile_2_spec.png"/>
  • Update material to make use of those.
  • Rename terrains/roads/medit_city_tile.xml to medit_city_road.xml and the subsequent textures
  • Replace the texture in every map either by editing the pmp header, or by opening and replacing the texture with the replace tool in atlas, and editing the js file.

Pros:

  • Clean solution

Cons :

  • 29 Files to edit
#5622 fixed Britons wonder Uffington White Horse not possible to get expansion bonus Stan Minohaka
Description

Playing as the Britons after creating their wonder the building renders as some sort of cat flat on the ground, you can even walk through it. Also it's not possible to reach the population expansion bonus, since the option is not available.

Changeset 23074

#5760 fixed Ryzen (Zen2) slowdowns Stan OptimusShepard
Description

The new Ryzen CPUs have random slowdonws, which makes the game unplayable. See therefore the discussion in the forum.

https://wildfiregames.com/forum/index.php?/topic/26890-problem-with-ryzen-3000er-series/page/5/

A solution could be the patch D2726. This is a notice, that this issue won't be forgot to be solved for the A24.

#5842 fixed Xcursor dependency obsolete Stan Arfrever Frehtes Taifersar Arahesis
Description

Usage of Xcursor was removed in r23364 (git commit b4762a21e8955f65e9dd2db480f7890c035d919f).

Build system still contains:

$ grep -ir xcursor build
build/jenkins/dockerfiles/gcc6.Dockerfile:    libopenal-dev libpng-dev libsdl2-dev libvorbis-dev libxcursor-dev  \
build/premake/extern_libs5.lua: xcursor = {
build/premake/extern_libs5.lua:                         unix_names = { "Xcursor" },
build/premake/premake5.lua:     table.insert(used_extern_libs, "xcursor")

This results in unnecessary passing of -lXcursor when linking.

Aforementioned references to Xcursor should be removed.

#5877 fixed (FR) Added initial support of MCST Elbrus 2000 (e2k) CPU architecture Stan Ramil Sattarov
Description

MCST Elbrus 2000 (e2k) - this is VLIW/EPIC architecture, like Intel Itanium (IA-64) architecture. Architecture has half native / half software support of most Intel/AMD SIMD (e.g. MMX/SSE/SSE2/SSE3/SSSE3/SSE4.1/SSE4.2/AES/AVX/AVX2 & 3DNow!/SSE4a/XOP/FMA4)

Added defines of e2k architecture to main files and added SSE usage for e2k.

#5934 fixed Starting a game, the "Map" option panel is not automatically displayed Stan Langbart
Description

When starting a "Single-player" or hosting a Game Lobby match, the "Map" option panel can only be seen after clicking on "Map" twice. In A23b the map option panel presents itself automatically. See Picture below for more clarity.

I tested also a macOS Bundle from Jan 14,2021. The map option panel appears like in A23b.

#5951 fixed Bring back some camels around lake tutorial. Stan Freagarach
Description

Tutorial mentions camels, but those were removed in r24432.

#6023 fixed Put back translation credits headers into their own languages. Stan Stan
Description

Phab:rP24927 added more languages to the list but I failed to realise those languages were translated. (e.g French should be Français)

Another approach would be to let translators translate those languages, but that would mean useless translation work for them.

#6075 fixed Make apple tree bounding box selection bigger. Stan nani
Description

Currently is very hard to click as only selecting the base works

#6091 fixed A mahout for the mauryan worker elephant Stan Imarok
Description

Add a mahout to the mauryan worker elephant and give them back their ability to help building structures.

See also the corresponding task on the forums: here

#6107 fixed Freezes when exiting. (Compiled with --without-nvtt) Stan moiman
Description

Tested in 24b. Only happens when 0ad is compiled without NVTT. Stuck in endless loop here https://github.com/0ad/0ad/blob/A24b/source/graphics/TextureConverter.cpp#L316 . It seems like m_Shutdown is not set false when 0ad is compiled without NVTT.

#6160 fixed Garrison flag bugs Stan Langbart
Description

Forge

  • structures/cart/forge
  • structures/iber/forge
  • structures/maur/forge
  • structures/pers/forge
  • structures/ptol/forge
  • structures/rome/forge

The Carthaginian, Iberian, Mauryan, Persian, Ptolemaic and Romans civs have no garrison flag on their forge buildings.

Wonder

  • structures/iber/wonder
  • structures/maur/wonder
  • structures/pers/wonder
  • structures/rome/wonder

The Iberian, Mauryan, Persian and Romans civs have no garrison flag on their wonder buildings.

Tested

I have tested the garrison flag for all civs on these buildings as well and the flag is clearly visible on all of them:

  • Elephant stable
  • Stable
  • Fortress
  • Civic center
  • Siege workshop (arsenal)
  • Defense tower
  • Sentry tower
  • Outpost

Fixed

  • Barracks
  • Temple

Related ticket:

  • #4581 Flags for all garrisonable buildings and units (20/May/17)
#6177 fixed Assert on brit_hero_caratacos.png Stan nwtour
Description

If start game compiled config=debug and select "Brits" in the Structures overview get assert:

Function call failed: return value was -100113 (Case 13)
Location: ogl_tex.cpp:505 (OglTex_validate)

GDB backtrace:

#0  raise (sig=<optimized out>) at ../sysdeps/unix/sysv/linux/raise.c:50
#1  0x08a6861f in debug_break () at ../../../source/lib/sysdep/os/unix/udbg.cpp:51
#2  0x08a54e78 in OglTex_validate (ot=0xb1c87158) at ../../../source/lib/res/graphics/ogl_tex.cpp:505
#3  0x08a57b9a in warn_if_invalid (hd=0xb1c87120) at ../../../source/lib/res/h_mgr.cpp:353
#4  0x08a58008 in call_init_and_reload (h=26935478, type=0x9130dc8 <V_OglTex>, hd=0xb1c87120, vfs=std::shared_ptr<struct IVFS> (use count 4, weak count 0) = {...}, pathname=...,
    init_args=0xbfffece8) at ../../../source/lib/res/h_mgr.cpp:440
#5  0x08a58261 in alloc_new_handle (type=0x9130dc8 <V_OglTex>, vfs=std::shared_ptr<struct IVFS> (use count 4, weak count 0) = {...}, pathname=..., key=1392861520, flags=17,
    init_args=0xbfffece8) at ../../../source/lib/res/h_mgr.cpp:481
#6  0x08a58419 in h_alloc (type=0x9130dc8 <V_OglTex>, vfs=std::shared_ptr<struct IVFS> (use count 4, weak count 0) = {...}, pathname=..., flags=17) at ../../../source/lib/res/h_mgr.cpp:518
#7  0x08a5519e in ogl_tex_load (vfs=std::shared_ptr<struct IVFS> (use count 4, weak count 0) = {...}, pathname=..., flags=17) at ../../../source/lib/res/graphics/ogl_tex.cpp:544
#8  0x08787e06 in CTextureManagerImpl::LoadTexture (this=0x95dcd90, texture=std::shared_ptr<class CTexture> (use count 4, weak count 9) = {...}, path=...)
    at ../../../source/graphics/TextureManager.cpp:179

The problem with the brit_hero_caratacos.png file. It has a non-standard geometry.

$ file binaries/data/mods/public/art/textures/ui/session/portraits/units/* | grep -v 256 | grep -v 128
binaries/data/mods/public/art/textures/ui/session/portraits/units/brit_hero_caratacos.png:                    PNG image, 220 x 220, 8-bit/color RGBA, non-interlaced

Converting it to 128x128 resolution solves the problem (convert -resize 128x128)

#6184 fixed Stone sound too quiet Stan Langbart
Description

The sound omitted by selecting the stone mine is much quieter than selecting a metal resource. The file is called: sel_stone_02.ogg

All interface files when selecting a resource can be found here: code.wildfiregames.com/source

Related IRC 0ad-dev conversation (28/May/21):

[09:12:19] Langbart marder is the sound for the selection of the stone for you very quiet compared to the selection of the metal resource?
[09:14:56] marder yes. Could be louder.
[09:16:17] marder And maybe a bit "darker". I image pickaxe would sound a liitle bit deeper than that.

#6197 fixed Some option types don't have a context Stan Vladislav Belov
Description

Currently dropdown values on the options page are translated incorrectly, because they have no context.

#6255 fixed Last preparation for the release Stan Stan
Description

Fix translations

C:\Dev\0ad\binaries\data\mods\public\l10n\public-gui-lobby.pot - te: Found unknown sprintf `%(times)s`, `%(messages)s` in the translation which do not match any of the URLs in the template: `%(message)s`, `%(time)s`
C:\Dev\0ad\binaries\data\mods\public\l10n\public-gui-ingame.pot - Different sprintf in singular and plural source strings for '<Message ('Could only be constructed once.', 'Could only be constructed %(limit)s times.') (flags: ['python-format'])>' in 'C:\Dev\0ad\binaries\data\mods\public\l10n\public-gui-ingame.pot'
C:\Dev\0ad\binaries\data\mods\public\l10n\public-gui-ingame.pot - id: Found unknown sprintf `%(limit)s` in the translation which do not match any of the URLs in the template: 
C:\Dev\0ad\binaries\data\mods\public\l10n\public-gui-ingame.pot - ko: Found unknown sprintf `%(limit)s` in the translation which do not match any of the URLs in the template: 
C:\Dev\0ad\binaries\data\mods\public\l10n\public-gui-ingame.pot - zh: Found unknown sprintf `%(limit)s` in the translation which do not match any of the URLs in the template: 
C:\Dev\0ad\binaries\data\mods\public\l10n\public-gui-ingame.pot - zh_Hant_TW: Found unknown sprintf `%(limit)s` in the translation which do not match any of the URLs in the template: 
C:\Dev\0ad\binaries\data\mods\public\l10n\public-gui-ingame.pot - Different sprintf in singular and plural source strings for '<Message ('Could only be trained once.', 'Could only be trained %(limit)s times.') (flags: ['python-format'])>' in 'C:\Dev\0ad\binaries\data\mods\public\l10n\public-gui-ingame.pot'
C:\Dev\0ad\binaries\data\mods\public\l10n\public-gui-ingame.pot - id: Found unknown sprintf `%(limit)s` in the translation which do not match any of the URLs in the template: 
C:\Dev\0ad\binaries\data\mods\public\l10n\public-gui-ingame.pot - ko: Found unknown sprintf `%(limit)s` in the translation which do not match any of the URLs in the template: 
C:\Dev\0ad\binaries\data\mods\public\l10n\public-gui-ingame.pot - zh: Found unknown sprintf `%(limit)s` in the translation which do not match any of the URLs in the template: 
C:\Dev\0ad\binaries\data\mods\public\l10n\public-gui-ingame.pot - zh_Hant_TW: Found unknown sprintf `%(limit)s` in the translation which do not match any of the URLs in the template: 
C:\Dev\0ad\binaries\data\mods\public\l10n\public-gui-ingame.pot - Different sprintf in singular and plural source strings for '<Message ('Could only be created once.', 'Could only be created %(limit)s times.') (flags: ['python-format'])>' in 'C:\Dev\0ad\binaries\data\mods\public\l10n\public-gui-ingame.pot'
C:\Dev\0ad\binaries\data\mods\public\l10n\public-gui-ingame.pot - id: Found unknown sprintf `%(limit)s` in the translation which do not match any of the URLs in the template: 
C:\Dev\0ad\binaries\data\mods\public\l10n\public-gui-ingame.pot - ko: Found unknown sprintf `%(limit)s` in the translation which do not match any of the URLs in the template: 
C:\Dev\0ad\binaries\data\mods\public\l10n\public-gui-ingame.pot - zh: Found unknown sprintf `%(limit)s` in the translation which do not match any of the URLs in the template: 
C:\Dev\0ad\binaries\data\mods\public\l10n\public-gui-ingame.pot - zh_Hant_TW: Found unknown sprintf `%(limit)s` in the translation which do not match any of the URLs in the template: 
C:\Dev\0ad\binaries\data\mods\public\l10n\public-simulation-other.pot - Different sprintf in singular and plural source strings for '<Message ('%(lastPlayer)s has won (last player alive).', '%(players)s and %(lastPlayer)s have won (last players alive).') (flags: ['python-format', 'javascript-format'])>' in 'C:\Dev\0ad\binaries\data\mods\public\l10n\public-simulation-other.pot'
C:\Dev\0ad\binaries\data\mods\public\l10n\public-simulation-other.pot - id: Found unknown sprintf `%(players)s` in the translation which do not match any of the URLs in the template: `%(lastPlayer)s`
C:\Dev\0ad\binaries\data\mods\public\l10n\public-simulation-other.pot - ko: Found unknown sprintf `%(players)s` in the translation which do not match any of the URLs in the template: `%(lastPlayer)s`
C:\Dev\0ad\binaries\data\mods\public\l10n\public-simulation-other.pot - ms: Found unknown sprintf `%(players)s` in the translation which do not match any of the URLs in the template: `%(lastPlayer)s`
C:\Dev\0ad\binaries\data\mods\public\l10n\public-simulation-other.pot - zh: Found unknown sprintf `%(players)s` in the translation which do not match any of the URLs in the template: `%(lastPlayer)s`
C:\Dev\0ad\binaries\data\mods\public\l10n\public-simulation-other.pot - zh_Hant_TW: Found unknown sprintf `%(players)s` in the translation which do not match any of the URLs in the template: `%(lastPlayer)s`
C:\Dev\0ad\binaries\data\mods\public\l10n\public-maps.pot - Different sprintf in singular and plural source strings for '<Message ('%(lastPlayer)s has won (treasure collected).', '%(players)s and %(lastPlayer)s have won (treasure collected).') (flags: ['javascript-format', 'python-format'])>' in 'C:\Dev\0ad\binaries\data\mods\public\l10n\public-maps.pot'
C:\Dev\0ad\binaries\data\mods\public\l10n\public-maps.pot - id: Found unknown sprintf `%(players)s` in the translation which do not match any of the URLs in the template: `%(lastPlayer)s`
C:\Dev\0ad\binaries\data\mods\public\l10n\public-maps.pot - ko: Found unknown sprintf `%(players)s` in the translation which do not match any of the URLs in the template: `%(lastPlayer)s`
C:\Dev\0ad\binaries\data\mods\public\l10n\public-maps.pot - ms: Found unknown sprintf `%(players)s` in the translation which do not match any of the URLs in the template: `%(lastPlayer)s`
C:\Dev\0ad\binaries\data\mods\public\l10n\public-maps.pot - zh: Found unknown sprintf `%(players)s` in the translation which do not match any of the URLs in the template: `%(lastPlayer)s`
C:\Dev\0ad\binaries\data\mods\public\l10n\public-maps.pot - zh_Hant_TW: Found unknown sprintf `%(players)s` in the translation which do not match any of the URLs in the template: `%(lastPlayer)s`
C:\Dev\0ad\binaries\data\mods\public\l10n\public-maps.pot - Different sprintf in singular and plural source strings for '<Message ('%(lastPlayer)s has been defeated (treasure collected).', '%(players)s and %(lastPlayer)s have been defeated (treasure collected).') (flags: ['javascript-format', 'python-format'])>' in 'C:\Dev\0ad\binaries\data\mods\public\l10n\public-maps.pot'
C:\Dev\0ad\binaries\data\mods\public\l10n\public-maps.pot - id: Found unknown sprintf `%(players)s` in the translation which do not match any of the URLs in the template: `%(lastPlayer)s`
C:\Dev\0ad\binaries\data\mods\public\l10n\public-maps.pot - ko: Found unknown sprintf `%(players)s` in the translation which do not match any of the URLs in the template: `%(lastPlayer)s`
C:\Dev\0ad\binaries\data\mods\public\l10n\public-maps.pot - ms: Found unknown sprintf `%(players)s` in the translation which do not match any of the URLs in the template: `%(lastPlayer)s`
C:\Dev\0ad\binaries\data\mods\public\l10n\public-maps.pot - zh: Found unknown sprintf `%(players)s` in the translation which do not match any of the URLs in the template: `%(lastPlayer)s`
C:\Dev\0ad\binaries\data\mods\public\l10n\public-maps.pot - zh_Hant_TW: Found unknown sprintf `%(players)s` in the translation which do not match any of the URLs in the template: `%(lastPlayer)s`
C:\Dev\0ad\binaries\data\mods\public\l10n\public-maps.pot - Different sprintf in singular and plural source strings for '<Message ('%(lastPlayer)s has won (Capture the Relic).', '%(players)s and %(lastPlayer)s have won (Capture the Relic).') (flags: ['javascript-format', 'python-format'])>' in 'C:\Dev\0ad\binaries\data\mods\public\l10n\public-maps.pot'
C:\Dev\0ad\binaries\data\mods\public\l10n\public-maps.pot - eu: Found unknown sprintf `%(players)s` in the translation which do not match any of the URLs in the template: `%(lastPlayer)s`
C:\Dev\0ad\binaries\data\mods\public\l10n\public-maps.pot - id: Found unknown sprintf `%(players)s` in the translation which do not match any of the URLs in the template: `%(lastPlayer)s`
C:\Dev\0ad\binaries\data\mods\public\l10n\public-maps.pot - ko: Found unknown sprintf `%(players)s` in the translation which do not match any of the URLs in the template: `%(lastPlayer)s`
C:\Dev\0ad\binaries\data\mods\public\l10n\public-maps.pot - zh: Found unknown sprintf `%(players)s` in the translation which do not match any of the URLs in the template: `%(lastPlayer)s`
C:\Dev\0ad\binaries\data\mods\public\l10n\public-maps.pot - zh_Hant_TW: Found unknown sprintf `%(players)s` in the translation which do not match any of the URLs in the template: `%(lastPlayer)s`
C:\Dev\0ad\binaries\data\mods\public\l10n\public-maps.pot - Different sprintf in singular and plural source strings for '<Message ('%(lastPlayer)s has been defeated (Capture the Relic).', '%(players)s and %(lastPlayer)s have been defeated (Capture the Relic).') (flags: ['javascript-format', 'python-format'])>' in 'C:\Dev\0ad\binaries\data\mods\public\l10n\public-maps.pot'
C:\Dev\0ad\binaries\data\mods\public\l10n\public-maps.pot - eu: Found unknown sprintf `%(players)s` in the translation which do not match any of the URLs in the template: `%(lastPlayer)s`
C:\Dev\0ad\binaries\data\mods\public\l10n\public-maps.pot - id: Found unknown sprintf `%(players)s` in the translation which do not match any of the URLs in the template: `%(lastPlayer)s`
C:\Dev\0ad\binaries\data\mods\public\l10n\public-maps.pot - ko: Found unknown sprintf `%(players)s` in the translation which do not match any of the URLs in the template: `%(lastPlayer)s`
C:\Dev\0ad\binaries\data\mods\public\l10n\public-maps.pot - zh: Found unknown sprintf `%(players)s` in the translation which do not match any of the URLs in the template: `%(lastPlayer)s`
C:\Dev\0ad\binaries\data\mods\public\l10n\public-maps.pot - zh_Hant_TW: Found unknown sprintf `%(players)s` in the translation which do not match any of the URLs in the template: `%(lastPlayer)s`
C:\Dev\0ad\binaries\data\mods\public\l10n\public-maps.pot - Different sprintf in singular and plural source strings for '<Message ('%(lastPlayer)s has won (wonder victory).', '%(players)s and %(lastPlayer)s have won (wonder victory).') (flags: ['javascript-format', 'python-format'])>' in 'C:\Dev\0ad\binaries\data\mods\public\l10n\public-maps.pot'
C:\Dev\0ad\binaries\data\mods\public\l10n\public-maps.pot - id: Found unknown sprintf `%(players)s` in the translation which do not match any of the URLs in the template: `%(lastPlayer)s`
C:\Dev\0ad\binaries\data\mods\public\l10n\public-maps.pot - ko: Found unknown sprintf `%(players)s` in the translation which do not match any of the URLs in the template: `%(lastPlayer)s`
C:\Dev\0ad\binaries\data\mods\public\l10n\public-maps.pot - zh: Found unknown sprintf `%(players)s` in the translation which do not match any of the URLs in the template: `%(lastPlayer)s`
C:\Dev\0ad\binaries\data\mods\public\l10n\public-maps.pot - zh_Hant_TW: Found unknown sprintf `%(players)s` in the translation which do not match any of the URLs in the template: `%(lastPlayer)s`
C:\Dev\0ad\binaries\data\mods\public\l10n\public-maps.pot - Different sprintf in singular and plural source strings for '<Message ('%(lastPlayer)s has been defeated (wonder victory).', '%(players)s and %(lastPlayer)s have been defeated (wonder victory).') (flags: ['javascript-format', 'python-format'])>' in 'C:\Dev\0ad\binaries\data\mods\public\l10n\public-maps.pot'
C:\Dev\0ad\binaries\data\mods\public\l10n\public-maps.pot - eu: Found unknown sprintf `%(players)s` in the translation which do not match any of the URLs in the template: `%(lastPlayer)s`
C:\Dev\0ad\binaries\data\mods\public\l10n\public-maps.pot - id: Found unknown sprintf `%(players)s` in the translation which do not match any of the URLs in the template: `%(lastPlayer)s`
C:\Dev\0ad\binaries\data\mods\public\l10n\public-maps.pot - ko: Found unknown sprintf `%(players)s` in the translation which do not match any of the URLs in the template: `%(lastPlayer)s`
C:\Dev\0ad\binaries\data\mods\public\l10n\public-maps.pot - zh: Found unknown sprintf `%(players)s` in the translation which do not match any of the URLs in the template: `%(lastPlayer)s`
C:\Dev\0ad\binaries\data\mods\public\l10n\public-maps.pot - zh_Hant_TW: Found unknown sprintf `%(players)s` in the translation which do not match any of the URLs in the template: `%(lastPlayer)s`
C:\Dev\0ad\binaries\data\mods\public\l10n\public-gui-other.pot - Different sprintf in singular and plural source strings for '<Message ('For the first minute, other players will stay neutral.', 'For the first %(min)s minutes, other players will stay neutral.') (flags: ['python-format'])>' in 'C:\Dev\0ad\binaries\data\mods\public\l10n\public-gui-other.pot'
C:\Dev\0ad\binaries\data\mods\public\l10n\public-gui-other.pot - gd: Found unknown sprintf `%(min)s` in the translation which do not match any of the URLs in the template: 
C:\Dev\0ad\binaries\data\mods\public\l10n\public-gui-other.pot - hu: Found unknown sprintf `%(min)s` in the translation which do not match any of the URLs in the template: 
C:\Dev\0ad\binaries\data\mods\public\l10n\public-gui-other.pot - id: Found unknown sprintf `%(min)s` in the translation which do not match any of the URLs in the template: 
C:\Dev\0ad\binaries\data\mods\public\l10n\public-gui-other.pot - ja: Found unknown sprintf `%(min)s` in the translation which do not match any of the URLs in the template: 
C:\Dev\0ad\binaries\data\mods\public\l10n\public-gui-other.pot - ko: Found unknown sprintf `%(min)s` in the translation which do not match any of the URLs in the template: 
C:\Dev\0ad\binaries\data\mods\public\l10n\public-gui-other.pot - ms: Found unknown sprintf `%(min)s` in the translation which do not match any of the URLs in the template: 
C:\Dev\0ad\binaries\data\mods\public\l10n\public-gui-other.pot - zh: Found unknown sprintf `%(min)s` in the translation which do not match any of the URLs in the template: 
C:\Dev\0ad\binaries\data\mods\public\l10n\public-gui-other.pot - zh_Hant_TW: Found unknown sprintf `%(min)s` in the translation which do not match any of the URLs in the template: 

  • Update 0ad.nsi and build_archives.sh (could fix #6023 while at it)
  • Update the translators credits after the last pull
#6324 fixed Corrupt dds file metal_desert_small_a.dds Stan Ralph Sennhauser
Description

The following dds file is corrupt

$ file binaries/data/mods/public/art/textures/skins/gaia/metal_desert_small_a.dds
binaries/data/mods/public/art/textures/skins/gaia/metal_desert_small_a.dds: DOS/MBR boot sector; partition 1 : ID=0xff, active 0x8a, start-CHS (0x3ff,254,63), end-CHS (0x3ff,255,63), startsector 3587178495, 3468469193 sectors; partition 4 : ID=0xff, active 0xe2, start-CHS (0x3ff,14,63), end-CHS (0x3ff,255,63), startsector 4294180863, 4278223684 sectors

and ought to be replaced.

Note: gimp and nvtt can process it, not so compressonator

#6326 fixed Textures having png and dds in tree Stan Ralph Sennhauser
Description

Textures under a given name should only have either a png or dds in tree. This currently works as the extension is treated as part of the name. However the engine might gain the ability to fall back to png if dds is not available or similar. Also artist might change one and wonder why there is no effect at all.

binaries/data/mods/public/art/textures/skins/structural/hele_struct_b.dds
binaries/data/mods/public/art/textures/skins/props/cape_hd_black.dds
binaries/data/mods/public/art/textures/skins/props/celt_prop_1.dds
binaries/data/mods/public/art/textures/skins/structural/rome_ram.dds
binaries/data/mods/public/art/textures/terrain/types/desert_forestfloor_palms.dds
binaries/data/mods/public/art/textures/skins/structural/kart_trireme.dds
binaries/data/mods/public/art/textures/skins/structural/iber_struct.dds
binaries/data/mods/public/art/textures/skins/structural/hele_trireme.dds
binaries/data/mods/public/art/textures/skins/props/iber_sail_b.dds
binaries/data/mods/public/art/textures/skins/props/kart_sail_1.dds
binaries/data/mods/public/art/textures/skins/props/kart_sail_2.dds
binaries/data/mods/public/art/textures/skins/props/kart_sail_3.dds
binaries/data/mods/public/art/textures/terrain/types/road_roman.dds
binaries/data/mods/public/art/textures/skins/props/head/celt_caratacos.dds
binaries/data/mods/public/art/textures/skins/skeletal/rome_ijv_e.dds
binaries/data/mods/public/art/textures/skins/skeletal/pers_isp_e_1.dds
binaries/data/mods/public/art/textures/skins/skeletal/mace_bronzeshield_pikeman_a.dds
binaries/data/mods/public/art/textures/skins/gaia/farming_barley_harvest_a.dds
binaries/data/mods/public/art/textures/skins/gaia/farming_wheat_harvest_a.dds
binaries/data/mods/public/art/textures/skins/gaia/farming_wheat_harvest_b.dds
binaries/data/mods/public/art/textures/skins/gaia/tree_cypress_a.dds
#6403 fixed Write a GLSL equivalent for overlay_solid Stan Stan
Description

Currently overlay_solid is only available as an ARB shader. It would be nice to have it as a GLSL

Related files:

binaries/data/mods/public/shaders/effects/overlay_solid.xml
binaries/data/mods/public/shaders/arb/overlay_solid.xml
binaries/data/mods/public/shaders/arb/overlay_solid.vp
binaries/data/mods/public/shaders/arb/overlay_solid.fp

Three files need to be created

binaries/data/mods/public/shaders/glsl/overlay_solid.xml
binaries/data/mods/public/shaders/glsl/overlay_solid.vs
binaries/data/mods/public/shaders/glsl/overlay_solid.fs

The file binaries/data/mods/public/shaders/effects/overlay_solid.xml should be appended with

    <technique>
        <require shaders="glsl"/>
        <pass shader="glsl/overlay_solid"/>
    </technique>

Search for overlayline in binaries/data/mods/public/shaders/ for an example

#6496 fixed zlib library - LIB_URL has changed Stan Langbart
Description

ref #4362

issue

IRC 0ad-dev (13/Apr/22)

15:16 < kumikumi> I'm at the head of SVN and I'm getting a 404 error (from http://zlib.net/zlib-1.2.11.tar.gz ) when running the "build-osx-libs.sh" script
15:17 < kumikumi> bumping ZLIB_VERSION to zlib-1.2.12 seems to fix it
15:18 < Freagarach> Yeah, I see they updated it and the URL is dead now.
15:19 < Freagarach> It seems better to link to /fossils/<version>

tested

The update to the latest version (zlib-1.2.12.tar.gz) worked under macOS 10.15, the game compiled successfully and opened normally.

#6503 fixed Han Chinese siege towers issues Stan Langbart
Description

Two issues

  • Attack

IRC 0ad-dev 29/Apr/22

18:26 < phosit> It looks weird if the siege towers of Han Chinese attack: The lances stab even if the tower is far away from the enemy
18:28 < phosit> looks like attack_ranged animation is just a placeholder?

See GIF below, the tower is manned by women and does not shoot any arrows, the moving spears give the false impression that it is some kind of deadly weapon even though it is completely harmless.

  • Garrison flag

It is a bit short. Flag hides when the tower is idle, see GIF below.

#6542 fixed Update checkrefs python script Stan Langbart
Description

to reproduce

  • navigate to source/tools/entity and run checkrefs.py

bisect

[26879]

log output

❯ python3 checkrefs.py
INFO - Checking public's integrity.
INFO - The following mods will be loaded: public|mod.
INFO - Loading maps PMP...
INFO - Loading entities...
INFO - Loading actors...
INFO - Loading variants...
INFO - Loading art files...
INFO - Loading materials...
INFO - Loading particles...
INFO - Loading sound groups...
INFO - Loading audio files...
INFO - Loading GUI XML...
INFO - Loading GUI data...
INFO - Loading civs...
INFO - Loading random maps...
INFO - Loading techs...
INFO - Loading terrains...
INFO - Loading auras...
INFO - Loading tips...
INFO - Looking for missing files...
WARNING - Missing file 'autostart/autostart.js' referenced by: public/gui/autostart/autostart.xml
WARNING - Missing file 'gamesettings/GameSetting.js' referenced by: public/gui/autostart/autostart.xml, public/gui/campaigns/default_menu/CampaignMenu.xml, public/gui/gamesetup/gamesetup.xml
WARNING - Missing file 'gamesettings/GameSettings.js' referenced by: public/gui/autostart/autostart.xml, public/gui/campaigns/default_menu/CampaignMenu.xml, public/gui/gamesetup/gamesetup.xml
WARNING - Missing file 'gamesettings/attributes/Biome.js' referenced by: public/gui/autostart/autostart.xml, public/gui/campaigns/default_menu/CampaignMenu.xml, public/gui/gamesetup/gamesetup.xml
WARNING - Missing file 'gamesettings/attributes/CampaignData.js' referenced by: public/gui/autostart/autostart.xml, public/gui/campaigns/default_menu/CampaignMenu.xml, public/gui/gamesetup/gamesetup.xml
WARNING - Missing file 'gamesettings/attributes/Ceasefire.js' referenced by: public/gui/autostart/autostart.xml, public/gui/campaigns/default_menu/CampaignMenu.xml, public/gui/gamesetup/gamesetup.xml
WARNING - Missing file 'gamesettings/attributes/Cheats.js' referenced by: public/gui/autostart/autostart.xml, public/gui/campaigns/default_menu/CampaignMenu.xml, public/gui/gamesetup/gamesetup.xml
WARNING - Missing file 'gamesettings/attributes/CircularMap.js' referenced by: public/gui/autostart/autostart.xml, public/gui/campaigns/default_menu/CampaignMenu.xml, public/gui/gamesetup/gamesetup.xml
WARNING - Missing file 'gamesettings/attributes/Daytime.js' referenced by: public/gui/autostart/autostart.xml, public/gui/campaigns/default_menu/CampaignMenu.xml, public/gui/gamesetup/gamesetup.xml
WARNING - Missing file 'gamesettings/attributes/DisableSpies.js' referenced by: public/gui/autostart/autostart.xml, public/gui/campaigns/default_menu/CampaignMenu.xml, public/gui/gamesetup/gamesetup.xml
WARNING - Missing file 'gamesettings/attributes/DisableTreasures.js' referenced by: public/gui/autostart/autostart.xml, public/gui/campaigns/default_menu/CampaignMenu.xml, public/gui/gamesetup/gamesetup.xml
WARNING - Missing file 'gamesettings/attributes/GameSpeed.js' referenced by: public/gui/autostart/autostart.xml, public/gui/campaigns/default_menu/CampaignMenu.xml, public/gui/gamesetup/gamesetup.xml
WARNING - Missing file 'gamesettings/attributes/Landscape.js' referenced by: public/gui/autostart/autostart.xml, public/gui/campaigns/default_menu/CampaignMenu.xml, public/gui/gamesetup/gamesetup.xml
WARNING - Missing file 'gamesettings/attributes/LastManStanding.js' referenced by: public/gui/autostart/autostart.xml, public/gui/campaigns/default_menu/CampaignMenu.xml, public/gui/gamesetup/gamesetup.xml
WARNING - Missing file 'gamesettings/attributes/LockedTeams.js' referenced by: public/gui/autostart/autostart.xml, public/gui/campaigns/default_menu/CampaignMenu.xml, public/gui/gamesetup/gamesetup.xml
WARNING - Missing file 'gamesettings/attributes/Map.js' referenced by: public/gui/autostart/autostart.xml, public/gui/campaigns/default_menu/CampaignMenu.xml, public/gui/gamesetup/gamesetup.xml
WARNING - Missing file 'gamesettings/attributes/MapExploration.js' referenced by: public/gui/autostart/autostart.xml, public/gui/campaigns/default_menu/CampaignMenu.xml, public/gui/gamesetup/gamesetup.xml
WARNING - Missing file 'gamesettings/attributes/MapName.js' referenced by: public/gui/autostart/autostart.xml, public/gui/campaigns/default_menu/CampaignMenu.xml, public/gui/gamesetup/gamesetup.xml
WARNING - Missing file 'gamesettings/attributes/MapPreview.js' referenced by: public/gui/autostart/autostart.xml, public/gui/campaigns/default_menu/CampaignMenu.xml, public/gui/gamesetup/gamesetup.xml
WARNING - Missing file 'gamesettings/attributes/MapSize.js' referenced by: public/gui/autostart/autostart.xml, public/gui/campaigns/default_menu/CampaignMenu.xml, public/gui/gamesetup/gamesetup.xml
WARNING - Missing file 'gamesettings/attributes/MatchID.js' referenced by: public/gui/autostart/autostart.xml, public/gui/campaigns/default_menu/CampaignMenu.xml, public/gui/gamesetup/gamesetup.xml
WARNING - Missing file 'gamesettings/attributes/Nomad.js' referenced by: public/gui/autostart/autostart.xml, public/gui/campaigns/default_menu/CampaignMenu.xml, public/gui/gamesetup/gamesetup.xml
WARNING - Missing file 'gamesettings/attributes/PlayerAI.js' referenced by: public/gui/autostart/autostart.xml, public/gui/campaigns/default_menu/CampaignMenu.xml, public/gui/gamesetup/gamesetup.xml
WARNING - Missing file 'gamesettings/attributes/PlayerCiv.js' referenced by: public/gui/autostart/autostart.xml, public/gui/campaigns/default_menu/CampaignMenu.xml, public/gui/gamesetup/gamesetup.xml
WARNING - Missing file 'gamesettings/attributes/PlayerColor.js' referenced by: public/gui/autostart/autostart.xml, public/gui/campaigns/default_menu/CampaignMenu.xml, public/gui/gamesetup/gamesetup.xml
WARNING - Missing file 'gamesettings/attributes/PlayerCount.js' referenced by: public/gui/autostart/autostart.xml, public/gui/campaigns/default_menu/CampaignMenu.xml, public/gui/gamesetup/gamesetup.xml
WARNING - Missing file 'gamesettings/attributes/PlayerName.js' referenced by: public/gui/autostart/autostart.xml, public/gui/campaigns/default_menu/CampaignMenu.xml, public/gui/gamesetup/gamesetup.xml
WARNING - Missing file 'gamesettings/attributes/PlayerTeam.js' referenced by: public/gui/autostart/autostart.xml, public/gui/campaigns/default_menu/CampaignMenu.xml, public/gui/gamesetup/gamesetup.xml
WARNING - Missing file 'gamesettings/attributes/Population.js' referenced by: public/gui/autostart/autostart.xml, public/gui/campaigns/default_menu/CampaignMenu.xml, public/gui/gamesetup/gamesetup.xml
WARNING - Missing file 'gamesettings/attributes/Rating.js' referenced by: public/gui/autostart/autostart.xml, public/gui/campaigns/default_menu/CampaignMenu.xml, public/gui/gamesetup/gamesetup.xml
WARNING - Missing file 'gamesettings/attributes/RegicideGarrison.js' referenced by: public/gui/autostart/autostart.xml, public/gui/campaigns/default_menu/CampaignMenu.xml, public/gui/gamesetup/gamesetup.xml
WARNING - Missing file 'gamesettings/attributes/Relic.js' referenced by: public/gui/autostart/autostart.xml, public/gui/campaigns/default_menu/CampaignMenu.xml, public/gui/gamesetup/gamesetup.xml
WARNING - Missing file 'gamesettings/attributes/SeaLevelRise.js' referenced by: public/gui/autostart/autostart.xml, public/gui/campaigns/default_menu/CampaignMenu.xml, public/gui/gamesetup/gamesetup.xml
WARNING - Missing file 'gamesettings/attributes/Seeds.js' referenced by: public/gui/autostart/autostart.xml, public/gui/campaigns/default_menu/CampaignMenu.xml, public/gui/gamesetup/gamesetup.xml
WARNING - Missing file 'gamesettings/attributes/StartingCamera.js' referenced by: public/gui/autostart/autostart.xml, public/gui/campaigns/default_menu/CampaignMenu.xml, public/gui/gamesetup/gamesetup.xml
WARNING - Missing file 'gamesettings/attributes/StartingResources.js' referenced by: public/gui/autostart/autostart.xml, public/gui/campaigns/default_menu/CampaignMenu.xml, public/gui/gamesetup/gamesetup.xml
WARNING - Missing file 'gamesettings/attributes/TeamPlacement.js' referenced by: public/gui/autostart/autostart.xml, public/gui/campaigns/default_menu/CampaignMenu.xml, public/gui/gamesetup/gamesetup.xml
WARNING - Missing file 'gamesettings/attributes/TriggerDifficulty.js' referenced by: public/gui/autostart/autostart.xml, public/gui/campaigns/default_menu/CampaignMenu.xml, public/gui/gamesetup/gamesetup.xml
WARNING - Missing file 'gamesettings/attributes/TriggerScripts.js' referenced by: public/gui/autostart/autostart.xml, public/gui/campaigns/default_menu/CampaignMenu.xml, public/gui/gamesetup/gamesetup.xml
WARNING - Missing file 'gamesettings/attributes/VictoryConditions.js' referenced by: public/gui/autostart/autostart.xml, public/gui/campaigns/default_menu/CampaignMenu.xml, public/gui/gamesetup/gamesetup.xml
WARNING - Missing file 'gamesettings/attributes/Wonder.js' referenced by: public/gui/autostart/autostart.xml, public/gui/campaigns/default_menu/CampaignMenu.xml, public/gui/gamesetup/gamesetup.xml

Ticket #6544 was closed, it was mentioned to also list unused Auras & Technologies. Replying to stanislas69:

[...] I suppose they should be reported by checkrefs -u

#6549 fixed Unit icon Han siege tower Stan Langbart
Description

Changeset [26910] has changed the appearance of the Han siege tower so that the old unit icon no longer matches the appearance of this unit.

Similar to #6503, but not reopening that.

#6556 fixed Blemmye Desert Raider has a very bright rein when zoomed out Stan Langbart
Description

to reproduce

  • Default settings applied
  • Start a Mainland map with the Kushites
  • Produce some Blemmye Desert Raider (produced at the Blemmye Camp)
  • Look at the reins, they are very bright, they catch the eye very easily.
    • You have to change the camera angle a little and zoom out, up close the reins look more brown.
  • See image below for more clarity

reproducible

It looks less bright in A23, but starting with A24 it is bright.

note

Ticket can be closed if this is intended to look like that.

#6578 fixed Warnings for too many minimap icons Stan Langbart
Description

to reproduce

  • start the egypt_3pv3p map
  • Warnings show up
    WARNING: Too many minimap icons to draw.
    
  • See image below for more clarity

bisect

[26949] The patch was tested for patch ID 20476 (15/Jun/22-8:35PM) and did not display any warnings. The warnings came with patch ID 20480 (16/Jun/22-5:27PM).

#6579 fixed Wrong animation selected for unit activity Stan Langbart
Description

The recent animation cleanup in the actor files causes a lot of issues. Very often a wrong animation is being displayed.

to reproduce for an Athens spearman

  • Start a map with Athens, select the spearmen and have them start collecting wood.
  • Pay attention when they move between drop points.
  • See GIF/Image below for more clarity. On the left side is [26964], on the right side [26963].

bisect

The problem with the Athenian spearman described above occurred with [26964].
More civs and units are affected, e.g. the Roman swordsman.

possible solution

Adding frequency="1"

  • binaries/data/mods/public/art/actors/units/athenians/infantry_spearman_b.xml

    a b  
    6161    <variant file="biped/approach_praise.xml"/>
    6262  </group>
    6363  <group>
    64     <variant name="Idle"/>
     64    <variant frequency="1" name="Idle"/>
    6565    <variant file="biped/formations/phalanx_front.xml"/>
    6666    <variant file="biped/formations/phalanx_mid.xml"/>
    6767    <variant file="biped/formations/phalanx_back.xml"/>

related ticket

#6566

#6683 fixed Han art oddity upon death Stan Langbart
Description

to reproduce

  • when a Champion Infantry Crossbowman dies, the remaining weapon raises up like a cross
  • it occurs only with the champion unit, not with the normal crossbowman

  • when a Han War Chariot dies, the remaining flag keeps standing up

expected behavior

  • the weapon/ flag falls flat or disappears upon death
    • The flag can be justified, but it takes forever to disappear, and it looks stupid to build a house on it.

#6729 fixed [macOS] Check for the existence of libMoltenVK Stan Langbart
Description

Check if the libMoltenVK.dylib still exists in the binaries/system/ folder.

reason

  • was looking for a bug
  • had some problems building
  • deleted the binaries/system/ folder and made a clean build
  • got some errors when trying to start Vulkan

errors

0 A.D. (0.0.27) Main log (warnings and errors only)
WARNING: Failed to load @executable_path/libMoltenVK.dylib.

ERROR: Unable to create device for Vulkan backend, switching to GL.

Engine exited successfully on 2023-02-08 at 07:37:26 with 1035 message(s), 1 error(s) and 1 warning(s).

workaround

# delete the file
rm -rf libraries/osx/molten-vk/.already-built
# run the script again
./libraries/osx/build-osx-libs.sh
# start vulkan
pyrogenesis -mod=public -mod=0ad-spirv -conf=rendererbackend:vulkan

possible solution

  • libraries/osx/build-osx-libs.sh

    a b LIB_URL="https://releases.wildfiregames.com/libs/"  
    10481048
    10491049mkdir -p "molten-vk"
    10501050pushd "molten-vk" > /dev/null
    1051 if [[ "$force_rebuild" = "true" ]] || [[ ! -e .already-built ]] || [[ "$(<.already-built)" != "$MOLTENVK_VERSION" ]]
     1051if [[ "$force_rebuild" = "true" ]] || [[ ! -e .already-built ]] || [[ "$(<.already-built)" != "$MOLTENVK_VERSION" ]] || [[ ! -e ../../../binaries/system/libMoltenVK.dylib ]]
    10521052then
    10531053  INSTALL_DIR="../../../../binaries/system/"
    10541054  rm -f .already-built
#6738 fixed Textures having png and dds in tree - part 2 Stan Ralph Sennhauser
Description

Sine #6326 a few new ones were added, still there should only be a png or dds per name.

./binaries/data/mods/public/art/textures/skins/gaia/bamboo.dds
./binaries/data/mods/public/art/textures/skins/props/head/pers_face_i.dds
./binaries/data/mods/public/art/textures/skins/props/head/pers_face_j.dds
./binaries/data/mods/public/art/textures/skins/props/head/pers_face_b.dds
./binaries/data/mods/public/art/textures/skins/props/head/pers_face_a.dds
#6792 fixed Update Entity component documentation file for A27 Stan Langbart
Description

Issues noticed when scrolling through the Entity component documentation:

  • Stackability in helpers/Attack.js breaks html with special DOUBLE QUOTATION MARK (“)
    • use normal escaped double quotes \"
  • SortingOrder in Formation breaks html with special DOUBLE QUOTATION MARK (“)
    • use normal escaped double quotes \"
  • TerritoryDecay looks messy in its RELAX NG grammar fragment . (its the only one)
  • EntityLimits could use more explanation on its children
  • fix 8 typos
    • 1x miliseconds should be milliseconds
    • 1x resouces should be resources
    • 3x occurances should be occurrences
    • 1x occurence should be occurrence
    • 1x decending should be descending
    • 1x colums should be columns
  • remove multiple double points at the end of sentences ..
    • added through convertrng.xsl .../>.</p>
  • ModifiersManager seems to be a system component it should not be in the list
    • it is missing some documentation to not be included in the entity-component list
  • add the missing and remove the redundant values in some schema lists (Ref: Phab:D386)
    • script below for future updates
[BuildRestrictions] missing Category: Academy,ArmyCamp,Colony,Dock,GreatTower,ImperialCourt,ImperialMinistry,Palace,RotaryMill,Structure,TempleOfVesta,Wall,Yakhchal

[BuildRestrictions] redundant Category: Apadana,Gladiator,Hall,Hero,Juggernaut,PyramidSmall,UniqueBuilding,WarDog

[Identity] missing Civ: han

[Identity] missing Classes: Bireme,Formation,Quinquereme,RotaryMill,Trireme

[Identity] missing VisibleClasses: Academy,GreatTower,Heavy,IceHouse,ImperialCourt,ImperialMinistry,LaoziGate,Light,Medium,Minister,Shrine,Tent,Trumpeter

[Identity] redundant VisibleClasses: Bireme,Quinquereme,RotaryMill,Trireme

[TrainingRestrictions] missing Category: Animal,Centurion,Gladiator,Minister

  • script to find values that are duplicated, missing or redundant in the schema for certain components.
  • place it in a GUI .js file, for example MainMenuPage.js
    // [component,value] = component and the value to search for within the component tag
    const data = [["BuildRestrictions", "Category"], ["Identity", "Civ"], ["Identity", "Classes"], ["Identity", "VisibleClasses"], ["TrainingRestrictions", "Category"]];
    
    for (const [component, value] of data)
    {
        const classSet = new Set();
    
        // Define regular expressions for extracting values from the templates and schema
        const extractTemplateRegex = new RegExp(`<${component}[^>]*>[\\s\\S]*?<${value}[^>]*>([^<]+)<\/${value}>[\\s\\S]*?<\/${component}>`);
        const extractSchemaRegex = new RegExp(`\\b${value}\\b.*?Choices include: ?([^.']+)`);
    
        // Use the regex to extract the list of possible values from the schema file
        const classSchemaArray = Engine.ReadFile(`simulation/components/${component}.js`)
            .match(extractSchemaRegex)[1]
            .split(/\s*,\s*|\s*\(\w+.*?\),?\s*/);
    
        for (const file of Engine.ListDirectoryFiles("simulation/templates", "*.xml", true))
        {
            let match = Engine.ReadFile(file).match(extractTemplateRegex)
            if (match)
                // Split the match into individual values and add them to the classSet
                match[1].split(/\s+/).filter(str => /^\w+$/.test(str)).forEach(x => classSet.add(x));
        }
    
        // Check for duplicates in the schema list and warn if found
        if (new Set(classSchemaArray).size !== classSchemaArray.length)
            warn(`[${component}] duplicates in ${value} schema list\n`);
    
        // Check for missing values in the schema list and warn if found
        const missing = Array.from(classSet).filter(ele => !classSchemaArray.includes(ele)).sort().toString();
        if (missing.length)
            warn(`[${component}] missing ${value}: ${missing}\n`);
    
        // Check for redundant values in the schema list and warn if found
        const redundant = classSchemaArray.filter(ele => !Array.from(classSet).includes(ele)).sort().toString();
        if (redundant.length)
            warn(`[${component}] redundant ${value}: ${redundant}\n`);
    }
    
#6847 fixed MacOS libzip compile error with premake / update-workspace.sh Stan John-Mason Shackelford
Description

Attempting to build from master on OS X, having addressed the issue described in track #6797, the following error occurs when running ./update-workspace as described in https://trac.wildfiregames.com/wiki/BuildInstructions#Buildthegame

$ ./clean-workspaces.sh 
Cleaning bundled third-party dependencies...
.....
Removing generated stub and test files...
Cleaning build output...

Done. Try running update-workspaces.sh again now.
$ export
export HOMEBREW_CELLAR="/usr/local/Cellar"
export HOMEBREW_PREFIX="/usr/local"
export HOMEBREW_REPOSITORY="/usr/local/Homebrew"
export INFOPATH="/usr/local/share/info:"
export LANG="en_US.UTF-8"
export MANPATH="/usr/local/share/man::"
export OLDPWD
export PATH="/usr/local/bin:/usr/local/sbin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/Users/jpshack/code/arcanist/bin/"
export PWD="/Users/jpshack/code/0ad-jpshack/build/workspaces"
export SHELL="/bin/zsh"
export SHLVL="2"
export SSH_AUTH_SOCK="/private/tmp/com.apple.launchd.p1bbgQiJIy/Listeners"
export TERM="xterm-256color"
export TERM_PROGRAM="Apple_Terminal"
export TERM_PROGRAM_VERSION="447"
export XPC_FLAGS="0x0"
export XPC_SERVICE_NAME="0"
export __CFBundleIdentifier="com.apple.Terminal"

$ ./update-workspaces.sh 
==== Building lua-lib (release) ====
==== Building zip-lib (release) ====
Creating obj/Release/lua-lib
lapi.c
Creating obj/Release/zip-lib
mkstemp.c
../../contrib/libzip/mkstemp.c:76:8: error: call to undeclared function 'getpid'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
        pid = getpid();
              ^
1 error generated.
make[1]: *** [obj/Release/zip-lib/mkstemp.o] Error 1
make: *** [zip-lib] Error 2
make: *** Waiting for unfinished jobs....
.....
Linking lua-lib
ERROR: Premake build failed
#6944 fixed Shell scripts not set executable Stan Ralph Sennhauser
Description
build/resources/0ad.sh
source/tools/autolog/SVNLog/sql/createdb.sh
source/tools/templatessorter/templatessorter.sh
source/tools/tracelogger/tracelogger_options.sh
#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.

#1498 fixed [PATCH] Fire particles for roman temple Noël Ströhmer Noël Ströhmer
Description

The firepits in front of the roman temple were used as an example how future fire effects could look.

New emitters, particle types and particle grapics were used.

Attached are the changed files in original directory hierarchy. NOTE: Full changes are only visible on the roman temple atm.

#4355 fixed Treasure not being picked up Teiresias elexis
Description

Sometimes unit's dont pickup treasure, which is annoying on survival of the fittest.

In the first replay attached, we see that Vercingetorix (player 4) isn't picking up the stone treasure (entity 1239), despite standing there for long enough at 8m 23s and shortly (turn 1038, 8m39s) resigning after that.

In the second replay, siole (player 4) isn't picking up the wood treasure (entity 2931) at 9:57.

#3578 fixed [PATCH] Seed random sounds Thomas Thomas
Description

Visual Actors now use the same seed for every sound.

Closes #1786.

Before using the random function it uses srand() with the actor id to seed the random function. I also made changes to rand.cpp. Apparently the first value returned by rand() is very dependent on the seed (see http://stackoverflow.com/questions/8599238/random-number-generation-in-c-first-number-not-very-random). Most actors were returning the same random value as they have similar seeds. Using modulo instead of dividing uses the least significant bits of the random value, yielding better results.

This is my first patch, so please tell me if I'm doing something wrong.

#1848 fixed [PATCH] Rally points cannot be set using the minimap Jethro Jonathan Waller
Description

If I select a building and right click the minimap the rally point does not get set. This is inconsistent with normal movement commands.

#6920 fixed GUI property 'textcolor_selected' isn't working Vantha obelix
Description

The optional GUI property 'textcolor_selected' doesn't work for lists and other list-based objects (namely olists and dropdowns). It is correctly created in source/gui/ObjectTypes/CList.cpp, but the feature is not implemented. (the same property seems already be working for input objects)

--> see the discussion by Vantha and Stan on the forums

#5791 fixed Remove deprecated OpenGL 1.1 Fixed Function Pipeline Renderer Vladislav Belov Stan
Description

While still functionnal the Fixed Function Pipeline code is old, OpenGL 1.1. is very old (1997!) too, it is slow, it’s not very well tested, as it’s not possible to enable it through the options (albeit the hardware detection can force it), and while it works, it will crash if any of the new features e.g. postprocessing are enabled. And the last one is the fact it was marked as deprecated almost 7 years ago: in r13156. The only argument “for” that I can find is that some users (62/10000+) use it.

#6113 fixed macOS BigSur - missing polygon on minimap Vladislav Belov Langbart
Description

A user named 'Hakkai05' reported via IRC 0ad chat (20/Mar/21), that he is unable to see the "red polygon" on the minimap in A24b. The image below shows an image of mine (Langbart) on macOS 10.15.7 and an image of 'Hakkai05' on macOS 11.12.3.

(I'm just creating the ticket so the bug will not be forgotten.)

#6335 fixed macOS BigSur - red line across the screen Vladislav Belov Langbart
Description

A macOS user called KC reported via IRC 0ad (25/Sep/21) to see a red line across the game view window in Alpha25.

KC also noted:

In the graphics settings, when I check the box "Prefer GLSL," the red line goes away!



  • Similar ticket: #6409 - Random diagonal red line on 0 AD Mac gameplay (30/Dec/21)
#6409 fixed Random diagonal red line on 0 AD Mac gameplay Vladislav Belov bear1000
Description

I just downloaded 0 AD on MacOS. When I started the game I noticed a flashing thin red line that appears randomly when playing the game in Tutorial and single player, I haven't tried multiplayer. It isn't a screen malfunction as it appears on no other programs. I love the game and although it doesn't prevent gameplay, it is very annoying. I have the newest version of the game downloaded. https://i.imgur.com/Tr0swpw.png

#6463 fixed [ATLAS] Strange patterns on the ground Vladislav Belov Langbart
Description

to reproduce

  • start Atlas
  • select Mainland and click Generate map
  • select the Object tab (the little blue man lying on the golden ball)
  • (switch one more time back to the Map tab to make sure)

bisect

[26613]

#6569 fixed Visibility issue with smoothlos in fast forward observer mode Vladislav Belov Langbart
Description

to reproduce

  • Default settings applied
  • Create a replay in which your unit establishes an outpost in the outskirts of your area.
  • View the replay, but at a minimum of 5x or even better 10x speed and set the view to that player.
    • Alternatively, you can start a game with delenda_est activated and set the game speed to 10x.
  • the visibility does not adjust (20x) or lags behind noticeable (5x), if you lower the speed below 2x it does work properly.
  • See GIF/image below for more clarity.

bisect

[26922]

workaround

Set smoothlos=false

reproducible

When watching in 20xfast-forward with smootlos=true in A25b, the visibility works correctly.

#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.

#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.

#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).

#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.

#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.

#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.

#1374 fixed [PATCH] JSON parsing error messages should be more helpful. Yves michael
Description

JSON parsing error messages should be more helpful. Would help use code monkeys debug our technologies. :)

#1639 invalid Ubuntu hangs when debugging with codeblocks Yves Yves
Description

I don't know if this bug is related to 0ad or if it's a Codeblocks- or Ubuntu bug.

Steps to reproduce:

  1. Open pyrogenesis.workspace in Codeblocks
  2. Build (debug or release)
  3. Press F8 to start debugging. Switch to another program before the 0ad window opens
  4. Switch back to 0ad and exit it

Now the system hangs somehow. The mouse pointer can still be moved but nothing can be clicked and the keyboard does not react (no numlock, no Alt+F1 etc...). Pressing Ctrl+Alt+Print Scrn+K to restart X and kill all programs in the current session works.

Running codeblocks with "codeblocks --debug-log &> cb.log" writes some debugging information too a file. There was always something like that when the crash happened (notice the fatal IO error):

[...]
Nothing to be done (all items are up-to-date).
-------------- Build: Debug in mocks_real (compiler: GNU GCC Compiler)---------------
Target is up to date.
codeblocks: Fatal IO error 11 (Die Ressource ist zur Zeit nicht verfügbar) on X server :4.
-------------- Build: Debug in network (compiler: GNU GCC Compiler)---------------
Target is up to date.
-------------- Build: Debug in simulation2 (compiler: GNU GCC Compiler)---------------
Target is up to date.
-------------- Build: Debug in scriptinterface (compiler: GNU GCC Compiler)---------------
[...]

Translated to english "Die Ressource ist zur Zeit nicht verfügbar" means "The resource is temporarily unavailable".

I'm using Ubuntu 12.04 and codeblocks svn version (rev 8164). Tests on different operating systems (and Linux distributions) and with different versions of Codeblocks appreciated!

#1700 fixed Persian architecture bug ? Yves mimo
Description

With the new technology Persian architecture, buildings are no more fully built.

For example, houses before the tech have health 1200; and after the tech, their max health is increased to 1500, but they are only built up to 1200. You have to reoder your builders to finish it to reach 1500 (houses built before the tech are them automatically upgraded to 1500).

I'm on build 12759 from 0ad.dev/ubuntu

#1884 fixed [PATCH] Aegis AI: Errormessage on large maps Yves Yves
Description

This error gets displayed when the Aegis tries starting its first attack (about 18 min) if the CC it aims for is too far away.

ERROR: JavaScript error: simulation/ai/qbot-wc/attack_plan.js line 360
TypeError: this.target is undefined
  ([object Object],[object Object],[object Array])@simulation/ai/qbot-wc/attack_plan.js:360
  ([object Object],[object Object],[object Array])@simulation/ai/qbot-wc/military.js:361
  ([object Object])@simulation/ai/qbot-wc/qbot.js:228
  ([object Object],[object Object])@simulation/ai/common-api-v3/base.js:128
  @:0

I've tested the patch on a small map and a large map just to be sure because it's close to release. Aegis did attack me and no errors were displayed.

#1886 fixed [PATCH] Upgrade SpiderMonkey to v24 Yves Yves
Description

Tickets related to the Spidermonkey upgrade:

#2126
#2137
#2140
#2172
#2212
#2213
#2241
#2267
#2322
#2348
#2372
#2416
#2434
#2442

Related bugs in Spidermonkey:


Meta-Bug for performance bugs affecting 0 A.D.: Bug 897962

Overview

We are currently using Spidermonkey 1.8.5. That's a very old version and we need to upgrade to a newer version for various reasons. Unfortunately that's not very easy because the API changes quite often.

Also check the forum thread for the current status.

Reasons for upgrading:

  • Switching earlier avoids writing too much code for the older API that has to be changed later
  • Only when using a supported version it's possible to fix Spidermonkey security issues (I know that 0 A.D. itself most likely has more security issues at the moment)
  • Learning how the new API works with multi-threading is important for our AI multi-threading design.
  • Performance: During the work on upgrading we figured out that performance currently isn't much better in the new version compared to v1.8.5. The huge improvements from benchmarks don't translate to most real world applications. Loading random maps is a lot faster, but that's the only thing at the moment. It's still possible that the performance will improve once the most important bugs in Ion Monkey and Baseline are fixed.
  • If we find bugs in v1.8.5 we will never get support from Mozilla. If we use the current version or if the same bug also affects the current version, getting help is much more likely.
  • Getting new features into the official version of Spidermonkey is also only possible when we use the current version.
  • Many Linux distributions will use the new ESR versions of the standalone library. It's better to use that library provided by the system instead of bundling our own version. v1.8.5 won't be supported by Linux distributions forever.

Version

Mozilla plans to release standalone versions of Spidermonkey for each ESR-release. We are going to upgrade to ESR24 first.

JIT

The Just In Time compiler creates optimized bytecode or even native assembler code for functions or loops that are called often. That's something different than the compiling which translates the scripts to bytecode in the first step.

It's currently not possible to JIT-compile the scripts before they are executed or even store them in JIT-compiled form on the disc.

Using js::NotifyAnimationActivity it's possible to prevent the garbage collection from collecting generated JIT-code (and forcing recompilation). Unfortunately this only works if js::NotifyAnimationActivity is called at least once a second. With big lag-spikes, especially in debug mode, this can't be guaranteed at the moment. At the moment I'm working around this by modifying Spidermonkey's Runtime.cpp directly. I'll have to find a better solution.

Garbage collection

Garbage collection and memory allocation is a major bottleneck for certain parts of JS code that update a lot of data very often. I made some measurements here: http://www.wildfiregames.com/forum/index.php?showtopic=16721&#entry262183

Garbage collection could be improved by improving the way we handle compartments, especially related to the AI. That's a bit vague but I'm still trying to figure out more about that. An interesting article: http://andreasgal.com/2010/10/13/compartments/ . That article is quite old, but I think the basic concepts explained there are still valid.

Garbage collection can now even be done in a separate thread or we could run it more often (each frame for example) to avoid lag-spikes when it happens. For the AI that problem would probably be solved anyway when we move it to a separate thread.

#1890 wontfix JS Debugger hooks are per runtime Yves Yves
Description

The Javascript debugger (see JavascriptDebuggingServer) associates one ThreadDebugger instance with each ScriptInterface object. A ThreadDebugger registers its own hooks for traps, new scripts etc. at the Spidermonkey runtime level. The problem is that we have two ScriptInterfaces that are associated with the same runtime in the classes CAIPlayer and CAIWorker. The second hook will overwrite the first and this results in compartment mismatches and undefined behaviour. I will look at this problem while upgrading Spidermonkey because I first have to check if the one to one relation between Spidermonkey contexts and ScriptInterface objects is still valid.

#1966 fixed JS OOM error in the simulation during multiplayer game Yves Yves
Description

We played a 3vs3 multiplayer game today. After maybe 20 minutes an out of memory error happend which caused the game to get out of sync.

Cache: 500 (total: 3952) MiB
TIMER| InitVfs: 4.94179 ms
Sound: AlcInit success, using OpenAL Soft
TIMER| CONFIG_Init: 14.4756 ms
TIMER| InitScripting: 18.5805 ms
TIMER| RunHardwareDetection: 30.655 ms
TIMER| write_sys_info: 16.4898 ms
TIMER| InitRenderer: 7.86208 ms
TIMER| ps_console: 3.21151 ms
TIMER| ps_lang_hotkeys: 832.736 us
TIMER| common/setup.xml: 1.95271 ms
TIMER| common/styles.xml: 452.336 us
TIMER| common/sprite1.xml: 2.5114 ms
TIMER| common/init.xml: 2.50576 ms
TIMER| common/common_sprites.xml: 2.61173 ms
TIMER| common/common_styles.xml: 542.565 us
TIMER| pregame/sprites.xml: 1.32224 ms
TIMER| pregame/styles.xml: 181.876 us
TIMER| pregame/mainmenu.xml: 8.33216 ms
TIMER| common/global.xml: 735.943 us
TIMER| common/setup.xml: 712.346 us
TIMER| common/styles.xml: 41.314 us
TIMER| common/sprite1.xml: 1.87188 ms
TIMER| common/common_sprites.xml: 2.26623 ms
TIMER| common/common_styles.xml: 313.529 us
TIMER| splashscreen/styles.xml: 1.08722 ms
TIMER| splashscreen/setup.xml: 315.275 us
TIMER| splashscreen/splashscreen.xml: 1.5622 ms
Using Xcursor to sys_cursor_create 32 x 32 cursor
TIMER| common/setup.xml: 2.28497 ms
TIMER| common/styles.xml: 126.826 us
TIMER| common/sprite1.xml: 5.8688 ms
TIMER| common/common_sprites.xml: 5.36695 ms
TIMER| common/common_styles.xml: 277.615 us
TIMER| gamesetup/setup.xml: 1.09997 ms
TIMER| gamesetup/sprites.xml: 325.028 us
TIMER| gamesetup/styles.xml: 216.078 us
TIMER| gamesetup/gamesetup_mp.xml: 3.55686 ms
TIMER| common/global.xml: 362.411 us
TIMER| common/setup.xml: 2.21615 ms
TIMER| common/styles.xml: 126.313 us
TIMER| common/sprite1.xml: 6.00183 ms
TIMER| common/common_sprites.xml: 7.13513 ms
TIMER| common/common_styles.xml: 903.011 us
TIMER| gamesetup/setup.xml: 208.275 us
TIMER| gamesetup/sprites.xml: 123.895 us
TIMER| gamesetup/styles.xml: 158.583 us
TIMER| gamesetup/gamesetup.xml: 29.0741 ms
TIMER| common/global.xml: 484.77 us
TIMER| common/setup.xml: 693.198 us
TIMER| common/styles.xml: 39.894 us
TIMER| common/sprite1.xml: 1.88863 ms
TIMER| common/init.xml: 1.37923 ms
TIMER| common/common_sprites.xml: 2.1852 ms
TIMER| common/common_styles.xml: 284.766 us
TIMER| loading/styles.xml: 1.03156 ms
TIMER| loading/sprites.xml: 631.974 us
TIMER| loading/loading.xml: 1.75788 ms
TIMER| common/global.xml: 348.165 us
Using Xcursor to sys_cursor_create 32 x 32 cursor
TIMER| ParseTerrain: 10.7844 ms
TIMER| LoadDLL: 4.54799 ms
TIMER| ParseEntities: 1.34597 s
TIMER| common/setup.xml: 728.721 us
TIMER| common/styles.xml: 41.43 us
TIMER| common/sprite1.xml: 1.8051 ms
TIMER| common/icon_sprites.xml: 415.679 us
TIMER| common/common_sprites.xml: 2.15779 ms
TIMER| common/common_styles.xml: 280.854 us
TIMER| session/sprites.xml: 3.95126 ms
TIMER| session/setup.xml: 183.894 us
TIMER| session/styles.xml: 359.639 us
TIMER| session/session.xml: 119.652 ms
TIMER| common/global.xml: 1.50363 ms
GAME STARTED, ALL INIT COMPLETE
Using Xcursor to sys_cursor_create 32 x 32 cursor
Using Xcursor to sys_cursor_create 32 x 32 cursor
Using Xcursor to sys_cursor_create 32 x 32 cursor
Using Xcursor to sys_cursor_create 32 x 32 cursor
Using Xcursor to sys_cursor_create 32 x 32 cursor
Using Xcursor to sys_cursor_create 32 x 32 cursor
Using Xcursor to sys_cursor_create 32 x 32 cursor
Using Xcursor to sys_cursor_create 32 x 32 cursor
Using Xcursor to sys_cursor_create 32 x 32 cursor
Using Xcursor to sys_cursor_create 32 x 32 cursor
WARNING: OpenAL: stereo sounds can't be positioned: audio/interface/alarm/alarmcreatecavalry_1.ogg
Using Xcursor to sys_cursor_create 32 x 32 cursor
Using Xcursor to sys_cursor_create 32 x 32 cursor
Using Xcursor to sys_cursor_create 32 x 32 cursor
Using Xcursor to sys_cursor_create 32 x 32 cursor
WARNING: OpenAL: stereo sounds can't be positioned: audio/interface/alarm/alarmcreateworker_1.ogg
Using Xcursor to sys_cursor_create 32 x 32 cursor
Using Xcursor to sys_cursor_create 32 x 32 cursor
ERROR: CXeromyces: Parse error: (null):0: Extra element Melee in interleave
ERROR: CXeromyces: Parse error: units/cart_hero_hannibal:1: Element Attack failed to validate content
ERROR: RelaxNGValidator: Validation failed
ERROR: Failed to validate entity template 'units/cart_hero_hannibal'
ERROR: JavaScript error: simulation/helpers/Player.js line 178
out of memory
ERROR: Script message handler OnUpdate failed
TIMER| common/setup.xml: 809.924 us
TIMER| common/styles.xml: 49.285 us
TIMER| common/sprite1.xml: 1.97374 ms
TIMER| common/common_sprites.xml: 2.33563 ms
TIMER| common/common_styles.xml: 317.041 us
TIMER| msgbox/msgbox.xml: 2.1085 ms
ERROR: JavaScript error: simulation/components/Attack.js line 264
out of memory
ERROR: Script message handler OnUpdate failed
ERROR: Error in timer on entity 6371, IID 73, function TimerHandler: TypeError: this.order is undefined
  ([object Object])@simulation/components/UnitAI.js:1400
  ([object Object],[object Object])@simulation/helpers/FSM.js:274
  ([object Object],800)@simulation/components/UnitAI.js:2917
  ([object Object])@simulation/components/Timer.js:93

ERROR: Error in timer on entity 6371, IID 73, function TimerHandler: TypeError: this.order is undefined
  ([object Object])@simulation/components/UnitAI.js:1400
  ([object Object],[object Object])@simulation/helpers/FSM.js:274
  ([object Object],300)@simulation/components/UnitAI.js:2917
  ([object Object])@simulation/components/Timer.js:93

ERROR: JavaScript error: simulation/components/UnitAI.js line 1733
out of memory
ERROR: Script message handler OnUpdate failed
ERROR: Error in timer on entity 6371, IID 73, function TimerHandler: TypeError: this.order is undefined
  ([object Object])@simulation/components/UnitAI.js:1400
  ([object Object],[object Object])@simulation/helpers/FSM.js:274
  ([object Object],300)@simulation/components/UnitAI.js:2917
  ([object Object])@simulation/components/Timer.js:93

ERROR: JavaScript error: simulation/components/ResourceGatherer.js line 248
out of memory
ERROR: Script message handler OnUpdate failed
ERROR: JavaScript error: simulation/helpers/Player.js line 178
out of memory
ERROR: Script message handler OnUpdate failed
ERROR: JavaScript error: simulation/components/ResourceGatherer.js line 137
out of memory
ERROR: Script message handler OnUpdate failed
ERROR: JavaScript error: out of memory
terminate called after throwing an instance of 'PSERROR_Serialize_ScriptError'
  what():  JS_ValueToString failed
Abgebrochen (Speicherabzug geschrieben)
#2000 fixed OOS in a multiplayer game against Aegis Yves scythetwirler
Description

I got another OOS error while playing on Oasis 9 against Aegis with a friend.

It seems there was a discrepancy concerning whether one of the AI's units was walking or idle between the client and the host.


This may be a duplicate of #1881, but here are the logs just the case.

#2126 fixed [PATCH] Switch GameView scripting to global functions Yves Yves
Description

Some background

As described in the Spidermonkey upgrade forum thread the plan is to switch from CJSObject to mainly using global functions for the scripting interface.

So instead of exposing an object with properties to scripts, we do it with global functions:

// before
gameView.Culling = false;

// after
Engine.GameView_SetCullingEnabled(false);

CJSObject was used much more in the earlier Simulation implementation but the consensus was that it might look a little cleaner in the scripting part but this is not worth the additional complexity. We have some places where we really need to expose C++ objects to JS but in this case we don't use the CJSObject implementation. An additional problem with CJSObject is that it's very hard to understand and according to Philip even caused compiler issues because it uses some very special constructs (if I remember correctly).

What this patch does

The patch attached switches GameView from CJSObject to global functions. There are still some other uses of CJSObject, so we can't remove it yet. In my working copy I have switched most of the other modules using CJSObject and I plan to create additional patches for those.

Same approach as SoundManager

Also check this post and how stwf has implemented it in the SoundManager. I'm using the same approach to make it as consistent as possible across the different modules. I haven't yet found a better solution than checking if g_Game and g_Game->GetView are valid pointers in each setter/getter.

Macros:

I think they are appropriate here for the reasons listed below but I'm also open for other suggestions.

  1. They enforce some consistency in naming which should make it easier to find the right function in JS.
  2. It expresses the relation between the naming of setters and getters in the GameView class and in the interface files (JSInterface_GameView.*)
  3. It makes the code a little more difficult to understand, but it shouldn't be too difficult because it's only used for some simple getters and setters.
  4. It reduces code duplication.

I'd like to hear some comments before committing it.

#2137 fixed [PATCH] Switch Renderer scripting to global functions Yves Yves
Description

Same goal, same comments and same approach as #2126.

Any comments are welcome, otherwise I'll commit the patch this weekend.

#2140 fixed [PATCH] Switch Console scripting to global functions Yves Yves
Description

Same goal, same comments and same approach as #2126. I don't use macros here because there are less similar functions. The console didn't actually use CJSObject, but it implemented properties directly using the JSAPI.

I've tested the Console_Write funtion from the console and reading settings from GameView using the console.

Any comments are welcome!

#2172 fixed [PATCH] Switch ConfigDB scripting to global functions Yves Yves
Description

Same goal, same comments and same approach as #2126. I don't use macros here because there are less similar functions. The ConfigDB didn't actually use CJSObject, but it implemented properties directly using the JSAPI and used a JSNative function as an object constructor. I didn't figure out how to do the latter with the new Spidermonkey API. The main reason I changed it is not because I didn't figure out how to implement it with the same approach of course. This solution is cleaner in my opinion and it uses less fancy Spidermonkey features that aren't actually required. This should also make future upgrades easier.

I've done some tests using the console because currently some of these functions aren't even used anywhere:

  • Open console from main menu
  • warn(Engine.ConfigDB_GetValue("system", "sound.mastergain"));

--> WARNING: 0.9

  • Engine.ConfigDB_CreateValue("system", "sound.mastergain", 0.8);
  • warn(Engine.ConfigDB_GetValue("system", "sound.mastergain"));

--> WARNING: 0.8

  • Engine.ConfigDB_Reload("system");
  • warn(Engine.ConfigDB_GetValue("system", "sound.mastergain"));

--> WARNING 0.9

I noticed that the VFS uses a cache and therefore doesn't reload new config settings if you change them in a config file after starting the game and then call the reload function. This behaviour doesn't change with the patch, so I won't fix it as part of this ticket.

I will have to update: http://trac.wildfiregames.com/wiki/Exposed_ConfigDB_Functions

Any comments are welcome!

#2212 fixed [PATCH] Remove ScriptableObject/CJSObject Yves Yves
Description

Since all remaining uses of ScriptableObject/CJSObject have been removed (#2126, #2137), the related files can now also be removed.

#2213 fixed [PATCH] Unify script conversions Yves Yves
Description

Because it was historically grown, we have some duplicated code for converting script types to native types. This patch removes the file JSConversions.cpp and moves some code to ScriptConversions.cpp. The places using JSConversions.cpp are changed to use the ScriptInterface's conversion functions in ScriptConversions.cpp.

I also removed JSInterface_Vector3D because it had additional requirements to the conversion code that no other code has and because it's currently not used. I think it doesn't make sense to maintain code just because it could possibly be used again later.

One tricky bit is the conversions of the types like "unsigned" with unspecified size. In my case I get a compiler error when adding it because it's already implemented by the u32 conversion code. I uncommented it in my patch. Do you think I can safely remove the uncommented part?

||=== scriptinterface, Release ===|
/home/yves/Projekte/0ad_original_trunk/source/scriptinterface/ScriptConversions.cpp|279|Fehler: Redefinition von »static jsval ScriptInterface::ToJSVal(JSContext*, const T&) [with T = unsigned int; jsval = long unsigned int; JSContext = JSContext]«|
/home/yves/Projekte/0ad_original_trunk/source/scriptinterface/ScriptConversions.cpp|270|Fehler: »static jsval ScriptInterface::ToJSVal(JSContext*, const T&) [with T = unsigned int; jsval = long unsigned int; JSContext = JSContext]« wurde bereits hier deklariert|
||=== Build finished: 2 errors, 0 warnings (1 minutes, 23 seconds) ===|
||=== Build finished: 2 errors, 0 warnings (1 minutes, 28 seconds) ===|
#2241 fixed [PATCH] Remove g_ScriptingHost and implement global to compartment 1 to 1 relation Yves Yves
Description

Here's the description copied from the Spidermonkey upgrade forum thread:

Each GUI page in its own compartment

The first major change is having each GUI Page (CGUI Object) in its own compartment using its own ScriptInterface instance. Currently the GUI uses two global objects. One is a page global for each GUI page which should separate global variables between the pages. The other global is used for all pages and contains engine function definitions and such. The new Spidermonkey associates a compartment with each global object and this design doesn't work anymore. At least I didn't find a way to make it work with minor changes. Cross compartment calls and wrapper objects could provide a solution here but I decided the other approach looks more promising. At the moment the plan is to register all GUI functions for all pages. I don't think registering maybe 100 functions for each GUI page should be a performance problem or memory problem. If it becomes a problem we can still implement something that lets GUI pages include functions they need.

Getting rid of g_ScriptingHost

We are still using the old ScriptingHost that had been created before ScriptInterface was developed. That's unneeded duplication and should be replaced by ScriptInterface. It's sometimes a bit tricky because a lot of code simply accesses this global object and some thoughts are required that this code uses the right context/ScriptInterface/compartment in the future.

I'm currently working on a patch but it's not quite ready yet.

#2265 fixed Lobby graphics issues with the new GUI Yves Yves
Description

For me the lobby looks like on the screenshot. The lobby look OK on my notebook, so it seems to be system-specific. I'm marking it as release blocker because we don't know yet how many systems are affected.

#2267 fixed [PATCH] Spidermonkey lobby compatibility Yves Yves
Description

In #2241 I'm going to change the GUI to have one ScriptInterface for each GUI page because that will be required for the Spidermonkey upgrade (#1886). The Multiplayer lobby needs some changes to avoid compartment mismatches. Instead of initializing it with a ScriptInterface and storing script values at different locations, it takes a ScriptInterface argument in the functions that really need to read or write some script values and avoids storing values as script values with an associated compartment where possible. The scripting interface of the lobby is also adjusted to use JSInterface_Lobby.h/cpp files as other components instead of adding all functions to ScriptFunctions.cpp. This makes it a bit more clearly arranged IMO.

I still need to apply this patch to a GIT working copy and test if my WIP patch for #2241 works based on these changes, but I think it should and therefore already upload the patch here.

Feedback is appreciated!

#2322 fixed [PATCH] Move all AI players to one global Yves Yves
Description

The new SpiderMonkey will not support multiple global objects per compartment anymore. This means that it's no longer possible to share the shared AI state between multiple AI players the same way it's done now.

I tried using wrappers or cloning first, but it looks like this has a significant impact on performance. Another solution is having all AI players in one global object.

Advantages of this approach:

  • No overhead for cloning or wrapping
  • It should require less memory because scripts are only loaded once per AI player type. If you have 4 Aegis bots, it should only load the folders aegis and common-api-v3 once. the current SVN version loads common-api-v3 5 times (once for the shared part, once per player) and aegis 4 times (once per player).
  • The JIT compiler should be able to analyze the code quicker because the scripts are only loaded once and because this version of the loaded scripts gets used more often.

Known disadvantages of this approach:

  • It adds another way one AI script/player can affect another one. But even with the current approach we have quite a few ways this can happen. IMO it shouldn't be a big problem.
  • It makes the code a little bit more verbose. Each file needs two additional lines in the beginning and at the end and you access objects like "API3.Map" instead of just "Map".
  • ... maybe more coming up during testing

What I have at the moment is a WIP patch showing how all aegis bots can share the same global object. I've tested a 2vs2 AI game on Oasis 4 until a bit over 10'000 turns and got the same hash as the unmodified SVN version. I still have to figure out how different bots can share the same global. I also have to test if the theoretical performance advantages can be confirmed and how big the difference is (memory and CPU).

#2348 fixed Temorarily remove the JS debugger Yves Yves
Description

#2241 breaks the JS debugger (or makes worse what is already broken). Because the SpiderMonkey upgrade (#1886) is going to break the debugger anyway, it should be temporarily removed until the update is done and I can start fixing/rewriting it. What definitely needs to be removed or excluded from compiling are the files using the JS debugging API, because these won't compile with the new SpiderMonkey.

Of course this also means doing something sensible with:

#2367 fixed assertion 'sys_page_size == 0' failed + JS errors Yves fabio
Description
  • start the game;
  • click on Website -> OK;
  • click Exit. I get this
(process:8912): GLib-CRITICAL **: g_slice_set_config: assertion 'sys_page_size == 0' failed
ERROR: JavaScript error: gui/common/functions_global_object.js line 37
TypeError: g_messageBoxBtnFunctions is undefined
  messageBox(400,200,"Are you sure you want to quit 0 A.D.?","Confirmation",0,[object Array],[object Array])@gui/common/functions_global_object.js:37
  __eventhandler20 (press)([object Object])@menuExitButton press:4

I already reported this on IRC, sanderd17 suggested to ask historic_bruno. Also adding Yves to CC since similar problems where observed after #2241.

#2408 fixed Crash in MSVC debug build when GUI page closes Yves historic_bruno
Description

Consistently reproducible crash, according to Yves it is likely due to r14645, see IRC discussion here from 21:48.

First-chance exception at 0x5ad409e7 in pyrogenesis_dbg.exe: 0xC0000005: Access violation reading location 0xdddddead.

Call stack:

 	mozjs185-ps-debug-1.0.dll!5ad409e7() 	
 	[Frames below may be incorrect and/or missing, no symbols loaded for mozjs185-ps-debug-1.0.dll]	
 	mozjs185-ps-debug-1.0.dll!5ad35905() 	
 	mozjs185-ps-debug-1.0.dll!5ad34647() 	
 	mozjs185-ps-debug-1.0.dll!5ad33ac9() 	
 	mozjs185-ps-debug-1.0.dll!5ad2eeb5() 	
 	mozjs185-ps-debug-1.0.dll!5aca2793() 	
>	pyrogenesis_dbg.exe!Unrooter::operator()(unsigned __int64 * p=0x02d83c90)  Line 27 + 0x2a bytes	C++
 	pyrogenesis_dbg.exe!boost::detail::sp_counted_impl_pd<unsigned __int64 *,Unrooter>::dispose()  Line 154	C++
 	pyrogenesis_dbg.exe!boost::detail::sp_counted_base::release()  Line 103 + 0xf bytes	C++
 	pyrogenesis_dbg.exe!boost::detail::shared_count::~shared_count()  Line 375	C++
 	pyrogenesis_dbg.exe!boost::shared_ptr<unsigned __int64>::~shared_ptr<unsigned __int64>()  + 0x19 bytes	C++
 	pyrogenesis_dbg.exe!CScriptValRooted::~CScriptValRooted()  + 0x16 bytes	C++
 	pyrogenesis_dbg.exe!ScriptInterface::~ScriptInterface()  Line 595 + 0x2d bytes	C++
 	pyrogenesis_dbg.exe!ScriptInterface::`scalar deleting destructor'()  + 0x16 bytes	C++
 	pyrogenesis_dbg.exe!boost::checked_delete<ScriptInterface>(ScriptInterface * x=0x02d82530)  Line 34 + 0x1c bytes	C++
 	pyrogenesis_dbg.exe!boost::detail::sp_counted_impl_p<ScriptInterface>::dispose()  Line 78 + 0xc bytes	C++
 	pyrogenesis_dbg.exe!boost::detail::sp_counted_base::release()  Line 103 + 0xf bytes	C++
 	pyrogenesis_dbg.exe!boost::detail::shared_count::~shared_count()  Line 375	C++
 	pyrogenesis_dbg.exe!boost::shared_ptr<ScriptInterface>::~shared_ptr<ScriptInterface>()  + 0x19 bytes	C++
 	pyrogenesis_dbg.exe!CGUI::~CGUI()  Line 332 + 0xa8 bytes	C++
 	pyrogenesis_dbg.exe!CGUI::`scalar deleting destructor'()  + 0x16 bytes	C++
 	pyrogenesis_dbg.exe!boost::checked_delete<CGUI>(CGUI * x=0x02d96e38)  Line 34 + 0x1c bytes	C++
 	pyrogenesis_dbg.exe!boost::detail::sp_counted_impl_p<CGUI>::dispose()  Line 78 + 0xc bytes	C++
 	pyrogenesis_dbg.exe!boost::detail::sp_counted_base::release()  Line 103 + 0xf bytes	C++
 	pyrogenesis_dbg.exe!boost::detail::shared_count::~shared_count()  Line 375	C++
 	pyrogenesis_dbg.exe!boost::shared_ptr<CGUI>::~shared_ptr<CGUI>()  + 0x19 bytes	C++
 	pyrogenesis_dbg.exe!CGUIManager::HandleEvent(const SDL_Event_ * ev=0x011af2ac)  Line 337	C++
 	pyrogenesis_dbg.exe!gui_handler(const SDL_Event_ * ev=0x011af2ac)  Line 47 + 0xf bytes	C++
 	pyrogenesis_dbg.exe!in_dispatch_event(const SDL_Event_ * ev=0x011af2ac)  Line 62 + 0x12 bytes	C++
 	pyrogenesis_dbg.exe!PumpEvents()  Line 191 + 0x9 bytes	C++
 	pyrogenesis_dbg.exe!Frame()  Line 320	C++
 	pyrogenesis_dbg.exe!RunGameOrAtlas(int argc=1, const char * * argv=0x002781e8)  Line 472 + 0x5 bytes	C++
 	pyrogenesis_dbg.exe!main(int argc=1, char * * argv=0x002781e8)  Line 514 + 0xd bytes	C++
 	pyrogenesis_dbg.exe!wmain(int argc=1, wchar_t * * argv=0x00278988)  Line 380 + 0x14 bytes	C++
 	pyrogenesis_dbg.exe!__tmainCRTStartup()  Line 552 + 0x19 bytes	C
 	pyrogenesis_dbg.exe!wmainCRTStartup()  Line 371	C
 	pyrogenesis_dbg.exe!CallStartupWithinTryBlock()  Line 396 + 0x5 bytes	C++
 	pyrogenesis_dbg.exe!wseh_EntryPoint()  Line 424	C++
 	kernel32.dll!@BaseThreadInitThunk@12()  + 0x12 bytes	
 	ntdll.dll!___RtlUserThreadStart@8()  + 0x27 bytes	
 	ntdll.dll!__RtlUserThreadStart@8()  + 0x1b bytes	
#2415 fixed Scripting transition to exact stack rooting and moving GC Yves Yves
Description

Depends on

#2416
#1886
#2428

What is rooting?

Javascript uses garbage collection to detect unused variables and objects that can be deleted. If you use a jsval/JS::Value/CScriptVal or any other variables that point to storage managed by the garbage collector, you need to root it. Rooting tells the garbage collector that this value is still in use and can't be overwritten by something else.

What is exact stack rooting

Currently (with v1.8.5 and v24), SpiderMonkey scans the stack for anything that looks like a pointer to a GC thing. This is called conservative stack scanning. It prevents the garbage collector from deleting an unrooted jsval you use in a function for example.

Future versions will not support that stack scanning anymore and require exact rooting instead. Exact stack rooting means the programmer is responsible for keeping the garbage collector informed about every GC thing he uses on the stack.

What is a moving GC

A moving GC can change the location in memory where a script value is stored. Moving the object a JSObject* points to invalidates the JSObject pointer for example. Instead of just rooting a value once and using as many pointers to it as you need, you now have to inform the garbage collector about every pointer to the value because it has to change that pointer if it moves the value.

Why do we need this?

There's more work to do for the rooting, the code looks a little bit uglier and failing to do it properly causes crashes and security holes. Why do we want this? The reasons and some more technical background is explained very well in this blog post.

Honestly, I'm not quite convinced that the efforts are worth the benefits. Anyway, support for conservative stack scanning will be dropped in one of the next releases and we are basically forced to make this transition.

How do we tackle this?

The API needed for exact stack rooting is already available in SpiderMonkey V24. Also functionality to find issues and features requiring exact stack rooting can be enabled already in V24. After the upgrade (#1886) we can start the transition to exact rooting step by step while keeping track of the remaining number of reported rooting hazards. The linked resources explain some features that can be used to detect and report such rooting hazards. As soon as everything is done, we can enable features that rely on exact stack rooting.

Time frame

Mozilla will still support conservative stack scanning in ESR31 but at the moment it looks like it will be dropped soon after that release.

Resources

Blog post explaining technical background and reasons
SpiderMonkey MDN GC Rooting Guide
SpiderMonkey MDN Exact Stack Rooting
Partially outdated GC documentation

#2416 fixed Fix moving GC and rooting issues with ValueCloner Yves Yves
Description

The ValueCloner in ScriptInterface.cpp implements caching of cloned values by associating a GCThing pointer from another compartment with the cloned version of that value in the current compartment.

This fails with a moving GC because the GCThing pointer can change and because the jsval it uses as value in the map can also change.

There's some more information about moving GC in #2415.

Proposed solution 1

At the moment I don't see why we even need this ValueCloner. I've replaced it with a much simpler implementation with structured clones. ValueCloner was probably introduced earlier when structured clones weren't available yet or when there were some issues with them.

This solution should work with a moving GC and doesn't require special care for rooting (CloneValueFromOtherContext still returns a jsval in this patch, but that should be easy to fix later). CloneValueFromOtherContext is currently mainly used for getting data from the simulation to the GUI. There's another use of it for the serialization test mode in Simulation2.cpp.

Of course when talking about removing something that does caching, the first concern is performance. Since a new instance of ValueCloner is created for each call to CloneValueFromOtherContext, it only caches objects that are linked multiple times in the value to clone. The structured clone most likely does this too internally (otherwise it would get problems with cyclic references).

I've tested it in practice by profiling a game against the AI on Alpine Valleys. Because this cloning is mainly used in the GUI, I couldn't use a non-visual replay. This means the graphs are from different games.

Original:
Profiling original

Patch:
Profiling after applying the patch

#2428 fixed Provide hashmap like structure supporting moving JSObject* keys Yves Yves
Description

Ticket depends on

The ticket definitely depends on the SpiderMonkey upgrade to v24. After checking the example code more closely I would say we probably even have to wait for newer versions. Some API functions have already been adjusted (here for example) and this code relies heavily on some of them.

#1886

Description

BinarySerializer.cpp is one example where we store JSObject pointers in a key and associate a "backref tag" with this object. The serializer uses this to identify already serialized objects and serializes the tag in the output stream instead of serializing the whole object again. This is required to support non-tree structures and circular references.

The problem with a moving GC is that the object a JSObject pointer points to can move in memory. This invalidates the key in the map and causes wrong behaviour and crashes. Here's a solution for this problem (the ObjectIDCache class): JavaScriptShared.h
JavaScriptShared.cpp

Requirements (both are implemented for the ObjectIDCache class)

  1. Tracing implementation to protect the objects from the garbage collection (really? In the serialization case it's probably guaranteed that all data to serialize is already traced/rooted, but it could be uses for other cases too)
  2. Implementation of post barriers. Post barriers update the key when the object is moved from the nursery to the tenured heap (read the documentation linked in the meta-ticket to learn more bout these terms).

Difficulties

Deferred finalization

This class uses deferred finalization (implemented in bug 934442).

My understanding of the problem is as follows:

  1. Allocate a GC thing on the heap
  2. Record this pointer in the store buffer with a post barrier (because it points into the nursery)
  3. Deallocate the pointer on the heap before the next minor GC (the pointer itself, not the value it points to)
  4. The GC thing the heap pointer pointed to gets moved. SpiderMonkey tries to update the pointer which has become invalid in the meantime --> Crash

So deferred finalization defers the deallocation of the heap pointer from the ObjectIDCache destructor to the end of the next minor GC. The ticket proposes some alternative solutions for the problem (if this approach doesn't work in our case).

Some useful information

The tracing is implemented here. The comment in jsapi.h about JS_CallHeapObjectTracer says that it may move the GC thing and return an updated pointer. I haven't quite figured out yet why the code can assert that this does not happen there. I assume it relies on an internal constraint there related to how the post barrier...

The post barrier is implemented here. It updates the key if it was moved.

The post barrier is registered for each key here.

#2434 fixed [PATCH] Reduce/avoid duplicated code in Atlas' ScriptInterface Yves Yves
Description

I open a ticket for this task because there are several alternative approaches and some discussion could be needed/helpful.

We have a ScriptInterface.h and ScriptInterface.cpp file in the AtlasScript project. These files are more or less copies of bits from other files in the ScriptInterface project. Duplicated code is bad because it requires more time for updating and is more error prone.

Approach1: Remove most of the duplicated code

I still have to check how much of the scripting code in AtlasScript is actually still used. Maybe most of it can be removed and the amount of duplicated code can be reduced to an acceptable amount.

Approach2: Use the full ScriptInterface project from atlas

We include the full ScriptInterface.h header from the scriptinterface project and either (2.A) link the binary created in that project or (2.B) add another project(in an IDE or makefiles) pointing to the same files.

With both approaches we would have to add some logic to premake4.lua to use the main ScriptInterface project and we would have to remove duplicated code and implement additional features in the main ScriptInterface project (if there are any).

One problem is that all projects/modules of the main game include precompiled.h as the first file in all their .cpp files which then includes lib/precompiled.h. This file contains some types and definitions that are needed by ScriptInterface.h and other headers from the ScriptInterface project. So they actually depend on the .cpp which uses them to include additional headers. Maybe we can include everything that's needed in the header without breaking precompiled headers (I think that should theoretically work with include guards). Anyway, quite a lot of new header files would have to be included (indirectly) by Atlas projects.

2.A same project

This means we have to use the same compiler and linker flags for the ScriptInterface in the main game and in atlas. We'd need the fPIC flag for example because atlas is a shared library and needs position independent code (PIC). PIC can have an impact on performance but I don't know how big or small that impact is. Maybe there are other flags where the flexibility to have different values for the main game and atlas would be nice.

2.B separate project

Creating a separate project that points to the same source files could be a little bit confusing and means longer build times. In exchange we get the flexibility to specify different build/linker-flags for the main game and atlas.

Approach3: Update/Keep the duplicated code

If the conclusion is that all other alternatives are worse, we could still keep the duplicated code and I would have to update it for SpiderMonkey 24 too.

Question: Scripting use in Atlas

For a good decision it's important to know if we will use more or less scripting in Atlas in the future. If we will use more scripting, it would make sense to include the fully featured ScriptInterface project (Approach2) instead of keeping duplicated code (Approach3) or reducing the amount of duplicated code in the short term (Approach 1).

Opinions?

#2442 fixed [PATCH] Adjust buildscripts and test SpiderMonkey 24 on Mac OS X Yves Yves
Description

I don't own a Mac, so someone else needs to take over this task. You basically have to:

  1. Apply the most recent patch in #1886
  2. Copy the SpiderMonkey source tarbal to libraries/source/spidermonkey (download: https://ftp.mozilla.org/pub/mozilla.org/js/mozjs-24.2.0.tar.bz2)
  3. Adjust libraries/osx/build-osx-libs.sh (the changes should be more or less the same as for Linux in libraries/source/spidermonkey/build.sh).
  4. Build the library using the build script and build 0 A.D.
  5. Check if the 0 A.D. build works or if there are any warnings or errors that are specific to the Mac OS X environment.

The following warnings are currently a know issue that probably also happens on the Mac (ignore them):

mozilla/NullPtr.h|29|warning: "_MSC_VER" is not defined [-Wundef]|.

It would be good to have this done as soon as possible. I would like to commit long enough before the next alpha release to get enough testing. I should be ready with the rest of the SpiderMonkey patch in about a week.

#2450 fixed Upgrade cxxtest Yves Yves
Description

Upgrade cxxtest to support new features like the XmlPrinter which is needed for Jenkins integration.

#2460 fixed [PATCH] Savanna Ravine scenario AI makes no units Yves Patrick
Description

Playing Alpha XV: Osiris with svn up done as of March 13,2014. Playing single player/matches/scenario/Savanna Ravine. I am the Hellenes, the Aegis Bot AI is playing the Celts with AI difficulty set to very hard. The scenario starts with no units, so you have to grow some right away to start. The AI never does this. By the time I get around to going over to the Celt camp, it still has created no units. That makes it less fun than it might have been. I've tried it twice, same result. It never creates any units.

#2462 fixed [PATCH] SpiderMonkey ESR31 upgrade Yves Yves
Description

Now that the ESR24 upgrade is done (#1886), I've started working on the ESR31 upgrade. You can test the current WIP version on my github repository (ESR31 branch). Read the readme there for additional information.

Depends on

#2669

When updating, don't forget to also fix #2684 and #1374 and #2973.

#2475 fixed Decide on using new ES6 keyed collections (e.g. Map, Set) Yves Yves
Description

I'd like to have a team decision if we start using the new keyed collections which are available with SpiderMonkey 24 and later. These features are marked "experimental".

Overview

Mozilla writes this:

This is an experimental technology, part of the Harmony (ECMAScript 6) proposal. Because this technology's specification has not stabilized, check the compatibility table for >usage in various browsers. Also note that the syntax and behavior of an experimental technology is subject to change in future version of browsers as the spec changes.

Check the descriptions of these objects and also the browser compatibility list at the end of the articles:

Why should we use them?

It's mainly for performance reasons.

Performance example

Because I don't like generic benchmarks, here's an example of a test with our code I made today.

It's a non-visual replay of a 2vs2 AI game with aegis bots on Oasis 04 going over around 15000 turns. I've measured the total runtime in seconds of the get function in entity.js. I've used my v31 testing branch for the measurements but I don't know if it makes a difference compared to v24. The function gets called 51'206'230 times in total and the hash is the same with and without patch. The patch is attached. It's very simple and we could improve performance even further if we used it at some more key locations that use key/value pairs.

Before:
Time in seconds for get function:                      43.91533856391563
Total execution time  (some variantion is normal):    995 seconds

Get taking 4.4% of total execution time

After (2nd version of the patch):
Time in seconds for get function:                     21.613286443973905
Total execution time (some variation is normal):     987 seconds

Get taking 2.19% of total execution time
#2492 fixed Have a bot regenerate POT files on string changes Yves Adrián Chaves
Description

Once a day, the bot should:

  1. Save a copy of each of the (two) existing POT files.
  2. Regenerate the POT files.
  3. Use a tool such as Pology (http://pology.nedohodnik.net/doc/user/en_US/index.html) to check the differences between each new POT file and the version of that POT file currently in the repository.
  4. For each POT file, update it if either of the following differences are detected:
    • There were messages added, removed or modified.
    • There were translation messages added, removed or modified.
    • There were translation contexts added, removed or modified.

Note: ignore other changes, such as location comments or the POT generation date.

  1. If a commit is required due to changes in one or more POT files, pull all translations from Transifex (all, not just those of the POTs to update) to commit them as well.
  2. Commit those POT files with relevant changes, and the latest PO files pulled from Transifex.

Reasoning:

  • This way, developers do not have to worry about i18n, and yet translators will be able to update the game translation within 24h of the addition of new strings to the game (which is the longest that it can take Transifex to download the POT files from our repository).
  • This method is safer than letting developers do it, as they may have uncommited files around that the POT generation tool may catch. This won’t happen on a clean environment.
  • With this method we lose the manual checking of the changes to the POT before commiting, but as long as developers check their commits before they submit them (which all of them [should] do) it should be fine.
  • This process would not generate unnecessary noise. It is true that there would be a commit every time that a developer changes English strings, however developers can regenerate the POT file themselves in their commits to avoid this automated commit afterwards.
#2684 fixed 3rd macedinian war scenario gives an error in AuraManager Yves mimo
Description

When trying to play this map on svn, there is an JS error just at startup

GAME STARTED, ALL INIT COMPLETE

WARNING: JavaScript warning: simulation/components/AuraManager.js line 133 reference to undefined property this.modificationsCache[valueName][ent] ERROR: JavaScript error: simulation/components/AuraManager.js line 133 TypeError: this.modificationsCache[valueName][ent] is undefined

AuraManager.prototype.ApplyModifications@simulation/components/AuraManager.js:133 ApplyValueModificationsToEntity@simulation/helpers/ValueModification.js:14 Attack.prototype.GetAttackStrengths/applyMods@simulation/components/Attack.js:369 Attack.prototype.GetAttackStrengths@simulation/components/Attack.js:373 GuiInterface.prototype.GetExtendedEntityState@simulation/components/GuiInterface.js:360 GuiInterface.prototype.ScriptCall@simulation/components/GuiInterface.js:1978

ERROR: Error calling component script function ScriptCall WARNING: JavaScript warning: gui/session/session.js line 642 reference to undefined property heroState.armour

#2707 fixed Atlas unable to load maps Yves Itms
Description

Related to recent exact stack rooting changes.

Access violation while reading 0x00000008 location, at ScriptInterface.cpp, line 848. (in ScriptInterface::GetContext() )

This happens whenever I try to load a map in Atlas, with r15609.

#2713 fixed Javascript error when using the Delete key Yves mimo
Description

in recent svn (r15613), using the delete key to destroy entities works, but gives JS error

ERROR: JavaScript error: gui/session/input.js line 836 TypeError: Engine.GetGUIObjectByName(...) is undefined

handleInputAfterGui@gui/session/input.js:836

#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.

#1233 invalid Some animals remain to stand after dying Zaggy1024 Irina
Description

Some animals (wildebeests, goats, african elephants and north african elephants) remain to stand after dying in Alpha 9 Ides of March.

Screenshot attached.

#6694 fixed "Requires Town Phase" and "Requires City Phase" should be in red abian abian
Description

The text of the lines "Requires Town Phase" and "Requires City Phase" should be in red when warning of unfulfilled requirements, just like the "Insufficient resources" message and others.

#6838 fixed include military formation descriptions abian abian
Description

It would be nice to have descriptions of military formations as tooltips.

#6841 fixed when only one entity of a type is selected/garrisoned, don't show the number abian abian
Description

I would expect...

... to be...

It's easy to understand that there's only one entity unless a number is indicated. Not showing the number 1 makes it easier to distinguish single entities from batches, and also makes it easier to recognize the icons that the number 1 partially covers.

#6850 fixed add brief explanations to the tooltips of the alert buttons abian abian
Description

The two alert buttons currently have tooltips only with the texts "Raise an alert!" and "End of alert.", with no explanation of the effects.

#6856 fixed improve color of repair icon abian abian
Description

The icon for the repair action is unusually dark compared to the rest, and may suggest that it is disabled.

I propose to adjust it to look as follows.

#5646 fixed format.h is bugged adrian Silier
Description

fmt::internal::CharTraits<char>::convert': cannot access private member declared

that basically means one cannot use wstring and pass it to LOGWARNING or similar calls, where conversion is needed.

Issue have been fixed, but we have outdated version: https://github.com/fmtlib/fmt/issues/117 File itself is available here: https://github.com/fmtlib/fmt/blob/master/include/fmt/format.h

One cannot simply download and replace the file, because there have been done modifications to our version of file, so they need to be done in new version of file too.

Code to reproduce:

LOGWARNING("Passed wrong value %ls", L"wstring");

#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\

#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

#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.]
#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).
#95 fixed Cinematics editor andrew Philip Taylor
Description

UI for editing (and previewing) cinematics tracks.

#2898 fixed [PATCH] audio notification system when your nick is mentioned in chat Andy Alt Moul
Description

Get a notification system when someone talk to you (write exactely the psedo) in the multiplayer lobby. Like for XMPP clients. Because when the 0ad windows is not fullscreen you need to watch each time if someone talk to you.

#4089 fixed [PATCH] Update manual for hotkeys related to idle fighters Andy Alt Andy Alt
Description

This patches binaries/data/mods/public/gui/manual/intro.txt

The forward slash is now used to select idle fighters, and this patch reflects that change.

I've also made the change at http://trac.wildfiregames.com/wiki/HotKeys

See also: http://trac.wildfiregames.com/changeset/13944

#5155 fixed Untranslated strings Andreas Nilsson elexis
Description

As reported in: https://wildfiregames.com/forum/index.php?/topic/24321-untranslatable-srings/

messages.json needs an update for the split save/load page and hostgame dialog.

There are also some other untranslated strings found.

#5046 needsinfo Unify User.cfg, Local.cfg, Mod.cfg Anil Eapen Stan
Description

Currently we have three files to store game values if you don't count default.cfg

All the usage of those variables can be found using the following links.

Since we only use CFG_GET_VAL which is a macro:

g_ConfigDB.GetValue(CFG_USER, name, destination)

We could nuke the other two files as we barely read nor need them.

Usage across the codebase

Since we use g_ConfigDB everywhere else we could also nuke the macro

#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".

#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

#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)

#3749 fixed "Conquest structures" victory condition fails when a player never builds a structure at all. bb petherfile
Description

You can end up with a game that never meets victory condition if one player does not ever manage to build a structure and does not start with one (such as the random nomad maps) when victory condition is "conquest structures"

Probably some sort of logic change that can fix this: maybe victory is also met if all units are dead and no structures are present for that player. Currently it seems that an AI player can have zero units and zero building but still be considered undefeated if they never build a structure with "conquest structures" on.

Maybe this is not the case for a real player and only applies to AI players? Is that possible?

#3870 fixed SDL 2.0.4 update broke hotkeys on windows (Opening team chat with key T automatically writes a t in input dialog) bb Imarok
Description

On windows, opening the team chat window with key T automatically writes a t in input dialog A Patch could be to open the team chat window not until the t key has been released.


Testing on Windows revealed that the SDL 2.0.4 update in r17658 introduced this behavior.

#4014 fixed Combine victory conditions bb elexis
Description

Currently we can only chose one of N gametypes: { Conquest, Conquest Structures, Conquest Units, Wonder, Endless } but not combine them individually.

I propose to change the gamesetup once new victory conditions like #2160 are added:

Gamesetup:

  • remove the gametype dropdown
  • add one checkbox for every victory condition to the right of the other boolean options
  • remove Conquest from the list (equal to Conquest Structures + Conquest Units)
  • remove Endless from the list (equal to checking no victory condition)
  • add a last man standing checkbox (otherwise load an allied victory script)

Simulation:

  • The Conquest gametype can be removed (simulation/data/settings/)
  • The conquest script should be removed from the Wonder gamemode, so that it can be played as an "Wonder or endless" game as well (which shouldn't mean that players without units or conquest-critical structures shoudln't be defeated).
  • Move the allied victory functionality out of the EndGameManager and into a trigger script.

This ticket will likely run into the same bugs as described in #4013, so that one might be done beforehand.

#4252 fixed Dynamic chat label resizing bb elexis
Description

The labels "To:" and "Text:" in the chat window are properly formatted in english, but some languages need more space than had been allocated when the strings and labels were introduced in r17771. Just using the maximum size to fit all language yields ugly results in enlgish, see screenshot: A better approach were to resize the label and text boxes dependent on the actual length. There is Engine.GetTextWidth() that should be able to accomplish that.

#4326 fixed [PATCH] Random function cleanup bb bb
Description
  • In current code there exist some duplicate function generating random numbers, it would be good to merge those into one globalscripts file.
  • Also it would be good to have a randomPick function to randomly pick an element from an array, so we don't need to do shuffle array and then pick array[0], and thus save some performance.
  • This new pickRandom function can the be used in instances like if (randNumber >0.5);else;
  • Occurrences of Math.round(Math.Random()) and similar expressions should be nuked into some RandInt() calls.

The attached patch is a rebase from #3102 and this ticket is necessary for the final implementation of that ticket.

#4606 fixed undefined property g_GameAttributes.settings.Ceasefire for games with autostart bb mimo
Description

Start a game with (visual) autostart, and click on the ojectives button: this gives

WARNING: JavaScript warning: gui/common/gamedescription.js line 311
reference to undefined property g_GameAttributes.settings.Ceasefire
WARNING: JavaScript warning: globalscripts/l10n.js line 35
Script value conversion check failed: v.isNumber() (got type undefined)
#4648 fixed [Patch] Capture The Relic victory shouldn't depend on the player ID order bb elexis
Description

As defined by CheckCaptureTheRelicCountdown and reported in Phab:D305#26811, the player with the lowest playerID that has mutually allied all players that own relics is marked as a winner in the CaptureTheRelic gamemode.

Example:

Player 1 is only mutual ally with 2. Player 2 is mutual ally with everyone but 8. Player 1 captures the relic and only 1+2 win.

Player 2 is only mutual ally with 1. Player 1 is mutual ally with everyone but 8. Player 2 captures the relic and everyone but 8 will be marked as winners (even if 2 had fought the entire game against player 3 to 7).

See replays attached there for an ingame test.

#4658 fixed Ranged aura still applied even when garrisoned bb elexis
Description

Retardado has reported that sometimes Hero auras are even applied to units if the hero is garrisoned and if that aura is a ranged aura.

Replay the attached r19835 replay to reproduce.

#4857 fixed Dropdown list invisible when dropdown is "low" on the screen bb bb
Description

When placing a dropdown in the gui that "low" such that the list doesn't fit in the space below the header, the list gets (partially) invisible, as seen in the screenshot: https://trac.wildfiregames.com/raw-attachment/ticket/4857/Screenshot%20from%202017-11-17%2016-52-30.png

Two solutions come to my mind here:

  • resize the list so it fits
  • create the list above instead of below

Probably a combination of the two would be best, like below if there is space for 2-3 items, otherwise above.

#4932 fixed spearmen are fighting with the resources they hold instead of weapons bb serveurix
Description

I've spotted units with this graphical bug in svn, AFAIR it was spearmen but it could affect other units as well.

Tell me if you need screenshots.

#5015 fixed Increase gamesetup mapselection dropdownwidth bb elexis
Description

The dropdown width of the mapselection in the new gamesetup UI of a23 is too small for all mapnames.

#5049 fixed Gamedescription should list all gamesettings in the gamesetup bb elexis
Description

In order for clients to not have to click through the gamesetup tabs all the time to test for changed settings, the gamedescription should just list all settings. This way the clients also aren't confronted with the non-styled UI.

#5055 fixed Lagging while pressing the Shift hotkey bb elexis
Description

As reported on the forums by wowgetoffyourcellphone and confirmed by LionKanzen in https://wildfiregames.com/forum/index.php?/topic/24062-lagging-when-using-shift-modifier-key/ on windows, but apparently not on linux the game is lagging while pressing shift.

This is most likely due to the key event frequency being different on windows, thus the selection panels and barter dialog being updated way more often than on linux.

Setting a max update frequency in JS would be sufficient to remove the FPS drainage.

Not sure if it is a good idea or worth the effort to set a fixed event frequency in the C++ part for all input events.

#5140 fixed Resigning as gaia and crash when garrisoning bb fatherbushido
Description

One can resign as gaia. It's obviously not a clever command and won't happen in normal game but nothing in the sim prevent that (look at SetState in Player.js). The other funny thing is that all gaia structures (and relics) are then converted to the highest playerID player (see Capturable.js). That's just a note, not a real bug/task.

#5194 fixed When opening and closing the lobby from in-game, an l appears in the game chat bb causative
Description

Get into a multiplayer game from the lobby. Have the text indicator blinking in the text box on the game setup screen. Press Alt+l to open the lobby. Press Alt+l again to close the lobby. An l appears in the game setup text box.

#5385 fixed F.P.S. Overlay bug when in bulgarian language bb miro.marvel
Description

When I am in English or any other language I can see the fps counter:https://gyazo.com/ced3936b9874a3afc144bd3b905a3628 But when in Bulgarian I can't see them...only after I turn on the time options then the fps is shown but there is no time...and after I turn on all 3 of them they still show bad... https://gyazo.com/cc079c30dcb1344a203e50e01e910119 https://gyazo.com/1d7ec65d44f2622f923f2c1da5f7dd06 https://gyazo.com/76d24dc4702a6e21863d473d53731f9e

#5504 fixed panelEntButton undefined bb elexis
Description

In this a23b replay reported by PhyZic and Boudicca, the following error occurs after a player loses his hero on minute 22 in a capture-the-relic match:

ERROR: JavaScript error: gui/session/session.js line 1104
TypeError: panelEntButton is undefined
  displayPanelEntities@gui/session/session.js:1104:3
  updateGUIObjects@gui/session/session.js:940:2
  onSimulationUpdate@gui/session/session.js:876:2
  __eventhandler7 (simulationupdate)@session simulationupdate:0:1
#5554 invalid Unable to accept 0 A.D.'s mod.io terms bb FeXoR
Description

Clicking "Settings -> Mod Selection -> Download Mods -> Accept" leads to:

ERROR: JavaScript error: gui/common/terms.js line 24
TypeError: Engine.ConfigDB_CreateAndWriteValueToFile is not a function
  acceptTerms@gui/common/terms.js:24:1
  closeTerms@gui/termsdialog/termsdialog.js:85:1
  __eventhandler113 (press)@connectButton press:0:1
ERROR: Failed to call the callback function acceptTerms in the page page_modmod.xml

Tested on r22616

#5831 fixed Add option to disallow variants bb bb
Description

Having many different props rendered can cause performance issues. Therefore it would be good if there is an option in the option menu to limit the number of variants. This can be achieved by unrandomizing the code around https://trac.wildfiregames.com/browser/ps/trunk/source/graphics/ObjectBase.cpp#L557 if the option is enabled.

#5937 duplicate Optionally unrandomize entity appearance bb Stan
Description

As claimed by @vladislavbelov on several occasions (e.g. https://wildfiregames.com/forum/topic/29654-request-sacrificial-knife/?tab=comments#comment-405553), having many different actors affects performance. A way to reduce the effect, but still allow many variants is to optionally disable the randomness. This should limit the number of different variants if disabled, but keeps the old performance if enabled.

Freagarach reports a 10% improvement.

#6098 fixed Typos in warning messages bb Ludovic Rousseau
Description

After generating the Debian package the lintian tool reported spelling errors.

The complete list is:

I: 0ad: spelling-error-in-binary usr/games/pyrogenesis Recieved Received
N:
I: spelling-error-in-binary
N:
N:   Lintian found a spelling error in the given binary. Lintian has a list
N:   of common misspellings that it looks for. It does not have a
N:   dictionary like a spelling checker does.
N:   
N:   If the string containing the spelling error is translated with the
N:   help of gettext or a similar tool, please fix the error in the
N:   translations as well as the English text to avoid making the
N:   translations fuzzy. With gettext, for example, this means you should
N:   also fix the spelling mistake in the corresponding msgids in the *.po
N:   files.
N:   
N:   You can often find the word in the source code by running:
N:   
N:    grep -rw <word> <source-tree>
N:   
N:   This tag may produce false positives for words that contain non-ASCII
N:   characters due to limitations in strings.
N:   
N:   Severity: info
N:   
N:   Check: binaries
N:
I: 0ad: spelling-error-in-binary usr/games/pyrogenesis Unknow Unknown
I: 0ad: spelling-error-in-binary usr/games/pyrogenesis missmatch mismatch
I: 0ad: spelling-error-in-binary usr/games/pyrogenesis removeable removable
I: 0ad: spelling-error-in-binary usr/games/pyrogenesis seperated separated
I: 0ad: spelling-error-in-binary usr/lib/games/0ad/libCollada.so instanciated instantiated
I: 0ad: spelling-error-in-binary usr/lib/games/0ad/libmozjs78-ps-release.so emited emitted
I: 0ad: spelling-error-in-binary usr/lib/games/0ad/libmozjs78-ps-release.so litle little
I: 0ad: spelling-error-in-binary usr/lib/games/0ad/libmozjs78-ps-release.so succeded succeeded
I: 0ad: spelling-error-in-binary usr/lib/games/0ad/libmozjs78-ps-release.so succesfully successfully

The errors from libmozjs78-ps-release.so and libCollada.so are outside of 0ad so I did not propose fixes for them.

#6433 fixed [26393] l10n.js Script value conversion check failed: v.isString() || v.isNumber() || v.isBoolean() bb Langbart
Description

to reproduce

  1. Start a game with the autostart command e.g.
    binaries/system/pyrogenesis -conf=mod.enabledmods:"mod public" -autostart="random/unknown" -autostart-seed=-1 -autostart-civ=1:spart -autostart-civ=2:brit -autostart-ai=2:petra
    
  1. Errors appear
    0 A.D. (0.0.26) Main log (warnings and errors only)
    ERROR: JavaScript error: gui/common/l10n.js line 69 Script value conversion check failed: v.isString() || v.isNumber() || v.isBoolean() (got type undefined) translate@gui/common/l10n.js:69:36 TitleDisplay@gui/loading/TitleDisplay.js:11:13 init@gui/loading/loading.js:10:19
    
    ERROR: GUI page 'page_loading.xml': Failed to call init() function
    
    ERROR: JavaScript error: gui/loading/loading.js line 22 g_LoadingPage is undefined reallyStartGame@gui/loading/loading.js:22:2
    

bisect

The issue can be noticed for the first time with changeset [26393]

File causing issues

Line 11 in the file gui/loading/TitleDisplay.js has been changed. If I undo the change, the problem for the autostart command is no longer reproducible, but the normal GUI game setup within the app is broken.

  • ps/trunk/binaries/data/mods/public/gui/loading/TitleDisplay.js

     
    11/**
    22 * This class choses the title of the loading screen page.
    33 */
    44class TitleDisplay
    55{
    66    constructor(data)
    77    {
    88        let loadingMapName = Engine.GetGUIObjectByName("loadingMapName");
    99        loadingMapName.caption = sprintf(
    1010            data.attribs.mapType == "random" ? this.Generating : this.Loading,
    11             { "map": translate(data.attribs.settings.Name) });
     11            { "map": translate(data.attribs.settings.mapName) });
    1212    }
    1313}
    1414
    1515TitleDisplay.prototype.Generating = translate("Generating “%(map)s”");
    1616
    1717TitleDisplay.prototype.Loading = translate("Loading “%(map)s”");

possible Solution:

The addition of || data.attribs.settings.Name solves the problem, but is this the right solution?

Line 
11 { "map": translate(data.attribs.settings.mapName || data.attribs.settings.Name) });
12 }
#6435 fixed Failed start random game if change number of players bb nwtour
Description

Start game, 5 players in gamesettings (4 AI Petra) - successfull started

Change num of players to 4 (minus 1) - failed loading

Restart game: in gamesettings 5 players 3 AI and 1 unassigned

Creating playerbases...ERROR: JavaScript error: maps/random/rmgen-common/player.js line 66
g_CivData[getCivCode(...)] is undefined
  getStartingEntities@maps/random/rmgen-common/player.js:66:19
  placeCivDefaultStartingEntities@maps/random/rmgen-common/player.js:111:44
  placePlayerBase@maps/random/rmgen-common/player.js:159:33
  placePlayerBases@maps/random/rmgen-common/player.js:147:18
  @maps/random/volcanic_lands.js:42:17
ERROR: CMapGeneratorWorker::Run: Failed to load RMS 'maps/random/volcanic_lands.js'
#6448 fixed ERROR after a battalion constructs a building bb wowgetoffyourcellphone
Description

Select a group of soldiers. Make sure they are in a formation/battalion. Then task them to build a house or other building. Once completed, you can no longer move those soldiers to a different task: they refuse to follow orders.

ERROR: CCmpPosition::GetPosition2D called on entity when IsInWorld is false

ERROR: CCmpPosition::GetPosition2D called on entity when IsInWorld is false

ERROR: CCmpPosition::GetPosition2D called on entity when IsInWorld is false

ERROR: CCmpPosition::GetPosition2D called on entity when IsInWorld is false

#6451 fixed Single word wrapping infinite loop bb bb
Description

Currently (r26604) when I select the en_GB language and open the replay menu, the game will hang, eat up all RAM and crash.

Trisecting the issue lead to the following string "%(min)s - %(max)s min" in the durationFilters of the replayMenu. In en_GB this is translated as "%(min)s–%(max)s min". Notice the em_dash directly (no spaces) between two sprintf variables, both of which will be replaced by a number.

The resulting string is too long for the textbox, however since there are no spaces, we cannot word-warp either.

Since r26522 we have the crash as described.

Before r26522 this issue was hided by blindly adding a full width of the word in case of failure. Notice this is wrong because we could end up with wrapping "too late" (there could be a short word following the long word which stays on the same line this way).

Instead we should not process the line on the first word of the line (unless it is the last word of the string).

This issue could also be fixed by changing the translation and adding some spaces around the em-dash, but that is nowhere near a permanent solution.

#6513 fixed Segfault on autostart nonVisual games bb Langbart
Description

issue

  • start a game from the command line with the -autostart-nonvisual flag
binaries/system/pyrogenesis -conf=mod.enabledmods:"public" -autostart="random/mainland" -autostart-nonvisual
  • Segfault
  • bb has already created a patch. It is better to also create a ticket to increase the chances that it will not be forgotten.
23:14 <@Stan> Langbart: you can also create a rb for non visual mode if you like

lldb

(lldb) run -conf=mod.enabledmods:"public" -autostart="random/mainland" -autostart-nonvisual
Process 79078 launched: '/Users/paria/0ad/binaries/system/pyrogenesis' (x86_64)
TIMER| InitVfs: 6.383 ms
FILES| Main log written to '/Users/paria/Library/Application Support/0ad/logs/mainlog.html'
FILES| Interesting log written to '/Users/paria/Library/Application Support/0ad/logs/interestinglog.html'
TIMER| CONFIG_Init: 7.804 ms
Assertion failed: "ms_singleton"
Location: Singleton.h:51 (GetSingleton)

Call stack:

(error while dumping stack: Function not supported)
errno = 0 (No error reported here)
OS error = ?


(C)ontinue, (S)uppress, (B)reak, Launch (D)ebugger, or (E)xit?
e
Redirecting call to abort() to mozalloc_abort

pyrogenesis was compiled with optimization - stepping may behave oddly; variables may not be available.
Process 79078 stopped
* thread #1, name = 'main', queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x0)
    frame #0: 0x000000010109c1f0 pyrogenesis`::mozalloc_abort(msg=<unavailable>) at mozalloc_abort.cpp:33:3 [opt]
   30  	#ifdef MOZ_WIDGET_ANDROID
   31  	  abortThroughJava(msg);
   32  	#endif
-> 33  	  MOZ_CRASH();
   34  	}
   35  	
   36  	#ifdef MOZ_WIDGET_ANDROID
Target 0: (pyrogenesis) stopped.
(lldb) bt
* thread #1, name = 'main', queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x0)
  * frame #0: 0x000000010109c1f0 pyrogenesis`::mozalloc_abort(msg=<unavailable>) at mozalloc_abort.cpp:33:3 [opt]
    frame #1: 0x0000000101b93e3d pyrogenesis`::abort() at mozalloc_abort.cpp:82:3 [opt]
    frame #2: 0x00000001004f2a86 pyrogenesis`sys_display_error(text=<unavailable>, flags=6) at unix.cpp:268:4 [opt]
    frame #3: 0x00000001004d5203 pyrogenesis`debug_DisplayError(wchar_t const*, unsigned long, void*, wchar_t const*, wchar_t const*, int, char const*, long volatile*) [inlined] CallDisplayError(text=L"Assertion failed: \"ms_singleton\"\r\nLocation: Singleton.h:51 (GetSingleton)\r\n\r\nCall stack:\r\n\r\n(error while dumping stack: Function not supported)\r\nerrno = 0 (No error reported here)\r\nOS error = ?\r\n", flags=6) at debug.cpp:374:8 [opt]
    frame #4: 0x00000001004d51e6 pyrogenesis`debug_DisplayError(description=L"Assertion failed: \"ms_singleton\"", flags=6, context=0x00007ffeefbfe000, lastFuncToSkip=<no summary available>, pathname=<no summary available>, line=<no summary available>, func=<no value available>, suppress=<no summary available>) at debug.cpp:460 [opt]
    frame #5: 0x00000001004d5a6e pyrogenesis`debug_OnAssertionFailure(expr=<no summary available>, suppress=<no summary available>, file=<no summary available>, line=<no summary available>, func=<no value available>) at debug.cpp:547:9 [opt]
    frame #6: 0x00000001002ce960 pyrogenesis`CFontMetrics::CFontMetrics(CStrIntern) [inlined] Singleton<CRenderer>::GetSingleton() at Singleton.h:51:3 [opt]
    frame #7: 0x00000001002ce930 pyrogenesis`CFontMetrics::CFontMetrics(this=<no summary available>, font=CStrIntern @ scalar) at FontMetrics.cpp:29 [opt]
    frame #8: 0x00000001001d993c pyrogenesis`CConsole::Init(this=<no summary available>) at CConsole.cpp:97:21 [opt]
    frame #9: 0x0000000100214e5f pyrogenesis`InitPs(setup_gui=<no summary available>, gui_page=<no summary available>, srcScriptInterface=<no summary available>, initData=JS::HandleValue @ scalar) at GameSetup.cpp:201:14 [opt]
    frame #10: 0x0000000100213a36 pyrogenesis`Autostart(args=<no summary available>) at GameSetup.cpp:1127:3 [opt]
    frame #11: 0x00000001002151eb pyrogenesis`InitNonVisual(args=<no summary available>) at GameSetup.cpp:721:2 [opt] [artificial]
    frame #12: 0x0000000100004aaa pyrogenesis`RunGameOrAtlas(argc=<no summary available>, argv=<no summary available>) at main.cpp:672:4 [opt]
    frame #13: 0x00000001000035b6 pyrogenesis`main(argc=<no summary available>, argv=<no summary available>) at main.cpp:743:2 [opt]
    frame #14: 0x00007fff68073cc9 libdyld.dylib`start + 1
(lldb) 
#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.

#5639 invalid Not visible pictures at manual wiki Beau Silier
Description

Here is the list of manual pages, where are some pictures not showing up https://trac.wildfiregames.com/wiki/Manual_MainMenu 

https://trac.wildfiregames.com/wiki/Manual_GUI_Overview 

https://trac.wildfiregames.com/wiki/Manual_Buildings  --

#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.

#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.

#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)

#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.

#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.

#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.

#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 .

#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.

#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.)

#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.

#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 :)

#1122 fixed [PATCH] Add terrain eyedropper tool / show current texture ben historic_bruno
Description

Patch to add an eyedropper tool to Atlas, like what most paint programs have. It samples the terrain texture under the brush and makes it the currently selected texture. It's very handy for expanding texture areas. The patch also adds a box in the terrain panel to show current brush texture.

#1148 fixed Problem building Objective-C/C++ with Premake ben historic_bruno
Description

While working on #1145, I noticed there are problems building Objective-C/C++ code, used for the Cocoa API on OS X. Until now this hasn't been a problem, but I do need to write some Obj-C to solve that ticket. Premake supports Obj-C source files (*.m, *.mm) and GCC is capable of compiling them, so I think the problem is how we're using Premake.

The first issue is *.m and *.mm files are not being picked up when Premake searches for files to include in the project. That doesn't seem too difficult to fix, I just modified one line of premake4.lua. The other problem is that the C++ precompiled headers are automatically getting included in the Objective-C source, which is bad, many of the libraries can't be compiled in Obj-C and we don't need them, so we shouldn't even try that. I don't think we'll have enough Obj-C code that we'll need precompiled headers just for them, so maybe we can leave PCH out entirely for Obj-C source files?

I manually edited the Makefile and removed the PCH bits for my one Obj-C source file, everything compiled and ran fine, so we're tantalizingly close to supporting this :)

#1166 fixed [PATCH] Add <RubbleActor> tag in <VisualActor> Element for Building Templates ben michael
Description

It would be nice to have a <RubbleActor> tag added for the <VisualActor> element in building entity templates, like so:

  <VisualActor>
    <FoundationActor>structures/fndn_2x2.xml</FoundationActor>
    <Actor>props/special/palisade_rocks_outpost.xml</Actor>
    <RubbleActor>structures/rubble_2x2.xml</RubbleActor>
  </VisualActor>

The specified Rubble actor would appear on the ground when a building dies and collapses. It would then "decay" sink or fade at some specified rate. Perhaps with another new element, like:

  <RubbleDecay>
    <DelayTime>30.0</DelayTime>
    <SinkRate>0.5</SinkRate>
    <SinkAccel>0.5</SinkAccel>
  </RubbleDecay>

The above is similar to the <Decay> element, but specifically for the <RubbleActor>.

Like animal or human corpses, these "Rubble" actors can be built over. They have no obstruction or footprint.


This ticket has been split off from ticket #131.

Ticket #819 (Destruction dust) is related, but will possibly need a different solution.

#1167 fixed [PATCH] Improve COLLADA caching and add to archive builder ben historic_bruno
Description

Problems solved in this patch:

  • Modifying skeletons.xml should invalidate the model/animation cache, since the COLLADA converter depends on it for skeletal models, this will reduce modeling confusion
  • CColladaManager uses a weird old caching technique, it should use CCacheLoader instead, with hash keyed on skeletons.xml and converter version. Also essential for using archive builder
  • Archive builder should convert DAEs like it does textures and XML, this will give a slight performance boost and smaller release download, but the main benefit is not requiring the COLLADA converter
    • Note: it skips over broken DAEs, these would trigger errors if used in the game anyway, so there's no advantage in archiving them
  • Fixes archive builder on Windows, there was a minor OS path separator issue when mounting the archive cache
#1168 fixed [PATCH] civ typos ben bird
Description

Just fixed some typos in the civ history folder.

==

History section

-under Romans->heroes->Sulla

missing hyphen between dates

-Iberian heroes change to B.C. instead of BCE for consistency

==

sorry if I made any mistakes!

#1178 fixed precompiled.h: clang warnings about c-header ben historic_bruno
Description

Building on OS X with their Command Line Tools for Xcode - February 2012 package, I get warnings like the following related to precompiled.h:

precompiled.h
clang: warning: treating 'c-header' input as 'c++-header' when in C++ mode, this behavior is deprecated

Compiler info:

  • i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.9.00)
  • Apple clang version 3.1 (tags/Apple/clang-318.0.45) (based on LLVM 3.1svn) Target: x86_64-apple-darwin11.3.0 Thread model: posix

Philip noticed this last year and mentioned a possible solution.

#1181 fixed BOM in intro.txt ben bird
Description

Fixed the BOM that appears in the very beginning of the intro.txt file.

In-game, it got rendered as a '?'

Patch attached.

#1184 fixed [PATCH] Changing stance on garrisoning units causes instant garrison ben historic_bruno
Description

As reported on the forum, units will garrison instantly regardless of location when ordering them to garrison, then setting their stance to Passive, Defensive, or Stand. For some reason other stances don't cause this problem. This can be considered a fairly serious cheat.

#1188 fixed "Idle warrior button" doesn't get all idle warriors ben Erik Johansson
Description

When I press the idle warrior button to cycle through the idle warriors I only seem to be able to get to some of the idle warriors. As far as I can tell from some quick testing it could have something to do with the naming change from super units to champion units? I'll investigate further, but someone with more knowledge of the code could probably find out if that is indeed the case pretty quickly :) (And thus fix it if it indeed is the case ;) )

#1322 fixed [PATCH] FTBFS on Debian GNU/kfreebsd ben Vincent Cheng
Description

On Debian GNU/kfreebsd, 0 A.D. fails to build from source while building premake (Debian buildd logs can be found at [1]), because premake doesn't recognize Debian GNU/kFreeBSD as a valid BSD platform [2], and thinks we're running a build in a Windows environment instead. The following patch fixes this:

--- a/build/premake/premake4/src/host/premake.h
+++ b/build/premake/premake4/src/host/premake.h
@@ -15,7 +15,7 @@
 #if defined(__linux__)
 #define PLATFORM_LINUX    (1)
 #define PLATFORM_STRING   "linux"
-#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
+#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__FreeBSD_kernel__)
 #define PLATFORM_BSD      (1)
 #define PLATFORM_STRING   "bsd"
 #elif defined(__APPLE__) && defined(__MACH__)

#1326 fixed Implement copy/paste on OS X ben historic_bruno
Description

Pasteboards seem the way to go, as in NSPasteboard. We only need to worry about the 10.6+ API for now.

#1338 fixed [PATCH] Add 'learn to play' item to in-game menu ben rdxi
#1358 fixed [PATCH] Extend technology manager for template data ben historic_bruno
Description

The new tech system currently supports applying stat modifications to existing entities. But we often need the stats prior to creating the entity, for information/UI or e.g. using costs to calculate if we have sufficient resources to create the entity.

See below for discussion.

#1360 fixed [PATCH] Drop unused libboost dependencies ben fabio
Description

The attached patch remove unneded link-only dependencies on boost_system and boost_filesystem.

Tested on Linux.

#1375 fixed Technologies should support UTF-8 characters ben michael
Description

The specific names of a lot of techs will need support for UTF-8 characters.

The GUI already supports these characters for specific unit names.

#1381 fixed Alt+enter on Mac OS ben vls
Description

HW: MacBook Pro 13" 2011 (hd 3000) Mac OS 10.7.3 all updates include

After alt+enter critical error

Process:         pyrogenesis [35503]
Path:            /Applications/0ad.app/Contents/MacOS/pyrogenesis
Identifier:      com.wildfiregames.0ad
Version:         0.0.0 (0.0.0)
Code Type:       X86-64 (Native)
Parent Process:  launchd [110]

Date/Time:       2012-05-03 23:20:08.040 +0800
OS Version:      Mac OS X 10.7.3 (11D50b)
Report Version:  9

Interval Since Last Report:          685415 sec
Crashes Since Last Report:           2
Per-App Interval Since Last Report:  69 sec
Per-App Crashes Since Last Report:   1
Anonymous UUID:                      61127360-A7BD-48AD-A6DF-91C1B17E4BE8

Crashed Thread:  0  Dispatch queue: com.apple.main-thread

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x0000000000000000

VM Regions Near 0:
--> 
    __TEXT                 000000010677f000-0000000107150000 [  9.8M] r-x/rwx SM=COW  /Applications/0ad.app/Contents/MacOS/pyrogenesis

Application Specific Information:
objc[35503]: garbage collection is OFF

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   GLEngine                      	0x000000012b02cacc gleRunVertexSubmitImmediate + 972
1   GLEngine                      	0x000000012b01d2b4 gleDrawArraysOrElements_ExecCore + 1128
2   GLEngine                      	0x000000012afa9760 glDrawElements_Exec + 468
3   com.wildfiregames.0ad         	0x00000001069433cc CPatchRData::RenderStreams(std::vector<CPatchRData*, std::allocator<CPatchRData*> > const&, boost::shared_ptr<CShaderProgram> const&, int) + 838
4   com.wildfiregames.0ad         	0x000000010696ba1a TerrainRenderer::RenderPatches(bool) + 386
5   com.wildfiregames.0ad         	0x0000000106954fb2 CRenderer::RenderShadowMap() + 164
6   com.wildfiregames.0ad         	0x00000001069553e2 CRenderer::RenderSubmissions() + 472
7   com.wildfiregames.0ad         	0x0000000106955a8f CRenderer::RenderScene(Scene&) + 131
8   com.wildfiregames.0ad         	0x00000001068cff53 CGameView::Render() + 99
9   com.wildfiregames.0ad         	0x000000010689c370 Render() + 704
10  com.wildfiregames.0ad         	0x0000000106781c2f SDL_main + 4303
11  com.wildfiregames.0ad         	0x0000000106cd95f1 -[SDLMain applicationDidFinishLaunching:] + 97
12  com.apple.Foundation          	0x00007fff8412fd32 __-[NSNotificationCenter addObserver:selector:name:object:]_block_invoke_1 + 47
13  com.apple.CoreFoundation      	0x00007fff8d859aaa _CFXNotificationPost + 2634
14  com.apple.Foundation          	0x00007fff8411bfe7 -[NSNotificationCenter postNotificationName:object:userInfo:] + 65
15  com.apple.AppKit              	0x00007fff8787260f -[NSApplication _postDidFinishNotification] + 212
16  com.apple.AppKit              	0x00007fff87872375 -[NSApplication _sendFinishLaunchingNotification] + 78
17  com.apple.AppKit              	0x00007fff8787103c -[NSApplication(NSAppleEventHandling) _handleAEOpenEvent:] + 242
18  com.apple.AppKit              	0x00007fff87870d9d -[NSApplication(NSAppleEventHandling) _handleCoreEvent:withReplyEvent:] + 330
19  com.apple.CoreFoundation      	0x00007fff8d8a3591 -[NSObject performSelector:withObject:withObject:] + 65
20  com.apple.Foundation          	0x00007fff841527eb __-[NSAppleEventManager setEventHandler:andSelector:forEventClass:andEventID:]_block_invoke_1 + 101
21  com.apple.Foundation          	0x00007fff84151772 -[NSAppleEventManager dispatchRawAppleEvent:withRawReply:handlerRefCon:] + 283
22  com.apple.Foundation          	0x00007fff84151600 _NSAppleEventManagerGenericHandler + 105
23  com.apple.AE                  	0x00007fff868dbc25 aeDispatchAppleEvent(AEDesc const*, AEDesc*, unsigned int, unsigned char*) + 200
24  com.apple.AE                  	0x00007fff868dbb03 _ZL25dispatchEventAndSendReplyPK6AEDescPS_ + 38
25  com.apple.AE                  	0x00007fff868db9f7 aeProcessAppleEvent + 250
26  com.apple.HIToolbox           	0x00007fff89eb6af9 AEProcessAppleEvent + 102
27  com.apple.AppKit              	0x00007fff8786e1a9 _DPSNextEvent + 1247
28  com.apple.AppKit              	0x00007fff8786d861 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 135
29  com.apple.AppKit              	0x00007fff8786a19d -[NSApplication run] + 470
30  com.wildfiregames.0ad         	0x0000000106cd93d4 CustomApplicationMain + 548
31  com.wildfiregames.0ad         	0x0000000106cd99b0 main + 272
32  com.wildfiregames.0ad         	0x0000000106780834 start + 52

Thread 1:: Dispatch queue: com.apple.libdispatch-manager
0   libsystem_kernel.dylib        	0x00007fff88de17e6 kevent + 10
1   libdispatch.dylib             	0x00007fff8e6355be _dispatch_mgr_invoke + 923
2   libdispatch.dylib             	0x00007fff8e63414e _dispatch_mgr_thread + 54

Thread 2:
0   libsystem_kernel.dylib        	0x00007fff88de0bca __psynch_cvwait + 10
1   libsystem_c.dylib             	0x00007fff8ba40274 _pthread_cond_wait + 840
2   com.wildfiregames.0ad         	0x0000000106d5bf9b SDL_CondWaitTimeout + 235
3   com.wildfiregames.0ad         	0x0000000106d5b92e SDL_SemWaitTimeout + 158
4   com.wildfiregames.0ad         	0x0000000106d5b9bf SDL_SemWait + 31
5   com.wildfiregames.0ad         	0x0000000106890121 CUserReporterWorker::Run() + 581
6   com.wildfiregames.0ad         	0x000000010688f641 CUserReporterWorker::RunThread(void*) + 113
7   libsystem_c.dylib             	0x00007fff8ba3c8bf _pthread_start + 335
8   libsystem_c.dylib             	0x00007fff8ba3fb75 thread_start + 13

Thread 3:
0   libsystem_kernel.dylib        	0x00007fff88de0e42 __semwait_signal + 10
1   libsystem_c.dylib             	0x00007fff8b9f2dea nanosleep + 164
2   com.wildfiregames.0ad         	0x0000000106d6374c SDL_Delay + 108
3   com.wildfiregames.0ad         	0x0000000106d6379d RunTimer + 45
4   com.wildfiregames.0ad         	0x0000000106ce839f SDL_RunThread + 127
5   com.wildfiregames.0ad         	0x0000000106d5b448 RunThread + 24
6   libsystem_c.dylib             	0x00007fff8ba3c8bf _pthread_start + 335
7   libsystem_c.dylib             	0x00007fff8ba3fb75 thread_start + 13

Thread 4:
0   libsystem_kernel.dylib        	0x00007fff88de0bca __psynch_cvwait + 10
1   libsystem_c.dylib             	0x00007fff8ba40274 _pthread_cond_wait + 840
2   com.wildfiregames.0ad         	0x0000000106d5bf9b SDL_CondWaitTimeout + 235
3   com.wildfiregames.0ad         	0x0000000106d5b92e SDL_SemWaitTimeout + 158
4   com.wildfiregames.0ad         	0x0000000106d5b9bf SDL_SemWait + 31
5   com.wildfiregames.0ad         	0x000000010692500f CTextureConverter::RunThread(void*) + 715
6   libsystem_c.dylib             	0x00007fff8ba3c8bf _pthread_start + 335
7   libsystem_c.dylib             	0x00007fff8ba3fb75 thread_start + 13

Thread 5:: Dispatch queue: com.apple.opengl.cvmDoWork
0   libsystem_kernel.dylib        	0x00007fff88ddf67a mach_msg_trap + 10
1   libsystem_kernel.dylib        	0x00007fff88dded71 mach_msg + 73
2   libCoreVMClient.dylib         	0x00007fff83534b2f cvmsServ_BuildModularFunction + 184
3   libCoreVMClient.dylib         	0x00007fff83535bd7 CVMSBuildModularFunction + 75
4   libCVMSPluginSupport.dylib    	0x00007fff8846f701 cvm_deferred_build_modular(void*) + 234
5   libdispatch.dylib             	0x00007fff8e63510a _dispatch_queue_drain + 264
6   libdispatch.dylib             	0x00007fff8e634f66 _dispatch_queue_invoke + 54
7   libdispatch.dylib             	0x00007fff8e634760 _dispatch_worker_thread2 + 198
8   libsystem_c.dylib             	0x00007fff8ba3e3da _pthread_wqthread + 316
9   libsystem_c.dylib             	0x00007fff8ba3fb85 start_wqthread + 13

Thread 6:
0   libsystem_kernel.dylib        	0x00007fff88de1192 __workq_kernreturn + 10
1   libsystem_c.dylib             	0x00007fff8ba3e594 _pthread_wqthread + 758
2   libsystem_c.dylib             	0x00007fff8ba3fb85 start_wqthread + 13

Thread 0 crashed with X86 Thread State (64-bit):
  rax: 0x00000000000c2b03  rbx: 0x0000000000000600  rcx: 0x0000000000000000  rdx: 0x0000000000000000
  rdi: 0x00007fae2a9edc00  rsi: 0x0000000000000000  rbp: 0x00007fff6637d560  rsp: 0x00007fff6637d400
   r8: 0x0000000000000000   r9: 0x0000000000441808  r10: 0x0000000000000010  r11: 0x0000000000000202
  r12: 0x0000000000000600  r13: 0x0000000000000600  r14: 0x00007fae2a9edc00  r15: 0x0000000000000000
  rip: 0x000000012b02cacc  rfl: 0x0000000000010213  cr2: 0x0000000000000000
Logical CPU: 0

Binary Images:
       0x10677f000 -        0x10714ffe7 +com.wildfiregames.0ad (0.0.0 - 0.0.0) <8A1B1C65-F3B4-39C7-926B-7799F2FEB36B> /Applications/0ad.app/Contents/MacOS/pyrogenesis
       0x107552000 -        0x10757dfff  com.apple.audio.OpenAL (1.5.1 - 1.5.1) <5B954EC6-08B6-3255-932C-DDAB908E72F4> /System/Library/Frameworks/OpenAL.framework/Versions/A/OpenAL
       0x10758f000 -        0x10769cfff +libX11.6.dylib (10.0.0 - compatibility 10.0.0) <EDF51216-D36C-3012-B334-F2629DF08E68> /usr/X11/lib/libX11.6.dylib
       0x1076c6000 -        0x1076d7fff +libxcb.1.dylib (3.0.0 - compatibility 3.0.0) <D2A0CE9B-38FA-3ABD-8F02-2360A2475917> /usr/X11/lib/libxcb.1.dylib
       0x1076e4000 -        0x1076e5ff7  libCyrillicConverter.dylib (54.0.0 - compatibility 1.0.0) <C8D0607A-A668-36EE-AF03-866BD04B5611> /System/Library/CoreServices/Encodings/libCyrillicConverter.dylib
       0x1076e9000 -        0x1076eafff +libXau.6.dylib (7.0.0 - compatibility 7.0.0) <E6813580-AEC5-3CDC-BCC2-59DBFB67ADDE> /usr/X11/lib/libXau.6.dylib
       0x1076ee000 -        0x1076f1ff7 +libXdmcp.6.dylib (7.0.0 - compatibility 7.0.0) <A05CB37B-7FAC-3500-AFF5-E40D5F34198C> /usr/X11/lib/libXdmcp.6.dylib
       0x108d97000 -        0x108dc5ff7  GLRendererFloat (??? - ???) <0C213C61-C08C-3B5D-85A4-EB4660AF55BF> /System/Library/Frameworks/OpenGL.framework/Resources/GLRendererFloat.bundle/GLRendererFloat
       0x12af7f000 -        0x12b118fff  GLEngine (??? - ???) <8BA26192-A4D7-362D-8B57-5FCF4B706A25> /System/Library/Frameworks/OpenGL.framework/Resources/GLEngine.bundle/GLEngine
       0x12b14c000 -        0x12b245fff  libGLProgrammability.dylib (??? - ???) <B7710703-8652-36B8-83DD-4F216FAF0730> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLProgrammability.dylib
       0x12b26b000 -        0x12b676ff7  com.apple.driver.AppleIntelHD3000GraphicsGLDriver (7.18.11 - 7.1.8) <B3612412-7530-3FB9-AF32-C9433755CC76> /System/Library/Extensions/AppleIntelHD3000GraphicsGLDriver.bundle/Contents/MacOS/AppleIntelHD3000GraphicsGLDriver
    0x7fff6637f000 -     0x7fff663b3baf  dyld (195.6 - ???) <0CD1B35B-A28F-32DA-B72E-452EAD609613> /usr/lib/dyld
    0x7fff83160000 -     0x7fff83160fff  com.apple.ApplicationServices (41 - 41) <89B6AD5B-5C75-3E83-8C2B-AA7F4C55E400> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices
    0x7fff83169000 -     0x7fff83169fff  libkeymgr.dylib (23.0.0 - compatibility 1.0.0) <61EFED6A-A407-301E-B454-CD18314F0075> /usr/lib/system/libkeymgr.dylib
    0x7fff8316a000 -     0x7fff832a0fff  com.apple.vImage (5.1 - 5.1) <A08B7582-67BC-3EED-813A-4833645964A7> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vImage.framework/Versions/A/vImage
    0x7fff8352d000 -     0x7fff8352dfff  com.apple.Accelerate.vecLib (3.7 - vecLib 3.7) <C06A140F-6114-3B8B-B080-E509303145B8> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/vecLib
    0x7fff83534000 -     0x7fff83537fff  libCoreVMClient.dylib (??? - ???) <E034C772-4263-3F48-B083-25A758DD6228> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCoreVMClient.dylib
    0x7fff8353a000 -     0x7fff83586ff7  com.apple.SystemConfiguration (1.11.2 - 1.11) <A14F3583-9CC0-397D-A50E-17217075953F> /System/Library/Frameworks/SystemConfiguration.framework/Versions/A/SystemConfiguration
    0x7fff83587000 -     0x7fff835f7fff  com.apple.datadetectorscore (3.0 - 179.4) <B4C6417F-296C-31C1-BB94-980BFCDC9175> /System/Library/PrivateFrameworks/DataDetectorsCore.framework/Versions/A/DataDetectorsCore
    0x7fff83783000 -     0x7fff83823fff  com.apple.LaunchServices (480.27.1 - 480.27.1) <4DC96C1E-6FDE-305E-9718-E4C5C1341F56> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/LaunchServices
    0x7fff83852000 -     0x7fff8387dff7  libxslt.1.dylib (3.24.0 - compatibility 3.0.0) <4DB5ED11-004B-36B5-AE5F-2AB714754241> /usr/lib/libxslt.1.dylib
    0x7fff83fb7000 -     0x7fff83fcefff  com.apple.MultitouchSupport.framework (220.62.1 - 220.62.1) <3F8C015B-88AC-370F-B39D-B4665FB7616A> /System/Library/PrivateFrameworks/MultitouchSupport.framework/Versions/A/MultitouchSupport
    0x7fff84115000 -     0x7fff84118ff7  com.apple.securityhi (4.0 - 1) <7146CB8E-B754-3B0E-A74E-77E9138A81C5> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/SecurityHI.framework/Versions/A/SecurityHI
    0x7fff84119000 -     0x7fff84432ff7  com.apple.Foundation (6.7.1 - 833.24) <6D4E6F93-64EF-3D41-AE80-2BB10E2E6323> /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation
    0x7fff84433000 -     0x7fff84442ff7  libxar-nossl.dylib (??? - ???) <A6ABBFB9-E4ED-38AD-BBBB-F9958B9CEFB5> /usr/lib/libxar-nossl.dylib
    0x7fff84443000 -     0x7fff8475fff7  com.apple.CoreServices.CarbonCore (960.20 - 960.20) <C45CA09E-8867-3D67-BB2E-48D2E6B0D78C> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/CarbonCore
    0x7fff84a21000 -     0x7fff84a2bff7  liblaunch.dylib (392.35.0 - compatibility 1.0.0) <8F8BB206-CECA-33A5-A105-4A01C3ED5D23> /usr/lib/system/liblaunch.dylib
    0x7fff84a2c000 -     0x7fff84a37ff7  com.apple.speech.recognition.framework (4.0.19 - 4.0.19) <48607E6E-8612-3267-9184-E948B1863B32> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/SpeechRecognition.framework/Versions/A/SpeechRecognition
    0x7fff84a38000 -     0x7fff84a39fff  libDiagnosticMessagesClient.dylib (??? - ???) <3DCF577B-F126-302B-BCE2-4DB9A95B8598> /usr/lib/libDiagnosticMessagesClient.dylib
    0x7fff84a3a000 -     0x7fff84a4cff7  libsasl2.2.dylib (3.15.0 - compatibility 3.0.0) <6245B497-784B-355C-98EF-2DC6B45BF05C> /usr/lib/libsasl2.2.dylib
    0x7fff84a4d000 -     0x7fff84a63fff  libGL.dylib (??? - ???) <6A473BF9-4D35-34C6-9F8B-86B68091A9AF> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib
    0x7fff84a64000 -     0x7fff84a6cfff  libsystem_dnssd.dylib (??? - ???) <998E3778-7B43-301C-9053-12045AB8544D> /usr/lib/system/libsystem_dnssd.dylib
    0x7fff84a6d000 -     0x7fff84a6dfff  com.apple.vecLib (3.7 - vecLib 3.7) <9A58105C-B36E-35B5-812C-4ED693F2618F> /System/Library/Frameworks/vecLib.framework/Versions/A/vecLib
    0x7fff84c9a000 -     0x7fff84c9cfff  libquarantine.dylib (36.2.0 - compatibility 1.0.0) <48656562-FF20-3B55-9F93-407ACA7341C0> /usr/lib/system/libquarantine.dylib
    0x7fff859b2000 -     0x7fff85a79ff7  com.apple.ColorSync (4.7.1 - 4.7.1) <EA74B067-9916-341A-9C68-6165A4656042> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ColorSync.framework/Versions/A/ColorSync
    0x7fff85a8e000 -     0x7fff85b9bfff  libJP2.dylib (??? - ???) <F2B34A61-75F0-3BFE-A309-EE0DF4AF9E37> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ImageIO.framework/Versions/A/Resources/libJP2.dylib
    0x7fff85b9c000 -     0x7fff85bf0ff7  libFontRegistry.dylib (??? - ???) <F98926EF-FFA0-37C5-824C-02E436E21DD1> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/Resources/libFontRegistry.dylib
    0x7fff85bf1000 -     0x7fff85c01ff7  com.apple.opengl (1.7.6 - 1.7.6) <C168883D-9BC5-3C38-9937-42852D719718> /System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL
    0x7fff85c08000 -     0x7fff85c1dfff  com.apple.speech.synthesis.framework (4.0.74 - 4.0.74) <C061ECBB-7061-3A43-8A18-90633F943295> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/SpeechSynthesis.framework/Versions/A/SpeechSynthesis
    0x7fff85c6c000 -     0x7fff85c7fff7  libCRFSuite.dylib (??? - ???) <0B76941F-218E-30C8-B6DE-E15919F8DBEB> /usr/lib/libCRFSuite.dylib
    0x7fff85cac000 -     0x7fff85d30ff7  com.apple.ApplicationServices.ATS (317.5.0 - ???) <C2B254F0-6ED8-3313-9CFC-9ACD519C8A9E> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/ATS
    0x7fff85d3b000 -     0x7fff8601dfff  com.apple.security (7.0 - 55110) <252F9E04-FF8A-3EA7-A38E-51DD0653663C> /System/Library/Frameworks/Security.framework/Versions/A/Security
    0x7fff8602d000 -     0x7fff86030fff  libRadiance.dylib (??? - ???) <CD89D70D-F177-3BAE-8A26-644EA7D5E28E> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ImageIO.framework/Versions/A/Resources/libRadiance.dylib
    0x7fff86031000 -     0x7fff8606afe7  libssl.0.9.8.dylib (44.0.0 - compatibility 0.9.8) <79AAEC98-1258-3DA4-B1C0-4120049D390B> /usr/lib/libssl.0.9.8.dylib
    0x7fff8606b000 -     0x7fff86184fff  com.apple.DesktopServices (1.6.2 - 1.6.2) <6B83172E-F539-3AF8-A76D-1F9EA357B076> /System/Library/PrivateFrameworks/DesktopServicesPriv.framework/Versions/A/DesktopServicesPriv
    0x7fff86185000 -     0x7fff86185fff  com.apple.Carbon (153 - 153) <C1A30E01-E113-38A0-95CA-99360F92A37A> /System/Library/Frameworks/Carbon.framework/Versions/A/Carbon
    0x7fff86186000 -     0x7fff86239fff  com.apple.CoreText (220.11.0 - ???) <0322442E-0530-37E8-A7D6-AEFD909F0AFE> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreText.framework/Versions/A/CoreText
    0x7fff8686d000 -     0x7fff868d7ff7  com.apple.framework.IOKit (2.0 - ???) <EEEB42FD-E3E1-3A94-A771-B1993B694F17> /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit
    0x7fff868d8000 -     0x7fff86917fff  com.apple.AE (527.7 - 527.7) <B82F7ABC-AC8B-3507-B029-969DD5CA813D> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/AE.framework/Versions/A/AE
    0x7fff86918000 -     0x7fff8696cff7  com.apple.ScalableUserInterface (1.0 - 1) <33563775-C662-313D-B7FA-3D575A9F3D41> /System/Library/Frameworks/QuartzCore.framework/Versions/A/Frameworks/ScalableUserInterface.framework/Versions/A/ScalableUserInterface
    0x7fff869fd000 -     0x7fff86aa1fff  com.apple.ink.framework (1.3.2 - 110) <C8840EA4-AE7B-360C-A191-D36B5F10B6B5> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Ink.framework/Versions/A/Ink
    0x7fff86aa2000 -     0x7fff86aa8ff7  libunwind.dylib (30.0.0 - compatibility 1.0.0) <1E9C6C8C-CBE8-3F4B-A5B5-E03E3AB53231> /usr/lib/system/libunwind.dylib
    0x7fff86aa9000 -     0x7fff86aaafff  libunc.dylib (24.0.0 - compatibility 1.0.0) <337960EE-0A85-3DD0-A760-7134CF4C0AFF> /usr/lib/system/libunc.dylib
    0x7fff86abb000 -     0x7fff86abffff  libmathCommon.A.dylib (2026.0.0 - compatibility 1.0.0) <FF83AFF7-42B2-306E-90AF-D539C51A4542> /usr/lib/system/libmathCommon.A.dylib
    0x7fff86aca000 -     0x7fff86cf2fe7  com.apple.CoreData (104.1 - 358.13) <F1DA3110-C4DF-3F0A-A057-AEE78DE8C99D> /System/Library/Frameworks/CoreData.framework/Versions/A/CoreData
    0x7fff86d39000 -     0x7fff86d69ff7  com.apple.DictionaryServices (1.2.1 - 158.2) <3FC86118-7553-38F7-8916-B329D2E94476> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/DictionaryServices.framework/Versions/A/DictionaryServices
    0x7fff86d85000 -     0x7fff86ff8fff  com.apple.CoreImage (7.93 - 1.0.1) <0B7D855E-A2B6-3C14-A242-2CF2165C6E7E> /System/Library/Frameworks/QuartzCore.framework/Versions/A/Frameworks/CoreImage.framework/Versions/A/CoreImage
    0x7fff874d3000 -     0x7fff874d3fff  com.apple.Accelerate (1.7 - Accelerate 1.7) <82DDF6F5-FBC3-323D-B71D-CF7ABC5CF568> /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate
    0x7fff8765f000 -     0x7fff876a2ff7  libRIP.A.dylib (600.0.0 - compatibility 64.0.0) <85D00F5C-43ED-33A9-80B4-72EB0EAE3E25> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/Versions/A/Resources/libRIP.A.dylib
    0x7fff876a3000 -     0x7fff876a4fff  libdnsinfo.dylib (395.7.0 - compatibility 1.0.0) <37FEFE78-BCB5-37EC-8E99-747469BCA4C7> /usr/lib/system/libdnsinfo.dylib
    0x7fff877e1000 -     0x7fff877e2ff7  libremovefile.dylib (21.1.0 - compatibility 1.0.0) <739E6C83-AA52-3C6C-A680-B37FE2888A04> /usr/lib/system/libremovefile.dylib
    0x7fff87857000 -     0x7fff87864ff7  libbz2.1.0.dylib (1.0.5 - compatibility 1.0.0) <3373D310-3B10-3DD1-B754-B7B138CD448D> /usr/lib/libbz2.1.0.dylib
    0x7fff87865000 -     0x7fff88469fff  com.apple.AppKit (6.7.3 - 1138.32) <A9EB81C6-C519-3F29-89F1-42C3E8930281> /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit
    0x7fff8846a000 -     0x7fff8846dfff  com.apple.help (1.3.2 - 42) <BF14DE49-F7E8-336F-81FB-BBDF2DB3AC09> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Help.framework/Versions/A/Help
    0x7fff8846e000 -     0x7fff88470fff  libCVMSPluginSupport.dylib (??? - ???) <B2FC6EC0-1A0C-3482-A3C9-D08446E8713A> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCVMSPluginSupport.dylib
    0x7fff88471000 -     0x7fff88478fff  com.apple.NetFS (4.0 - 4.0) <433EEE54-E383-3505-9154-45B909FD3AF0> /System/Library/Frameworks/NetFS.framework/Versions/A/NetFS
    0x7fff88479000 -     0x7fff88482ff7  libsystem_notify.dylib (80.1.0 - compatibility 1.0.0) <A4D651E3-D1C6-3934-AD49-7A104FD14596> /usr/lib/system/libsystem_notify.dylib
    0x7fff8849c000 -     0x7fff8849dff7  libsystem_blocks.dylib (53.0.0 - compatibility 1.0.0) <8BCA214A-8992-34B2-A8B9-B74DEACA1869> /usr/lib/system/libsystem_blocks.dylib
    0x7fff88512000 -     0x7fff8858dff7  com.apple.print.framework.PrintCore (7.1 - 366.1) <3F140DEB-9F87-3672-97CC-F983752581AC> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/PrintCore.framework/Versions/A/PrintCore
    0x7fff885d3000 -     0x7fff885d3fff  com.apple.CoreServices (53 - 53) <043C8026-8EDD-3241-B090-F589E24062EF> /System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices
    0x7fff887ab000 -     0x7fff8894afff  com.apple.QuartzCore (1.7 - 270.2) <F2CCDEFB-DE43-3E32-B242-A22C82617186> /System/Library/Frameworks/QuartzCore.framework/Versions/A/QuartzCore
    0x7fff8898f000 -     0x7fff8899afff  com.apple.CommonAuth (2.1 - 2.0) <272CB600-6DA8-3952-97C0-5DC594DCA024> /System/Library/PrivateFrameworks/CommonAuth.framework/Versions/A/CommonAuth
    0x7fff889cc000 -     0x7fff88ac1fff  libiconv.2.dylib (7.0.0 - compatibility 7.0.0) <5C40E880-0706-378F-B864-3C2BD922D926> /usr/lib/libiconv.2.dylib
    0x7fff88ac2000 -     0x7fff88bc4ff7  libxml2.2.dylib (10.3.0 - compatibility 10.0.0) <22F1D1B6-1761-3687-9EFD-036EA15FB2E4> /usr/lib/libxml2.2.dylib
    0x7fff88bcc000 -     0x7fff88bd2fff  libmacho.dylib (800.0.0 - compatibility 1.0.0) <165514D7-1BFA-38EF-A151-676DCD21FB64> /usr/lib/system/libmacho.dylib
    0x7fff88bf2000 -     0x7fff88c77ff7  com.apple.Heimdal (2.1 - 2.0) <3758B442-6175-32B8-8C17-D8ABDD589BF9> /System/Library/PrivateFrameworks/Heimdal.framework/Versions/A/Heimdal
    0x7fff88dc3000 -     0x7fff88dc9fff  com.apple.DiskArbitration (2.4.1 - 2.4.1) <CEA34337-63DE-302E-81AA-10D717E1F699> /System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration
    0x7fff88dca000 -     0x7fff88deafff  libsystem_kernel.dylib (1699.24.8 - compatibility 1.0.0) <C56819BB-3779-3726-B610-4CF7B3ABB6F9> /usr/lib/system/libsystem_kernel.dylib
    0x7fff892a8000 -     0x7fff892a9ff7  libsystem_sandbox.dylib (??? - ???) <5087ADAD-D34D-3844-9D04-AFF93CED3D92> /usr/lib/system/libsystem_sandbox.dylib
    0x7fff89605000 -     0x7fff89622ff7  com.apple.openscripting (1.3.3 - ???) <4FACC89E-FDAA-3CA5-B5CD-1F4EEAEDF7CF> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/OpenScripting.framework/Versions/A/OpenScripting
    0x7fff89623000 -     0x7fff89671fff  libauto.dylib (??? - ???) <D8AC8458-DDD0-3939-8B96-B6CED81613EF> /usr/lib/libauto.dylib
    0x7fff89672000 -     0x7fff896adfff  com.apple.LDAPFramework (3.1 - 120.2) <5633BDE9-BDCB-35CC-BC6B-B8E4CD011D51> /System/Library/Frameworks/LDAP.framework/Versions/A/LDAP
    0x7fff89710000 -     0x7fff8974bfff  libsystem_info.dylib (??? - ???) <35F90252-2AE1-32C5-8D34-782C614D9639> /usr/lib/system/libsystem_info.dylib
    0x7fff89c12000 -     0x7fff89c12fff  com.apple.audio.units.AudioUnit (1.7.2 - 1.7.2) <04C10813-CCE5-3333-8C72-E8E35E417B3B> /System/Library/Frameworks/AudioUnit.framework/Versions/A/AudioUnit
    0x7fff89c13000 -     0x7fff89c29ff7  com.apple.ImageCapture (7.0 - 7.0) <F15FC6FB-9E88-3BE9-BABE-0454D3A502A0> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/ImageCapture.framework/Versions/A/ImageCapture
    0x7fff89c2a000 -     0x7fff89c38ff7  libkxld.dylib (??? - ???) <B1BD4862-9D3F-3EEF-895C-A8E2E53684B6> /usr/lib/system/libkxld.dylib
    0x7fff89c39000 -     0x7fff89d92fff  com.apple.audio.toolbox.AudioToolbox (1.7.2 - 1.7.2) <0AD8197C-1BA9-30CD-98F1-4CA2C6559BA8> /System/Library/Frameworks/AudioToolbox.framework/Versions/A/AudioToolbox
    0x7fff89e58000 -     0x7fff89e58fff  com.apple.Cocoa (6.6 - ???) <7EC4D759-B2A6-3A99-AC75-809FED1500C6> /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa
    0x7fff89e59000 -     0x7fff89e7dfff  com.apple.RemoteViewServices (1.3 - 44) <21D7A0E7-6699-37AB-AE6C-BF69AF3D61C2> /System/Library/PrivateFrameworks/RemoteViewServices.framework/Versions/A/RemoteViewServices
    0x7fff89e7e000 -     0x7fff89ea5ff7  com.apple.PerformanceAnalysis (1.10 - 10) <DD87C994-66D6-330A-BAF9-AB86BE125A62> /System/Library/PrivateFrameworks/PerformanceAnalysis.framework/Versions/A/PerformanceAnalysis
    0x7fff89ea6000 -     0x7fff8a1d0ff7  com.apple.HIToolbox (1.8 - ???) <D6A0D513-4893-35B4-9FFE-865FF419F2C2> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/HIToolbox
    0x7fff8a1d1000 -     0x7fff8a273ff7  com.apple.securityfoundation (5.0 - 55107) <6C2E7362-CB11-3CBD-BB1C-348E4B10F25A> /System/Library/Frameworks/SecurityFoundation.framework/Versions/A/SecurityFoundation
    0x7fff8a27f000 -     0x7fff8a2acfe7  libSystem.B.dylib (159.1.0 - compatibility 1.0.0) <7BEBB139-50BB-3112-947A-F4AA168F991C> /usr/lib/libSystem.B.dylib
    0x7fff8a394000 -     0x7fff8a42aff7  libvMisc.dylib (325.4.0 - compatibility 1.0.0) <642D8D54-F9F5-3FBB-A96C-EEFE94C6278B> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvMisc.dylib
    0x7fff8a567000 -     0x7fff8a56cfff  libGIF.dylib (??? - ???) <393E2DB5-9479-39A6-A75A-B5F20B852532> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ImageIO.framework/Versions/A/Resources/libGIF.dylib
    0x7fff8a635000 -     0x7fff8a642fff  libCSync.A.dylib (600.0.0 - compatibility 64.0.0) <CBA71562-050B-3515-92B7-8BC1E2EEEF2A> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/Versions/A/Resources/libCSync.A.dylib
    0x7fff8a65e000 -     0x7fff8a742e5f  libobjc.A.dylib (228.0.0 - compatibility 1.0.0) <871E688B-CF57-3BC7-80D6-F6476DFF109B> /usr/lib/libobjc.A.dylib
    0x7fff8a74d000 -     0x7fff8a7e7ff7  com.apple.SearchKit (1.4.0 - 1.4.0) <4E70C394-773E-3A4B-A93C-59A88ABA9509> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SearchKit.framework/Versions/A/SearchKit
    0x7fff8aee4000 -     0x7fff8af67fef  com.apple.Metadata (10.7.0 - 627.28) <1C14033A-69C9-3757-B24D-5583AEAC2CBA> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/Metadata.framework/Versions/A/Metadata
    0x7fff8b1df000 -     0x7fff8b1e4fff  libcompiler_rt.dylib (6.0.0 - compatibility 1.0.0) <98ECD5F6-E85C-32A5-98CD-8911230CB66A> /usr/lib/system/libcompiler_rt.dylib
    0x7fff8b1e5000 -     0x7fff8b23dfff  libTIFF.dylib (??? - ???) <DD797FBE-9B63-3785-A9EA-0321D113538B> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ImageIO.framework/Versions/A/Resources/libTIFF.dylib
    0x7fff8b23e000 -     0x7fff8b243fff  libpam.2.dylib (3.0.0 - compatibility 3.0.0) <D952F17B-200A-3A23-B9B2-7C1F7AC19189> /usr/lib/libpam.2.dylib
    0x7fff8b2a1000 -     0x7fff8b37ffff  com.apple.ImageIO.framework (3.1.1 - 3.1.1) <DB530A63-8ECF-3B53-AC9A-1692A5397E2F> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ImageIO.framework/Versions/A/ImageIO
    0x7fff8b388000 -     0x7fff8b39aff7  libz.1.dylib (1.2.5 - compatibility 1.0.0) <30CBEF15-4978-3DED-8629-7109880A19D4> /usr/lib/libz.1.dylib
    0x7fff8b487000 -     0x7fff8b4a3ff7  com.apple.GenerationalStorage (1.0 - 126.1) <509F52ED-E54B-3FEF-B3C2-759387B826E6> /System/Library/PrivateFrameworks/GenerationalStorage.framework/Versions/A/GenerationalStorage
    0x7fff8b4a4000 -     0x7fff8b4afff7  libc++abi.dylib (14.0.0 - compatibility 1.0.0) <8FF3D766-D678-36F6-84AC-423C878E6D14> /usr/lib/libc++abi.dylib
    0x7fff8b524000 -     0x7fff8b53bfff  com.apple.CFOpenDirectory (10.7 - 146) <E71AE4A2-F72B-35F2-9043-9F45CF75F11A> /System/Library/Frameworks/OpenDirectory.framework/Versions/A/Frameworks/CFOpenDirectory.framework/Versions/A/CFOpenDirectory
    0x7fff8b743000 -     0x7fff8b747fff  libCGXType.A.dylib (600.0.0 - compatibility 64.0.0) <37517279-C92E-3217-B49A-838198B48787> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/Versions/A/Resources/libCGXType.A.dylib
    0x7fff8b748000 -     0x7fff8b74aff7  com.apple.print.framework.Print (7.1 - 247.1) <8A4925A5-BAA3-373C-9B5D-03E0270C6B12> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Print.framework/Versions/A/Print
    0x7fff8b74b000 -     0x7fff8b78aff7  libGLImage.dylib (??? - ???) <348729DC-BC44-3744-B249-9DFA6498344A> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLImage.dylib
    0x7fff8b78b000 -     0x7fff8b792ff7  com.apple.CommerceCore (1.0 - 17) <3894FE48-EDCE-30E9-9796-E2F959D92704> /System/Library/PrivateFrameworks/CommerceKit.framework/Versions/A/Frameworks/CommerceCore.framework/Versions/A/CommerceCore
    0x7fff8b793000 -     0x7fff8b875fff  com.apple.CoreServices.OSServices (478.37 - 478.37) <1DAC695E-0D0F-3AE2-974F-A173E69E67CC> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/OSServices.framework/Versions/A/OSServices
    0x7fff8b876000 -     0x7fff8b87dfff  libcopyfile.dylib (85.1.0 - compatibility 1.0.0) <0AB51EE2-E914-358C-AC19-47BC024BDAE7> /usr/lib/system/libcopyfile.dylib
    0x7fff8b935000 -     0x7fff8b95bff7  com.apple.framework.familycontrols (3.0 - 300) <DC06CF3A-2F10-3867-9498-CADAE30D0CE4> /System/Library/PrivateFrameworks/FamilyControls.framework/Versions/A/FamilyControls
    0x7fff8b9ee000 -     0x7fff8bacbfef  libsystem_c.dylib (763.12.0 - compatibility 1.0.0) <FF69F06E-0904-3C08-A5EF-536FAFFFDC22> /usr/lib/system/libsystem_c.dylib
    0x7fff8bacc000 -     0x7fff8bae0ff7  com.apple.LangAnalysis (1.7.0 - 1.7.0) <04C31EF0-912A-3004-A08F-CEC27030E0B2> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/LangAnalysis.framework/Versions/A/LangAnalysis
    0x7fff8bae1000 -     0x7fff8bf0efff  libLAPACK.dylib (??? - ???) <4F2E1055-2207-340B-BB45-E4F16171EE0D> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLAPACK.dylib
    0x7fff8bf91000 -     0x7fff8bfb0fff  libresolv.9.dylib (46.1.0 - compatibility 1.0.0) <0635C52D-DD53-3721-A488-4C6E95607A74> /usr/lib/libresolv.9.dylib
    0x7fff8bfb1000 -     0x7fff8bfb6ff7  libsystem_network.dylib (??? - ???) <5DE7024E-1D2D-34A2-80F4-08326331A75B> /usr/lib/system/libsystem_network.dylib
    0x7fff8bfb7000 -     0x7fff8bffdff7  libcurl.4.dylib (7.0.0 - compatibility 7.0.0) <01DD0773-236C-3AC3-B43B-07911F458767> /usr/lib/libcurl.4.dylib
    0x7fff8bffe000 -     0x7fff8c038fe7  com.apple.DebugSymbols (2.1 - 87) <149201BE-A8A4-3E40-AD65-E5194B59162E> /System/Library/PrivateFrameworks/DebugSymbols.framework/Versions/A/DebugSymbols
    0x7fff8c039000 -     0x7fff8c062fff  libJPEG.dylib (??? - ???) <64D079F9-256A-323B-A837-84628B172F21> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ImageIO.framework/Versions/A/Resources/libJPEG.dylib
    0x7fff8c063000 -     0x7fff8c0c9ff7  com.apple.coreui (1.2.1 - 165.3) <378C9221-ADE6-36D9-9944-F33AE6904E4F> /System/Library/PrivateFrameworks/CoreUI.framework/Versions/A/CoreUI
    0x7fff8c0ca000 -     0x7fff8c0eafff  libPng.dylib (??? - ???) <F4D84592-C450-3076-88E9-8E6517C7EF33> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ImageIO.framework/Versions/A/Resources/libPng.dylib
    0x7fff8c0eb000 -     0x7fff8c12bff7  libcups.2.dylib (2.9.0 - compatibility 2.0.0) <29DE948E-38C4-3CC5-B528-40C691380607> /usr/lib/libcups.2.dylib
    0x7fff8c12c000 -     0x7fff8c157ff7  com.apple.CoreServicesInternal (113.12 - 113.12) <C37DAC1A-35D2-30EC-9112-5EEECED5C461> /System/Library/PrivateFrameworks/CoreServicesInternal.framework/Versions/A/CoreServicesInternal
    0x7fff8c158000 -     0x7fff8c15efff  IOSurface (??? - ???) <03F95CAC-569C-3573-B3D7-2D211B8BDC56> /System/Library/Frameworks/IOSurface.framework/Versions/A/IOSurface
    0x7fff8c15f000 -     0x7fff8c183fff  com.apple.Kerberos (1.0 - 1) <1F826BCE-DA8F-381D-9C4C-A36AA0EA1CB9> /System/Library/Frameworks/Kerberos.framework/Versions/A/Kerberos
    0x7fff8c187000 -     0x7fff8c28cfff  libFontParser.dylib (??? - ???) <0920DA16-2066-33E6-BF95-AD4B0F3C22B0> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/Resources/libFontParser.dylib
    0x7fff8c28d000 -     0x7fff8c2e8ff7  com.apple.HIServices (1.11 - ???) <DE8FA7FA-0A41-35D9-8473-5104F81DA934> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/HIServices
    0x7fff8c2e9000 -     0x7fff8c349fff  libvDSP.dylib (325.4.0 - compatibility 1.0.0) <3A7521E6-5510-3FA7-AB65-79693A7A5839> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvDSP.dylib
    0x7fff8c34a000 -     0x7fff8c39cff7  libGLU.dylib (??? - ???) <3C9153A0-8499-3DC0-AAA4-9FA6E488BE13> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLU.dylib
    0x7fff8c39d000 -     0x7fff8c504ff7  com.apple.CFNetwork (520.3.2 - 520.3.2) <516B611D-E53E-3467-9211-3C5B86ABA865> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CFNetwork.framework/Versions/A/CFNetwork
    0x7fff8c52f000 -     0x7fff8c571ff7  libcommonCrypto.dylib (55010.0.0 - compatibility 1.0.0) <BB770C22-8C57-365A-8716-4A3C36AE7BFB> /usr/lib/system/libcommonCrypto.dylib
    0x7fff8c572000 -     0x7fff8c573fff  liblangid.dylib (??? - ???) <CACBE3C3-2F7B-3EED-B50E-EDB73F473B77> /usr/lib/liblangid.dylib
    0x7fff8c574000 -     0x7fff8c582fff  com.apple.NetAuth (3.1 - 3.1) <FE7EC4D7-5632-3B8D-9094-A0AC8D60EDEE> /System/Library/PrivateFrameworks/NetAuth.framework/Versions/A/NetAuth
    0x7fff8c6c6000 -     0x7fff8c8c8fff  libicucore.A.dylib (46.1.0 - compatibility 1.0.0) <38CD6ED3-C8E4-3CCD-89AC-9C3198803101> /usr/lib/libicucore.A.dylib
    0x7fff8c8c9000 -     0x7fff8c8f6ff7  com.apple.opencl (1.50.69 - 1.50.69) <687265AF-E9B6-3537-89D7-7C12EB38193D> /System/Library/Frameworks/OpenCL.framework/Versions/A/OpenCL
    0x7fff8d103000 -     0x7fff8d176fff  libstdc++.6.dylib (52.0.0 - compatibility 7.0.0) <6BDD43E4-A4B1-379E-9ED5-8C713653DFF2> /usr/lib/libstdc++.6.dylib
    0x7fff8d177000 -     0x7fff8d27efe7  libsqlite3.dylib (9.6.0 - compatibility 9.0.0) <EE02BB01-64C9-304D-9719-A35F5CD6D04C> /usr/lib/libsqlite3.dylib
    0x7fff8d378000 -     0x7fff8d3a0ff7  com.apple.CoreVideo (1.7 - 70.1) <98F917B2-FB53-3EA3-B548-7E97B38309A7> /System/Library/Frameworks/CoreVideo.framework/Versions/A/CoreVideo
    0x7fff8d7cb000 -     0x7fff8d7feff7  com.apple.GSS (2.1 - 2.0) <57AD81CE-6320-38C9-9B66-0E5A4DEA898A> /System/Library/Frameworks/GSS.framework/Versions/A/GSS
    0x7fff8d80d000 -     0x7fff8d9e1fff  com.apple.CoreFoundation (6.7.1 - 635.19) <57B77925-9065-38C9-A05B-02F4F9ED007C> /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation
    0x7fff8dc23000 -     0x7fff8e0eafff  FaceCoreLight (1.4.7 - compatibility 1.0.0) <E9D2A69C-6E81-358C-A162-510969F91490> /System/Library/PrivateFrameworks/FaceCoreLight.framework/Versions/A/FaceCoreLight
    0x7fff8e0eb000 -     0x7fff8e1f7fff  libcrypto.0.9.8.dylib (44.0.0 - compatibility 0.9.8) <3A8E1F89-5E26-3C8B-B538-81F5D61DBF8A> /usr/lib/libcrypto.0.9.8.dylib
    0x7fff8e1f8000 -     0x7fff8e239fff  com.apple.QD (3.40 - ???) <47674D2C-BE88-388E-B1B0-03F08BFFE5FD> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/QD.framework/Versions/A/QD
    0x7fff8e253000 -     0x7fff8e255fff  com.apple.TrustEvaluationAgent (2.0 - 1) <1F31CAFF-C1C6-33D3-94E9-11B721761DDF> /System/Library/PrivateFrameworks/TrustEvaluationAgent.framework/Versions/A/TrustEvaluationAgent
    0x7fff8e274000 -     0x7fff8e286ff7  libbsm.0.dylib (??? - ???) <349BB16F-75FA-363F-8D98-7A9C3FA90A0D> /usr/lib/libbsm.0.dylib
    0x7fff8e287000 -     0x7fff8e28cfff  libcache.dylib (47.0.0 - compatibility 1.0.0) <1571C3AB-BCB2-38CD-B3B2-C5FC3F927C6A> /usr/lib/system/libcache.dylib
    0x7fff8e28d000 -     0x7fff8e291ff7  com.apple.CommonPanels (1.2.5 - 94) <37C6540B-F8D1-355A-806C-F93D8FB522AB> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/CommonPanels.framework/Versions/A/CommonPanels
    0x7fff8e632000 -     0x7fff8e640fff  libdispatch.dylib (187.7.0 - compatibility 1.0.0) <712AAEAC-AD90-37F7-B71F-293FF8AE8723> /usr/lib/system/libdispatch.dylib
    0x7fff8e641000 -     0x7fff8e645fff  libdyld.dylib (195.5.0 - compatibility 1.0.0) <380C3F44-0CA7-3514-8080-46D1C9DF4FCD> /usr/lib/system/libdyld.dylib
    0x7fff8e96a000 -     0x7fff8e987fff  libxpc.dylib (77.18.0 - compatibility 1.0.0) <26C05F31-E809-3B47-AF42-1460971E3AC3> /usr/lib/system/libxpc.dylib
    0x7fff8e988000 -     0x7fff8e9fdff7  libc++.1.dylib (19.0.0 - compatibility 1.0.0) <C0EFFF1B-0FEB-3F99-BE54-506B35B555A9> /usr/lib/libc++.1.dylib
    0x7fff8ea67000 -     0x7fff8f3f77a7  com.apple.CoreGraphics (1.600.0 - ???) <177D9BAD-72C9-3ADF-A391-5B88C5EE623F> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/Versions/A/CoreGraphics
    0x7fff8f3f8000 -     0x7fff8f45aff7  com.apple.Symbolication (1.3 - 91) <B072970E-9EC1-3495-A1FA-D344C6E74A13> /System/Library/PrivateFrameworks/Symbolication.framework/Versions/A/Symbolication
    0x7fff8f67a000 -     0x7fff8f6e2ff7  com.apple.audio.CoreAudio (4.0.2 - 4.0.2) <DFD8F4DE-3B45-3A2E-9CBE-FD8D5DD30923> /System/Library/Frameworks/CoreAudio.framework/Versions/A/CoreAudio
    0x7fff8f6e3000 -     0x7fff8f6e9fff  libGFXShared.dylib (??? - ???) <B95E9B22-AE68-3E48-8733-00CCCA08D50E> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGFXShared.dylib
    0x7fff8f845000 -     0x7fff8f84afff  com.apple.OpenDirectory (10.7 - 146) <A674AB55-6E3D-39AE-9F9B-9865D0193020> /System/Library/Frameworks/OpenDirectory.framework/Versions/A/OpenDirectory
    0x7fff8f850000 -     0x7fff8f8c6fff  com.apple.CoreSymbolication (2.2 - 73.2) <126415E3-3A35-315B-B4B7-507CDBED0D58> /System/Library/PrivateFrameworks/CoreSymbolication.framework/Versions/A/CoreSymbolication
    0x7fff8f8c7000 -     0x7fff8feabfff  libBLAS.dylib (??? - ???) <C34F6D88-187F-33DC-8A68-C0C9D1FA36DF> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib

External Modification Summary:
  Calls made by other processes targeting this process:
    task_for_pid: 3
    thread_create: 0
    thread_set_state: 0
  Calls made by this process:
    task_for_pid: 0
    thread_create: 0
    thread_set_state: 0
  Calls made by all processes on this machine:
    task_for_pid: 57447
    thread_create: 1
    thread_set_state: 0

VM Region Summary:
ReadOnly portion of Libraries: Total=165.5M resident=107.9M(65%) swapped_out_or_unallocated=57.6M(35%)
Writable regions: Total=219.7M written=104.2M(47%) resident=142.1M(65%) swapped_out=0K(0%) unallocated=77.6M(35%)
 
REGION TYPE                        VIRTUAL
===========                        =======
CG backing stores                    7356K
CG image                               12K
CG raster data                         64K
CG shared images                     3448K
CoreGraphics                           16K
CoreServices                         1828K
IOKit                                 9.9M
JS JIT generated code                4128K
JS JIT generated code (reserved)      192K        reserved VM address space (unallocated)
MALLOC                              120.9M
MALLOC guard page                      32K
Memory tag=240                          4K
Memory tag=242                         12K
Memory tag=251                          8K
OpenGL GLSL                          1372K
OpenGL GLSL (reserved)                128K        reserved VM address space (unallocated)
STACK GUARD                          56.0M
Stack                                11.0M
VM_ALLOCATE                         564.5M
__CI_BITMAP                            80K
__DATA                               12.5M
__IMAGE                               528K
__LINKEDIT                           53.4M
__TEXT                              112.1M
__UNICODE                             544K
mapped file                          39.6M
shared memory                        2764K
===========                        =======
TOTAL                                 1.0G
TOTAL, minus reserved VM space        1.0G

Model: MacBookPro8,1, BootROM MBP81.0047.B27, 2 processors, Intel Core i5, 2.4 GHz, 4 GB, SMC 1.68f98
Graphics: Intel HD Graphics 3000, Intel HD Graphics 3000, Built-In, 384 MB
Memory Module: BANK 0/DIMM0, 2 GB, DDR3, 1333 MHz, 0x80CE, 0x4D34373142353737334448302D4348392020
Memory Module: BANK 1/DIMM0, 2 GB, DDR3, 1333 MHz, 0x80CE, 0x4D34373142353737334448302D4348392020
AirPort: spairport_wireless_card_type_airport_extreme (0x14E4, 0xD6), Broadcom BCM43xx 1.0 (5.100.98.75.19)
Bluetooth: Version 4.0.3f12, 2 service, 18 devices, 1 incoming serial ports
Network Service: Wi-Fi, AirPort, en1
Serial ATA Device: ST9500325ASG, 500,11 GB
Serial ATA Device: MATSHITADVD-R   UJ-8A8
USB Device: hub_device, 0x0424  (SMSC), 0x2513, 0xfd100000 / 2
USB Device: IR Receiver, apple_vendor_id, 0x8242, 0xfd110000 / 3
USB Device: FaceTime HD Camera (Built-in), apple_vendor_id, 0x8509, 0xfa200000 / 3
USB Device: hub_device, 0x0424  (SMSC), 0x2513, 0xfa100000 / 2
USB Device: BRCM2070 Hub, 0x0a5c  (Broadcom Corp.), 0x4500, 0xfa110000 / 5
USB Device: Bluetooth USB Host Controller, apple_vendor_id, 0x821a, 0xfa113000 / 7
USB Device: Apple Internal Keyboard / Trackpad, apple_vendor_id, 0x0253, 0xfa120000 / 4

#1398 fixed Atlas doesn't set the civs properly by default ben FeXoR
Description

To reproduce:

  • Edit a rms script to raise an error (remove a closing bracket for example)
  • Open Atlas (in this order because rms scripts are not reloaded when generated previously, another "bug" btw)
  • Load that "wrong" map to enforce an error

-> The player settings will now be reset (which is bad on it's own)

  • Generate a working map (without changing the player settings)

-> All players civs will be undefined (and fall back to Athenians ATM) though the GUI says something else

This is not an rmgen issue but an Atlas issue so I don't know how to fix that.

#1410 fixed Improve technology manager event passing ben historic_bruno
Description

The current tech manager uses a mix of one-time events and polling. We mostly use polling, which is adequate for some but not all planned techs (see TechnologyManager.ApplyModifications). There is some overhead involved in the polling: an entity component needs to find its owner ID, find the associated player entity, then query the tech manager. So an event might be better for frequently accessed data.

The main problem is components that need complex behavior in response to techs. Health needs to allow increasing the max hitpoints for an entity yet maintain its current health level as a percentage (imagine a unit at 50/100 HP; after a +50 max HP tech, it should become 75/150 HP). But an entity can change ownership, in fact every entity starts without an owner (thus no research), and techs are player-specific. A single event at time of research is inadequate for these cases.

Instead, the tech manager should be modified to send a message not only when a tech is first researched but also when ownership of an entity changes. This will simplify the logic in other components as they will only handle a single message to update their cached state (rather than both polling and handling messages). Some non-trivial redesign of the manager and its caching may be required to achieve this.

#1438 fixed [PATCH] Sort out Windows log path pre-Vista ben historic_bruno
Description

With Alpha 10, the Windows data paths for the game have changed, see #1145. Logs are placed in "local application data" but Windows Vista changed the layout of application data to be more explicitly divided between roaming and local. There's a new environment variable since Vista, %localappdata%, typically used to refer to the new path for convenience. But it doesn't exist on XP and there's no equivalent, so a path constructed with %localappdata% will fail. Here's a comparison to show what we're dealing with:

  • XP/2000: C:\Documents and Settings\Ben\Local Settings\Application Data\
  • Vista+: C:\Users\Ben\AppData\Local\

It's tempting to simply use e.g. "%userprofile%\Local Settings\Application Data\" as a hack, but apparently the path is localized so that would fail for many of our users (in German it's "\Lokale Einstellungen\Anwendungsdaten\").

So there's two problems. We need a consistent way of telling Windows users how to find and access the game's logs. And we need to automate this so we don't have to mention messy details like %localappdata% in the first place. If feasible, we should put the logic into the existing OpenLogsFolder.bat. If not feasible, we should delete the batch file and make a single Trac page with clear instructions. Likewise README.txt is currently incorrect and outdated.

We need one place we can refer people for finding logs and crash dumps in Windows.

(Of course really idealistically we would have an automated error reporter tool #192/#193 and nobody would care where they were stored, but this is a short term fix)

#1469 fixed Replace info icon in civilization info dialog ben andrew123
Description

Screenshot:

#1478 fixed [PATCH] Broken animation causing infinite loop in archive builder ben historic_bruno
Description

Got this report from ricotz in IRC. When the archive builder hits shark_walk.dae (which is currently broken due to incomplete skeletons.xml) it apparently enters an infinite loop and eventually runs out of memory. I couldn't reproduce this on Windows, it throws an exception, logs the error and continues as expected.

Here's a call stack after interrupting the program: http://paste.debian.net/plain/172273

binaries/data/mods/public/art/animation/quadraped/shark_walk.dae

Program received signal SIGABRT, Aborted.
0x00007ffff44f7445 in __GI_raise (sig=<optimized out>) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
64	../nptl/sysdeps/unix/sysv/linux/raise.c: Datei oder Verzeichnis nicht gefunden.
(gdb) bt
#0  0x00007ffff44f7445 in __GI_raise (sig=<optimized out>) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
#1  0x00007ffff44fabab in __GI_abort () at abort.c:91
#2  0x00007ffff4defc6d in __gnu_cxx::__verbose_terminate_handler() () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#3  0x00007ffff4dedd76 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#4  0x00007ffff4dedda3 in std::terminate() () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#5  0x00007ffff4dedfce in __cxa_throw () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#6  0x00007ffff4dee4ad in operator new(unsigned long) () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#7  0x00007fffe6568a89 in allocate (__n=<optimized out>, this=<optimized out>) at /usr/include/c++/4.7/ext/new_allocator.h:94
#8  _M_allocate (__n=<optimized out>, this=<optimized out>) at /usr/include/c++/4.7/bits/stl_vector.h:169
#9  std::vector<BoneTransform, std::allocator<BoneTransform> >::_M_insert_aux (this=this@entry=0x7fffffffc250, __position=..., __x=...) at /usr/include/c++/4.7/bits/vector.tcc:343
#10 0x00007fffe656942f in insert (__x=..., __position=..., this=0x7fffffffc250) at /usr/include/c++/4.7/bits/vector.tcc:128
#11 operator= (__value=..., this=<synthetic pointer>) at /usr/include/c++/4.7/bits/stl_iterator.h:634
#12 __copy_m<BoneTransform*, std::insert_iterator<std::vector<BoneTransform> > > (__result=..., __last=0xbb473c, __first=0xbb44d4) at /usr/include/c++/4.7/bits/stl_algobase.h:329
#13 __copy_move_a<false, BoneTransform*, std::insert_iterator<std::vector<BoneTransform> > > (__result=..., __last=0xbb473c, __first=0xbb4480) at /usr/include/c++/4.7/bits/stl_algobase.h:384
#14 __copy_move_a2<false, __gnu_cxx::__normal_iterator<BoneTransform*, std::vector<BoneTransform> >, std::insert_iterator<std::vector<BoneTransform> > > (__result=..., __last=..., __first=...)
    at /usr/include/c++/4.7/bits/stl_algobase.h:422
#15 copy<__gnu_cxx::__normal_iterator<BoneTransform*, std::vector<BoneTransform> >, std::insert_iterator<std::vector<BoneTransform> > > (__result=..., __last=..., __first=...)
    at /usr/include/c++/4.7/bits/stl_algobase.h:454
#16 PSAConvert::ColladaToPSA (input=<optimized out>, output=..., xmlErrors=...) at ../../../source/collada/PSAConvert.cpp:133
#17 0x00007fffe6569ee0 in convert_dae_to_whatever (
    dae=0xb83cb8 "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<COLLADA xmlns=\"http://www.collada.org/2005/11/COLLADASchema\" version=\"1.4.1\">\n  <asset>\n    <contributor>\n      <author>Blender User</author>\n      <authoring_t"..., writer=0x5c9140 <(anonymous namespace)::ColladaOutput(void*, char const*, unsigned int)>, cb_data=0x7fffffffd5c0, 
    conv=0x7fffe65684a0 <ColladaToPSA(char const*, OutputCB&, std::string&)>) at ../../../source/collada/DLL.cpp:116
#18 0x00000000005cadbd in Convert (type=<optimized out>, pmdFilename=..., daeFilename=..., this=0xb16460) at ../../../source/graphics/ColladaManager.cpp:154
#19 CColladaManager::GenerateCachedFile (this=<optimized out>, sourcePath=..., type=CColladaManager::PSA, archiveCachePath=...) at ../../../source/graphics/ColladaManager.cpp:316
#20 0x000000000056f0f4 in CArchiveBuilder::Build (this=0x7fffffffdb00, archive=..., compress=<optimized out>) at ../../../source/ps/ArchiveBuilder.cpp:137
#21 0x0000000000423f6c in RunGameOrAtlas (argc=argc@entry=3, argv=argv@entry=0x7fffffffdeb8) at ../../../source/main.cpp:515
#22 0x000000000041a327 in main (argc=3, argv=0x7fffffffdeb8) at ../../../source/main.cpp:572
#1489 fixed [PATCH] Add UI command/hotkey to override enemy gather with attack ben Peter
Description

When I clicked on field of enemy, my soldiers start harvesting, I think they were supposed to attack it =) I guess u need to change it

#1503 fixed [PATCH] messages.js: handleNetMessage() obj.caption overwritten ben picobyte
Description

There are missing break statements in messages.js: handleNetMessage() causing obj.caption to be overwritten.

#1523 fixed [PATCH] Persian archers regress to normal bows in attack animation ben Doménique
Description

I noticed that the Persion infantry archers and the hero Xerxes normally sport the bow_recurve as their weapon. In the attack/melee animation a normal bow(_short) is shown, probably because the files have been copied from another civ which uses those bows.

This patch fixes the minor cosmetic issue by adjusting the props in the actor files. I have included a patch file, although it easily fixed by hand as well.

Units affected: units/pers_hero_xerxes units/pers_infantry_archer_a units/pers_infantry_archer_b units/pers_infantry_archer_e

#1527 fixed [PATCH] Boost 1.50 support: removed filesystem v2 ben Sven-Hendrik Haase
Description

In Boost 1.50 filesystem v2 was entirely removed. It is fairly safe to change to boost filesystem v3 as this has been included since forever.

For the record, the initial error you run into while making is this:

/usr/include/boost/filesystem/config.hpp:16:5: error: #error Compiling Filesystem version 3 file with BOOST_FILESYSTEM_VERSION defined != 3

I think this should definitely be fixed before the next release because enabling people to build with the newest version of boost is important.

#1562 fixed [PATCH] Water interferes with actor viewer rendering ben historic_bruno
Description

The problem is various rendering code uses global variables to determine the simulation's water level (for e.g. culling) and that breaks in actor viewer. It's noticeable as a black space obstructing the view, when the camera moves above the map's water level. The patch fixes this by passing the correct simulation to the renderer before each frame.

As a bonus, I added a water toggle button to actor viewer, so ships can be viewed on a water plane and possibly for nice screenshots.

#1568 fixed update bundled enet to 1.3.10 ben fabio
Description

Bundled enet is 1.3.3, while upstream has 1.3.10.

Even better it could be removed from the bundled lib and force users to use the system enet (at least on unix) since distribution already provide it and keep updated.

#1575 fixed Crash detecting graphics card on Windows 7 netbook ben david
Description

The game crashes after launch it, then after close the error message, appears that pyrogenesis has stopped working.

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 0x00000003)

Location: unknown:0 (?)

Call stack:

(error while dumping stack: No stack frames found) errno = 0 (No error reported here) OS error = 487 (Se ha intentado tener acceso a una dirección no válida.)

#1576 fixed [PATCH] Adjusting length for new cart/celt/brit/gaul gate models in wall_builder.js ben FeXoR
Description

The models of the cart/celt/brit/gaul gate has been redone and now fit the length of a long wall segment. That has to be added in the wall_builder.js by removing the exceptions for them (they where shorter before).

Note: Since my Windows is down and my Linux doesn't support 3D acceleration I can't test it (I tested it before though, so it should work). It can be tested e.g. by generating the wall_demo.js random map and test if the gates in the lower section of the map for cart/celt/brit/gaul overlap.

#1578 fixed Default map dropdown broken ben historic_bruno
Description

The default maps show as "Acropolis 1" instead of what's listed in gamesetup.js.

#1640 fixed Texture conversion fails with grayscale PNGs ben historic_bruno
Description

On some systems like mine, the conversion from 8-bit Grayscale PNG to 32-bit RGBA (tex_transform_to) silently fails, leading to a crash in NVTT's InputOptions::setMipmapData which expects 32-bit RGBA data. For now the workaround is to not add grayscale PNGs to the game's data :) The solution probably involves extending plain_transform to correctly handle grayscale data.

#1691 fixed [PATCH] Changing the trading gain ben mimo
Description

In the present implimentation, when a trader arrives at a market, it has all the gains. It would be nice, in order to add possibilities with alliances, that the gains be shared between the trader and the market. The attach patch does that, giving a 1/3 share to the trader and 2/3 share to the market (this percentage can still be easily modified as it is defined in a const).

#1701 fixed Welcome screen with experimental features should be shown only on startup ben fabio
Description

Currently it is shown every time the menu appears, e.g. after finishing a game and returning to main menu.

#1718 fixed Packing and Unpacking siege weapons ben Pureon
Description

Immobile siege weapons, such as the Roman Ballista and Greek Bolt Shooter, should be transformed from their mobile defenseless form (packed) into their immobile attack form (unpacked).

Most of the immobile siege weapons will have unique packed mobile versions. See units/hellenes/siege_rock_packed.xml and units/hellenes/siege_rock.xml as an example of packed/unpacked siege units.

Whenever the immobile siege weapon is tasked to move to a new location, or ordered to attack an object outside of it's weapon range, the immobile unit will transform into the mobile packed form (such as a horse drawn cart). If the unit has been given an attack order and reaches its attacking range, it will unpack into its immobile attacking form. If a unit is asked to simply to move to a new location, it will move but not unpack when it reaches the location.

A button in the UI should toggle packed/unpacked. This will be used when setting up defenses etc.

Animations for the packing/unpacking transformations can be added at a later stage.

#1729 fixed Timer-related problem in Atlas (timer apparently not monotonic as spec'd) ben B. Guns
Description

This happened to me in the latest revision but I experienced it as well about a week ago.

#1751 fixed Packed/packing siege tries to attack sometimes ben historic_bruno
Description

This is not common, but I did notice it a few times in my testing. You can tell this happens if there's an error about launching a projectile without a prop point. It's likely due to a bad state transition somewhere in UnitAI.

#1765 fixed Build warning in WaterManager ben historic_bruno
Description
WaterManager.cpp
../../../source/renderer/WaterManager.cpp: In constructor ‘WaterManager::WaterManager()’:
../../../source/renderer/WaterManager.cpp:79:19: attention : converting to non-pointer type ‘GLuint {aka unsigned int}’ from NULL [-Wconversion-null]
#1771 fixed [PATCH] Building previews casting overproportioned shadows ben zoot
Description

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

#1795 fixed Notify users on fixed render path ben historic_bruno
Description

We need to detect users on fixed render path (whether by necessity or config setting) when the game starts and warn them that we are planning to remove support for it. See discussion here.

#1812 fixed Serialization test fails when placing foundation ben historic_bruno
Description

It's related to the foundation's visual actor component. Logs are attached and here's a diff of the debug sim states:

--- debug.after.a	2013-01-04 21:49:50.371486800 -0500
+++ debug.after.b	2013-01-04 21:49:49.092284500 -0500
@@ -73369,11 +73369,11 @@
     g: 1
     b: 1
     anim run threshold: 0
-    anim name: "idle"
-    anim once: false
-    anim speed: 1
+    anim name: ""
+    anim once: true
+    anim speed: 0
     sound group: ""
-    anim desync: 0.05
+    anim desync: 0
     anim sync repeat time: 0
   AIProxy:
     object: {
#1813 fixed Crash: infinite recursion in debug stack dump (Win 7/64) ben historic_bruno
Description

OS: Win 7 64-bit
Build: VS 2010 Pro - release build

While testing #1812 I encountered an assertion failure, but there was a hard crash before the error dialog was displayed:

Simulation2.cpp(329): Assertion failed: "0 && (L"Serialization test failure")"
First-chance exception at 0x522d7c77 in pyrogenesis.exe: 0xC00000FD: Stack overflow.
INVALID_UDT boost::unordered::detail::compressed<std::allocator<boost::unordered::detail::ptr_bucket>,std::allocator<boost::unordered::detail::ptr_node<boost::shared_ptr<CTexture> > > > 1 1
First-chance exception at 0x52322203 in pyrogenesis.exe: 0xC0000005: Access violation writing location 0x02e00de8.
Unhandled exception at 0x52322203 in pyrogenesis.exe: 0xC0000005: Access violation writing location 0x02e00de8.

Here's the call stack for all threads at the time of the crash: http://pastebin.com/Kc3aLKtP

I don't know what could cause this, but we currently have a bug where a thread is running constantly and frequently accessing timer_Time(), if that's relevant. This is not consistently reproducible but these steps work for me with r13045:

  • Start the game in Atlas with serialization test mode: -editor -serializationtest
  • Load "Acropolis 01" map
  • Start simulation test
  • Select a soldier and task him to build a house, triggering the serialization test failure, and sometimes the crash
#1828 fixed Serialization test fails during construction ben historic_bruno
Description

This is consistently reproducible for me:

  1. Load a map in Atlas (include -serializationtest option), Acropolis 1 works
  2. Start simulation test
  3. Build a field
  4. When construction finishes, delete the field
  5. Build a mill

The serialization test fails while approaching the mill foundation. Sometimes there is no difference in the debug state logs, sometimes there is one local entity difference (which shouldn't affect the serialization).

#1851 fixed [PATCH] Build warnings ben zoot
Description

I get the warnings attached below when building the game. It compiles fine, but it would easier to parse the error output if they were fixed.

#1852 fixed [PATCH] Checked sourcecode with cppcheck ben Mr. X
Description

I checked the sourcecode of 0ad with cppcheck (current git head) once again (#606). I'll attach the log.

The majority of the message are complaints about uninitialized variables in constructor, variable scopes that can be reduced, about C-style pointer castings and functions that can be made const or static. However, among the "conclusive Messages", there are also 29 performance messages, three errors and lots of warnings. I did not verify that all these messages are correct, so there might be a few false positives.

I attached three log files:

  • 0ad_full.txt contains all messages from cppcheck.
  • 0ad_conclusive.txt contains all messages flagged as "conclusive"
  • 0ad_cleaned.txt contains all conclusive message without the three most often shown messages, to make it easier for you to spot the other ones
#1861 fixed Actor variation randomization broken ben michael
Description

Open up any scenario and look at the trees or your starting units. You will see the actors are only using one variation. Instead, they should be randomized. This is a recent-ish bug.

#1865 fixed [PATCH] Rally point marker detached from rally point line ben zoot
Description

Steps to reproduce:

  1. Select a civic center.
  2. Repeatedly place a new rally point.

What happens: Occasionally (every 10 times or so), the rally point line will update, but the rally point flag will not.

What ought to happen: Both the line and the flag should update.

http://trac.wildfiregames.com/raw-attachment/ticket/1865/screenshot0260.jpeg

#1887 fixed [PATCH] Set ownership on rubble entities ben historic_bruno
Description

Set ownership so player color in the actors will be visible.

#1891 fixed [PATCH] Memory leaks in WaterManager ben historic_bruno
Description

As reported in #1852 and here:

[source\renderer\WaterManager.cpp:543]: (error) Memory leak: groundDirection
[source\renderer\WaterManager.cpp:543]: (error) Memory leak: waveForceHQ

In fact, groundDirection doesn't appear to be used for much of anything.

#1897 fixed Upgrade Boost and add VC++ 2012 libs and runtimes ben historic_bruno
Description

I think this is the main obstacle to people building with VC++ 2012. Maybe if we split the Windows precompiled libs out of the repo first (as part of git migration -- see #1814/#1819), it won't be as painful for everyone else when we do the upgrade.

#1906 invalid [PATCH] Units turn at most 90 degrees when attacking ben sanderd17
Description

As described on the forum here: http://www.wildfiregames.com/forum/index.php?showtopic=17225

Ranged units that run away from a melee unit turn around to attack it again. But the actor turns only 90 degrees instead of 180 degrees.

#1933 fixed [PATCH] memleak in CVertexBuffer::Release ben Markus
Description

In CVertexBuffer::Release the current chunk is coalesced with the other, already released chunks. While the managed buffer is correctly merged, the actual VBChunk containers are not freed.

#1952 fixed Graphics card detection fails with NVIDIA Optimus on Windows ben Evans
Description

I have both Intel Integrated Graphics as well as NVIDIA GT 630M on my laptop. With Integrapted Intel graphics the game works fine, but when I switch to the NVIDIA card, it crashes on startup.

Details: unhandled exception (Access violation reading 0x00000000)

Location: unknown:0 (?)

Call stack:

61007600

errno = 0 (No error reported here) OS error = 126 (The specified module could not be found.)

#1954 fixed [PATCH] Non-rounded gains on garisonned merchant ship ben sanderd17
Description

After garisonning a merchant ship with a trader, it can result in non-rounded gains.

See the attached screenshot.

#1971 fixed [PATCH] Update valgrind ben Markus
Description

Updating the three valgrind header from r7573 to the current stable 3.8.1.

Fix build failures.

Fixes some compile warnings from #1851

#1986 fixed [PATCH] graphics/Terrain.cpp overflow ben sanderd17
Description

graphics/Terrain.cpp function CalcPositionFixed gives an overflow when the final height is over 44-ish meter

The following is a quick patch that solves the problem. But maybe not the best for performance

#1988 fixed [PATCH] Implement the Anchor tag ben sanderd17
Description

An implementation of the anchor tag. As few calculations as I possibly could, to ensure a minimal slowdown.

For some (big) units, it might be worth to average the tiles they cover, up to now, only one tile is used to calculate the normal, but results are pretty good.

I also added a few <Anchor> tags where they were missing.

#1990 fixed [PATCH] OOS due to inconsistent Math.pow ben scythetwirler
Description

OOS error between a computer running Ubuntu 12.04.2 and Ubuntu 13.04.

scythetwirler - Ubuntu 12.04.2 (64-bit)

Heiko - Ubuntu 13.04 (32-bit)

Map: Oasis 9

OOS is triggered when female citizen builds next on the same structure as a citizen soldier, adding a bonus.

#2012 fixed [PATCH] Cache GetPercentMapExplored ben scroogie
Description

In a callgrind run I've seen that CCmpRangeManager::GetPercentMapExplored showed up as an expensive function (callgrind showed 6.56 self). Its apparently called quite often for statistics gathering. The patch changes the implementation to cache the value instead of recomputing it every time, as that includes traversing all tiles of the map. Also the original implementation traverses all tiles for playerId==0, which is not required, as it will always be 0. This gave me a slightly measurable speedup in replays of full games. Its of course only faster if the function is actually called that often, of which I didn't know if its on purpose or not. Should it only be called at the end of a game? Anyway, in case it stays like this, here is a patch.

#2017 fixed Vector subscript out of range in WaterManager::CreateSuperfancyInfo, with no visible water ben historic_bruno
Description

Got this exception on an MSVC debug build, after loading the huge combat demo map. In this case, the vectors waves_vertex_data and waves_indices are empty, but their non-existent first element is accessed, resulting in undefined behavior.

>	msvcp100d.dll!std::_Debug_message(const wchar_t * message=0x01c9c5a4, const wchar_t * file=0x01c9c5e0, unsigned int line=932)  Line 15	C++
 	pyrogenesis_dbg.exe!std::vector<SWavesVertex,std::allocator<SWavesVertex> >::operator[](unsigned int _Pos=0)  Line 932 + 0x17 bytes	C++
 	pyrogenesis_dbg.exe!WaterManager::CreateSuperfancyInfo(CSimulation2 * simulation=0x0c1a2180)  Line 546 + 0xd bytes	C++
 	pyrogenesis_dbg.exe!CPatchRData::BuildWater()  Line 1319	C++
 	pyrogenesis_dbg.exe!CPatchRData::Build()  Line 664	C++
 	pyrogenesis_dbg.exe!CPatchRData::CPatchRData(CPatch * patch=0x0adab36c, CSimulation2 * simulation=0x0c1a2180)  Line 75	C++
 	pyrogenesis_dbg.exe!TerrainRenderer::Submit(CPatch * patch=0x0adab36c)  Line 125 + 0x2f bytes	C++
 	pyrogenesis_dbg.exe!CRenderer::Submit(CPatch * patch=0x0adab36c)  Line 1704	C++
 	pyrogenesis_dbg.exe!CGameView::EnumerateObjects(const CFrustum & frustum={...}, SceneCollector * c=0x00b54bc4)  Line 573 + 0x13 bytes	C++
 	pyrogenesis_dbg.exe!CRenderer::RenderScene(Scene & scene={...})  Line 1773 + 0x3b bytes	C++
 	pyrogenesis_dbg.exe!CGameView::Render()  Line 504	C++
 	pyrogenesis_dbg.exe!Render()  Line 220	C++
 	pyrogenesis_dbg.exe!CGame::ReallyStartGame()  Line 219	C++
 	pyrogenesis_dbg.exe!ProgressiveLoad()  Line 250	C++
 	pyrogenesis_dbg.exe!Frame()  Line 349	C++
 	pyrogenesis_dbg.exe!RunGameOrAtlas(int argc=1, const char * * argv=0x005281f0)  Line 508 + 0x5 bytes	C++
 	pyrogenesis_dbg.exe!main(int argc=1, char * * argv=0x005281f0)  Line 551 + 0xd bytes	C++
 	pyrogenesis_dbg.exe!wmain(int argc=1, wchar_t * * argv=0x005288a8)  Line 380 + 0x14 bytes	C++
 	pyrogenesis_dbg.exe!__tmainCRTStartup()  Line 552 + 0x19 bytes	C
 	pyrogenesis_dbg.exe!wmainCRTStartup()  Line 371	C
 	pyrogenesis_dbg.exe!CallStartupWithinTryBlock()  Line 396 + 0x5 bytes	C++
 	pyrogenesis_dbg.exe!wseh_EntryPoint()  Line 424	C++
 	kernel32.dll!@BaseThreadInitThunk@12()  + 0x12 bytes	
 	ntdll.dll!___RtlUserThreadStart@8()  + 0x27 bytes	
 	ntdll.dll!__RtlUserThreadStart@8()  + 0x1b bytes	
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.