Page MenuHomeWildfire Games

Random maps: Balanced resources
Needs RevisionPublic

Authored by Feldfeld on Aug 27 2021, 12:51 PM.

Details

Reviewers
lyv
Group Reviewers
Balancing
Restricted Owners Package(Owns No Changed Paths)
Summary

This patch currently adds a function which places additionnal food around player bases in a balanced way. It is a bit WIP, it can be improved due to (hopefully) feedback from other players, and there are 1 or 2 features missing.
It could also be extended to other resources.

The multiplayer community is interested in the balance of the game, and map balancing is an important part of it. Since mainland is the most standard map played online, it is the first map getting changed in this patch.
The biggest cause of imbalance in multiplayer games is the availability of additionnal food near the player base. Because this food is faster to gather than say fields, and because it can facilitate strategies such as cavalry rushing, you can see there is an interest of having each player get a similar amount of food around his base.
Wood availability is another cause of imbalanced which I will probably address some point later.
You can note that the code is perhaps a bit longer than what you would expect, with a few uses of random functions and differentiation between hunt and berries, that is because I not only want the map to be balanced but also to emulate the diversity we had with maps where resource distribution is completely random (so it is possible one player has hunt while the other has berries).

Despite it being a bit WIP, feel free to review the work already done from a code style / conventions standpoint.

A few things to note:

  • I don't really know where the function getSurroundingAreas should be, but remember it could be extended to only keeping the area which doesn't intersect with other players area.
  • foodAvailability and huntBerryRatio are arguments that would typically be set in the biome files.

For now mainland uses it, but as you can imagine it should be very easy to plug and play in many other maps.

Also forgot to remove debug line, don't mind it.

Test Plan

Generate maps, search for bugs, verify that resources are balanced and gameplay is enjoyable

Diff Detail

Lint
Lint Skipped
SeverityLocationCodeMessage
Warningbinaries/data/mods/public/maps/random/mainland.js:174ESLINTno-trailing-spaces
Warningbinaries/data/mods/public/maps/random/mainland.js:188ESLINTno-trailing-spaces
Warningbinaries/data/mods/public/maps/random/mainland.js:189ESLINTbrace-rules/brace-on-same-line
Warningbinaries/data/mods/public/maps/random/rmgen-common/gaia_entities.js:342ESLINTno-trailing-spaces
Warningbinaries/data/mods/public/maps/random/rmgen-common/gaia_entities.js:353ESLINTbrace-rules/brace-on-same-line
Warningbinaries/data/mods/public/maps/random/rmgen-common/gaia_entities.js:355ESLINTprefer-const
Warningbinaries/data/mods/public/maps/random/rmgen-common/gaia_entities.js:356ESLINTprefer-const
Warningbinaries/data/mods/public/maps/random/rmgen-common/gaia_entities.js:357ESLINTprefer-const
Warningbinaries/data/mods/public/maps/random/rmgen-common/gaia_entities.js:358ESLINTprefer-const
Warningbinaries/data/mods/public/maps/random/rmgen-common/gaia_entities.js:359ESLINTprefer-const
Warningbinaries/data/mods/public/maps/random/rmgen-common/gaia_entities.js:360ESLINTprefer-const
Warningbinaries/data/mods/public/maps/random/rmgen-common/gaia_entities.js:361ESLINTprefer-const
Warningbinaries/data/mods/public/maps/random/rmgen-common/gaia_entities.js:362ESLINTcomma-spacing
Warningbinaries/data/mods/public/maps/random/rmgen-common/gaia_entities.js:367ESLINTno-trailing-spaces
Warningbinaries/data/mods/public/maps/random/rmgen-common/gaia_entities.js:372ESLINTno-trailing-spaces
Warningbinaries/data/mods/public/maps/random/rmgen-common/gaia_entities.js:373ESLINTprefer-const
Warningbinaries/data/mods/public/maps/random/rmgen-common/gaia_entities.js:373ESLINTbrace-rules/brace-on-same-line
Warningbinaries/data/mods/public/maps/random/rmgen-common/gaia_entities.js:375ESLINTbrace-rules/brace-on-same-line
Warningbinaries/data/mods/public/maps/random/rmgen-common/gaia_entities.js:376ESLINTbrace-rules/brace-on-same-line
Warningbinaries/data/mods/public/maps/random/rmgen-common/gaia_entities.js:376ESLINTbrace-rules/brace-on-same-line
Auto-Fixbinaries/data/mods/public/maps/random/mainland.js:174TXT6Trailing Whitespace
Auto-Fixbinaries/data/mods/public/maps/random/mainland.js:188TXT6Trailing Whitespace
Auto-Fixbinaries/data/mods/public/maps/random/rmgen-common/gaia_entities.js:342TXT6Trailing Whitespace
Auto-Fixbinaries/data/mods/public/maps/random/rmgen-common/gaia_entities.js:367TXT6Trailing Whitespace
Auto-Fixbinaries/data/mods/public/maps/random/rmgen-common/gaia_entities.js:372TXT6Trailing Whitespace
Unit
Unit Tests Skipped
Build Status
Buildable 18243
Build 42835: Vulcan BuildJenkins
Build 42834: Vulcan Build (macOS)Jenkins
Build 42833: Vulcan Build (Windows)Jenkins

Event Timeline

Feldfeld created this revision.Aug 27 2021, 12:51 PM
Feldfeld requested review of this revision.Aug 27 2021, 12:51 PM

It would make it easier for potential reviewers to take a look at your patch if you would provide context. :)
(And set the repository to 0 A.D. when uploading.)

lyv added a subscriber: lyv.Aug 27 2021, 3:36 PM
lyv added inline comments.
binaries/data/mods/public/maps/random/rmgen-common/gaia_entities.js
353

Just pass the player positions along with radius. The function returning discs for each is kinda not needed. pos.map(p => disk(pos, r)) is the whole function essentially.

binaries/data/mods/public/maps/random/rmgen/library.js
88 โ†—(On Diff #18476)

Its in the right place, but whats the case for its existence?

Also, name is kinda non descriptive, mostly because in this context, surrounding areas at first glance implies a search and return function. If kept, it could be get getCircleAreas or something.

lyv added a comment.Aug 27 2021, 3:43 PM

As for potentials, as mentioned before, I don't really want to consider too much, mostly because my vision for the entire thing has changed.

https://gist.github.com/livvv2k/a2aca768f7e612f7ecbe495415cb7081 as sent to another good soul who spent a whole of time in this.

When and if time allows, I would be spending my time implementing that, most likely as a mod. I have no clue if the new paradigm is even sane though, however, if it is, it would allow for async / threaded map gen which would probably allow to do a lot more fun things.

My main question is 'how necessary is this' versus regular placers with high enough repetitions?
My understanding is that the most relevant piece is the code that picks the area surrounding a player base, but that's just a "neighborconstraint" (can't remember the proper name, think it's not that) large enough, no?

Feldfeld updated this revision to Diff 18477.Aug 27 2021, 5:05 PM
Feldfeld marked 2 inline comments as done.
Feldfeld edited the summary of this revision. (Show Details)
Feldfeld set the repository for this revision to rP 0 A.D. Public Repository.

It would make it easier for potential reviewers to take a look at your patch if you would provide context. :)
(And set the repository to 0 A.D. when uploading.)

If it is what you mean, the context is that the multiplayer community is interested in the balance of the game, and map balancing is an important part of it. Since mainland is the most standard map played online, it is the first map getting changed in this patch.
The biggest cause of imbalance in multiplayer games is the availability of additionnal food near the player base. Because this food is faster to gather than say fields, and because it can facilitate strategies such as cavalry rushing, you can see there is an interest of having each player get a similar amount of food around his base.
Wood availability is another cause of imbalanced which I will probably address some point later.
You can note that the code is perhaps a bit longer than what you would expect, with a few uses of random functions and differentiation between hunt and berries, that is because I not only want the map to be balanced but also to emulate the diversity we had with maps where resource distribution is completely random (so it is possible one player has hunt while the other has berries).
I didn't know about the repository thing.

In D4232#179846, @smiley wrote:

As for potentials, as mentioned before, I don't really want to consider too much, mostly because my vision for the entire thing has changed.

https://gist.github.com/livvv2k/a2aca768f7e612f7ecbe495415cb7081 as sent to another good soul who spent a whole of time in this.

When and if time allows, I would be spending my time implementing that, most likely as a mod. I have no clue if the new paradigm is even sane though, however, if it is, it would allow for async / threaded map gen which would probably allow to do a lot more fun things.

It would indeed be nice, you have all my encouragements for this. For me, if I had time, I would make a new, stronger AI. But it sure does take time, and my studies are not over.

