Custom Query (5409 matches)
Results (1 - 1000 of 5409)
| Ticket | Resolution | Summary | Owner | Reporter | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| #336 | invalid | Land Ram - Ramming | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
Land Ram - Ramming SDD #288 Specifications MONO 2-Seconds Non-Looping 5 Sounds Req'd |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #339 | invalid | Onager Stone Hitting Water | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
Onager Stone Hitting Water Specifications MONO 2-Seconds Non-Looping 5 Sounds Req'd |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #340 | invalid | Onager Stone Hitting Water | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
Onager Stone Hitting Water SDD# 291 Specifications MONO 2-Seconds Non-Looping 5 Sounds Req'd |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #342 | fixed | Seige Unit Destruction - Generic | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
Onager Destruction SDD# 296 Specifications MONO 2-Seconds Non-Looping 5 Sounds Req'd |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #343 | invalid | Seige Unit Destruction - Ballista | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
Seige Unit Destruction - Ballista SDD# 297 Specifications MONO 2-Seconds Non-Looping 5 Sounds Req'd |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #344 | invalid | Seige Unit Destruction - Land Ram | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
Land Ram Destruction SDD# 298 Specifications MONO 2-Seconds Non-Looping 5 Sounds Req'd |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #4303 | fixed | Entity LimitChangers not working correctly | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #5109 | fixed | Tech modified cost wrong in observermode / Team bonus not visible if Observer item is selected | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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:
Reproducible with a22 and a23. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #5119 | fixed | Enforce formation required member count | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
Steps to reproduce:
1) Be a user in mod.io with an already verified and public mod. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #5557 | fixed | Garrison pickup bug. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
Steps to reproduce:
Error calling component script function IsMoveRequested Expected behavior:
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #5635 | fixed | Crash in non-GLSL mode when gpuskinning is enabled | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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
Also one might not notice the lack of support because in |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #5656 | fixed | INDIVIDUAL.COMBAT.CHASING but idling | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
As reported on Phab:rP23012, the following error happens quite often:
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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
In 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 The bug could be reproduced on a23b. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #5712 | fixed | Capture points not initialised properly. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #5844 | fixed | TypeError: g_Settings.PlayerDefaults[(this.playerIndex + 1)] is undefined | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
As discussed on IRC.
We have protected config entries that can't be used by JS, such as 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. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
Steps to cleanest reproduction.
Give ranged unit without packing state large passability. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #5948 | fixed | AI is not researching free (cost or time) technologies | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #5949 | fixed | Show indicator in list of matches in lobby that match requires password | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #6044 | fixed | Need to check for mods compatibility in game start | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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: |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #6119 | fixed | Incompatible replays can be viewed via 'Summary' screen | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
There seems to be a bug with 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):
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #6141 | fixed | UnitMotionFlying error | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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:
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #6145 | fixed | Can't see unselectable civilizations names in Gamesetup. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 Should be something like this |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #6236 | fixed | Disabling 'background pause' doesnt work | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
The game pauses after alt tabbing out of the game when the setting is disabled. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #6263 | fixed | UnitAI formationcotroller is undefined | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
Starting a 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
In the following GIF I change the
The bug can be noticed for the first time with changeset [25077]. The |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #6392 | fixed | Sorting by "has password" in lobby game list does nothing. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
Sorting by "has password" in lobby game list does nothing. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #6429 | fixed | [BUG] Barter&Trade button causes errors | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
Error message appear when using the to reproduce
error codes0 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" ... reproducibleThe issue is reproducible for A25b [25860] , but not for A24b [24937]. bisectThe issue can be noticed for the first time with [25365]. solution(1)
Simply adding
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #6442 | fixed | Crash when joining local game on Hostname | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
Youtuber
issue
Watch video ~18min:10sec Control group should not be from 0-9, but rather from 1-10. solution
related tickets |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #6511 | fixed | Pressing the Enter key should close the chat if nothing is typed. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
Youtuber
issue
Watch the video ~29min:50sec related
[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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
Right now the replay mode fails when no mod is specified, we should check that and inform the user about what is happening.
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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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
Econ
Military
Special [these buildings are unique to the Greeks only]
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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #533 | fixed | Fishing ships for Hellenes | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
there are some colored spots on it |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #650 | fixed | something wrong with the map oasis | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
there are some colored spots on it |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #667 | wontfix | Fields constructed using a hammer | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #682 | fixed | Jumping Fishing Spots | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
Serengeti map contains a tree owned by player 1. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #857 | fixed | [PATCH] Sahel Watering Holes - PlayerData / civilisation bug fix | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
Following is a list of scenarios that break with territories (isolated buildings are slowly destroyed):
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #954 | fixed | Icon needs be in higher resolution | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
Health bar covers the face of cavalry; perhaps present on other units as well. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #1023 | fixed | Wrong smoke position | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
It's happening since about 1-2 weeks on SVN: 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
Here is a list of missing mines:
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #1160 | fixed | WP Theming - Menu header backgrounds | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #1385 | fixed | Implement wall gates | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #686 | fixed | [PATCH] Additional counters for summary screen | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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):
For implementation details see ticket #638 and corresponding changeset r8576, which contains already implemented counters for summary screen. Most related files are:
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #1471 | duplicate | bug with fraps | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
Implement new loading screen to match mockups. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #402 | fixed | Clean up GUItypes.h | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #136 | needsinfo | [NEEDS INFO] Dualview problems | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #2030 | fixed | [PATCH] "Save As" Function | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
When a config file says something like key = value ; comment
the config parser thinks the key is associated with two values, " This needs to be fixed, so legitimate (comma-separated) values are kept but comments are discarded. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #293 | fixed | Lots of printf format string errors | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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:
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #1173 | fixed | [PATCH] Make rally points work for trade | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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:
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #1473 | fixed | Formation bug when separate units ordered to move to point between them | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
Steps to recreate:
*Build a wall segment long enough for a gate
*It is impossible to build other structures inside the gate. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #1530 | fixed | [PATCH] Load dialogue uses UTC instead of local time. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
Jubot AI incorrectly works. Screenshot attached |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #1539 | fixed | Show wall gate upgrade cost in tooltip | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #1544 | fixed | [PATCH] Selection order is not preserved when renaming entities | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
Current behavior is that gates open once a player unit is within See #619 for related comments. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #1552 | fixed | [PATCH] Improve handling of mixed gate and long wall selections | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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):
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #1673 | fixed | Unit "build wall" commands are always queued | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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:
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #794 | fixed | [PATCH] Camera height | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
Even when I win a game the ratings engine calls me as lost after the game in the lobby and reduces my rating
related ticket |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #6740 | fixed | scrolling on dropdown menus causes lobby to refresh over and over | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #1721 | fixed | [PATCH] Add "score" tab in post-game summary | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #847 | fixed | [PATCH] Mac: Not all screen space is being used | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
This patch includes:
Some questions that arose while writing the patch:
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #3764 | fixed | [PATCH] Add heightmap manipulation library for random maps | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
Since most maps don't use the libs 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 We might want to do this for other libs as well. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #3968 | fixed | [PATCH] Remove duplicat of getDistance | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
This patch removes the constant 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
This patch splits This is a prerequirement of two libs (and an addition of functionality on it's own):
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #4152 | fixed | [PATCH] Schwarzwald tiny map - tile is undefined | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
This is just an improvement of Also the swapped x/y coordinates where fixed. Thanks Vladislav for the changes! |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #4245 | fixed | [PATCH] New random map Caledonian Meadows | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
This optimizes the map Caledonean Meadows by:
This should also fix load errors that where reported (Thus fixing a real defect). After eccessive testing things that still can be improved:
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #4296 | fixed | [PATCH] Fix typo breaking random map latium | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 Do the same for all resource types. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #1832 | fixed | Entities should abandon chase if their target is in FOW | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #3394 | fixed | Violent units follow enemies through the fog of war | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
According to 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
i can't create random map in jebel barkel.it shows errors while starting it. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #5409 | fixed | Triple Left Click doesn't work | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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". | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
We currently have a helper file |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #5892 | fixed | Allow users to PushOrderFront. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
https://wildfiregames.com/forum/index.php?/topic/24732-de-alpha-24/page/2/ |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #5925 | fixed | Attack notification sound is broken | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 So:
While at it, I suggest more stuff:
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #6008 | fixed | Errors: entering /clear in lobby | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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
(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. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
They are expected to be in 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
test scenario: A) give unit orders in a queue to
B) give unit orders in a queue to
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. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #6089 | fixed | PetraAI marks non-garrisonHolder as one. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
See attached log and replay. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #6090 | fixed | PushOrderFront doesn't work with construction. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
Currently, in |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #6162 | fixed | Mercenaries are duplicated | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
Steps to reproduce
Or see attached replay. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #6170 | fixed | Tried to change to non-existent state 'RETURNRESOURCE.APPROACHING' | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
Playing with rP25379 mysticjim got a bunch of errors |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #6172 | fixed | Errors AutoQueue | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 have also attached the replay file (6_may_21.zip). SVN version: 25389 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #6175 | fixed | Rally point - pick up treasures bug | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
While playing the latest SVN version [25403] on a random map called 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 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #6185 | fixed | [PetraAI] - Split bases from HQ. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
A user named
Everytime you press |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #6237 | fixed | Collecting treasures has no order confirmation sound. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
See https://wildfiregames.com/forum/topic/45178-a25-svn-version-25810-not-playable/. Probably introduced in r25584.
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 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #6260 | fixed | Units in formation ignore enemies when patroling or doing attack-move | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
Reproted by ValihrAnt on forums: 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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:
Stan wrote under patch D3784
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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 I will attach the replay as a zip file: Mr.michael.zip |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #6317 | fixed | Can't use fields | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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
The cause of the problem might be related to my experiments with the cheat code
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 ( Issue is reproducible for A24b. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #6347 | fixed | Link to the correct tutorial | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
Under the latest SVN version [25945], the
When you start the 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. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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).
In this scenario, the PQ gets an order to produce a unit, it delegates that to the
Idem for the 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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]
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #6381 | fixed | [PetraAI] Attacks occur later | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
A user named
the_limes_2pAutostart 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_warAutostart 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
The
Line 145 in
[19922] contains 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 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
While testing the latest GIT version [26136], I noticed that the cheat code reproduce
bisect
Doing The ticket can be closed if the change was intentional. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #6415 | fixed | Training UI bug | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
to reproduce
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
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #6421 | fixed | Create a cmpRequirements. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
Including:
Introduced in r26298. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #6446 | fixed | [BUG] Stuck units supplying resources | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
A user named
to reproduce
See GIF below for more clarity.
bisect[25215] is the changeset where this error first occurs. reproducibleFor A26 and A25b, the issue is not reproducible for A24b. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #6452 | fixed | Not paused items show as paused. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
See patch. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #6458 | fixed | Error in the tutorial | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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:
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #6490 | fixed | Idle error | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
to reproduce
ERROR: CCacheLoader failed to find archived or source file for: "art/textures/ui/session/portraits/formations/box.png" relatedIRC 0ad-dev 3/Apr/22 [07:23:38] Freagarach Langbart: #6490 is caused by giving formations cmpIdentity. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #6492 | fixed | Autoqueue corral issue | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
to reproduce
reproducible
A25b [25860]: Issue is reproducible 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
issue(s)
The extra |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #6521 | fixed | Allow to set the biome with the autostart command | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
issue
The to reproduce
possible solution
Add a
related ticket
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #6548 | fixed | Error with maps created in the atlas with the victory condition "Conquest Civic Centers" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
to reproduce
errorsERROR: 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
The Map.cpp file takes the
In the game setup the function loadVictoryConditions checks for the filename NOT the title.
The end result differs from the actual file name reproducibleIssue 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 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #6566 | fixed | Han gather_grain animation is not chosen correctly for Spearman and Pikeman | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| a | b | |
|---|---|---|
| 33 | 33 | </group> |
| 34 | 34 | <group> |
| 35 | 35 | <variant file="biped/base_spearman_shield_relax.xml"/> |
| 36 | <variant file="biped/gather_grain.xml"/> | |
| 36 | 37 | <variant file="biped/carry_food.xml"> |
| 37 | 38 | <props> |
| 38 | 39 | <prop actor="props/units/helmets/han_ricehat.xml" attachpoint="helmet"/> |
| … | … | |
| 43 | 44 | <variant file="biped/formations/anti_cavalry_back.xml"/> |
| 44 | 45 | <variant file="biped/attack_slaughter.xml"/> |
| 45 | 46 | <variant file="biped/gather_tree.xml"/> |
| 46 | ||
| 47 | 47 | <variant file="biped/gather_fruit.xml"/> |
| 48 | 48 | <variant file="biped/gather_meat.xml"/> |
| 49 | 49 | <variant file="biped/gather_rock.xml"/> |
possible solution
-
binaries/data/mods/public/art/actors/units/han/infantry_spearman_b.xml
a b 38 38 <prop actor="props/units/helmets/han_ricehat.xml" attachpoint="helmet"/> 39 39 </props> 40 40 </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"/>56 41 <variant file="biped/carry_meat.xml"/> 57 42 <variant file="biped/carry_wood.xml"/> 58 43 <variant file="biped/carry_stone.xml"/> … … 68 53 <variant file="biped/approach_praise.xml"/> 69 54 </group> 70 55 <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"/> 72 70 </group> 73 71 <material>player_trans.xml</material> 74 72 </actor>
additional nitpick
Other actors, such as romans/infantry_spearman_b.xml, should receive a similar treatment.
An issue was reported by Freagarach via IRC 0ad-dev 11/Jun/22
[...] Carths Super Dock is broken.
to reproduce
- Build the Carthaginian
Naval Shipyardand 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.
to reproduce
- Start a game with
Athen(other civs are fine) - enter
gift from the godsorback 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) 117 117 else 118 118 return; 119 119 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; 122 123 else 123 124 parameter += "_generic"; 124 125
Issue No.1 - conversion check
This issue was first reported by andy5995 in the forum
- Feedbacks from A26 SVN tests (22/Jun/22)
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
Noneformation and after that theBoxformation - 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() 969 969 // Merge the members from the twin formation into this one 970 970 // twin formations should always have exactly the same orders. 971 971 let otherMembers = cmpOtherFormation.members; 972 if (otherMembers.length == 0) 973 continue; 972 974 cmpOtherFormation.RemoveMembers(otherMembers); 973 975 this.AddMembers(otherMembers); 974 976 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.txttill 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.
Start a match, make a formation, garrison the formation in the CC. Unload the CC, watch the errors when hovering.
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 225 225 "message": "/msg " + gameState.sharedScript.playersData[player].name + " " + 226 226 pickRandom(this.answerDiplomacyRequestMessages[requestType][response]), 227 227 "translateMessage": true, 228 "translateParameters": requiredTribute ? ["_amount_", "_resource_", "_player_"] : ["_player_"],228 "translateParameters": { "_resource_": "withinSentence" } , 229 229 "parameters": requiredTribute ? 230 { "_amount_": requiredTribute.wanted, "_resource_": requiredTribute.type, "_player_": player } :230 { "_amount_": requiredTribute.wanted, "_resource_": Resources.GetNames()[requiredTribute.type], "_player_": player } : 231 231 { "_player_": player } 232 232 }); 233 233 };
- the
Resources.GetNames()[requiredTribute.type]transformswoodintoWood - the
{ "_resource_": "withinSentence" }for finding the correctly translated word with the translateObjectKeys function inChatMessageFormatPlayer.js.
| 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 |
| 7288 | msgctxt "firstWord" |
| 7289 | msgid "Wood" |
| 7290 | msgstr "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 |
| 7296 | msgctxt "withinSentence" |
| 7297 | msgid "Wood" |
| 7298 | msgstr "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 |
| 7303 | msgctxt "firstWord" |
| 7304 | msgid "Tree" |
| 7305 | msgstr "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 |
| 247 | msgid "" |
| 248 | "%(_player_)s, you must send me a tribute of %(_amount_)s %(_resource_)s " |
| 249 | "before I accept an alliance with you." |
| 250 | msgstr "%(_player_)s, u moet eerst %(_amount_)s%(_resource_)s als geschenk sturen voordat ik een bondgenootschap met u accepteer." |
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.
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
- Attaching minimal replay (~2min) commands.txt
note
To see private messages from the AI when watching the replay:
- either change the name in the
user.cfgto the name of the player, whose private messages from the AI you would like to see or - change the name in the attached replay file
to reproduce
- start a normal map with
Athen - enter cheat code:
back to the futureto reachTown Phase - build a
Gymnasiumat the border - see GIF below for more clarity -
gymnasiumvsbarracks
bisect
- [24104] removed the
TerritoryInfluencefrom thetemplate_structure_specialfile.- Diff - D3016 (25/Sep/20)
Nescio: Removes
<TerritoryInfluence>fromtemplate_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 46 46 <constructed>interface/complete/building/complete_gymnasium.xml</constructed> 47 47 </SoundGroups> 48 48 </Sound> 49 <TerritoryInfluence> 50 <Root>false</Root> 51 <Radius>38</Radius> 52 <Weight>40000</Weight> 53 </TerritoryInfluence> 49 54 <Trainer> 50 55 <BatchTimeModifier>0.7</BatchTimeModifier> 51 56 <Entities datatype="tokens">
optional
- Add a test to one of the entity python tools that children of the
template_structure_special.xmlfile should have aTerritoryInfluenceboost.
to reproduce
- start the
units_demomap
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
Healeris going to someElite unitsto heal them, for example theCretan Mercenary Archer
- select the
Cretan Mercenary Elite Archer, toggle theDeveloper Overlay Alt+Dand the optionDisplay selection state- the difference between
hitpointsandmaxHitpointsis only0.00000000000001 == 1E-14
- the difference between
- the
Mauryan Hero Healeris the only walking around, because of its largevisionrange he inherits from the simulation/templates/template_unit_hero.xml template
- other healers have only
30 vision- simulation/templates/template_unit_support_healer.xml
minimal amount of units to reproduce the issue
- change the
units_demo.jsto 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; 31 31 let gap = 14; 32 32 33 33 let cmpTemplateManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_TemplateManager); 34 for (let template of cmpTemplateManager.FindAllTemplates(actors))34 for (let template of ["units/mace/hero_pyrrhus_i", "units/iber/catafalque", "units/maur/elephant_archer_e"]) 35 35 { 36 36 print(template + "...\n");
-
intended behavior
- the
hitpointsfor alleliteunits should be the same as themaxHitpointswhen 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() 465 465 let newMaxHitpoints = ApplyValueModificationsToEntity("Health/Max", +this.template.Max, this.entity); 466 466 if (oldMaxHitpoints != newMaxHitpoints) 467 467 { 468 let newHitpoints = this.hitpoints * newMaxHitpoints/oldMaxHitpoints;468 let newHitpoints = (this.hitpoints === oldMaxHitpoints) ? newMaxHitpoints : this.hitpoints * newMaxHitpoints / oldMaxHitpoints; 469 469 this.maxHitpoints = newMaxHitpoints; 470 470 this.SetHitpoints(newHitpoints); 471 471 }
to reproduce
- start
scenarios/units_demomap - 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
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
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.
to reproduce
- navigate to
0ad/source/tools/entity - run
python3 checkrefs.py -u - among other files, two techs are listed
phase_city.jsonandphase_town.json
WARNING - Unused file 'public/simulation/data/technologies/phase_city.json' WARNING - Unused file 'public/simulation/data/technologies/phase_town.json'
bisect
related tickets
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
Macedoniansin [26627]
related ticket
- #6587 (10/Jul/22)
possible solution ?
-
binaries/data/mods/public/gui/reference/viewer/ViewerPage.js
a b class ViewerPage extends ReferencePage 76 76 77 77 let researchers = templateLists.techs.get(currentTemplateName); 78 78 if (researchers && researchers.length) 79 { 79 80 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 } 80 87 } 81 88 82 89 if (this.currentTemplate.builder && this.currentTemplate.builder.length)
to reproduce
- start a game with any civ, except
Han - type
exodia 1or resign immediately - select a
GAIAwoman
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
possible solution ?
-
binaries/data/mods/public/simulation/helpers/Requirements.js
a b RequirementsHelper.prototype.AllRequirementsMet = function(template, cmpTechMana 121 121 if (requirementType === "Techs") 122 122 for (const tech of requirement.split(" ")) 123 123 if (tech[0] === "!" ? cmpTechManager.IsTechnologyResearched(tech.substring(1)) : 124 !cmpTechManager .IsTechnologyResearched(tech))124 !cmpTechManager?.IsTechnologyResearched(tech)) 125 125 return false; 126 126 } 127 127 return true;
This issue was reported by Aristippus of Cyrene in the forum
- Chinese mangonels (15/Dec/22)
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
NoneforModel appearance randomization- this setting came with [25613]
expected behaviour
- the animal actor changes back to its original color instead of choosing a random color
to reproduce
- start map with
ptol - build && select a
Barrack - errors
- the
Royal Guard Infantryhas two requirementsphase_cityandunlock_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
-
binaries/data/mods/public/simulation/templates/units/ptol/champion_infantry_pikeman.xml
a b 8 8 <Icon>units/ptol/champion_infantry.png</Icon> 9 9 <Requirements> 10 10 <Techs datatype="tokens">unlock_champion_infantry</Techs> 11 <Tooltip>Ask Freagarach</Tooltip> 11 12 </Requirements> 12 13 </Identity> 13 14 <VisualActor>
related ticket to requirement feature
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
CivicCenterto a relic - notice the horse will not move to the relic after it has been trained
bisect
to reproduce
- start a map with a civ of your own choice
- enter
gift from the gods - select
CCand entersalad bowl 200- You may have to run the command twice for civs with a large
CClikeHan/Ptol/Maur
- You may have to run the command twice for civs with a large
- 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() 304 304 } 305 305 if (this.count) 306 306 { 307 const cmpProductionQueue = Engine.QueryInterface(this.trainer, IID_ProductionQueue); 308 if (cmpProductionQueue.queue.length) 307 309 cmpPlayer.BlockTraining(); 308 310 309 311 if (!this.spawnNotified)
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 wronggathered/used
related
@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
to reproduce
- build and select two corrals
- press
ctrlwhile keepingshiftpressed,right-clickon 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
to reproduce
- start a game with the
Hanselect 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
shiftkey pressed while giving the order - when the second field is fully constructed, one woman becomes idle
bisect
to reproduce
- try to start a match with an
AIplayer set to difficulty0(sandbox)
| 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)
- likely introduced with [26584]
related tickets
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.
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:
l10nmessages.jsonpublic.guitemplate.potde.po- …
public.mapstemplate.potgl.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
- Decide which POT files we will have and what content will each of them contain.
- Ensure that both the engine (C++) internationalization and our internationalization tools (e.g. message extraction) work OK with subfolders in
l10nand the proposed file names.
- 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.
- 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
- Generate the new POT files.
- Announce the start of the task in Transifex.
- Pull the latest translations from Transifex.
- Create the new resources in Transifex.
- Run the script to generate the splitted PO files.
- Delete the old PO and POT files (locally only).
- Add config files (
.tx/config) for the Transifex client to the newl10nsubfolders that match them to a resource in Transifex. - Run the script that uploads the new PO files to Transifex.
- 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).
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.
Look at the image below.
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.
This plugin was installed in our plugin-dev WP instance. It needs to be configured and evaluated.
Discussion thread: http://www.wildfiregames.com/forum/index.php?showtopic=15563
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.
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.
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.
The jQuery User Interface library is now easier to integrate with WordPress via this plugin. Very customizable and a time saver.
This ticket is for modifying sidebar.php (to include all widgets and plugins) and call it it in all pages.
Create a .htaccess file on the new site instance. For permalink structure change.
Forum discussion: http://www.wildfiregames.com/forum/index.php?showtopic=15615
Our rough page is in place, but we now need to make sure that posts display correctly.
The menus described in the prototype image are pretty complex. Time to whip out some CSS-FU!
http://www.wildfiregames.com/forum/index.php?showtopic=15688
Concept has a revision log for the sidebar. Similar to Community Updates. Forum discussion: http://www.wildfiregames.com/forum/index.php?showtopic=15803
Finalize the universal footer with all art and content.
It's time to finish polishing the menus! We need to add art work, etc.
Time to polish the image carrousel. Final art adjustments, size adjustments, etc.
Time to add that last little bit of art work and to take care of any quarks!
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.
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.
Create a template for displaying news, archives, etc as defined here. Modifications to functions.php; style.css; news-page.php;
Set up and style a page dedicated to downloading the game as described in the page specifications.
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.
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.
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.
Add more details, improve some areas.
Needs current Greek Fortress Mesh and Greek Props, such as shields and weapons.
Arrow Impacting Metal SDD# 223
Specifications
MONO 2 Seconds Non-Looping
12 sounds req'd
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
- Change the resource trickle rate based on flesh
- For example, in AOE2 mills can be garrisoned with animals (max 10) to generate 3.5 food per second per 100 flesh.
- Source: ageofempires.fandom.com/wiki/Buildings_(Age_of_Empires_II)
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.
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
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).
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.
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.
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.
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.
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.
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).
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.
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).
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).
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.
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.
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.
The current implementation of the NetServer allows users to join as a different player.
Reproduce:
- Alice, bob and carol start a game, (no matter if lobby or rated)
- Bob disconnects
- Eve notices that there are less players connected than the list displays
- Eve tries to join the game, but can't connect as the game already started
- Eve clicks on multiplayer -> join. The IP address is the one of alice' game
- Eve tries to connect with one of the names (including the rating as that's part of the name)
- 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.
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.
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).
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 (
reallyStartVisualReplayinreplay_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.
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)
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).
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")
The aiconfig button should not be showed when there is no player or ai assigned to this slot.
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.
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)
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.
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.
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.
NMTmeansNetMessageTypeand is defined inNetMessages.hNSSmeansNetServerSessionStateand is defined inNetServer.hNCSmeansNetClient stateand is defined inNetClient.h
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
patch: https://github.com/0ad/0ad/compare/master...Imarok:3823_multiple_selection_followup
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.
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.
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.
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.
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.
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.
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.
When a late observer joins It says: Player is starting to rejoin and Player has rejoined.
excpected: s/rejoin/join
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)]
| v.isNumber() (got type undefined) |
ERROR: File 'maps/random/undefined' does not exist ERROR: CMapGeneratorWorker::Run: Failed to load RMS 'maps/random/undefined'
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.
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
- Start a host
- Enter the gamesetup with a second client and press ready
- 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).
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.
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.
We should show the graphs for team scores in the summary. refs #3403
When switching tabs in the summary we should remember and restore the selected graphs.
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
It would be nice to temporarily adjust the batch size with the mouse wheel. (This is mainly a reminder ticket for my self)
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.
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!
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.)
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)
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
Since r22772 the UserReporter worker thread always uses the maximum CPU resources though occupying a whole virtual core.
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.
To reproduce:
- Start game
- Change perspective to Gaia
- Open the summary
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):
It did not happen on A23 because there the multiplier was displayed on the same line as the gameduration.
When one observes a player the follow button text overlays the game speed button so the game speed button gets unusable:
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
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>
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
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.
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?
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).
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...
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()
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.
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.
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.
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.
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.
For continuing Philip's pathfinder work. For the short-range pathfinder rewrite, see #1942.
See the following posts for progress so far:
- http://www.wildfiregames.com/forum/index.php?showtopic=15270&st=80#entry230053
- http://www.wildfiregames.com/forum/index.php?showtopic=15270&st=100#entry230217
- http://www.wildfiregames.com/forum/index.php?showtopic=15270&st=120#entry233181
- http://www.wildfiregames.com/forum/index.php?showtopic=15270&st=140#entry233213
- http://www.wildfiregames.com/forum/index.php?showtopic=15270&st=160#entry233998
- http://www.wildfiregames.com/forum/index.php?showtopic=15270&st=180#entry234910
Also pathfinder.pdf for some concepts of the new pathfinder design.
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.
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
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)
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
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.
Known issues:
- Build Boost libs for VC++ 2013
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.
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...
#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
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.
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"
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!
This simple patch displays in the tooltip how many buildings more are necessary to change phase.
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.
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.
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
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.
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!
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?
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.
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
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
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.
Player angle was NAN for one player so it fails to generate.
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.
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.
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.
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.
gaia buildings disappears when they go out of LOS while they should be miraged like players' buildings.
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.
Steps to reproduce :
1.Open a 2v2 Map 2.Set all the players to petra very hard 3.Set popcap to 100
- Tick All options
- Set all the civs to britons for instance
- Launch the game
- 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
Quit a multiplayer game and join it again.
Played against alpha. Reproduced the bug twice.
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.
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.
When playing on the lobby I get those warnings. (See attached screenshot)
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
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.
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.
Attached patch implements the planned rotary mill aura by bonusing nearby farming with 25%. Also updates the tooltip and removes the technology.
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.
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 VisibilityUpdate 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
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
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).
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.
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.
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!
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
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.
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.
svn revision 16266
In singeplayer mode, cheats do not work.
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.
The German text "KI-Schwierigkeitsgrad:" is not fully readable. See screenshot.
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.
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?
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...
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)
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=
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.
Attached is a patch that implements the TBI feature of the Ptolemaic lighthouse.
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!
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)
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.
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
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.
"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
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");
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)
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.
(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.
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.
This ticket implements more clever updates for the passability grid.
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.
Introduced in r16764, not difficult to fix but that commit was more urgent and makes Atlas usable.
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.
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.
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:
- Start a session as athen|mace|spart on a map with treasures (Bactria, for example)
- Advance to the town phase, build a temple, and train a healer
- Task that healer to gather a treasure
- 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
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.
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:
- Start 0 A.D.
- Open the options window.
- Change a setting (toggle one of the settings, for example).
- Click the cancel button.
- 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.
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.
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.
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.
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.
Originally reported here.
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 ***
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.
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).
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)
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.
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.
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.
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
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
Currently building fails with VS2015, fixing that would be nice.
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;
^
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).)
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:
- Change a bunch of things (really a no-brainer, took me 10 minutes) as explained here: https://github.com/premake/premake-core/wiki/Migrating-From-4.x
- Rewrite our customizations as a module (it's the big awesome change in premake5) as explained here: https://github.com/premake/premake-core/wiki/Extending-Premake
- If some of our fixes are not yet included and are still needed (read: if regressions appear), rewrite the fixes and make a pull request while they're in alpha and active
- If time permits: take a look at the new features and see if we can use them to improve our scripts (https://github.com/premake/premake-core/wiki/What's-New-in-5.0); also see if our TODO/FIXME are still relevant
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.
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?
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.
This error occured in an alpha 19 match on turn 2037.
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.
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.
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.
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).
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.
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.
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.
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.
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.
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?
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
dataproperty ofm_PassabilityMapValto the new array - (Later the old value of
datawill 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.
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.
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.
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.
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.
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
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.
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"
Fixes guiinterface regression tests. Someone might want to extend them.
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.
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.
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)
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).
In this r19667 game, I rejoined fatherbushidos game on Extinct Volcano and got an OOS on rejoin.
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)
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
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
Reminder for libraries to consider updating for A23, on Windows and OSX:
(see also #4362 for OSX)
(see also #3004 for Windows)
In atlas, attempting to start the simulation after resizing the map results in a crash.
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 :-)
Since downstream reported few formatting issues with the file and proposed patches, we should consider fixing it for the release. refs #3734
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.
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).
This can be fixed by updating premake5.lua.
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?
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 installedMake Jenkins build with 2015 instead of 2013Commit glooxwrapper- Watch for bugs
- Resolve #5527
Dropping:
- Update premake scripts and update-workspaces.bat
After dropping:
- Update wiki:CppSupport
- Fix TODO in ScriptInterface.h ScriptVal.h and ComponentManager.h (grep for
Rvalue references v3.0) - Test and fix NativeWrapperDefns.h#L49
- Will code improvements be made possible?
- Fix TODO in ScriptInterface.h ScriptVal.h and ComponentManager.h (grep for
- Commit #5094
- Mass rebuild libraries (and use the opportunity to upgrade them)
- Rephrase the explanation in the glooxwrapper so we don't have to update it everytime we change our support of the VS versions.
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.
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
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:
This is a general ticket for the "Python 2 EOL" release blocker.
Tasks:
Upgrade translation scripts: Phab:D2757, ex #3857Upgrade SM to ESR 78, Phab: #4893, #5859, #5860, #5861CXXTest should not use#!/usr/bin/env pythonas shebang.- Other scripts: Phab:D2501
Distributions now expect python2 or python3.
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.
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 = ?
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() .
See https://salsa.debian.org/games-team/0ad/-/commit/7048ef33282782d9af46335c9d928dfa9d9f379d
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)
| Line | |
|---|---|
| 593 | if (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;
}
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
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 104 104 105 105 # Now run premake to create the makefiles 106 106 107 cd ../premake/premake5 108 107 109 premake_command="premake5" 108 110 if [ "$with_system_premake5" = "false" ]; then 109 111 # Build bundled premake 110 cd ../premake/premake5111 112 PREMAKE_BUILD_DIR=build/gmake2.unix 112 113 # BSD and OS X need different Makefiles 113 114 case "`uname -s`" in
- 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.
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
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.
buildings > "Verwaltungssitz"
market > "Tauscheffizienz" and "Handelseinkommen"
So please make the stats wider
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.
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).
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.
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.
-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
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.
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.
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.
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))
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.
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.
Fix NVTT and FCollada build on ARM and fix some small 0AD compiler issues.
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.
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:
- armel: https://buildd.debian.org/status/logs.php?pkg=0ad&arch=armel
- armhf: https://buildd.debian.org/status/logs.php?pkg=0ad&arch=armhf
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.
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.
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)
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.
- If no saved login, show registration predominantly.
- If saved login, try logging in automatically (possibly confirm before logging in? Will require consideration.).
4. Consider removing option to specify nick on login.
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.
Users can toggle the wireframe mode (Alt+w) in rated games.
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.
Display if a multiplayer game can be rated when started through the lobby and also allow the host to disable rating.
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).
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.
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
Wake up gloox periodically to make sure no XMPP connections timeout.
It would be nice to be able to support XMPP subjects in the lobby containing clickable links to relevant pages in our wiki.
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.
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.
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.
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.)
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."
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.
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).
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.
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.
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).
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>.
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.
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.
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.
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)
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.
Reproduce:
- Start a game with cheats enabled on the default skirmish map
- Type "back to the future" into the chat
- 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.
Being able to load the previous gamesetup (presist-match-settings) has the bug of allowing a rated game with cheats enabled.
Reproduce:
- Delete
matchsettings.mp.jsonin the config directory (see wiki:GameDataPaths) - Open a non-lobby multiplayer game with cheats enabled (you don't need to start the game, clicking on back is sufficient)
- 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.
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.
Reproduce:
- Replay any commands.txt
- Wait for it to finish
- 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).
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).
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.
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.
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.
The attached patch does:
Adds support for Rome Fixes scout_tower/defense_tower naming issues Improves documentation tweaks some internal values
Expand Theban civilization to be usable in game
Lord of the Rings modpack
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.
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.
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).
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
Reported in the forums:
- https://wildfiregames.com/forum/index.php?/topic/27275-trying-to-compile-game-on-mac/
- https://wildfiregames.com/forum/index.php?/topic/28059-svn-public-alpha-24-version-on-macos-ui-problem/
Reported in previous tickets that were about other build issues on OSX
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.
This is a random find, when starting a game, I noticed there is a text overflow, see attached screenshot.
https://wildfiregames.com/forum/topic/36707-display-problem%EF%BC%81/
Like 20000 -> 20k. One can even let the user choose the thresholds.
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].
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.)
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.
Subj.
The Magadha map - one of the new ones in Alpha 25 - doesn‘t have a proper map description, just dummy text.
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?
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.
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:
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 )
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
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.
Changeset [25624] caused a minor bug to the mercenary units in Atlas.
To reproduce
- Open Atlas and Start the simulation via the
Playbutton - Place the
units/sele/infantry_archer_merc_bon the field - Select the entity, the experience bar extends to the orbit.
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.
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.
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]
A problem was noticed by rollieoo on a certain map, both opponents cannot reach each other.
- Forum: Two halves map (21/Jan/22)
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
A user named fmmaks reported a bug in the forum.
- Can't capture siege engines [Alpha 25] (11/Mar/22)
Siege units lost their ability to be captured with changeset [24685], it was forgotten to update the summary.
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
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.
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.
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).
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.)
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.
When a unit is destroyed the destruction causes damage to nearby units.
This will be configured in the unit template.
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.
- Siege Engines should be listed in the summary
- The captured statistic for Siege Engines should be displayed/created too
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.
Enhancement of the missile hit sound handling:
- 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.
- Introduce different kind of sounds in the template:
- the projectile hits the target or the ground (melee hit belongs here)
- the projectile starts causing the damage itself (eg. explodes) (useful when the damage is delayed, related ticket: #1911)
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.
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).
Test one
It is possible to host a multiplayer game with only bots. When launched, gui/session/session.js fails because playerState is undefined.
When you garrison units in a dropsite (e.g. Civil Centre) they should deposit any resources which they are carrying.
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.
Universal Animal Death Sound SDD # 157"
Specifications
MONO 3 seconds in duration. Non-Looping
4 Files Required.
Arrow Impacting Wood Sound SDD# 228
Specifications
MONO 2 seconds Non-Looping
12 Sounds req'd
Flesh Impact - Multiple SDD# 271
Specifications
Stereo 2 minutes Looping
1 Sounds Req'd
Seige Unit Select SDD# 295
Specifications
MONO 2-Seconds Non-Looping
5 Sounds Req'd
Mounted Unit - Dirt SDD# 348
Specifications
Specifications
MONO 1-Seconds Non-Looping
5 Sounds Req'd
- Start times for initial animations should be randomised. All units on the map start with their idle animations in perfect unison, for example.
-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
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
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'
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.
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.
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.
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.
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 killedimplemented 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
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.
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
Plowing Fields Sound SSD # 169
Specifications
Mono 5 Seconds Non-Looping
9 Sounds Req'd
General Herding Animals Sounds SDD# 164
Specifications
MONO 5-Seconds Non- Looping
9 Sounds req'd
Explosion SDD# 403
Specifications
MONO 2-Seconds Non-Looping
5 Sounds Req'd
Building FX - Civil Centre SDD# 410
Specifications
MONO 10-Seconds Looping
10 Sounds Req'd
Building FX - House SDD# 412
Specifications
MONO 10-Seconds Looping
10 Sounds Req'd
Building FX - Resource Centre SDD# 419
Specifications
MONO 10-Seconds Looping
10 Sounds Req'd
Building FX - Military Centre SDD# 433
Specifications
MONO 10-Seconds Looping
10 Sounds Req'd
Building FX - Temple SDD# 435
Specifications
MONO 10-Seconds Looping
10 Sounds Req'd
Building FX - Fortress SDD# 437
Specifications
MONO 10-Seconds Looping
10 Sounds Req'd
Building FX - Health Centre SDD# 443
Specifications
MONO 10-Seconds Looping
10 Sounds Req'd
Gates - Opening SDD# 445
Specifications
MONO 5-Seconds Non-Looping
5 Sounds Req'd
Gates - Closing SDD# 446
Specifications
MONO 5-Seconds Non-Looping
5 Sounds Req'd
Ambient Sounds - Alpine Soundscape SDD# 448
Specifications
Stereo 30-Seconds Looping
4 Sounds Req'd
Ambient Sounds - Steppes Soundscape SDD# 450
Specifications
Stereo 30-Seconds Looping
4 Sounds Req'd
Ambient Sounds - Mediteranean Soundscape SDD# 451
Specifications
Stereo 30-Seconds Looping
4 Sounds Req'd
Ambient Sounds - Savannah Soundscape SDD# 452
Specifications
Stereo 30-Seconds Looping
4 Sounds Req'd
Ambient Sounds - Semi-Arid Soundscape SDD# 454
Specifications
Stereo 30-Seconds Looping
4 Sounds Req'd
Ambient Sounds - Polar Soundscape SDD# 455
Specifications
Stereo 30-Seconds Looping
4 Sounds Req'd
Night Sounds - Alpine Soundscape SDD# 457
Specifications
Stereo 30-Seconds Looping
4 Sounds Req'd
Night Sounds - Steppes Soundscapes SDD# 460
Specifications
Stereo 30-Seconds Looping
4 Sounds Req'd
Night Sounds - Mediteranean Soundscape SDD# 461
Specifications
Stereo 30-Seconds Looping
4 Sounds Req'd
Night Sounds - Savannah Soundscape SDD# 462
Specifications
Stereo 30-Seconds Looping
4 Sounds Req'd
Night Sounds - Semi-Arid Soundscapre SDD# 464
Specifications
Stereo 30-Seconds Looping
4 Sounds Req'd
Night Sounds - Polar Soundscape SDD# 465
Specifications
Stereo 30-Seconds Looping
4 Sounds Req'd
Night Sounds - Tropical Soundscape SDD# 467
Specifications
Stereo 30-Seconds Looping
4 Sounds Req'd
Ambient - Swamp SDD# 490
Specifications
Stereo 30-Seconds Looping
4 Sounds Req'd
Ambient Flora - Creaking of Trees SDD# 494
Specifications
Stereo 1-Minute Non-Looping
2 Sounds Req'd
Ambient Flora - Reeds Rustling SDD# 495
Specifications
Stereo 1-Minute Non-Looping
2 Sounds Req'd
Ambient Fauna - Wolf SDD# 556
Specifications
Mono 5-Seconds Looping
5 Sounds Req'd
Ambient Fauna - Deer SDD# 600
Specifications
Mono 5-Seconds Looping
5 Sounds Req'd
Ambient fauna - Breeding/Fearful/Passive - Camel SDD# 656
Specifications
Mono 5-Seconds Looping
5 Sounds Req'd
Ambient fauna - Breeding/Fearful/Passive - Hawk SDD# 679
Specifications
Mono 5-Seconds Looping
5 Sounds Req'd
Ambient fauna - Breeding/Fearful/Passive - Seagull SDD# 688
Specifications
Mono 5-Seconds Looping
5 Sounds Req'd
Ambient fauna - Breeding/Fearful/Passive - Wolf SDD# 700
Specifications
Mono 3-Seconds Non-Looping
5 Sounds Req'd
Ambient fauna - Breeding/Fearful/Passive - African Elephant SDD# 701
Specifications
Mono 3-Seconds Non-Looping
5 Sounds Req'd
Ambient fauna - Breeding/Fearful/Passive - Pig SDD# 722
Specifications
Mono 5-Seconds Looping
5 Sounds Req'd
Fauna Actions - Wolf SDD# 743
Specifications
Mono 3-Seconds Non-Looping
5 Sounds Req'd
Fauna Actions - African Elephant SDD# 744
Specifications
Mono 3-Seconds Non-Looping
5 Sounds Req'd
Fauna Actions - Deer SDD# 770
Specifications
Mono 3-Seconds Non-Looping
5 Sounds Req'd
Fauna Actions - Pig SDD# 781
Specifications
Mono 3-Seconds Non-Looping
5 Sounds Req'd
Fauna Actions - Sheep SDD# 782
Specifications
Mono 3-Seconds Non-Looping
5 Sounds Req'd
Fauna Actions - Seagull SDD# 794
Specifications
Mono 3-Seconds Non-Looping
5 Sounds Req'd
Gathering - Hoeing Dirt SDD# 136
Specifications
Mono 5-Seconds Non-Looping
5 Sounds Req'd
Construction - Ore SDD# 125
Specifications
Mono 2-Minutes Non-Looping
9 Sounds Req'd
Death - Multiple SDD# 108
Specifications
Stereo 2-Minutes Looping
2 Sounds Req'd
Moving - Road SDD# 89
Specifications
Mono 1-Second Non-Looping
5 Sounds Req'd
- 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.
For a more tactical gameplay it would be interesting to have the ability to position my units quickly.
- You select some of your units
- Now you can press and hold M2 on your mouse and draw a line (If you only click, the units shall react as usual)
- When you release M2, your selected units should spread out on this line
- 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
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.
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.
Mounted Unit - Grass SDD# 356
Specifications
MONO 1-Second Non-Looping
5 Sounds Req'd
Mounted Unit - Snow SDD# 364
Specifications
MONO 1-Second Non-Looping
5 Sounds Req'd
Mounted Unit - Road SDD# 372
Specifications
MONO 1-Second Non-Looping
5 Sounds Req'd
Destruction - Civil SDD# 381
Specifications
MONO 2-Seconds Non-Looping
5 Sounds Req'd
Destruction - Generic SDD# 391
Specifications
MONO 2-Seconds Non-Looping
5 Sounds Req'd
Destruction - Military SDD# 393
Specifications
MONO 2-Seconds Non-Looping
5 Sounds Req'd
Windows 7 Ultimate 64. 8gb RAM, 8600 gt. Build: May 13 2012 - 11858 (Alpha 10 Jhelum)
- Objects can be superimposed on each other.
Game:
Core (important):
- Built disappear (Keshtzar, Jowgah, farm, wooden towers) - harvest is collecting, but the building does not appear on the map. (The cause did not understand)
- Sound is continue when minimized applications
- 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.
- Not the realistic behavior of combat units (in the attack and the formation of the column (quickly and erratically))
- Units pass through each other
- Dead units fall into the ground (+ no blood)
- It is impossible to Save the name
- Units can not break up, if there is to meet each other.
- No debris from the destroyed buildings
Graphics:
- Weak graphics (no smoothing, blur, ladders, low poly objects (tree trunk - 3 polygons))
- No effects of combat (fragments when hit)
- Low light (picture does not look natural, harsh shadows)
Other:
- You must assign at Esc - main menu.
- No shortcuts control units (attack, patrol, etc.)
- No support for Russian letters
- Sometimes not show tooltips on icons in the upper left corner
- Military units can extract resources (it is negative).
- 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
- 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)
- Allow selection of skybox texture, and (if possible) shades.
- 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
Atlas uses a statically linked version of DevIL, which is LGPL, so we need to dynamically link instead before distributing Atlas.
It needs to work.
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.
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
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 ("******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************" != "****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************...")
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.
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.
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?
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.
Set up the access permissions so anonymous users can access the public files.
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.
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.
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
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.
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?)
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.
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.
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).
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.
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.)
(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
The new serialization and CParamNode code needs tests and documentation.
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.
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.
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).
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.
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.
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.
Need to remember to add the GPL header block to all the new source files.
Need to merge the code currently in the Hg branch into SVN. (Now seems as good a time as any.)
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.
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
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.
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).
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.
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).
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.
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.
Shouldn't be allowed to build buildings in fog/shroud areas. Construction previews should correctly highlight red when obstructed.
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.
Discovered stone mines glow when they should be dimmed out because I have no units within the area
Apply the patch for this once it's available.
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.
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.
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.
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).
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)
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" />
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
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?
Need to fix SpiderMonkey's imacro_asm.py (and send the patch to Mozilla).
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:
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.
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.
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.
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!
The documentation at http://svn.wildfiregames.com/docs/ needs to be updated.
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.
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.
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).
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?
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
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
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:
- This project is out of date: engine - Release Win32 Would you like to build it? I click YES
- 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)..
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.
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")).
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
Something similar to, if not the same, shown in the mockup. Must be 230px wide.
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.
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:
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).
Fixes a TODO in the UnitAI.js simulation component.
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.
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
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.
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.
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
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.
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.
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.
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.
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.
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.
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.
Universal Fire Crackling Sound SDD# 177
Specifications
MONO 5 Seconds Non-Looping
5 sounds req'd
Sizzling of Hot Metal Against Flesh SDD# 182
Specifications
MONO 5 Seconds Non-Looping
5 Sounds req'd
Spreading Fire Sound SDD# 187
Specifications
MONO 5 Seconds Non-Looping
5 Sounds req'd
Multiple Arrows in Air - Looping SDD# 195
Specifications
Stereo 2 Minutes Looping
1 sound req'd
Sling Impacting Wood SDD# 247
Specifications
MONO 2 seconds Non-Looping
12 sounds req'd
Sling Impact Stone SDD# 257
Specifications
MONO 2 Seconds Non-Looping
12 Sounds req'd
Onager - Shooting SDD #282
Specifications
Mono 2 Seconds Non-Looping
5 sounds req'd
Onager - Reloading SDD #283
Specifications
Mono 2 Seconds Non-Looping
5 sounds req'd
Balista - Moving SDD #284
Specifications
Mono 2 Seconds Non-Looping
5 Sounds req'd
Balista - Shooting SDD #285
Specifications
Mono 2 Seconds Non-Looping
5 Sounds req'd
Balista - Reloading SDD #286
Specifications
Mono 2 Seconds Non-Looping
5 Sounds req'd
Land Ram - Moving SDD #287
Specifications
Mono 2 Seconds Non-Looping
5 Sounds req'd
Onager Stone Hitting Wood SDD #289
Specifications
MONO 2-Seconds Non-Looping
5 Sounds req'd
Onager Stone Hitting Stone SDD #290
Specifications
MONO 2-Seconds Non-Looping
5 Sounds Req'd
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.
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.
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)
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?)
- General-purpose trigger system
See this topic for forum discussion.
Here is the recent topic: http://www.wildfiregames.com/forum/index.php?showtopic=18211
Try to avoid placing resources on hills because of the pathfinding issues they cause.
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.
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).
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.
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?
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.
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.
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.
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.
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.
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).
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.
Here is a patch. Notice that there is no such an option for scenarios because of their non-fixed player count.
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.
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.
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.)
This patch allows our random map scripts to use the advanced graphical features (fog, bloom, etc.).
Resource trickle component for Persian Apadana (and possible future entities/mods).
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:
- std::stringstream, or
- snprintf perhaps with the 'g' flag, if it can be massaged into a
xs:double-compatible format - MIT-licensed
ecvtreplacement: http://piumarta.com/software/fcvt/
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.
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)
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:
You should import a head mesh from the game to get the right size and form to fit.
References:
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
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
When trying to select the briton wonder foundation, one has to click somewhere on the middle of it instead of anywhere on the footprint.
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.
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.
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.
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.
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"
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)
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.
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
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
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
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.
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.
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.
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.
Tutorial mentions camels, but those were removed in r24432.
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.
Currently is very hard to click as only selecting the base works
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
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.
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)
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)
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.
Currently dropdown values on the options page are translated incorrectly, because they have no context.
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
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
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
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
ref #4362
issue
- the link of old releases has changed
- All released versions of zlib
related
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.
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.

