Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .ai/style-guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ in the project's shared files, with the background in `01-style-guide-options.md
| `.ui-box`, `.ui-columns` | Bordered group, two-column grid of groups | Same border and fill as a card |
| `.ui-bar` with an `<i style="width:N%">` | Health or progress | 6px, green part `#2f7a1f`, rest `#b3261e` (`.neutral` for a tan rest) |
| `.ui-field` | Label above its input | Bold label, input with 1px `#8a7550` border and 3px corners |
| `table.ui-breakdown` | Where a total comes from (income per building): `td.tile` for a 32px map tile image, `td.number` for amounts, `tr.total` last | Full width, thin tan line under each row, bold total row with a dark line above |
| `.ui-muted`, `.ui-good`, `.ui-bad` | Secondary text, good and bad numbers | `#7a6a4c`, `#2f7a1f`, `#b3261e` |
| `p.true.ui-msg` etc. | Classic message box with room | 8px 10px padding, 3px corners |

Expand Down
8 changes: 4 additions & 4 deletions composer.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

64 changes: 64 additions & 0 deletions public/dolumar/css/ui.css
Original file line number Diff line number Diff line change
Expand Up @@ -254,6 +254,48 @@ a.ui-card:hover
}

/* Text helpers. */
/* Number table: where a total comes from (income breakdown). Label left, amount right, total row at the bottom. */
table.ui-breakdown
{
width: 100%;
margin: 8px 0;
border-collapse: collapse;
}

table.ui-breakdown td
{
padding: 3px 4px;
border-bottom: 1px solid #c9b58a;
vertical-align: middle;
text-align: left;
}

table.ui-breakdown td.number
{
text-align: right;
white-space: nowrap;
}

table.ui-breakdown td.tile
{
width: 32px;
padding: 0 4px 0 0;
}

table.ui-breakdown td.tile img
{
display: block;
width: 32px;
height: auto;
}

table.ui-breakdown tr.total td
{
border-top: 1px solid #40331f;
border-bottom: 0;
font-weight: bold;
}