My main question is 'how necessary is this' versus regular placers with high enough repetitions?
My understanding is that the most relevant piece is the code that picks the area surrounding a player base, but that's just a "neighborconstraint" (can't remember the proper name, think it's not that) large enough, no?

I see 2 reasons for this, first, as I claim the map to be balanced, I really don't want some resources to fail to be placed, which is why even using areas I still have a lot of repetitions. Now I don't really know if my current values are good of necessary, I base this on tests I did in a23 I only have small memories of, but using areas for important stuff looks intuitive for me. Also, in giant map size there is a lot more retry needed (so we would need to tune for it), especially considering the area where resources can be placed is only a small annulus in the end.
The second reason is that the neighborconstraint would need a tileclass I believe, so it is necessary to have a different tileclass for each player I want to give resources. But I could be wrong.

binaries/data/mods/public/maps/random/rmgen/library.js
88 โ†—(On Diff #18476)

Makes sense. It might be possible that I reuse the code if I make similar balancing code for forests, but it's pretty much nothing.

Successful build - Chance fights ever on the side of the prudent.

Debug: 
Microsoft (R) Build Engine version 15.9.21+g9802d43bc3 for .NET Framework
Copyright (C) Microsoft Corporation. All rights reserved.

Release: 
Microsoft (R) Build Engine version 15.9.21+g9802d43bc3 for .NET Framework
Copyright (C) Microsoft Corporation. All rights reserved.

Link to build: https://jenkins.wildfiregames.com/job/vs2015-differential/5945/display/redirect

Successful build - Chance fights ever on the side of the prudent.

builderr-debug-macos.txt
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: ../../../binaries/system/libengine_dbg.a(precompiled.o) has no symbols
ld: warning: text-based stub file /System/Library/Frameworks//CoreAudio.framework/CoreAudio.tbd and library file /System/Library/Frameworks//CoreAudio.framework/CoreAudio are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//AudioToolbox.framework/AudioToolbox.tbd and library file /System/Library/Frameworks//AudioToolbox.framework/AudioToolbox are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//ForceFeedback.framework/ForceFeedback.tbd and library file /System/Library/Frameworks//ForceFeedback.framework/ForceFeedback are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//CoreVideo.framework/CoreVideo.tbd and library file /System/Library/Frameworks//CoreVideo.framework/CoreVideo are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//Cocoa.framework/Cocoa.tbd and library file /System/Library/Frameworks//Cocoa.framework/Cocoa are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//IOKit.framework/IOKit.tbd and library file /System/Library/Frameworks//IOKit.framework/IOKit are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//QuartzCore.framework/QuartzCore.tbd and library file /System/Library/Frameworks//QuartzCore.framework/QuartzCore are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//Metal.framework/Metal.tbd and library file /System/Library/Frameworks//Metal.framework/Metal are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//OpenGL.framework/OpenGL.tbd and library file /System/Library/Frameworks//OpenGL.framework/OpenGL are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//Security.framework/Security.tbd and library file /System/Library/Frameworks//Security.framework/Security are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//OpenAL.framework/OpenAL.tbd and library file /System/Library/Frameworks//OpenAL.framework/OpenAL are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//ApplicationServices.framework/ApplicationServices.tbd and library file /System/Library/Frameworks//ApplicationServices.framework/ApplicationServices are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//Cocoa.framework/Cocoa.tbd and library file /System/Library/Frameworks//Cocoa.framework/Cocoa are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//CoreFoundation.framework/CoreFoundation.tbd and library file /System/Library/Frameworks//CoreFoundation.framework/CoreFoundation are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//AppKit.framework/Versions/C/AppKit.tbd and library file /System/Library/Frameworks//AppKit.framework/Versions/C/AppKit are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//CoreData.framework/Versions/A/CoreData.tbd and library file /System/Library/Frameworks//CoreData.framework/Versions/A/CoreData are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/CommonPanels.framework/Versions/A/CommonPanels.tbd and library file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/CommonPanels.framework/Versions/A/CommonPanels are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/HIToolbox.tbd and library file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/HIToolbox are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Help.framework/Versions/A/Help.tbd and library file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Help.framework/Versions/A/Help are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/ImageCapture.framework/Versions/A/ImageCapture.tbd and library file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/ImageCapture.framework/Versions/A/ImageCapture are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Ink.framework/Versions/A/Ink.tbd and library file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Ink.framework/Versions/A/Ink are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/OpenScripting.framework/Versions/A/OpenScripting.tbd and library file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/OpenScripting.framework/Versions/A/OpenScripting are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Print.framework/Versions/A/Print.tbd and library file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Print.framework/Versions/A/Print are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/SecurityHI.framework/Versions/A/SecurityHI.tbd and library file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/SecurityHI.framework/Versions/A/SecurityHI are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/SpeechRecognition.framework/Versions/A/SpeechRecognition.tbd and library file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/SpeechRecognition.framework/Versions/A/SpeechRecognition are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//CoreGraphics.framework/Versions/A/CoreGraphics.tbd and library file /System/Library/Frameworks//CoreGraphics.framework/Versions/A/CoreGraphics are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//CoreText.framework/Versions/A/CoreText.tbd and library file /System/Library/Frameworks//CoreText.framework/Versions/A/CoreText are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//ImageIO.framework/Versions/A/ImageIO.tbd and library file /System/Library/Frameworks//ImageIO.framework/Versions/A/ImageIO are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//ColorSync.framework/Versions/A/ColorSync.tbd and library file /System/Library/Frameworks//ColorSync.framework/Versions/A/ColorSync are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/ATS.tbd and library file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/ATS are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ColorSyncLegacy.framework/Versions/A/ColorSyncLegacy.tbd and library file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ColorSyncLegacy.framework/Versions/A/ColorSyncLegacy are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//CoreServices.framework/Versions/A/CoreServices.tbd and library file /System/Library/Frameworks//CoreServices.framework/Versions/A/CoreServices are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/HIServices.tbd and library file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/HIServices are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/LangAnalysis.framework/Versions/A/LangAnalysis.tbd and library file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/LangAnalysis.framework/Versions/A/LangAnalysis are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/PrintCore.framework/Versions/A/PrintCore.tbd and library file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/PrintCore.framework/Versions/A/PrintCore are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/QD.framework/Versions/A/QD.tbd and library file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/QD.framework/Versions/A/QD are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/SpeechSynthesis.framework/Versions/A/SpeechSynthesis.tbd and library file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/SpeechSynthesis.framework/Versions/A/SpeechSynthesis are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//CoreImage.framework/Versions/A/CoreImage.tbd and library file /System/Library/Frameworks//CoreImage.framework/Versions/A/CoreImage are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLU.tbd and library file /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLU.dylib are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.tbd and library file /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/PrivateFrameworks/UIFoundation.framework/Versions/A/UIFoundation.tbd and library file /System/Library/PrivateFrameworks/UIFoundation.framework/Versions/A/UIFoundation are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//Foundation.framework/Versions/C/Foundation.tbd and library file /System/Library/Frameworks//Foundation.framework/Versions/C/Foundation are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//CFNetwork.framework/Versions/A/CFNetwork.tbd and library file /System/Library/Frameworks//CFNetwork.framework/Versions/A/CFNetwork are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/FSEvents.framework/Versions/A/FSEvents.tbd and library file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/FSEvents.framework/Versions/A/FSEvents are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/CarbonCore.tbd and library file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/CarbonCore are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/Metadata.framework/Versions/A/Metadata.tbd and library file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/Metadata.framework/Versions/A/Metadata are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/OSServices.framework/Versions/A/OSServices.tbd and library file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/OSServices.framework/Versions/A/OSServices are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SearchKit.framework/Versions/A/SearchKit.tbd and library file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SearchKit.framework/Versions/A/SearchKit are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/AE.framework/Versions/A/AE.tbd and library file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/AE.framework/Versions/A/AE are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/LaunchServices.tbd and library file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/LaunchServices are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/DictionaryServices.framework/Versions/A/DictionaryServices.tbd and library file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/DictionaryServices.framework/Versions/A/DictionaryServices are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SharedFileList.framework/Versions/A/SharedFileList.tbd and library file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SharedFileList.framework/Versions/A/SharedFileList are out of sync. Falling back to library file for linking.
ld: warning: object file (../../../libraries/osx/fmt/lib/libfmt.a(format.cc.o)) was built for newer OSX version (10.13) than being linked (10.12)
ld: warning: text-based stub file /System/Library/Frameworks//CoreFoundation.framework/CoreFoundation.tbd and library file /System/Library/Frameworks//CoreFoundation.framework/CoreFoundation are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//CoreAudio.framework/CoreAudio.tbd and library file /System/Library/Frameworks//CoreAudio.framework/CoreAudio are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//AudioToolbox.framework/AudioToolbox.tbd and library file /System/Library/Frameworks//AudioToolbox.framework/AudioToolbox are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//ForceFeedback.framework/ForceFeedback.tbd and library file /System/Library/Frameworks//ForceFeedback.framework/ForceFeedback are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//CoreVideo.framework/CoreVideo.tbd and library file /System/Library/Frameworks//CoreVideo.framework/CoreVideo are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//Cocoa.framework/Cocoa.tbd and library file /System/Library/Frameworks//Cocoa.framework/Cocoa are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//IOKit.framework/IOKit.tbd and library file /System/Library/Frameworks//IOKit.framework/IOKit are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//QuartzCore.framework/QuartzCore.tbd and library file /System/Library/Frameworks//QuartzCore.framework/QuartzCore are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//Metal.framework/Metal.tbd and library file /System/Library/Frameworks//Metal.framework/Metal are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//OpenGL.framework/OpenGL.tbd and library file /System/Library/Frameworks//OpenGL.framework/OpenGL are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//Security.framework/Security.tbd and library file /System/Library/Frameworks//Security.framework/Security are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//OpenAL.framework/OpenAL.tbd and library file /System/Library/Frameworks//OpenAL.framework/OpenAL are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//AppKit.framework/Versions/C/AppKit.tbd and library file /System/Library/Frameworks//AppKit.framework/Versions/C/AppKit are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//CoreData.framework/Versions/A/CoreData.tbd and library file /System/Library/Frameworks//CoreData.framework/Versions/A/CoreData are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//ApplicationServices.framework/Versions/A/ApplicationServices.tbd and library file /System/Library/Frameworks//ApplicationServices.framework/Versions/A/ApplicationServices are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/CommonPanels.framework/Versions/A/CommonPanels.tbd and library file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/CommonPanels.framework/Versions/A/CommonPanels are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/HIToolbox.tbd and library file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/HIToolbox are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Help.framework/Versions/A/Help.tbd and library file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Help.framework/Versions/A/Help are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/ImageCapture.framework/Versions/A/ImageCapture.tbd and library file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/ImageCapture.framework/Versions/A/ImageCapture are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Ink.framework/Versions/A/Ink.tbd and library file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Ink.framework/Versions/A/Ink are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/OpenScripting.framework/Versions/A/OpenScripting.tbd and library file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/OpenScripting.framework/Versions/A/OpenScripting are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Print.framework/Versions/A/Print.tbd and library file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Print.framework/Versions/A/Print are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/SecurityHI.framework/Versions/A/SecurityHI.tbd and library file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/SecurityHI.framework/Versions/A/SecurityHI are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/SpeechRecognition.framework/Versions/A/SpeechRecognition.tbd and library file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/SpeechRecognition.framework/Versions/A/SpeechRecognition are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//CoreImage.framework/Versions/A/CoreImage.tbd and library file /System/Library/Frameworks//CoreImage.framework/Versions/A/CoreImage are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLU.tbd and library file /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLU.dylib are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.tbd and library file /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//CoreGraphics.framework/Versions/A/CoreGraphics.tbd and library file /System/Library/Frameworks//CoreGraphics.framework/Versions/A/CoreGraphics are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//CoreText.framework/Versions/A/CoreText.tbd and library file /System/Library/Frameworks//CoreText.framework/Versions/A/CoreText are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//ImageIO.framework/Versions/A/ImageIO.tbd and library file /System/Library/Frameworks//ImageIO.framework/Versions/A/ImageIO are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//ColorSync.framework/Versions/A/ColorSync.tbd and library file /System/Library/Frameworks//ColorSync.framework/Versions/A/ColorSync are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/ATS.tbd and library file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/ATS are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ColorSyncLegacy.framework/Versions/A/ColorSyncLegacy.tbd and library file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ColorSyncLegacy.framework/Versions/A/ColorSyncLegacy are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//CoreServices.framework/Versions/A/CoreServices.tbd and library file /System/Library/Frameworks//CoreServices.framework/Versions/A/CoreServices are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/HIServices.tbd and library file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/HIServices are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/LangAnalysis.framework/Versions/A/LangAnalysis.tbd and library file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/LangAnalysis.framework/Versions/A/LangAnalysis are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/PrintCore.framework/Versions/A/PrintCore.tbd and library file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/PrintCore.framework/Versions/A/PrintCore are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/QD.framework/Versions/A/QD.tbd and library file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/QD.framework/Versions/A/QD are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/SpeechSynthesis.framework/Versions/A/SpeechSynthesis.tbd and library file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/SpeechSynthesis.framework/Versions/A/SpeechSynthesis are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/PrivateFrameworks/UIFoundation.framework/Versions/A/UIFoundation.tbd and library file /System/Library/PrivateFrameworks/UIFoundation.framework/Versions/A/UIFoundation are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//Foundation.framework/Versions/C/Foundation.tbd and library file /System/Library/Frameworks//Foundation.framework/Versions/C/Foundation are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//CFNetwork.framework/Versions/A/CFNetwork.tbd and library file /System/Library/Frameworks//CFNetwork.framework/Versions/A/CFNetwork are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/FSEvents.framework/Versions/A/FSEvents.tbd and library file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/FSEvents.framework/Versions/A/FSEvents are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/CarbonCore.tbd and library file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/CarbonCore are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/Metadata.framework/Versions/A/Metadata.tbd and library file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/Metadata.framework/Versions/A/Metadata are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/OSServices.framework/Versions/A/OSServices.tbd and library file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/OSServices.framework/Versions/A/OSServices are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SearchKit.framework/Versions/A/SearchKit.tbd and library file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SearchKit.framework/Versions/A/SearchKit are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//CoreFoundation.framework/Versions/A/CoreFoundation.tbd and library file /System/Library/Frameworks//CoreFoundation.framework/Versions/A/CoreFoundation are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/AE.framework/Versions/A/AE.tbd and library file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/AE.framework/Versions/A/AE are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/LaunchServices.tbd and library file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/LaunchServices are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/DictionaryServices.framework/Versions/A/DictionaryServices.tbd and library file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/DictionaryServices.framework/Versions/A/DictionaryServices are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SharedFileList.framework/Versions/A/SharedFileList.tbd and library file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SharedFileList.framework/Versions/A/SharedFileList are out of sync. Falling back to library file for linking.
ld: warning: object file (../../../libraries/osx/fmt/lib/libfmt.a(format.cc.o)) was built for newer OSX version (10.13) than being linked (10.12)
ld: warning: text-based stub file /System/Library/Frameworks//CoreFoundation.framework/CoreFoundation.tbd and library file /System/Library/Frameworks//CoreFoundation.framework/CoreFoundation are out of sync. Falling back to library file for linking.
builderr-release-macos.txt
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: ../../../binaries/system/libengine.a(precompiled.o) has no symbols
ld: warning: text-based stub file /System/Library/Frameworks//CoreAudio.framework/CoreAudio.tbd and library file /System/Library/Frameworks//CoreAudio.framework/CoreAudio are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//AudioToolbox.framework/AudioToolbox.tbd and library file /System/Library/Frameworks//AudioToolbox.framework/AudioToolbox are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//ForceFeedback.framework/ForceFeedback.tbd and library file /System/Library/Frameworks//ForceFeedback.framework/ForceFeedback are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//CoreVideo.framework/CoreVideo.tbd and library file /System/Library/Frameworks//CoreVideo.framework/CoreVideo are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//Cocoa.framework/Cocoa.tbd and library file /System/Library/Frameworks//Cocoa.framework/Cocoa are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//IOKit.framework/IOKit.tbd and library file /System/Library/Frameworks//IOKit.framework/IOKit are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//QuartzCore.framework/QuartzCore.tbd and library file /System/Library/Frameworks//QuartzCore.framework/QuartzCore are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//Metal.framework/Metal.tbd and library file /System/Library/Frameworks//Metal.framework/Metal are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//OpenGL.framework/OpenGL.tbd and library file /System/Library/Frameworks//OpenGL.framework/OpenGL are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//Security.framework/Security.tbd and library file /System/Library/Frameworks//Security.framework/Security are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//OpenAL.framework/OpenAL.tbd and library file /System/Library/Frameworks//OpenAL.framework/OpenAL are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//ApplicationServices.framework/ApplicationServices.tbd and library file /System/Library/Frameworks//ApplicationServices.framework/ApplicationServices are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//Cocoa.framework/Cocoa.tbd and library file /System/Library/Frameworks//Cocoa.framework/Cocoa are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//CoreFoundation.framework/CoreFoundation.tbd and library file /System/Library/Frameworks//CoreFoundation.framework/CoreFoundation are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//AppKit.framework/Versions/C/AppKit.tbd and library file /System/Library/Frameworks//AppKit.framework/Versions/C/AppKit are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//CoreData.framework/Versions/A/CoreData.tbd and library file /System/Library/Frameworks//CoreData.framework/Versions/A/CoreData are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/CommonPanels.framework/Versions/A/CommonPanels.tbd and library file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/CommonPanels.framework/Versions/A/CommonPanels are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/HIToolbox.tbd and library file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/HIToolbox are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Help.framework/Versions/A/Help.tbd and library file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Help.framework/Versions/A/Help are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/ImageCapture.framework/Versions/A/ImageCapture.tbd and library file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/ImageCapture.framework/Versions/A/ImageCapture are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Ink.framework/Versions/A/Ink.tbd and library file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Ink.framework/Versions/A/Ink are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/OpenScripting.framework/Versions/A/OpenScripting.tbd and library file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/OpenScripting.framework/Versions/A/OpenScripting are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Print.framework/Versions/A/Print.tbd and library file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Print.framework/Versions/A/Print are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/SecurityHI.framework/Versions/A/SecurityHI.tbd and library file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/SecurityHI.framework/Versions/A/SecurityHI are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/SpeechRecognition.framework/Versions/A/SpeechRecognition.tbd and library file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/SpeechRecognition.framework/Versions/A/SpeechRecognition are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//CoreImage.framework/Versions/A/CoreImage.tbd and library file /System/Library/Frameworks//CoreImage.framework/Versions/A/CoreImage are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLU.tbd and library file /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLU.dylib are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.tbd and library file /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//CoreGraphics.framework/Versions/A/CoreGraphics.tbd and library file /System/Library/Frameworks//CoreGraphics.framework/Versions/A/CoreGraphics are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//CoreText.framework/Versions/A/CoreText.tbd and library file /System/Library/Frameworks//CoreText.framework/Versions/A/CoreText are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//ImageIO.framework/Versions/A/ImageIO.tbd and library file /System/Library/Frameworks//ImageIO.framework/Versions/A/ImageIO are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//ColorSync.framework/Versions/A/ColorSync.tbd and library file /System/Library/Frameworks//ColorSync.framework/Versions/A/ColorSync are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/ATS.tbd and library file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/ATS are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ColorSyncLegacy.framework/Versions/A/ColorSyncLegacy.tbd and library file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ColorSyncLegacy.framework/Versions/A/ColorSyncLegacy are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//CoreServices.framework/Versions/A/CoreServices.tbd and library file /System/Library/Frameworks//CoreServices.framework/Versions/A/CoreServices are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/HIServices.tbd and library file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/HIServices are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/LangAnalysis.framework/Versions/A/LangAnalysis.tbd and library file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/LangAnalysis.framework/Versions/A/LangAnalysis are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/PrintCore.framework/Versions/A/PrintCore.tbd and library file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/PrintCore.framework/Versions/A/PrintCore are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/QD.framework/Versions/A/QD.tbd and library file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/QD.framework/Versions/A/QD are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/SpeechSynthesis.framework/Versions/A/SpeechSynthesis.tbd and library file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/SpeechSynthesis.framework/Versions/A/SpeechSynthesis are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/PrivateFrameworks/UIFoundation.framework/Versions/A/UIFoundation.tbd and library file /System/Library/PrivateFrameworks/UIFoundation.framework/Versions/A/UIFoundation are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//Foundation.framework/Versions/C/Foundation.tbd and library file /System/Library/Frameworks//Foundation.framework/Versions/C/Foundation are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//CFNetwork.framework/Versions/A/CFNetwork.tbd and library file /System/Library/Frameworks//CFNetwork.framework/Versions/A/CFNetwork are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/FSEvents.framework/Versions/A/FSEvents.tbd and library file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/FSEvents.framework/Versions/A/FSEvents are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/CarbonCore.tbd and library file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/CarbonCore are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/Metadata.framework/Versions/A/Metadata.tbd and library file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/Metadata.framework/Versions/A/Metadata are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/OSServices.framework/Versions/A/OSServices.tbd and library file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/OSServices.framework/Versions/A/OSServices are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SearchKit.framework/Versions/A/SearchKit.tbd and library file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SearchKit.framework/Versions/A/SearchKit are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/AE.framework/Versions/A/AE.tbd and library file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/AE.framework/Versions/A/AE are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/LaunchServices.tbd and library file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/LaunchServices are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/DictionaryServices.framework/Versions/A/DictionaryServices.tbd and library file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/DictionaryServices.framework/Versions/A/DictionaryServices are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SharedFileList.framework/Versions/A/SharedFileList.tbd and library file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SharedFileList.framework/Versions/A/SharedFileList are out of sync. Falling back to library file for linking.
ld: warning: object file (../../../libraries/osx/fmt/lib/libfmt.a(format.cc.o)) was built for newer OSX version (10.13) than being linked (10.12)
ld: warning: text-based stub file /System/Library/Frameworks//CoreFoundation.framework/CoreFoundation.tbd and library file /System/Library/Frameworks//CoreFoundation.framework/CoreFoundation are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//CoreAudio.framework/CoreAudio.tbd and library file /System/Library/Frameworks//CoreAudio.framework/CoreAudio are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//AudioToolbox.framework/AudioToolbox.tbd and library file /System/Library/Frameworks//AudioToolbox.framework/AudioToolbox are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//ForceFeedback.framework/ForceFeedback.tbd and library file /System/Library/Frameworks//ForceFeedback.framework/ForceFeedback are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//CoreVideo.framework/CoreVideo.tbd and library file /System/Library/Frameworks//CoreVideo.framework/CoreVideo are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//Cocoa.framework/Cocoa.tbd and library file /System/Library/Frameworks//Cocoa.framework/Cocoa are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//IOKit.framework/IOKit.tbd and library file /System/Library/Frameworks//IOKit.framework/IOKit are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//QuartzCore.framework/QuartzCore.tbd and library file /System/Library/Frameworks//QuartzCore.framework/QuartzCore are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//Metal.framework/Metal.tbd and library file /System/Library/Frameworks//Metal.framework/Metal are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//OpenGL.framework/OpenGL.tbd and library file /System/Library/Frameworks//OpenGL.framework/OpenGL are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//Security.framework/Security.tbd and library file /System/Library/Frameworks//Security.framework/Security are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//OpenAL.framework/OpenAL.tbd and library file /System/Library/Frameworks//OpenAL.framework/OpenAL are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//AppKit.framework/Versions/C/AppKit.tbd and library file /System/Library/Frameworks//AppKit.framework/Versions/C/AppKit are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//CoreData.framework/Versions/A/CoreData.tbd and library file /System/Library/Frameworks//CoreData.framework/Versions/A/CoreData are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//ApplicationServices.framework/Versions/A/ApplicationServices.tbd and library file /System/Library/Frameworks//ApplicationServices.framework/Versions/A/ApplicationServices are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/CommonPanels.framework/Versions/A/CommonPanels.tbd and library file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/CommonPanels.framework/Versions/A/CommonPanels are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/HIToolbox.tbd and library file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/HIToolbox are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Help.framework/Versions/A/Help.tbd and library file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Help.framework/Versions/A/Help are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/ImageCapture.framework/Versions/A/ImageCapture.tbd and library file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/ImageCapture.framework/Versions/A/ImageCapture are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Ink.framework/Versions/A/Ink.tbd and library file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Ink.framework/Versions/A/Ink are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/OpenScripting.framework/Versions/A/OpenScripting.tbd and library file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/OpenScripting.framework/Versions/A/OpenScripting are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Print.framework/Versions/A/Print.tbd and library file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Print.framework/Versions/A/Print are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/SecurityHI.framework/Versions/A/SecurityHI.tbd and library file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/SecurityHI.framework/Versions/A/SecurityHI are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/SpeechRecognition.framework/Versions/A/SpeechRecognition.tbd and library file /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/SpeechRecognition.framework/Versions/A/SpeechRecognition are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//CoreImage.framework/Versions/A/CoreImage.tbd and library file /System/Library/Frameworks//CoreImage.framework/Versions/A/CoreImage are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLU.tbd and library file /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLU.dylib are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.tbd and library file /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/PrivateFrameworks/UIFoundation.framework/Versions/A/UIFoundation.tbd and library file /System/Library/PrivateFrameworks/UIFoundation.framework/Versions/A/UIFoundation are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//Foundation.framework/Versions/C/Foundation.tbd and library file /System/Library/Frameworks//Foundation.framework/Versions/C/Foundation are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//CoreGraphics.framework/Versions/A/CoreGraphics.tbd and library file /System/Library/Frameworks//CoreGraphics.framework/Versions/A/CoreGraphics are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//CoreText.framework/Versions/A/CoreText.tbd and library file /System/Library/Frameworks//CoreText.framework/Versions/A/CoreText are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//ImageIO.framework/Versions/A/ImageIO.tbd and library file /System/Library/Frameworks//ImageIO.framework/Versions/A/ImageIO are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//ColorSync.framework/Versions/A/ColorSync.tbd and library file /System/Library/Frameworks//ColorSync.framework/Versions/A/ColorSync are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/ATS.tbd and library file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/ATS are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ColorSyncLegacy.framework/Versions/A/ColorSyncLegacy.tbd and library file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ColorSyncLegacy.framework/Versions/A/ColorSyncLegacy are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//CoreServices.framework/Versions/A/CoreServices.tbd and library file /System/Library/Frameworks//CoreServices.framework/Versions/A/CoreServices are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/HIServices.tbd and library file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/HIServices are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/LangAnalysis.framework/Versions/A/LangAnalysis.tbd and library file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/LangAnalysis.framework/Versions/A/LangAnalysis are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/PrintCore.framework/Versions/A/PrintCore.tbd and library file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/PrintCore.framework/Versions/A/PrintCore are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/QD.framework/Versions/A/QD.tbd and library file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/QD.framework/Versions/A/QD are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/SpeechSynthesis.framework/Versions/A/SpeechSynthesis.tbd and library file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/SpeechSynthesis.framework/Versions/A/SpeechSynthesis are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//CoreFoundation.framework/Versions/A/CoreFoundation.tbd and library file /System/Library/Frameworks//CoreFoundation.framework/Versions/A/CoreFoundation are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//CFNetwork.framework/Versions/A/CFNetwork.tbd and library file /System/Library/Frameworks//CFNetwork.framework/Versions/A/CFNetwork are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/FSEvents.framework/Versions/A/FSEvents.tbd and library file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/FSEvents.framework/Versions/A/FSEvents are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/CarbonCore.tbd and library file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/CarbonCore are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/Metadata.framework/Versions/A/Metadata.tbd and library file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/Metadata.framework/Versions/A/Metadata are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/OSServices.framework/Versions/A/OSServices.tbd and library file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/OSServices.framework/Versions/A/OSServices are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SearchKit.framework/Versions/A/SearchKit.tbd and library file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SearchKit.framework/Versions/A/SearchKit are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/AE.framework/Versions/A/AE.tbd and library file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/AE.framework/Versions/A/AE are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/LaunchServices.tbd and library file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/LaunchServices are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/DictionaryServices.framework/Versions/A/DictionaryServices.tbd and library file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/DictionaryServices.framework/Versions/A/DictionaryServices are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SharedFileList.framework/Versions/A/SharedFileList.tbd and library file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SharedFileList.framework/Versions/A/SharedFileList are out of sync. Falling back to library file for linking.
ld: warning: object file (../../../libraries/osx/fmt/lib/libfmt.a(format.cc.o)) was built for newer OSX version (10.13) than being linked (10.12)
ld: warning: text-based stub file /System/Library/Frameworks//CoreFoundation.framework/CoreFoundation.tbd and library file /System/Library/Frameworks//CoreFoundation.framework/CoreFoundation are out of sync. Falling back to library file for linking.

Link to build: https://jenkins.wildfiregames.com/job/macos-differential/4849/display/redirect

It would make it easier for potential reviewers to take a look at your patch if you would provide context. :)
(And set the repository to 0 A.D. when uploading.)

