Skip to content

Commit 8007af0

Browse files
author
web3blind
committed
Explain rifts and temple feedback
1 parent e6a7cf6 commit 8007af0

9 files changed

Lines changed: 95 additions & 25 deletions

File tree

app/css/main.css

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -975,7 +975,12 @@ body {
975975
padding: 8px 12px; background: rgba(212,168,67,0.1);
976976
border: 1px solid var(--color-primary); border-radius: var(--radius-sm);
977977
font-size: 0.9rem; animation: eventPulse 2s ease-in-out infinite;
978+
color: var(--color-text); text-align: left; width: 100%;
978979
}
980+
.event-banner-button { cursor: pointer; font: inherit; }
981+
.event-banner-button:focus { outline: 2px solid var(--color-primary); outline-offset: 2px; }
982+
.event-copy { flex: 1; display: flex; flex-direction: column; gap: 2px; }
983+
.event-desc { color: var(--color-text-muted); font-size: 0.82rem; }
979984
@keyframes eventPulse {
980985
0%, 100% { opacity: 1; }
981986
50% { opacity: 0.8; }
@@ -1837,3 +1842,14 @@ body,
18371842
background: var(--color-surface-2);
18381843
color: var(--color-text-muted);
18391844
}
1845+
1846+
1847+
.temple-status-region {
1848+
min-height: 1.2em;
1849+
margin-top: 8px;
1850+
color: var(--color-text-muted);
1851+
}
1852+
.temple-status-success {
1853+
color: var(--color-success);
1854+
font-weight: 600;
1855+
}

app/index.html

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
<link rel="icon" type="image/png" sizes="192x192" href="assets/icons/viz-magic-192.png?v=20260713a">
1414
<link rel="icon" type="image/png" sizes="512x512" href="assets/icons/viz-magic-512.png?v=20260713a">
1515
<link rel="apple-touch-icon" href="assets/icons/viz-magic-192.png?v=20260713a">
16-
<link rel="stylesheet" href="css/main.css?v=20260712k">
16+
<link rel="stylesheet" href="css/main.css?v=20260713a">
1717
<link rel="stylesheet" href="css/themes.css">
1818
<link rel="stylesheet" href="css/accessibility.css">
1919
</head>
@@ -120,8 +120,8 @@
120120
<script src="js/config.js?v=20260712a"></script>
121121

122122
<!-- I18n -->
123-
<script src="js/i18n/ru.js?v=20260713c"></script>
124-
<script src="js/i18n/en.js?v=20260713c"></script>
123+
<script src="js/i18n/ru.js?v=20260713d"></script>
124+
<script src="js/i18n/en.js?v=20260713d"></script>
125125

126126
<!-- Utilities -->
127127
<script src="js/utils/helpers.js?v=20260621l"></script>
@@ -186,7 +186,7 @@
186186
<script src="js/ui/screens/landing.js"></script>
187187
<script src="js/ui/screens/login.js?v=20260711a"></script>
188188
<script src="js/ui/screens/onboarding.js"></script>
189-
<script src="js/ui/screens/home.js?v=20260713b"></script>
189+
<script src="js/ui/screens/home.js?v=20260713c"></script>
190190
<script src="js/ui/screens/character.js?v=20260713b"></script>
191191
<script src="js/ui/screens/hunt.js?v=20260713b"></script>
192192
<script src="js/ui/screens/inventory.js?v=20260621l"></script>
@@ -202,7 +202,7 @@
202202
<script src="js/ui/screens/settings.js?v=20260713a"></script>
203203
<script src="js/ui/screens/help.js?v=20260712a"></script>
204204
<script src="js/ui/screens/leaderboard.js?v=20260712c"></script>
205-
<script src="js/ui/screens/temple.js?v=20260712c"></script>
205+
<script src="js/ui/screens/temple.js?v=20260713a"></script>
206206

207207
<!-- Main App Controller (must be last) -->
208208
<script src="js/ui/app.js?v=20260712a"></script>

