game_data.gno
18.98 Kb · 313 lines
1// GnoMoji — Main Game Realm
2// gno.land/r/g138gdmwj6heduu3st796lw6qqdwylgaxf7ty5gz/game27
3//
4// On-chain game engine for GnoMoji on Gno.land (v1.5.0 / Onyx testnet API).
5
6package game27
7
8import (
9 "gno.land/p/nt/avl/v0"
10)
11
12// ── State ────────────────────────────────────────────────────────────────────
13
14var (
15 admin address
16 minterAddr address // authorized minter realm (minter5) — set via SetMinter
17 pendingMints avl.Tree // addr+":"+coinId → amount string
18 balances avl.Tree // addr+":"+coinId → amount string
19 veinSupply avl.Tree // coinId → "remaining:max"
20 casinoRounds avl.Tree // roundId → JSON string
21 pvpLobbies avl.Tree // lobbyId → JSON string
22 pvpWagers avl.Tree // lobbyId → "coinId:amount:creator:challenger" (challenger="" until joined)
23 ownedTools avl.Tree // addr → comma-separated tool IDs
24 toolLife avl.Tree // addr+":"+toolId → remaining life string
25 lifetimeMined avl.Tree // addr+":"+coinId → total mined string
26 achievements avl.Tree // addr+":"+achId → "1"
27 dailyCheckins avl.Tree // addr → unix seconds string
28 skillRanks avl.Tree // addr+":"+skillId → rank string
29 miners avl.Tree // addr → total mined all-time string
30 lastClaim avl.Tree // addr → unix timestamp of last ClaimMine/ClaimAndMint (velocity limit)
31 blacklist avl.Tree // addr → "reason:timestamp"
32 banExpiries avl.Tree // addr → unix expiry (0 = permanent)
33 guilds avl.Tree // guildId → JSON{name, leader, memberCount, createdAt}
34 guildMembers avl.Tree // guildId+":"+addr → "1"
35 playerGuild avl.Tree // addr → guildId
36 gnomePasses avl.Tree // addr → unix expiry timestamp string (0 = never set, >0 = active until)
37 paused bool
38)
39
40// ── Cost Tables ───────────────────────────────────────────────────────────────
41
42// toolCosts maps toolId → slice of [coinId, amount] pairs.
43// Copied from catalog.ts TOOLS array. Amounts are for qty=1.
44// Phase 5: expanded tool costs — each tool requires more ingredient types at higher tiers.
45// Matches catalog.ts TOOLS array exactly.
46var toolCosts = map[string][][2]string{
47 "twig": {
48 {"grin", "120"}, {"joy", "75"}, {"cool", "60"},
49 },
50 "wood": {
51 {"seedling", "180"}, {"leaves", "150"}, {"fallen", "120"}, {"think", "105"}, {"sleep", "90"}, {"party", "75"},
52 },
53 "stone": {
54 {"rock", "600"}, {"log", "540"}, {"evergreen", "480"}, {"brick", "420"}, {"mushroom", "360"}, {"heart", "300"},
55 {"deciduous", "240"}, {"cactus", "180"},
56 },
57 "iron": {
58 {"gear", "840"}, {"chains", "780"}, {"wrench", "720"}, {"hammer", "660"}, {"anchor", "630"}, {"pick", "570"},
59 {"nut", "400"}, {"saw", "200"}, {"hammer-wrench", "300"}, {"axe", "60"},
60 },
61 "gold": {
62 {"gold-medal", "1140"}, {"crown", "1080"}, {"trophy", "1020"}, {"money-bag", "960"}, {"bolt", "930"}, {"sword", "870"},
63 {"old-key", "80"}, {"scale", "60"}, {"bullseye", "200"}, {"mahjong", "50"}, {"slots", "20"}, {"joker", "15"},
64 },
65 "diamond": {
66 {"gem", "1560"}, {"coin", "1440"}, {"ring", "1380"}, {"disco", "1320"}, {"kite", "1260"}, {"dodo", "1140"},
67 {"scope", "25"}, {"telescope", "40"}, {"tube", "60"}, {"dish", "50"},
68 {"lock", "300"}, {"key-lock", "200"},
69 {"eight", "150"}, {"puzzle", "200"},
70 },
71 "cosmic": {
72 {"galaxy", "1950"}, {"moai", "1860"}, {"hamsa", "1800"}, {"mirror", "1740"}, {"atom", "1650"}, {"ufo", "1500"},
73 {"shooting", "15"}, {"rex", "20"}, {"mammoth", "25"}, {"new-face", "20"},
74 {"cyclone", "40"}, {"tornado", "50"},
75 {"sat", "60"}, {"castle", "80"}, {"liberty", "100"}, {"kaaba", "10"},
76 },
77 "plasma": {
78 {"galaxy", "2250"}, {"atom", "2100"}, {"moai", "2100"}, {"comet", "1950"}, {"jelly", "1800"}, {"peacock", "1800"},
79 {"om", "8"}, {"yin", "10"}, {"ophiuchus", "12"}, {"fleur", "15"}, {"trident", "15"},
80 {"radioactive", "40"}, {"biohazard", "40"},
81 {"castle-jp", "60"},
82 {"sun-face", "20"}, {"dragon-face", "25"}, {"sauropod", "30"}, {"moon-word", "80"},
83 },
84 "neutron": {
85 {"jelly", "2850"}, {"peacock", "2700"}, {"unicorn", "2550"}, {"galaxy", "2400"}, {"hamsa", "2400"}, {"dna", "2100"},
86 {"genie", "8"}, {"heart-organ", "40"}, {"mage", "50"}, {"monarch", "60"},
87 {"ninja", "40"}, {"brain", "30"}, {"lotus-sit", "40"},
88 {"lion", "60"}, {"tiger", "80"}, {"eagle", "80"}, {"wolf", "100"}, {"shark", "120"},
89 },
90 "quasar": {
91 {"unicorn", "3450"}, {"peacock", "3300"}, {"jelly", "3300"}, {"lotus", "2550"}, {"galaxy", "2850"}, {"dragon", "2550"},
92 {"fireworks", "30"}, {"medal", "25"}, {"sports-medal", "40"}, {"silver-medal", "50"}, {"bronze-medal", "60"},
93 {"tower", "80"}, {"hot-spring", "100"}, {"pirate", "60"},
94 {"fairy", "80"}, {"vampire", "80"},
95 {"heli", "40"}, {"bullet", "50"}, {"race", "80"},
96 },
97 "void": {
98 {"lotus", "3600"}, {"unicorn", "4350"}, {"dragon", "4200"}, {"peacock", "4350"}, {"jelly", "4500"}, {"galaxy", "1500"},
99 {"om", "15"}, {"yin", "15"}, {"trident", "20"}, {"fleur", "20"}, {"ophiuchus", "18"},
100 {"shooting", "25"}, {"sun-face", "30"}, {"dragon-face", "40"}, {"rex", "35"}, {"sauropod", "40"},
101 {"mammoth", "45"}, {"new-face", "35"},
102 {"kaaba", "18"},
103 {"witness", "12"}, {"genie", "12"},
104 },
105 "genesis": {
106 {"lotus", "5400"}, {"dragon", "5400"}, {"unicorn", "5250"}, {"peacock", "4950"}, {"jelly", "4800"}, {"infinity", "4200"},
107 {"genie", "12"}, {"witness", "15"},
108 {"sun-face", "40"}, {"shooting", "30"}, {"dragon-face", "50"},
109 {"om", "20"}, {"yin", "20"}, {"trident", "25"}, {"fleur", "25"},
110 {"kaaba", "20"},
111 {"rex", "40"}, {"sauropod", "45"}, {"mammoth", "50"},
112 {"new-face", "40"},
113 {"lion", "80"}, {"shark", "150"},
114 },
115 "omega": {
116 {"lotus", "6900"}, {"dragon", "6600"}, {"unicorn", "6300"}, {"peacock", "6000"}, {"jelly", "6000"}, {"infinity", "5700"},
117 {"genie", "18"},
118 {"witness", "20"},
119 {"sun-face", "50"},
120 {"shooting", "40"},
121 {"dragon-face", "60"},
122 {"om", "25"},
123 {"yin", "25"},
124 {"trident", "30"},
125 {"fleur", "30"},
126 {"ophiuchus", "25"},
127 {"kaaba", "25"},
128 {"rex", "50"},
129 {"sauropod", "55"},
130 {"mammoth", "60"},
131 {"new-face", "50"},
132 {"mage", "80"},
133 {"heart-organ", "60"},
134 {"sat", "100"},
135 },
136}
137
138// skillBaseCosts maps skillId → base cost at rank 0.
139// Actual cost at rank N = base × 2^N (doubles per rank).
140var skillBaseCosts = map[string][][2]string{
141 // STRIKE branch
142 "wrist": {{"grin", "80"}, {"joy", "20"}},
143 "palm_strike": {{"cool", "60"}, {"think", "40"}},
144 "follow": {{"fire", "40"}, {"up", "40"}},
145 "knuckle_wrap": {{"rock", "45"}, {"log", "40"}},
146 "heavy_swing": {{"brick", "35"}, {"evergreen", "30"}},
147 "stone_breaker": {{"rock", "70"}, {"hammer", "25"}, {"gear", "20"}},
148 "anvil_force": {{"chains", "35"}, {"wrench", "30"}, {"brick", "60"}},
149 "point_drive": {{"pick", "35"}, {"gear", "40"}, {"log", "90"}},
150 "kinetic_thrust": {{"rocket", "20"}, {"bolt", "12"}, {"fire", "70"}},
151 "crushing_blow": {{"crown", "10"}, {"trophy", "12"}, {"hammer", "45"}, {"bolt", "15"}},
152 "shatter_spike": {{"sword", "18"}, {"pick", "45"}, {"chains", "45"}, {"gold-medal", "12"}},
153 "ironclad_cleave": {{"anchor", "40"}, {"gear", "60"}, {"wrench", "50"}, {"money-bag", "15"}},
154 "thunder_jab": {{"bolt", "25"}, {"rocket", "30"}, {"fire", "120"}, {"wand", "15"}},
155 "titan_hammer": {{"gem", "14"}, {"coin", "18"}, {"crown", "22"}, {"trophy", "22"}, {"sword", "28"}},
156 "diamond_cleave": {{"gem", "20"}, {"ring", "12"}, {"disco", "15"}, {"pick", "70"}, {"gold-medal", "24"}},
157 "hyper_drive": {{"kite", "15"}, {"dodo", "12"}, {"bolt", "35"}, {"rocket", "45"}, {"gear", "70"}},
158 "quasar_impact": {{"galaxy", "18"}, {"moai", "18"}, {"atom", "20"}, {"ufo", "16"}, {"comet", "18"}},
159 "black_hole_crush": {{"galaxy", "30"}, {"atom", "28"}, {"moai", "24"}, {"gem", "35"}, {"ring", "28"}, {"comet", "22"}},
160 "mythic_annihilation": {{"dragon", "8"}, {"unicorn", "10"}, {"jelly", "12"}, {"peacock", "12"}, {"galaxy", "35"}, {"moai", "30"}},
161 "singularity_fist": {{"infinity", "6"}, {"lotus", "8"}, {"dragon", "10"}, {"unicorn", "12"}, {"jelly", "14"}, {"galaxy", "40"}},
162 // FORTUNE branch
163 "fortune": {{"clover", "16"}, {"heart", "40"}},
164 "four_leaf": {{"seedling", "60"}, {"leaves", "50"}},
165 "edge": {{"pizza", "20"}, {"spark", "30"}},
166 "glint": {{"spark", "50"}, {"star", "12"}},
167 "spark_chaser": {{"fire", "45"}, {"tada", "25"}},
168 "razor_focus": {{"coffee", "25"}, {"game", "25"}, {"hundred", "30"}},
169 "precision_cut": {{"eyes", "40"}, {"skull", "35"}, {"flutter", "18"}},
170 "aurora_gaze": {{"rainbow", "15"}, {"spark", "60"}, {"moon", "20"}},
171 "starlight_gleam": {{"star", "25"}, {"clover", "20"}, {"heart", "80"}},
172 "double_haul": {{"gear", "30"}, {"anchor", "20"}, {"up", "70"}},
173 "twin_strike": {{"chains", "25"}, {"wrench", "25"}, {"pick", "20"}},
174 "executioner": {{"skull", "60"}, {"sword", "18"}, {"crown", "10"}, {"orb", "8"}},
175 "celestial_sight": {{"planet", "10"}, {"moon", "30"}, {"star", "30"}, {"bead", "8"}},
176 "helix_harmony": {{"dna", "12"}, {"spark", "80"}, {"rainbow", "25"}, {"orb", "10"}},
177 "fortune_split": {{"money-bag", "15"}, {"gold-medal", "12"}, {"clover", "35"}, {"chains", "40"}},
178 "critical_surge": {{"gem", "15"}, {"disco", "14"}, {"ring", "12"}, {"orb", "20"}, {"planet", "18"}},
179 "astral_scintillation": {{"ring", "14"}, {"gem", "16"}, {"dna", "20"}, {"star", "60"}, {"moon", "50"}},
180 "plunder_frenzy": {{"coin", "25"}, {"money-bag", "30"}, {"gem", "12"}, {"crown", "25"}, {"trophy", "25"}},
181 "singularity_edge": {{"lotus", "6"}, {"dragon", "8"}, {"galaxy", "25"}, {"hamsa", "20"}, {"atom", "22"}, {"mirror", "20"}},
182 "cosmic_fortune": {{"peacock", "10"}, {"unicorn", "8"}, {"comet", "25"}, {"disco", "30"}, {"galaxy", "30"}, {"gem", "35"}},
183 // POCKET branch
184 "dustbag": {{"grin", "200"}, {"sleep", "40"}},
185 "rhythm": {{"music", "16"}, {"clap", "30"}},
186 "pocket_expansion": {{"fallen", "45"}, {"herb", "35"}},
187 "steady_tempo": {{"party", "40"}, {"wow", "30"}},
188 "cadence": {{"music", "30"}, {"coffee", "20"}, {"clap", "50"}},
189 "deep_pouch": {{"log", "70"}, {"rock", "60"}, {"mushroom", "35"}},
190 "vein_resonator": {{"flutter", "20"}, {"rainbow", "15"}, {"tada", "40"}},
191 "cart_bed": {{"log", "120"}, {"rock", "100"}, {"brick", "80"}, {"money-bag", "10"}},
192 "bounty_overflow": {{"trophy", "15"}, {"crown", "12"}, {"pick", "45"}, {"game", "35"}},
193 "fracture_pulse": {{"bolt", "25"}, {"wand", "15"}, {"hammer", "50"}, {"rocket", "25"}},
194 "metro_pulse": {{"music", "45"}, {"coffee", "35"}, {"raise", "30"}, {"bolt", "15"}},
195 "hoarders_tote": {{"coin", "22"}, {"gem", "10"}, {"money-bag", "35"}, {"rock", "150"}, {"log", "150"}},
196 "shatter_strike": {{"gem", "14"}, {"bolt", "35"}, {"wand", "25"}, {"sword", "30"}, {"hammer", "60"}},
197 "super_conductor": {{"coin", "20"}, {"ring", "12"}, {"music", "60"}, {"bolt", "30"}, {"coffee", "50"}},
198 "dodo_instinct": {{"dodo", "14"}, {"kite", "14"}, {"crown", "22"}, {"trophy", "22"}, {"eyes", "80"}},
199 "void_rend": {{"infinity", "6"}, {"jelly", "12"}, {"dragon", "8"}, {"atom", "30"}, {"comet", "25"}, {"bolt", "60"}},
200 "celestial_duplication": {{"infinity", "5"}, {"lotus", "6"}, {"dragon", "8"}, {"peacock", "10"}, {"coin", "40"}, {"gem", "35"}},
201 "eternity_flow": {{"infinity", "5"}, {"lotus", "6"}, {"peacock", "8"}, {"hamsa", "25"}, {"mirror", "25"}, {"music", "100"}},
202 "abyssal_reserve": {{"unicorn", "6"}, {"jelly", "10"}, {"moai", "25"}, {"ufo", "25"}, {"money-bag", "50"}, {"rock", "300"}},
203 "singularity_snap": {{"infinity", "8"}, {"lotus", "8"}, {"dragon", "10"}, {"galaxy", "40"}, {"moai", "30"}, {"bolt", "80"}},
204
205 // ── Phase 5: Nature branch (level 20) ────────────────────────────────────
206 "deep_root": {{"bear", "60"}, {"fox", "40"}},
207 "stone_sense": {{"turtle", "30"}, {"coral", "15"}},
208 "bloom_tide": {{"sakura", "20"}, {"bee", "50"}, {"deciduous", "80"}},
209 "thorn_hide": {{"boar", "40"}, {"snake", "30"}, {"scorpion", "20"}},
210 "old_growth": {{"elephant", "25"}, {"gorilla", "20"}, {"whale-spout", "15"}},
211 "storm_surge": {{"storm", "25"}, {"lightning-cloud", "20"}, {"tornado", "15"}},
212 "predator_sense": {{"tiger", "20"}, {"lion", "20"}, {"wolf", "20"}, {"eagle", "15"}},
213 "world_tree": {{"rex", "12"}, {"mammoth", "10"}, {"dragon-face", "8"}, {"shooting", "8"}},
214
215 // ── Phase 5: Food branch (level 30) ──────────────────────────────────────
216 "hot_meal": {{"ramen", "50"}, {"stew", "40"}},
217 "sugar_rush": {{"candy", "60"}, {"cupcake", "40"}, {"donut", "30"}},
218 "second_wind": {{"burger", "50"}, {"bacon", "40"}, {"cheese", "30"}},
219 "caffeinated": {{"boba", "40"}, {"tea", "30"}, {"sake", "25"}},
220 "feast_mode": {{"sushi", "30"}, {"curry", "40"}, {"pasta", "40"}, {"paella", "25"}},
221 "night_shift": {{"honey", "30"}, {"pie", "25"}, {"cake", "20"}},
222 "brew_mastery": {{"beer", "40"}, {"wine", "30"}, {"cocktail", "20"}, {"champagne", "15"}},
223 "mythic_feast": {{"tropical-drink", "20"}, {"cheers", "15"}, {"toast", "12"}, {"mate", "12"}},
224
225 // ── Phase 5: People branch (level 40) ────────────────────────────────────
226 "mentor": {{"baby", "60"}, {"child", "50"}},
227 "crowd_favor": {{"clap", "80"}, {"heart-hands", "60"}},
228 "team_spirit": {{"shake", "40"}, {"pray", "30"}, {"hug-pair", "30"}},
229 "athlete_heart": {{"surf", "30"}, {"swim", "30"}, {"run", "40"}, {"lift", "25"}},
230 "warrior_code": {{"ninja", "20"}, {"fencer", "15"}, {"juggle", "15"}},
231 "elder_wisdom": {{"monarch", "15"}, {"mage", "15"}, {"fairy", "12"}},
232 "hero_legend": {{"hero", "12"}, {"vampire", "10"}, {"merfolk", "10"}},
233 "genie_wish": {{"genie", "8"}, {"heart-organ", "12"}},
234
235 // ── Phase 5: Things branch (level 50) ────────────────────────────────────
236 "tempered_grip": {{"gloves", "80"}, {"hammer", "60"}},
237 "field_repair": {{"hammer-wrench", "40"}, {"saw", "30"}, {"nut", "50"}},
238 "master_craft": {{"wrench", "60"}, {"driver", "50"}, {"clamp", "30"}},
239 "workshop_lore": {{"toolbox", "30"}, {"abacus", "25"}, {"scroll", "20"}},
240 "iron_discipline": {{"axe", "30"}, {"dagger", "20"}, {"bow", "15"}},
241 "vault_keeper": {{"lock", "40"}, {"key-lock", "30"}, {"old-key", "15"}},
242 "precision_forge": {{"scope", "20"}, {"telescope", "15"}, {"tube", "18"}, {"dish", "15"}},
243 "deep_science": {{"alembic", "12"}, {"shield", "15"}, {"hammer-pick", "15"}, {"scale", "12"}},
244
245 // ── Phase 5: Travel branch (level 65) ────────────────────────────────────
246 "long_haul": {{"car", "80"}, {"bus", "60"}},
247 "vein_compass": {{"plane", "50"}, {"sail", "30"}},
248 "nomad_pace": {{"moto", "40"}, {"cycle", "50"}, {"scooter", "40"}},
249 "deep_sea": {{"ship", "30"}, {"whale-spout", "15"}, {"dolphin", "25"}},
250 "sky_route": {{"rocket", "30"}, {"heli", "20"}, {"depart", "20"}},
251 "monument_seal": {{"tower", "20"}, {"castle", "15"}, {"liberty", "12"}},
252 "orbital_drift": {{"sat", "15"}, {"castle-jp", "12"}},
253 "sacred_ground": {{"kaaba", "8"}, {"shrine", "10"}, {"temple", "10"}, {"mosque", "10"}},
254
255 // ── Phase 5: Signs branch (level 80) ─────────────────────────────────────
256 "amplify": {{"sparkle", "80"}, {"eight-star", "60"}},
257 "resonance": {{"recycle", "60"}, {"medical", "50"}},
258 "sigil_power": {{"worship", "40"}, {"peace-sign", "30"}},
259 "zodiac_edge": {{"aries", "20"}, {"taurus", "20"}, {"gemini", "20"}, {"cancer", "15"}},
260 "star_david": {{"star-david", "15"}, {"dharma", "15"}, {"cross", "15"}, {"menorah", "12"}},
261 "hazard_forge": {{"radioactive", "12"}, {"biohazard", "12"}},
262 "cosmic_sigil": {{"trident", "10"}, {"fleur", "10"}, {"ophiuchus", "8"}},
263 "infinite_mark": {{"om", "8"}, {"yin", "8"}, {"witness", "6"}},
264}
265
266// skillMaxRanks maps skillId → maximum rank allowed.
267// Most skills cap at 3 or 4 — see catalog.ts SKILLS[*].max.
268var skillMaxRanks = map[string]uint64{
269 // Strike branch
270 "wrist": 5, "palm_strike": 4, "follow": 3, "knuckle_wrap": 4, "heavy_swing": 4,
271 "stone_breaker": 4, "anvil_force": 4, "point_drive": 4, "kinetic_thrust": 4,
272 "crushing_blow": 4, "shatter_spike": 4, "ironclad_cleave": 3, "thunder_jab": 3,
273 "titan_hammer": 3, "diamond_cleave": 3, "hyper_drive": 3, "quasar_impact": 3,
274 "black_hole_crush": 3, "mythic_annihilation": 3, "singularity_fist": 3,
275 // Fortune branch
276 "fortune": 4, "four_leaf": 3, "edge": 3, "glint": 3, "spark_chaser": 3,
277 "razor_focus": 3, "precision_cut": 3, "aurora_gaze": 3, "starlight_gleam": 3,
278 "double_haul": 3, "twin_strike": 3, "executioner": 3, "celestial_sight": 3,
279 "helix_harmony": 3, "fortune_split": 3, "critical_surge": 3,
280 "astral_scintillation": 3, "plunder_frenzy": 3, "singularity_edge": 3, "cosmic_fortune": 3,
281 // Pocket branch
282 "dustbag": 3, "rhythm": 3, "pocket_expansion": 3, "steady_tempo": 3, "cadence": 3,
283 "deep_pouch": 3, "vein_resonator": 3, "cart_bed": 3, "bounty_overflow": 3,
284 "fracture_pulse": 3, "metro_pulse": 3, "hoarders_tote": 3, "shatter_strike": 3,
285 "super_conductor": 3, "dodo_instinct": 3, "void_rend": 3, "celestial_duplication": 3,
286 "eternity_flow": 3, "abyssal_reserve": 3, "singularity_snap": 3,
287 // Phase 5 — Nature branch (unlocks level 20)
288 "deep_root": 3, "stone_sense": 3, "bloom_tide": 3, "thorn_hide": 3,
289 "old_growth": 3, "storm_surge": 3, "predator_sense": 3, "world_tree": 3,
290 // Phase 5 — Food branch (unlocks level 30)
291 "hot_meal": 3, "sugar_rush": 3, "second_wind": 3, "caffeinated": 3,
292 "feast_mode": 3, "night_shift": 3, "brew_mastery": 3, "mythic_feast": 3,
293 // Phase 5 — People branch (unlocks level 40)
294 "mentor": 3, "crowd_favor": 3, "team_spirit": 3, "athlete_heart": 3,
295 "warrior_code": 3, "elder_wisdom": 3, "hero_legend": 3, "genie_wish": 3,
296 // Phase 5 — Things branch (unlocks level 50)
297 "tempered_grip": 3, "field_repair": 3, "master_craft": 3, "workshop_lore": 3,
298 "iron_discipline": 3, "vault_keeper": 3, "precision_forge": 3, "deep_science": 3,
299 // Phase 5 — Travel branch (unlocks level 65)
300 "long_haul": 3, "vein_compass": 3, "nomad_pace": 3, "deep_sea": 3,
301 "sky_route": 3, "monument_seal": 3, "orbital_drift": 3, "sacred_ground": 3,
302 // Phase 5 — Signs branch (unlocks level 80)
303 "amplify": 3, "resonance": 3, "sigil_power": 3, "zodiac_edge": 3,
304 "star_david": 3, "hazard_forge": 3, "cosmic_sigil": 3, "infinite_mark": 3,
305}
306
307// toolMaxLife maps toolId → maximum durability (from catalog.ts tool.life).
308// Tools with life=0 are indestructible (hands, twig).
309var toolMaxLife = map[string]uint64{
310 "hands": 0, "twig": 0, "wood": 1200, "stone": 2500, "iron": 4000,
311 "gold": 6000, "diamond": 8000, "cosmic": 10000, "plasma": 10000,
312 "neutron": 10000, "quasar": 10000, "void": 12000, "genesis": 15000, "omega": 25000,
313}