If it is what you mean, the context is that the multiplayer community is interested in the balance of the game, and map balancing is an important part of it. Since mainland is the most standard map played online, it is the first map getting changed in this patch.
The biggest cause of imbalance in multiplayer games is the availability of additionnal food near the player base. Because this food is faster to gather than say fields, and because it can facilitate strategies such as cavalry rushing, you can see there is an interest of having each player get a similar amount of food around his base.

For what it is worth, "imbalanced" res actually makes games much more fun for me. If everyone has the same food, especially if I know what type of food, then I can make a pretty good prediction as to whether or not I will be rushed. For example, look at games on African Plains. Everyone knows there is a ton of hunt. Everyone knows a lot of hunt means that a rush is likely. As a result, everyone makes a ton of men/cav early. Is that balanced? Sure. Do I know whether a rush is coming? Pretty close. Is that more fun than an unpredictable game? I don't think so. And I think the fact that African Plains is now a rarely played map reflects the fact that this isn't something that multiplayer community actually wants. This has been a compliant that has been repeated with respect to the balanced maps mod.

Personally, I would prefer if teams--not players-- had more balanced resources. That way the unpredictable, fun nature of the game is preserved while enhancing balance. Team balancing would also fix the 1v1 problem of imb resources because that would still be two different teams.

