diff --git a/index.php b/index.php
index 15635fb4..9a3ddfde 100644
--- a/index.php
+++ b/index.php
@@ -2184,6 +2184,7 @@ class="joystickBase" />
+
diff --git a/lang/ar.json b/lang/ar.json
index 8554e413..56520b9a 100644
--- a/lang/ar.json
+++ b/lang/ar.json
@@ -69,7 +69,8 @@
"disclaimer": {
"pendingApproval": "Pending approval from developer/publisher",
"hostedWithPermission": "Hosted with permission from the developer(s)",
- "originalCreation": "Original creation by the YNOproject community"
+ "originalCreation": "Original creation by the YNOproject community",
+ "gameEndDate": "Available to play on YNOproject until {{date}}"
},
"modal": {
"common": {
diff --git a/lang/de.json b/lang/de.json
index ee816b55..5b421add 100644
--- a/lang/de.json
+++ b/lang/de.json
@@ -69,7 +69,8 @@
"disclaimer": {
"pendingApproval": "Pending approval from developer/publisher",
"hostedWithPermission": "Mit der Erlaubnis der Entwickler gehostet",
- "originalCreation": "Originales Projekt der YNOproject Community"
+ "originalCreation": "Originales Projekt der YNOproject Community",
+ "gameEndDate": "Available to play on YNOproject until {{date}}"
},
"modal": {
"common": {
diff --git a/lang/en.json b/lang/en.json
index c5bfa77f..974c2e8e 100644
--- a/lang/en.json
+++ b/lang/en.json
@@ -69,7 +69,8 @@
"disclaimer": {
"pendingApproval": "Pending approval from developer/publisher",
"hostedWithPermission": "Hosted with permission from the developer(s)",
- "originalCreation": "Original creation by the YNOproject community"
+ "originalCreation": "Original creation by the YNOproject community",
+ "gameEndDate": "Available to play on YNOproject until {{date}}"
},
"modal": {
"common": {
diff --git a/lang/eo.json b/lang/eo.json
index 1314c99f..b5e82790 100644
--- a/lang/eo.json
+++ b/lang/eo.json
@@ -69,7 +69,8 @@
"disclaimer": {
"pendingApproval": "Pending approval from developer/publisher",
"hostedWithPermission": "Hosted with permission from the developer(s)",
- "originalCreation": "Original creation by the YNOproject community"
+ "originalCreation": "Original creation by the YNOproject community",
+ "gameEndDate": "Available to play on YNOproject until {{date}}"
},
"modal": {
"common": {
diff --git a/lang/es.json b/lang/es.json
index 176fc4f2..4094300a 100644
--- a/lang/es.json
+++ b/lang/es.json
@@ -69,7 +69,8 @@
"disclaimer": {
"pendingApproval": "Aprovación pendiente del desarrollador/editor",
"hostedWithPermission": "Alojado con la autorización de su(s) desarrollador(es)",
- "originalCreation": "Creación original por la comunidad de YNOproject"
+ "originalCreation": "Creación original por la comunidad de YNOproject",
+ "gameEndDate": "Available to play on YNOproject until {{date}}"
},
"modal": {
"common": {
diff --git a/lang/fr.json b/lang/fr.json
index 218ba2bd..8d24f00f 100644
--- a/lang/fr.json
+++ b/lang/fr.json
@@ -69,7 +69,8 @@
"disclaimer": {
"pendingApproval": "En attente d'approuvement du développeur/éditeur",
"hostedWithPermission": "Hébergé avec la permission du/des développeur(s)",
- "originalCreation": "Création originale de la communauté YNOproject"
+ "originalCreation": "Création originale de la communauté YNOproject",
+ "gameEndDate": "Available to play on YNOproject until {{date}}"
},
"modal": {
"common": {
diff --git a/lang/id.json b/lang/id.json
index 909eeb70..6c0a79f3 100644
--- a/lang/id.json
+++ b/lang/id.json
@@ -69,7 +69,8 @@
"disclaimer": {
"pendingApproval": "Pending approval from developer/publisher",
"hostedWithPermission": "Dihost dengan izin dari para pembuat Yume 2kki",
- "originalCreation": "Kreasi orisinal dari komunitas YNOproject"
+ "originalCreation": "Kreasi orisinal dari komunitas YNOproject",
+ "gameEndDate": "Available to play on YNOproject until {{date}}"
},
"modal": {
"common": {
diff --git a/lang/it.json b/lang/it.json
index 31e55cc7..fa570f47 100644
--- a/lang/it.json
+++ b/lang/it.json
@@ -69,7 +69,8 @@
"disclaimer": {
"pendingApproval": "Pending approval from developer/publisher",
"hostedWithPermission": "Hosted with permission from the developer(s)",
- "originalCreation": "Original creation by the YNOproject community"
+ "originalCreation": "Original creation by the YNOproject community",
+ "gameEndDate": "Available to play on YNOproject until {{date}}"
},
"modal": {
"common": {
diff --git a/lang/ja.json b/lang/ja.json
index 3bfcc4f4..ecbde8c0 100644
--- a/lang/ja.json
+++ b/lang/ja.json
@@ -69,7 +69,8 @@
"disclaimer": {
"pendingApproval": "開発者/配信元の承認待ち",
"hostedWithPermission": "開発者の許可を得て掲載しています",
- "originalCreation": "YNOprojectのコミュニティによるオリジナルの作品"
+ "originalCreation": "YNOprojectのコミュニティによるオリジナルの作品",
+ "gameEndDate": "この作品はYNOprojectで{{date}}までプレイ可能です"
},
"modal": {
"common": {
diff --git a/lang/ko.json b/lang/ko.json
index b543008e..e99aacba 100644
--- a/lang/ko.json
+++ b/lang/ko.json
@@ -69,7 +69,8 @@
"disclaimer": {
"pendingApproval": "개발자/배급사의 승인 대기 중에 있습니다.",
"hostedWithPermission": "개발진들의 허가를 받아 운영하고 있습니다.",
- "originalCreation": "YNOproject 커뮤니티에 의해 개발되었습니다."
+ "originalCreation": "YNOproject 커뮤니티에 의해 개발되었습니다.",
+ "gameEndDate": "Available to play on YNOproject until {{date}}"
},
"modal": {
"common": {
diff --git a/lang/pl.json b/lang/pl.json
index 51b449f9..1f4ed1e2 100644
--- a/lang/pl.json
+++ b/lang/pl.json
@@ -69,7 +69,8 @@
"disclaimer": {
"pendingApproval": "Pending approval from developer/publisher",
"hostedWithPermission": "Hosted with permission from the developer(s)",
- "originalCreation": "Original creation by the YNOproject community"
+ "originalCreation": "Original creation by the YNOproject community",
+ "gameEndDate": "Available to play on YNOproject until {{date}}"
},
"modal": {
"common": {
diff --git a/lang/pt.json b/lang/pt.json
index 3d796c55..4260002b 100644
--- a/lang/pt.json
+++ b/lang/pt.json
@@ -69,7 +69,8 @@
"disclaimer": {
"pendingApproval": "Pending approval from developer/publisher",
"hostedWithPermission": "Hospedados com a permissão do(s) desenvolvedor(es)",
- "originalCreation": "Criação original pela comunidade do YNOproject"
+ "originalCreation": "Criação original pela comunidade do YNOproject",
+ "gameEndDate": "Available to play on YNOproject until {{date}}"
},
"modal": {
"common": {
diff --git a/lang/ro.json b/lang/ro.json
index 2e0f1c3c..087626c3 100644
--- a/lang/ro.json
+++ b/lang/ro.json
@@ -69,7 +69,8 @@
"disclaimer": {
"pendingApproval": "Se așteaptă aprobarea de la dezvoltator/editor",
"hostedWithPermission": "Găzduit cu permisiunea dezvoltatorului/ilor",
- "originalCreation": "Creație originală de comunitatea YNOProject"
+ "originalCreation": "Creație originală de comunitatea YNOProject",
+ "gameEndDate": "Available to play on YNOproject until {{date}}"
},
"modal": {
"common": {
diff --git a/lang/ru.json b/lang/ru.json
index ae24bc55..5e2d6b18 100644
--- a/lang/ru.json
+++ b/lang/ru.json
@@ -69,7 +69,8 @@
"disclaimer": {
"pendingApproval": "Pending approval from developer/publisher",
"hostedWithPermission": "Hosted with permission from the developer(s)",
- "originalCreation": "Original creation by the YNOproject community"
+ "originalCreation": "Original creation by the YNOproject community",
+ "gameEndDate": "Available to play on YNOproject until {{date}}"
},
"modal": {
"common": {
diff --git a/lang/tr.json b/lang/tr.json
index 926db3b2..5b8e018c 100644
--- a/lang/tr.json
+++ b/lang/tr.json
@@ -69,7 +69,8 @@
"disclaimer": {
"pendingApproval": "Pending approval from developer/publisher",
"hostedWithPermission": "Yapımcı(lar) tarafından izin alınarak kullanılmıştır",
- "originalCreation": "YNOproject komünitesi tarafından orijinal yapımdır"
+ "originalCreation": "YNOproject komünitesi tarafından orijinal yapımdır",
+ "gameEndDate": "Available to play on YNOproject until {{date}}"
},
"modal": {
"common": {
diff --git a/lang/uk.json b/lang/uk.json
index 1ae3e905..d65b6d70 100644
--- a/lang/uk.json
+++ b/lang/uk.json
@@ -69,7 +69,8 @@
"disclaimer": {
"pendingApproval": "Очікується схвалення від розробника / видавця",
"hostedWithPermission": "Розміщено з дозволу розробників",
- "originalCreation": "Власна розробка спільноти YNOproject"
+ "originalCreation": "Власна розробка спільноти YNOproject",
+ "gameEndDate": "Available to play on YNOproject until {{date}}"
},
"modal": {
"common": {
diff --git a/lang/vi.json b/lang/vi.json
index 7bb47d14..c976ca2b 100644
--- a/lang/vi.json
+++ b/lang/vi.json
@@ -69,7 +69,8 @@
"disclaimer": {
"pendingApproval": "Pending approval from developer/publisher",
"hostedWithPermission": "Hosted with permission from the developer(s)",
- "originalCreation": "Original creation by the YNOproject community"
+ "originalCreation": "Original creation by the YNOproject community",
+ "gameEndDate": "Available to play on YNOproject until {{date}}"
},
"modal": {
"common": {
diff --git a/lang/zh.json b/lang/zh.json
index f6f06705..76e0b6a5 100644
--- a/lang/zh.json
+++ b/lang/zh.json
@@ -69,7 +69,8 @@
"disclaimer": {
"pendingApproval": "Pending approval from developer/publisher",
"hostedWithPermission": "Hosted with permission from the developer(s)",
- "originalCreation": "Original creation by the YNOproject community"
+ "originalCreation": "Original creation by the YNOproject community",
+ "gameEndDate": "Available to play on YNOproject until {{date}}"
},
"modal": {
"common": {
diff --git a/system.js b/system.js
index a83aa29c..c493cbbf 100644
--- a/system.js
+++ b/system.js
@@ -410,6 +410,10 @@ const gameLogoBlendModeOverrides = {
'unevendream': 'color'
};
+const gameEndDates = {
+ 'unconscious': Date.UTC(2025, 11, 28, 5, 0)
+};
+
const contrastRatioThreshold = 2.02;
function setSystemName(name) {
@@ -1142,3 +1146,60 @@ function hueToRGBA(h, a) {
}
return getColorRgba([Math.round(r * 255), Math.round(g * 255), Math.round(b * 255), a]);
}
+
+function displayGameEndDate() {
+ try {
+ const endDateUTC = gameEndDates[gameId];
+ if (!endDateUTC) return;
+
+ const endDateElement = document.getElementById('gameEndDate');
+ if (!endDateElement) return;
+ const now = new Date();
+
+ if (now.getTime() >= endDateUTC) {
+ endDateElement.remove();
+ return;
+ }
+ const localDate = new Date(endDateUTC);
+ const year = localDate.getFullYear();
+ const month = String(localDate.getMonth() + 1).padStart(2, '0');
+ const date = String(localDate.getDate()).padStart(2, '0');
+ const hours = String(localDate.getHours()).padStart(2, '0');
+ const minutes = String(localDate.getMinutes()).padStart(2, '0');
+
+ const locale = i18next.language === 'ja' ? 'ja-JP' : 'en-US';
+ const weekday = localDate.toLocaleDateString(locale, { weekday: 'short' });
+
+ const dateStr = `${year}/${month}/${date} (${weekday}) ${hours}:${minutes}`;
+ const translatedText = i18next.t('disclaimer.gameEndDate', { date: dateStr });
+
+ endDateElement.innerHTML = translatedText;
+ endDateElement.style.display = 'block';
+ } catch (error) {
+ console.error('Error displaying game end date:', error);
+ }
+}
+
+if (gameEndDates[gameId]) {
+ if (typeof i18next !== 'undefined' && i18next.isInitialized) {
+ displayGameEndDate();
+ } else {
+ document.addEventListener('DOMContentLoaded', function() {
+ let attempts = 0;
+ const maxAttempts = 50;
+ const checkI18next = setInterval(function() {
+ attempts++;
+ if (typeof i18next !== 'undefined' && i18next.isInitialized) {
+ clearInterval(checkI18next);
+ displayGameEndDate();
+ } else if (attempts >= maxAttempts) {
+ clearInterval(checkI18next);
+ }
+ }, 100);
+ });
+ }
+
+ if (typeof i18next !== 'undefined') {
+ i18next.on('languageChanged', displayGameEndDate);
+ }
+}
\ No newline at end of file