app/js/i18n/en.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -859,7 +859,8 @@ var LangEN = {
859859
event_weave_surge: 'Weave Surge',
860860
event_weave_surge_desc: 'Mana regeneration doubled!',
861861
event_minor_rift: 'Minor Rift',
862-
event_minor_rift_desc: 'Rare creatures appear in the World!',
862+
event_minor_rift_desc: 'Rare creatures appear more often in hunts. Press to go hunting while the rift is open.',
863+
event_time_left: '{time} left.',
863864
event_world_boss: 'World Boss',
864865
event_world_boss_desc: 'The Aether Dragon has awakened!',
865866
event_next_season: 'Season Change',
@@ -1049,7 +1050,7 @@ var LangEN = {
10491050
temple_offer_button: 'Offer {cost}',
10501051
temple_offering_started: 'Sending the offering to the chain...',
10511052
temple_offering_failed: 'Offering failed. Mana should not count as spent in game.',
1052-
temple_offering_success: 'Offering accepted. A sign of faith was added to your bag.',
1053+
temple_offering_success: 'Your prayer was heard. The offering was accepted and a faith mark was added to your bag.',
10531054
temple_cooldown_active: 'This deity has already accepted an offering today.',
10541055
temple_last_offering_recorded: 'A recent offering is already recorded in the world.',
10551056
temple_no_offering_yet: 'No offering to this deity has been recorded yet.',
@@ -1067,7 +1068,7 @@ var LangEN = {
10671068
temple_social_publish: 'Publish the prayer to the Chronicle',
10681069
temple_social_note: 'This creates a separate #viz_magic #temple post so the prayer is visible in the social feed.',
10691070
temple_social_post: '{name} prays at the Temple. {deity}, hear this: “{prayer}” #viz_magic #temple {tag}',
1070-
temple_social_success: 'Prayer published to the Chronicle.',
1071+
temple_social_success: 'Your prayer was heard and published to the Chronicle.',
10711072
temple_social_failed: 'The offering was accepted, but the prayer post was not sent. The reward is saved.',
10721073
temple_energy_check_failed: 'Could not check mana before the offering.',
10731074
temple_not_enough_mana: 'Not enough mana for the offering.',

app/js/i18n/ru.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -859,7 +859,8 @@ var LangRU = {
859859
event_weave_surge: 'Всплеск Плетения',
860860
event_weave_surge_desc: 'Регенерация маны удвоена!',
861861
event_minor_rift: 'Малый Разлом',
862-
event_minor_rift_desc: 'Редкие существа появляются в Мире!',
862+
event_minor_rift_desc: 'Редкие существа чаще появляются на охоте. Нажми, чтобы перейти к охоте, пока разлом открыт.',
863+
event_time_left: 'Осталось {time}.',
863864
event_world_boss: 'Мировой Босс',
864865
event_world_boss_desc: 'Эфирный Дракон пробудился!',
865866
event_next_season: 'Смена Сезона',
@@ -1049,7 +1050,7 @@ var LangRU = {
10491050
temple_offer_button: 'Принести {cost}',
10501051
temple_offering_started: 'Подношение отправляется в цепочку...',
10511052
temple_offering_failed: 'Подношение не удалось. Мана не должна считаться потраченной в игре.',
1052-
temple_offering_success: 'Подношение принято. Знак веры добавлен в сумку.',
1053+
temple_offering_success: 'Твоя молитва услышана. Подношение принято, знак веры добавлен в сумку.',
10531054
temple_cooldown_active: 'Сегодня это божество уже приняло подношение.',
10541055
temple_last_offering_recorded: 'Последнее подношение уже записано в мире.',
10551056
temple_no_offering_yet: 'Подношений этому божеству ещё не было.',
@@ -1067,7 +1068,7 @@ var LangRU = {
10671068
temple_social_publish: 'Опубликовать молитву в Хронику',
10681069
temple_social_note: 'Это создаст отдельный пост с #viz_magic #temple, чтобы молитву увидели в социальной ленте.',
10691070
temple_social_post: '{name} молится в Храме. {deity}, услышь: «{prayer}» #viz_magic #temple {tag}',
1070-
temple_social_success: 'Молитва опубликована в Хронику.',
1071+
temple_social_success: 'Твоя молитва услышана и опубликована в Хронику.',
10711072
temple_social_failed: 'Подношение принято, но пост молитвы не отправился. Награда сохранена.',
10721073
temple_energy_check_failed: 'Не удалось проверить ману перед подношением.',
10731074
temple_not_enough_mana: 'Недостаточно маны для подношения.',

app/js/ui/screens/home.js

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,14 @@ var HomeScreen = (function() {
8383
});
8484
}
8585

86+
var eventButtons = el.querySelectorAll('.event-banner-button');
87+
for (var eb = 0; eb < eventButtons.length; eb++) {
88+
eventButtons[eb].addEventListener('click', function() {
89+
SoundManager.play('tap');
90+
Helpers.EventBus.emit('navigate', this.getAttribute('data-screen'));
91+
});
92+
}
93+
8694
// Boss alert click
8795
var bossAlert = el.querySelector('.boss-alert');
8896
if (bossAlert) {
@@ -140,11 +148,21 @@ var HomeScreen = (function() {
140148
if (evt.type === 'world_boss') continue; // Shown separately
141149
var timeLeft = Math.floor(evt.blocksRemaining * 3 / 60);
142150
var timeStr = timeLeft > 60 ? Math.floor(timeLeft / 60) + 'h' : timeLeft + 'm';
143-
html += '<div class="event-banner-item">' +
151+
var descKey = evt.nameKey + '_desc';
152+
var desc = t(descKey);
153+
if (!desc || desc === descKey) desc = '';
154+
var target = evt.type === 'minor_rift' ? 'hunt' : '';
155+
var tag = target ? 'button' : 'div';
156+
var attrs = target ? ' type="button" data-screen="' + target + '"' : '';
157+
html += '<' + tag + ' class="event-banner-item event-banner-' + evt.type + (target ? ' event-banner-button' : '') + '"' + attrs + ' aria-label="' +
158+
t(evt.nameKey) + (desc ? '. ' + desc : '') + ' ' + t('event_time_left', {time: timeStr}) + '">' +
144159
'<span class="event-icon" aria-hidden="true">' + evt.icon + '</span>' +
145-
'<span class="event-name">' + t(evt.nameKey) + '</span>' +
160+
'<span class="event-copy">' +
161+
'<span class="event-name">' + t(evt.nameKey) + '</span>' +
162+
(desc ? '<span class="event-desc">' + desc + '</span>' : '') +
163+
'</span>' +
146164
'<span class="event-timer">' + timeStr + '</span>' +
147-
'</div>';
165+
'</' + tag + '>';
148166
}
149167
html += '</div>';
150168
return html;

app/js/ui/screens/temple.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ var TempleScreen = (function() {
4343
'<h1 data-screen-focus>' + t('temple_title') + '</h1>' +
4444
'<p>' + t('temple_intro') + '</p>' +
4545
'<p class="temple-balance-note">' + t('temple_balance_note') + '</p>' +
46+
'<p id="temple-status-region" class="temple-status-region" role="status" aria-live="polite"></p>' +
4647
'</div>' +
4748
'<div class="temple-deities">';
4849

@@ -109,6 +110,13 @@ var TempleScreen = (function() {
109110
return html;
110111
}
111112

113+
function _setTempleStatus(message, isSuccess) {
114+
var el = Helpers.$('temple-status-region');
115+
if (!el) return;
116+
el.className = 'temple-status-region' + (isSuccess ? ' temple-status-success' : '');
117+
el.textContent = message || '';
118+
}
119+
112120
function _makeOffering(deityId) {
113121
if (busy) return;
114122
var deity = null;
@@ -117,6 +125,7 @@ var TempleScreen = (function() {
117125
}
118126
if (!deity) return;
119127
if (!VizAccount.isLoggedIn || !VizAccount.isLoggedIn()) {
128+
_setTempleStatus(Helpers.t('not_logged_in'), false);
120129
Toast.error(Helpers.t('not_logged_in'));
121130
return;
122131
}
@@ -126,6 +135,7 @@ var TempleScreen = (function() {
126135
var headBlock = state.headBlock || 0;
127136
var last = state.temple && state.temple[user] ? (state.temple[user][deity.id] || 0) : 0;
128137
if (last && headBlock && headBlock - last < 28800) {
138+
_setTempleStatus(Helpers.t('temple_cooldown_active'), false);
129139
Toast.info(Helpers.t('temple_cooldown_active'));
130140
return;
131141
}
@@ -135,22 +145,26 @@ var TempleScreen = (function() {
135145
var shouldPublish = !socialToggle || socialToggle.checked;
136146

137147
busy = true;
148+
_setTempleStatus(Helpers.t('temple_offering_started'), false);
138149
Toast.info(Helpers.t('temple_offering_started'));
139150
VizAccount.getAccount(user, function(energyErr, accountData) {
140151
if (energyErr || !accountData) {
141152
busy = false;
153+
_setTempleStatus(Helpers.t('temple_energy_check_failed'), false);
142154
Toast.error(Helpers.t('temple_energy_check_failed'));
143155
return;
144156
}
145157
var currentEnergy = VizAccount.calculateCurrentEnergy(accountData);
146158
if (currentEnergy < OFFERING_ENERGY) {
147159
busy = false;
160+
_setTempleStatus(Helpers.t('temple_not_enough_mana'), false);
148161
Toast.error(Helpers.t('temple_not_enough_mana'));
149162
return;
150163
}
151164
VizBroadcast.templeOffering(deity.id, deity.target, OFFERING_ENERGY, prayerText, function(err, result) {
152165
busy = false;
153166
if (err) {
167+
_setTempleStatus(Helpers.t('temple_offering_failed'), false);
154168
Toast.error(Helpers.t('temple_offering_failed'));
155169
return;
156170
}
@@ -162,9 +176,11 @@ var TempleScreen = (function() {
162176
user, deity.id, deity.target, OFFERING_ENERGY, blockNum, prayerText
163177
);
164178
if (event && event.type === 'temple_offering_rejected') {
179+
_setTempleStatus(Helpers.t('temple_cooldown_active'), false);
165180
Toast.info(Helpers.t('temple_cooldown_active'));
166181
} else {
167182
StateEngine.saveCheckpoint(function() {});
183+
_setTempleStatus(Helpers.t('temple_offering_success'), true);
168184
Toast.success(Helpers.t('temple_offering_success'));
169185
if (shouldPublish) {
170186
_publishPrayerPost(deity, prayerText, user);

app/manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"short_name": "VizMagic",
44
"description": "Viz Magic — accessible browser RPG on the VIZ blockchain",
55
"id": "https://vizmagic.web3blind.xyz/",
6-
"start_url": "/?pwa=viz-magic-v51",
6+
"start_url": "/?pwa=viz-magic-v52",
77
"scope": "/",
88
"display": "standalone",
99
"display_override": ["standalone", "minimal-ui"],

app/sw.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// Viz Magic — Service Worker
2-
var CACHE_NAME = 'viz-magic-v51';
2+
var CACHE_NAME = 'viz-magic-v52';
33
var ASSETS = [
44
'/',
55
'/index.html',

0 commit comments

Comments
 (0)