It would make it easier for potential reviewers to take a look at your patch if you would provide context. :)
(And set the repository to 0 A.D. when uploading.)

If it is what you mean, the context is that the multiplayer community is interested in the balance of the game, and map balancing is an important part of it. Since mainland is the most standard map played online, it is the first map getting changed in this patch.
The biggest cause of imbalance in multiplayer games is the availability of additionnal food near the player base. Because this food is faster to gather than say fields, and because it can facilitate strategies such as cavalry rushing, you can see there is an interest of having each player get a similar amount of food around his base.

For what it is worth, "imbalanced" res actually makes games much more fun for me. If everyone has the same food, especially if I know what type of food, then I can make a pretty good prediction as to whether or not I will be rushed. For example, look at games on African Plains. Everyone knows there is a ton of hunt. Everyone knows a lot of hunt means that a rush is likely. As a result, everyone makes a ton of men/cav early. Is that balanced? Sure. Do I know whether a rush is coming? Pretty close. Is that more fun than an unpredictable game? I don't think so. And I think the fact that African Plains is now a rarely played map reflects the fact that this isn't something that multiplayer community actually wants. This has been a compliant that has been repeated with respect to the balanced maps mod.

Personally, I would prefer if teams--not players-- had more balanced resources. That way the unpredictable, fun nature of the game is preserved while enhancing balance. Team balancing would also fix the 1v1 problem of imb resources because that would still be two different teams.

