├── env.d.ts ├── .gitattributes ├── original_Loader.vue ├── src ├── assets │ ├── maids.png │ ├── favicon.ico │ ├── index_bg.jpg │ ├── nikke-db.png │ ├── index_bg2.webp │ └── notice_imgs │ │ ├── HQ.png │ │ ├── LQ.png │ │ ├── fourk.png │ │ ├── layerEditor1.png │ │ ├── layerEditor2.png │ │ ├── layerEditor3.png │ │ ├── layerEditor4.png │ │ └── layerEditor5.png ├── utils │ ├── interfaces │ │ ├── contributor.ts │ │ ├── tierlist │ │ │ ├── character.ts │ │ │ ├── tier.ts │ │ │ └── tierlist.ts │ │ ├── levelingRecord.ts │ │ ├── outpostBattleRecords.ts │ │ ├── gallery.ts │ │ └── live2d.ts │ ├── json │ │ ├── Gallery │ │ │ ├── 777.json │ │ │ ├── boomsday.json │ │ │ ├── colorless.json │ │ │ ├── darkhero.json │ │ │ ├── liarsend.json │ │ │ ├── doutsiders.json │ │ │ ├── newflavor.json │ │ │ ├── bonds.json │ │ │ ├── killthelord.json │ │ │ ├── fullfoolday.json │ │ │ ├── brandnewyear.json │ │ │ ├── nyanyaparadise.json │ │ │ ├── forrest.json │ │ │ ├── jinxplayer.json │ │ │ ├── juveniledays.json │ │ │ ├── blankticket.json │ │ │ ├── rebornevil.json │ │ │ ├── outerautomata.json │ │ │ ├── foolburstday.json │ │ │ ├── overthehorizon.json │ │ │ ├── bluewaterisland.json │ │ │ ├── goninjathief.json │ │ │ ├── madeinrush.json │ │ │ ├── miraclesnow.json │ │ │ ├── recipeforyou.json │ │ │ ├── side04.json │ │ │ ├── bbqmaster.json │ │ │ ├── side01.json │ │ │ ├── side02.json │ │ │ ├── neverland.json │ │ │ ├── story8.json │ │ │ ├── voltroad.json │ │ │ ├── evangelion.json │ │ │ ├── absolute.json │ │ │ ├── goldencoinrush.json │ │ │ ├── 4koma_zh.json │ │ │ ├── bfgcleanup.json │ │ │ ├── seayouagain.json │ │ │ ├── story9.json │ │ │ ├── beautyfullshot.json │ │ │ ├── story5.json │ │ │ ├── story2.json │ │ │ ├── dragondungeonrun.json │ │ │ ├── story1.json │ │ │ ├── overzone.json │ │ │ ├── side03.json │ │ │ ├── story7.json │ │ │ ├── memoriesteller.json │ │ │ ├── coinsinrush.json │ │ │ ├── secondquest.json │ │ │ ├── boomtheghost.json │ │ │ ├── footstepwalkrun.json │ │ │ ├── icedragonsaga.json │ │ │ ├── redash.json │ │ │ ├── snowfalloasis.json │ │ │ ├── story10.json │ │ │ ├── lastkingdom.json │ │ │ ├── story4.json │ │ │ ├── story3.json │ │ │ ├── story6.json │ │ │ ├── unbreakablesphere.json │ │ │ ├── whitememory.json │ │ │ ├── albums.json │ │ │ ├── goddessfall.json │ │ │ ├── chapters.json │ │ │ └── oldtales.json │ │ └── honorifics.json │ ├── style │ │ ├── global_variables.less │ │ └── naive-ui-theme-overrides.json │ ├── utils.ts │ ├── animationMappings.ts │ ├── LayerEditorUtils.ts │ ├── enum │ │ └── globalParams.ts │ └── tierlistUtils.ts ├── components │ ├── common │ │ ├── Spine │ │ │ ├── WrapperPC.vue │ │ │ ├── Tools │ │ │ │ ├── BackgroundImagePack.vue │ │ │ │ ├── ResetCoordinates.vue │ │ │ │ ├── ChangeQualityMode.vue │ │ │ │ ├── HideUI.vue │ │ │ │ ├── Yapping.vue │ │ │ │ ├── Export.vue │ │ │ │ ├── PoseSelector.vue │ │ │ │ ├── Screenshot.vue │ │ │ │ ├── AttachmentEditorColorSlider.vue │ │ │ │ ├── AttachmentEditorListing.vue │ │ │ │ ├── AttachmentEditorListItem.vue │ │ │ │ ├── ChangeScreenshotSize.vue │ │ │ │ ├── BackgroundColor.vue │ │ │ │ └── CustomLoaderItem.vue │ │ │ ├── CharacterList.vue │ │ │ ├── ToolList.vue │ │ │ └── WrapperMobile.vue │ │ ├── Footer │ │ │ └── Footer.vue │ │ ├── Header │ │ │ ├── routes2Display.ts │ │ │ ├── HeaderSelector.vue │ │ │ ├── VisitorCounter.vue │ │ │ ├── HeaderPC.vue │ │ │ └── HeaderMobile.vue │ │ ├── Gallery │ │ │ ├── ButtonTemplate.vue │ │ │ └── ArrowTemplate.vue │ │ ├── Tierlistmaker │ │ │ ├── CharacterCard.vue │ │ │ └── ImportFromText.vue │ │ ├── Credits │ │ │ ├── Template.vue │ │ │ └── Table.vue │ │ └── Tools │ │ │ ├── Template.vue │ │ │ └── AlphaConverters.vue │ └── views │ │ ├── StoryGenerator.vue │ │ ├── Tools.vue │ │ ├── L2D.vue │ │ ├── notices │ │ └── HighAndLowQualityAssets.vue │ │ ├── Chibi.vue │ │ └── Index.vue ├── main.ts ├── stores │ ├── loaderStore.ts │ ├── market.ts │ ├── messageStore.ts │ └── globalParamsStore.ts ├── Wrapper.vue ├── router │ └── index.ts └── App.vue ├── tsconfig.vitest.json ├── .prettierrc.json ├── tsconfig.app.json ├── tsconfig.json ├── .gitignore ├── vitest.config.ts ├── tsconfig.node.json ├── index.html ├── LICENSE.md ├── vite.config.ts ├── README.md ├── .eslintrc.cjs └── package.json /env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | *.js linguist-detectable=false 2 | *.css linguist-detectable=false -------------------------------------------------------------------------------- /original_Loader.vue: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nikke-db/nikke-db-vue/HEAD/original_Loader.vue -------------------------------------------------------------------------------- /src/assets/maids.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nikke-db/nikke-db-vue/HEAD/src/assets/maids.png -------------------------------------------------------------------------------- /src/assets/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nikke-db/nikke-db-vue/HEAD/src/assets/favicon.ico -------------------------------------------------------------------------------- /src/assets/index_bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nikke-db/nikke-db-vue/HEAD/src/assets/index_bg.jpg -------------------------------------------------------------------------------- /src/assets/nikke-db.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nikke-db/nikke-db-vue/HEAD/src/assets/nikke-db.png -------------------------------------------------------------------------------- /src/assets/index_bg2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nikke-db/nikke-db-vue/HEAD/src/assets/index_bg2.webp -------------------------------------------------------------------------------- /src/assets/notice_imgs/HQ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nikke-db/nikke-db-vue/HEAD/src/assets/notice_imgs/HQ.png -------------------------------------------------------------------------------- /src/assets/notice_imgs/LQ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nikke-db/nikke-db-vue/HEAD/src/assets/notice_imgs/LQ.png -------------------------------------------------------------------------------- /src/assets/notice_imgs/fourk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nikke-db/nikke-db-vue/HEAD/src/assets/notice_imgs/fourk.png -------------------------------------------------------------------------------- /src/assets/notice_imgs/layerEditor1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nikke-db/nikke-db-vue/HEAD/src/assets/notice_imgs/layerEditor1.png -------------------------------------------------------------------------------- /src/assets/notice_imgs/layerEditor2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nikke-db/nikke-db-vue/HEAD/src/assets/notice_imgs/layerEditor2.png -------------------------------------------------------------------------------- /src/assets/notice_imgs/layerEditor3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nikke-db/nikke-db-vue/HEAD/src/assets/notice_imgs/layerEditor3.png -------------------------------------------------------------------------------- /src/assets/notice_imgs/layerEditor4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nikke-db/nikke-db-vue/HEAD/src/assets/notice_imgs/layerEditor4.png -------------------------------------------------------------------------------- /src/assets/notice_imgs/layerEditor5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nikke-db/nikke-db-vue/HEAD/src/assets/notice_imgs/layerEditor5.png -------------------------------------------------------------------------------- /src/utils/interfaces/contributor.ts: -------------------------------------------------------------------------------- 1 | export interface help { 2 | name: string 3 | contribution: string 4 | tier: string | null 5 | } 6 | -------------------------------------------------------------------------------- /src/utils/interfaces/tierlist/character.ts: -------------------------------------------------------------------------------- 1 | export interface character { 2 | id: string 3 | name: string 4 | subtext: string 5 | } 6 | -------------------------------------------------------------------------------- /src/utils/interfaces/levelingRecord.ts: -------------------------------------------------------------------------------- 1 | export interface levelingRecordInterface { 2 | level: number 3 | gold: number 4 | character_exp: number 5 | character_exp_2: number 6 | } 7 | -------------------------------------------------------------------------------- /src/utils/interfaces/outpostBattleRecords.ts: -------------------------------------------------------------------------------- 1 | export interface outpostBattleRecordInterface { 2 | id: number, 3 | credit: number, 4 | character_exp1: number, 5 | user_exp: number, 6 | character_exp2: number 7 | } -------------------------------------------------------------------------------- /tsconfig.vitest.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.app.json", 3 | "exclude": [], 4 | "compilerOptions": { 5 | "lib": [ 6 | "ES2021.String" 7 | ], 8 | "types": ["node", "jsdom"] 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "semi": false, 3 | "tabWidth": 2, 4 | "singleQuote": true, 5 | "trailingComma": "none", 6 | "bracketSpacing": true, 7 | "bracketSameLine": false, 8 | "arrowParens": "always", 9 | "printWidth": 999 10 | } -------------------------------------------------------------------------------- /src/utils/json/Gallery/777.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "777/", 3 | "type": "large", 4 | "id": "777", 5 | "title": "777", 6 | "content": [ 7 | { 8 | "name": "EventTitle_BunnyX777_01", 9 | "text": "777 1" 10 | } 11 | ] 12 | } -------------------------------------------------------------------------------- /src/utils/style/global_variables.less: -------------------------------------------------------------------------------- 1 | @main-dark-theme: #212529; 2 | @main-dark-theme-transparent: #212529ea; 3 | @alt-dark-theme: #2f353a; 4 | @alt-dark-theme-transparent: #2f353aea; 5 | @grey-color: rgb(180, 175, 175); 6 | @gold: #ffd700; 7 | @naive-green: #63e2b7; 8 | -------------------------------------------------------------------------------- /src/utils/json/Gallery/boomsday.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "boomsday/", 3 | "type": "large", 4 | "id": "boomsday", 5 | "title": "BOOM's DAY", 6 | "content": [ 7 | { 8 | "name": "EventTitle_BoomsDay_01", 9 | "text": "BOOM's DAY 1" 10 | } 11 | ] 12 | } -------------------------------------------------------------------------------- /src/utils/json/Gallery/colorless.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "colorless/", 3 | "type": "large", 4 | "id": "colorless", 5 | "title": "Colorless", 6 | "content": [ 7 | { 8 | "name": "colorless_bg_list_hard", 9 | "text": "Colorless 1" 10 | } 11 | ] 12 | } -------------------------------------------------------------------------------- /src/utils/json/Gallery/darkhero.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "darkhero/", 3 | "type": "large", 4 | "id": "darkhero", 5 | "title": "D.ARK HERO", 6 | "content": [ 7 | { 8 | "name": "EventTitle_Darkhero_01", 9 | "text": "D.ARK HERO 1" 10 | } 11 | ] 12 | } -------------------------------------------------------------------------------- /src/utils/json/Gallery/liarsend.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "liarsend/", 3 | "type": "large", 4 | "id": "liarsend", 5 | "title": "Liar's End", 6 | "content": [ 7 | { 8 | "name": "EventScene_lairsend_01", 9 | "text": "Liar's End" 10 | } 11 | ] 12 | } -------------------------------------------------------------------------------- /src/utils/interfaces/tierlist/tier.ts: -------------------------------------------------------------------------------- 1 | import type { character } from '@/utils/interfaces/tierlist/character' 2 | 3 | export interface tier { 4 | name: string 5 | color_bg: string 6 | color_name: string 7 | subtext: string 8 | items: character[] 9 | } 10 | -------------------------------------------------------------------------------- /src/utils/json/Gallery/doutsiders.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "doutsiders/", 3 | "type": "large", 4 | "id": "doutsiders", 5 | "title": "D Outsiders", 6 | "content": [ 7 | { 8 | "name": "EventScene_Doutsiders", 9 | "text": "D Outsiders" 10 | } 11 | ] 12 | } -------------------------------------------------------------------------------- /src/utils/json/Gallery/newflavor.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "newflavor/", 3 | "type": "large", 4 | "id": "newflavor", 5 | "title": "New Flavor", 6 | "content": [ 7 | { 8 | "name": "newflavor_list_normal_bg", 9 | "text": "New Flavor 1" 10 | } 11 | ] 12 | } -------------------------------------------------------------------------------- /src/utils/json/Gallery/bonds.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "bonds/", 3 | "type": "large", 4 | "id": "bonds", 5 | "title": "Bond Exclusive Scenes", 6 | "content": [ 7 | { 8 | "name": "EventScene_Evacuation", 9 | "text": "Rapunzel Episode 4" 10 | } 11 | ] 12 | } -------------------------------------------------------------------------------- /src/utils/json/Gallery/killthelord.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "killthelord/", 3 | "type": "large", 4 | "id": "killthelord", 5 | "title": "Kill The Lord", 6 | "content": [ 7 | { 8 | "name": "bg_killthelord_nor", 9 | "text": "Kill The Lord 1" 10 | } 11 | ] 12 | } -------------------------------------------------------------------------------- /src/utils/json/Gallery/fullfoolday.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "fullfoolday/", 3 | "type": "large", 4 | "id": "fullfoolday", 5 | "title": "Full Fool Day", 6 | "content": [ 7 | { 8 | "name": "EventScene_FullFoolDay_01", 9 | "text": "Full Fool Day 2023" 10 | } 11 | ] 12 | } -------------------------------------------------------------------------------- /src/utils/json/Gallery/brandnewyear.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "brandnewyear/", 3 | "type": "large", 4 | "id": "brandnewyear", 5 | "title": "Brand New Year", 6 | "content": [ 7 | { 8 | "name": "EventScene_BrandNewYear_01", 9 | "text": "Brand New Year 1" 10 | } 11 | ] 12 | } -------------------------------------------------------------------------------- /src/utils/json/Gallery/nyanyaparadise.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "nyanyaparadise/", 3 | "type": "large", 4 | "id": "nyanyaparadise", 5 | "title": "Nya Nya Paradise", 6 | "content": [ 7 | { 8 | "name": "EventTitle_NyaNyaParadise_01", 9 | "text": "Nya Nya Paradise 1" 10 | } 11 | ] 12 | } -------------------------------------------------------------------------------- /src/utils/interfaces/gallery.ts: -------------------------------------------------------------------------------- 1 | export interface galleryItemInterface { 2 | name: string, 3 | text: string 4 | } 5 | 6 | export interface galleryInterface { 7 | path: string, 8 | type: string, 9 | title: string, 10 | id: string, 11 | content: galleryItemInterface[], 12 | notice: string | null 13 | } -------------------------------------------------------------------------------- /src/components/common/Spine/WrapperPC.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@vue/tsconfig/tsconfig.dom.json", 3 | "include": ["env.d.ts", "src/**/*", "src/**/*.vue", "*.vue"], 4 | "exclude": ["src/**/__tests__/*"], 5 | "compilerOptions": { 6 | // "composite": true, 7 | "baseUrl": ".", 8 | "paths": { 9 | "@/*": ["./src/*"] 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/utils/json/Gallery/forrest.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "forrest/", 3 | "type": "large", 4 | "id": "forrest", 5 | "title": "For Rest", 6 | "content": [ 7 | { 8 | "name": "EventTitle_forrest_01", 9 | "text": "For Rest 1" 10 | },{ 11 | "name": "forrest_hard_bg", 12 | "text": "For Rest 2" 13 | } 14 | ] 15 | } -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "files": [], 3 | "references": [ 4 | { 5 | "path": "./tsconfig.node.json" 6 | }, 7 | { 8 | "path": "./tsconfig.app.json" 9 | }, 10 | { 11 | "path": "./tsconfig.vitest.json" 12 | } 13 | ], 14 | "compilerOptions": { 15 | "lib": [ 16 | "ES2021.String" 17 | ] 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/utils/interfaces/tierlist/tierlist.ts: -------------------------------------------------------------------------------- 1 | import type { tier } from '@/utils/interfaces/tierlist/tier' 2 | 3 | export interface tierlist { 4 | name: string 5 | author: string 6 | tiers: tier[], 7 | benchTier: tier //bench tier will be for characters not in the tier list yet 8 | print_NikkeDB: boolean 9 | printBenchTier: boolean 10 | } 11 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import { createApp } from 'vue' 2 | import { createPinia } from 'pinia' 3 | import naive from 'naive-ui' 4 | 5 | import Wrapper from './Wrapper.vue' 6 | import router from './router' 7 | 8 | const pinia = createPinia() 9 | 10 | const app = createApp(Wrapper) 11 | 12 | app.use(pinia) 13 | app.use(router) 14 | app.use(naive) 15 | 16 | app.mount('#app') 17 | -------------------------------------------------------------------------------- /src/utils/json/Gallery/jinxplayer.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "jinxplayer/", 3 | "type": "large", 4 | "id": "jinxplayer", 5 | "title": "Jinx Player", 6 | "content": [ 7 | { 8 | "name": "jinxplayer_list_bg_normal", 9 | "text": "Jinx Player 1" 10 | }, 11 | { 12 | "name": "jinxplayer_list_bg_hard", 13 | "text": "Jinx Player 2" 14 | } 15 | ] 16 | } -------------------------------------------------------------------------------- /src/utils/json/Gallery/juveniledays.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "juveniledays/", 3 | "type": "large", 4 | "id": "juveniledays", 5 | "title": "Juvenile Days", 6 | "content": [ 7 | { 8 | "name": "juveniledays_list_bg_nor", 9 | "text": "Juvenile Days 1" 10 | }, 11 | { 12 | "name": "juveniledays_list_bg_hard", 13 | "text": "Juvenile Days 2" 14 | } 15 | ] 16 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | .DS_Store 12 | dist 13 | dist-ssr 14 | coverage 15 | *.local 16 | 17 | /cypress/videos/ 18 | /cypress/screenshots/ 19 | 20 | # Editor directories and files 21 | .vscode/* 22 | !.vscode/extensions.json 23 | .idea 24 | *.suo 25 | *.ntvs* 26 | *.njsproj 27 | *.sln 28 | *.sw? 29 | -------------------------------------------------------------------------------- /src/utils/json/Gallery/blankticket.json: -------------------------------------------------------------------------------- 1 | {"path":"blankticket/","type":"large","id":"blankticket","title":"Blank Ticket","content":[{"name":"blankticket_list_nor_top.png","text":"Blank Ticket 1"},{"name":"blankticket_main_bg_01.png","text":"Blank Ticket 2"},{"name":"blankticket_main_bg_01_mid.png","text":"Blank Ticket 3"},{"name":"blankticket_main_bg_02.png","text":"Blank Ticket 4"},{"name":"blankticket_main_bg_02_mid.png","text":"Blank Ticket 5"}]} -------------------------------------------------------------------------------- /src/utils/json/Gallery/rebornevil.json: -------------------------------------------------------------------------------- 1 | {"path":"rebornevil/","type":"large","id":"rebornevil","title":"Reborn Evil","notice":"Compressed from 24 to 1.5mb","content":[{"name":"EventScene_ce007_01.webp","text":"Reborn Evil 1"},{"name":"EventScene_ce007_02.webp","text":"Reborn Evil 2"},{"name":"EventScene_ce007_03_1.webp","text":"Reborn Evil 3"},{"name":"EventScene_ce007_04.webp","text":"Reborn Evil 4"},{"name":"EventScene_ce007_05.webp","text":"Reborn Evil 5"}]} -------------------------------------------------------------------------------- /vitest.config.ts: -------------------------------------------------------------------------------- 1 | import { fileURLToPath } from 'node:url' 2 | import { mergeConfig, defineConfig, configDefaults } from 'vitest/config' 3 | import viteConfig from './vite.config' 4 | 5 | export default mergeConfig( 6 | viteConfig, 7 | defineConfig({ 8 | test: { 9 | environment: 'jsdom', 10 | exclude: [...configDefaults.exclude, 'e2e/*'], 11 | root: fileURLToPath(new URL('./', import.meta.url)) 12 | } 13 | }) 14 | ) 15 | -------------------------------------------------------------------------------- /tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@tsconfig/node18/tsconfig.json", 3 | "include": [ 4 | "vite.config.*", 5 | "vitest.config.*", 6 | "cypress.config.*", 7 | "nightwatch.conf.*", 8 | "playwright.config.*" 9 | ], 10 | "compilerOptions": { 11 | "composite": true, 12 | "module": "ESNext", 13 | "moduleResolution": "Bundler", 14 | "types": ["node"], 15 | "lib": [ 16 | "ES2021.String" 17 | ] 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/utils/json/Gallery/outerautomata.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "outerautomata/", 3 | "type": "large", 4 | "id": "outerautomata", 5 | "title": "Outer Automata", 6 | "content": [ 7 | { 8 | "name": "EventTitle_OUTERAUTOMATA_02", 9 | "text": "Outer Automata 1" 10 | }, 11 | { 12 | "name": "EventScene_ce_02_01", 13 | "text": "Outer Automata 2" 14 | }, 15 | { 16 | "name": "EventScene_ce_02_02", 17 | "text": "Outer Automata 3" 18 | } 19 | 20 | ] 21 | } -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Nikke-DB 9 | 10 | 11 |
12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/utils/json/Gallery/foolburstday.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "foolburstday/", 3 | "type": "large", 4 | "id": "foolburstday", 5 | "title": "Fool Burst Day", 6 | "content": [ 7 | { 8 | "name": "2025FoolsDay", 9 | "text": "Fool Burst Day 1" 10 | }, 11 | { 12 | "name": "EventScene_foolburstday_01", 13 | "text": "Fool Burst Day 2" 14 | }, 15 | { 16 | "name": "EventScene_foolburstday_02", 17 | "text": "Fool Burst Day 3" 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /src/utils/json/Gallery/overthehorizon.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "overthehorizon/", 3 | "type": "large", 4 | "id": "overthehorizon", 5 | "title": "Over the Horizon", 6 | "content": [ 7 | { 8 | "name": "EventTitle_overthehorizon_01", 9 | "text": "Over the Horizon 1" 10 | }, 11 | { 12 | "name": "overthehorizon_list_nor_top", 13 | "text": "Over the Horizon 2" 14 | }, 15 | { 16 | "name": "overthehorizon_list_hard_top", 17 | "text": "Over the Horizon 3" 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /src/stores/loaderStore.ts: -------------------------------------------------------------------------------- 1 | import { ref, type Ref } from 'vue' 2 | import { defineStore } from 'pinia' 3 | 4 | export const useLoaderStore = defineStore('loader', () => { 5 | const load = ref('done') as Ref<'done' | 'loading' | 'error'> 6 | 7 | const beginLoad = () => { 8 | load.value = 'loading' 9 | } 10 | 11 | const endLoad = () => { 12 | load.value = 'done' 13 | } 14 | 15 | const errorLoad = () => { 16 | load.value = 'error' 17 | } 18 | 19 | return { load, beginLoad, endLoad, errorLoad } 20 | }) 21 | -------------------------------------------------------------------------------- /src/utils/json/Gallery/bluewaterisland.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "bluewaterisland/", 3 | "type": "large", 4 | "id": "bluewaterisland", 5 | "title": "Blue Water Island", 6 | "content": [ 7 | { 8 | "name": "EventScene_BluewaterIsland_02", 9 | "text": "Blue Water Island 1" 10 | }, 11 | { 12 | "name": "EventScene_BluewaterIsland_03", 13 | "text": "Blue Water Island 2" 14 | }, 15 | { 16 | "name": "EventScene_BluewaterIsland_04", 17 | "text": "Blue Water Island 3" 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /src/components/common/Footer/Footer.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 11 | 12 | 21 | -------------------------------------------------------------------------------- /src/utils/json/Gallery/goninjathief.json: -------------------------------------------------------------------------------- 1 | {"path":"goninjathief/","type":"large","id":"goninjathief","title":"Go! Ninja Thief","content":[{"name":"goninjathief_list_hard_char.png","text":"Go! Ninja Thief 1"},{"name":"goninjathief_main_char_delta.png","text":"Go! Ninja Thief 2"},{"name":"goninjathief_main_char_miranda.png","text":"Go! Ninja Thief 3"},{"name":"goninjathief_main_char_phantom.png","text":"Go! Ninja Thief 4"},{"name":"goninjathief_main_char_poli.png","text":"Go! Ninja Thief 5"},{"name":"goninjathief_main_char_quency.png","text":"Go! Ninja Thief 6"}]} -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE 2 | Version 2, December 2004 3 | 4 | Copyright (C) 2004 Sam Hocevar 5 | 6 | Everyone is permitted to copy and distribute verbatim or modified 7 | copies of this license document, and changing it is allowed as long 8 | as the name is changed. 9 | 10 | DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE 11 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 12 | 13 | 0. You just DO WHAT THE FUCK YOU WANT TO. 14 | 15 | http://www.wtfpl.net -------------------------------------------------------------------------------- /src/utils/interfaces/live2d.ts: -------------------------------------------------------------------------------- 1 | export interface live2d_interface { 2 | name: string 3 | id: string 4 | tl?: string 5 | } 6 | 7 | export interface AttachmentItemColorInterface { 8 | r: number, 9 | b: number, 10 | g: number, 11 | a: number 12 | } 13 | export interface AttachmentItemInterface { 14 | bones: number[], 15 | color: AttachmentItemColorInterface, 16 | name: string 17 | } 18 | 19 | export interface AttachmentInterface { 20 | [key: string]: AttachmentItemInterface 21 | } 22 | 23 | export interface RailStyleInterface { 24 | focused: boolean, 25 | checked: boolean 26 | } -------------------------------------------------------------------------------- /src/utils/json/Gallery/madeinrush.json: -------------------------------------------------------------------------------- 1 | {"path":"madeinrush/","type":"large","id":"madeinrush","title":"Made In Rush","content":[{"name":"madeinrush_cutscene_1.png","text":"Made In Rush 1"},{"name":"madeinrush_cutscene_2.png","text":"Made In Rush 2"},{"name":"madeinrush_cutscene_3.png","text":"Made In Rush 3"},{"name":"madeinrush_cutscene_4.png","text":"Made In Rush 4"},{"name":"madeinrush_cutscene_5.png","text":"Made In Rush 5"},{"name":"madeinrush_cutscene_6.png","text":"Made In Rush 6"},{"name":"madeinrush_cutscene_7.png","text":"Made In Rush 7"},{"name":"madeinrush_cutscene_8.png","text":"Made In Rush 8"}]} -------------------------------------------------------------------------------- /src/utils/json/Gallery/miraclesnow.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "miraclesnow/", 3 | "type": "large", 4 | "id": "miraclesnow", 5 | "title": "Miracle Snow", 6 | "content": [ 7 | { 8 | "name": "EventScene_MiracleSnow_01", 9 | "text": "Miracle Snow 1" 10 | }, 11 | { 12 | "name": "EventScene_MiracleSnow_02", 13 | "text": "Miracle Snow 2" 14 | }, 15 | { 16 | "name": "EventScene_MiracleSnow_03", 17 | "text": "Miracle Snow 3" 18 | }, 19 | { 20 | "name": "EventScene_MiracleSnow_04", 21 | "text": "Miracle Snow 4" 22 | } 23 | ] 24 | } -------------------------------------------------------------------------------- /src/utils/json/Gallery/recipeforyou.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "recipeforyou/", 3 | "type": "large", 4 | "id": "recipeforyou", 5 | "title": "Re:Cipe For You", 6 | "content": [ 7 | { 8 | "name": "EventTitle_ReCIPEFORYOU_01", 9 | "text": "Re:Cipe For You 1" 10 | }, 11 | { 12 | "name": "EventTitle_ReCIPEFORYOU_02", 13 | "text": "Re:Cipe For You 2" 14 | }, 15 | { 16 | "name": "EventScene_ce_03_03", 17 | "text": "Re:Cipe For You 3" 18 | }, 19 | { 20 | "name": "EventScene_ce_03_02", 21 | "text": "Re:Cipe For You 4" 22 | } 23 | ] 24 | } -------------------------------------------------------------------------------- /src/components/common/Spine/Tools/BackgroundImagePack.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 16 | 17 | 24 | -------------------------------------------------------------------------------- /src/utils/json/Gallery/side04.json: -------------------------------------------------------------------------------- 1 | {"path":"side04/","type":"large","id":"side04","title":"Eden Spear","notice":"Compressed from 24 to 1.9mb","content":[{"name":"EventScene_Side_04_01_1.webp","text":"Eden Spear 1"},{"name":"EventScene_Side_04_01_2.webp","text":"Eden Spear 2"},{"name":"EventScene_Side_04_01_3.webp","text":"Eden Spear 3"},{"name":"EventScene_Side_04_01_4.webp","text":"Eden Spear 4"},{"name":"EventScene_Side_04_01_5.webp","text":"Eden Spear 5"},{"name":"EventScene_Side_04_02_1.webp","text":"Eden Spear 6"},{"name":"EventScene_Side_04_02_2.webp","text":"Eden Spear 7"},{"name":"EventScene_Side_04_03.webp","text":"Eden Spear 8"}]} -------------------------------------------------------------------------------- /src/utils/utils.ts: -------------------------------------------------------------------------------- 1 | const rand = (max: number) => { 2 | return Math.floor(Math.random() * max) 3 | } 4 | 5 | const rgb2hex = (r: number, g: number, b: number) => { 6 | let rr = r.toString(16) 7 | let gg = g.toString(16) 8 | let bb = b.toString(16) 9 | 10 | if (rr.length === 1) rr = '0' + rr 11 | if (gg.length === 1) gg = '0' + gg 12 | if (bb.length === 1) bb = '0' + bb 13 | 14 | return '#' + rr + gg + bb 15 | } 16 | 17 | const returnRandomHex = () => { 18 | const r = rand(255) 19 | const g = rand(255) 20 | const b = rand(255) 21 | return rgb2hex(r, g, b) 22 | } 23 | 24 | export { rand, rgb2hex, returnRandomHex } -------------------------------------------------------------------------------- /src/utils/json/Gallery/bbqmaster.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "bbqmaster/", 3 | "type": "large", 4 | "id": "bbqmaster", 5 | "title": "BBQ Master", 6 | "content": [ 7 | { 8 | "name": "EventScene_bbqmaster_01", 9 | "text": "BBQ 1" 10 | }, 11 | { 12 | "name": "EventScene_bbqmaster_02", 13 | "text": "BBQ 2" 14 | }, 15 | { 16 | "name": "EventScene_bbqmaster_03", 17 | "text": "BBQ 3" 18 | }, 19 | { 20 | "name": "EventScene_bbqmaster_04", 21 | "text": "BBQ 4" 22 | }, 23 | { 24 | "name": "EventScene_bbqmaster_05", 25 | "text": "BBQ 5" 26 | } 27 | ] 28 | } -------------------------------------------------------------------------------- /src/stores/market.ts: -------------------------------------------------------------------------------- 1 | import { defineStore } from 'pinia' 2 | import { useLoaderStore } from './loaderStore' 3 | import { useGlobalParamsStore } from './globalParamsStore' 4 | import { useRoute } from 'vue-router' 5 | import { useLive2dStore } from './live2dStore' 6 | import { useMessageStore } from './messageStore' 7 | 8 | export const useMarket = defineStore('market', () => { 9 | const load = useLoaderStore() 10 | const globalParams = useGlobalParamsStore() 11 | const live2d = useLive2dStore() 12 | const route = useRoute() 13 | const message = useMessageStore() 14 | 15 | return { load, globalParams, live2d, route, message } 16 | }) 17 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { fileURLToPath, URL } from 'node:url' 2 | 3 | import { defineConfig } from 'vite' 4 | import vue from '@vitejs/plugin-vue' 5 | import vueJsx from '@vitejs/plugin-vue-jsx' 6 | 7 | // https://vitejs.dev/config/ 8 | export default defineConfig({ 9 | plugins: [vue(), vueJsx()], 10 | resolve: { 11 | alias: { 12 | '@': fileURLToPath(new URL('./src', import.meta.url)) 13 | } 14 | }, 15 | server: { 16 | proxy: { 17 | '/alltalk': { 18 | target: 'http://127.0.0.1:7851', 19 | changeOrigin: true, 20 | rewrite: (path) => path.replace(/^\/alltalk/, '') 21 | } 22 | } 23 | } 24 | }) 25 | -------------------------------------------------------------------------------- /src/components/common/Spine/Tools/ResetCoordinates.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 22 | 23 | 29 | -------------------------------------------------------------------------------- /src/utils/json/Gallery/side01.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "side01/", 3 | "type": "large", 4 | "id": "side01", 5 | "title": "Second Affection", 6 | "content": [ 7 | { 8 | "name": "EventScene_Side_01_01", 9 | "text": "Side Story 01-1" 10 | }, 11 | { 12 | "name": "EventScene_Side_01_02", 13 | "text": "Side Story 01-2" 14 | }, 15 | { 16 | "name": "EventScene_Side_01_03", 17 | "text": "Side Story 01-3" 18 | }, 19 | { 20 | "name": "EventScene_Side_01_04", 21 | "text": "Side Story 01-4" 22 | }, 23 | { 24 | "name": "EventScene_Side_01_05", 25 | "text": "Side Story 01-5" 26 | } 27 | ] 28 | } -------------------------------------------------------------------------------- /src/components/views/StoryGenerator.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /src/stores/messageStore.ts: -------------------------------------------------------------------------------- 1 | import { defineStore } from 'pinia' 2 | import { ref } from 'vue' 3 | import type { MessageApiInjection } from 'naive-ui/es/message/src/MessageProvider' 4 | 5 | export const useMessageStore = defineStore('message', () => { 6 | const message: MessageApiInjection | any = ref('') 7 | const short_message = { duration: 1000 } 8 | const long_message = { duration: 10000 } 9 | 10 | const setMessage = (messageInjection: MessageApiInjection) => { 11 | message.value = messageInjection 12 | } 13 | 14 | const getMessage = (): MessageApiInjection => { 15 | return message.value 16 | } 17 | 18 | return { message, setMessage, getMessage, long_message, short_message } 19 | }) 20 | -------------------------------------------------------------------------------- /src/components/common/Spine/Tools/ChangeQualityMode.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 18 | 19 | 25 | -------------------------------------------------------------------------------- /src/utils/json/Gallery/side02.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "side02/", 3 | "type": "large", 4 | "id": "side02", 5 | "title": "Wordless", 6 | "content": [ 7 | { 8 | "name": "EventScene_Side_02_01_1", 9 | "text": "Side Story 02-1" 10 | }, 11 | { 12 | "name": "EventScene_Side_02_01_2", 13 | "text": "Side Story 02-2" 14 | }, 15 | { 16 | "name": "EventScene_Side_02_01_3", 17 | "text": "Side Story 02-3" 18 | }, 19 | { 20 | "name": "EventScene_Side_02_01_4", 21 | "text": "Side Story 02-4" 22 | }, 23 | { 24 | "name": "EventScene_Side_02_02", 25 | "text": "Side Story 02-5" 26 | }, 27 | { 28 | "name": "EventScene_Side_02_03", 29 | "text": "Side Story 02-6" 30 | } 31 | ] 32 | } -------------------------------------------------------------------------------- /src/stores/globalParamsStore.ts: -------------------------------------------------------------------------------- 1 | import { ref } from 'vue' 2 | import { defineStore } from 'pinia' 3 | 4 | export const useGlobalParamsStore = defineStore('globalParams', () => { 5 | const isMobile = ref(true) 6 | const isMobileHeaderVisibile = ref(true) 7 | 8 | const setMobile = () => { 9 | isMobile.value = true 10 | } 11 | 12 | const setComputer = () => { 13 | isMobile.value = false 14 | } 15 | 16 | const hideMobileHeader = () => { 17 | isMobileHeaderVisibile.value = false 18 | } 19 | 20 | const showMobileHeader = () => { 21 | isMobileHeaderVisibile.value = true 22 | } 23 | 24 | return { 25 | isMobile, 26 | setMobile, 27 | setComputer, 28 | isMobileHeaderVisibile, 29 | hideMobileHeader, 30 | showMobileHeader 31 | } 32 | }) 33 | -------------------------------------------------------------------------------- /src/components/common/Spine/Tools/HideUI.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 22 | 23 | 29 | -------------------------------------------------------------------------------- /src/components/common/Spine/Tools/Yapping.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 26 | 27 | -------------------------------------------------------------------------------- /src/components/views/Tools.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 27 | 28 | 37 | -------------------------------------------------------------------------------- /src/components/common/Header/routes2Display.ts: -------------------------------------------------------------------------------- 1 | export interface route2DisplayInterface { 2 | path: string 3 | text: string 4 | mobile: boolean 5 | } 6 | 7 | export const ROUTES: route2DisplayInterface[] = [ 8 | { 9 | path: 'tools', 10 | text: 'Tools', 11 | mobile: true 12 | }, 13 | { 14 | path: 'visualiser', 15 | text: 'Live2D Visualiser', 16 | mobile: true 17 | }, 18 | { 19 | path: 'chibi', 20 | text: 'Chibi', 21 | mobile: true 22 | }, 23 | { 24 | path: 'gallery', 25 | text: 'Gallery', 26 | mobile: true 27 | }, 28 | { 29 | path: 'story-gen', 30 | text: 'Story/Roleplaying Generator', 31 | mobile: true 32 | } 33 | // { 34 | // path: 'tierlistmaker', 35 | // text: 'Tier List Maker', 36 | // mobile: false 37 | // } 38 | ] 39 | -------------------------------------------------------------------------------- /src/components/common/Spine/Tools/Export.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 25 | 26 | 35 | -------------------------------------------------------------------------------- /src/utils/json/Gallery/neverland.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "neverland/", 3 | "type": "large", 4 | "id": "neverland", 5 | "title": "Neverland", 6 | "content": [ 7 | { 8 | "name": "EventScene_NeverLand_01", 9 | "text": "Neverland 1" 10 | }, 11 | { 12 | "name": "EventScene_NeverLand_02_1", 13 | "text": "Neverland 2" 14 | }, 15 | { 16 | "name": "EventScene_NeverLand_02_2", 17 | "text": "Neverland 3" 18 | }, 19 | { 20 | "name": "EventScene_NeverLand_03", 21 | "text": "Neverland 4" 22 | }, 23 | { 24 | "name": "EventScene_NeverLand_04", 25 | "text": "Neverland 5" 26 | }, 27 | { 28 | "name": "EventScene_NeverLand_05_1", 29 | "text": "Neverland 6" 30 | }, 31 | { 32 | "name": "EventScene_NeverLand_05_2", 33 | "text": "Neverland 7" 34 | } 35 | ] 36 | } -------------------------------------------------------------------------------- /src/components/common/Gallery/ButtonTemplate.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 27 | 28 | -------------------------------------------------------------------------------- /src/components/common/Tierlistmaker/CharacterCard.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 24 | 25 | -------------------------------------------------------------------------------- /src/utils/json/Gallery/story8.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "story8/", 3 | "type": "large", 4 | "id": "story8", 5 | "title": "Chapters 37 to 38", 6 | "notice": "Compressed from 34mb total to 1.5mb", 7 | "content": [ 8 | { 9 | "name": "EventScene_Chap_37_01", 10 | "text": "Oh Lord Oh God" 11 | }, 12 | { 13 | "name": "EventScene_Chap_37_02", 14 | "text": "Need this but with behemoth" 15 | }, 16 | { 17 | "name": "EventScene_Chap_38_01", 18 | "text": "1% drop rate future characters despite note being canonical OverSpecs" 19 | }, 20 | { 21 | "name": "EventScene_Chap_38_02_1", 22 | "text": "Beam" 23 | }, 24 | { 25 | "name": "EventScene_Chap_38_02_2", 26 | "text": "bbeeaamm" 27 | }, 28 | { 29 | "name": "EventScene_Chap_38_02_3", 30 | "text": "bbbeeeaaammm" 31 | }, 32 | { 33 | "name": "EventScene_Chap_38_03", 34 | "text": "A hole's a hole." 35 | } 36 | ] 37 | } -------------------------------------------------------------------------------- /src/components/common/Header/HeaderSelector.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 32 | 33 | 38 | -------------------------------------------------------------------------------- /src/components/views/L2D.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /src/utils/json/Gallery/voltroad.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "voltroad/", 3 | "type": "large", 4 | "id": "voltroad", 5 | "title": "Volt Road", 6 | "content": [ 7 | { 8 | "name": "EventScene_voltroad_SD_01_01", 9 | "text": "Volt Road 1" 10 | }, 11 | { 12 | "name": "EventScene_voltroad_SD_01_02", 13 | "text": "Volt Road 2" 14 | }, 15 | { 16 | "name": "EventScene_voltroad_SD_01_03", 17 | "text": "Volt Road 3" 18 | }, 19 | { 20 | "name": "EventScene_voltroad_SD_01_04", 21 | "text": "Volt Road 4" 22 | }, 23 | { 24 | "name": "EventScene_voltroad_SD_01_05", 25 | "text": "Volt Road 5" 26 | }, 27 | { 28 | "name": "EventScene_voltroad_SD_01_06", 29 | "text": "Volt Road 6" 30 | }, 31 | { 32 | "name": "EventScene_voltroad_SD_01_07", 33 | "text": "Volt Road 7" 34 | }, 35 | { 36 | "name": "EventScene_voltroad_SD_01_08", 37 | "text": "Volt Road 8" 38 | } 39 | ] 40 | } -------------------------------------------------------------------------------- /src/components/common/Credits/Template.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 35 | 36 | 42 | -------------------------------------------------------------------------------- /src/utils/json/Gallery/evangelion.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "evangelion/", 3 | "type": "large", 4 | "id": "evangelion", 5 | "title": "Evangelion", 6 | "content": [ 7 | { 8 | "name": "ce004_part03_bg_01", 9 | "text": "Evangelion 1" 10 | }, 11 | { 12 | "name": "EventScene_ce004_01_1", 13 | "text": "Evangelion 2" 14 | }, 15 | { 16 | "name": "EventScene_ce004_01_2", 17 | "text": "Evangelion 3" 18 | }, 19 | { 20 | "name": "EventScene_ce004_02", 21 | "text": "Evangelion 4" 22 | }, 23 | { 24 | "name": "EventScene_ce004_03", 25 | "text": "Evangelion 5" 26 | }, 27 | { 28 | "name": "EventScene_ce004_04", 29 | "text": "Evangelion 6" 30 | }, 31 | { 32 | "name": "EventScene_ce004_05", 33 | "text": "Evangelion 7" 34 | }, 35 | { 36 | "name": "EventScene_ce004_06", 37 | "text": "Evangelion 8" 38 | }, 39 | { 40 | "name": "EventScene_ce004_07", 41 | "text": "Evangelion 9" 42 | } 43 | ] 44 | } -------------------------------------------------------------------------------- /src/utils/json/Gallery/absolute.json: -------------------------------------------------------------------------------- 1 | {"path":"absolute/","type":"large","id":"absolute","title":"ABSOLUTE","notice":"Compressed from 39 to 2.4mb","content":[{"name":"EventScene_absolute_01_1.webp","text":"ABSOLUTE 1"},{"name":"EventScene_absolute_02_1.webp","text":"ABSOLUTE 2"},{"name":"EventScene_absolute_02_2.webp","text":"ABSOLUTE 3"},{"name":"EventScene_absolute_02_3.webp","text":"ABSOLUTE 4"},{"name":"EventScene_absolute_02_4.webp","text":"ABSOLUTE 5"},{"name":"EventScene_absolute_03_1.webp","text":"ABSOLUTE 6"},{"name":"EventScene_absolute_04_1.webp","text":"ABSOLUTE 7"},{"name":"EventScene_absolute_04_2.webp","text":"ABSOLUTE 8"},{"name":"EventScene_absolute_05_1.webp","text":"ABSOLUTE 9"},{"name":"absolute_main_part1_chr_01.webp","text":"ABSOLUTE 10"},{"name":"absolute_main_part1_chr_02.webp","text":"ABSOLUTE 11"},{"name":"absolute_main_part1_chr_03.webp","text":"ABSOLUTE 12"},{"name":"absolute_main_part2_char_01.webp","text":"ABSOLUTE 13"},{"name":"absolute_main_part2_char_02.webp","text":"ABSOLUTE 14"},{"name":"absolute_main_part2_char_03.webp","text":"ABSOLUTE 15"}]} -------------------------------------------------------------------------------- /src/utils/json/Gallery/goldencoinrush.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "goldencoinrush/", 3 | "type": "large", 4 | "id": "goldencoinrush", 5 | "title": "Golden Coin Rush", 6 | "content": [ 7 | { 8 | "name": "EventScene_GoldenCoinRush_01_1", 9 | "text": "Golden Coin Rush 1" 10 | }, 11 | { 12 | "name": "EventScene_GoldenCoinRush_01_2", 13 | "text": "Golden Coin Rush 2" 14 | }, 15 | { 16 | "name": "EventScene_GoldenCoinRush_02", 17 | "text": "Golden Coin Rush 3" 18 | }, 19 | { 20 | "name": "EventScene_GoldenCoinRush_03", 21 | "text": "Golden Coin Rush 4" 22 | }, 23 | { 24 | "name": "EventScene_GoldenCoinRush_04", 25 | "text": "Golden Coin Rush 5" 26 | }, 27 | { 28 | "name": "EventScene_GoldenCoinRush_05_1", 29 | "text": "Golden Coin Rush 6" 30 | }, 31 | { 32 | "name": "EventScene_GoldenCoinRush_05_2", 33 | "text": "Golden Coin Rush 7" 34 | }, 35 | { 36 | "name": "EventScene_GoldenCoinRush_06", 37 | "text": "Golden Coin Rush 8" 38 | } 39 | ] 40 | } -------------------------------------------------------------------------------- /src/components/common/Header/VisitorCounter.vue: -------------------------------------------------------------------------------- 1 | 8 | 21 | 22 | -------------------------------------------------------------------------------- /src/utils/json/Gallery/4koma_zh.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "4koma_zh/", 3 | "type": "large", 4 | "id": "4koma_zh", 5 | "title": "『妮在干嘛』四格漫画", 6 | "content": [ 7 | { 8 | "name": "1", 9 | "text": "https://t.bilibili.com/1040051243708317712" 10 | }, 11 | { 12 | "name": "2", 13 | "text": "https://t.bilibili.com/1042648839909015568" 14 | }, 15 | { 16 | "name": "3", 17 | "text": "https://t.bilibili.com/1044875351002447921" 18 | }, 19 | { 20 | "name": "4", 21 | "text": "https://t.bilibili.com/1047472947229360129" 22 | }, 23 | { 24 | "name": "5", 25 | "text": "https://t.bilibili.com/1052668139627610129" 26 | }, 27 | { 28 | "name": "6", 29 | "text": "https://t.bilibili.com/1059347672810389511" 30 | }, 31 | { 32 | "name": "7", 33 | "text": "https://t.bilibili.com/1064542865230659609" 34 | }, 35 | { 36 | "name": "8", 37 | "text": "https://t.bilibili.com/1072613967754428432" 38 | }, 39 | { 40 | "name": "9", 41 | "text": "https://t.bilibili.com/1079757357391544328" 42 | } 43 | ] 44 | } 45 | -------------------------------------------------------------------------------- /src/utils/json/Gallery/bfgcleanup.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "bfgcleanup/", 3 | "type": "large", 4 | "id": "bfgcleanup", 5 | "title": "BFG Clean UP !", 6 | "content": [ 7 | { 8 | "name": "clear_scene_1", 9 | "text": "Door Should Be Smashed With an Ax" 10 | }, 11 | { 12 | "name": "clear_scene_2", 13 | "text": "The Clown Is Always Smiling" 14 | }, 15 | { 16 | "name": "clear_scene_3", 17 | "text": "The Horror Under the Covers" 18 | }, 19 | { 20 | "name": "clear_scene_4", 21 | "text": "Monsters of Silent Hill" 22 | }, 23 | { 24 | "name": "clear_scene_5", 25 | "text": "Scream and Shout!" 26 | }, 27 | { 28 | "name": "clear_scene_skill_1", 29 | "text": "Body Burster!" 30 | }, 31 | { 32 | "name": "clear_scene_skill_2", 33 | "text": "It's Freezing in the Well" 34 | }, 35 | { 36 | "name": "bg_basic", 37 | "text": "Boom and Shock" 38 | }, 39 | { 40 | "name": "bg_middle", 41 | "text": "Red Flavor" 42 | }, 43 | { 44 | "name": "bg_high", 45 | "text": "Serendipity" 46 | } 47 | ] 48 | } -------------------------------------------------------------------------------- /src/Wrapper.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 14 | 15 | 43 | -------------------------------------------------------------------------------- /src/components/common/Credits/Table.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 28 | 29 | 63 | -------------------------------------------------------------------------------- /src/utils/json/Gallery/seayouagain.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "seayouagain/", 3 | "type": "large", 4 | "id": "seayouagain", 5 | "title": "Sea You Again", 6 | "content": [ 7 | { 8 | "name": "EventScene_SeaYouAgain_01_1", 9 | "text": "Sea You Again 1" 10 | }, 11 | { 12 | "name": "EventScene_SeaYouAgain_01_2", 13 | "text": "Sea You Again 2" 14 | }, 15 | { 16 | "name": "EventScene_SeaYouAgain_02_1", 17 | "text": "Sea You Again 3" 18 | }, 19 | { 20 | "name": "EventScene_SeaYouAgain_02_2", 21 | "text": "Sea You Again 4" 22 | }, 23 | { 24 | "name": "EventScene_SeaYouAgain_02_3", 25 | "text": "Sea You Again 5" 26 | }, 27 | { 28 | "name": "EventScene_SeaYouAgain_03_1", 29 | "text": "Sea You Again 6" 30 | }, 31 | { 32 | "name": "EventScene_SeaYouAgain_03_2", 33 | "text": "Sea You Again 7" 34 | }, 35 | { 36 | "name": "EventScene_SeaYouAgain_03_3", 37 | "text": "Sea You Again 8" 38 | }, 39 | { 40 | "name": "EventScene_SeaYouAgain_03_4", 41 | "text": "Sea You Again 9" 42 | }, 43 | { 44 | "name": "EventScene_SeaYouAgain_05", 45 | "text": "Sea You Again 10" 46 | }, 47 | { 48 | "name": "EventTitle_SeaYouAgain_02", 49 | "text": "Sea You Again 11" 50 | } 51 | ] 52 | } -------------------------------------------------------------------------------- /src/utils/json/Gallery/story9.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "story9/", 3 | "type": "large", 4 | "id": "story9", 5 | "title": "Chapters 39 to 40", 6 | "notice": "Compressed from 53.5mb total to 2.6mb", 7 | "content": [ 8 | { 9 | "name": "EventScene_Chap_39_01", 10 | "text": "Nayuta" 11 | }, 12 | { 13 | "name": "EventScene_Chap_39_02", 14 | "text": "Wasn't commander's uniform supposed to be brown?" 15 | }, 16 | { 17 | "name": "EventScene_Chap_39_03", 18 | "text": "Me when chinese people come in DMs and doesn't bother talking in english " 19 | }, 20 | { 21 | "name": "EventScene_Chap_39_04", 22 | "text": "Dress" 23 | }, 24 | { 25 | "name": "EventScene_Chap_40_01", 26 | "text": "Liberalio" 27 | }, 28 | { 29 | "name": "EventScene_Chap_40_02", 30 | "text": "Ziz drool emoticon" 31 | }, 32 | { 33 | "name": "EventScene_Chap_40_06", 34 | "text": "Behemoth drool emoticon" 35 | }, 36 | { 37 | "name": "EventScene_Chap_40_03", 38 | "text": "That scene was supposed to happen in a building. Not sure why she's in the streets." 39 | }, 40 | { 41 | "name": "EventScene_Chap_40_04", 42 | "text": "Neon downloaded the Ubisoft patch" 43 | }, 44 | { 45 | "name": "EventScene_Chap_40_05", 46 | "text": "Smash Smash Pass" 47 | } 48 | ] 49 | } -------------------------------------------------------------------------------- /src/utils/style/naive-ui-theme-overrides.json: -------------------------------------------------------------------------------- 1 | { 2 | "Card": { 3 | "textColor": "rgba(255, 255, 255, 1)", 4 | "titleTextColor": "rgba(255, 255, 255, 1)", 5 | "actionColor": "rgba(255, 255, 255, 0.06)", 6 | "borderColor": "rgba(255, 255, 255, 0.5)", 7 | "titleFontSizeMedium": "24px", 8 | "lineHeight": "1.8" 9 | }, 10 | "Typography": { 11 | "pFontSize": "16px", 12 | "pTextColor": "rgba(255,255,255,1)", 13 | "liTextColor": "rgba(255, 255, 255, 1)", 14 | "liFontSize": "16px" 15 | }, 16 | "Scrollbar": { 17 | "color": "rgba(99, 226, 183, 0.2)", 18 | "colorHover": "rgba(99, 226, 183, 0.3)" 19 | }, 20 | "Message": { 21 | "colorSuccess": "rgba(37, 96, 76, 1)", 22 | "color": "rgb(72, 72, 78)", 23 | "colorInfo": "rgba(54, 54, 108, 1)", 24 | "textColor": "rgba(255, 255, 255, 1)", 25 | "textColorSuccess": "rgba(255, 255, 255, 1)", 26 | "iconColorSuccess": "#63e2b7", 27 | "iconColorLoading": "#FFFFFFFF", 28 | "colorError": "rgba(109, 36, 36, 1)", 29 | "textColorInfo": "rgba(255, 255, 255, 1)", 30 | "textColorError": "rgba(255, 255, 255, 1)", 31 | "textColorWarning": "rgba(255, 255, 255, 1)", 32 | "textColorLoading": "rgba(255, 255, 255, 1)", 33 | "colorWarning": "rgba(125, 112, 40, 1)" 34 | }, 35 | "Form": { 36 | "labelFontSizeTopLarge": "18px", 37 | "feedbackPadding": "4px 0 8px 2px" 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Nikke-DB-Vue 2 | 3 | New front-end code for the Nikke-db website. Stars are welcomed. 4 | 5 | Files are hosted in the repo [https://github.com/Nikke-db/Nikke-db.github.io](https://github.com/Nikke-db/Nikke-db.github.io) and uploaded to a cloudflare page website for access. 6 | 7 | Made by Koshirei 8 | 9 | ```git clone, npm install, npm run dev``` 10 | If you know, you know. 11 | 12 | ## Want to help? 13 | Sure ! Fork the repository and fix a bug you've found, a bug someone else found, or make your own feature! If possible use Naive UI components that fits the theme of the website. Once the feature is done, open a Pull Request and after trying out the fix or feature I'll add it to the website. 14 | Make sure mobile display is good enough ( not asking for perfection ), grab width and conditions from other components to have the same workflow. To test it out run ```npm run serve``` and open a network url on your mobile device ( connected on the same wifi ! ) to instantly test out your modification on mobile. 15 | 16 | ## Pull Requests requirements 17 | Before asking any pull request, run ```npm run lint```, fix all the warning and errors from eslint. 18 | If your feature require to use files, especially spine assets, "si_" icons, "mi_" banners, or anything else, host them on [https://github.com/Nikke-db/Nikke-db.github.io](https://github.com/Nikke-db/Nikke-db.github.io) and make a Pull Request there as well. 19 | 20 | -------------------------------------------------------------------------------- /src/components/common/Gallery/ArrowTemplate.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 24 | 25 | 34 | 35 | -------------------------------------------------------------------------------- /src/utils/json/Gallery/beautyfullshot.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "beautyfullshot/", 3 | "type": "large", 4 | "id": "beautyfullshot", 5 | "title": "Beauty Full Shot", 6 | "content": [ 7 | { 8 | "name": "beautyfullshot_opening_bg_after_exilegae", 9 | "text": "Beauty Full Shot 1" 10 | }, 11 | { 12 | "name": "EventScene_BeautyFullShot_01", 13 | "text": "Beauty Full Shot 2" 14 | }, 15 | { 16 | "name": "EventScene_BeautyFullShot_02", 17 | "text": "Beauty Full Shot 3" 18 | }, 19 | { 20 | "name": "EventScene_BeautyFullShot_03", 21 | "text": "Beauty Full Shot 4" 22 | }, 23 | { 24 | "name": "EventScene_BeautyFullShot_04", 25 | "text": "Beauty Full Shot 5" 26 | }, 27 | { 28 | "name": "EventScene_BeautyFullShot_05", 29 | "text": "Beauty Full Shot 6" 30 | }, 31 | { 32 | "name": "EventScene_BeautyFullShot_06", 33 | "text": "Beauty Full Shot 7" 34 | }, 35 | { 36 | "name": "beautyfullshot_album_bg", 37 | "text": "Island" 38 | }, 39 | { 40 | "name": "beautyfullshot_hub_pic_01", 41 | "text": "le fishmael" 42 | }, 43 | { 44 | "name": "beautyfullshot_hub_pic_02", 45 | "text": "Melon Flavored Tits" 46 | }, 47 | { 48 | "name": "beautyfullshot_hub_pic_03", 49 | "text": "60$ slop" 50 | }, 51 | { 52 | "name": "beautyfullshot_hub_pic_04", 53 | "text": "Rosanna." 54 | } 55 | ] 56 | } -------------------------------------------------------------------------------- /src/utils/json/Gallery/story5.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "story5/", 3 | "type": "large", 4 | "id": "story5", 5 | "title": "Chapters 31 to 32", 6 | "content": [ 7 | { 8 | "name": "EventScene_Chap_31_01_01", 9 | "text": "Finally a good character design" 10 | }, 11 | { 12 | "name": "EventScene_Chap_31_01_02", 13 | "text": "Tsundere" 14 | }, 15 | { 16 | "name": "EventScene_Chap_32_01", 17 | "text": "Tsun Tsun" 18 | }, 19 | { 20 | "name": "EventScene_Chap_31_01_03", 21 | "text": "L" 22 | }, 23 | { 24 | "name": "EventScene_Chap_31_01_04", 25 | "text": "Behemoth" 26 | }, 27 | { 28 | "name": "EventScene_Chap_32_02", 29 | "text": "Biblically accurate angel" 30 | }, 31 | { 32 | "name": "EventScene_Chap_32_03", 33 | "text": "F tier unit finally useful" 34 | }, 35 | { 36 | "name": "EventScene_Chap_32_04", 37 | "text": "Cinderella" 38 | }, 39 | { 40 | "name": "EventScene_Chap_32_05_01", 41 | "text": "Shikicum" 42 | }, 43 | { 44 | "name": "EventScene_Chap_32_05_02", 45 | "text": "would" 46 | }, 47 | { 48 | "name": "EventScene_Chap_32_06_01", 49 | "text": "Citrus 1" 50 | }, 51 | { 52 | "name": "EventScene_Chap_32_06_02", 53 | "text": "Citrus 2" 54 | }, 55 | { 56 | "name": "EventScene_Chap_32_06_03", 57 | "text": "Citrus 3" 58 | }, 59 | { 60 | "name": "EventScene_Chap_32_07", 61 | "text": "on god I'd take behemoth every day instead of cinderella the beauty slop" 62 | } 63 | ] 64 | } -------------------------------------------------------------------------------- /src/components/common/Spine/Tools/PoseSelector.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 62 | 63 | 68 | -------------------------------------------------------------------------------- /.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | /* eslint-env node */ 2 | require('@rushstack/eslint-patch/modern-module-resolution') 3 | 4 | module.exports = { 5 | root: true, 6 | extends: [ 7 | 'plugin:vue/vue3-essential', 8 | 'eslint:recommended', 9 | '@vue/eslint-config-typescript', 10 | '@vue/eslint-config-prettier/skip-formatting' 11 | ], 12 | parserOptions: { 13 | ecmaVersion: 'latest' 14 | }, 15 | rules: { 16 | '@typescript-eslint/type-annotation-spacing': 'error', 17 | 'arrow-parens': ['error', 'always'], 18 | 'arrow-spacing': ['error', { 19 | 'before': true, 'after': true 20 | }], 21 | 'comma-spacing': ['error', { 22 | 'before': false, 'after': true 23 | }], 24 | 'block-spacing': ['error', 'always'], 25 | 'default-case': 'error', 26 | 'default-case-last': 'error', 27 | 'default-param-last': 'error', 28 | 'eqeqeq': 'error', 29 | 'func-call-spacing': ['error', 'never'], 30 | 'indent': [ 'error', 2, { 31 | 'SwitchCase': 1 32 | } ], 33 | 'keyword-spacing': ['error', { 34 | 'after': true, 'before': true, 35 | }], 36 | // 'no-trailing-spaces': 'error', 37 | 'no-unreachable': 'error', 38 | 'no-unreachable-loop': 'error', 39 | 'no-unused-vars': 'off', 40 | '@typescript-eslint/no-unused-vars': 'error', 41 | 'no-var': 'error', 42 | 'object-curly-spacing': ['error', 'always'], 43 | 'quotes': [ 'error', 'single' ], 44 | 'semi': [ 'error', 'never' ], 45 | 'space-infix-ops': 'error', 46 | 'switch-colon-spacing': ['error', { 47 | 'after': true, 'before': false 48 | }], 49 | 'vue/multi-word-component-names': 'off', 50 | 'yoda': 'error', 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /src/utils/json/Gallery/story2.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "story2/", 3 | "type": "large", 4 | "id": "story2", 5 | "title": "Chapters 10 to 19", 6 | "content": [ 7 | { 8 | "name": "EventScene_Chap_10_01", 9 | "text": "Rapi" 10 | }, 11 | { 12 | "name": "EventScene_Chap_11_01", 13 | "text": "Laplace" 14 | }, 15 | { 16 | "name": "EventScene_Chap_12_01", 17 | "text": "The Hero" 18 | }, 19 | { 20 | "name": "EventScene_Chap_12_02", 21 | "text": "Maiden & Guillotine" 22 | }, 23 | { 24 | "name": "EventScene_Chap_12_03", 25 | "text": "Maiden" 26 | }, 27 | { 28 | "name": "EventScene_Chap_12_After_02", 29 | "text": "The big four" 30 | }, 31 | { 32 | "name": "EventScene_Chap_13_01", 33 | "text": "Infinity Rail" 34 | }, 35 | { 36 | "name": "EventScene_Chap_13_01_02", 37 | "text": "The AZX" 38 | }, 39 | { 40 | "name": "EventScene_Chap_13_03", 41 | "text": "Chatterbox" 42 | }, 43 | { 44 | "name": "EventScene_Chap_13_04", 45 | "text": "Gun" 46 | }, 47 | { 48 | "name": "EventScene_Chap_13_05", 49 | "text": "Kick" 50 | }, 51 | { 52 | "name": "EventScene_Chap_13_06", 53 | "text": "Red Hood" 54 | }, 55 | { 56 | "name": "EventScene_Chap_14_02", 57 | "text": "Triangle" 58 | }, 59 | { 60 | "name": "EventScene_Main_15_After_01", 61 | "text": "Matis" 62 | }, 63 | { 64 | "name": "EventScene_Main_16_01", 65 | "text": "Exotic" 66 | }, 67 | { 68 | "name": "EventScene_Chap_19_01", 69 | "text": "Eden" 70 | } 71 | ] 72 | } -------------------------------------------------------------------------------- /src/components/common/Spine/Tools/Screenshot.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 26 | 27 | 38 | -------------------------------------------------------------------------------- /src/utils/animationMappings.ts: -------------------------------------------------------------------------------- 1 | export const animationMappings: Record = { 2 | 'happy': [ 3 | 'delight', 'joy', 'smile', 'laugh', 'excited', 'glee', 'grin', 'chuckle', 'giggle', 'smirk', 4 | 'beam', 'radiant', 'happy', 'content', 'pleased', 'amused', 'cheerful', 'triumph' 5 | ], 6 | 'cry': [ 7 | 'cry', 'crying', 'weep', 'tears', 8 | ], 9 | 'sad': [ 10 | // High intensity (sad) - actual sadness/very sad/almost crying 11 | 'depressed', 'sorrow', 'tear', 'gloom', 'worry', 'sobbing', 'devastated', 'heartbroken', 12 | 'hurt', 'pain', 'agony', 'grief', 'mourn', 'sad', 'unhappy', 'melancholy', 13 | 'despair', 'hopeless', 'anguish', 'misery', 14 | // Low intensity (sad_02) - about to cry, watery eyes 15 | 'teary', 'upset', 'emotional', 'misty', 'choked up', 'pout', 'whine' 16 | ], 17 | 'angry': [ 18 | // High intensity (angry_02) 19 | 'furious', 'rage', 'shouting', 'yelling', 'livid', 'outraged', 'irate', 'mad', 'fury', 20 | 'anger', 'seethe', 'hiss', 'growl', 'snap', 'bitter', 'resent', 'hate', 'loathe', 'vengeful', 21 | // Low intensity (angry_03) 22 | 'stern', 'frown', 'serious', 'disapproving', 'scowl', 'glare', 'cross', 23 | // Medium intensity (angry) 24 | 'annoyed', 'irritated', 'bothered', 'grumpy', 'frustrated', 'groan', 'disgust' 25 | ], 26 | 'surprise': ['shock', 'surprised', 'startle', 'gasp', 'wide-eyed', 'blink', 'stunned', 'amazed', 'astonished', 'aback', 'confused', 'puzzled'], 27 | 'shy': ['blush', 'embarrassed', 'shy', 'bashful', 'timid', 'stutter', 'stammer', 'fluster', 'nervous', 'anxious'], 28 | 'no': ['frowning', 'disapproval', 'skeptical', 'indifferent', 'unimpressed', 'shake head', 'deny', 'refuse', 'reject', 'doubt', 'sigh'], 29 | 'idle': ['stand', 'wait', 'default', 'calm', 'neutral'] 30 | } 31 | -------------------------------------------------------------------------------- /src/utils/json/Gallery/dragondungeonrun.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "dragondungeonrun/", 3 | "type": "large", 4 | "id": "dragondungeonrun", 5 | "title": "Dragon Dungeon Run", 6 | "content": [ 7 | { 8 | "name": "event_dungeon_run_die_01", 9 | "text": "Gotta catch Guillotine!" 10 | }, 11 | { 12 | "name": "event_dungeon_run_die_02", 13 | "text": "It's dark and scary in here! Save me!" 14 | }, 15 | { 16 | "name": "event_dungeon_run_die_03", 17 | "text": "We need Eunhwa." 18 | }, 19 | { 20 | "name": "event_dungeon_run_die_04", 21 | "text": "Art is an explosion." 22 | }, 23 | { 24 | "name": "event_dungeon_run_die_05", 25 | "text": "A surge of premonition." 26 | }, 27 | { 28 | "name": "event_dungeon_run_die_06", 29 | "text": "Blasting off again!" 30 | }, 31 | { 32 | "name": "event_dungeon_run_die_07", 33 | "text": "Trap ahead." 34 | }, 35 | { 36 | "name": "event_dungeon_run_die_08", 37 | "text": "The most powerful White Ice Dragon lets out a roar." 38 | }, 39 | { 40 | "name": "event_dungeon_run_ending_01", 41 | "text": "Praise the sun." 42 | }, 43 | { 44 | "name": "event_dungeon_run_ending_02", 45 | "text": "Get Over it!" 46 | }, 47 | { 48 | "name": "event_dungeon_run_ending_03", 49 | "text": "The excellence of Nikkes is the excellence of courage!" 50 | }, 51 | { 52 | "name": "event_dungeon_run_ending_04", 53 | "text": "Shall we go to the dungeon again?" 54 | }, 55 | { 56 | "name": "event_dungeon_run_ending_05", 57 | "text": "The cart is insurance." 58 | }, 59 | { 60 | "name": "event_dungeon_run_ending_06", 61 | "text": "The battle with despair." 62 | } 63 | ] 64 | } -------------------------------------------------------------------------------- /src/utils/json/Gallery/story1.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "story1/", 3 | "type": "large", 4 | "id": "story1", 5 | "title": "Chapters 0 to 9", 6 | "content": [ 7 | { 8 | "name": "EventScene_Main_02_01", 9 | "text": "Great Scenery" 10 | }, 11 | { 12 | "name": "EventScene_Main_02_02", 13 | "text": "Infiltration" 14 | }, 15 | { 16 | "name": "EventScene_Chap_02_After_02", 17 | "text": "Syuen" 18 | }, 19 | { 20 | "name": "EventScene_Chap_04_01", 21 | "text": "Euhnwa" 22 | }, 23 | { 24 | "name": "EventScene_Chap_04_02", 25 | "text": "Helicopter" 26 | }, 27 | { 28 | "name": "EventScene_Chap_04_03", 29 | "text": "Slightly different helicopter" 30 | }, 31 | { 32 | "name": "EventScene_Chap_04_05", 33 | "text": "Yuni & Mihara" 34 | }, 35 | { 36 | "name": "EventScene_Chap_06_01", 37 | "text": "Modernia" 38 | }, 39 | { 40 | "name": "EventScene_Chap_06_02", 41 | "text": "Android" 42 | }, 43 | { 44 | "name": "EventScene_Chap_07_01", 45 | "text": "Ludmilla & Alice" 46 | }, 47 | { 48 | "name": "EventScene_Chap_07_03", 49 | "text": "Snow White" 50 | }, 51 | { 52 | "name": "EventScene_Chap_08_01", 53 | "text": "Anis & Neon" 54 | }, 55 | { 56 | "name": "EventScene_Chap_08_01_a", 57 | "text": "Friends" 58 | }, 59 | { 60 | "name": "EventScene_Chap_08_02", 61 | "text": "Friendly Anis & Neon" 62 | }, 63 | { 64 | "name": "EventScene_Chap_08_02_a", 65 | "text": "Cute" 66 | }, 67 | { 68 | "name": "EventScene_Chap_09_01", 69 | "text": "Exia" 70 | }, 71 | { 72 | "name": "EventScene_Chap_09_02", 73 | "text": "Dead" 74 | } 75 | ] 76 | } -------------------------------------------------------------------------------- /src/utils/json/Gallery/overzone.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "overzone/", 3 | "type": "large", 4 | "id": "overzone", 5 | "title": "Overzone", 6 | "content": [ 7 | { 8 | "name": "EventScene_OverZone_02", 9 | "text": "OverZone 1" 10 | }, 11 | { 12 | "name": "EventScene_OverZone_03", 13 | "text": "OverZone 2" 14 | }, 15 | { 16 | "name": "EventScene_OverZone_03_1", 17 | "text": "OverZone 3" 18 | }, 19 | { 20 | "name": "EventScene_OverZone_03_2", 21 | "text": "OverZone 4" 22 | }, 23 | 24 | { 25 | "name": "EventScene_OverZone_04", 26 | "text": "OverZone 5" 27 | }, 28 | { 29 | "name": "EventScene_OverZone_04_1", 30 | "text": "OverZone 6" 31 | }, 32 | { 33 | "name": "EventScene_OverZone_05", 34 | "text": "OverZone 7" 35 | }, 36 | { 37 | "name": "EventScene_OverZone_06", 38 | "text": "OverZone 8" 39 | }, 40 | { 41 | "name": "EventScene_OverZone_07", 42 | "text": "OverZone 9" 43 | }, 44 | { 45 | "name": "EventScene_OverZone_07_1", 46 | "text": "OverZone 10" 47 | }, 48 | { 49 | "name": "EventScene_OverZone_08", 50 | "text": "OverZone 11" 51 | }, 52 | { 53 | "name": "EventScene_OverZone_08_1", 54 | "text": "OverZone 12" 55 | }, 56 | { 57 | "name": "EventScene_OverZone_08_2", 58 | "text": "OverZone 13" 59 | }, 60 | { 61 | "name": "EventScene_OverZone_09", 62 | "text": "OverZone 14" 63 | }, 64 | { 65 | "name": "EventScene_OverZone_09_1", 66 | "text": "OverZone 15" 67 | }, 68 | { 69 | "name": "EventScene_OverZone_09_2", 70 | "text": "OverZone 16" 71 | }, 72 | { 73 | "name": "EventScene_OverZone_10", 74 | "text": "OverZone 17" 75 | } 76 | ] 77 | } -------------------------------------------------------------------------------- /src/utils/json/Gallery/side03.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "side03/", 3 | "type": "large", 4 | "id": "side03", 5 | "title": "Mudfish", 6 | "notice": "Images are compressed. from 85mb to 5.", 7 | "content": [ 8 | { 9 | "name": "EventScene_Side_03_01_1", 10 | "text": "Side Story 03-1" 11 | }, 12 | { 13 | "name": "EventScene_Side_03_01_2", 14 | "text": "Side Story 03-2" 15 | }, 16 | { 17 | "name": "EventScene_Side_03_01_3", 18 | "text": "Side Story 03-3" 19 | }, 20 | { 21 | "name": "EventScene_Side_03_02_1", 22 | "text": "Side Story 03-4" 23 | }, 24 | { 25 | "name": "EventScene_Side_03_02_2", 26 | "text": "Side Story 03-5" 27 | }, { 28 | "name": "EventScene_Side_03_02_3", 29 | "text": "Side Story 03-6" 30 | }, 31 | { 32 | "name": "EventScene_Side_03_02_4", 33 | "text": "Side Story 03-7" 34 | }, 35 | { 36 | "name": "EventScene_Side_03_02_5", 37 | "text": "Side Story 03-8" 38 | }, 39 | { 40 | "name": "EventScene_Side_03_03_1", 41 | "text": "Side Story 03-9" 42 | }, 43 | { 44 | "name": "EventScene_Side_03_03_2", 45 | "text": "Side Story 03-10" 46 | }, { 47 | "name": "EventScene_Side_03_03_3", 48 | "text": "Side Story 03-11" 49 | }, 50 | { 51 | "name": "EventScene_Side_03_04_1", 52 | "text": "Side Story 03-12" 53 | }, 54 | { 55 | "name": "EventScene_Side_03_04_2", 56 | "text": "Side Story 03-13" 57 | }, 58 | { 59 | "name": "EventScene_Side_03_04_3", 60 | "text": "Side Story 03-14" 61 | }, 62 | { 63 | "name": "EventScene_Side_03_04_4", 64 | "text": "Side Story 03-15" 65 | }, 66 | { 67 | "name": "EventScene_Side_03_04_5", 68 | "text": "Side Story 03-16" 69 | } 70 | ] 71 | } -------------------------------------------------------------------------------- /src/utils/json/Gallery/story7.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "story7/", 3 | "type": "large", 4 | "id": "story7", 5 | "title": "Chapters 35 to 36", 6 | "notice": "Compressed from 80mb total to 4mb", 7 | "content": [ 8 | { 9 | "name": "EventScene_Chap_35_01", 10 | "text": "Never forget uncensored Anis design from beta releases" 11 | }, 12 | { 13 | "name": "EventScene_Chap_35_02", 14 | "text": "Pass" 15 | }, 16 | { 17 | "name": "EventScene_Chap_35_03_01", 18 | "text": "Egg" 19 | }, 20 | { 21 | "name": "EventScene_Chap_35_03_02", 22 | "text": "Levivi tummymy" 23 | }, 24 | { 25 | "name": "EventScene_Chap_35_04", 26 | "text": "Heretic" 27 | }, 28 | { 29 | "name": "EventScene_Chap_35_05_01", 30 | "text": "Laplace" 31 | }, 32 | { 33 | "name": "EventScene_Chap_35_05_02", 34 | "text": "Laplace the Hero" 35 | }, 36 | { 37 | "name": "EventScene_Chap_35_05_03", 38 | "text": "Drake guhhh :drool:" 39 | }, 40 | { 41 | "name": "EventScene_Chap_35_05_04", 42 | "text": "Holed Water" 43 | }, 44 | { 45 | "name": "EventScene_Chap_36_01", 46 | "text": "Smash Smash GraGre Pass Smash" 47 | }, 48 | { 49 | "name": "EventScene_Chap_36_02", 50 | "text": "Why's her bubble naked but the other aren't" 51 | }, 52 | { 53 | "name": "EventScene_Chap_36_03_01", 54 | "text": "Egg" 55 | }, 56 | { 57 | "name": "EventScene_Chap_36_03_02", 58 | "text": "Matis" 59 | }, 60 | { 61 | "name": "EventScene_Chap_36_03_03", 62 | "text": "Crystals" 63 | }, 64 | { 65 | "name": "EventScene_Chap_36_03_04", 66 | "text": "Matis" 67 | }, 68 | { 69 | "name": "EventScene_Chap_36_04", 70 | "text": "Levi Footsies " 71 | } 72 | ] 73 | } -------------------------------------------------------------------------------- /src/components/common/Spine/Tools/AttachmentEditorColorSlider.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 52 | 53 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nikke-db-vue", 3 | "version": "0.0.0", 4 | "private": true, 5 | "license": "WTFPL", 6 | "scripts": { 7 | "dev": "vite", 8 | "serve": "vite --host", 9 | "build": "run-p type-check build-only", 10 | "preview": "vite preview", 11 | "test:unit": "vitest", 12 | "build-only": "vite build", 13 | "type-check": "vue-tsc --noEmit -p tsconfig.vitest.json --composite false", 14 | "lint": "eslint . --ext .vue,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore", 15 | "format": "prettier --write src/" 16 | }, 17 | "dependencies": { 18 | "@jacksongross/vue-tweet-embed": "^3.0.1", 19 | "@types/crypto-js": "^4.2.2", 20 | "@vicons/carbon": "^0.12.0", 21 | "@vicons/fa": "^0.12.0", 22 | "@vicons/material": "^0.12.0", 23 | "@vicons/tabler": "^0.12.0", 24 | "crypto-js": "^4.2.0", 25 | "html2canvas": "^1.4.1", 26 | "less": "^4.2.0", 27 | "marked": "^17.0.1", 28 | "naive-ui": "^2.34.4", 29 | "ndarray-pixels": "^3.1.0", 30 | "pinia": "^2.1.6", 31 | "vue": "^3.4.*", 32 | "vue-router": "^4.2.4", 33 | "vuedraggable": "^4.1.0" 34 | }, 35 | "devDependencies": { 36 | "@rushstack/eslint-patch": "^1.3.2", 37 | "@tsconfig/node18": "^18.2.0", 38 | "@types/jsdom": "^21.1.1", 39 | "@types/node": "^18.17.5", 40 | "@vicons/antd": "^0.12.0", 41 | "@vitejs/plugin-vue": "^4.3.1", 42 | "@vitejs/plugin-vue-jsx": "^3.0.2", 43 | "@vue/eslint-config-prettier": "^8.0.0", 44 | "@vue/eslint-config-typescript": "^11.0.3", 45 | "@vue/test-utils": "^2.4.1", 46 | "@vue/tsconfig": "^0.4.0", 47 | "eslint": "^8.46.0", 48 | "eslint-plugin-vue": "^9.16.1", 49 | "jsdom": "^22.1.0", 50 | "npm-run-all": "^4.1.5", 51 | "prettier": "^3.0.0", 52 | "typescript": "~5.1.6", 53 | "vite": "^4.4.9", 54 | "vitest": "^0.34.2", 55 | "vue-tsc": "^1.8.8" 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /src/utils/json/Gallery/memoriesteller.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "memoriesteller/", 3 | "type": "large", 4 | "id": "memoriesteller", 5 | "title": "Memories Teller", 6 | "notice": "Compressed from 86.4mb to 5.5mb", 7 | "content": [ 8 | { 9 | "name": "EventScene_memoriesteller_01", 10 | "text": "Memories Teller 1" 11 | }, 12 | { 13 | "name": "EventScene_memoriesteller_02", 14 | "text": "Memories Teller 2" 15 | }, 16 | { 17 | "name": "EventScene_memoriesteller_03", 18 | "text": "Memories Teller 3" 19 | }, 20 | { 21 | "name": "EventScene_memoriesteller_04_01", 22 | "text": "Memories Teller 4" 23 | }, 24 | { 25 | "name": "EventScene_memoriesteller_04_02", 26 | "text": "Memories Teller 5" 27 | }, 28 | { 29 | "name": "EventScene_memoriesteller_04_03", 30 | "text": "Memories Teller 6" 31 | }, 32 | { 33 | "name": "EventScene_memoriesteller_04_04", 34 | "text": "Memories Teller 7" 35 | }, 36 | { 37 | "name": "EventScene_memoriesteller_04_05", 38 | "text": "Memories Teller 8" 39 | }, 40 | { 41 | "name": "EventScene_memoriesteller_05_01", 42 | "text": "Memories Teller 9" 43 | }, 44 | { 45 | "name": "EventScene_memoriesteller_05_02", 46 | "text": "Memories Teller 10" 47 | }, 48 | { 49 | "name": "EventScene_memoriesteller_06", 50 | "text": "GYATDAMN GIRL" 51 | }, 52 | { 53 | "name": "EventScene_memoriesteller_07", 54 | "text": "Memories Teller 12" 55 | }, 56 | { 57 | "name": "EventScene_memoriesteller_08", 58 | "text": "Memories Teller 13" 59 | }, 60 | { 61 | "name": "EventScene_memoriesteller_09_5", 62 | "text": "Memories Teller 14" 63 | }, 64 | { 65 | "name": "EventScene_memoriesteller_09_5_1", 66 | "text": "Memories Teller 15" 67 | } 68 | ] 69 | } -------------------------------------------------------------------------------- /src/utils/LayerEditorUtils.ts: -------------------------------------------------------------------------------- 1 | import type { AttachmentItemColorInterface, AttachmentInterface } from '@/utils/interfaces/live2d' 2 | 3 | export interface layerEditorImportableInterface { 4 | author: string, 5 | description: string, 6 | date: number, 7 | cid: string, 8 | pose: 'fb' | 'cover' | 'aim' | 'temp', 9 | exportVersion: number 10 | layers: { 11 | [key: string]: AttachmentItemColorInterface | string 12 | }[] 13 | 14 | 15 | } 16 | 17 | export const getExportableContent = (cid: string, pose: 'fb' | 'cover' | 'aim' | 'temp', layers: AttachmentInterface[]) => { 18 | const content: layerEditorImportableInterface = { 19 | author: 'Default', 20 | description: 'Layer edition of a character on Nikke-DB. Do not modify a single field besides author and description.', 21 | date: new Date().getTime(), 22 | cid: cid, 23 | pose: pose, 24 | exportVersion: 1, 25 | layers: [] 26 | } 27 | 28 | layers.forEach((l: AttachmentInterface) => { 29 | if (l === undefined) content.layers.push({ 'undefined' : 'undefined' }) 30 | else { 31 | const keys = Object.keys(l) 32 | keys.forEach((k) => { 33 | content.layers.push({ 34 | [k]: { ...l[k].color } 35 | }) 36 | }) 37 | } 38 | }) 39 | 40 | return content 41 | } 42 | 43 | export const getImportedContentV1 = (file: File) => { 44 | return new Promise((resolve) => { 45 | const fr = new FileReader() 46 | fr.readAsText(file) 47 | fr.onload = () => { 48 | resolve(JSON.parse(fr.result as string)) 49 | } 50 | }) 51 | } 52 | 53 | export const getKeyOfContentByString = (content: layerEditorImportableInterface, key: string) => { 54 | 55 | const foundLayer = content.layers.find((l) => { 56 | return Object.keys(l)[0] === key 57 | }) 58 | 59 | if (foundLayer !== undefined) { 60 | return foundLayer[key] as AttachmentItemColorInterface 61 | } 62 | } -------------------------------------------------------------------------------- /src/components/common/Tools/Template.vue: -------------------------------------------------------------------------------- 1 | 21 | 22 | 48 | 49 | 90 | -------------------------------------------------------------------------------- /src/utils/json/Gallery/coinsinrush.json: -------------------------------------------------------------------------------- 1 | {"path":"coinsinrush/","type":"large","id":"coinsinrush","title":"Coins In Rush","notice":"Compressed from 71 to 8.75mb","content":[{"name":"EventScene_coinsinrush_01_1.webp","text":"Coins In Rush 1"},{"name":"EventScene_coinsinrush_01_2.webp","text":"Coins In Rush 2"},{"name":"EventScene_coinsinrush_02.webp","text":"Coins In Rush 3"},{"name":"EventScene_coinsinrush_03.webp","text":"Coins In Rush 4"},{"name":"EventScene_coinsinrush_04_1.webp","text":"Coins In Rush 5"},{"name":"EventScene_coinsinrush_04_2.webp","text":"Coins In Rush 6"},{"name":"EventScene_coinsinrush_04_3.webp","text":"Coins In Rush 7"},{"name":"EventScene_coinsinrush_05.webp","text":"Coins In Rush 8"},{"name":"EventScene_coinsinrush_06_1.webp","text":"Coins In Rush 9"},{"name":"EventScene_coinsinrush_06_2.webp","text":"Coins In Rush 10"},{"name":"coinsinrush_opening_char.png","text":"Coins In Rush 11"},{"name":"coinsinrush_opening_char_01.png","text":"Coins In Rush 12"},{"name":"coinsinrush_opening_char_02.png","text":"Coins In Rush 13"},{"name":"coinsinrush_opening_char_03.png","text":"Coins In Rush 14"},{"name":"coinsinrush_opening_char_04.png","text":"Coins In Rush 15"},{"name":"coinsinrush_opening_char_05.png","text":"Coins In Rush 16"},{"name":"coinsinrush_opening_char_06.png","text":"Coins In Rush 17"},{"name":"coinsinrush_opening_char_07.png","text":"Coins In Rush 18"},{"name":"coinsinrush_opening_char_09.png","text":"Coins In Rush 19"},{"name":"coinsinrush_part1_char_01.png","text":"Coins In Rush 20"},{"name":"coinsinrush_part1_char_02.png","text":"Coins In Rush 21"},{"name":"coinsinrush_part2_char_02_low.png","text":"Coins In Rush 22"},{"name":"coinsinrush_part2_char_03_low.png","text":"Coins In Rush 23"},{"name":"coinsinrush_part2_char_04_low.png","text":"Coins In Rush 24"},{"name":"coinsinrush_part2_full_char_01.png","text":"Coins In Rush 25"},{"name":"coinsinrush_part2_full_char_02.png","text":"Coins In Rush 26"},{"name":"coinsinrush_part2_full_char_03.png","text":"Coins In Rush 27"},{"name":"coinsinrush_part2_list_nor_char.png","text":"Coins In Rush 28"}]} -------------------------------------------------------------------------------- /src/utils/json/Gallery/secondquest.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "secondquest/", 3 | "type": "large", 4 | "id": "secondquest", 5 | "title": "Second Quest", 6 | "notice": "Full sized images. Maybe not in order.", 7 | "content": [ 8 | { 9 | "name": "EventScene_ce005_01_1", 10 | "text": "Second Quest 1" 11 | }, 12 | { 13 | "name": "EventScene_ce005_01_2", 14 | "text": "Second Quest 2" 15 | }, 16 | { 17 | "name": "EventScene_ce005_01_3", 18 | "text": "Second Quest 3" 19 | }, 20 | { 21 | "name": "EventScene_ce005_01_4", 22 | "text": "Second Quest 4" 23 | }, 24 | { 25 | "name": "EventScene_ce005_01_5", 26 | "text": "Second Quest 5" 27 | }, 28 | { 29 | "name": "EventScene_ce005_01_6", 30 | "text": "Second Quest 6" 31 | }, 32 | { 33 | "name": "EventScene_ce005_01_7", 34 | "text": "Second Quest 7" 35 | }, 36 | { 37 | "name": "EventScene_ce005_02_1", 38 | "text": "Second Quest 8" 39 | }, 40 | { 41 | "name": "EventScene_ce005_02_2", 42 | "text": "Second Quest 9" 43 | }, 44 | { 45 | "name": "EventScene_ce005_02_3", 46 | "text": "Second Quest 10" 47 | }, 48 | { 49 | "name": "EventScene_ce005_03", 50 | "text": "Second Quest 11" 51 | }, 52 | { 53 | "name": "EventScene_ce005_04_1", 54 | "text": "Second Quest 12" 55 | }, 56 | { 57 | "name": "EventScene_ce005_04_2", 58 | "text": "Second Quest 13" 59 | }, 60 | { 61 | "name": "EventScene_ce005_06_1", 62 | "text": "Second Quest 14" 63 | }, 64 | { 65 | "name": "EventScene_ce005_06_2", 66 | "text": "Second Quest 15" 67 | }, 68 | { 69 | "name": "EventScene_ce005_06_3", 70 | "text": "Second Quest 16" 71 | }, 72 | { 73 | "name": "EventScene_ce005_06_4", 74 | "text": "Second Quest 17" 75 | }, 76 | { 77 | "name": "EventScene_ce005_06_5", 78 | "text": "Second Quest 18" 79 | }, 80 | { 81 | "name": "EventScene_ce005_06_6", 82 | "text": "Second Quest 19" 83 | } 84 | ] 85 | } -------------------------------------------------------------------------------- /src/components/common/Tierlistmaker/ImportFromText.vue: -------------------------------------------------------------------------------- 1 | 44 | 45 | 68 | 69 | -------------------------------------------------------------------------------- /src/components/views/notices/HighAndLowQualityAssets.vue: -------------------------------------------------------------------------------- 1 | 31 | 32 | 38 | 39 | -------------------------------------------------------------------------------- /src/components/common/Spine/Tools/AttachmentEditorListing.vue: -------------------------------------------------------------------------------- 1 | 22 | 23 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /src/utils/enum/globalParams.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | enum globalParams { 3 | GITHUB = 'https://github.com/Nikke-db/nikke-db-vue', 4 | LOCALHOST = 'http://localhost:5500/', 5 | NIKKE_DB = 'https://nikke-db-legacy.pages.dev/', 6 | // NIKKE_DB = LOCALHOST, 7 | PATH_L2D = NIKKE_DB + 'l2d/', 8 | PATH_L2D_AIM = 'aim/', 9 | PATH_L2D_COVER = 'cover/', 10 | PATH_SPRITE_1 = 'images/sprite/si_', 11 | PATH_SPRITE_2 = '_00_s.png', 12 | BUILD_PATH = 'chibi/Build/', 13 | STREAMING_ASSETS_PATH = 'chibi/StreamingAssets', 14 | GALLERY_PATH = 'images/gallery/', 15 | CHIBI_BUILD = NIKKE_DB + BUILD_PATH, 16 | STREAMING_ASSETS = NIKKE_DB + STREAMING_ASSETS_PATH, 17 | GALLERY = NIKKE_DB + GALLERY_PATH, 18 | LOCALHOST_CHIBI_BUILD = LOCALHOST + BUILD_PATH, 19 | LOCALHOST_STREAMING_ASSETS = LOCALHOST + STREAMING_ASSETS_PATH, 20 | CRYPTOJS_AES_KEY = 'Nikke DB AES Key' //never change this or it'll break tierlist save slots 21 | } 22 | 23 | enum messagesEnum { 24 | MESSAGE_ERROR = 'Something went wrong, if it is unexpected contact me on discord or GitHub', 25 | MESSAGE_ASSET_LOADED = 'Assets loaded', 26 | MESSAGE_LOCALSTORAGE_SAVED = 'Data saved to the local storage', 27 | MESSAGE_CANCELLED = 'Action Cancelled', 28 | MESSAGE_CANNOT_SAVE_EMPTY = 'Cannot save an empty value', 29 | MESSAGE_WRONG_FORM_DATA = 'Something is wrong with the form data you\'ve entered', 30 | MESSAGE_PROCESSING = 'Processing', 31 | MESSAGE_UNLOAD = "Unloaded older asset successfully", 32 | MESSAGE_WRONG_FILE_FORMAT = "Wrong file format", 33 | MESSAGE_UI_SHOWBACK = "Press the \"Enter\" key to show the UI back", 34 | MESSAGE_TIERLIST_DELETE_ROW = "Row deleted, characters that were in that row have been transferred to the bench", 35 | MESSAGE_TIERLIST_UPDATED_ROW = "Row updated", 36 | MESSAGE_TIERLIST_SCREENSHOT_CONVERT2CANVAS = "Converting HTML data to a canvas object...", 37 | MESSAGE_TIERLIST_SCREENSHOT_CANVAS2PNG = "Downloading a canvas to a PNG file", 38 | MESSAGE_EXPORT_ANIMATION = "Replaying and exporting animation...", 39 | MESSAGE_EXPORT_ANIMATION_SUCCESS = "Animation exported successfully", 40 | MESSAGE_EXPORT_ANIMATION_FAILED = "Animation export failed", 41 | } 42 | 43 | enum theme { 44 | BACKGROUND_COLOR = '#2f353a', 45 | BACKGROUND_COLOR_2 = '#212529', 46 | NAIVE_GREEN = '#63e2b7', 47 | GREY = 'rgb(180, 175, 175)' 48 | } 49 | 50 | export { globalParams, messagesEnum, theme } 51 | -------------------------------------------------------------------------------- /src/components/common/Header/HeaderPC.vue: -------------------------------------------------------------------------------- 1 | 31 | 32 | 49 | 50 | 96 | -------------------------------------------------------------------------------- /src/utils/json/Gallery/boomtheghost.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "boomtheghost/", 3 | "type": "large", 4 | "id": "boomtheghost", 5 | "title": "Boom the Ghost", 6 | "notice": "Compressed from 60mb to 6mb", 7 | "content": [ 8 | { 9 | "name": "EventScene_boomtheghost_01_1", 10 | "text": "Boom the Ghost 1" 11 | }, 12 | { 13 | "name": "EventScene_boomtheghost_01_2", 14 | "text": "Boom the Ghost 2" 15 | }, 16 | { 17 | "name": "EventScene_boomtheghost_01_3", 18 | "text": "Boom the Ghost 3" 19 | }, 20 | { 21 | "name": "EventScene_boomtheghost_01_4", 22 | "text": "Boom the Ghost 4" 23 | }, 24 | 25 | { 26 | "name": "EventScene_boomtheghost_02_1", 27 | "text": "Boom the Ghost 5" 28 | }, 29 | { 30 | "name": "EventScene_boomtheghost_02_2", 31 | "text": "Boom the Ghost 6" 32 | }, 33 | { 34 | "name": "EventScene_boomtheghost_03_1", 35 | "text": "Boom the Ghost 7" 36 | }, 37 | { 38 | "name": "EventScene_boomtheghost_03_2", 39 | "text": "Boom the Ghost 8" 40 | }, 41 | { 42 | "name": "EventScene_boomtheghost_04", 43 | "text": "Boom the Ghost 9" 44 | }, 45 | { 46 | "name": "EventScene_boomtheghost_05_1", 47 | "text": "Boom the Ghost 10" 48 | }, 49 | { 50 | "name": "EventScene_boomtheghost_05_2", 51 | "text": "Boom the Ghost 11" 52 | }, 53 | { 54 | "name": "EventScene_boomtheghost_06_1", 55 | "text": "Boom the Ghost 12" 56 | }, 57 | { 58 | "name": "EventScene_boomtheghost_06_2", 59 | "text": "Boom the Ghost 13" 60 | }, 61 | { 62 | "name": "EventScene_boomtheghost_07", 63 | "text": "Boom the Ghost 14" 64 | }, 65 | { 66 | "name": "EventScene_boomtheghost_08", 67 | "text": "Boom the Ghost 15" 68 | }, 69 | { 70 | "name": "boomtheghost_main_part2_ex", 71 | "text": "Boom the Ghost 16" 72 | }, 73 | { 74 | "name": "boomtheghost_opening_fullshot", 75 | "text": "Boom the Ghost 17" 76 | }, 77 | { 78 | "name": "boomtheghost_opening_char_elegg", 79 | "text": "Boom the Ghost 18" 80 | }, 81 | { 82 | "name": "boomtheghost_attendance_chr", 83 | "text": "Boom the Ghost 19" 84 | }, 85 | { 86 | "name": "boomtheghost_main_part1_ghost_bg_01", 87 | "text": "Boom the Ghost 20" 88 | } 89 | ] 90 | } -------------------------------------------------------------------------------- /src/utils/json/Gallery/footstepwalkrun.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "footstepwalkrun/", 3 | "type": "large", 4 | "id": "footstepwalkrun", 5 | "title": "Footstep Walk Run", 6 | "notice": "Original was 97mb. blabla now 5mb. blabla maybe not in order.", 7 | "content": [ 8 | { 9 | "name": "EventScene_footstepwalkrun_01", 10 | "text": "Footstep Walk Run 1" 11 | }, 12 | { 13 | "name": "EventScene_footstepwalkrun_02_1", 14 | "text": "Footstep Walk Run 2" 15 | }, 16 | { 17 | "name": "EventScene_footstepwalkrun_02_2", 18 | "text": "Footstep Walk Run 3" 19 | }, 20 | { 21 | "name": "EventScene_footstepwalkrun_02_3", 22 | "text": "Footstep Walk Run 4" 23 | }, 24 | { 25 | "name": "EventScene_footstepwalkrun_02_4", 26 | "text": "Footstep Walk Run 5" 27 | }, 28 | { 29 | "name": "EventScene_footstepwalkrun_02_5", 30 | "text": "Footstep Walk Run 6" 31 | }, 32 | { 33 | "name": "EventScene_footstepwalkrun_03", 34 | "text": "Footstep Walk Run 7" 35 | }, 36 | { 37 | "name": "EventScene_footstepwalkrun_04_1", 38 | "text": "Footstep Walk Run 8" 39 | }, 40 | { 41 | "name": "EventScene_footstepwalkrun_04_2", 42 | "text": "Footstep Walk Run 9" 43 | }, 44 | { 45 | "name": "EventScene_footstepwalkrun_04_3", 46 | "text": "Footstep Walk Run 10" 47 | }, 48 | { 49 | "name": "EventScene_footstepwalkrun_04_4", 50 | "text": "Footstep Walk Run 11" 51 | }, 52 | { 53 | "name": "EventScene_footstepwalkrun_05", 54 | "text": "Footstep Walk Run 12" 55 | }, 56 | { 57 | "name": "EventScene_footstepwalkrun_06_1", 58 | "text": "Footstep Walk Run 13" 59 | }, 60 | { 61 | "name": "EventScene_footstepwalkrun_06_2", 62 | "text": "Footstep Walk Run 14" 63 | }, 64 | { 65 | "name": "footstepwalkrun_part2_bg_list_hard", 66 | "text": "Footstep Walk Run 15" 67 | }, 68 | { 69 | "name": "footstepwalkrun_part1_main_char_03", 70 | "text": "Footstep Walk Run 16" 71 | }, 72 | { 73 | "name": "footstepwalkrun_part1_main_char_02", 74 | "text": "Footstep Walk Run 17" 75 | }, 76 | { 77 | "name": "footstepwalkrun_part1_main_char_01", 78 | "text": "Footstep Walk Run 18" 79 | }, 80 | { 81 | "name": "footstepwalkrun_part2_main_cha", 82 | "text": "Footstep Walk Run 19" 83 | } 84 | ] 85 | } -------------------------------------------------------------------------------- /src/utils/json/Gallery/icedragonsaga.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "icedragonsaga/", 3 | "type": "large", 4 | "id": "icedragonsaga", 5 | "title": "Ice Dragon Saga", 6 | "notice": "The original in-game raw images totals over 114mb. Compressed to 6mb. Probably not in order.", 7 | "content": [ 8 | { 9 | "name": "EventScene_icedragonsaga_01", 10 | "text": "Ice Dragon Saga 1" 11 | }, 12 | { 13 | "name": "EventScene_icedragonsaga_02_1", 14 | "text": "Ice Dragon Saga 2" 15 | }, 16 | { 17 | "name": "EventScene_icedragonsaga_02_2", 18 | "text": "Ice Dragon Saga 3" 19 | }, 20 | { 21 | "name": "EventScene_icedragonsaga_03", 22 | "text": "Ice Dragon Saga 4" 23 | }, 24 | { 25 | "name": "EventScene_icedragonsaga_04", 26 | "text": "Ice Dragon Saga 5" 27 | }, 28 | { 29 | "name": "EventScene_icedragonsaga_05_1", 30 | "text": "Ice Dragon Saga 6" 31 | }, 32 | { 33 | "name": "EventScene_icedragonsaga_05_2", 34 | "text": "Ice Dragon Saga 7" 35 | }, 36 | { 37 | "name": "EventScene_icedragonsaga_05_3", 38 | "text": "Ice Dragon Saga 8" 39 | }, 40 | { 41 | "name": "EventScene_icedragonsaga_06", 42 | "text": "Ice Dragon Saga 9" 43 | }, 44 | { 45 | "name": "EventScene_icedragonsaga_07", 46 | "text": "Ice Dragon Saga 10" 47 | }, 48 | { 49 | "name": "EventScene_icedragonsaga_08_1", 50 | "text": "Ice Dragon Saga 11" 51 | }, 52 | { 53 | "name": "EventScene_icedragonsaga_08_2", 54 | "text": "Ice Dragon Saga 12" 55 | }, 56 | { 57 | "name": "EventScene_icedragonsaga_09_1", 58 | "text": "Ice Dragon Saga 13" 59 | }, 60 | { 61 | "name": "EventScene_icedragonsaga_09_2", 62 | "text": "Ice Dragon Saga 14" 63 | }, 64 | { 65 | "name": "EventScene_icedragonsaga_10_1", 66 | "text": "Ice Dragon Saga 15" 67 | }, 68 | { 69 | "name": "EventScene_icedragonsaga_10_2", 70 | "text": "Ice Dragon Saga 16" 71 | }, 72 | { 73 | "name": "EventScene_icedragonsaga_10_3", 74 | "text": "Ice Dragon Saga 17" 75 | }, 76 | { 77 | "name": "EventScene_icedragonsaga_11", 78 | "text": "Ice Dragon Saga 18" 79 | }, 80 | { 81 | "name": "EventTitle_icedragonsaga_01", 82 | "text": "Ice Dragon Saga 19" 83 | }, 84 | { 85 | "name": "EventTitle_icedragonsaga_03", 86 | "text": "Ice Dragon Saga 20" 87 | } 88 | ] 89 | } -------------------------------------------------------------------------------- /src/utils/json/Gallery/redash.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "redash/", 3 | "type": "large", 4 | "id": "redash", 5 | "title": "RED ASH", 6 | "content": [ 7 | { 8 | "name": "EventScene_redash_10_1", 9 | "text": "RED ASH 1" 10 | }, 11 | { 12 | "name": "EventScene_redash_10_2", 13 | "text": "RED ASH 2" 14 | }, 15 | { 16 | "name": "EventScene_redash_01_02_f", 17 | "text": "RED ASH 3" 18 | }, 19 | { 20 | "name": "EventScene_redash_01_01_f", 21 | "text": "RED ASH 4" 22 | }, 23 | { 24 | "name": "EventScene_redash_01_03_f", 25 | "text": "RED ASH 5" 26 | }, 27 | { 28 | "name": "EventScene_redash_01_04_f", 29 | "text": "RED ASH 6" 30 | }, 31 | { 32 | "name": "EventScene_redash_12_1", 33 | "text": "RED ASH 7" 34 | }, 35 | { 36 | "name": "EventScene_redash_12_2", 37 | "text": "RED ASH 8" 38 | }, 39 | { 40 | "name": "EventScene_redash_13", 41 | "text": "RED ASH 9" 42 | }, 43 | { 44 | "name": "EventScene_redash_09_3", 45 | "text": "RED ASH 10" 46 | }, 47 | { 48 | "name": "EventScene_redash_09_1", 49 | "text": "RED ASH 11" 50 | }, 51 | { 52 | "name": "EventScene_redash_09_2", 53 | "text": "RED ASH 12" 54 | }, 55 | { 56 | "name": "EventScene_redash_02_1", 57 | "text": "RED ASH 13" 58 | }, 59 | { 60 | "name": "EventScene_redash_02_2", 61 | "text": "RED ASH 14" 62 | }, 63 | { 64 | "name": "EventScene_redash_03_1", 65 | "text": "RED ASH 15" 66 | }, 67 | { 68 | "name": "EventScene_redash_03_2", 69 | "text": "RED ASH 16" 70 | }, 71 | { 72 | "name": "EventScene_redash_03_3", 73 | "text": "RED ASH 17" 74 | }, 75 | { 76 | "name": "EventScene_redash_04_1", 77 | "text": "RED ASH 18" 78 | }, 79 | { 80 | "name": "EventScene_redash_04_2", 81 | "text": "RED ASH 19" 82 | }, 83 | { 84 | "name": "EventScene_redash_04_3", 85 | "text": "RED ASH 20" 86 | }, 87 | { 88 | "name": "EventScene_redash_06", 89 | "text": "RED ASH 21" 90 | }, 91 | { 92 | "name": "EventScene_redash_07", 93 | "text": "RED ASH 22" 94 | }, 95 | { 96 | "name": "EventTitle_redash_t2", 97 | "text": "RED ASH 23" 98 | }, 99 | { 100 | "name": "EventScene_redash_08", 101 | "text": "RED ASH 24" 102 | } 103 | ] 104 | } -------------------------------------------------------------------------------- /src/components/common/Header/HeaderMobile.vue: -------------------------------------------------------------------------------- 1 | 50 | 51 | 76 | 77 | 108 | -------------------------------------------------------------------------------- /src/router/index.ts: -------------------------------------------------------------------------------- 1 | import { createRouter, createWebHistory } from 'vue-router' 2 | import Index from '@/components/views/Index.vue' 3 | import L2D from '@/components/views/L2D.vue' 4 | import Credits from '@/components/views/Credits.vue' 5 | import Tools from '@/components/views/Tools.vue' 6 | import Chibi from '@/components/views/Chibi.vue' 7 | import Gallery from '@/components/views/Gallery.vue' 8 | import StoryGenerator from '@/components/views/StoryGenerator.vue' 9 | import TierListMaker from '@/components/views/Tierlistmaker.vue' 10 | import HighAndLowQualityAssets from '@/components/views/notices/HighAndLowQualityAssets.vue' 11 | import AttachmentEditor from '@/components/views/notices/AttachmentEditor.vue' 12 | 13 | const router = createRouter({ 14 | history: createWebHistory(import.meta.env.BASE_URL), 15 | routes: [ 16 | { 17 | path: '/', 18 | name: 'home', 19 | component: Index 20 | }, 21 | { 22 | path: '/v', 23 | redirect: { 24 | path: '/visualiser' 25 | } 26 | }, 27 | { 28 | path: '/v_m', 29 | redirect: { 30 | path: '/visualiser' 31 | } 32 | }, 33 | { 34 | path: '/visualiser', 35 | name: 'visualiser', 36 | component: L2D 37 | }, 38 | { 39 | path: '/credits', 40 | name: 'credits', 41 | component: Credits 42 | }, 43 | { 44 | path: '/t', 45 | redirect: { 46 | path: '/tools' 47 | } 48 | }, 49 | { 50 | path: '/tools', 51 | name: 'tools', 52 | component: Tools 53 | }, 54 | { 55 | path: '/:pathMatch(.*)*', 56 | name: 'any', 57 | component: Index 58 | }, 59 | { 60 | path: '/chibi', 61 | name: 'chibi', 62 | component: Chibi 63 | }, 64 | { 65 | path: '/gallery', 66 | name: 'gallery', 67 | component: Gallery 68 | }, 69 | { 70 | path: '/story-gen', 71 | name: 'story-gen', 72 | component: StoryGenerator 73 | }, 74 | // { 75 | // path: '/tierlistmaker', 76 | // name: 'tierlistmaker', 77 | // component: TierListMaker 78 | // }, 79 | { 80 | path: '/notice/HQvqLQAssets', 81 | name: 'HQvqLQAssets', 82 | component: HighAndLowQualityAssets 83 | }, 84 | { 85 | path: '/notice/layerEditor', 86 | name: 'layerEditor', 87 | component: AttachmentEditor 88 | } 89 | // { 90 | // path: '/about', 91 | // name: 'about', 92 | // route level code-splitting 93 | // this generates a separate chunk (About.[hash].js) for this route 94 | // which is lazy-loaded when the route is visited. 95 | // component: () => import('../views/AboutView.vue') 96 | // } 97 | ], 98 | scrollBehavior() { 99 | return { top: 0 } 100 | } 101 | }) 102 | 103 | export default router 104 | -------------------------------------------------------------------------------- /src/utils/json/Gallery/snowfalloasis.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "snowfalloasis/", 3 | "type": "large", 4 | "id": "snowfalloasis", 5 | "title": "Snow Fall Oasis", 6 | "content": [ 7 | { 8 | "name": "EventTitle_snowfalloasis_02", 9 | "text": "Snow Fall Oasis" 10 | }, 11 | { 12 | "name": "EventScene_snowfalloasis_04_1", 13 | "text": "Legend of the Bridge: Out 1" 14 | }, 15 | { 16 | "name": "EventScene_snowfalloasis_04_2", 17 | "text": "Legend of the Bridge: Out 2" 18 | }, 19 | { 20 | "name": "EventScene_snowfalloasis_04_3", 21 | "text": "Legend of the Bridge: In" 22 | }, 23 | { 24 | "name": "EventScene_snowfalloasis_05_1", 25 | "text": "Legend of the Waterfall: Out" 26 | }, 27 | { 28 | "name": "EventScene_snowfalloasis_05_2", 29 | "text": "Legend of the Waterfall: In" 30 | }, 31 | { 32 | "name": "EventScene_snowfalloasis_06_1", 33 | "text": "Legend of the Walking Trail: Out" 34 | }, 35 | { 36 | "name": "EventScene_snowfalloasis_06_2", 37 | "text": "Legend of the Walking Trail: In" 38 | }, 39 | { 40 | "name": "EventScene_snowfalloasis_01_1", 41 | "text": "Legend of the Hot Spring: Out" 42 | }, 43 | { 44 | "name": "EventScene_snowfalloasis_01_2", 45 | "text": "Legend of the Hot Spring: In" 46 | }, 47 | { 48 | "name": "EventScene_snowfalloasis_09", 49 | "text": "The Menu" 50 | }, 51 | { 52 | "name": "EventScene_snowfalloasis_10", 53 | "text": "Fireworks" 54 | }, 55 | { 56 | "name": "EventScene_snowfalloasis_11", 57 | "text": "Snowfield Festival" 58 | }, 59 | { 60 | "name": "EventScene_snowfalloasis_03_1", 61 | "text": "Legend of the Dormitory: Out" 62 | }, 63 | { 64 | "name": "EventScene_snowfalloasis_03_2", 65 | "text": "Legend of the Dormitory: In" 66 | }, 67 | { 68 | "name": "EventScene_snowfalloasis_12", 69 | "text": "Lucky Hot Spring" 70 | }, 71 | { 72 | "name": "EventScene_snowfalloasis_13", 73 | "text": "Snowfield Special Date" 74 | }, 75 | { 76 | "name": "EventScene_snowfalloasis_14", 77 | "text": "Farewell Party" 78 | }, 79 | { 80 | "name": "EventScene_snowfalloasis_02_1", 81 | "text": "Legend of the Bamboo Forest: Out" 82 | }, 83 | { 84 | "name": "EventScene_snowfalloasis_02_3", 85 | "text": "Legend of the Bamboo Forest: In 1" 86 | }, 87 | { 88 | "name": "EventScene_snowfalloasis_02_2", 89 | "text": "Legend of the Bamboo Forest: In 2" 90 | }, 91 | { 92 | "name": "EventScene_snowfalloasis_07", 93 | "text": "The Last Legend: Out" 94 | }, 95 | { 96 | "name": "EventScene_snowfalloasis_08", 97 | "text": "The Last Legend: In" 98 | } 99 | ] 100 | } -------------------------------------------------------------------------------- /src/components/common/Spine/Tools/AttachmentEditorListItem.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 92 | 93 | -------------------------------------------------------------------------------- /src/utils/json/Gallery/story10.json: -------------------------------------------------------------------------------- 1 | {"path":"story10/","type":"large","id":"story10","title":"Chapter 41 to 42","notice":"Compressed from 240mb ( for some reason ) to 22mb","content":[{"name":"EventScene_Chap_41_01.webp","text":"Chapter 41 to 42 1"},{"name":"EventScene_Chap_41_02_1.webp","text":"Chapter 41 to 42 2"},{"name":"EventScene_Chap_41_02_2.webp","text":"Chapter 41 to 42 3"},{"name":"EventScene_Chap_41_03.webp","text":"Chapter 41 to 42 4"},{"name":"EventScene_Chap_41_04_1.webp","text":"Chapter 41 to 42 5"},{"name":"EventScene_Chap_41_04_2.webp","text":"Chapter 41 to 42 6"},{"name":"EventScene_Chap_41_04_3.webp","text":"Chapter 41 to 42 7"},{"name":"EventScene_Chap_41_05.webp","text":"Chapter 41 to 42 8"},{"name":"EventScene_Chap_41_06.webp","text":"Chapter 41 to 42 9"},{"name":"EventScene_Chap_41_07.webp","text":"Chapter 41 to 42 10"},{"name":"EventScene_Chap_41_08_1.webp","text":"Chapter 41 to 42 11"},{"name":"EventScene_Chap_41_08_2.webp","text":"Chapter 41 to 42 12"},{"name":"EventScene_Chap_41_08_3.webp","text":"Chapter 41 to 42 13"},{"name":"EventScene_Chap_41_09_1.webp","text":"Chapter 41 to 42 14"},{"name":"EventScene_Chap_41_09_2.webp","text":"Chapter 41 to 42 15"},{"name":"EventScene_Chap_41_09_3.webp","text":"Chapter 41 to 42 16"},{"name":"EventScene_Chap_42_01_1.webp","text":"Chapter 41 to 42 17"},{"name":"EventScene_Chap_42_01_2.webp","text":"Chapter 41 to 42 18"},{"name":"EventScene_Chap_42_02_1.webp","text":"Chapter 41 to 42 19"},{"name":"EventScene_Chap_42_02_2.webp","text":"Chapter 41 to 42 20"},{"name":"EventScene_Chap_42_02_3.webp","text":"Chapter 41 to 42 21"},{"name":"EventScene_Chap_42_03_1.webp","text":"Chapter 41 to 42 22"},{"name":"EventScene_Chap_42_03_2.webp","text":"Chapter 41 to 42 23"},{"name":"EventScene_Chap_42_04_1.webp","text":"Chapter 41 to 42 24"},{"name":"EventScene_Chap_42_04_2.webp","text":"Chapter 41 to 42 25"},{"name":"EventScene_Chap_42_04_3.webp","text":"Chapter 41 to 42 26"},{"name":"EventScene_Chap_42_04_4.webp","text":"Chapter 41 to 42 27"},{"name":"EventScene_Chap_42_05_1.webp","text":"Chapter 41 to 42 28"},{"name":"EventScene_Chap_42_05_2.webp","text":"Chapter 41 to 42 29"},{"name":"EventScene_Chap_42_05_3.webp","text":"Chapter 41 to 42 30"},{"name":"EventScene_Chap_42_06.webp","text":"Chapter 41 to 42 31"},{"name":"EventScene_Chap_42_07_1.webp","text":"Chapter 41 to 42 32"},{"name":"EventScene_Chap_42_07_2.webp","text":"Chapter 41 to 42 33"},{"name":"EventScene_Chap_42_07_3.webp","text":"Chapter 41 to 42 34"},{"name":"EventScene_Chap_42_08_1.webp","text":"Chapter 41 to 42 35"},{"name":"EventScene_Chap_42_08_2.webp","text":"Chapter 41 to 42 36"},{"name":"EventScene_Chap_42_09.webp","text":"Chapter 41 to 42 37"},{"name":"EventScene_Chap_42_10.webp","text":"Chapter 41 to 42 38"},{"name":"EventScene_Chap_42_11.webp","text":"Chapter 41 to 42 39"},{"name":"EventScene_Chap_42_11_1.webp","text":"Chapter 41 to 42 40"},{"name":"EventScene_Chap_42_11_2.webp","text":"Chapter 41 to 42 41"},{"name":"EventScene_Chap_42_12_1.webp","text":"Chapter 41 to 42 42"},{"name":"EventScene_Chap_42_12_2.webp","text":"Chapter 41 to 42 43"},{"name":"EventScene_Chap_42_12_3.webp","text":"Chapter 41 to 42 44"}]} -------------------------------------------------------------------------------- /src/components/common/Spine/Tools/ChangeScreenshotSize.vue: -------------------------------------------------------------------------------- 1 | 44 | 45 | 90 | 91 | 102 | -------------------------------------------------------------------------------- /src/utils/json/Gallery/lastkingdom.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "lastkingdom/", 3 | "type": "large", 4 | "id": "lastkingdom", 5 | "title": "Last Kingdom", 6 | "content": [ 7 | { 8 | "name": "EventScene_lastkingdom_01_1", 9 | "text": "Last Kingdom 1" 10 | }, 11 | { 12 | "name": "EventScene_lastkingdom_01_2", 13 | "text": "Last Kingdom 2" 14 | }, 15 | { 16 | "name": "EventScene_lastkingdom_01_3", 17 | "text": "Last Kingdom 3" 18 | }, 19 | { 20 | "name": "EventScene_lastkingdom_02", 21 | "text": "Last Kingdom 4" 22 | }, 23 | { 24 | "name": "EventScene_lastkingdom_03", 25 | "text": "Last Kingdom 5" 26 | }, 27 | { 28 | "name": "EventScene_lastkingdom_04_1", 29 | "text": "Last Kingdom 6" 30 | }, 31 | { 32 | "name": "EventScene_lastkingdom_04_2", 33 | "text": "Last Kingdom 7" 34 | }, 35 | { 36 | "name": "EventScene_lastkingdom_05", 37 | "text": "Last Kingdom 8" 38 | }, 39 | { 40 | "name": "EventScene_lastkingdom_06_1", 41 | "text": "Last Kingdom 9" 42 | }, 43 | { 44 | "name": "EventScene_lastkingdom_06_2", 45 | "text": "Last Kingdom 10" 46 | }, 47 | { 48 | "name": "EventScene_lastkingdom_06_3", 49 | "text": "Last Kingdom 11" 50 | }, 51 | { 52 | "name": "EventScene_lastkingdom_07", 53 | "text": "Last Kingdom 12" 54 | }, 55 | { 56 | "name": "EventScene_lastkingdom_08", 57 | "text": "Last Kingdom 13" 58 | }, 59 | { 60 | "name": "EventScene_lastkingdom_09", 61 | "text": "Last Kingdom 14" 62 | }, 63 | { 64 | "name": "EventScene_lastkingdom_11_1", 65 | "text": "Last Kingdom 15" 66 | }, 67 | { 68 | "name": "EventScene_lastkingdom_11_2", 69 | "text": "Last Kingdom 16" 70 | }, 71 | { 72 | "name": "EventScene_lastkingdom_12_1", 73 | "text": "Last Kingdom 17" 74 | }, 75 | { 76 | "name": "EventScene_lastkingdom_12_2", 77 | "text": "Last Kingdom 18" 78 | }, 79 | { 80 | "name": "EventScene_lastkingdom_12_3", 81 | "text": "Last Kingdom 19" 82 | }, 83 | { 84 | "name": "EventScene_lastkingdom_10", 85 | "text": "Last Kingdom 20" 86 | }, 87 | { 88 | "name": "EventScene_lastkingdom_13_1", 89 | "text": "Last Kingdom 21" 90 | }, 91 | { 92 | "name": "EventScene_lastkingdom_13_2", 93 | "text": "Last Kingdom 22" 94 | }, 95 | { 96 | "name": "EventScene_lastkingdom_13_3", 97 | "text": "Last Kingdom 23" 98 | }, 99 | { 100 | "name": "EventScene_lastkingdom_14", 101 | "text": "Last Kingdom 24" 102 | }, 103 | { 104 | "name": "EventScene_lastkingdom_15_1", 105 | "text": "Last Kingdom 25" 106 | }, 107 | { 108 | "name": "EventScene_lastkingdom_15_2", 109 | "text": "Last Kingdom 26" 110 | }, 111 | { 112 | "name": "EventScene_lastkingdom_16", 113 | "text": "Last Kingdom 27" 114 | } 115 | ] 116 | } -------------------------------------------------------------------------------- /src/utils/json/Gallery/story4.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "story4/", 3 | "type": "large", 4 | "id": "story4", 5 | "title": "Chapters 26 to 30", 6 | "content": [ 7 | { 8 | "name": "EventScene_Chap_26_01", 9 | "text": "Red Eye" 10 | }, 11 | { 12 | "name": "EventScene_Chap_26_03", 13 | "text": "Music Box" 14 | }, 15 | { 16 | "name": "EventScene_Chap_26_04", 17 | "text": "Red Hood" 18 | }, 19 | { 20 | "name": "EventScene_Chap_26_05", 21 | "text": "Rapi" 22 | }, 23 | { 24 | "name": "EventScene_Chap_26_06", 25 | "text": "Rapi" 26 | }, 27 | { 28 | "name": "EventScene_Chap_26_07", 29 | "text": "Mother Whale ?" 30 | }, 31 | { 32 | "name": "EventScene_Chap_26_08", 33 | "text": "Raptillion!" 34 | }, 35 | { 36 | "name": "EventScene_Chap_26_After_01", 37 | "text": "Exploration" 38 | }, 39 | { 40 | "name": "EventScene_Chap_27_01", 41 | "text": "Dying Rapture" 42 | }, 43 | { 44 | "name": "EventScene_Chap_27_02", 45 | "text": "Dying Rapture 2" 46 | }, 47 | { 48 | "name": "EventScene_Chap_27_03", 49 | "text": "BOOM" 50 | }, 51 | { 52 | "name": "EventScene_Chap_28_01", 53 | "text": "BOOOOOOM" 54 | }, 55 | { 56 | "name": "EventScene_Chap_28_02", 57 | "text": "Seven Dwarves" 58 | }, 59 | { 60 | "name": "EventScene_Chap_28_03", 61 | "text": "I love futuristic military war weapons" 62 | }, 63 | { 64 | "name": "EventScene_Chap_28_04", 65 | "text": "Get out of the way" 66 | }, 67 | { 68 | "name": "EventScene_Chap_28_05", 69 | "text": "OUT OF THE WAY" 70 | }, 71 | { 72 | "name": "EventScene_Chap_28_06", 73 | "text": "Hole" 74 | }, 75 | { 76 | "name": "EventScene_Chap_28_07", 77 | "text": "Elevator shaft" 78 | }, 79 | { 80 | "name": "EventScene_Chap_29_01", 81 | "text": "Trapped" 82 | }, 83 | { 84 | "name": "EventScene_Chap_30_01", 85 | "text": "Hole in pants" 86 | }, 87 | { 88 | "name": "EventScene_Chap_30_02", 89 | "text": "Soon to be made Hole in pants" 90 | }, 91 | { 92 | "name": "EventScene_Chap_30_03_01", 93 | "text": "Hammering" 94 | }, 95 | { 96 | "name": "EventScene_Chap_30_03_02", 97 | "text": "Hammering 2" 98 | }, 99 | { 100 | "name": "EventScene_Chap_30_04_01", 101 | "text": "Manga 1" 102 | }, 103 | { 104 | "name": "EventScene_Chap_30_04_02", 105 | "text": "Manga 2" 106 | }, 107 | { 108 | "name": "EventScene_Chap_30_04_03", 109 | "text": "Manga 3" 110 | }, 111 | { 112 | "name": "EventScene_Chap_30_04_04", 113 | "text": "Manga 4" 114 | }, 115 | { 116 | "name": "EventScene_Chap_30_04_05", 117 | "text": "Manga 5" 118 | }, 119 | { 120 | "name": "EventScene_Chap_30_04_06", 121 | "text": "Manga 6" 122 | }, 123 | { 124 | "name": "EventScene_Chap_30_04_07", 125 | "text": "Manga 7" 126 | } 127 | ] 128 | } -------------------------------------------------------------------------------- /src/components/common/Spine/CharacterList.vue: -------------------------------------------------------------------------------- 1 | 31 | 32 | 65 | 66 | 122 | -------------------------------------------------------------------------------- /src/components/common/Spine/Tools/BackgroundColor.vue: -------------------------------------------------------------------------------- 1 | 35 | 36 | 105 | 106 | 120 | -------------------------------------------------------------------------------- /src/components/views/Chibi.vue: -------------------------------------------------------------------------------- 1 | 23 | 24 | 88 | 89 | 99 | -------------------------------------------------------------------------------- /src/utils/json/Gallery/story3.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "story3/", 3 | "type": "large", 4 | "id": "story3", 5 | "title": "Chapters 20 to 25", 6 | "content": [ 7 | { 8 | "name": "EventScene_Chap_20_01", 9 | "text": "Johan" 10 | }, 11 | { 12 | "name": "EventScene_Chap_20_02_01", 13 | "text": "Shooting Star" 14 | }, 15 | { 16 | "name": "EventScene_Chap_20_03", 17 | "text": "Dragon" 18 | }, 19 | { 20 | "name": "EventScene_Chap_21_02_01", 21 | "text": "Mother Whale 1" 22 | }, 23 | { 24 | "name": "EventScene_Chap_21_02_02", 25 | "text": "Mother Whale 2" 26 | }, 27 | { 28 | "name": "EventScene_Chap_21_02", 29 | "text": "Mother Whale 3" 30 | }, 31 | { 32 | "name": "EventScene_Chap_21_02_03", 33 | "text": "Mother Whale 4" 34 | }, 35 | { 36 | "name": "EventScene_Chap_21_03", 37 | "text": "Mother Whale 5" 38 | }, 39 | { 40 | "name": "EventScene_Chap_21_02_04", 41 | "text": "Mother Whale 6" 42 | }, 43 | { 44 | "name": "EventScene_Chap_21_04", 45 | "text": "Mother Whale 7" 46 | }, 47 | { 48 | "name": "EventScene_Chap_21_05", 49 | "text": "Mother Whale 8" 50 | }, 51 | { 52 | "name": "EventScene_Chap_21_06", 53 | "text": "Mother Whale 9" 54 | }, 55 | { 56 | "name": "EventScene_Chap_21_07_01", 57 | "text": "Mother Whale 10" 58 | }, 59 | { 60 | "name": "EventScene_Chap_21_07_02", 61 | "text": "Mother Whale 11" 62 | }, 63 | { 64 | "name": "EventScene_Chap_21_07", 65 | "text": "Vapauss" 66 | }, 67 | { 68 | "name": "EventScene_Chap_22_02", 69 | "text": "Enikk" 70 | }, 71 | { 72 | "name": "EventScene_Chap_22_03", 73 | "text": "Nihilister" 74 | }, 75 | { 76 | "name": "EventScene_Chap_22_04", 77 | "text": "Destruction" 78 | }, 79 | { 80 | "name": "EventScene_Chap_22_05", 81 | "text": "Goddess" 82 | }, 83 | { 84 | "name": "EventScene_Chap_22_06", 85 | "text": "Dorothy" 86 | }, 87 | { 88 | "name": "EventScene_Chap_23_01", 89 | "text": "Moran" 90 | }, 91 | { 92 | "name": "EventScene_Chap_23_02", 93 | "text": "Chuunibyou & Dog" 94 | }, 95 | { 96 | "name": "EventScene_Chap_24_01", 97 | "text": "Viper" 98 | }, 99 | { 100 | "name": "EventScene_Chap_24_02", 101 | "text": "Viper" 102 | }, 103 | { 104 | "name": "EventScene_Chap_24_03", 105 | "text": "Viper" 106 | }, 107 | { 108 | "name": "EventScene_Chap_24_04", 109 | "text": "Rapi" 110 | }, 111 | { 112 | "name": "EventScene_Chap_24_05", 113 | "text": "Rapi & Scarf" 114 | }, 115 | { 116 | "name": "EventScene_Chap_24_06", 117 | "text": "Scarf" 118 | }, 119 | { 120 | "name": "EventScene_Chap_24_07", 121 | "text": "Call an ambulance" 122 | }, 123 | { 124 | "name": "EventScene_Chap_24_08", 125 | "text": "But not for me" 126 | }, 127 | { 128 | "name": "EventScene_Chap_24_After2_01", 129 | "text": "Andersen " 130 | }, 131 | { 132 | "name": "EventScene_Chap_24_09", 133 | "text": "Syuen" 134 | } 135 | ] 136 | } -------------------------------------------------------------------------------- /src/utils/json/Gallery/story6.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "story6/", 3 | "type": "large", 4 | "id": "story6", 5 | "title": "Chapters 33 to 34", 6 | "notice": "The original in-game raw images totals over 185mb. It's way too high. The images here are compressed to a total of 7mb, thus they aren't original quality, but fairly close.", 7 | "content": [ 8 | { 9 | "name": "EventScene_Chap_33_01_03", 10 | "text": "Oil" 11 | }, 12 | { 13 | "name": "EventScene_Chap_33_01_01", 14 | "text": "Levi" 15 | }, 16 | { 17 | "name": "EventScene_Chap_33_01_02", 18 | "text": "Leviathan" 19 | }, 20 | { 21 | "name": "EventScene_Chap_33_02", 22 | "text": "gun" 23 | }, 24 | { 25 | "name": "EventScene_Chap_33_03", 26 | "text": "Florida" 27 | }, 28 | { 29 | "name": "EventScene_Chap_33_04_01", 30 | "text": "Ball" 31 | }, 32 | { 33 | "name": "EventScene_Chap_33_04_02", 34 | "text": "Balling" 35 | }, 36 | { 37 | "name": "EventScene_Chap_33_04_03", 38 | "text": "Disco Ball" 39 | }, 40 | { 41 | "name": "EventScene_Chap_33_05", 42 | "text": "Average One Piece sakuga frame" 43 | }, 44 | { 45 | "name": "EventScene_Chap_33_06_01", 46 | "text": "Another one" 47 | }, 48 | { 49 | "name": "EventScene_Chap_33_06_02", 50 | "text": "Another one" 51 | }, 52 | { 53 | "name": "EventScene_Chap_34_01", 54 | "text": "Rapi pout :(" 55 | }, 56 | { 57 | "name": "EventScene_Chap_34_02", 58 | "text": "Dead Space low on hp" 59 | }, 60 | { 61 | "name": "EventScene_Chap_34_03_01", 62 | "text": "Would" 63 | }, 64 | { 65 | "name": "EventScene_Chap_34_03_02", 66 | "text": "Would" 67 | }, 68 | { 69 | "name": "EventScene_Chap_34_04_01", 70 | "text": "wouldn't" 71 | }, 72 | { 73 | "name": "EventScene_Chap_34_04_02", 74 | "text": "yikes, they're trying so hard to make them armpit girls" 75 | }, 76 | { 77 | "name": "EventScene_Chap_34_05_01", 78 | "text": "guns" 79 | }, 80 | { 81 | "name": "EventScene_Chap_34_05_02", 82 | "text": "Made in Abyss ahh hole" 83 | }, 84 | { 85 | "name": "EventScene_Chap_34_05_03", 86 | "text": "Would" 87 | }, 88 | { 89 | "name": "EventScene_Chap_34_05_04", 90 | "text": "Still would ngl" 91 | }, 92 | { 93 | "name": "EventScene_Chap_34_07", 94 | "text": "Never let BA players know about Leviathan" 95 | }, 96 | { 97 | "name": "EventScene_Chap_34_08_01", 98 | "text": "Not this bitch again" 99 | }, 100 | { 101 | "name": "EventScene_Chap_34_08_02", 102 | "text": "Ok good she's gone" 103 | }, 104 | { 105 | "name": "EventScene_Chap_34_09", 106 | "text": "Can't wait for rh to never appear again" 107 | }, 108 | { 109 | "name": "EventScene_Chap_34_10_01", 110 | "text": "Your tits will never recover the slop you made" 111 | }, 112 | { 113 | "name": "EventScene_Chap_34_10_02", 114 | "text": "Hopefully the last pixels she'll ever waste on story mode" 115 | }, 116 | { 117 | "name": "EventScene_Chap_34_11", 118 | "text": "Rapi Yoko Littner Tengen Toppa Gurren Lagann" 119 | } 120 | ] 121 | } -------------------------------------------------------------------------------- /src/utils/json/honorifics.json: -------------------------------------------------------------------------------- 1 | { 2 | "Emma": "Commander", 3 | "Privaty": "Commander", 4 | "Privaty: Unkind Maid": "Master", 5 | "Signal": "Commander", 6 | "Poli": "Commander", 7 | "Miranda": "Commander", 8 | "Brid": "Commander", 9 | "Soline": "Commander", 10 | "Diesel": "Commander", 11 | "Vesti": "Commander", 12 | "Eunhwa": "Weakling", 13 | "Eunhwa: Tactical Upgrade": "Junior Blockhead", 14 | "Guillotine": "Partner", 15 | "Maiden": "Commander", 16 | "D": "Commander", 17 | "D: Killer Wife": "Honey", 18 | "Helm": "Subordinate", 19 | "Mast": "Captain", 20 | "Mast: Romantic Maid": "Master Captain", 21 | "Marciana": "Commander", 22 | "Quiry": "Commander", 23 | "Rapi": "Commander", 24 | "Neon": "Master", 25 | "Delta": "Commander", 26 | "Anchor": "Captain", 27 | "Anchor: Innocent Maid": "Master", 28 | "Maxwell": "Cutie Pie", 29 | "Yuni": "Commander", 30 | "Liter": "Greenhorn", 31 | "Julia": "Conductor", 32 | "Centi": "Boss", 33 | "Drake": "Moron", 34 | "Crow": "Commander", 35 | "Pepper": "Commander", 36 | "Admi": "Commander", 37 | "Jackal": "Commander", 38 | "Laplace": "Birdie", 39 | "Guilty": "Counselor", 40 | "Sin": "Instructor", 41 | "Quency": "Instructor", 42 | "Epinel": "Coach", 43 | "Naga": "Teacher", 44 | "Tia": "Teacher", 45 | "Mihara": "Commander", 46 | "Anne": "Teacher", 47 | "Ether": "No. 7", 48 | "Sugar": "Partner", 49 | "Exia": "Noob", 50 | "Alice": "Rabbity", 51 | "Blanc": "Pit Boss", 52 | "Noir": "Pit Boss", 53 | "Folkwang": "Coach", 54 | "Sakura": "Commander-kun", 55 | "Viper": "Honey", 56 | "Cocoa": "Master", 57 | "Soda": "Master", 58 | "Biscuit": "Trainer", 59 | "Rei": "Teacher", 60 | "Aria": "Maestro", 61 | "Noise": "Producer", 62 | "Rumani": "Gym Rat", 63 | "Papillon": "Honey", 64 | "Scarlet": "My Lord", 65 | "Dorothy": "Your Grace", 66 | "Rapunzel": "Believer", 67 | "Modernia": "Commander", 68 | "Red Hood": "Handsome", 69 | "Snow White": "Commander", 70 | "Ludmilla": "Servant", 71 | "Noah": "Impostor", 72 | "Novel": "Watson", 73 | "Harran": "Follower", 74 | "Isabel": "Darling", 75 | "Nihilister": "Human", 76 | "Rupee": "Sweetie", 77 | "Dolla": "Client", 78 | "Belorta": "Old-Timer", 79 | "Mica": "Old-Timer", 80 | "Nero": "Scoops", 81 | "Milk": "Pal", 82 | "Tove": "Survivalist", 83 | "Neve": "Burly Bear", 84 | "Rouge": "Highroller", 85 | "Frima": "You", 86 | "Crown": "Advisor", 87 | "Flora": "Blossom", 88 | "Bready": "Bonne Bouche", 89 | "Moran": "Cadet", 90 | "Sora": "Captain", 91 | "Cielo": "Captain", 92 | "Sky": "Captain", 93 | "Bay": "Coach", 94 | "Clay": "Coach", 95 | "Only One": "Daddy", 96 | "Cecil": "Darling", 97 | "Mori": "Evaluator", 98 | "Nayuta": "Great Hero", 99 | "Chatterbox": "Human", 100 | "Liberalio": "Human", 101 | "Behemoth": "Human", 102 | "Mecha Shifty": "Human", 103 | "Ade": "Master", 104 | "Rosanna": "Mister", 105 | "Phantom": "Monsieur", 106 | "Crust": "Mr. Gourmand", 107 | "Yulha": "Newbie", 108 | "Jien": "No. 7", 109 | "Cinderella": "Prince", 110 | "Little Mermaid": "Prince", 111 | "Chime": "Rapscallion", 112 | "Yan": "Rookie", 113 | "Trina": "Sun", 114 | "Grave": "Superhuman", 115 | "Einkk": "Sweetie", 116 | "Ein": "Teacher", 117 | "N102": "Teacher", 118 | "Zwei": "Teacher", 119 | "Ziz": "Young Man", 120 | "Bahamut": "Young Man", 121 | "Leona": "Zoo Keeper", 122 | "Asuka: WILLE": "Lilin", 123 | "Volume": "Manager", 124 | "K": "Commander", 125 | "Arcana": "Commander", 126 | "Elegg": "Mr. Commander" 127 | } 128 | -------------------------------------------------------------------------------- /src/utils/json/Gallery/unbreakablesphere.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "unbreakablesphere/", 3 | "type": "large", 4 | "id": "unbreakablesphere", 5 | "title": "Unbreakable Sphere", 6 | "notice": "Compressed from 140mb total to 7mb", 7 | "content": [ 8 | { 9 | "name": "EventScene_unbreakablesphere_01_1", 10 | "text": "Unbreakable Sphere 1" 11 | }, 12 | { 13 | "name": "EventScene_unbreakablesphere_01_2", 14 | "text": "Unbreakable Sphere 2" 15 | }, 16 | { 17 | "name": "EventScene_unbreakablesphere_02_1", 18 | "text": "Unbreakable Sphere 3" 19 | }, 20 | { 21 | "name": "EventScene_unbreakablesphere_02_2", 22 | "text": "Unbreakable Sphere 4" 23 | }, 24 | { 25 | "name": "EventScene_unbreakablesphere_02_3", 26 | "text": "Unbreakable Sphere 5" 27 | }, 28 | { 29 | "name": "EventScene_unbreakablesphere_03_1", 30 | "text": "Unbreakable Sphere 6" 31 | }, 32 | { 33 | "name": "EventScene_unbreakablesphere_03_2", 34 | "text": "Unbreakable Sphere 7" 35 | }, 36 | { 37 | "name": "EventScene_unbreakablesphere_03_3", 38 | "text": "Unbreakable Sphere 8" 39 | }, 40 | { 41 | "name": "EventScene_unbreakablesphere_04", 42 | "text": "Unbreakable Sphere 9" 43 | }, 44 | { 45 | "name": "EventScene_unbreakablesphere_05", 46 | "text": "Unbreakable Sphere 10" 47 | }, 48 | { 49 | "name": "EventScene_unbreakablesphere_06", 50 | "text": "Unbreakable Sphere 11" 51 | }, 52 | { 53 | "name": "EventScene_unbreakablesphere_07_1", 54 | "text": "Unbreakable Sphere 12" 55 | }, 56 | { 57 | "name": "EventScene_unbreakablesphere_07_2", 58 | "text": "Unbreakable Sphere 13" 59 | }, 60 | { 61 | "name": "EventScene_unbreakablesphere_07_3", 62 | "text": "Unbreakable Sphere 14" 63 | }, 64 | { 65 | "name": "EventScene_unbreakablesphere_08_1", 66 | "text": "Unbreakable Sphere 15" 67 | }, 68 | { 69 | "name": "EventScene_unbreakablesphere_08_2", 70 | "text": "Unbreakable Sphere 16" 71 | }, 72 | { 73 | "name": "EventScene_unbreakablesphere_09", 74 | "text": "Unbreakable Sphere 17" 75 | }, 76 | { 77 | "name": "EventScene_unbreakablesphere_10_1", 78 | "text": "Unbreakable Sphere 18" 79 | }, 80 | { 81 | "name": "EventScene_unbreakablesphere_10_2", 82 | "text": "Unbreakable Sphere 19" 83 | }, 84 | { 85 | "name": "EventScene_unbreakablesphere_11_1", 86 | "text": "Unbreakable Sphere 20" 87 | }, 88 | { 89 | "name": "EventScene_unbreakablesphere_11_2", 90 | "text": "Unbreakable Sphere 21" 91 | }, 92 | { 93 | "name": "EventScene_unbreakablesphere_11_3", 94 | "text": "Unbreakable Sphere 22" 95 | }, 96 | { 97 | "name": "EventScene_unbreakablesphere_11_4", 98 | "text": "Unbreakable Sphere 23" 99 | }, 100 | { 101 | "name": "EventScene_unbreakablesphere_11_5", 102 | "text": "Unbreakable Sphere 24" 103 | }, 104 | { 105 | "name": "EventScene_unbreakablesphere_11_6", 106 | "text": "Unbreakable Sphere 25" 107 | }, 108 | { 109 | "name": "EventScene_unbreakablesphere_12", 110 | "text": "Unbreakable Sphere 26" 111 | }, 112 | { 113 | "name": "EventScene_unbreakablesphere_13", 114 | "text": "Unbreakable Sphere 27" 115 | }, 116 | { 117 | "name": "unbreakablesphere_list_part2_nor_bg_01", 118 | "text": "Unbreakable Sphere 28" 119 | }, 120 | { 121 | "name": "unbreakablesphere_list_part2_hard_list_top", 122 | "text": "Unbreakable Sphere 29" 123 | } 124 | ] 125 | } -------------------------------------------------------------------------------- /src/components/common/Spine/ToolList.vue: -------------------------------------------------------------------------------- 1 | 61 | 62 | 80 | 81 | 132 | -------------------------------------------------------------------------------- /src/components/common/Tools/AlphaConverters.vue: -------------------------------------------------------------------------------- 1 | 40 | 41 | -------------------------------------------------------------------------------- /src/utils/json/Gallery/whitememory.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "whitememory/", 3 | "type": "large", 4 | "id": "whitememory", 5 | "title": "White Memory", 6 | "content": [ 7 | { 8 | "name": "whitememory_01", 9 | "text": "The Woods" 10 | }, 11 | { 12 | "name": "whitememory_02_1", 13 | "text": "The Pond" 14 | }, 15 | { 16 | "name": "whitememory_02_2", 17 | "text": "The Log" 18 | }, 19 | { 20 | "name": "whitememory_03", 21 | "text": "The City" 22 | }, 23 | { 24 | "name": "whitememory_04", 25 | "text": "The Path" 26 | }, 27 | { 28 | "name": "whitememory_05_1", 29 | "text": "The Watchtower" 30 | }, 31 | { 32 | "name": "whitememory_05_2", 33 | "text": "Morning Walk" 34 | }, 35 | { 36 | "name": "whitememory_06_1", 37 | "text": "The Girl" 38 | }, 39 | { 40 | "name": "whitememory_06_2", 41 | "text": "The Smiling Girl" 42 | }, 43 | { 44 | "name": "whitememory_07", 45 | "text": "Flowers" 46 | }, 47 | { 48 | "name": "whitememory_08_1", 49 | "text": "Patience" 50 | }, 51 | { 52 | "name": "whitememory_08_2", 53 | "text": "Fishing" 54 | }, 55 | { 56 | "name": "whitememory_09", 57 | "text": "The Failure" 58 | }, 59 | { 60 | "name": "whitememory_10", 61 | "text": "Tonight's Dinner" 62 | }, 63 | { 64 | "name": "whitememory_11_1", 65 | "text": "I hope she didn't put anything weird in the food" 66 | }, 67 | { 68 | "name": "whitememory_11_2", 69 | "text": "It's ready" 70 | }, 71 | { 72 | "name": "whitememory_12_1", 73 | "text": "Notes" 74 | }, 75 | { 76 | "name": "whitememory_12_2", 77 | "text": "Can't read them anymore there are people in front" 78 | }, 79 | { 80 | "name": "whitememory_13_1", 81 | "text": "Open Field" 82 | }, 83 | { 84 | "name": "whitememory_13_2", 85 | "text": "Can't find a name" 86 | }, 87 | { 88 | "name": "whitememory_14_1", 89 | "text": "The Coffin" 90 | }, 91 | { 92 | "name": "whitememory_14_2", 93 | "text": "The Commander" 94 | }, 95 | { 96 | "name": "whitememory_15_1", 97 | "text": "The House" 98 | }, 99 | { 100 | "name": "whitememory_15_2", 101 | "text": "Posters" 102 | }, 103 | { 104 | "name": "whitememory_15_3", 105 | "text": "The Other Side" 106 | }, 107 | { 108 | "name": "whitememory_16", 109 | "text": "The Fence" 110 | }, 111 | { 112 | "name": "whitememory_17", 113 | "text": "What is that ?" 114 | }, 115 | { 116 | "name": "whitememory_18", 117 | "text": "The Deer" 118 | }, 119 | { 120 | "name": "whitememory_19_1", 121 | "text": "Hunger" 122 | }, 123 | { 124 | "name": "whitememory_19_2", 125 | "text": "Meat" 126 | }, 127 | { 128 | "name": "whitememory_20", 129 | "text": "The Flower" 130 | }, 131 | { 132 | "name": "whitememory_21", 133 | "text": "Dog Tags" 134 | }, 135 | { 136 | "name": "whitememory_22", 137 | "text": "Rocks" 138 | }, 139 | { 140 | "name": "whitememory_23", 141 | "text": "Mushrooms" 142 | }, 143 | { 144 | "name": "whitememory_24", 145 | "text": "The Radio" 146 | }, 147 | { 148 | "name": "whitememory_25", 149 | "text": "Not sure what this is either" 150 | }, 151 | { 152 | "name": "whitememory_26", 153 | "text": "The META character" 154 | }, 155 | { 156 | "name": "whitememory_27", 157 | "text": "The Umbrella" 158 | }, 159 | { 160 | "name": "whitememory_28", 161 | "text": "The Pervert" 162 | } 163 | ] 164 | } -------------------------------------------------------------------------------- /src/components/views/Index.vue: -------------------------------------------------------------------------------- 1 | 45 | 46 | 79 | 80 | 124 | -------------------------------------------------------------------------------- /src/utils/json/Gallery/albums.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "albums/", 3 | "type": "img", 4 | "id": "albums", 5 | "title": "Album Covers", 6 | "content": [ 7 | { 8 | "name": "album_field_01", 9 | "text": "Sleeping Forest" 10 | }, 11 | { 12 | "name": "album_menu_01", 13 | "text": "After World" 14 | }, 15 | { 16 | "name": "album_lostsector_01", 17 | "text": "Lost Sector" 18 | }, 19 | { 20 | "name": "album_story_01", 21 | "text": "Folk Tales" 22 | }, 23 | { 24 | "name": "album_event_01", 25 | "text": "Events" 26 | }, 27 | { 28 | "name": "album_field_02", 29 | "text": "Living Land" 30 | }, 31 | { 32 | "name": "album_field_03", 33 | "text": "Wandering Soul" 34 | }, 35 | { 36 | "name": "album_field_04", 37 | "text": "Wonderland" 38 | }, 39 | { 40 | "name": "album_field_05", 41 | "text": "White Snow" 42 | }, 43 | { 44 | "name": "album_field_06", 45 | "text": "Hand On Hand" 46 | }, 47 | { 48 | "name": "album_field_07", 49 | "text": "Two Top" 50 | }, 51 | { 52 | "name": "album_field_08", 53 | "text": "Red Eye, Smile" 54 | }, 55 | { 56 | "name": "album_field_09", 57 | "text": "Sand Storm" 58 | }, 59 | { 60 | "name": "album_field_10", 61 | "text": "Eternal Scar" 62 | }, 63 | { 64 | "name": "album_field_11", 65 | "text": "Morning Star" 66 | }, 67 | { 68 | "name": "album_field_13", 69 | "text": "Invasion" 70 | }, 71 | { 72 | "name": "album_field_14", 73 | "text": "Trace" 74 | }, 75 | { 76 | "name": "album_field_15", 77 | "text": "Unknown" 78 | }, 79 | { 80 | "name": "album_field_16", 81 | "text": "Succession" 82 | }, 83 | { 84 | "name": "album_field_17", 85 | "text": "From the Sky, From the Land" 86 | }, 87 | { 88 | "name": "album_lastkingdom_01", 89 | "text": "Last Kingdom" 90 | }, 91 | { 92 | "name": "album_redash_01", 93 | "text": "REDASH" 94 | }, 95 | { 96 | "name": "album_overzone_01", 97 | "text": "Over Zone" 98 | }, 99 | { 100 | "name": "album_bluewater_01", 101 | "text": "Blue Water Island" 102 | }, 103 | { 104 | "name": "album_outerautomata_01", 105 | "text": "Outer Automata" 106 | }, 107 | { 108 | "name": "album_neverland_01", 109 | "text": "Neverland" 110 | }, 111 | { 112 | "name": "album_recipe_01", 113 | "text": "Re: Cipe For You" 114 | }, 115 | { 116 | "name": "album_golden_01", 117 | "text": "Golden Coin Rush" 118 | }, 119 | { 120 | "name": "album_beauty_01", 121 | "text": "Beauty Full Shot" 122 | }, 123 | { 124 | "name": "album_ce004_01", 125 | "text": "EVANGELION" 126 | }, 127 | { 128 | "name": "album_oldtales_01", 129 | "text": "Old Tales" 130 | }, 131 | { 132 | "name": "album_icedragonsaga_01", 133 | "text": "Ice Dragon Saga" 134 | }, 135 | { 136 | "name": "album_ce005_01", 137 | "text": "SECOND QUEST" 138 | }, 139 | { 140 | "name": "album_unbreakablesphere_01", 141 | "text": "UNBREAKable SPHERE" 142 | }, 143 | { 144 | "name": "album_ce006_01", 145 | "text": "Memoriess TELLER" 146 | }, 147 | { 148 | "name": "album_boomtheghost_01", 149 | "text": "Boom the Ghost" 150 | }, 151 | { 152 | "name": "album_absolute_01", 153 | "text": "ABSOLUTE" 154 | }, 155 | { 156 | "name": "album_coinsinrush_01", 157 | "text": "COINS IN RUSH" 158 | }, 159 | { 160 | "name": "album_ce007_01", 161 | "text": "Reborn Evil" 162 | }, 163 | { 164 | "name": "album_special_01", 165 | "text": "Special Sound Track" 166 | }, 167 | { 168 | "name": "album_goddessfall_01", 169 | "text": "Goddess Fall" 170 | } 171 | ] 172 | } -------------------------------------------------------------------------------- /src/components/common/Spine/WrapperMobile.vue: -------------------------------------------------------------------------------- 1 | 66 | 67 | 103 | 104 | 149 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 55 | 56 | 174 | -------------------------------------------------------------------------------- /src/components/common/Spine/Tools/CustomLoaderItem.vue: -------------------------------------------------------------------------------- 1 | 20 | 21 | 120 | 121 | -------------------------------------------------------------------------------- /src/utils/json/Gallery/goddessfall.json: -------------------------------------------------------------------------------- 1 | {"path":"goddessfall/","type":"large","id":"goddessfall","title":"Goddess Fall","notice":"Compressed from 350mb ( wtf is that size ) to 28mb","content":[{"name":"EventScene_goddessfall_01.webp","text":"Goddess Fall 1"},{"name":"EventScene_goddessfall_02.webp","text":"Goddess Fall 2"},{"name":"EventScene_goddessfall_03.webp","text":"Goddess Fall 3"},{"name":"EventScene_goddessfall_04.webp","text":"Goddess Fall 4"},{"name":"EventScene_goddessfall_05_1.webp","text":"Goddess Fall 5"},{"name":"EventScene_goddessfall_05_2.webp","text":"Goddess Fall 6"},{"name":"EventScene_goddessfall_05_3.webp","text":"Goddess Fall 7"},{"name":"EventScene_goddessfall_05_4.webp","text":"Goddess Fall 8"},{"name":"EventScene_goddessfall_06_1.webp","text":"Goddess Fall 9"},{"name":"EventScene_goddessfall_06_2.webp","text":"Goddess Fall 10"},{"name":"EventScene_goddessfall_06_3.webp","text":"Goddess Fall 11"},{"name":"EventScene_goddessfall_07_1.webp","text":"Goddess Fall 12"},{"name":"EventScene_goddessfall_07_2.webp","text":"Goddess Fall 13"},{"name":"EventScene_goddessfall_07_3.webp","text":"Goddess Fall 14"},{"name":"EventScene_goddessfall_07_4.webp","text":"Goddess Fall 15"},{"name":"EventScene_goddessfall_08.webp","text":"Goddess Fall 16"},{"name":"EventScene_goddessfall_09.webp","text":"Goddess Fall 17"},{"name":"EventScene_goddessfall_10.webp","text":"Goddess Fall 18"},{"name":"EventScene_goddessfall_11.webp","text":"Goddess Fall 19"},{"name":"EventScene_goddessfall_12_1.webp","text":"Goddess Fall 20"},{"name":"EventScene_goddessfall_12_2.webp","text":"Goddess Fall 21"},{"name":"EventScene_goddessfall_13.webp","text":"Goddess Fall 22"},{"name":"EventScene_goddessfall_14_1.webp","text":"Goddess Fall 23"},{"name":"EventScene_goddessfall_14_2.webp","text":"Goddess Fall 24"},{"name":"EventScene_goddessfall_14_3.webp","text":"Goddess Fall 25"},{"name":"EventScene_goddessfall_14_4.webp","text":"Goddess Fall 26"},{"name":"EventScene_goddessfall_15_1.webp","text":"Goddess Fall 27"},{"name":"EventScene_goddessfall_15_2.webp","text":"Goddess Fall 28"},{"name":"EventScene_goddessfall_16_1.webp","text":"Goddess Fall 29"},{"name":"EventScene_goddessfall_16_2.webp","text":"Goddess Fall 30"},{"name":"EventScene_goddessfall_16_3.webp","text":"Goddess Fall 31"},{"name":"EventScene_goddessfall_16_4.webp","text":"Goddess Fall 32"},{"name":"EventScene_goddessfall_16_5.webp","text":"Goddess Fall 33"},{"name":"EventScene_goddessfall_16_6.webp","text":"Goddess Fall 34"},{"name":"EventScene_goddessfall_17_1.webp","text":"Goddess Fall 35"},{"name":"EventScene_goddessfall_17_2.webp","text":"Goddess Fall 36"},{"name":"EventScene_goddessfall_18_1.webp","text":"Goddess Fall 37"},{"name":"EventScene_goddessfall_18_2.webp","text":"Goddess Fall 38"},{"name":"EventScene_goddessfall_19_1.webp","text":"Goddess Fall 39"},{"name":"EventScene_goddessfall_19_2.webp","text":"Goddess Fall 40"},{"name":"EventScene_goddessfall_19_3.webp","text":"Goddess Fall 41"},{"name":"EventScene_goddessfall_20_1.webp","text":"Goddess Fall 42"},{"name":"EventScene_goddessfall_20_2.webp","text":"Goddess Fall 43"},{"name":"EventScene_goddessfall_20_3.webp","text":"Goddess Fall 44"},{"name":"EventScene_goddessfall_20_4.webp","text":"Goddess Fall 45"},{"name":"EventScene_goddessfall_20_5.webp","text":"Goddess Fall 46"},{"name":"EventScene_goddessfall_21.webp","text":"Goddess Fall 47"},{"name":"EventScene_goddessfall_22_1.webp","text":"Goddess Fall 48"},{"name":"EventScene_goddessfall_22_2.webp","text":"Goddess Fall 49"},{"name":"EventScene_goddessfall_23_1.webp","text":"Goddess Fall 50"},{"name":"EventScene_goddessfall_23_2.webp","text":"Goddess Fall 51"},{"name":"EventScene_goddessfall_23_3.webp","text":"Goddess Fall 52"},{"name":"EventScene_goddessfall_24.webp","text":"Goddess Fall 53"},{"name":"EventScene_goddessfall_25_1.webp","text":"Goddess Fall 54"},{"name":"EventScene_goddessfall_25_2.webp","text":"Goddess Fall 55"},{"name":"EventScene_goddessfall_25_3.webp","text":"Goddess Fall 56"},{"name":"EventScene_goddessfall_25_4.webp","text":"Goddess Fall 57"},{"name":"EventScene_goddessfall_26.webp","text":"Goddess Fall 58"},{"name":"EventScene_goddessfall_27.webp","text":"Goddess Fall 59"},{"name":"EventScene_goddessfall_28_1.webp","text":"Goddess Fall 60"},{"name":"EventScene_goddessfall_28_2.webp","text":"Goddess Fall 61"},{"name":"EventScene_goddessfall_28_3.webp","text":"Goddess Fall 62"},{"name":"EventScene_goddessfall_28_4.webp","text":"Goddess Fall 63"},{"name":"EventScene_goddessfall_28_5.webp","text":"Goddess Fall 64"},{"name":"EventTitle_goddessfall_01.webp","text":"Goddess Fall 65"},{"name":"goddessfall_opening_queen_02_open.webp","text":"Goddess Fall 66"}]} -------------------------------------------------------------------------------- /src/utils/json/Gallery/chapters.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "chapters/", 3 | "type": "img", 4 | "id": "chapters", 5 | "title": "Chapter Thumbnails", 6 | "content": [ 7 | { 8 | "name": "img_album_chapter00", 9 | "text": "Chapter 00: Fall" 10 | }, 11 | { 12 | "name": "img_album_chapter01", 13 | "text": "Chapter 01: Corruption" 14 | }, 15 | { 16 | "name": "img_album_chapter02", 17 | "text": "Chapter 02: Identification" 18 | }, 19 | { 20 | "name": "img_album_chapter03", 21 | "text": "Chapter 03: Enlightenment" 22 | }, 23 | { 24 | "name": "img_album_chapter04", 25 | "text": "Chapter 04: Bouquet" 26 | }, 27 | { 28 | "name": "img_album_chapter05", 29 | "text": "Chapter 05: Wonderland" 30 | }, 31 | { 32 | "name": "img_album_chapter06", 33 | "text": "Chapter 06: Pilgrim" 34 | }, 35 | { 36 | "name": "img_album_chapter07", 37 | "text": "Chapter 07: Reunited" 38 | }, 39 | { 40 | "name": "img_album_chapter08", 41 | "text": "Chapter 08: Conflict" 42 | }, 43 | { 44 | "name": "img_album_chapter09", 45 | "text": "Chapter 09: Secret" 46 | }, 47 | { 48 | "name": "img_album_chapter10", 49 | "text": "Chapter 10: Comrade" 50 | }, 51 | { 52 | "name": "img_album_chapter11", 53 | "text": "Chapter 11: The Strongest" 54 | }, 55 | { 56 | "name": "img_album_chapter12", 57 | "text": "Chapter 12: Hometown" 58 | }, 59 | { 60 | "name": "img_album_chapter13", 61 | "text": "Chapter 13: Return" 62 | }, 63 | { 64 | "name": "img_album_chapter14", 65 | "text": "Chapter 14: Journey" 66 | }, 67 | { 68 | "name": "img_album_chapter15", 69 | "text": "Chapter 15: Luck" 70 | }, 71 | { 72 | "name": "img_album_chapter16", 73 | "text": "Chapter 16: Brand" 74 | }, 75 | { 76 | "name": "img_album_chapter17", 77 | "text": "Chapter 17: Purpose" 78 | }, 79 | { 80 | "name": "img_album_chapter18", 81 | "text": "Chapter 18: Hero" 82 | }, 83 | { 84 | "name": "img_album_chapter19", 85 | "text": "Chapter 19: Eden" 86 | }, 87 | { 88 | "name": "img_album_chapter20", 89 | "text": "Chapter 20: Fire Dragon" 90 | }, 91 | { 92 | "name": "img_album_chapter21", 93 | "text": "Chapter 21: Giant Whale" 94 | }, 95 | { 96 | "name": "img_album_chapter22", 97 | "text": "Chapter 22: Invasion" 98 | }, 99 | { 100 | "name": "img_album_chapter23", 101 | "text": "Chapter 23: Prison" 102 | }, 103 | { 104 | "name": "img_album_chapter24", 105 | "text": "Chapter 24: Banishment" 106 | }, 107 | { 108 | "name": "img_album_chapter25", 109 | "text": "Chapter 25: Tracking" 110 | }, 111 | { 112 | "name": "img_album_chapter26", 113 | "text": "Chapter 26: Return" 114 | }, 115 | { 116 | "name": "img_album_chapter27", 117 | "text": "Chapter 27: Exploration" 118 | }, 119 | { 120 | "name": "img_album_chapter28", 121 | "text": "Chapter 28: The Unknown" 122 | }, 123 | { 124 | "name": "img_album_chapter29", 125 | "text": "Chapter 29: Rescue" 126 | }, 127 | { 128 | "name": "img_album_chapter30", 129 | "text": "Chapter 30: Treasure" 130 | }, 131 | { 132 | "name": "img_album_chapter31", 133 | "text": "Chapter 31: Mabeast" 134 | }, 135 | { 136 | "name": "img_album_chapter32", 137 | "text": "Chapter 32: Advance" 138 | }, 139 | { 140 | "name": "img_album_chapter33", 141 | "text": "Chapter 33: Clash" 142 | }, 143 | { 144 | "name": "img_album_chapter34", 145 | "text": "Chapter 34: Inheritance" 146 | }, 147 | { 148 | "name": "img_album_chapter35", 149 | "text": "Chapter 35: Conversation" 150 | }, 151 | { 152 | "name": "img_album_chapter36", 153 | "text": "Chapter 36: Betrayal" 154 | }, 155 | { 156 | "name": "img_album_chapter37", 157 | "text": "Chapter 37: Struggle" 158 | }, 159 | { 160 | "name": "img_album_chapter38", 161 | "text": "Chapter 38: Gluttony" 162 | }, 163 | { 164 | "name": "img_album_chapter39", 165 | "text": "Chapter 39: Gene" 166 | }, 167 | { 168 | "name": "img_album_chapter40", 169 | "text": "Chapter 40: Choice" 170 | }, 171 | { 172 | "name": "img_album_chapter40", 173 | "text": "Chapter 41: Birth" 174 | }, 175 | { 176 | "name": "img_album_chapter40", 177 | "text": "Chapter 42: Only One" 178 | } 179 | ] 180 | } -------------------------------------------------------------------------------- /src/utils/tierlistUtils.ts: -------------------------------------------------------------------------------- 1 | import type { tierlist } from '@/utils/interfaces/tierlist/tierlist' 2 | import l2d from '@/utils/json/l2d.json' 3 | import type { live2d_interface } from '@/utils/interfaces/live2d' 4 | import type { tier } from '@/utils/interfaces/tierlist/tier' 5 | import { returnRandomHex } from '@/utils/utils' 6 | import { globalParams } from '@/utils/enum/globalParams' 7 | import CryptoJS from 'crypto-js' 8 | 9 | const initDefaultTierList = (): tierlist => { 10 | const tierList: tierlist = { 11 | name: 'Sample Tier List', 12 | author: 'Koshirei', 13 | print_NikkeDB: true, 14 | printBenchTier: true, 15 | benchTier: initBenchTier(), 16 | tiers: initDefaultTiers() 17 | } 18 | return tierList 19 | } 20 | 21 | const initBenchTier = (): tier => { 22 | const benchTier: tier = initEmptyTier() 23 | benchTier.name = 'Bench' 24 | benchTier.subtext = 'Cuties waiting to be tier listed' 25 | benchTier.color_bg = '#8d96a6' 26 | benchTier.color_name = '#000000' 27 | 28 | const base_array: live2d_interface[] = l2d 29 | base_array.forEach((item) => { 30 | if (item.tl === 'nikke' || item.tl === 'NPC') { 31 | benchTier.items.push({ 32 | id: item.id, 33 | name: item.name, 34 | subtext: '' 35 | }) 36 | } 37 | }) 38 | 39 | return benchTier 40 | } 41 | 42 | const initEmptyTier = (): tier => { 43 | return { 44 | name: '', 45 | subtext: '', 46 | color_bg: '', 47 | color_name: '', 48 | items: [] 49 | } 50 | } 51 | 52 | const initTierFromConstructor = (name: string, subtext: string, color_bg: string, color_name: string): tier => { 53 | return { 54 | name: name, 55 | items: [], 56 | subtext: subtext, 57 | color_bg: color_bg, 58 | color_name: color_name 59 | } 60 | } 61 | 62 | const initDefaultTiers = (): tier[] => { 63 | return [ 64 | initTierFromConstructor('SSS', 'SSS rank', '#32a852', '#050a07'), 65 | initTierFromConstructor('SS', 'SS rank', '#356296', '#050a07'), 66 | initTierFromConstructor('S', 'S rank', '#e622d8', '#050a07'), 67 | initTierFromConstructor('A', 'A rank', '#ecff17', '#050a07') 68 | ] 69 | } 70 | 71 | const randomNewTier = (): tier => { 72 | return initTierFromConstructor('New Tier', 'New Tier Subtext', returnRandomHex(), returnRandomHex()) 73 | } 74 | 75 | const saveTierListToLocalStorage = (tierlist: tierlist, slot: number = 0) => { 76 | const strTier = JSON.stringify(tierlist) 77 | const aes_encrypt = CryptoJS.AES.encrypt(strTier, globalParams.CRYPTOJS_AES_KEY).toString() 78 | localStorage.setItem('tierlist_slot' + slot, aes_encrypt) 79 | } 80 | 81 | const saveTierListToLocalStorageFromImportText = (importedText: string, slot: number = 0) => { 82 | localStorage.setItem('tierlist_slot' + slot, importedText) 83 | } 84 | 85 | const retrieveTierListFromLocalStorage = (slot: number = 0): tierlist => { 86 | const localStorageContent = localStorage.getItem('tierlist_slot' + slot) 87 | 88 | try { 89 | if (localStorageContent === undefined || localStorageContent === null || localStorageContent === '') { 90 | return initDefaultTierList() 91 | } else { 92 | const aes_decrypt = CryptoJS.AES.decrypt(localStorageContent, globalParams.CRYPTOJS_AES_KEY) 93 | const tierList = JSON.parse(aes_decrypt.toString(CryptoJS.enc.Utf8)) as tierlist 94 | 95 | return tierList 96 | } 97 | } catch (e) { 98 | const defaultTierList = initDefaultTierList() 99 | saveTierListToLocalStorage(defaultTierList) 100 | return defaultTierList 101 | } 102 | } 103 | 104 | const checkForMissingCharactersAndAddToBench = (tierlist: tierlist): tierlist => { 105 | const base_array: live2d_interface[] = l2d 106 | 107 | base_array.forEach((item) => { 108 | if (item.tl === 'nikke' || item.tl === 'NPC') { 109 | let shouldAddCharacter = true 110 | 111 | tierlist.tiers.forEach((tier) => { 112 | if (shouldAddCharacter && tier.items.some((character) => character.id === item.id)) { 113 | shouldAddCharacter = false 114 | } 115 | }) 116 | 117 | if (shouldAddCharacter && tierlist.benchTier.items.some((character) => character.id === item.id)) { 118 | shouldAddCharacter = false 119 | } 120 | 121 | if (shouldAddCharacter) { 122 | tierlist.benchTier.items.push({ 123 | id: item.id, 124 | name: item.name, 125 | subtext: '' 126 | }) 127 | } 128 | } 129 | }) 130 | 131 | tierlist.benchTier.items.sort((a, b) => { 132 | if (a.id.localeCompare(b.id) > 0) { 133 | return 1 134 | } else { 135 | return -1 136 | } 137 | }) 138 | return tierlist 139 | } 140 | 141 | export { 142 | initDefaultTierList, 143 | randomNewTier, 144 | saveTierListToLocalStorage, 145 | retrieveTierListFromLocalStorage, 146 | checkForMissingCharactersAndAddToBench, 147 | saveTierListToLocalStorageFromImportText 148 | } -------------------------------------------------------------------------------- /src/utils/json/Gallery/oldtales.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": "oldtales/", 3 | "type": "large", 4 | "id": "oldtales", 5 | "title": "Old Tales", 6 | "notice": "The original in-game raw images totals over 230mb. It's way too high. The images here are compressed to a total of 12.5mb, thus they aren't original quality, but fairly close.
Also this is probably out of order, I skipped the event and went by image id.", 7 | 8 | "content": [ 9 | { 10 | "name": "EventScene_oldtales_01_1", 11 | "text": "Old Tales 1" 12 | }, 13 | { 14 | "name": "EventScene_oldtales_01_2", 15 | "text": "Old Tales 2" 16 | }, 17 | { 18 | "name": "EventScene_oldtales_02_1", 19 | "text": "Old Tales 3" 20 | }, 21 | { 22 | "name": "EventScene_oldtales_02_2", 23 | "text": "Old Tales 4" 24 | }, 25 | { 26 | "name": "EventScene_oldtales_03_1", 27 | "text": "Old Tales 5" 28 | }, 29 | { 30 | "name": "EventScene_oldtales_03_2", 31 | "text": "Old Tales 6" 32 | }, 33 | { 34 | "name": "EventScene_oldtales_03_3", 35 | "text": "Old Tales 7" 36 | }, 37 | { 38 | "name": "EventScene_oldtales_03_4", 39 | "text": "Old Tales 8" 40 | }, 41 | { 42 | "name": "EventScene_oldtales_03_5", 43 | "text": "Old Tales 9" 44 | }, 45 | { 46 | "name": "EventScene_oldtales_04", 47 | "text": "Old Tales 10" 48 | }, 49 | { 50 | "name": "EventScene_oldtales_05", 51 | "text": "Old Tales 11" 52 | }, 53 | { 54 | "name": "EventScene_oldtales_06_1", 55 | "text": "Old Tales 12" 56 | }, 57 | { 58 | "name": "EventScene_oldtales_06_2", 59 | "text": "Old Tales 13" 60 | }, 61 | { 62 | "name": "EventScene_oldtales_06_3", 63 | "text": "Old Tales 14" 64 | }, 65 | { 66 | "name": "EventScene_oldtales_06_4", 67 | "text": "Old Tales 15" 68 | }, 69 | { 70 | "name": "EventScene_oldtales_07_1", 71 | "text": "Old Tales 16" 72 | }, 73 | { 74 | "name": "EventScene_oldtales_07_2", 75 | "text": "Old Tales 17" 76 | }, 77 | { 78 | "name": "EventScene_oldtales_08_1", 79 | "text": "Old Tales 18" 80 | }, 81 | { 82 | "name": "EventScene_oldtales_08_2", 83 | "text": "Old Tales 19" 84 | }, 85 | { 86 | "name": "EventScene_oldtales_08_3", 87 | "text": "Old Tales 20" 88 | }, 89 | { 90 | "name": "EventScene_oldtales_08_4", 91 | "text": "Old Tales 21" 92 | }, 93 | { 94 | "name": "EventScene_oldtales_08_5", 95 | "text": "Old Tales 22" 96 | }, 97 | { 98 | "name": "EventScene_oldtales_08_6", 99 | "text": "Old Tales 23" 100 | }, 101 | { 102 | "name": "EventScene_oldtales_09", 103 | "text": "Old Tales 24" 104 | }, 105 | { 106 | "name": "EventScene_oldtales_10", 107 | "text": "Old Tales 25" 108 | }, 109 | { 110 | "name": "EventScene_oldtales_11_1", 111 | "text": "Old Tales 26" 112 | }, 113 | { 114 | "name": "EventScene_oldtales_11_2", 115 | "text": "Old Tales 27" 116 | }, 117 | { 118 | "name": "EventScene_oldtales_11_3", 119 | "text": "Old Tales 28" 120 | }, 121 | { 122 | "name": "EventScene_oldtales_11_4", 123 | "text": "Old Tales 29" 124 | }, 125 | { 126 | "name": "EventScene_oldtales_11_5", 127 | "text": "Old Tales 30" 128 | }, 129 | { 130 | "name": "EventScene_oldtales_12_1", 131 | "text": "Old Tales 31" 132 | }, 133 | { 134 | "name": "EventScene_oldtales_12_2", 135 | "text": "Old Tales 32" 136 | }, 137 | { 138 | "name": "EventScene_oldtales_12_3", 139 | "text": "Old Tales 33" 140 | }, 141 | { 142 | "name": "EventScene_oldtales_12_4", 143 | "text": "Old Tales 34" 144 | }, 145 | { 146 | "name": "EventScene_oldtales_12_5", 147 | "text": "Old Tales 35" 148 | }, 149 | { 150 | "name": "EventScene_oldtales_13_1", 151 | "text": "Old Tales 36" 152 | }, 153 | { 154 | "name": "EventScene_oldtales_13_2", 155 | "text": "Old Tales 37" 156 | }, 157 | { 158 | "name": "EventScene_oldtales_13_3", 159 | "text": "Old Tales 38" 160 | }, 161 | { 162 | "name": "EventScene_oldtales_14", 163 | "text": "Old Tales 39" 164 | }, 165 | { 166 | "name": "EventScene_oldtales_15", 167 | "text": "Old Tales 40" 168 | }, 169 | { 170 | "name": "EventScene_oldtales_16", 171 | "text": "Old Tales 41" 172 | }, 173 | { 174 | "name": "EventScene_oldtales_17_1", 175 | "text": "Old Tales 42" 176 | }, 177 | { 178 | "name": "EventScene_oldtales_17_2", 179 | "text": "Old Tales 43" 180 | }, 181 | { 182 | "name": "EventScene_oldtales_17_3", 183 | "text": "Old Tales 44" 184 | }, 185 | { 186 | "name": "EventScene_oldtales_18_1", 187 | "text": "Old Tales 45" 188 | }, 189 | { 190 | "name": "EventScene_oldtales_18_2", 191 | "text": "Old Tales 46" 192 | }, 193 | { 194 | "name": "EventScene_oldtales_18_3", 195 | "text": "Old Tales 47" 196 | }, 197 | { 198 | "name": "EventScene_oldtales_18_4", 199 | "text": "Old Tales 48" 200 | }, 201 | { 202 | "name": "EventScene_oldtales_18_5", 203 | "text": "Old Tales 49" 204 | }, 205 | { 206 | "name": "EventScene_oldtales_19_1", 207 | "text": "Old Tales 50" 208 | }, 209 | { 210 | "name": "EventScene_oldtales_19_2", 211 | "text": "Old Tales 51" 212 | }, 213 | { 214 | "name": "EventScene_oldtales_20", 215 | "text": "Old Tales 52" 216 | }, 217 | { 218 | "name": "EventScene_oldtales_21", 219 | "text": "Old Tales 53" 220 | } 221 | ] 222 | } --------------------------------------------------------------------------------