Skip to content

Commit 7bb9a9c

Browse files
author
web3blind
committed
Add developers support screen
1 parent 5598501 commit 7bb9a9c

10 files changed

Lines changed: 188 additions & 24 deletions

File tree

app/css/main.css

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1853,3 +1853,17 @@ body,
18531853
color: var(--color-success);
18541854
font-weight: 600;
18551855
}
1856+
1857+
1858+
/* Developers / support screen */
1859+
.developers-screen { max-width: 640px; margin: 0 auto; }
1860+
.developers-card {
1861+
margin-bottom: 16px;
1862+
padding: 16px;
1863+
background: var(--color-surface);
1864+
border: 1px solid var(--color-border);
1865+
border-radius: var(--radius);
1866+
}
1867+
.developers-card h2 { font-size: 1.1rem; margin-bottom: 10px; }
1868+
.developers-note { color: var(--color-text-muted); font-size: 0.95rem; }
1869+
.developers-reward-options { display: grid; gap: 10px; margin-top: 12px; }

app/index.html

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@
88
<meta name="apple-mobile-web-app-capable" content="yes">
99
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
1010
<title>Viz Magic</title>
11-
<link rel="manifest" href="manifest.json?v=20260713a">
11+
<link rel="manifest" href="manifest.json?v=20260713b">
1212
<link rel="icon" href="favicon.ico?v=20260712c">
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=20260713a">
16+
<link rel="stylesheet" href="css/main.css?v=20260713b">
1717
<link rel="stylesheet" href="css/themes.css">
1818
<link rel="stylesheet" href="css/accessibility.css">
1919
</head>
@@ -103,6 +103,10 @@
103103
<!-- Screen: Temple -->
104104
<section id="screen-temple" class="screen" role="main" aria-hidden="true" aria-label="Temple">
105105
</section>
106+
107+
<!-- Screen: Developers -->
108+
<section id="screen-developers" class="screen" role="main" aria-hidden="true" aria-label="Developers">
109+
</section>
106110
</div>
107111

108112
<!-- Bottom navigation -->
@@ -120,8 +124,8 @@
120124
<script src="js/config.js?v=20260712a"></script>
121125

122126
<!-- I18n -->
123-
<script src="js/i18n/ru.js?v=20260713f"></script>
124-
<script src="js/i18n/en.js?v=20260713f"></script>
127+
<script src="js/i18n/ru.js?v=20260713g"></script>
128+
<script src="js/i18n/en.js?v=20260713g"></script>
125129

126130
<!-- Utilities -->
127131
<script src="js/utils/helpers.js?v=20260621l"></script>
@@ -186,7 +190,7 @@
186190
<script src="js/ui/screens/landing.js"></script>
187191
<script src="js/ui/screens/login.js?v=20260711a"></script>
188192
<script src="js/ui/screens/onboarding.js"></script>
189-
<script src="js/ui/screens/home.js?v=20260713d"></script>
193+
<script src="js/ui/screens/home.js?v=20260713e"></script>
190194
<script src="js/ui/screens/character.js?v=20260713b"></script>
191195
<script src="js/ui/screens/hunt.js?v=20260713d"></script>
192196
<script src="js/ui/screens/inventory.js?v=20260621l"></script>
@@ -203,8 +207,9 @@
203207
<script src="js/ui/screens/help.js?v=20260713a"></script>
204208
<script src="js/ui/screens/leaderboard.js?v=20260712c"></script>
205209
<script src="js/ui/screens/temple.js?v=20260713a"></script>
210+
<script src="js/ui/screens/developers.js?v=20260713a"></script>
206211

207212
<!-- Main App Controller (must be last) -->
208-
<script src="js/ui/app.js?v=20260712a"></script>
213+
<script src="js/ui/app.js?v=20260713a"></script>
209214
</body>
210215
</html>

