diff --git a/attribution.txt b/attribution.txt
index b00eb79..4debc2c 100644
--- a/attribution.txt
+++ b/attribution.txt
@@ -11,3 +11,13 @@ Beer by Serhii Smirnov from the Noun Project
Caravel by Rahmat Hidayat from the Noun Project
question mark by Icon Lauk from the Noun Project
Hiking Trail by Weltenraser from the Noun Project
+coin by Michele Zamparo from the Noun Project
+Carving Tools by Coby Graphics from the Noun Project
+Ink by MRK from the Noun Project
+deed by Vectors Point from the Noun Project
+Diamond by Dika Darma from the Noun Project
+Crown by icon 54 from the Noun Project
+life by Gregor Cresnar from the Noun Project
+Art by Econceptive from the Noun Project
+potion by Brianna Reed from the Noun Project
+Ancient Egyptian religion by Dabid J. Pascual from the Noun Project
diff --git a/questhelper/map/map_renderer.py b/questhelper/map/map_renderer.py
index 6c6c01b..37c7258 100644
--- a/questhelper/map/map_renderer.py
+++ b/questhelper/map/map_renderer.py
@@ -1,8 +1,10 @@
import dataclasses
-from map.quest_map import MapEncounter, QuestMap, EncounterType, QuestPath
+from map.quest_map import MapEncounter, QuestMap, EncounterType, QuestPath, BattleEncounter
-from typing import List, Dict, Optional
+from typing import List, Optional
+
+from map.treasure_hoard import TreasureType, Treasure
_ENCOUNTER_ICONS = {
EncounterType.BATTLE_REGULAR: 'noun_Battle_3647629_cropped.png',
@@ -12,7 +14,7 @@ _ENCOUNTER_ICONS = {
EncounterType.TOWN_DOCKS: 'noun_Caravel_2421659_cropped.png',
EncounterType.TOWN_MARKET: 'noun_Store_786819_cropped.png',
EncounterType.TOWN_LIBRARY: 'noun_Library_3820590_cropped.png',
- EncounterType.TOWN_WORKSHOP: 'noun_cogs_442166_cropped.png',
+ EncounterType.TOWN_WORKSHOP: 'noun_Carving Tools_693475_cropped.png',
EncounterType.TOWN_TOWN_HALL: 'noun_brussels town hall_3284349_cropped.png',
EncounterType.TOWN_TEMPLE: 'noun_temple_2382601_cropped.png',
EncounterType.TOWN_REST: 'noun_Tent_3814999_cropped.png',
@@ -27,6 +29,20 @@ _PATH_ICONS = {
}
+_TREASURE_ICONS = {
+ TreasureType.GOLD: 'noun_coin_48892_cropped.png',
+ TreasureType.INK: 'noun_Ink_2509717_cropped.png',
+ TreasureType.COG: 'noun_cogs_442166_cropped.png',
+ TreasureType.DEED: 'noun_deed_3309438_cropped.png',
+ TreasureType.ART_OBJECT: 'noun_Art_3410337_cropped.png',
+ TreasureType.GEMS: 'noun_Diamond_3820185_cropped.png',
+ TreasureType.CONSUMABLE: 'noun_potion_34882_cropped.png',
+ TreasureType.NOBILITY_TITLE: 'noun_Crown_1936588_cropped.png',
+ TreasureType.LIFE: 'noun_life_3553107_cropped.png',
+ TreasureType.RELIC: 'noun_Ancient Egyptian religion_248077_cropped.png',
+}
+
+
@dataclasses.dataclass(frozen=True)
class RenderedElement:
description: str
@@ -35,6 +51,14 @@ class RenderedElement:
y: int
w: int
h: int
+ secondary: Optional['SecondaryRenderedElement'] = None
+
+
+@dataclasses.dataclass(frozen=True)
+class SecondaryRenderedElement(RenderedElement):
+ text: str = None
+ text_x: int = None
+ text_y: int = None
@dataclasses.dataclass(frozen=True)
@@ -73,34 +97,46 @@ def render_map(quest_map: QuestMap) -> RenderedMap:
return RenderedMap(rendered_encounters, rendered_paths)
+_LEFT = 20
+_TOP = 20
_ENCOUNTER_W = 40
_ENCOUNTER_H = 40
_ARROW_W = 40
_ARROW_H = 20
-_PADDING_W = 10
-_PADDING_V = 5
+_PADDING_W = 15
+_PADDING_V = 10
_ENCOUNTER_COLUMN_W = _ENCOUNTER_W + _PADDING_W
_PATH_COLUMN_W = _ARROW_W + _PADDING_W
_COLUMN_W = _ENCOUNTER_COLUMN_W + _PATH_COLUMN_W
_ROW_H = _ENCOUNTER_H + _PADDING_V + _ARROW_H + _PADDING_V
+_SECONDARY_W = 24
+_SECONDARY_H = 24
+_SECONDARY_PADDING = 6
+
def _render_encounter(r: int, c: int, encounter: MapEncounter) -> Optional[RenderedEncounter]:
if encounter.type == EncounterType.INACCESSIBLE:
return None
icon = f'map/{_ENCOUNTER_ICONS[encounter.type]}'
- x = _COLUMN_W * c
- y = _ROW_H * r
+ x = _LEFT + _COLUMN_W * c
+ y = _TOP + _ROW_H * r
w = _ENCOUNTER_W
h = _ENCOUNTER_H
+ if isinstance(encounter, BattleEncounter):
+ x -= (_SECONDARY_PADDING + _SECONDARY_W) / 2
+ secondary = _render_battle_encounter_secondary_info(encounter, x, y, w, h)
+ else:
+ secondary = None
return RenderedEncounter(
description=encounter.description,
src=icon,
x=x,
y=y,
w=w,
- h=h
+ h=h,
+ secondary=secondary
)
@@ -109,8 +145,8 @@ def _render_path(r: int, c: int, path: QuestPath) -> Optional[RenderedPath]:
return None
icon = f'map/{_PATH_ICONS[path]}'
- x = _ENCOUNTER_COLUMN_W * ((c + 1) // 2) + _PATH_COLUMN_W * (c // 2)
- y = (_ENCOUNTER_H + _PADDING_V) + _ROW_H * r
+ x = _LEFT + _ENCOUNTER_COLUMN_W * ((c + 1) // 2) + _PATH_COLUMN_W * (c // 2)
+ y = _TOP + (_ENCOUNTER_H + _PADDING_V) + _ROW_H * r
w = _ARROW_W
h = _ARROW_H
return RenderedPath(
@@ -119,5 +155,21 @@ def _render_path(r: int, c: int, path: QuestPath) -> Optional[RenderedPath]:
x=x,
y=y,
w=w,
- h=h
+ h=h,
+ )
+
+
+def _render_battle_encounter_secondary_info(encounter: BattleEncounter, x, y, w, h) -> Optional[RenderedElement]:
+ treasure: Treasure = encounter.treasure_hoard.revealed
+ return SecondaryRenderedElement(
+ description=encounter.treasure_hoard.description,
+ src = f'map/{_TREASURE_ICONS[treasure.treasure_type]}',
+ x=x + w + _SECONDARY_PADDING,
+ y=y,
+ w=_SECONDARY_W,
+ h=_SECONDARY_H,
+ secondary=None,
+ text=treasure.amount,
+ text_x=x + w + _SECONDARY_PADDING,
+ text_y=y + _SECONDARY_H
)
diff --git a/questhelper/map/static/map/noun_Ancient Egyptian religion_248077.png b/questhelper/map/static/map/noun_Ancient Egyptian religion_248077.png
new file mode 100644
index 0000000..c6e559c
Binary files /dev/null and b/questhelper/map/static/map/noun_Ancient Egyptian religion_248077.png differ
diff --git a/questhelper/map/static/map/noun_Ancient Egyptian religion_248077_cropped.png b/questhelper/map/static/map/noun_Ancient Egyptian religion_248077_cropped.png
new file mode 100644
index 0000000..a459a2c
Binary files /dev/null and b/questhelper/map/static/map/noun_Ancient Egyptian religion_248077_cropped.png differ
diff --git a/questhelper/map/static/map/noun_Art_3410337.png b/questhelper/map/static/map/noun_Art_3410337.png
new file mode 100644
index 0000000..849cfbc
Binary files /dev/null and b/questhelper/map/static/map/noun_Art_3410337.png differ
diff --git a/questhelper/map/static/map/noun_Art_3410337_cropped.png b/questhelper/map/static/map/noun_Art_3410337_cropped.png
new file mode 100644
index 0000000..5567938
Binary files /dev/null and b/questhelper/map/static/map/noun_Art_3410337_cropped.png differ
diff --git a/questhelper/map/static/map/noun_Carving Tools_693475.png b/questhelper/map/static/map/noun_Carving Tools_693475.png
new file mode 100644
index 0000000..bd37aa5
Binary files /dev/null and b/questhelper/map/static/map/noun_Carving Tools_693475.png differ
diff --git a/questhelper/map/static/map/noun_Carving Tools_693475_cropped.png b/questhelper/map/static/map/noun_Carving Tools_693475_cropped.png
new file mode 100644
index 0000000..1efe134
Binary files /dev/null and b/questhelper/map/static/map/noun_Carving Tools_693475_cropped.png differ
diff --git a/questhelper/map/static/map/noun_Crown_1936588.png b/questhelper/map/static/map/noun_Crown_1936588.png
new file mode 100644
index 0000000..00ccbc0
Binary files /dev/null and b/questhelper/map/static/map/noun_Crown_1936588.png differ
diff --git a/questhelper/map/static/map/noun_Crown_1936588_cropped.png b/questhelper/map/static/map/noun_Crown_1936588_cropped.png
new file mode 100644
index 0000000..3ea5973
Binary files /dev/null and b/questhelper/map/static/map/noun_Crown_1936588_cropped.png differ
diff --git a/questhelper/map/static/map/noun_Diamond_3820185.png b/questhelper/map/static/map/noun_Diamond_3820185.png
new file mode 100644
index 0000000..d48bdaf
Binary files /dev/null and b/questhelper/map/static/map/noun_Diamond_3820185.png differ
diff --git a/questhelper/map/static/map/noun_Diamond_3820185_cropped.png b/questhelper/map/static/map/noun_Diamond_3820185_cropped.png
new file mode 100644
index 0000000..fba6d96
Binary files /dev/null and b/questhelper/map/static/map/noun_Diamond_3820185_cropped.png differ
diff --git a/questhelper/map/static/map/noun_Ink_2509717.png b/questhelper/map/static/map/noun_Ink_2509717.png
new file mode 100644
index 0000000..4646f6e
Binary files /dev/null and b/questhelper/map/static/map/noun_Ink_2509717.png differ
diff --git a/questhelper/map/static/map/noun_Ink_2509717_cropped.png b/questhelper/map/static/map/noun_Ink_2509717_cropped.png
new file mode 100644
index 0000000..01a5687
Binary files /dev/null and b/questhelper/map/static/map/noun_Ink_2509717_cropped.png differ
diff --git a/questhelper/map/static/map/noun_coin_48892.png b/questhelper/map/static/map/noun_coin_48892.png
new file mode 100644
index 0000000..7c226d3
Binary files /dev/null and b/questhelper/map/static/map/noun_coin_48892.png differ
diff --git a/questhelper/map/static/map/noun_coin_48892_cropped.png b/questhelper/map/static/map/noun_coin_48892_cropped.png
new file mode 100644
index 0000000..e14dfc6
Binary files /dev/null and b/questhelper/map/static/map/noun_coin_48892_cropped.png differ
diff --git a/questhelper/map/static/map/noun_deed_3309438.png b/questhelper/map/static/map/noun_deed_3309438.png
new file mode 100644
index 0000000..f2d3a14
Binary files /dev/null and b/questhelper/map/static/map/noun_deed_3309438.png differ
diff --git a/questhelper/map/static/map/noun_deed_3309438_cropped.png b/questhelper/map/static/map/noun_deed_3309438_cropped.png
new file mode 100644
index 0000000..6a6a649
Binary files /dev/null and b/questhelper/map/static/map/noun_deed_3309438_cropped.png differ
diff --git a/questhelper/map/static/map/noun_life_3553107.png b/questhelper/map/static/map/noun_life_3553107.png
new file mode 100644
index 0000000..1097367
Binary files /dev/null and b/questhelper/map/static/map/noun_life_3553107.png differ
diff --git a/questhelper/map/static/map/noun_life_3553107_cropped.png b/questhelper/map/static/map/noun_life_3553107_cropped.png
new file mode 100644
index 0000000..e2fe13a
Binary files /dev/null and b/questhelper/map/static/map/noun_life_3553107_cropped.png differ
diff --git a/questhelper/map/static/map/noun_potion_34882.png b/questhelper/map/static/map/noun_potion_34882.png
new file mode 100644
index 0000000..11cd1d8
Binary files /dev/null and b/questhelper/map/static/map/noun_potion_34882.png differ
diff --git a/questhelper/map/static/map/noun_potion_34882_cropped.png b/questhelper/map/static/map/noun_potion_34882_cropped.png
new file mode 100644
index 0000000..2ca4b0b
Binary files /dev/null and b/questhelper/map/static/map/noun_potion_34882_cropped.png differ
diff --git a/questhelper/map/templates/map/index.html b/questhelper/map/templates/map/index.html
index 0ed830f..45a5690 100644
--- a/questhelper/map/templates/map/index.html
+++ b/questhelper/map/templates/map/index.html
@@ -11,6 +11,19 @@
style="position: absolute; left: {{e.x}}; top: {{e.y}};"
width="{{e.w}}"
height="{{e.h}}">
+ {% if e.secondary %}
+ {% with s=e.secondary %}
+
+