Right now, even if the total amount of food distributed is the same, the berry/hunt quantity is different for each player, so by looking at your own resources, you will be able to guess the food amount of your opponent, but you will not know if these are berries or hunt.
I also thought about the resource balancing by teams, but that would be more of a niche thing, only useful for the high level teamgames really, so I could have that as an option but it is not a priority. I still want to avoid the case where players (especially if less experienced) just get run over by a rush without being able to do anything due to not having resources.

Additionally, another way to make rushing less predictable in game, would be to have hunt being useful to things different than rush, say booming, or corralling.

Currently it is actually possible to make a pretty good boom using corrals, but it is quite risky, so only viable in pocket positions of teamgames. And right now it is quite hard to perform, I don't think the multiplayer community has the skills to do that.
If corralling is made more friendly for players, without having it be overpowered obviously, this could be a nice solution to this problem.

But even if we don't have a solution to this problem, I still think it's better to have balanced maps in the code. I don't know much about the criticisms about badosu's mod, as I wasn't really active at the time it was played, but I'm pretty sure the mod was quite popular.

I get what youโ€™re saying. I just disagree. If you have more berries, then a rush of any type is more likely. If you have more hunt then a rush of any type is more likely. If I know how much food someone has then I know about how quick they can be, so I know when a pure boom p3 attack will come. This makes information much more uniform, which decreases the incentive to scout and makes the game much more predictable. I think those are both clearly bad changes that take excitement out of the game.

This wonโ€™t help weaker players overall. Weaker players will be helped 1/3 of the time, weaker players will be the same a 1/3 if the time, and weaker players will be worse off a 1/3 if the time. If anything, this helps stronger players who will never be at a position disadvantage, which means it is, again, more predictable.

All the other proposals you say are fine, but none of those exist now. Which means those proposals donโ€™t do anything to address the concerns I am raising now.

Even if those proposals did exist, it doesnโ€™t change the fact that this proposal would still let players know about how fast another will be because by min 7 or 8 I will know you havenโ€™t rushed and therefore boomed. Thus, I will know about when a p3 attack will come and I can consequently prepare for it (by building walls or whatever if I think it is necessary).

Put simply, balancing by player instead of by team provides no benefit on average while introducing the negative predictability into the game.

If you have more berries, then a rush of any type is more likely. If you have more hunt then a rush of any type is more likely.

