You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: app/js/i18n/en.js
+9-1Lines changed: 9 additions & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -167,6 +167,14 @@ var LangEN = {
167
167
stat_for: 'Fortune',
168
168
169
169
// Hunt
170
+
hunt_rest_title: 'Rest at camp',
171
+
hunt_rest_desc: 'Safe rest fully restores HP before the next hunt.',
172
+
hunt_rest_hp_now: 'Current: {hp} HP.',
173
+
hunt_rest_button: 'Rest at camp and restore HP',
174
+
hunt_rest_full: 'HP already full',
175
+
hunt_rest_pending: 'Recording camp rest in the World...',
176
+
hunt_rest_success: 'You rested at camp. HP is fully restored.',
177
+
hunt_rest_error: 'Could not record rest. Check the World connection and try again.',
170
178
hunt_title: 'Hunt',
171
179
hunt_choose_creature: 'Choose your prey',
172
180
hunt_no_creatures_here: 'There are currently no huntable creatures in this location.',
@@ -1064,7 +1072,7 @@ var LangEN = {
1064
1072
help_mana_text: 'Mana is your energy (0–100%). Every spell costs mana. Full regeneration takes ~5 days. Shown as a percentage — 1.00% = 100 basis points on the blockchain.',
1065
1073
1066
1074
help_section_hp: 'HP & Recovery',
1067
-
help_hp_text: 'HP is your health. Max HP grows from your level, class, and Resilience: base 100 + level × 10 + RES × 3, then your class multiplier is applied. It does not regenerate automatically to full — passive regen slowly restores up to 30% of your max HP (+1 HP every 100 blocks, ~5 min). Full recovery: visit the Hunt screen (camp rest) or use a Health Scroll (craftable or dropped by creatures).',
1075
+
help_hp_text: 'HP is your health. Max HP grows from your level, class, and Resilience: base 100 + level × 10 + RES × 3, then your class multiplier is applied. It does not regenerate automatically to full — passive regen slowly restores up to 30% of your max HP (+1 HP every 100 blocks, ~5 min). Full recovery: open the Hunt screen and press “Rest at camp”, or use a Health Scroll (craftable or dropped by creatures).',
1068
1076
1069
1077
help_section_quests: 'Quests & Prophecies',
1070
1078
help_quests_text: 'Regular quests are accepted in the Quests screen. “Traveler” currently means visiting 3 different regions via the world map — open the map, choose another region, and press “Travel”. The Daily Prophecy must also be accepted first, then completed. If it tells you to bless others, do that in the Chronicle with the “Bless” button on other mages\' entries.',
Copy file name to clipboardExpand all lines: app/js/i18n/ru.js
+9-1Lines changed: 9 additions & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -167,6 +167,14 @@ var LangRU = {
167
167
stat_for: 'Удача',
168
168
169
169
// Hunt
170
+
hunt_rest_title: 'Отдых у костра',
171
+
hunt_rest_desc: 'Безопасный отдых полностью восстанавливает HP перед следующей охотой.',
172
+
hunt_rest_hp_now: 'Сейчас: {hp} HP.',
173
+
hunt_rest_button: 'Отдохнуть у костра и восстановить HP',
174
+
hunt_rest_full: 'HP уже полное',
175
+
hunt_rest_pending: 'Отдых у костра записывается в Мир...',
176
+
hunt_rest_success: 'Вы отдохнули у костра. HP восстановлено полностью.',
177
+
hunt_rest_error: 'Не удалось записать отдых. Проверьте связь с Миром и попробуйте ещё раз.',
170
178
hunt_title: 'Охота',
171
179
hunt_choose_creature: 'Выбери добычу',
172
180
hunt_no_creatures_here: 'В этой локации сейчас нет доступной добычи для охоты.',
@@ -1064,7 +1072,7 @@ var LangRU = {
1064
1072
help_mana_text: 'Мана — ваша энергия (0–100%). Каждое заклинание тратит ману. Полное восстановление занимает ~5 дней. Отображается в процентах — 1.00% = 100 базисных пунктов в блокчейне.',
1065
1073
1066
1074
help_section_hp: 'HP и Восстановление',
1067
-
help_hp_text: 'HP — ваше здоровье. Максимум HP растёт от уровня, класса и Стойкости (Resilience): базово 100 + уровень × 10 + RES × 3, затем применяется модификатор класса. До максимума здоровье само не восстанавливается — пассивная регенерация возвращает до 30% от максимума (+1 HP каждые 100 блоков, ~5 мин). Полное восстановление: зайди на экран Охоты (отдых в лагере) или используй Свиток Здоровья (крафтится или падает с существ).',
1075
+
help_hp_text: 'HP — ваше здоровье. Максимум HP растёт от уровня, класса и Стойкости (Resilience): базово 100 + уровень × 10 + RES × 3, затем применяется модификатор класса. До максимума здоровье само не восстанавливается — пассивная регенерация возвращает до 30% от максимума (+1 HP каждые 100 блоков, ~5 мин). Полное восстановление: открой экран Охоты и нажми «Отдых у костра» или используй Свиток Здоровья (крафтится или падает с существ).',
1068
1076
1069
1077
help_section_quests: 'Задания и Пророчества',
1070
1078
help_quests_text: 'Обычные задания берутся во вкладке Задания. «Путешественник» сейчас означает: посетить 3 разных региона через карту мира — откройте карту, выберите другой регион и нажмите «Путешествие». Ежедневное Пророчество тоже нужно сначала принять, а затем выполнить его цель. Если в цели сказано благословлять — это делается в Хронике кнопкой «Благословить» у записей других магов.',
@@ -344,7 +345,7 @@ test('high-traffic UI narration, screen announcements, and inventory stat labels
344
345
345
346
test('service worker updates quickly and keeps navigations network-first',function(){
346
347
constswJs=read('app/sw.js');
347
-
assert.ok(/viz-magic-v48/.test(swJs),'service worker cache version should be bumped');
348
+
assert.ok(/viz-magic-v49/.test(swJs),'service worker cache version should be bumped');
348
349
assert.ok(/self\.skipWaiting\(\)/.test(swJs),'service worker should activate new cache without waiting for all tabs to close');
349
350
assert.ok(/self\.clients\.claim\(\)/.test(swJs),'service worker should claim clients after activation');
350
351
assert.ok(/event\.request\.mode==='navigate'[\s\S]*fetch\(event\.request\)/.test(swJs),'navigation requests should prefer network to avoid stale cached index');
assert.ok(/SoundManager\.setVolume\(sfxVolume\/100\)/.test(read('app/js/ui/screens/settings.js')),'settings should apply stored SFX volume on render');
394
395
assert.ok(/localStorage\.setItem\(STORAGE_PREFIX\+'sfx_volume'/.test(read('app/js/ui/sound.js')),'sound manager should persist SFX volume');
395
396
assert.ok(/varvolume=_getStoredNumber\('sfx_volume',0\.5\)/.test(read('app/js/ui/sound.js')),'sound manager should restore persisted SFX volume');
396
-
assert.ok(/viz-magic-v48/.test(read('app/sw.js')),'service worker cache should be bumped for UI changes');
397
+
assert.ok(/viz-magic-v49/.test(read('app/sw.js')),'service worker cache should be bumped for UI changes');
397
398
});
398
399
399
400
@@ -455,8 +456,8 @@ test('magical weather is labelled and affects hunts', function () {
455
456
assert.ok(/forecast-card-effect/.test(homeJs+mainCss),'forecast effect column needs its own thematic icon/card');
456
457
assert.ok(/functiongetCurrentFestival/.test(worldEventsJs),'magical holidays should sometimes appear in the forecast');
457
458
assert.ok(/festival_today_prefix/.test(homeJs+ruJs+enJs),'forecast holidays should have localized copy');
458
-
assert.ok(/i18n\/ru.js\?v=20260713a/.test(indexHtml),'Russian weather copy must be cache-busted');
459
-
assert.ok(/i18n\/en.js\?v=20260713a/.test(indexHtml),'English weather copy must be cache-busted');
459
+
assert.ok(/i18n\/ru.js\?v=20260713b/.test(indexHtml),'Russian weather copy must be cache-busted');
460
+
assert.ok(/i18n\/en.js\?v=20260713b/.test(indexHtml),'English weather copy must be cache-busted');
460
461
assert.ok(/home.js\?v=20260713a/.test(indexHtml),'home forecast layout must be cache-busted');
461
462
assert.ok(/quests.js\?v=20260712a/.test(indexHtml),'quest-limit UX must be cache-busted');
462
463
assert.ok(/nav.js\?v=20260712b/.test(indexHtml),'bottom tray nav must be cache-busted');
@@ -523,7 +524,7 @@ test('reported mobile UX issues have explicit fixes', function () {
523
524
524
525
test('PWA icon and HP heart use expressive color accents',function(){
525
526
assert.ok(/viz-magic-192\.png\?v=20260713a/.test(indexHtml),'PWA icon link should be cache-busted after plus placement/color update');
526
-
assert.ok(/viz-magic-v48/.test(read('app/manifest.json')),'manifest start URL should change so launchers can refresh icons');
527
+
assert.ok(/viz-magic-v49/.test(read('app/manifest.json')),'manifest start URL should change so launchers can refresh icons');
527
528
assert.ok(/label:'❤️HP'/.test(homeJs),'HP label should use a red heart emoji variant');
528
529
});
529
530
@@ -538,6 +539,18 @@ test('character screen uses current home-scale vitals and growth explainers', fu
538
539
assert.ok(/char_mana_explainer/.test(characterScreenJs+ruJs+enJs),'character screen should explain mana growth');
539
540
});
540
541
542
+
543
+
test('hunt screen exposes explicit camp rest promised by Help',function(){
544
+
assert.ok(/hunt.js\?v=20260713b/.test(indexHtml),'hunt screen should be cache-busted');
545
+
assert.ok(/broadcast.js\?v=20260713a/.test(indexHtml),'broadcast helper should be cache-busted for restAction');
546
+
assert.ok(/state-engine.js\?v=20260713b/.test(indexHtml),'state-engine should be cache-busted for processRestResult');
547
+
assert.ok(/functionrestAction\(callback\)/.test(broadcastJs),'broadcast helper should expose restAction');
548
+
assert.ok(/functionprocessRestResult\(account,blockNum\)/.test(stateEngineJs),'state engine should expose live rest processing');
549
+
assert.ok(/hunt-rest-section/.test(huntJs)&&/btn-rest-camp/.test(huntJs),'Hunt should show a visible rest-at-camp section and button');
550
+
assert.ok(/VizBroadcast\.restAction/.test(huntJs),'rest button should record a normal VM rest action');
551
+
assert.ok(/Отдыхукостра/.test(ruJs)&&/нажми«Отдыхукостра»/.test(ruJs),'Russian Help should name the visible rest button');
0 commit comments