to reproduce
- navigate to
source/tools/entityand runcheckrefs.py
bisect
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
related
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
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.
related
Similar to #6503, but not reopening that.
to reproduce
- Default settings applied
- Start a
Mainlandmap with theKushites - Produce some
Blemmye Desert Raider(produced at theBlemmye 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.
to reproduce
- start the
egypt_3pv3pmap - 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).
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 61 61 <variant file="biped/approach_praise.xml"/> 62 62 </group> 63 63 <group> 64 <variant name="Idle"/>64 <variant frequency="1" name="Idle"/> 65 65 <variant file="biped/formations/phalanx_front.xml"/> 66 66 <variant file="biped/formations/phalanx_mid.xml"/> 67 67 <variant file="biped/formations/phalanx_back.xml"/>
related ticket
to reproduce
- when a
Champion Infantry Crossbowmandies, the remaining weapon raises up like a cross - it occurs only with the champion unit, not with the normal crossbowman
- when a
Han War Chariotdies, 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.
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/" 1048 1048 1049 1049 mkdir -p "molten-vk" 1050 1050 pushd "molten-vk" > /dev/null 1051 if [[ "$force_rebuild" = "true" ]] || [[ ! -e .already-built ]] || [[ "$(<.already-built)" != "$MOLTENVK_VERSION" ]] 1051 if [[ "$force_rebuild" = "true" ]] || [[ ! -e .already-built ]] || [[ "$(<.already-built)" != "$MOLTENVK_VERSION" ]] || [[ ! -e ../../../binaries/system/libMoltenVK.dylib ]] 1052 1052 then 1053 1053 INSTALL_DIR="../../../../binaries/system/" 1054 1054 rm -f .already-built
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
Issues noticed when scrolling through the Entity component documentation:
Stackabilityinhelpers/Attack.jsbreaks html with specialDOUBLE QUOTATION MARK (“)- use normal escaped double quotes
\"
- use normal escaped double quotes
SortingOrderinFormationbreaks html with specialDOUBLE QUOTATION MARK (“)- use normal escaped double quotes
\"
- use normal escaped double quotes
TerritoryDecaylooks messy in itsRELAX NG grammar fragment. (its the only one)EntityLimitscould use more explanation on its children- fix 8 typos
- 1x
milisecondsshould bemilliseconds - 1x
resoucesshould beresources - 3x
occurancesshould beoccurrences - 1x
occurenceshould beoccurrence - 1x
decendingshould bedescending - 1x
columsshould becolumns
- 1x
- remove multiple double points at the end of sentences
..- added through
convertrng.xsl.../>.</p>
- added through
ModifiersManagerseems 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
-
binaries/data/mods/public/simulation/components/ModifiersManager.js
a b 1 1 function ModifiersManager() {} 2 2 3 3 ModifiersManager.prototype.Schema = 4 "< empty/>";4 "<a:component type='system'/><empty/>"; 5 5 6 6 ModifiersManager.prototype.Init = function() 7 7 {
- add the
missingand remove theredundantvalues 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.jsfile, for exampleMainMenuPage.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`); }
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
build/resources/0ad.sh source/tools/autolog/SVNLog/sql/createdb.sh source/tools/templatessorter/templatessorter.sh source/tools/tracelogger/tracelogger_options.sh
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.
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.
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.
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.
If I select a building and right click the minimap the rally point does not get set. This is inconsistent with normal movement commands.
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
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.
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.)
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)
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.
to reproduce
- start Atlas
- select
Mainlandand clickGenerate map - select the
Objecttab (the little blue man lying on the golden ball) - (switch one more time back to the
Maptab to make sure)
bisect
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
5xor even better10xspeed and set the view to that player.- Alternatively, you can start a game with
delenda_estactivated and set the game speed to10x.
- Alternatively, you can start a game with
- the visibility does not adjust (
20x) or lags behind noticeable (5x), if you lower the speed below2xit does work properly. - See GIF/image below for more clarity.
bisect
workaround
Set smoothlos=false
reproducible
When watching in 20xfast-forward with smootlos=true in A25b, the visibility works correctly.
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.
- Run
make scriptinterface - Edit a file like
lib/status.hand 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.
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).
- Bundle Programming Guide
- Info.plist
- #macdev on irc.freenode.net
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.
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.
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.
JSON parsing error messages should be more helpful. Would help use code monkeys debug our technologies. :)
I don't know if this bug is related to 0ad or if it's a Codeblocks- or Ubuntu bug.
Steps to reproduce:
- Open pyrogenesis.workspace in Codeblocks
- Build (debug or release)
- Press F8 to start debugging. Switch to another program before the 0ad window opens
- 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!
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
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.
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.
- mozjs-24 release discussion: mozilla bug 919277
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.
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.
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)
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.
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.
- They enforce some consistency in naming which should make it easier to find the right function in JS.
- It expresses the relation between the naming of setters and getters in the GameView class and in the interface files (JSInterface_GameView.*)
- 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.
- It reduces code duplication.
I'd like to hear some comments before committing it.
Same goal, same comments and same approach as #2126.
Any comments are welcome, otherwise I'll commit the patch this weekend.
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!
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!
Since all remaining uses of ScriptableObject/CJSObject have been removed (#2126, #2137), the related files can now also be removed.
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) ===|
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.
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.
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!
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).
#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:
- JavascriptDebugging
- JavascriptDebuggingServer
- the link on the wiki frontpage
- 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.
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
Depends on
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
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.
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.
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)
- 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)
- 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:
- Allocate a GC thing on the heap
- Record this pointer in the store buffer with a post barrier (because it points into the nursery)
- Deallocate the pointer on the heap before the next minor GC (the pointer itself, not the value it points to)
- 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.
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?
I don't own a Mac, so someone else needs to take over this task. You basically have to:
- Apply the most recent patch in #1886
- Copy the SpiderMonkey source tarbal to libraries/source/spidermonkey (download: https://ftp.mozilla.org/pub/mozilla.org/js/mozjs-24.2.0.tar.bz2)
- 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).
- Build the library using the build script and build 0 A.D.
- 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.
Upgrade cxxtest to support new features like the XmlPrinter which is needed for Jenkins integration.
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.
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
When updating, don't forget to also fix #2684 and #1374 and #2973.
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
Once a day, the bot should:
- Save a copy of each of the (two) existing POT files.
- Regenerate the POT files.
- 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.
- 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.
- 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.
- 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.
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
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.
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
Since Blender works for getting animations in the game now, I'm going to start working on making fauna animations.
Some animals (wildebeests, goats, african elephants and north african elephants) remain to stand after dying in Alpha 9 Ides of March.
Screenshot attached.
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.
It would be nice to have descriptions of military formations as tooltips.
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.
The two alert buttons currently have tooltips only with the texts "Raise an alert!" and "End of alert.", with no explanation of the effects.
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.
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");
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\
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
- 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.]
- 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).
UI for editing (and previewing) cinematics tracks.
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.
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
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.
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
- https://github.com/0ad/0ad/search?utf8=%E2%9C%93&q=CFG_GET_VAL&type=
- https://github.com/0ad/0ad/search?utf8=%E2%9C%93&q=CFG_MOD&type=
- https://github.com/0ad/0ad/search?utf8=%E2%9C%93&q=CFG_USER&type=
- https://github.com/0ad/0ad/search?l=C%2B%2B&q=CFG_SYSTEM&type=&utf8=%E2%9C%93
- https://github.com/0ad/0ad/search?utf8=%E2%9C%93&q=g_ConfigDB&type=
Since we use g_ConfigDB everywhere else we could also nuke the macro
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.
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".
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
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)
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?
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.
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.
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.
- 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.
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)
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.
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.
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:
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.
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.
The dropdown width of the mapselection in the new gamesetup UI of a23 is too small for all mapnames.
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.
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.
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.
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.
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
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
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
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.
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.
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.
to reproduce
- Start a game with the
autostartcommand 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
- 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
1 1 /** 2 2 * This class choses the title of the loading screen page. 3 3 */ 4 4 class TitleDisplay 5 5 { 6 6 constructor(data) 7 7 { 8 8 let loadingMapName = Engine.GetGUIObjectByName("loadingMapName"); 9 9 loadingMapName.caption = sprintf( 10 10 data.attribs.mapType == "random" ? this.Generating : this.Loading, 11 { "map": translate(data.attribs.settings. Name) });11 { "map": translate(data.attribs.settings.mapName) }); 12 12 } 13 13 } 14 14 15 15 TitleDisplay.prototype.Generating = translate("Generating “%(map)s”"); 16 16 17 17 TitleDisplay.prototype.Loading = translate("Loading “%(map)s”");
possible Solution:
The addition of || data.attribs.settings.Name solves the problem, but is this the right solution?
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'
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
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.
issue
- start a game from the command line with the
-autostart-nonvisualflag
binaries/system/pyrogenesis -conf=mod.enabledmods:"public" -autostart="random/mainland" -autostart-nonvisual
- Segfault
related
bbhas already created a patch. It is better to also create a ticket to increase the chances that it will not be forgotten.
- IRC 23/Apr/22
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)
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.
Here is the list of manual pages, where are some pictures not showing up https://trac.wildfiregames.com/wiki/Manual_MainMenu
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.
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.
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)
I'm clicking on it and 9/10 times nothing happens, 1/10 times it actually finds an idle unit.
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.
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.
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 .
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.
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.)
All of the games have such option when player wants to choose a civ from dropbox.
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 :)
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.
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 :)
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.
Problems solved in this patch:
- Modifying
skeletons.xmlshould invalidate the model/animation cache, since the COLLADA converter depends on it for skeletal models, this will reduce modeling confusion CColladaManageruses a weird old caching technique, it should useCCacheLoaderinstead, with hash keyed onskeletons.xmland 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
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!
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.
Fixed the BOM that appears in the very beginning of the intro.txt file.
In-game, it got rendered as a '?'
Patch attached.
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.
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 ;) )
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__)
Pasteboards seem the way to go, as in NSPasteboard. We only need to worry about the 10.6+ API for now.
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.
The attached patch remove unneded link-only dependencies on boost_system and boost_filesystem.
Tested on Linux.
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.
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
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.
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.
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)
Screenshot:
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
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
There are missing break statements in messages.js: handleNetMessage() causing obj.caption to be overwritten.
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
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.
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.
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.
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.)
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.
The default maps show as "Acropolis 1" instead of what's listed in gamesetup.js.
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.
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).
Currently it is shown every time the menu appears, e.g. after finishing a game and returning to main menu.
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.
This happened to me in the latest revision but I experienced it as well about a week ago.
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.
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]
See: http://www.wildfiregames.com/forum/index.php?showtopic=16860
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.
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: {
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
This is consistently reproducible for me:
- Load a map in Atlas (include
-serializationtestoption), Acropolis 1 works - Start simulation test
- Build a field
- When construction finishes, delete the field
- 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).
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.
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
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.
Steps to reproduce:
- Select a civic center.
- 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.
Set ownership so player color in the actors will be visible.
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.
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.
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.
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.
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.)
After garisonning a merchant ship with a trader, it can result in non-rounded gains.
See the attached screenshot.
Updating the three valgrind header from r7573 to the current stable 3.8.1.
Fix build failures.
Fixes some compile warnings from #1851
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
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.
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.
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.
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

















































































































