part 34
The helmet that grows: the icon of the game from one source and 21 forms by reputation in Asgard
The icon of Audamir is a Viking helmet in front of a board, half square grid and half hexagonal. One tool draws it in every form: 21 forms for each five points of reputation, six titles, a fixed app icon and a cost of about 32 KB.
On 1 November 2026 the game Audamir (until 31 October Auda Wars) got an icon: a Viking helmet in front of the playing board, half of which is a square grid and half a hexagonal grid. The tool tools/icon-audamir.js draws it from one geometry. The helmet in the header of the home screen grows with the reputation in Asgard: a new form every 5 points up to 100, 21 forms in all. The app icon, that is the browser tab and the installation, stays fixed.
While this article was written, it was found that six drawings of the first proposal did not change by a single byte, and that the helmets on the page hide a trap with <use>. Titles to choose from and epithets after the name are not built yet.
The brief
The game was to have its own icon in SVG: a Viking helmet on the board that grows with the reputation (point 3 of the twelve points, docs/HOME-FINAL.md, 31 October 2026). The proposal had six forms, thresholds 5, 15, 30, 50 and 80 on the sum of the levels of the realms (D3), horns from the fourth form (D4), and a fixed app icon (D5).
On 1 November all thirteen recommendations (D1 to D13) were approved. A sentence was added to the first point, and it changed the plan: "I want an icon every fifth level, so I need to generate more of them, and this is a very well made script." The script from the mockup (docs/mockups/audamir-icon/make.js) stopped being a one-off.
One tool, four modes
The tool has 626 lines and no dependency. The drawing is in it once: the board, the helmet and the table LADDER, which says for each form what it adds to the one before. The name of the game is taken from js/data/meta.js, the number of forms and the points from js/data/hero-forms.js. It knows neither the player nor the profile.
There are four modes: full (a tile with the board), small (for 16 to 32 px: no grid, a thick outline), mono (an outline in one colour, for print) and maskable (colour to the edge, the helmet in the middle 80 %). A number that is not a form is an error: checkForm throws a RangeError, and the command ends with code 1 before it writes anything.
The PNG files are drawn by a browser. ImageMagick on this machine ignores clipping paths and CSS variables, so the tool opens a page that draws a flat copy of each icon into a canvas and sends the PNG back. The PNG files are in the repository, so building and the tests need no browser.
The app icon is fixed: form 7
Decision D5 makes the app icon fixed: form 7 of 21, the Champion (reputation 30). Originally it was form 4 of the six. The files of the browser tab, the manifest and the touch icon have no profile from which they could read a form. The header and the screen Your hero show the player's own form; the editor of free play stays with the Champion.
The manifest has two purposes, as two files: the original entry "any maskable" pointed to one SVG, while Chrome asks for PNG files of 192 and 512 px. While this article was written, ten files in icons/ were compared with the state after step H1 by SHA-256, and all are the same. Three SVG files still carry the old text "Form 4 of 6" in <desc>, because the generator keeps it as a constant (DESIGN §118.2).
21 forms and six titles
The reputation in Asgard is the sum of the levels of the realms in which the player played. It is not stored anywhere; nothing is paid for it and nothing is unlocked by it. The form is floor(points / 5) + 1, at most 21. While writing, the edges were tested: 0 to 4 give form 1, 5 gives form 2, 32 gives form 7, 99 gives form 20, 100 and 120 give form 21; a negative number, text, NaN and null give form 1.
Each form is the one before with one more detail, and adds a little gold. Six titles start at the first form of their threshold:
| Title | From points | What the first form adds |
|---|---|---|
| Wanderer | 0 | an iron cap on the brow band |
| Raider | 5 | nasal and cheek plates |
| Warrior of the hird | 15 | ribs and rivets |
| Champion | 30 | full horns: the icon of the game |
| Jarl | 50 | horns with gold tips |
| Hero of Asgard | 80 | three sparks |
From 6 November the gold fittings were replaced by jewels and the colour of the tier; that is in the article on the tiers above 100 (forthcoming article no. 57). The picture shows the state of 1 November, when the last helmet was still gold.
A title is not glued on; it is the text core.hero.titled_name ({title} {name}), so the order depends on the language: "Champion Auda" in English. The title of a form is masculine in Slovak, Czech, Serbian and Russian, regardless of the player's gender (DESIGN §120.5); this can be solved when the choice of titles is made. Each threshold is the first point of some form, so one form never shows two titles.
Under the slogan there is a chip "Reputation in Asgard" with a number. It shows only the number, not the levels of the realms (the answer of 1 November, point 2); the levels are on the realm panels. The core of the game does not know the names of the realms; the name is added by reputationFace() in app.js from the manifest.
Why the cap is 100
A level n starts at 25 × n² XP; level 30, for example, at 22,500 XP. At 300 XP an hour of a won game (the model in R3-REALM-ECONOMY §1.9), the sum R takes R²/12 hours in one realm and R²/24 hours in two equally played ones. The thresholds 5, 15, 30, 50 and 80 come from the proposal (D3); the last form at 100 points comes from the same formula. This is a model, not a measurement of people. According to the document, Colony against a strong AI gives about 590 XP an hour, so the reputation of a Rokgard player grows faster.
Header, bytes and the <use> trap
The header carries a list of 21 helmets (<svg class="ad-sprites">), and the icon is the board plus <use href="#adf7">. Changing the form is two attributes, data-form and href, which Hub.paintReputation writes. Because of this, index.html grew by 31,946 bytes (about 32 KB; 1.1 KB after gzip). If each form carried a full icon with the board, it would be 169 KB.
The trap: <use> draws a clone of the element it points to, and the selector .ad-icon .s1 must find its ancestor inside the clone. So each helmet in the list and the board carry the class ad-icon themselves (DESIGN §118.3). Without this fix, the list came out black.
What follows from this
- A tool that draws is cheaper than its outputs: a change of taste is one edit in
LADDERand two commands (--page,--sheet). - "Byte for byte the same" has to be proved with hashes of the old drawing, not with a feeling: 24 of 24 hashes match.
What could not be verified
- Titles to choose from and epithets after the name (H8) are not built; the code has no field for a hero's epithet.
- The taste of most forms is not approved. Six forms come from the proposal; the remaining fifteen were drawn by step H2. DESIGN §118.2 says that if the taste does not fit, it is one commit.
- Readability was not measured on people. Whether neighbouring forms can be told apart at 24 px was not judged by anyone.
- The icon in the browser tab, installation on a phone, the touch icon on iOS and the offline service worker have not been verified yet.
Sources
docs/HOME-FINAL.md (point 3, D1 to D13 and the answers of 1 November 2026), docs/DESIGN.md §117 to §120, docs/R3-REALM-ECONOMY.md §1.9. The code is in the repository of the game (tools/icon-audamir.js, js/data/hero-forms.js, version 0.81.2, checked 1 November 2026).
Related articles: From Hero Dice to Avatar (forthcoming article no. 38), A move that must change nothing, From one game, more games, What the game is called.