This commit is contained in:
wowgetoffyourcellphone 2024-09-11 19:55:28 -04:00
commit 13a2edd304
149 changed files with 18191 additions and 1255 deletions

View File

@ -10,5 +10,9 @@ indent_style = tab
function_next_line = true function_next_line = true
switch_case_indent = true switch_case_indent = true
[*.{yaml,yml}]
indent_style = space
indent_size = 2
[build/premake/premake5/**] [build/premake/premake5/**]
ignore = true ignore = true

View File

@ -1,19 +1,24 @@
---
name: Defect name: Defect
about: Report an issue with the game. Errors, crashes, unexpected behaviour should be reported this way. about: >
title: "" Report an issue with the game. Errors, crashes, unexpected behaviour should be reported this way.
labels: labels:
- "Type/Defect" - "Type/Defect"
- "Priority/3: Should Have" - "Priority/3: Should Have"
body: body:
- type: markdown - type: markdown
attributes: attributes:
value: | value: >
**Please select a Theme label that corresponds best to your issue. You can also adjust the Priority label.** **Please select a Theme label that corresponds best to your issue. You can also adjust the
Priority label.**
- type: checkboxes - type: checkboxes
attributes: attributes:
label: Reporting Errors label: Reporting Errors
description: For crashes and errors, you must read the [ReportingErrors](wiki/ReportingErrors) page. In particular, if you are reporting a crash, you must upload crashlog files in the Description field below. description: >
For crashes and errors, you must read the [ReportingErrors](wiki/ReportingErrors) page. In
particular, if you are reporting a crash, you must upload crashlog files in the Description
field below.
options: options:
- label: I have read the ReportingErrors wiki page. - label: I have read the ReportingErrors wiki page.
required: true required: true
@ -29,6 +34,8 @@ body:
- type: input - type: input
attributes: attributes:
label: Version label: Version
description: Type the version of the game you are running (displayed at the bottom of the main menu, or the Alpha version, or "nightly-build"). description: >
Type the version of the game you are running (displayed at the bottom of the main menu, or
the Alpha version, or "nightly-build").
validations: validations:
required: true required: true

View File

@ -1,14 +1,15 @@
---
name: Enhancement name: Enhancement
about: Ask us for an improvement you wish to see in the game. about: Ask us for an improvement you wish to see in the game.
title: ""
labels: labels:
- "Type/Enhancement" - "Type/Enhancement"
- "Priority/3: Should Have" - "Priority/3: Should Have"
body: body:
- type: markdown - type: markdown
attributes: attributes:
value: | value: >
**Please select a Theme label that corresponds best to your issue. You can also adjust the Priority label.** **Please select a Theme label that corresponds best to your issue. You can also adjust the
Priority label.**
- type: textarea - type: textarea
attributes: attributes:
@ -18,7 +19,9 @@ body:
- type: markdown - type: markdown
attributes: attributes:
value: | value: >
**Important Note:** Gameplay and balance changes require preliminary discussion, and consensus must be reached with the Balancing team.<br> **Important Note:** Gameplay and balance changes require preliminary discussion, and
If this is a gameplay change, please add the *Needs Design Input* label, and open a forum topic for discussing your proposal.<br> consensus must be reached with the Balancing team.<br>
If this is a gameplay change, please add the *Needs Design Input* label, and open a forum
topic for discussing your proposal.<br>
You should link that forum topic in the ticket Description above. You should link that forum topic in the ticket Description above.

View File

@ -13,7 +13,9 @@ jobs:
run: pip3 install lxml run: pip3 install lxml
- name: Workaround for authentication problem with LFS - name: Workaround for authentication problem with LFS
# https://gitea.com/gitea/act_runner/issues/164 # https://gitea.com/gitea/act_runner/issues/164
run: git config --local http.${{ gitea.server_url }}/${{ gitea.repository }}.git/info/lfs/objects/.extraheader '' run: >
git config --local
http.${{ gitea.server_url }}/${{ gitea.repository }}.git/info/lfs/objects/.extraheader ''
- name: Download necessary LFS assets - name: Download necessary LFS assets
run: git lfs pull -I binaries/data/mods/public/maps run: git lfs pull -I binaries/data/mods/public/maps
- name: Check for missing references - name: Check for missing references

11
.gitignore vendored
View File

@ -1,7 +1,6 @@
# Built and prebuilt binaries # Built and prebuilt binaries
binaries/system/* binaries/system/*
!binaries/system/Atlas.bat !binaries/system/*.bat
!binaries/system/Quickstart.bat
!binaries/system/readme.txt !binaries/system/readme.txt
# Workspaces # Workspaces
@ -15,9 +14,15 @@ build/workspaces/vs2017
# Libraries # Libraries
libraries/macos libraries/macos
libraries/source
libraries/win32 libraries/win32
libraries/source/cxxtest-4.4/*
libraries/source/fcollada/*
libraries/source/nvtt/*
libraries/source/spidermonkey/*
!libraries/source/**/build.sh
!libraries/source/**/patches/
# premake5 build files, adapted from upstream # premake5 build files, adapted from upstream
build/premake/premake5/**/.gitignore build/premake/premake5/**/.gitignore
build/premake/premake5/**/.travis.yml build/premake/premake5/**/.travis.yml

View File

@ -20,7 +20,6 @@ repos:
^binaries/data/mods/_test.sim/simulation/templates.illformed.xml| ^binaries/data/mods/_test.sim/simulation/templates.illformed.xml|
^binaries/data/mods/public/maps/.*\.xml ^binaries/data/mods/public/maps/.*\.xml
) )
- id: check-yaml
- repo: https://github.com/astral-sh/ruff-pre-commit - repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.6.1 rev: v0.6.1
hooks: hooks:
@ -57,8 +56,8 @@ repos:
- repo: https://github.com/shellcheck-py/shellcheck-py - repo: https://github.com/shellcheck-py/shellcheck-py
rev: v0.10.0.1 rev: v0.10.0.1
hooks: hooks:
- id: shellcheck - id: shellcheck
exclude: ^build/premake/premake5/ exclude: ^build/premake/premake5/
- repo: https://github.com/igorshubovych/markdownlint-cli - repo: https://github.com/igorshubovych/markdownlint-cli
rev: v0.41.0 rev: v0.41.0
hooks: hooks:
@ -69,3 +68,10 @@ repos:
^build/premake/| ^build/premake/|
^source/third_party/ ^source/third_party/
) )
- repo: https://github.com/adrienverge/yamllint
rev: v1.35.1
hooks:
- id: yamllint
args:
- --strict
exclude: ^build/premake/premake5/

8
.yamllint.yaml Normal file
View File