app/js/i18n/en.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -566,6 +566,24 @@ var LangEN = {
566566
nav_marketplace: 'Bazaar',
567567
nav_crafting: 'Craft',
568568

569+
// Developers
570+
nav_developers: 'Developers',
571+
developers_title: 'Developers',
572+
developers_about_title: 'Who builds Viz Magic',
573+
developers_about_text: 'Viz Magic grows as an open VIZ blockchain game: mechanics, creatures, writing, and accessibility can improve through developer and player contributions.',
574+
developers_primary_dev: 'Primary developer',
575+
developers_reward_title: 'Thank the developer',
576+
developers_reward_text: 'If the game gave you joy, you can voluntarily send a small VIZ award to the developer.',
577+
developers_reward_note: 'This is optional. It spends the selected share of your mana/energy and gives no gameplay advantage.',
578+
developers_login_required: 'Enter the World to send a developer reward.',
579+
developers_reward_button: 'Reward {amount}',
580+
developers_reward_confirm_title: 'Confirm reward',
581+
developers_reward_confirm_text: 'Send {amount} mana to @{account}? This is a voluntary thank-you and gives no gameplay advantage.',
582+
developers_reward_confirm_button: 'Send reward',
583+
developers_reward_success: 'Thank you! Developer reward sent.',
584+
developers_reward_error: 'Could not send the reward. Check login and try again.',
585+
developers_reward_memo: 'thanks for Viz Magic',
586+
569587
// Marketplace
570588
market_title: 'Bazaar',
571589
market_tabs: 'Bazaar sections',

app/js/i18n/ru.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -566,6 +566,24 @@ var LangRU = {
566566
nav_marketplace: 'Базар',
567567
nav_crafting: 'Мастерская',
568568

569+
// Developers
570+
nav_developers: 'Разработчики',
571+
developers_title: 'Разработчики',
572+
developers_about_title: 'Кто делает Viz Magic',
573+
developers_about_text: 'Viz Magic развивается как открытая игра на блокчейне VIZ: механики, существа, тексты и доступность можно улучшать через вклад разработчиков и игроков.',
574+
developers_primary_dev: 'Основной разработчик',
575+
developers_reward_title: 'Поблагодарить разработчика',
576+
developers_reward_text: 'Если игра принесла удовольствие, можно добровольно отправить небольшую награду разработчику через VIZ award.',
577+
developers_reward_note: 'Это необязательное действие. Оно тратит выбранную долю вашей маны/энергии и не даёт игрового преимущества.',
578+
developers_login_required: 'Войдите в Мир, чтобы отправить награду разработчику.',
579+
developers_reward_button: 'Наградить на {amount}',
580+
developers_reward_confirm_title: 'Подтвердить награду',
581+
developers_reward_confirm_text: 'Отправить {amount} маны аккаунту @{account}? Это добровольная благодарность и она не даёт игрового преимущества.',
582+
developers_reward_confirm_button: 'Отправить награду',
583+
developers_reward_success: 'Спасибо! Награда разработчику отправлена.',
584+
developers_reward_error: 'Не удалось отправить награду. Проверьте вход и попробуйте снова.',
585+
developers_reward_memo: 'спасибо за Viz Magic',
586+
569587
// Marketplace
570588
market_title: 'Базар',
571589
market_tabs: 'Разделы базара',

app/js/ui/app.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ var App = (function() {
66
'use strict';
77

88
var currentScreen = 'landing';
9-
var screens = ['landing', 'onboarding', 'login', 'home', 'character', 'hunt', 'inventory', 'chronicle', 'duel', 'arena', 'guild', 'map', 'marketplace', 'crafting', 'quests', 'world-boss', 'settings', 'help', 'leaderboard', 'temple'];
9+
var screens = ['landing', 'onboarding', 'login', 'home', 'character', 'hunt', 'inventory', 'chronicle', 'duel', 'arena', 'guild', 'map', 'marketplace', 'crafting', 'quests', 'world-boss', 'settings', 'help', 'leaderboard', 'temple', 'developers'];
1010
var initialized = false;
1111
var _pollTimer = null;
1212
var _lastPolledBlock = 0;
@@ -170,7 +170,7 @@ var App = (function() {
170170
_renderScreen(screenId);
171171

172172
// Update navigation
173-
var gameScreens = ['home', 'character', 'hunt', 'inventory', 'chronicle', 'duel', 'arena', 'guild', 'map', 'marketplace', 'crafting', 'quests', 'world-boss', 'settings', 'help', 'leaderboard', 'temple'];
173+
var gameScreens = ['home', 'character', 'hunt', 'inventory', 'chronicle', 'duel', 'arena', 'guild', 'map', 'marketplace', 'crafting', 'quests', 'world-boss', 'settings', 'help', 'leaderboard', 'temple', 'developers'];
174174
var nav = Helpers.$('bottom-nav');
175175
if (gameScreens.indexOf(screenId) !== -1) {
176176
nav.classList.add('show');
@@ -216,6 +216,7 @@ var App = (function() {
216216
case 'help': if (typeof HelpScreen !== 'undefined') HelpScreen.render(); break;
217217
case 'leaderboard': if (typeof LeaderboardScreen !== 'undefined') LeaderboardScreen.render(); break;
218218
case 'temple': if (typeof TempleScreen !== 'undefined') TempleScreen.render(); break;
219+
case 'developers': if (typeof DevelopersScreen !== 'undefined') DevelopersScreen.render(); break;
219220
}
220221
}
221222

app/js/ui/screens/developers.js

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
/**
2+
* Viz Magic — Developers / Support Screen
3+
* Shows who builds the game and lets a player voluntarily award the developer.
4+
*/
5+
var DevelopersScreen = (function() {
6+
'use strict';
7+
8+
var DEVELOPER_ACCOUNT = 'denis-skripnik';
9+
var REWARD_OPTIONS = [50, 100, 250]; // basis points: 0.50%, 1.00%, 2.50%
10+
11+
function render() {
12+
var t = Helpers.t;
13+
var el = Helpers.$('screen-developers');
14+
if (!el) return;
15+
16+
var user = typeof VizAccount !== 'undefined' ? VizAccount.getCurrentUser() : '';
17+
var html = '<div class="developers-screen">';
18+
html += '<h1>🛠️ ' + t('developers_title') + '</h1>';
19+
html += '<section class="developers-card" aria-label="' + t('developers_about_title') + '">';
20+
html += '<h2>' + t('developers_about_title') + '</h2>';
21+
html += '<p>' + t('developers_about_text') + '</p>';
22+
html += '<p><strong>' + t('developers_primary_dev') + ':</strong> @' + DEVELOPER_ACCOUNT + '</p>';
23+
html += '</section>';
24+
25+
html += '<section class="developers-card" aria-label="' + t('developers_reward_title') + '">';
26+
html += '<h2>💎 ' + t('developers_reward_title') + '</h2>';
27+
html += '<p>' + t('developers_reward_text') + '</p>';
28+
html += '<p class="developers-note">' + t('developers_reward_note') + '</p>';
29+
if (!user) {
30+
html += '<div class="empty-state">' + t('developers_login_required') + '</div>';
31+
} else {
32+
html += '<div class="developers-reward-options" role="group" aria-label="' + t('developers_reward_title') + '">';
33+
for (var i = 0; i < REWARD_OPTIONS.length; i++) {
34+
html += '<button type="button" class="btn btn-primary dev-reward-btn" data-energy="' + REWARD_OPTIONS[i] + '">' +
35+
t('developers_reward_button', { amount: Helpers.bpToPercent(REWARD_OPTIONS[i]) }) + '</button>';
36+
}
37+
html += '</div>';
38+
}
39+
html += '</section>';
40+
html += '</div>';
41+
el.innerHTML = html;
42+
_bindEvents(el);
43+
}
44+
45+
function _bindEvents(el) {
46+
var buttons = el.querySelectorAll('.dev-reward-btn');
47+
for (var i = 0; i < buttons.length; i++) {
48+
buttons[i].addEventListener('click', function() {
49+
var energy = parseInt(this.getAttribute('data-energy'), 10) || 0;
50+
_confirmReward(energy);
51+
});
52+
}
53+
}
54+
55+
function _confirmReward(energy) {
56+
var t = Helpers.t;
57+
SoundManager.play('tap');
58+
Modal.show({
59+
title: t('developers_reward_confirm_title'),
60+
text: t('developers_reward_confirm_text', { amount: Helpers.bpToPercent(energy), account: DEVELOPER_ACCOUNT }),
61+
buttons: [
62+
{
63+
text: t('developers_reward_confirm_button'),
64+
className: 'btn-primary',
65+
action: function() { _sendReward(energy); }
66+
},
67+
{
68+
text: t('cancel'),
69+
className: 'btn-secondary',
70+
action: function() {}
71+
}
72+
]
73+
});
74+
}
75+
76+
function _sendReward(energy) {
77+
var t = Helpers.t;
78+
var memo = 'viz://vm/developers/thanks — ' + t('developers_reward_memo');
79+
VizBroadcast.award(DEVELOPER_ACCOUNT, energy, 0, memo, [], function(err) {
80+
if (err) {
81+
Toast.error(t('developers_reward_error'));
82+
SoundManager.play('error');
83+
return;
84+
}
85+
Toast.success(t('developers_reward_success'));
86+
SoundManager.play('success');
87+
SoundManager.vibrate('success');
88+
});
89+
}
90+
91+
return { render: render };
92+
})();

app/js/ui/screens/home.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ var HomeScreen = (function() {
66
'use strict';
77

88
var PRIMARY_HOME_SCREENS = ['home', 'hunt', 'map', 'inventory', 'arena', 'quests', 'guild', 'marketplace', 'crafting', 'temple'];
9-
var SECONDARY_HOME_SCREENS = ['chronicle', 'character', 'leaderboard', 'world-boss', 'settings', 'help'];
9+
var SECONDARY_HOME_SCREENS = ['chronicle', 'character', 'leaderboard', 'world-boss', 'settings', 'help', 'developers'];
1010
var HOME_HP_DISPLAY_MAX = 5000;
1111
var HOME_XP_DISPLAY_MAX = 3000;
1212

@@ -248,6 +248,7 @@ var HomeScreen = (function() {
248248
if (primary && screen === 'marketplace') return t('nav_bazaar');
249249
if (primary && screen === 'crafting') return t('nav_crafting');
250250
if (screen === 'world-boss') return t('nav_world-boss');
251+
if (screen === 'developers') return t('nav_developers');
251252
if (screen === 'settings') return t('nav_settings') || t('settings');
252253
if (screen === 'arena') return t('nav_duel') || t('nav_arena');
253254
return t('nav_' + screen) || screen;
@@ -270,7 +271,8 @@ var HomeScreen = (function() {
270271
arena: '\u2694\uFE0F',
271272
quests: '\uD83D\uDCDC',
272273
'world-boss': '\uD83D\uDC32',
273-
settings: '\u2699\uFE0F'
274+
settings: '\u2699\uFE0F',
275+
developers: '\uD83D\uDEE0\uFE0F'
274276
};
275277
return icons[screen] || '\u2728';
276278
}

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-v54",
6+
"start_url": "/?pwa=viz-magic-v55",
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-v54';
2+
var CACHE_NAME = 'viz-magic-v55';
33
var ASSETS = [
44
'/',
55
'/index.html',

0 commit comments

Comments
 (0)