It is more likely... but it is far from guaranteed. So, if you play in this balanced map and you see you have 1 or 2 patches of berry other than the starting one, what are you going to do? Judge that a rush is more likely, decide to skip scouting, and make more men early and risk being at a disadvantage if the opponent decides to go full boom? Looks like scouting is still useful. Even without additional resources, scouting how much commitment an opponent has booming can still be useful, I have a good replay which shows that.

then I know about how quick they can be, so I know when a pure boom p3 attack will come

That is quite clearly because players don't know how to play the game. First of all they could very well decide not to attack immediately and tech into champions. They could decide to take a more defensive stance, and instead make another CC for economy, and wait for the enemy to attack (although I guess this strategy was more effective in a23/a24). And there are all the variants of p2 rushes, only experimented by Valihrant yet. Point is, I would rather have diversity in the different strategies available rather than different imbalanced timings. And even if this diversity was not viable/implemented yet, I will still want to merge balanced maps, because the goal is to make the game better (this also answers the point about corrals). If players knew how to play 0AD, like they do in AoE2, map imbalances would easily decide 50-80% of similar level games, not really the kind of diversity I want.

Plus, due to how many random maps exist in 0 A.D., I'm sure some of them are not going to receive this balance code, leaving more options.

We just arenโ€™t going to agree here. In my opinion this just forces a particular type of game that is available (but not forced) when res are balanced by team instead of by player

. Point is, I would rather have diversity in the different strategies available rather than different imbalanced timings. And even if this diversity was not viable/implemented yet, I will still want to merge balanced maps, because the goal is to make the game better (this also answers the point about corrals). If players knew how to play 0AD, like they do in AoE2, map imbalances would easily decide 50-80% of similar level games, not really the kind of diversity I want.

With respect to the above, that gets solved balancing team res. Any imbalances within that should then balance out with proper team play (which itself is an aspect of the game).

In my opinion this just forces a particular type of game

It forces nothing as soon as the meta is different than (rush OR p3 boom with timing attack), which it arguably already is in a25

With respect to the above, that gets solved balancing team res. Any imbalances within that should then balance out with proper team play (which itself is an aspect of the game).

Keep in mind that I give a big importance in 1v1 games, which also applies to the argument you responded to. As I said before, I already considered and am open to team balancing, and I could implement it either as an option or even as the default if that is also the wish of other players.

lyv added a comment.Aug 27 2021, 9:05 PM

From a technical standpoint, I guess you are trying to replicate AoE2 style distribution where the base resources of berries, 2 boars, etc. In that case, rather than making a swiss army knife of a function for N cases, it might be better to incorporate this into player placement.

The current player placement places stuff like chickens and whatnot, maybe the functionality doesn't need to be made so complex, and placement could just take distance thresholds for base resources.

This sounds awfully like replicating what base resources are meant to do.

The function already takes player base locations as a dependency so it obviously would semantically belong there.

Keep in mind that I give a big importance in 1v1 games, which also applies to the argument you responded to.

I donโ€™t see how this is relevantโ€”1v1s would still be balanced with โ€œteam resโ€ balancing (instead of โ€œplayer resโ€ balancing) because both players in a 1v1 would be on different teams. Never mind the fact that 4v4 is more more popular than 1v1

To avoid debate on this, which erroneously presupposes a zero-sum game, I think it would just make more sense to have some sort of game filter option that applies to all maps and allows for (1) random balancing, (2) team res balancing, and (3) player res balancing. In other words, I don't see why we can't just add option instead of replacing old options that people are already happy with.

From a technical standpoint, I guess you are trying to replicate AoE2 style distribution where the base resources of berries, 2 boars, etc. In that case, rather than making a swiss army knife of a function for N cases, it might be better to incorporate this into player placement.

It is a bit different than how it is done in AoE2, AoE2 has always the same resources around, here they can be different and the total amount can vary, but the only requirement is that in the end they are balanced. Also right now this additionnal food is placed further than than current base resources and in the end (so this constrains less the placement of other map features). Now is it enough to justify it not being in player placement ... probably not. I'll look into it later.

Keep in mind that I give a big importance in 1v1 games, which also applies to the argument you responded to.

I donโ€™t see how this is relevantโ€”1v1s would still be balanced with โ€œteam resโ€ balancing (instead of โ€œplayer resโ€ balancing) because both players in a 1v1 would be on different teams. Never mind the fact that 4v4 is more more popular than 1v1

I had to say it, because your first posts arguments were generic and applied to 1v1. This 50-80% stat for 1v1 would be very bad. Now why I think it applies to team games as well is again because of the less experienced player argument. For a TG where all players are approximately at the same level. My guess is that less experienced players generally have worse teamplay which is why I think player res balance still has an advantage here, they will not have a game ruined for bad reasons.

But as you said we can avoid debate and I could have a gamesetup option to choose the preferred way. It depends if dev team wants it, I don't want to make a feature if it isn't getting merged in the end, which is why I was conservative and made a very simple patch at first

Freagarach added a comment.EditedAug 28 2021, 6:36 AM

(With context I mean: https://trac.wildfiregames.com/wiki/SubmittingPatches#Makingsomechanges. But also thanks for the other context. ^^
Also, you set the repository correctly.)

marder added a subscriber: marder.Sep 8 2021, 6:57 PM
marder added a comment.Sep 8 2021, 7:03 PM

To throw it into the discussion here, because it seems related,
This map could solve balancing resources:
https://code.wildfiregames.com/D4053

Feldfeld updated this revision to Diff 18617.Sep 9 2021, 10:16 AM

Resource distribution has been moved to player.js, where base resources are done.

The team balance feature has been added, and there is now a dropdown in gamesetup to choose between 'no balance' (similar to before) 'player balance' and 'team balance'.
This dropdown setup should have 'no balance' as a default, so this should be the option taken in case the map was chosen randomly, I didn't check if that works yet.

Now that the nearby food is placed at the time of base placement, it means that map features which come later need to avoid it. In particular, for forests to avoid food is quite unnatural, the food objects could kind of create a hole in the forest, which is why forests are generally placed before.
As a solution, nearby forests could also be placed along with base placement, which was what I wanted to do anyway because forest balance is important. Note that the forest balance would be much simpler than the food, here the challenge would rather be to integrate it well with the rest of the map.

To throw it into the discussion here, because it seems related,
This map could solve balancing resources:
https://code.wildfiregames.com/D4053

This is an example of a map which is both balanced and quite unique. But my goal here is to give the options for existing maps to be balanced, so that players can choose between many maps which can feature balanced resources.

Feldfeld updated this revision to Diff 18618.Sep 9 2021, 10:46 AM
Feldfeld set the repository for this revision to rP 0 A.D. Public Repository.Sep 9 2021, 12:33 PM
Stan added a reviewer: Restricted Owners Package.Feb 21 2022, 10:48 PM
marder added a comment.EditedFeb 22 2022, 3:27 PM

after a quick test: It does work as advertised with player balance and no balance, but the team placement seems a bit less reliable?
What is the expected result in a 1v3 for example?

Further: you are right, the forest avoiding the food is a bit odd. They probably should be placed in the placePlayerBase function, but look similar to the other forests on the map, which is not trivial.

What I'm asking myself is if the same result could be achieved by modifying the placePlayerBase* functions that are already there or if the new function is necessary.

after a quick test: It does work as advertised with player balance and no balance, but the team placement seems a bit less reliable?
What is the expected result in a 1v3 for example?

My view on this, and what I implemented if I remember well, is that every player should have the same amount in expectation, but the actual amount received varies with players in the same team, to have some diversity and randomness.
So in a 1v3 the team of 3 players will in total get 3 times the food of the team with one player. This seems fair for me as by going 3v1 you still expect players to be on the same stand when starting and I don't think people would expect the single player to be compensated with a massive amount of food (or the team of 3 with no food)
For example, IIRC what I did was first randomly select a food amount corresponding to the mean, say 1500. What will happen then is that the single player p1 will receive that amount very reliably, so he will end up with 1500 food. The team of 3 will receive 1500*3=4500 food in total, but the amount received by each players will vary. For example p2 gets 800 food, p3 gets 2500f, p4 gets 1200f.
Generally, teams have the same number of player, for example 4v4 are frequent. In that case, both teams get the same amount, e.g. 8000f to be distributed among players, with varying and random amounts: e.g. p1 gets 3500f, p2 gets 1500f, p3 gets 0f (no additional food), and p4 gets 3000f, and a totally different distribution can happen for the other team where, for example, every player could get some additionnal food (unlike p3)

Further: you are right, the forest avoiding the food is a bit odd. They probably should be placed in the placePlayerBase function, but look similar to the other forests on the map, which is not trivial.