@ -0,0 +1,8 @@
---
# https://yamllint.readthedocs.io/en/stable/index.html
extends: default
rules:
line-length:
max: 100
truthy:
check-keys: false

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1363,7 +1363,8 @@ var g_EntityCommands =
return { return {
"tooltip": colorizeHotkey("%(hotkey)s" + " ", "session.unload") + "tooltip": colorizeHotkey("%(hotkey)s" + " ", "session.unload") +
translate("Unload All."), translate("Unload All") + "\n" +
bodyFont(translate("Order all units to leave the selected entities.")),
"icon": "garrison-out.png", "icon": "garrison-out.png",
"count": count, "count": count,
"enabled": true "enabled": true
@ -1398,7 +1399,8 @@ var g_EntityCommands =
return { return {
"tooltip": colorizeHotkey("%(hotkey)s" + " ", "session.unloadturrets") + "tooltip": colorizeHotkey("%(hotkey)s" + " ", "session.unloadturrets") +
translate("Unload Turrets."), translate("Unload Turrets") + "\n" +
bodyFont(translate("Order all units to leave the selected turret points.")),
"icon": "garrison-out.png", "icon": "garrison-out.png",
"count": count, "count": count,
"enabled": true "enabled": true
@ -1418,10 +1420,12 @@ var g_EntityCommands =
{ {
"tooltip": "tooltip":
colorizeHotkey("%(hotkey)s" + " ", "session.kill") + colorizeHotkey("%(hotkey)s" + " ", "session.kill") +
translate("Destroy the selected units or structures.") + "\n" + translate("Self-Destruct") + "\n" +
colorizeHotkey( bodyFont(translate("Destroy the selected entities.") + "\n" +
translate("Use %(hotkey)s to avoid the confirmation dialog."), colorizeHotkey(
"session.noconfirmation" translate("Use %(hotkey)s to avoid the confirmation dialog."),
"session.noconfirmation"
)
), ),
"icon": "kill_small.png", "icon": "kill_small.png",
"enabled": true "enabled": true
@ -1470,7 +1474,8 @@ var g_EntityCommands =
return { return {
"tooltip": colorizeHotkey("%(hotkey)s" + " ", "session.stop") + "tooltip": colorizeHotkey("%(hotkey)s" + " ", "session.stop") +
translate("Abort the current order."), translate("Abort") + "\n" +
bodyFont(translate("Cancel the current orders for the selected units.")),
"icon": "stop.png", "icon": "stop.png",
"enabled": true "enabled": true
}; };
@ -1491,7 +1496,8 @@ var g_EntityCommands =
return false; return false;
return { return {
"tooltip": colorizeHotkey("%(hotkey)s" + " ", "session.calltoarms") + "tooltip": colorizeHotkey("%(hotkey)s" + " ", "session.calltoarms") +
translate("Send the selected units on attack move to the specified location after dropping resources."), translate("Attack") + "\n" +
bodyFont(translate("Send the selected units on attack move to the specified location after dropping resources.")),
"icon": "call-to-arms.png", "icon": "call-to-arms.png",
"enabled": true "enabled": true
}; };
@ -1513,7 +1519,8 @@ var g_EntityCommands =
return { return {
"tooltip": colorizeHotkey("%(hotkey)s" + " ", "session.garrison") + "tooltip": colorizeHotkey("%(hotkey)s" + " ", "session.garrison") +
translate("Order the selected units to garrison in a structure or unit."), translate("Garrison") + "\n" +
bodyFont(translate("Order the selected units to garrison in a structure or another unit.")),
"icon": "garrison.png", "icon": "garrison.png",
"enabled": true "enabled": true
}; };
@ -1535,7 +1542,8 @@ var g_EntityCommands =
return { return {
"tooltip": colorizeHotkey("%(hotkey)s" + " ", "session.occupyturret") + "tooltip": colorizeHotkey("%(hotkey)s" + " ", "session.occupyturret") +
translate("Order the selected units to occupy a turret point."), translate("Occupy Turret") + "\n" +
bodyFont(translate("Order the selected units to occupy a turret point.")),
"icon": "occupy-turret.png", "icon": "occupy-turret.png",
"enabled": true "enabled": true
}; };
@ -1557,7 +1565,8 @@ var g_EntityCommands =
return false; return false;
return { return {
"tooltip": translate("Unload"), "tooltip": translate("Unload") + "\n" +
bodyFont(translate("Order the selected units to leave their turret points.")),
"icon": "leave-turret.png", "icon": "leave-turret.png",
"enabled": true "enabled": true
}; };
@ -1577,7 +1586,8 @@ var g_EntityCommands =
return { return {
"tooltip": colorizeHotkey("%(hotkey)s" + " ", "session.repair") + "tooltip": colorizeHotkey("%(hotkey)s" + " ", "session.repair") +
translate("Order the selected units to repair a structure, ship, or siege engine."), translate("Repair") + "\n" +
bodyFont(translate("Order the selected units to repair a structure, ship, or siege engine.")),
"icon": "repair.png", "icon": "repair.png",
"enabled": true "enabled": true
}; };
@ -1598,7 +1608,8 @@ var g_EntityCommands =
return { return {
"tooltip": colorizeHotkey("%(hotkey)s" + " ", "camera.rallypointfocus") + "tooltip": colorizeHotkey("%(hotkey)s" + " ", "camera.rallypointfocus") +
translate("Focus on Rally Point."), translate("Focus on Rally Point") + "\n" +
bodyFont(translate("Center the view on the selected rally point.")),
"icon": "focus-rally.png", "icon": "focus-rally.png",
"enabled": true "enabled": true
}; };
@ -1635,7 +1646,8 @@ var g_EntityCommands =
return { return {
"tooltip": colorizeHotkey("%(hotkey)s" + " ", "session.backtowork") + "tooltip": colorizeHotkey("%(hotkey)s" + " ", "session.backtowork") +
translate("Back to Work"), translate("Back to Work") + "\n" +
bodyFont(translate("Order the selected units to resume their work.")),
"icon": "back-to-work.png", "icon": "back-to-work.png",
"enabled": true "enabled": true
}; };
@ -1656,7 +1668,8 @@ var g_EntityCommands =
return { return {
"tooltip": colorizeHotkey("%(hotkey)s" + " ", "session.guard") + "tooltip": colorizeHotkey("%(hotkey)s" + " ", "session.guard") +
translate("Order the selected units to guard a structure or unit."), translate("Guard") + "\n" +
bodyFont(translate("Order the selected units to guard a structure or unit.")),
"icon": "add-guard.png", "icon": "add-guard.png",
"enabled": true "enabled": true
}; };
@ -1676,7 +1689,8 @@ var g_EntityCommands =
return false; return false;
return { return {
"tooltip": translate("Remove guard"), "tooltip": translate("Abort Guard") + "\n" +
bodyFont(translate("Order the selected units to stop guarding.")),
"icon": "remove-guard.png", "icon": "remove-guard.png",
"enabled": true "enabled": true
}; };
@ -1695,7 +1709,9 @@ var g_EntityCommands =
return false; return false;
return { return {
"tooltip": translate("Barter & Trade"), "tooltip": colorizeHotkey("%(hotkey)s" + " ", "session.gui.barter.toggle") +
translate("Barter & Trade") + "\n" +
bodyFont(translate("Open the dialog for managing resource trading and bartering.")),
"icon": "economics.png", "icon": "economics.png",
"enabled": true "enabled": true
}; };
@ -1715,8 +1731,8 @@ var g_EntityCommands =
return { return {
"tooltip": colorizeHotkey("%(hotkey)s" + " ", "session.patrol") + "tooltip": colorizeHotkey("%(hotkey)s" + " ", "session.patrol") +
translate("Patrol") + "\n" + translate("Patrol") + "\n" +
translate("Attack all encountered enemy units while avoiding structures."), bodyFont(translate("Order to repeatedly go to a point and come back, attacking all enemies along the way.")),
"icon": "patrol.png", "icon": "patrol.png",
"enabled": true "enabled": true
}; };
@ -1744,12 +1760,14 @@ var g_EntityCommands =
return sharableEntities.some(entState => !entState.resourceDropsite.shared) ? return sharableEntities.some(entState => !entState.resourceDropsite.shared) ?
{ {
"tooltip": translate("Press to allow allies to use this dropsite"), "tooltip": translate("Share Dropsite") + "\n" +
bodyFont(translate("Allow allies to use this dropsite, now locked.")),
"icon": "locked_small.png", "icon": "locked_small.png",
"enabled": true "enabled": true
} : } :
{ {
"tooltip": translate("Press to prevent allies from using this dropsite"), "tooltip": translate("Lock Dropsite") + "\n" +
bodyFont(translate("Prevent allies from using this dropsite, now shared.")),
"icon": "unlocked_small.png", "icon": "unlocked_small.png",
"enabled": true "enabled": true
}; };
@ -1784,14 +1802,16 @@ var g_EntityCommands =
if (!shareableEntities.every(entState => entState.resourceDropsite.shared)) if (!shareableEntities.every(entState => entState.resourceDropsite.shared))
return { return {
"tooltip": translate("The use of this dropsite is prohibited"), "tooltip": translate("Locked Dropsite") + "\n" +
bodyFont(translate("The use of this dropsite is prohibited.")),
"icon": "locked_small.png", "icon": "locked_small.png",
"enabled": false "enabled": false
}; };
return { return {
"tooltip": g_IsObserver ? translate("Allies are allowed to use this dropsite.") : "tooltip": translate("Shared Dropsite") + "\n" +
translate("You are allowed to use this dropsite"), bodyFont(g_IsObserver ? translate("Allies are allowed to use this dropsite.") :
translate("You are allowed to use this dropsite.")),
"icon": "unlocked_small.png", "icon": "unlocked_small.png",
"enabled": false "enabled": false
}; };
@ -1810,7 +1830,8 @@ var g_EntityCommands =
return false; return false;
return { return {
"tooltip": colorizeHotkey("%(hotkey)s" + " ", "session.queueunit.autoqueueon") + "tooltip": colorizeHotkey("%(hotkey)s" + " ", "session.queueunit.autoqueueon") +
translate("Activate auto-queue for selected structures."), translate("Activate Auto-Queue") + "\n" +
bodyFont(translate("Activate the production auto-queue for the selected structures.")),
"icon": "autoqueue-on.png", "icon": "autoqueue-on.png",
"enabled": true "enabled": true
}; };
@ -1830,7 +1851,8 @@ var g_EntityCommands =
return false; return false;
return { return {
"tooltip": colorizeHotkey("%(hotkey)s" + " ", "session.queueunit.autoqueueoff") + "tooltip": colorizeHotkey("%(hotkey)s" + " ", "session.queueunit.autoqueueoff") +
translate("Deactivate auto-queue for selected structures."), translate("Deactivate Auto-Queue") + "\n" +
bodyFont(translate("Deactivate the production auto-queue for the selected structures.")),
"icon": "autoqueue-off.png", "icon": "autoqueue-off.png",
"enabled": true "enabled": true
}; };

View File

@ -1,4 +1,5 @@
ROMAN ARMY CAMP ROMAN ARMY CAMP
Buildable in neutral or enemy territory. Good for building a secret base behind enemy lines or to consolidate gains within enemy territory. Buildable in neutral or enemy territory. Good for setting up a secret base behind enemy lines or to consolidate gains within enemy territory.
Construct rams and train citizen soldiers. Constructs Rams and trains high-rank Citizen Soldiers.
Garrison units to slowly heal them and protect the army camp from attacks and decay. Fires arrows at any enemies in sight.
Garrison units inside for protection and additional arrows.

View File

@ -1,5 +1,5 @@
ARROW SHIPS ARROW SHIPS
The basic Warship for most factions. The basic Warship for most civilizations.
Transport up to 30 troops across the water. Transports up to 30 troops across the water.
Good against melee Warships, such as Ramming Ships and Fire Ships. Good against melee Warships, such as Ramming Ships and Fire Ships.
Countered by Siege Ships and other Arrow Ships. Countered by Siege Ships and other Arrow Ships.

View File

@ -1,5 +1,5 @@
BARRACKS BARRACKS
Train all citizen soldiers. Some civilizations can unlock the training of champions as well. Trains all Citizen Infantry. Some civilizations can unlock the training of Champions in it as well.
Units gain experience while garrisoned inside the building. Units gain experience while garrisoned inside.
Build one early to train citizen soldiers while you phase up your settlement. Build one early to train Citizen Soldiers while you phase up your settlement.
Build in a forward base to resupply your assault with fresh troops. Build near the front lines to resupply your assault with fresh troops.

View File

@ -0,0 +1,3 @@
BARTER
At the Market structure, a player can exchange a resource for another of a different type.
Rates are affected globally by all players. Turn this into an advantage by checking prices regularly.

View File

@ -1,3 +1,3 @@
BIOMES BIOMES
Biomes can be used on some random maps and determine which region of the world the map represents. Biomes can be used on some random maps to determine which region of the world the map represents.
They influence the appearence of the maps and also the amount of resources that are available. They influence the appearence of the maps and also the available amount of different resources.

View File

@ -1,4 +1,5 @@
WAR DOG WAR DOG
A dog that the Britons can train at the cavalry stable. A unique dog unit that the Britons can train at the Cavalry Stable.
Has low health, but is fast and will fearlessly attack enemies. Has low health, but is fast and will fearlessly attack enemies.
Cannot capture or destroy structures.
Use them as support in your army or for quick raids. Use them as support in your army or for quick raids.

View File

@ -1,4 +1,4 @@
CARTHAGINIAN SACRED BAND CARTHAGINIAN SACRED BAND
Champion Spearmen and Champion Cavalry Spearmen for Carthage. Champion Spearmen and Champion Cavalry Spearmen for the Carthaginians.
Both are trainable from the Temple, instead of the Fortress like most other champions. Trainable from the Temple, unlike most other Champions.
Use the Spearmen as heavy infantry against cavalry. Use the Cavalry as heavy shock against siege weapons and skirmishers. Use the Spearmen to counter enemy Cavalry. Use the Cavalry as heavy shock against Siege Weapons and Ranged Infantry.

View File

@ -1,4 +1,4 @@
CARTHAGINIAN NAVAL SHIPYARD CARTHAGINIAN NAVAL SHIPYARD
Special dock of the Carthaginians to construct warships. Special Dock of the Carthaginians to construct Warships.
Garrison ships inside to slowly repair them. Garrison Ships inside to slowly repair them.
Much stronger than other docks, but also more expensive. Much stronger than other Docks, but also more expensive.

View File

@ -1,4 +1,4 @@
CATAPULTS CATAPULTS
Ranged siege engines that are good against structures. Long-ranged Siege Engines.
Expensive and slow. Devastating against structures, but also expensive and slow.
Pack up into carts for movement, and unpack into stationary engines for attack! Pack up into carts for movement, and unpack into stationary engines for attack!

View File

@ -1,3 +1,3 @@
CAVALRY STABLE CAVALRY STABLE
Trains cavalry units and lets you research cavalry specific technologies. Trains Cavalry Units and lets you research cavalry-specific technologies.
Units gain experience while garrisoned inside the structure. Units gain experience while garrisoned inside the structure.

View File

@ -1,4 +1,4 @@
CELTIC HEAVY ARROW SHIP CELTIC HEAVY ARROW SHIP
The main warship for the Britons, Gauls, and Iberians. The main Warship for the Britons, Gauls, and Iberians.
Can transport up to 40 units. Can transport up to 40 units.
Can be improved with greater health and garrison capacity. Research special technologies to improve them with greater health and garrison capacity.

View File

@ -1,4 +1,4 @@
CITY WALLS CITY WALLS
Strong stone walls that help you protect your city. Strong stone walls that help you protect your city.
When your ranged infantry units are occupying the turrets, they have additional armor and can shoot at the enemy. Occupy the turrets with Ranged Infantry for increased defense and greater vision range.
Vulnerable to siege weapons like catapults, rams and war elephants. Knock them down with Siege Engines like Catapults, Battering Rams, or War Elephants.

View File

@ -0,0 +1,4 @@
CIVIC CENTER
The foundation of your new colony.
Claim large tracts of land by building them in previously unclaimed territory.
Trains all Citizens: Female Citizens, Citizen Infantry, and Citizen Cavalry.

View File

@ -1,5 +0,0 @@
CIVIC CENTERS
The foundation of your new colony.
Claim large tracts of territory.
Can be built in friendly and neutral territory.
Train citizens: female citizens, infantry citizen-soldiers, and cavalry citizen-soldiers.

View File

@ -0,0 +1,4 @@
CONTROL GROUPS
Save your current selection to a hotkey by pressing CTRL + a number from 0 to 9 (by default) simultaneously.
After the control group has been created, quickly select them again by pressing the assigned number.
A double click additionally centers the camera to the selection.

View File

@ -1,4 +1,4 @@
DEFAULT FORMATION DEFAULT FORMATION
Right-click an icon to set the default formation: units that are ordered to walk or patrol will automatically use it. Right-click an icon to set the default formation: units that are ordered to walk or patrol will automatically use it.
Can be de-activated by choosing “no formation” as the default. Can be deactivated by choosing “no formation” as the default.
The “Formation control” option lets you choose whether formations disband for orders other than walking or patrolling. The “Formation control” option lets you choose whether formations disband for orders other than walking or patrolling.

View File

@ -0,0 +1,4 @@
DEFENSE TOWER
Defend a vulnerable position by building these strong watchtowers.
Has a large vision range and shoots arrows at any enemy in sight.
Garrison Infantry inside to increase its firepower.

View File

@ -1,5 +0,0 @@
DEFENSE TOWERS
Strong watchtowers, which help you defend your position.
They have a large vision range and will shoot arrows at the enemy in sight.
You can garrison more infantry inside them to increase the number of arrows they shoot.

View File

@ -0,0 +1,5 @@
DOCK
Buildable in neutral and allied territory.
Constructs various Ships for economic and military needs.
Also serves as a resource dropsite.
Can be set up as a trade point for both naval and land Traders.

View File

@ -1,3 +1,3 @@
ELEPHANT STABLE ELEPHANT STABLE
The structure is available to some civilizations to train elephant units. Available to some civilizations to train Elephants.
Units gain experience while garrisoned inside the building. Units gain experience while garrisoned inside.

View File

@ -1,3 +1,3 @@
EMBASSIES AND MERCENARY CAMPS EMBASSIES AND MERCENARY CAMPS
Special structures allowing you to hire mercenaries for your army. Special structures allowing you to hire Mercenaries for your army.
Mercenaries will not gather resources and cost only metal, but they are experienced and strong. Mercenaries cannot gather resources, but only cost metal, are trained quickly, and start at Advanced rank.

View File

@ -0,0 +1,5 @@
FIRESHIP
Available to the Britons, Gauls, and Iberians.
Causes fire damage to nearby Ships, but gradually loses health over time as well.
Construct a few, move them to the enemy fleet, then ignite them to set them ablaze.
Very good against Siege Ships.

View File

@ -1,5 +1,4 @@
FISHING FISHING
Fish the seas for a bountiful harvest. Fish the seas for a bountiful harvest.
Fishing boats carry a large amount of food per trip. Fishing boats can carry a large amount of food and gather faster than Workers on fields.
Fishing is faster than gathering food on fields.
Careful! Fish are not an infinite resource! Although they do slowly repopulate when left alone. Careful! Fish are not an infinite resource! Although they do slowly repopulate when left alone.

View File

@ -1,3 +1,3 @@
FORGE FORGE
Research structure for all factions. Research structure for all civilizations.
Research weapon and armor upgrades for your units. Provides valuable weapon and armor upgrades for your units.

View File

@ -1,3 +1,3 @@
FORTRESS FORTRESS
Usually the strongest structure of a civilization and the place where you can train Heroes. Usually the strongest structure of a civilization.
Garrison soldiers inside to add more firepower to its defense. Garrison soldiers inside to add more firepower to its defense.

View File

@ -1,4 +1,4 @@
FREEHAND POSITION FREEHAND POSITION
Gain an advantage on the battleground by tactically positioning your units! Gain an advantage on the battleground by tactically positioning your units!
Therefore select some units, press and hold the right mouse button, draw any line, then release the button. To do it, select some units, press and hold the right mouse button, draw any line, then release the button.
Your units will now spread out on this line. Your units will now spread out on this line.

View File

@ -1,6 +1,5 @@
RESOURCE GATHERING RESOURCE GATHERING
Use citizen-soldiers and female citizens to gather resources. Use Citizens to gather resources.
Female citizens gather vegetable resources faster. Female citizens are best at gathering fruit and grain.
Infantry citizen-soldiers are faster gathering minerals. Citizen Infantry excel at gathering wood, stone, and metal.
Cavalry citizen-soldiers are faster gathering meat. Citizen Cavalry can only gather meat, but do so very quickly.
The higher the level of a citizen-soldier (advanced, elite), the better he fights, but the less efficient he is at gathering resources.

View File

@ -1,5 +0,0 @@
FIRESHIPS
Available to the Britons, Gauls, and Iberians.
Construct them, move them near enemy ships, then ignite them to set them ablaze.
They cause Fire damage to nearby enemy ships and themselves start to lose health.
Very good against Siege Ships.

View File

@ -1,2 +1,3 @@
LIGHTHOUSE LIGHTHOUSE
Special Ptolemaic structures to increase your vision range when built on the shore. Special structure solely available to the Ptolemies.
Increases your vision range when built on the shore.

View File

@ -0,0 +1,2 @@
LOOT
When you kill units or destroy structures, you will gain a certain number of resources, plus what they are carrying.

View File

@ -1,4 +1,3 @@
MAP FLARE MAP FLARE
Use this feature to let your team know where on the map something important happens. Use this feature to let your team know where on the map something important happens.
They will see the flare on their minimap. They will also see the flare on their minimap.

View File

@ -0,0 +1,4 @@
MAURYAN WORKER ELEPHANT
Exclusively available to the Mauryas, right from the Village Phase.
Serves as a mobile dropsite, enabling you to efficiently gather resources outside of your territory.
Can also build structures.

View File

@ -1,4 +1,4 @@
PYRAMIDS OF MEROË PYRAMIDS OF MEROË
Special structures available for the Kushites. Special structures available to the Kushites.
The small pyramids improve the gathering rate of the workers around them. The small pyramids improve the gathering rate of workers around them.
The large pyramids increase the military capabilities of soldiers around them. The large pyramids increase the military capabilities of soldiers around them.

View File

@ -0,0 +1,5 @@
NOMAD MODE
Only available for the "Random" map type.
Players will be randomly dropped on the map without a Civic Center.
Requires the "Medium" starting resource setting in order for players to be able to build their first one.
Don't immediately start building the Civic Center, scout for a good location for your base first.

View File

@ -0,0 +1,2 @@
ORDER ONE UNIT
When right-clicking While holding the “Order one unit” hotkey (by default ALT), only one random unit from the current selection will perform the assigned task.

View File

@ -1,4 +1,4 @@
OUTPOSTS OUTPOSTS
Build in neutral or own territory. Build in neutral or own territory to monitor large areas of the map.
Cheap and quickly built, but weak. Cheap and quickly built, but weak and easily captured.
Garrison infantry for extensive vision, and to prevent losing control of the outpost due to territory decay. Garrison Infantry to extend the vision range, and to prevent losing control over it due to territory decay.

View File

@ -1,3 +1,3 @@
PALISADE WALLS PALISADE WALLS
A quick, cheap wooden wall available to all factions. A quick, cheap wooden wall for moderate defense.
Most factions have access to them in Village Phase. Available to most civilizations in Village Phase.

View File

@ -1,5 +1,4 @@
ACHAEMENID ARCHITECTURE ACHAEMENID ARCHITECTURE
Special technology for the Persians. Special technology exclusive to the Persians.
Structures +25% health. Structures gain +25% health, but their build time lengthened by +20% as a consequence.
Build time lengthened by +20% as a consequence. Persians also have access to a great number of other structural and defensive technologies.
Persians also have access to a great number of structural and defensive technologies.

View File

@ -1,4 +1,4 @@
PIKEMEN PIKEMEN
Heavily armored and slow. Low attack. Available to the Kushites, Macedonians, Ptolemies, and Seleucids.
Used against cavalry or against other melee infantry to pin them in place. Heavily armored, but low attack damage.
Available to: Kushites, Macedonians, Ptolemies, and Seleucids. Use against Cavalry or against other Melee Infantry to pin them in place.

View File

@ -0,0 +1,4 @@
QUEUE ORDERS
While holding the “Queue order” hotkey (by default SHIFT), queue multiple tasks for units by right-clicking.
Once a task is done they will automatically execute their next task.
The queue will be reset if the unit receives a manual order.

View File

@ -1,4 +0,0 @@
SIEGE WARSHIP
The heaviest standard warship. Available to: Carthaginians, Ptolemies, Romans, Seleucids, and Han Chinese.
Strong crush damage and long range make them good against Arrow Ships and Buildings near the shore.
Countered by melee ships, such as Ramming Ships and Fire Ships, and other Siege Ships.

View File

@ -0,0 +1,5 @@
RAMMING SHIP
Strong and fast melee ship available to Mediterranean civilizations.
Transports up to 30 troops swiftly across the water.
Good against Siege Ships due to its speed and strong ramming attack.
Countered by Arrow Ships and Defense Towers.

View File

@ -1,5 +0,0 @@
RAMMING SHIPS
A strong and fast melee ship available to Mediterranean civilizations.
Transport up to 30 troops swiftly across the water.
Good against Siege Ships due to speed and strong ramming attack.
Countered by Arrow Ships and Defense Towers.

View File

@ -1,3 +1,4 @@
RESOURCE COUNTER RESOURCE COUNTER
The resource counter panel shows you how much of each resources you have at the moment. Located in the top left corner of the screen.
The number below it shows you how many citizens are currently gathering them. Keep tabs on how much of each resource you've stockpiled in your treasury and how many units are currently gathering them.
Keep an eye on it while playing to avoid running out in crucial moments.

View File

@ -2,4 +2,4 @@ SAVANNA BIOME
Generally flat, with a few watering holes and rocky outcrops. Generally flat, with a few watering holes and rocky outcrops.
Chock full of herd animals for plentiful hunting. Chock full of herd animals for plentiful hunting.
Rich in all types of mining. Rich in all types of mining.
Wood tends to be sparse, but consists of high-yield Baobab trees. Trees tend to be sparse, but include high-yield Baobab trees.

View File

@ -0,0 +1,3 @@
SELECT WOUNDED UNITS
While holding the “Select only wounded units” hotkey (by default 0), you can select wounded units.
Customize the threshold in Settings > Game Session.

View File

@ -0,0 +1,4 @@
SIEGE WARSHIP
The heaviest standard warship. Available to the Carthaginians, Ptolemies, Romans, Seleucids, and Han Chinese.
Strong crush damage and long range make it good against Arrow Ships and structures near the shore.
Countered by melee ships, such as Ramming Ships and Fire Ships, and other Siege Ships.

View File

@ -1,4 +1,3 @@
SNAPPING SNAPPING
Structures can be aligned by keeping the snap hotkey pressed during placement. Align structures by keeping the snap hotkey pressed during placement.
Aligning structures allows to conserve space for future construction. Conserves space for future construction, and comes in useful for obstructing raiding enemies.
Tightly packed groups of structures can also be used for obstructing raiding enemies.

View File

@ -1,4 +1,4 @@
SPARTIATES SPARTIATES
Strongest infantry unit in the game. Champion Infantry Spearmen available to the Spartans.
Champion Infantry available to the Spartans. One of the strongest units in the game.
Use them to slaughter enemy cavalry or as a shock force to support your regular infantry. Use them to slaughter enemy Cavalry or as a shock force to support your regular Infantry.

View File

@ -1,5 +1,5 @@
SPEARMEN SPEARMEN
The basic melee infantry for every faction in the game. The basic Melee Infantry available to every civilization in the game.
Used against cavalry for an attack bonus. Use against Cavalry for an attack bonus.
Decent hack attack make them good front line troops. Decent melee hack damage makes them good front line troops.
They are countered by ranged units and swordsmen, so support your spearmen with slingers or cavalry. Countered by ranged units and Swordsmen, so support your Spearmen with those or Cavalry yourself.

View File

@ -0,0 +1,3 @@
STOREHOUSE
A cheap dropsite for non-food resources (wood, stone, and metal).
Research technologies to improve the gathering rates of your Citizens.

View File

@ -1,3 +0,0 @@
STOREHOUSES
A cheap dropsite for non-food resources (Wood, Stone, Metal).
Research technologies to improve the gathering capabilities of your citizens.

View File

@ -0,0 +1,4 @@
SYNTAGMA
A unique historical formation formed by Macedonian Pikemen.
Forms the men into tight ranks and deep files, allowing a wall of forward-thrusting pikes to pierce any enemy soldier foolish enough launch a frontal assault.
Support them with more flexible units to prevent encirclement.

View File

@ -0,0 +1,6 @@
TEMPLE
Town Phase structure available to all civilizations.
Trains Healers to heal your troops on the battlefield.
Offers a series of helpful healing technologies.
Its aura heals nearby units.
Garrison wounded units inside for even quicker healing.

View File

@ -1,6 +0,0 @@
TEMPLES
Town Phase structure.
Recruit Healers to heal your troops on the battlefield.
Research healing technologies.
Its aura heals nearby units.
Garrison wounded units inside for quicker healing.

View File

@ -1,4 +1,4 @@
TERRITORY DECAY TERRITORY DECAY
Decay happens when structures are not connected to an allied Civil Center. Structures too far off an allied territory root (usually a Civic Center) gradually lose capture points.
The decay process can be slowed down or reversed by garrisoning some units in the structure. Slow down or reverse the decay process by garrisoning some units in the structure.
When the decay is completed, the structure will be given to the most influential neighbor. When the decay is completed, the structure will be given to the player owning the closest territory root or Gaia.

View File

@ -0,0 +1,4 @@
TRADING
Train Traders for trading on land at the Market and Merchantmen for seaborne trade at the Dock.
Create a trade route by selecting a Trader or Merchantman and right-clicking on two trade points (Dock or Market). Longer distances yield more profits!
Open the "Barter & Trade" dialog next to the menu in the top right corner to set how much of each resource type you want to trade for.

View File

@ -1,3 +1,3 @@
TREASURES TREASURES
Collectible chests and bare resources on land and shipwrecks on the shore. Collectible chests, bare resources on land, and shipwrecks on the shore.
Provide you with a resource boost, so keep an eye out for them as you explore. Provide you with an instant resource boost, so keep an eye out for them as you explore.

View File

@ -1,4 +1,5 @@
WAR ELEPHANTS WAR ELEPHANTS
Available to the Carthaginians, Kushites, Mauryas, Persians, Ptolemies, and Seleucids.
Huge beasts from Africa and India, trained for war. Huge beasts from Africa and India, trained for war.
High Food and Metal cost, but very powerful. High Food and Metal cost, but very powerful.
Available to: Carthaginians, Kushites, Mauryas, Persians, Ptolemies, and Seleucids. Attack individual units, but also deal splash damage to others nearby. Use them to break apart tight formations.

View File

@ -1,5 +1,4 @@
WHALES WHALES
An oceanic resource. An oceanic resource providing 2000 food.
2000 Food.
Gatherable by Fishing Boats after the whale is killed. Gatherable by Fishing Boats after the whale is killed.
Roam around the oceans of the game and flee when attacked. Roam around the oceans of the game and flee when attacked.

View File

@ -0,0 +1,34 @@
rem **Download from the latest nightly build:**
rem ** - translations**
rem ** - SPIR-V shaders**
rem ** - game built files for Windows**
rem **This will overwrite any uncommitted changes to:**
rem ** - messages.json in i18n folders**
rem ** - readme.txt and helper scripts in this directory**
where svn || (
@echo.
@echo The "svn" executable was not found in your PATH. Make sure you installed TortoiseSVN
@echo and that you selected "command line client tools" during the installation.
@echo.
@pause
@exit
)
set "repourl=https://svn.wildfiregames.com/nightly-build/trunk"
rem **Translations**
svn export --force --depth files %repourl%/binaries/data/l10n ..\data\l10n
for %%m in (mod public) do (
svn export --force --depth files %repourl%/binaries/data/mods/%%m/l10n ..\data\mods\%%m\l10n
)
svn export --force %repourl%/binaries/data/mods/public/gui/credits/texts/translators.json ..\data\mods\public\gui\credits\texts\translators.json
rem **SPIR-V shaders**
for %%m in (mod public) do (
svn export --force %repourl%/binaries/data/mods/%%m/shaders/spirv ..\data\mods\%%m\shaders\spirv
)
rem **Game built files**
svn export --force %repourl%/binaries/system .

View File

@ -42,8 +42,8 @@ pipeline {
sh "git lfs pull -I binaries/data/tests" sh "git lfs pull -I binaries/data/tests"
sh "git lfs pull -I \"binaries/data/mods/_test.*\"" sh "git lfs pull -I \"binaries/data/mods/_test.*\""
sh "libraries/build-source-libs.sh -j2 2> freebsd-prebuild-errors.log" sh "libraries/build-source-libs.sh 2> freebsd-prebuild-errors.log"
sh "build/workspaces/update-workspaces.sh -j2 --jenkins-tests 2>> freebsd-prebuild-errors.log" sh "build/workspaces/update-workspaces.sh --jenkins-tests 2>> freebsd-prebuild-errors.log"
} }
post { post {
failure { failure {
@ -56,7 +56,7 @@ pipeline {
steps { steps {
retry (2) { retry (2) {
script { script {
try { sh "cd build/workspaces/gcc/ && gmake -j2 config=release" } try { sh "cd build/workspaces/gcc/ && gmake config=release" }
catch(e) { catch(e) {
sh "cd build/workspaces/gcc/ && gmake clean config=release" sh "cd build/workspaces/gcc/ && gmake clean config=release"
throw e throw e

View File

@ -65,13 +65,13 @@ pipeline {
sh "git lfs pull -I binaries/data/tests" sh "git lfs pull -I binaries/data/tests"
sh "git lfs pull -I \"binaries/data/mods/_test.*\"" sh "git lfs pull -I \"binaries/data/mods/_test.*\""
sh "libraries/build-source-libs.sh -j1 2> ${JENKINS_COMPILER}-prebuild-errors.log" sh "libraries/build-source-libs.sh 2> ${JENKINS_COMPILER}-prebuild-errors.log"
script { script {
if (env.JENKINS_PCH == "no-pch") { if (env.JENKINS_PCH == "no-pch") {
sh "build/workspaces/update-workspaces.sh -j1 --jenkins-tests --without-pch 2>> ${JENKINS_COMPILER}-prebuild-errors.log" sh "build/workspaces/update-workspaces.sh --jenkins-tests --without-pch 2>> ${JENKINS_COMPILER}-prebuild-errors.log"
} else { } else {
sh "build/workspaces/update-workspaces.sh -j1 --jenkins-tests 2>> ${JENKINS_COMPILER}-prebuild-errors.log" sh "build/workspaces/update-workspaces.sh --jenkins-tests 2>> ${JENKINS_COMPILER}-prebuild-errors.log"
} }
} }
} }
@ -86,7 +86,7 @@ pipeline {
steps { steps {
retry(2) { retry(2) {
script { script {
try { sh "cd build/workspaces/gcc/ && make -j1 config=debug" } try { sh "cd build/workspaces/gcc/ && make config=debug" }
catch(e) { catch(e) {
sh "cd build/workspaces/gcc/ && make clean config=debug" sh "cd build/workspaces/gcc/ && make clean config=debug"
throw e throw e
@ -108,7 +108,7 @@ pipeline {
steps { steps {
retry(2) { retry(2) {
script { script {
try { sh "cd build/workspaces/gcc/ && make -j1 config=release" } try { sh "cd build/workspaces/gcc/ && make config=release" }
catch(e) { catch(e) {
sh "cd build/workspaces/gcc/ && make clean config=release" sh "cd build/workspaces/gcc/ && make clean config=release"
throw e throw e
@ -130,7 +130,7 @@ pipeline {
post { post {
always { always {
node('LinuxSlave') { ws('workspace/linux') { node('LinuxAgent') { ws('workspace/linux') {
recordIssues enabledForFailure: true, qualityGates: [[threshold: 1, type: 'NEW']], tools: [clang(), gcc()] recordIssues enabledForFailure: true, qualityGates: [[threshold: 1, type: 'NEW']], tools: [clang(), gcc()]
}} }}
} }

View File

@ -36,8 +36,8 @@ pipeline {
sh "git lfs pull -I binaries/data/tests" sh "git lfs pull -I binaries/data/tests"
sh "git lfs pull -I \"binaries/data/mods/_test.*\"" sh "git lfs pull -I \"binaries/data/mods/_test.*\""
sh "libraries/build-macos-libs.sh -j4 2> macos-prebuild-errors.log" sh "libraries/build-macos-libs.sh 2> macos-prebuild-errors.log"
sh "build/workspaces/update-workspaces.sh -j4 --jenkins-tests 2>> macos-prebuild-errors.log" sh "build/workspaces/update-workspaces.sh --jenkins-tests 2>> macos-prebuild-errors.log"
} }
post { post {
failure { failure {
@ -50,7 +50,7 @@ pipeline {
steps { steps {
retry(2) { retry(2) {
script { script {
try { sh "cd build/workspaces/gcc/ && make -j4 config=debug" } try { sh "cd build/workspaces/gcc/ && make config=debug" }
catch(e) { catch(e) {
sh "cd build/workspaces/gcc/ && make clean config=debug" sh "cd build/workspaces/gcc/ && make clean config=debug"
throw e throw e
@ -72,7 +72,7 @@ pipeline {
steps { steps {
retry(2) { retry(2) {
script { script {
try { sh "cd build/workspaces/gcc/ && make -j4 config=release" } try { sh "cd build/workspaces/gcc/ && make config=release" }
catch(e) { catch(e) {
sh "cd build/workspaces/gcc/ && make clean config=release" sh "cd build/workspaces/gcc/ && make clean config=release"
throw e throw e

View File

@ -65,7 +65,7 @@ pipeline {
bat "cd libraries && get-windows-libs.bat" bat "cd libraries && get-windows-libs.bat"
bat "(robocopy C:\\wxwidgets3.2.5\\lib libraries\\win32\\wxwidgets\\lib /MIR /NDL /NJH /NJS /NP /NS /NC) ^& IF %ERRORLEVEL% LEQ 1 exit 0" bat "(robocopy C:\\wxwidgets3.2.5\\lib libraries\\win32\\wxwidgets\\lib /MIR /NDL /NJH /NJS /NP /NS /NC) ^& IF %ERRORLEVEL% LEQ 1 exit 0"
bat "(robocopy C:\\wxwidgets3.2.5\\include libraries\\win32\\wxwidgets\\include /MIR /NDL /NJH /NJS /NP /NS /NC) ^& IF %ERRORLEVEL% LEQ 1 exit 0" bat "(robocopy C:\\wxwidgets3.2.5\\include libraries\\win32\\wxwidgets\\include /MIR /NDL /NJH /NJS /NP /NS /NC) ^& IF %ERRORLEVEL% LEQ 1 exit 0"
bat "cd build\\workspaces && update-workspaces.bat --atlas --without-pch --without-tests" bat "cd build\\workspaces && update-workspaces.bat --atlas --without-pch --large-address-aware --without-tests"
} }
} }
@ -133,16 +133,16 @@ pipeline {
stage("Update translations") { stage("Update translations") {
steps { steps {
ws("workspace/nightly-svn") { ws("workspace/nightly-svn") {
bat "cd source\\tools\\i18n && python updateTemplates.py" bat "cd source\\tools\\i18n && python update_templates.py"
withCredentials([string(credentialsId: 'TX_TOKEN', variable: 'TX_TOKEN')]) { withCredentials([string(credentialsId: 'TX_TOKEN', variable: 'TX_TOKEN')]) {
bat "cd source\\tools\\i18n && python pullTranslations.py" bat "cd source\\tools\\i18n && python pull_translations.py"
} }
bat "cd source\\tools\\i18n && python generateDebugTranslation.py --long" bat "cd source\\tools\\i18n && python generate_debug_translation.py --long"
bat "cd source\\tools\\i18n && python cleanTranslationFiles.py" bat "cd source\\tools\\i18n && python clean_translation_files.py"
script { if (!params.NEW_REPO) { script { if (!params.NEW_REPO) {
bat "python source\\tools\\i18n\\checkDiff.py --verbose" bat "python source\\tools\\i18n\\check_diff.py --verbose"
}} }}
bat "cd source\\tools\\i18n && python creditTranslators.py" bat "cd source\\tools\\i18n && python credit_translators.py"
} }
} }
} }

View File

@ -55,7 +55,7 @@ pipeline {
stage("Template Analyzer") { stage("Template Analyzer") {
steps { steps {
ws("/zpool0/entity-docs"){ ws("/zpool0/entity-docs"){
sh "cd source/tools/templatesanalyzer/ && python3 unitTables.py" sh "cd source/tools/templatesanalyzer/ && python3 unit_tables.py"
} }
} }
} }

View File

@ -18,7 +18,7 @@
// This pipeline builds the game on Windows (which uses the MSVC 15.0 compiler from Visual Studio 2017) and runs tests. // This pipeline builds the game on Windows (which uses the MSVC 15.0 compiler from Visual Studio 2017) and runs tests.
def visualStudioPath = "\"C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\MSBuild\\15.0\\Bin\\MSBuild.exe\"" def visualStudioPath = "\"C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\MSBuild\\15.0\\Bin\\MSBuild.exe\""
def buildOptions = "/p:PlatformToolset=v141_xp /p:XPDeprecationWarning=false /t:pyrogenesis /t:AtlasUI /t:test /m:2 /nologo -clp:NoSummary" def buildOptions = "/p:PlatformToolset=v141_xp /p:XPDeprecationWarning=false /t:pyrogenesis /t:AtlasUI /t:test /nologo -clp:NoSummary"
pipeline { pipeline {
// Stop previous build in pull requests, but not in branches // Stop previous build in pull requests, but not in branches

View File

@ -14,7 +14,11 @@ else
-- No Unix-specific libs yet (use source directory instead!) -- No Unix-specific libs yet (use source directory instead!)
end end
-- directory for shared, bundled libraries -- directory for shared, bundled libraries
libraries_source_dir = rootdir.."/libraries/source/" if os.istarget("windows") then
libraries_source_dir = rootdir.."/libraries/win32/"
else
libraries_source_dir = rootdir.."/libraries/source/"
end
third_party_source_dir = rootdir.."/source/third_party/" third_party_source_dir = rootdir.."/source/third_party/"
local function add_default_lib_paths(extern_lib) local function add_default_lib_paths(extern_lib)
@ -361,7 +365,7 @@ extern_lib_defs = {
end, end,
}, },
glad = { glad = {
add_source_include_paths("glad") add_third_party_include_paths("glad")
}, },
gloox = { gloox = {
compile_settings = function() compile_settings = function()

View File

@ -943,16 +943,11 @@ function setup_all_libs ()
extern_libs = { "glad" } extern_libs = { "glad" }
if not os.istarget("windows") and not _OPTIONS["android"] and not os.istarget("macosx") then if not os.istarget("windows") and not _OPTIONS["android"] and not os.istarget("macosx") then
-- X11 should only be linked on *nix table.insert(extern_libs, "x11")
table.insert(used_extern_libs, "x11")
end
setup_static_lib_project("gladwrapper", {}, used_extern_libs, { no_pch = 1 })
glad_path = libraries_source_dir.."glad/"
if externalincludedirs then
externalincludedirs { glad_path.."include" }
else
sysincludedirs { glad_path.."include" }
end end
setup_static_lib_project("gladwrapper", {}, extern_libs, { no_pch = 1 })
-- select files to build for the current platform
glad_path = third_party_source_dir.."glad/"
files { glad_path.."src/vulkan.cpp" } files { glad_path.."src/vulkan.cpp" }
if _OPTIONS["gles"] then if _OPTIONS["gles"] then
files { glad_path.."src/gles2.cpp" } files { glad_path.."src/gles2.cpp" }
@ -964,6 +959,10 @@ function setup_all_libs ()
files { glad_path.."src/egl.cpp", glad_path.."src/glx.cpp" } files { glad_path.."src/egl.cpp", glad_path.."src/glx.cpp" }
end end
end end
-- on Windows, silence a build warning in vulkan.cpp
filter "action:vs*"
buildoptions { "/wd4551" }
filter {}
-- Third-party libraries that are built as part of the main project, -- Third-party libraries that are built as part of the main project,

View File

@ -24,23 +24,23 @@ ZLIB_VERSION="zlib-1.2.11"
CURL_VERSION="curl-7.71.0" CURL_VERSION="curl-7.71.0"
ICONV_VERSION="libiconv-1.16" ICONV_VERSION="libiconv-1.16"
XML2_VERSION="libxml2-2.9.10" XML2_VERSION="libxml2-2.9.10"
SDL2_VERSION="SDL2-2.0.18" SDL2_VERSION="SDL2-2.24.0"
# NOTE: remember to also update LIB_URL below when changing version # NOTE: remember to also update LIB_URL below when changing version
BOOST_VERSION="boost_1_76_0" BOOST_VERSION="boost_1_81_0"
# NOTE: remember to also update LIB_URL below when changing version # NOTE: remember to also update LIB_URL below when changing version
WXWIDGETS_VERSION="wxWidgets-3.1.4" WXWIDGETS_VERSION="wxWidgets-3.1.4"
# libpng was included as part of X11 but that's removed from Mountain Lion # libpng was included as part of X11 but that's removed from Mountain Lion
# (also the Snow Leopard version was ancient 1.2) # (also the Snow Leopard version was ancient 1.2)
PNG_VERSION="libpng-1.6.36" PNG_VERSION="libpng-1.6.36"
FREETYPE_VERSION="freetype-2.10.4" FREETYPE_VERSION="freetype-2.10.4"
OGG_VERSION="libogg-1.3.3" OGG_VERSION="libogg-1.3.5"
VORBIS_VERSION="libvorbis-1.3.7" VORBIS_VERSION="libvorbis-1.3.7"
# gloox requires GnuTLS, GnuTLS requires Nettle and GMP # gloox requires GnuTLS, GnuTLS requires Nettle and GMP
GMP_VERSION="gmp-6.2.1" GMP_VERSION="gmp-6.2.1"
NETTLE_VERSION="nettle-3.9" NETTLE_VERSION="nettle-3.9"
# NOTE: remember to also update LIB_URL below when changing version # NOTE: remember to also update LIB_URL below when changing version
GLOOX_VERSION="gloox-1.0.24" GLOOX_VERSION="gloox-1.0.24"
GNUTLS_VERSION="gnutls-3.8.0" GNUTLS_VERSION="gnutls-3.8.3"
# OS X only includes part of ICU, and only the dylib # OS X only includes part of ICU, and only the dylib
# NOTE: remember to also update LIB_URL below when changing version # NOTE: remember to also update LIB_URL below when changing version
ICU_VERSION="icu4c-69_1" ICU_VERSION="icu4c-69_1"
@ -55,7 +55,6 @@ MOLTENVK_VERSION="1.2.2"
# * NVTT # * NVTT
# * FCollada # * FCollada
# -------------------------------------------------------------- # --------------------------------------------------------------
source_svnrev="28207"
# -------------------------------------------------------------- # --------------------------------------------------------------
# Provided by OS X: # Provided by OS X:
# * OpenAL # * OpenAL
@ -409,7 +408,7 @@ echo "Building Boost..."
LIB_VERSION="${BOOST_VERSION}" LIB_VERSION="${BOOST_VERSION}"
LIB_ARCHIVE="$LIB_VERSION.tar.bz2" LIB_ARCHIVE="$LIB_VERSION.tar.bz2"
LIB_DIRECTORY="$LIB_VERSION" LIB_DIRECTORY="$LIB_VERSION"
LIB_URL="https://boostorg.jfrog.io/artifactory/main/release/1.76.0/source/" LIB_URL="https://boostorg.jfrog.io/artifactory/main/release/1.81.0/source/"
mkdir -p boost mkdir -p boost
cd boost cd boost
@ -620,16 +619,16 @@ OGG_DIR="$(pwd)/libogg"
rm -rf $LIB_DIRECTORY include lib share rm -rf $LIB_DIRECTORY include lib share
tar -xf $LIB_ARCHIVE tar -xf $LIB_ARCHIVE
( # shellcheck disable=SC2086
cd $LIB_DIRECTORY cmake -B libogg \
./configure \ -S $LIB_DIRECTORY \
CFLAGS="$CFLAGS" \ -G "Unix Makefiles" \
LDFLAGS="$LDFLAGS" \ -DCMAKE_INSTALL_PREFIX="$OGG_DIR" \
--prefix="$OGG_DIR" \ -DBUILD_SHARED_LIBS=OFF \
--enable-shared=no -DINSTALL_DOCS=OFF \
make "${JOBS}" -DCMAKE_C_FLAGS="$CFLAGS" \
make install $CMAKE_FLAGS
) || die "libogg build failed" cmake --build libogg "${JOBS}" --target install
cp -f lib/pkgconfig/* "$PC_PATH" cp -f lib/pkgconfig/* "$PC_PATH"
echo "$LIB_VERSION" >.already-built echo "$LIB_VERSION" >.already-built
@ -659,17 +658,17 @@ echo "Building libvorbis..."
rm -rf $LIB_DIRECTORY include lib share rm -rf $LIB_DIRECTORY include lib share
tar -xf $LIB_ARCHIVE tar -xf $LIB_ARCHIVE
( # shellcheck disable=SC2086
cd $LIB_DIRECTORY cmake -B libvorbis \
./configure \ -S $LIB_DIRECTORY \
CFLAGS="$CFLAGS" \ -G "Unix Makefiles" \
LDFLAGS="$LDFLAGS" \ -DCMAKE_INSTALL_PREFIX="$INSTALL_DIR" \
--prefix="$INSTALL_DIR" \ -DCMAKE_PREFIX_PATH="$OGG_DIR" \
--enable-shared=no \ -DBUILD_SHARED_LIBS=OFF \
--with-ogg="$OGG_DIR" -DINSTALL_DOCS=OFF \
make "${JOBS}" -DCMAKE_C_FLAGS="$CFLAGS" \
make install $CMAKE_FLAGS
) || die "libvorbis build failed" cmake --build libvorbis "${JOBS}" --target install
cp -f lib/pkgconfig/* "$PC_PATH" cp -f lib/pkgconfig/* "$PC_PATH"
echo "$LIB_VERSION" >.already-built echo "$LIB_VERSION" >.already-built
@ -1067,21 +1066,17 @@ echo "Building fmt..."
rm -rf $LIB_DIRECTORY include lib rm -rf $LIB_DIRECTORY include lib
tar -xf $LIB_ARCHIVE tar -xf $LIB_ARCHIVE
( # It appears that older versions of Clang require constexpr statements to have a user-set constructor.
cd $LIB_DIRECTORY patch -Np1 -i ../../../macos-patches/fmt_constexpr.diff
# It appears that older versions of Clang require constexpr statements to have a user-set constructor. # shellcheck disable=SC2086
patch -Np1 -i ../../../macos-patches/fmt_constexpr.diff cmake -B libfmt \
mkdir -p build -S $LIB_DIRECTORY \
cd build -DFMT_TEST=False \
# shellcheck disable=SC2086 -DFMT_DOC=False \
cmake .. \ -DCMAKE_C_FLAGS="$CFLAGS" \
-DFMT_TEST=False \ -DCMAKE_INSTALL_PREFIX="$INSTALL_DIR" \
-DFMT_DOC=False \ $CMAKE_FLAGS
-DCMAKE_INSTALL_PREFIX="$INSTALL_DIR" \ cmake --build libfmt "${JOBS}" --target install
$CMAKE_FLAGS
make fmt "${JOBS}"
make install
) || die "fmt build failed"
cp -f lib/pkgconfig/* "$PC_PATH" cp -f lib/pkgconfig/* "$PC_PATH"
echo "$FMT_VERSION" >.already-built echo "$FMT_VERSION" >.already-built
@ -1102,7 +1097,7 @@ echo "Building Molten VK..."
cd "molten-vk" cd "molten-vk"
if [ $force_rebuild = "true" ] || [ ! -e .already-built ] || [ "$(cat .already-built)" != "$MOLTENVK_VERSION" ] || [ ! -e ../../../binaries/system/libMoltenVK.dylib ]; then if [ $force_rebuild = "true" ] || [ ! -e .already-built ] || [ "$(cat .already-built)" != "$MOLTENVK_VERSION" ] || [ ! -e ../../../binaries/system/libMoltenVK.dylib ]; then
INSTALL_DIR="../../../../binaries/system/" INSTALL_DIR="../../../binaries/system/"
rm -f .already-built rm -f .already-built
download_lib $LIB_URL $LIB_ARCHIVE download_lib $LIB_URL $LIB_ARCHIVE
@ -1124,55 +1119,27 @@ echo "Building Molten VK..."
# -------------------------------------------------------------------- # --------------------------------------------------------------------
# The following libraries are shared on different OSes and may # The following libraries are shared on different OSes and may
# be customized, so we build and install them from bundled sources # be customized, so we build and install them from bundled sources
# (served over SVN) # (served over SVN or other sources)
# -------------------------------------------------------------------- # --------------------------------------------------------------------
if [ -e ../source/.svn ]; then export ARCH CXXFLAGS CFLAGS LDFLAGS CMAKE_FLAGS JOBS
(
cd ../source
svn cleanup
svn up -r $source_svnrev
) || die "Failed update of source libs"
else
svn co -r $source_svnrev https://svn.wildfiregames.com/public/source-libs/trunk ../source
fi
# SpiderMonkey - bundled, no download
(
cd ../source/spidermonkey/
if [ $force_rebuild = "true" ]; then
rm -f .already-built
fi
# Use the regular build script for SM.
JOBS="$JOBS" ZLIB_DIR="$ZLIB_DIR" ARCH="$ARCH" ./build.sh || die "Error building spidermonkey"
cp bin/* ../../../binaries/system/
) || die "Failed to build spidermonkey"
# -------------------------------------------------------------- # --------------------------------------------------------------
# NVTT - bundled, no download echo "Building cxxtest..."
(
cd ../source/nvtt
if [ $force_rebuild = "true" ]; then ./../source/cxxtest-4.4/build.sh || die "cxxtest build failed"
rm -f .already-built
fi
CXXFLAGS="$CXXFLAGS" CFLAGS="$CFLAGS" LDFLAGS="$LDFLAGS" CMAKE_FLAGS=$CMAKE_FLAGS JOBS="$JOBS" ./build.sh || die "Error building NVTT"
cp bin/* ../../../binaries/system/
) || die "Failed to build nvtt"
# -------------------------------------------------------------- # --------------------------------------------------------------
# FCollada - bundled, no download echo "Building FCollada..."
(
cd ../source/fcollada/
if [ $force_rebuild = "true" ]; then ./../source/fcollada/build.sh || die "FCollada build failed"
rm -f .already-built
fi
CXXFLAGS="$CXXFLAGS" CFLAGS="$CFLAGS" LDFLAGS="$LDFLAGS" JOBS="$JOBS" ./build.sh || die "Error building FCollada" # --------------------------------------------------------------
cp bin/* ../../../binaries/system/ echo "Building nvtt..."
) || die "Failed to build fcollada"
./../source/nvtt/build.sh || die "NVTT build failed"
# --------------------------------------------------------------
echo "Building Spidermonkey..."
./../source/spidermonkey/build.sh || die "SpiderMonkey build failed"

View File

@ -6,10 +6,6 @@ die()
exit 1 exit 1
} }
# SVN revision to checkout for source-libs
# Update this line when you commit an update to source-libs
source_svnrev="28207"
if [ "$(uname -s)" = "Darwin" ]; then if [ "$(uname -s)" = "Darwin" ]; then
die "This script should not be used on macOS: use build-macos-libs.sh instead." die "This script should not be used on macOS: use build-macos-libs.sh instead."
fi fi
@ -18,18 +14,13 @@ cd "$(dirname "$0")" || die
# Now in libraries/ (where we assume this script resides) # Now in libraries/ (where we assume this script resides)
# Check for whitespace in absolute path; this will cause problems in the # Check for whitespace in absolute path; this will cause problems in the
# SpiderMonkey build and maybe elsewhere, so we just forbid it # SpiderMonkey build and maybe elsewhere, so we just forbid it.
# Use perl as an alternative to readlink -f, which isn't available on BSD case "$(realpath .)" in
SCRIPTPATH=$(perl -MCwd -e 'print Cwd::abs_path shift' "$0") *[[:space:]]*)
case "$SCRIPTPATH" in
*\ *)
die "Absolute path contains whitespace, which will break the build - move the game to a path without spaces" die "Absolute path contains whitespace, which will break the build - move the game to a path without spaces"
;; ;;
esac esac
# Parse command-line options (download options and build options):
source_libs_dir="source"
without_nvtt=false without_nvtt=false
with_system_nvtt=false with_system_nvtt=false
with_system_mozjs=false with_system_mozjs=false
@ -38,8 +29,6 @@ JOBS=${JOBS:="-j2"}
for i in "$@"; do for i in "$@"; do
case $i in case $i in
--source-libs-dir=*) source_libs_dir=${1#*=} ;;
--source-libs-dir) die "correct syntax is --source-libs-dir=/path/to/dir" ;;
--without-nvtt) without_nvtt=true ;; --without-nvtt) without_nvtt=true ;;
--with-system-nvtt) with_system_nvtt=true ;; --with-system-nvtt) with_system_nvtt=true ;;
--with-system-mozjs) with_system_mozjs=true ;; --with-system-mozjs) with_system_mozjs=true ;;
@ -47,19 +36,6 @@ for i in "$@"; do
esac esac
done done
# Download source libs
echo "Downloading source libs..."
echo
if [ -e "${source_libs_dir}"/.svn ]; then
(cd "${source_libs_dir}" && svn cleanup && svn up -r $source_svnrev)
else
svn co -r $source_svnrev https://svn.wildfiregames.com/public/source-libs/trunk "${source_libs_dir}"
fi
# Build/update bundled external libraries
echo "Building third-party dependencies..."
echo
# Some of our makefiles depend on GNU make, so we set some sane defaults if MAKE # Some of our makefiles depend on GNU make, so we set some sane defaults if MAKE
# is not set. # is not set.
case "$(uname -s)" in case "$(uname -s)" in
@ -71,48 +47,25 @@ case "$(uname -s)" in
;; ;;
esac esac
(cd "${source_libs_dir}"/fcollada && MAKE=${MAKE} JOBS=${JOBS} ./build.sh) || die "FCollada build failed" export MAKE JOBS
# Build/update bundled external libraries
echo "Building third-party dependencies..."
echo
./source/cxxtest-4.4/build.sh || die "cxxtest build failed"
echo
./source/fcollada/build.sh || die "FCollada build failed"
echo echo
if [ "$with_system_nvtt" = "false" ] && [ "$without_nvtt" = "false" ]; then if [ "$with_system_nvtt" = "false" ] && [ "$without_nvtt" = "false" ]; then
(cd "${source_libs_dir}"/nvtt && MAKE=${MAKE} JOBS=${JOBS} ./build.sh) || die "NVTT build failed" ./source/nvtt/build.sh || die "NVTT build failed"
cp source/nvtt/bin/* ../binaries/system/
fi fi
echo echo
if [ "$with_system_mozjs" = "false" ]; then if [ "$with_system_mozjs" = "false" ]; then
(cd "${source_libs_dir}"/spidermonkey && MAKE=${MAKE} JOBS=${JOBS} ./build.sh) || die "SpiderMonkey build failed" ./source/spidermonkey/build.sh || die "SpiderMonkey build failed"
cp source/spidermonkey/bin/* ../binaries/system/
fi fi
echo echo
echo "Copying built files..."
# Copy built binaries to binaries/system/
cp "${source_libs_dir}"/fcollada/bin/* ../binaries/system/
if [ "$with_system_nvtt" = "false" ] && [ "$without_nvtt" = "false" ]; then
cp "${source_libs_dir}"/nvtt/bin/* ../binaries/system/
fi
if [ "$with_system_mozjs" = "false" ]; then
cp "${source_libs_dir}"/spidermonkey/bin/* ../binaries/system/
fi
# If a custom source-libs dir was used, includes and static libs should be copied to libraries/source/
# and all other bundled content should be copied.
if [ "$source_libs_dir" != "source" ]; then
rsync -avzq \
--exclude fcollada \
--exclude nvtt \
--exclude spidermonkey \
"${source_libs_dir}"/ source
mkdir -p source/fcollada
cp -r "${source_libs_dir}"/fcollada/include source/fcollada/
cp -r "${source_libs_dir}"/fcollada/lib source/fcollada/
if [ "$with_system_nvtt" = "false" ] && [ "$without_nvtt" = "false" ]; then
mkdir -p source/nvtt
cp -r "${source_libs_dir}"/nvtt/include source/nvtt/
cp -r "${source_libs_dir}"/nvtt/lib source/nvtt/
fi
if [ "$with_system_mozjs" = "false" ]; then
mkdir -p source/spidermonkey
cp -r "${source_libs_dir}"/spidermonkey/include-unix-debug source/spidermonkey/
cp -r "${source_libs_dir}"/spidermonkey/include-unix-release source/spidermonkey/
cp -r "${source_libs_dir}"/spidermonkey/lib source/spidermonkey/
fi
fi
echo "Done." echo "Done."

View File

@ -1,24 +1,11 @@
rem **Download sources and binaries of libraries** rem **Download sources and binaries of libraries**
rem **SVN revision to checkout for source-libs and windows-libs** rem **SVN revision to checkout for windows-libs**
rem **Update this line when you commit an update to source-libs or windows-libs** rem **Update this line when you commit an update to windows-libs**
set "svnrev=28207" set "svnrev=28209"
if exist source\.svn ( svn co https://svn.wildfiregames.com/public/windows-libs/trunk@%svnrev% win32
cd source && svn cleanup && svn up -r %svnrev% && cd ..
) else (
svn co -r %svnrev% https://svn.wildfiregames.com/public/source-libs/trunk source
)
if exist win32\.svn (
cd win32 && svn cleanup && svn up -r %svnrev% && cd ..
) else (
svn co -r %svnrev% https://svn.wildfiregames.com/public/windows-libs/trunk win32
)
rem **Copy binaries to binaries/system/** rem **Copy binaries to binaries/system/**
copy source\fcollada\bin\* ..\binaries\system\
copy source\nvtt\bin\* ..\binaries\system\
copy source\spidermonkey\bin\* ..\binaries\system\
for /d %%l in (win32\*) do (if exist %%l\bin copy /y %%l\bin\* ..\binaries\system\) for /d %%l in (win32\*) do (if exist %%l\bin copy /y %%l\bin\* ..\binaries\system\)

View File

@ -0,0 +1,27 @@
#!/bin/sh
set -e
cd "$(dirname "$0")"
LIB_VERSION=28209
if [ -e .already-built ] && [ "$(cat .already-built)" = "${LIB_VERSION}" ]; then
echo "cxxtest-4.4 is already up to date."
exit
fi
# fetch
svn co https://svn.wildfiregames.com/public/source-libs/trunk/cxxtest-4.4@${LIB_VERSION} cxxtest-4.4-svn
# unpack
rm -Rf cxxtest-4.4-build
cp -R cxxtest-4.4-svn cxxtest-4.4-build
# nothing to actually build
# built as part of building tests
# install
rm -Rf bin cxxtest python
cp -R cxxtest-4.4-build/bin cxxtest-4.4-build/cxxtest cxxtest-4.4-build/python .
echo "${LIB_VERSION}" >.already-built

View File

@ -0,0 +1,30 @@
#!/bin/sh
set -e
cd "$(dirname "$0")"
LIB_VERSION=28209
if [ -e .already-built ] && [ "$(cat .already-built)" = "${LIB_VERSION}" ]; then
echo "FCollada is already up to date."
exit
fi
# fetch
svn co "https://svn.wildfiregames.com/public/source-libs/trunk/fcollada@${LIB_VERSION}" fcollada-svn
# unpack
rm -Rf fcollada-build
cp -R fcollada-svn fcollada-build
# build
(
cd fcollada-build
./build.sh
)
# install
rm -Rf include lib
cp -R fcollada-build/include fcollada-build/lib .
echo "${LIB_VERSION}" >.already-built

Some files were not shown because too many files have changed in this diff Show More