.ui-muted { color: #7a6a4c; }
.ui-good { color: #2f7a1f; }
.ui-bad { color: #b3261e; }
Expand Down Expand Up @@ -350,3 +392,25 @@ body.layout-mobile .sheet-content .ui-card .ui-card-title
color: #000097;
text-decoration: underline;
}

/* The sheet's generic table rules (separate borders, centred numbers, top alignment) do not apply. */
body.layout-mobile .sheet-content table.ui-breakdown
{
border-collapse: collapse;
}

body.layout-mobile .sheet-content table.ui-breakdown td
{
padding: 6px 4px;
vertical-align: middle;
}

body.layout-mobile .sheet-content table.ui-breakdown td.number
{
text-align: right;
}

body.layout-mobile .sheet-content table.ui-breakdown td.tile
{
padding: 0 4px 0 0;
}
37 changes: 32 additions & 5 deletions resources/language/en/buildings.lng
Original file line number Diff line number Diff line change
Expand Up @@ -49,11 +49,12 @@ Clanportal = "Clan Portals"
[desc]
TownCenter = "The center of the Town. Here the elders of the town meet to discuss politics."
Silo = "Your Silo is where your resources are stored. It determines the amount of resources you can store."
Farm = "Your farm produces grain. If you have a haystack in your village, put it next to that for extra income."
StoneMine = "Your stone mine produces stone. If you have a mine in your village, put it next to that for extra income."
Lumber = "Your lumber camp produces wood. If you have a forest in your village, put it next to that for extra income."
IronMine = "Your iron mine produces iron. If you have a mine in your village, put it next to that for extra income."
GemMine = "Your gem mine produces gems. Put it next to a gem mine for extra income."
Farm = "Your farm produces grain. Every haystack next to it adds 20% more grain."
StoneMine = "Your stone mine produces stone. Every stone rock next to it adds 20% more stone."
Lumber = "Your lumber camp produces wood. Every forest tile next to it adds 20% more wood."
IronMine = "Your iron mine produces iron. Every iron ore rock next to it adds 20% more iron."
GemMine = "Your gem mine produces gems. Every gem rock next to it adds 20% more gems."
Mill = "Your mill grinds the grain of all your farms. The more farm levels you have, the more grain your mills produce."
Barrack = "Your infantry is trained in barracks. The more barracks you have, the larger your army will be. Your barrack level determines the training duration."
Archery = "Archers are trained in your archery."
Stable = "Stables hold horses. Horsemen are faster then soldiers on foot."
Expand Down Expand Up @@ -99,6 +100,32 @@ producing1 = "This building produces"
producing2 = "every hour."
upgrade1 = "This building will produce @@next after upgrading."
upgrade2 = "At the moment it's producing @@now."
baseIncome = "Base production (level @@level)"
honourIncome = "Honour @@honour%"
tileBonus = "@@tile next to it: +@@percentage%"
tileBonusMultiple = "@@tile next to it (@@amount tiles): +@@percentage%"
totalIncome = "Total"
millShare = "Share of your farms' grain (farm levels: @@farms, mill levels: @@mills)"
millAdvice = "Another mill level would make your mills produce @@mill more. Another farm level adds @@farm through your mills, on top of the farm's own grain."

[tiles]
trees = "Forest"
haystack = "Haystack"
stone = "Stone rock"
iron = "Iron ore"
gems = "Gem rock"

[placement]
bonustext = "+@@value% @@resource"
nobonus = "No bonus here"

[bonusExplanation]
Farm = "Every haystack in the 3 by 3 square around a farm (its own tile included) adds 20% grain. Haystacks are rare: look for one before you place a farm."
Lumber = "Every forest tile in the 3 by 3 square around a lumber camp (its own tile included) adds 20% wood."
StoneMine = "Every stone rock in the 3 by 3 square around a stone mine adds 20% stone. Rocks are rare: look for one before you place a mine."
IronMine = "Every iron ore rock in the 3 by 3 square around an iron mine adds 20% iron. Rocks are rare: look for one before you place a mine."
GemMine = "Every gem rock in the 3 by 3 square around a gem mine adds 20% gems. Rocks are rare: look for one before you place a mine."
Mill = "A mill does not need to stand near anything: it grinds the grain of all your farms. Every farm level adds grain for your mills to share, and every mill level takes a share. Honour and map tiles do not change a mill's production."

[silo]
silo = "Silo Capacity"
Expand Down
37 changes: 32 additions & 5 deletions resources/language/nl/buildings.lng
Original file line number Diff line number Diff line change
Expand Up @@ -47,11 +47,12 @@ Portal="Magische poorten"
[desc]
TownCenter="Het centrum van het dorp. Hier komen de dorpswijzen samen om over politiek te praten."
Silo="Je grondstoffen worden opgeslagen in opslagplaatsen."
Farm="Boederijen produceren voedsel, de belangrijkste grondstof voor het opbouwen van troepen. Plaats ze naast een hooiberg voor extra inkomsten."
StoneMine="Steenmijen produceren steen. Plaats ze naast steenmijnen voor extra inkomsten."
Lumber="Houthakkers zorgen voor hout. Plaats ze naast bossen voor extra inkomsten."
IronMine="Je ijzermijnen produceren ijzer, voornamelijk gebruikt voor wapens."
GemMine="Je diamantmijnen produceren diamanten, gebruikt voor magische spreuken. Plaats ze naast diamanten voor extra inkomsten."
Farm="Boerderijen produceren graan, de belangrijkste grondstof voor het opbouwen van troepen. Elke hooiberg ernaast geeft 20% meer graan."
StoneMine="Steenmijnen produceren steen. Elke steenrots ernaast geeft 20% meer steen."
Lumber="Houthakkers zorgen voor hout. Elke bostegel ernaast geeft 20% meer hout."
IronMine="Je ijzermijnen produceren ijzer, voornamelijk gebruikt voor wapens. Elke ijzerertsrots ernaast geeft 20% meer ijzer."
GemMine="Je diamantmijnen produceren diamanten, gebruikt voor magische spreuken. Elke diamantrots ernaast geeft 20% meer diamanten."
Mill="Je molen maalt het graan van al je boerderijen. Hoe meer boerderijniveaus je hebt, hoe meer graan je molens produceren."
Barrack="Je infantrie wordt getraind in barakken. Hoe meer barakken je hebt, hoe meer troepen je kan bouwen."
Archery="In het shuttershof worden scherpschutters getraind."
Stable="De stallen huizen en trainen paarden en ruiters, ideaal om snel je vijand te bereiken."
Expand Down Expand Up @@ -91,6 +92,32 @@ producing1="Dit gebouw produceert"
producing2="elk uur."
upgrade1="Dit gebouw zal @@next produceren na de uitbreiding."
upgrade2="Momenteel produceert het @@now."
baseIncome="Basisproductie (niveau @@level)"
honourIncome="Eer @@honour%"
tileBonus="@@tile ernaast: +@@percentage%"
tileBonusMultiple="@@tile ernaast (@@amount tegels): +@@percentage%"
totalIncome="Totaal"
millShare="Deel van het graan van je boerderijen (boerderijniveaus: @@farms, molenniveaus: @@mills)"
millAdvice="Een extra molenniveau laat je molens samen @@mill meer produceren. Een extra boerderijniveau levert via je molens @@farm op, bovenop het graan van de boerderij zelf."

[tiles]
trees="Bos"
haystack="Hooiberg"
stone="Steenrots"
iron="IJzererts"
gems="Diamantrots"

[placement]
bonustext="+@@value% @@resource"
nobonus="Geen bonus hier"

[bonusExplanation]
Farm="Elke hooiberg in het vierkant van 3 op 3 rond een boerderij (haar eigen tegel inbegrepen) geeft 20% meer graan. Hooibergen zijn zeldzaam: zoek er een voor je een boerderij plaatst."
Lumber="Elke bostegel in het vierkant van 3 op 3 rond een houthakker (zijn eigen tegel inbegrepen) geeft 20% meer hout."
StoneMine="Elke steenrots in het vierkant van 3 op 3 rond een steenmijn geeft 20% meer steen. Rotsen zijn zeldzaam: zoek er een voor je een mijn plaatst."
IronMine="Elke ijzerertsrots in het vierkant van 3 op 3 rond een ijzermijn geeft 20% meer ijzer. Rotsen zijn zeldzaam: zoek er een voor je een mijn plaatst."
GemMine="Elke diamantrots in het vierkant van 3 op 3 rond een diamantmijn geeft 20% meer diamanten. Rotsen zijn zeldzaam: zoek er een voor je een mijn plaatst."
Mill="Een molen hoeft nergens naast te staan: hij maalt het graan van al je boerderijen. Elk boerderijniveau levert graan om te delen, elk molenniveau neemt een deel. Eer en kaarttegels veranderen de productie van een molen niet."

[silo]
silo="Opslagplaats capaciteit"
Expand Down
27 changes: 27 additions & 0 deletions resources/templates/default/buildings/producing.tpl
Original file line number Diff line number Diff line change
@@ -1,6 +1,33 @@
<?php $this->setTextSection ('producing', 'buildings'); ?>
<h3><?=$hourlyIncome?></h3>
<p class="maybe" style="text-align: center;">
<?=$producing1?><br />
<strong><?=$income?></strong><br />
<?=$producing2?>
</p>

<?php if (isset ($list_breakdown) && count ($list_breakdown) > 0) { ?>
<?php $hasTiles = count (array_filter (array_column ($list_breakdown, 'image'))) > 0; ?>
<table class="ui-breakdown">
<?php foreach (array_values ($list_breakdown) as $i => $v) { ?>
<tr>
<?php if ($hasTiles) { ?><td class="tile"><?php if (!empty ($v['image'])) { ?><img src="<?=$v['image']?>" alt="" /><?php } ?></td><?php } ?>
<td><?=$v['label']?></td>
<td class="number <?=$v['amount'] < 0 ? 'ui-bad' : ''?>"><?=($v['amount'] > 0 && $i > 0 ? '+' : '') . $v['amount']?></td>
</tr>
<?php } ?>
<tr class="total">
<?php if ($hasTiles) { ?><td class="tile"></td><?php } ?>
<td><?=$this->getText ('totalIncome')?></td>
<td class="number"><span class="resource <?=$resource?>">&nbsp;<span>&nbsp;</span></span> <?=$total?></td>
</tr>
</table>
<?php } ?>

<?php if (!empty ($advice)) { ?>
<p><?=$advice?></p>
<?php } ?>

<?php if (!empty ($explanation)) { ?>
<p class="ui-muted"><?=$explanation?></p>
<?php } ?>
110 changes: 100 additions & 10 deletions src/Dolumar/Buildings/Mill.php
Original file line number Diff line number Diff line change
Expand Up @@ -33,20 +33,110 @@ protected function initRequirements ()

public function calculateIncome ($level = null)
{
$numbers = $this->getMillNumbers ($level);
return $numbers['income'];
}

/*
A mill does not use map tiles or honour: all mills share the
grain of all farms. Every farm level adds 1.7 x 120 grain to share,
divided over the farm and mill levels together.
$level is this mill's level; another level than the current one
also changes the total of mill levels (for the upgrade preview).
*/
private function getMillNumbers ($level = null, $extraFarms = 0, $extraMills = 0)
{
$current = $this->getLevel ();
if (!isset ($level))
{
$level = $this->getLevel ();
$level = $current;
}
$farms = $this->getVillage()->buildings->getBuildingLevelSum (10);
$mills = $this->getVillage()->buildings->getBuildingLevelSum (16);

$farms = $this->getVillage()->buildings->getBuildingLevelSum (10) + $extraFarms;
$mills = $this->getVillage()->buildings->getBuildingLevelSum (16) + ($level - $current) + $extraMills;

$income = $this->INCOME * GAME_SPEED_RESOURCES;

$x = 1.7 * $income * $farms * $level;
$y = max (1, $farms + $mills);

return floor ($x / $y);

return array
(
'farms' => $farms,
'mills' => $mills,
'income' => floor ((1.7 * $income * $farms * $level) / max (1, $farms + $mills)),

// What all mills of this village produce together.
'allMills' => floor ((1.7 * $income * $farms * $mills) / max (1, $farms + $mills))
);
}

/*
Mills do not use map tiles.
*/
public function getPlacementPreview (Dolumar_Players_Village $village)
{
return null;
}

public function getIncomeBreakdown ()
{
$text = Neuron_Core_Text::__getInstance ();
$text->setFile ('buildings');
$text->setSection ('producing');

$numbers = $this->getMillNumbers ();

$rows = array ();
$rows[] = array
(
'label' => Neuron_Core_Tools::putIntoText
(
$text->get ('millShare'),
array
(
'level' => $this->getLevel (),
'farms' => $numbers['farms'],
'mills' => $numbers['mills']
)
),
'amount' => $numbers['income']
);

$this->addEffectRows ($rows, $numbers['income'], $numbers['income']);

return $rows;
}

/*
What another mill level or another farm level would add through
the mills (before technologies and spells).
*/
protected function getIncomeAdvice ()
{
$text = Neuron_Core_Text::__getInstance ();

$now = $this->getMillNumbers ();
$moreMills = $this->getMillNumbers (null, 0, 1);
$moreFarms = $this->getMillNumbers (null, 1, 0);

return Neuron_Core_Tools::putIntoText
(
$text->get ('millAdvice', 'producing', 'buildings'),
array
(
'mill' => $this->grainToText ($moreMills['allMills'] - $now['allMills']),
'farm' => $this->grainToText ($moreFarms['allMills'] - $now['allMills'])
)
);
}

private function grainToText ($amount)
{
// resourceToText leaves out amounts of 0 or less.
if ($amount <= 0)
{
return '0';
}

return $this->resourceToText (array ('grain' => $amount), false, false);
}
}
?>
Loading
Loading