Yeah definitely a tough problem

What I'm asking myself is if the same result could be achieved by modifying the placePlayerBase* functions that are already there or if the new function is necessary.

Do you mean the function to place the food, or the forests?

My view on this, and what I implemented if I remember well, is that every player should have the same amount in expectation, but the actual amount received varies with players in the same team, to have some diversity and randomness.
So in a 1v3 the team of 3 players will in total get 3 times the food of the team with one player. This seems fair for me as by going 3v1 you still expect players to be on the same stand when starting and I don't think people would expect the single player to be compensated with a massive amount of food (or the team of 3 with no food)
For example, IIRC what I did was first randomly select a food amount corresponding to the mean, say 1500. What will happen then is that the single player p1 will receive that amount very reliably, so he will end up with 1500 food. The team of 3 will receive 1500*3=4500 food in total, but the amount received by each players will vary. For example p2 gets 800 food, p3 gets 2500f, p4 gets 1200f.
Generally, teams have the same number of player, for example 4v4 are frequent. In that case, both teams get the same amount, e.g. 8000f to be distributed among players, with varying and random amounts: e.g. p1 gets 3500f, p2 gets 1500f, p3 gets 0f (no additional food), and p4 gets 3000f, and a totally different distribution can happen for the other team where, for example, every player could get some additionnal food (unlike p3)

Makes sense, but I think that's not what you would expect when reading the description : Every team will receive the same amount of resources overall sounds to me like they actually get the exact same amount. So maybe that would need to be rephrased.

What I'm asking myself is if the same result could be achieved by modifying the placePlayerBase* functions that are already there or if the new function is necessary.

Do you mean the function to place the food, or the forests?

that was my thought, yes. As I see it, they basically do the same thing only with less balancing options and on a smaller area.

binaries/data/mods/public/maps/random/mainland.json
25 โ†—(On Diff #18618)

[the same] missing

Makes sense, but I think that's not what you would expect when reading the description : Every team will receive the same amount of resources overall sounds to me like they actually get the exact same amount. So maybe that would need to be rephrased.

Indeed, good catch

that was my thought, yes. As I see it, they basically do the same thing only with less balancing options and on a smaller area.

Actually I'm not sure I understand more precisely what is your idea.
When I did Mainland Balanced I considered the very near initial resources as a standard not to be touched, the goal was to emulate typical mainland generations that we could see except that it just so happened to be balanced in the end.
Modifying the existing placePlayerBase* functions for very near resources would require a complete rewrite I Imagine, and also the result would probably look quite unnatural for players, especially those used to old versions.
And if we still want to place resources farther than what these functions do keep in mind that more things come to play as maps may not allow enough space or require constraints (the new placePlayerBase function in this patch uses constraints provided by the map).
Now this could also be a good pretext to modify base generation to be similar to what we see in Delenda Est skirmish maps (with all initial resources being in the surrounding area of CC, nothing very close)

Actually I'm not sure I understand more precisely what is your idea.
When I did Mainland Balanced I considered the very near initial resources as a standard not to be touched, the goal was to emulate typical mainland generations that we could see except that it just so happened to be balanced in the end.
Modifying the existing placePlayerBase* functions for very near resources would require a complete rewrite I Imagine, and also the result would probably look quite unnatural for players, especially those used to old versions.
And if we still want to place resources farther than what these functions do keep in mind that more things come to play as maps may not allow enough space or require constraints (the new placePlayerBase function in this patch uses constraints provided by the map).
Now this could also be a good pretext to modify base generation to be similar to what we see in Delenda Est skirmish maps (with all initial resources being in the surrounding area of CC, nothing very close)

I certainly like the look of DE's Skirmish maps, so no problem from my side :)
But yes you got a point that would be a lot of work and it can make problems with the map constraints.
I was just thinking that they do conceptually the same. I.e. they were designed to provide a fair and balanced start for every player.
Your new functions do the same only on a much bigger area. So I was wondering if it would be a good idea to unify that.

lyv requested changes to this revision.Jun 22 2022, 1:54 PM

I am not sure if this is actually going to be that usable unless the map scripts are explicitly designed to be balanced. And having the overall balance of it tweaked via Gamesettings seems somewhat ineffective. Having the option doesn't really matter if the underlying generation isn't updated too.

I generally dislike having too much options as well since it essentially creates two branches of code. And while balance is important, so is imbalance.

I propose making actual balanced maps, starting with D4053, and your balanced mainland, under a new keyword, "Balanced".

Then again, balance and resource balance are also not the same thing. And the patch Is specific to food, as you see, this quickly spirals to the point where trying to plug this into existing maps as a knob in gamesettings isn't enough and you end up rewriting the map anyway.

Feel free to argue for the concept, nothing is set in stone. Read "requested changes" as "requested for comments".

This revision now requires changes to proceed.Jun 22 2022, 1:54 PM
Feldfeld added a comment.EditedJul 10 2022, 12:45 PM
In D4232#200536, @lyv wrote:

I am not sure if this is actually going to be that usable unless the map scripts are explicitly designed to be balanced. And having the overall balance of it tweaked via Gamesettings seems somewhat ineffective. Having the option doesn't really matter if the underlying generation isn't updated too.

I generally dislike having too much options as well since it essentially creates two branches of code. And while balance is important, so is imbalance.

I propose making actual balanced maps, starting with D4053, and your balanced mainland, under a new keyword, "Balanced".

Then again, balance and resource balance are also not the same thing. And the patch Is specific to food, as you see, this quickly spirals to the point where trying to plug this into existing maps as a knob in gamesettings isn't enough and you end up rewriting the map anyway.

Feel free to argue for the concept, nothing is set in stone. Read "requested changes" as "requested for comments".

I'm a bit lazy to write a structured post so here's some random points instead:

  • We don't pay anything to have maps balanced, I think most maps can be adapted easily
  • I think not having balanced maps is harmful for growth of multiplayer community
  • I made it an option, but I think also simply have most maps being balanced would be good as well. About another category with balanced maps, I don't like it so much as either there would be a very small selection of maps or it would be very redundant. I don't see why people that want balanced maps would need to be restricted to a small selection. Obviously right now the multiplayer community doesn't play very varied maps but I think it can be fixed with a rework and proper advertisement
  • AoE2 has pretty much all maps balanced (even MegaRandom gives equal res). Doesn't mean it's an example to follow or anything but still it's telling
  • Right now it's only food, but stone and metal would be easy, and for wood it would be harder but it's not a hard necessity (AoE2 had an history of wood imbalance)
  • The complexity of my current implementation is one thing, but note that I tuned it for having the best experience (with varied and biome-influenced starts) while having balanced maps. I think my food distribution is good, but the way I integrate the balance code with the rest of the map is another thing obviously, I don't know what to think of it.
  • By all means I don't mind having a "balanced mainland" version included instead if that can get it committed much more easily considering I don't really have much motivation working for the game anyway.

Just some random meta comments:

There are enough forum threads of people wanting balanced maps that we should definitively do something for a27.

my biggest question is to what extent should things be balanced?

We already have the 'basic' balance of the normal starting animals + straggler trees. Funny enough, many of the new scenario maps don't even have this anymore.
This patch aims to also balance the hunt in the surrounding area (and maybe in the future also the surrounding forests)
We have some symmetrical maps proposals which make 'everything' balanced, while still having random looks: D4053 or https://wildfiregames.com/forum/topic/85756-fair-multiplayer-random-map/
And we also have the multiplayer who just want a flat perfect balance plane: https://wildfiregames.com/forum/topic/83077-map-balanced-plainland/

So I'm not sure what the right balance is between randomness and balance / or what people want.
Should we go after all of the approaches? I.e. have some symmetrical maps, have a flat plane for people who don't like pretty things and try to include something like intermediate area balancing/ this patch?
Or should we choose one and stick to it?

Just some random meta comments:

There are enough forum threads of people wanting balanced maps that we should definitively do something for a27.

my biggest question is to what extent should things be balanced?

We already have the 'basic' balance of the normal starting animals + straggler trees. Funny enough, many of the new scenario maps don't even have this anymore.
This patch aims to also balance the hunt in the surrounding area (and maybe in the future also the surrounding forests)
We have some symmetrical maps proposals which make 'everything' balanced, while still having random looks: D4053 or https://wildfiregames.com/forum/topic/85756-fair-multiplayer-random-map/
And we also have the multiplayer who just want a flat perfect balance plane: https://wildfiregames.com/forum/topic/83077-map-balanced-plainland/

So I'm not sure what the right balance is between randomness and balance / or what people want.
Should we go after all of the approaches? I.e. have some symmetrical maps, have a flat plane for people who don't like pretty things and try to include something like intermediate area balancing/ this patch?
Or should we choose one and stick to it?

Personally, I think the best way to go would be to create a customizable map that allows the players to create map parameters to their tastes.

In my vision, this customizable map would allow the player/host to adjust the below:

  • Balance: per each player (every player has the same starting spot), per each team (each team has the same amount of res and topographic features, but the distribution of those features within the team is random), random (map generation is totally random per the res and topographic settings)
  • Resources: amount of berries, hunt, trees, stone, and metal
  • Topography: amount of elevated land, max elevation height, amount of water

For resources and topography, the player/host would have a sliding scale from 0 to 100, where 0 means that res/topographic feature doesn't exist and 100 means that res/topographic feature is everywhere.

I believe the above would satisfy everyone and would allow for the creation of an unlimited number of land and naval maps, which allow for an unlimited number of res distribution possibilities.

Is this something that would be easy to code? It seems like the silver bullet that could end the debate on "what is ideal" for this topic.

Feldfeld added a comment.EditedJul 12 2022, 7:55 PM

Just some random meta comments:

There are enough forum threads of people wanting balanced maps that we should definitively do something for a27.

my biggest question is to what extent should things be balanced?

We already have the 'basic' balance of the normal starting animals + straggler trees. Funny enough, many of the new scenario maps don't even have this anymore.
This patch aims to also balance the hunt in the surrounding area (and maybe in the future also the surrounding forests)
We have some symmetrical maps proposals which make 'everything' balanced, while still having random looks: D4053 or https://wildfiregames.com/forum/topic/85756-fair-multiplayer-random-map/
And we also have the multiplayer who just want a flat perfect balance plane: https://wildfiregames.com/forum/topic/83077-map-balanced-plainland/

So I'm not sure what the right balance is between randomness and balance / or what people want.
Should we go after all of the approaches? I.e. have some symmetrical maps, have a flat plane for people who don't like pretty things and try to include something like intermediate area balancing/ this patch?
Or should we choose one and stick to it?

I expect that players in general would find the symmetrical maps boring though maybe I am projecting too much. With symmetry you know exactly where the opponent's resources are located even if you never scouted it. I definitely think some symmetrical maps should be committed as they are unique and implement some interesting innovation but I don't expect it to solve the balanced gameplay players want. I think that echo shore/valley map is a good first candidate in this category.
As for the balance plainland as far as I understand it describes mainland (or balanced mainland) without hills/mountains. Easy to do but doesn't make a big difference, hills are quite rarely a source of imbalance in mainland as far as I'm concerned. Then I think the second paragraph in the OP describes a symmetry so see my thoughts above about that. Either way I think it's not a priority but if players request it that can be done easily I guess.

Just some random meta comments:

There are enough forum threads of people wanting balanced maps that we should definitively do something for a27.

my biggest question is to what extent should things be balanced?

We already have the 'basic' balance of the normal starting animals + straggler trees. Funny enough, many of the new scenario maps don't even have this anymore.
This patch aims to also balance the hunt in the surrounding area (and maybe in the future also the surrounding forests)
We have some symmetrical maps proposals which make 'everything' balanced, while still having random looks: D4053 or https://wildfiregames.com/forum/topic/85756-fair-multiplayer-random-map/
And we also have the multiplayer who just want a flat perfect balance plane: https://wildfiregames.com/forum/topic/83077-map-balanced-plainland/

So I'm not sure what the right balance is between randomness and balance / or what people want.
Should we go after all of the approaches? I.e. have some symmetrical maps, have a flat plane for people who don't like pretty things and try to include something like intermediate area balancing/ this patch?
Or should we choose one and stick to it?

Personally, I think the best way to go would be to create a customizable map that allows the players to create map parameters to their tastes.

In my vision, this customizable map would allow the player/host to adjust the below:

  • Balance: per each player (every player has the same starting spot), per each team (each team has the same amount of res and topographic features, but the distribution of those features within the team is random), random (map generation is totally random per the res and topographic settings)
  • Resources: amount of berries, hunt, trees, stone, and metal
  • Topography: amount of elevated land, max elevation height, amount of water

For resources and topography, the player/host would have a sliding scale from 0 to 100, where 0 means that res/topographic feature doesn't exist and 100 means that res/topographic feature is everywhere.

I believe the above would satisfy everyone and would allow for the creation of an unlimited number of land and naval maps, which allow for an unlimited number of res distribution possibilities.

Is this something that would be easy to code? It seems like the silver bullet that could end the debate on "what is ideal" for this topic.

The "Balance" point is implemented in this patch as you probably already knew
I believe the "amount of resources" slider could be implemented quite easily with the code introduced in my patch for anything that is not wood.
Then about the topography (and maybe wood) it really depends on the feature. I guess some can be adapted quite easily with a slider but then there is the question of how much freedom we allow to the user and if we allow broken maps this way.
Anyway I imagine the goal for a27 is to make something simple. But I guess it would also not be unheard of to add a map that is clearly labeled as "Experimentation". I think it was the case for a previous map that used erosion (Belgian Bogland or something)

lyv added a comment.Jul 13 2022, 4:30 PM

So it seems there would be now two distinct groups of resources. The primary group directly adjacent to the CC, starting animals, small forest, berries and two mines. And a secondary group somewhat far away but still part of the greater player base. Neutral resources would be outside of the greater area I suppose.

We would also need to get other resource counts in the function. For forests, having roughly the same number of approximately equal sized forests within the greater area seems fine, same for metal.

And is it possible to simplify the team resource calculation to instead just be (total_extra_food_per_team / num_players_in_team) and the apportioned hunt for each player placed in their area? This would allow to make the code a bit more generic for other resource types as well.

binaries/data/mods/public/maps/random/rmgen-common/player.js
947 โ†—(On Diff #18618)

D4670 moves over getTeams which can be used instead.

getPlayerTeam would return -1 for all players with no teams.

953 โ†—(On Diff #18618)

You can move this block outside the loop and remove the condition. Something like this.

for (let i = 0; i < teamSize - 1; ++i)
{
	let remainingAverage = averageFood; // or remainingFood / n, undecided for now
	let deviation = randFloat(-1, 1) * remainingAverage / 2;
	let playerFood = remainingAverage + deviation;

	// Round to closest 100
	playerFood = 100 * Math.round(playerFood / 100);
	if (playerFood > remainingFood)
		playerFood = remainingFood;
	if (playerFood <= 700)
		playerFood = 0;

	remainingFood -= playerFood;
	currentTeamDistribution.push(playerFood);
}

currentTeamDistribution.push(remainingFood);
Feldfeld added a comment.EditedJul 21 2022, 5:36 PM

So it seems there would be now two distinct groups of resources. The primary group directly adjacent to the CC, starting animals, small forest, berries and two mines. And a secondary group somewhat far away but still part of the greater player base. Neutral resources would be outside of the greater area I suppose.

Indeed that's the goal (this emulates fairly well former mainland gameplay except this time resources are balanced)

Yeah I will definitely do some rewriting to make it generic for the other resources.
Forests might be some trouble though as they should preferably have same style as the rest of the map, and to balance them is not an easy task in my (now blurry) experience. The amount of trees can vary quite a bit for fixed parameters, and hard constraints can make them look unnatural.

EDIT: also it would be nice if we can have a consensus on the following:

  • If forests prove to be too hard, do we drop them? And if so, how to handle the issue of the order or placement? (food before forest -> forest avoid food -> unnatural)
  • Are the new map parameters as done in this patch OK or do we just commit one (experimental) map?
  • Is the location of the resource balance code (in player.js next to other player base functions) good?
lyv added a comment.EditedJul 22 2022, 4:16 PM

Forests might be some trouble though as they should preferably have same style as the rest of the map, and to balance them is not an easy task in my (now blurry) experience. The amount of trees can vary quite a bit for fixed parameters, and hard constraints can make them look unnatural.

Is it okay if they are roughly the same? Being visually similar in size might actually be enough.

Are the new map parameters as done in this patch OK or do we just commit one (experimental) map?

We should refine the concept and use it for as many maps as possible, if not all. I am assuming that just the player placement function could be modified for the majority of maps, but that could be deferred for now.

Is the location of the resource balance code (in player.js next to other player base functions) good?

With the player base resources, and the greater player base resources concept, it fits in nicely with the base placement function.


A new DiskArea has to be constructed around the base player signifying the greater player area which then should be used instead for resource placement aside from the neutral resources which should avoid them. The exact resource counts are to be determined by the functions being introduced by this patch.

If all of this is handled by the base placement function, it would make updating all maps easier and reduce duplication.