Compare commits
5
Commits
kfc-6.0.3.4a
...
kfc
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
94a54b9816 | ||
|
|
bb82ec9034 | ||
|
|
20ba236f5b | ||
|
|
825e2621b0 | ||
|
|
3de722a33d |
@@ -1,8 +1,8 @@
|
|||||||
# SOUND VOLTEX
|
# SOUND VOLTEX
|
||||||
|
|
||||||
**Plugin Version:** fork-6.0.3.4a
|
**Plugin Version:** fork-6.0.4
|
||||||
|
|
||||||
**Supported game versions:** EXCEED GEAR (2024070900)
|
**Supported game versions:** EXCEED GEAR (2024110500)
|
||||||
|
|
||||||
**Unsupported game versions:** Every other game, as they're untested.
|
**Unsupported game versions:** Every other game, as they're untested.
|
||||||
|
|
||||||
@@ -16,45 +16,58 @@
|
|||||||
|
|
||||||
Changelog
|
Changelog
|
||||||
===========
|
===========
|
||||||
## fork-6.0.3.4a
|
## fork-6.0.4
|
||||||
|
|
||||||
### New:
|
### New:
|
||||||
|
- Added PREMIUM GENERATOR sets
|
||||||
1. Misc:
|
- この素晴らしい世界に祝福を!3 (Konosuba 3)
|
||||||
- Updated webui data.json asset file (renamed some placeholder labels)
|
- 宝鐘マリン (Houshou Marine)
|
||||||
- Removed most of webui image and audio assets to minimize size.
|
- Added HEXADIVER 11 (NEMSYS GAME EXPO)
|
||||||
- Run asset update to pull webui assets from game files.
|
- Added BEMANI PRO LEAGUE S4 -Triple Tribe- event.
|
||||||
|
- Toggle on Unlocking Events page -> Cross Events
|
||||||
|
- Added ARENA Season 16
|
||||||
|
- Rank match: MEGAMIX BATTLE
|
||||||
|
- Added ARENA STATION set 16
|
||||||
|
- Added songs to licensed songs list: Konosuba, Houshou Marine
|
||||||
|
- Added a few date-related events (Onigo day, Gott day, etc.)
|
||||||
|
- Updated MEGAMIX BATTLE songs list (89 new songs)
|
||||||
|
- Updated Achievements list
|
||||||
|
- Updated data.json (will add labels for Houshou Marine subbg at a later date)
|
||||||
|
|
||||||
|
|
||||||
## fork-6.0.3.4
|
## fork-6.0.3.7
|
||||||
|
|
||||||
### New:
|
### New:
|
||||||
|
|
||||||
1. Main:
|
1. Main:
|
||||||
- 2024070900 support
|
- MYSTICAL Re:UNION added to events list. Toggle the individual songs to unlock them to your account.
|
||||||
- Added ARENA season 14 (rank match: MEGAMIX BATTLE)
|
|
||||||
- ARENA STATION set 14 added.
|
|
||||||
- Added TAMANEKO Adventure: new unlock system where you complete map missions and earn food for TAMANEKO. Completing maps unlocks new songs and new XCD charts.
|
|
||||||
- Track Liberation map can be enabled/disabled in the main settings.
|
|
||||||
- Check 'Unlocking Events -> Stamp Events -> TAMA猫アドベンチャー (TAMANEKO Adventure)' to toggle the event.
|
|
||||||
|
|
||||||
2. Misc:
|
2. Misc:
|
||||||
- Updated Achievements list.
|
- **Important**: EG Skill Analyzer course IDs have been updated. The plugin's new migrate.ts should update your course data to reflect these new IDs but if there are issues with your course data, please let me know.
|
||||||
|
- KAC 2023 Skill Analyzer courses now displayed as it did officially (uses KAC jacket)
|
||||||
|
- BPL Pro Player badge: display this instead of the BPL Supporter badge. Check the "BPL Pro Player" option in the customization page.
|
||||||
|
- Force locked the song "無意識レクイエム (cosmobsp rmx)" to allow for the secret unlock method to work. Still overridden by the unlock songs option.
|
||||||
|
- Updated VALKYRIE GENERATOR 7 item data: removed ID 33 from appeal stamp list.
|
||||||
|
- Updated placeholder names in data.json.
|
||||||
|
|
||||||
|
3. Issues:
|
||||||
|
- Game crashes on continue screen when a Stamp Select event is enabled. Unsure if this is a plugin issue, or just an isolated gamedata issue.
|
||||||
|
|
||||||
|
|
||||||
## fork-6.0.3.3
|
## fork-6.0.3.6
|
||||||
|
|
||||||
### New:
|
### New:
|
||||||
|
|
||||||
1. Main:
|
1. Main:
|
||||||
- 2024060401 support
|
- ARENA Rank Season 15 (ARENA BATTLE, point system)
|
||||||
- Added PREMIUM GENERATOR (角巻わため、 / Tsunomaki Watame set)
|
- ARENA STATION 15: no new songs/charts
|
||||||
- Note: subbg files from this pregene set are missing on some leaked update data, you will not be able to use those until those files are in your data.
|
- PREMIUM GENERATOR Vol. 5 (Near & Noah EG Set)
|
||||||
- Added Watame songs to licensed songs list (exg.ts)
|
- Complete the set to get alternate style for Near & Noah.
|
||||||
- Watame crew usable (exg.ts)
|
|
||||||
|
|
||||||
2. Misc
|
2. Misc:
|
||||||
- Added option to hide/show serverside-removed music (enabled by default)
|
- Added missing licensed songs released prior to EXCEED GEAR.
|
||||||
|
- [GitHub](https://github.com/22vv0/asphyxia_plugins/issues/4)
|
||||||
|
- Misc WebUI fixes.
|
||||||
|
|
||||||
|
|
||||||
### Todo:
|
### Todo:
|
||||||
|
|||||||
+780
-883
File diff suppressed because it is too large
Load Diff
+19
-21
@@ -1,8 +1,7 @@
|
|||||||
import { EVENT4, COURSES4, EXTENDS4 } from '../data/hvn';
|
import { EVENT4, COURSES4, EXTENDS4 } from '../data/hvn';
|
||||||
import { EVENT5, COURSES5, EXTENDS5 } from '../data/vvw';
|
import { EVENT5, COURSES5, EXTENDS5 } from '../data/vvw';
|
||||||
import { EVENT6, COURSES6, EXTENDS6, APRILFOOLSSONGS, VALKYRIE_SONGS,
|
import { EVENT6, COURSES6, EXTENDS6, APRILFOOLSSONGS, VALKYRIE_SONGS,
|
||||||
LICENSED_SONGS6, ARENA, VALGENE, INFORMATION6, STAMP_EVENTS6,
|
LICENSED_SONGS6, ARENA, VALGENE, INFORMATION6, STAMP_EVENTS6
|
||||||
REMOVED_SONGS6
|
|
||||||
} from '../data/exg';
|
} from '../data/exg';
|
||||||
import { COURSE2 } from '../data/inf';
|
import { COURSE2 } from '../data/inf';
|
||||||
import {getVersion, getRandomIntInclusive} from '../utils';
|
import {getVersion, getRandomIntInclusive} from '../utils';
|
||||||
@@ -96,24 +95,19 @@ export const common: EPR = async (info, data, send) => {
|
|||||||
if(foundSongIndex != -1) {
|
if(foundSongIndex != -1) {
|
||||||
var songData = mdb.mdb.music[foundSongIndex];
|
var songData = mdb.mdb.music[foundSongIndex];
|
||||||
if(gameVersion === 6 || gameVersion === -6) {
|
if(gameVersion === 6 || gameVersion === -6) {
|
||||||
if(parseInt(songData['info']['distribution_date']['#text']) > currentYMDDate) {
|
if('distribution_date' in songData['info'] && parseInt(songData['info']['distribution_date']['#text']) > currentYMDDate) {
|
||||||
console.log("Unreleased song: " + songData.info.title_name)
|
console.log("Unreleased song: " + songData.info.title_name)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
limitedNo = 2;
|
limitedNo = 2;
|
||||||
// if song is released during exceed gear
|
// if song is released during exceed gear
|
||||||
if(songData.info.version['#text'] === '6') {
|
if(songData.info.version['#text'] === '6') {
|
||||||
// Songs are removed for multiple reasons, this will check whether to show or hide them (for songs released during EG)
|
|
||||||
if(REMOVED_SONGS6.includes(i.toString()) && !U.GetConfig('enable_removed_songs')) {
|
|
||||||
limitedNo -= 1;
|
|
||||||
}
|
|
||||||
// Licensed songs released in Exceed Gear needs limited=3 to appear
|
// Licensed songs released in Exceed Gear needs limited=3 to appear
|
||||||
if(LICENSED_SONGS6.includes(i.toString())) {
|
if(LICENSED_SONGS6.includes(i.toString())) limitedNo += 1;
|
||||||
limitedNo += 1;
|
else if(VALKYRIE_SONGS.includes(i.toString()) && info.model.split(":")[2].match(/^(G|H)$/g) == null) limitedNo -= 1;
|
||||||
}
|
|
||||||
else if(VALKYRIE_SONGS.includes(i.toString()) && (!U.GetConfig('enable_valk_songs') && info.model.split(":")[2].match(/^(G|H)$/g) == null)){
|
if(i === 2034) limitedNo = 2;
|
||||||
limitedNo -= 1;
|
|
||||||
}
|
|
||||||
for(let j = 0; j < 5; j++) {
|
for(let j = 0; j < 5; j++) {
|
||||||
songs.push({
|
songs.push({
|
||||||
music_id: K.ITEM('s32', i),
|
music_id: K.ITEM('s32', i),
|
||||||
@@ -130,13 +124,13 @@ export const common: EPR = async (info, data, send) => {
|
|||||||
limited: K.ITEM('u8', limitedNo),
|
limited: K.ITEM('u8', limitedNo),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
// Songs are removed for multiple reasons, this will check whether to show or hide them (for songs released before EG)
|
// Licensed songs released pre-exceed gear
|
||||||
else if(REMOVED_SONGS6.includes(i.toString()) && !U.GetConfig('enable_removed_songs')) {
|
else if (LICENSED_SONGS6.includes(i.toString())) {
|
||||||
for(let j = 0; j < 5; j++) {
|
for(let j = 0; j < 5; j++) {
|
||||||
songs.push({
|
songs.push({
|
||||||
music_id: K.ITEM('s32', i),
|
music_id: K.ITEM('s32', i),
|
||||||
music_type: K.ITEM('u8', j),
|
music_type: K.ITEM('u8', j),
|
||||||
limited: K.ITEM('u8', 2),
|
limited: K.ITEM('u8', limitedNo),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -236,7 +230,7 @@ export const common: EPR = async (info, data, send) => {
|
|||||||
'id': stmpEvntInfo['info']['id'],
|
'id': stmpEvntInfo['info']['id'],
|
||||||
'params': [
|
'params': [
|
||||||
9,
|
9,
|
||||||
(stmpEvntInfo['info']['textstampval'] !== undefined) ? stmpEvntInfo['info']['textstampval'] : 0,
|
((stmpEvntInfo['info']['textstampval'] !== undefined) ? stmpEvntInfo['info']['textstampval'] : 0),
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
@@ -388,11 +382,8 @@ export const common: EPR = async (info, data, send) => {
|
|||||||
],
|
],
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log("Sending common objects");
|
|
||||||
|
|
||||||
let arena_szn = U.GetConfig('arena_szn')
|
let arena_szn = U.GetConfig('arena_szn')
|
||||||
let arena_catalog_items = []
|
let arena_catalog_items = []
|
||||||
|
|
||||||
@@ -429,7 +420,10 @@ export const common: EPR = async (info, data, send) => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
if(currentDate.substring(0,4) === '4/1/' || U.GetConfig('april_fools')) {
|
if(currentDate.substring(0,4) === '2/5/') events.push("EVENTDATE_ONIGO")
|
||||||
|
if(currentDate.substring(0,5) === '2/14/') events.push('VALENTINES_DAY_2024')
|
||||||
|
if(currentDate.substring(0,5) === '2/15/') events.push('WHITE_DAY_2024')
|
||||||
|
if(currentDate.substring(0,4) === '4/1/') {
|
||||||
console.log('Using April Fools Event')
|
console.log('Using April Fools Event')
|
||||||
events.push('APRIL_GRACE');
|
events.push('APRIL_GRACE');
|
||||||
events.push('EVENTDATE_APRILFOOL');
|
events.push('EVENTDATE_APRILFOOL');
|
||||||
@@ -443,7 +437,11 @@ export const common: EPR = async (info, data, send) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(currentDate.substring(0,5) === '5/10/') events.push("EVENTDATE_GOTT")
|
||||||
|
if(['10/24/', '10/25/', '10/26/', '10/27/', '10/28/', '10/29/', '10/30/', '10/31/'].includes(currentDate.substring(0,6))) events.push('HALLOWEEN_EVENT')
|
||||||
|
if(['12/24/', '12/25/', '12/26/'].includes(currentDate.substring(0,6))) events.push('MERRY_CHRISTMAS_2023')
|
||||||
|
|
||||||
|
console.log("Sending common objects");
|
||||||
send.object(
|
send.object(
|
||||||
{
|
{
|
||||||
valgene: {
|
valgene: {
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
import { COURSES6 } from "../data/exg"
|
||||||
|
|
||||||
|
export async function dataUpdate() {
|
||||||
|
await updateSkillCourseIds()
|
||||||
|
}
|
||||||
|
|
||||||
|
async function updateSkillCourseIds() {
|
||||||
|
let skillData
|
||||||
|
let course = await DB.Find(null, {collection: 'course'})
|
||||||
|
course.forEach(async c => {
|
||||||
|
skillData = COURSES6.find(sd => sd.id === c['sid'])
|
||||||
|
if(skillData['courses'].findIndex(cd => cd.id === c['cid']) === -1) {
|
||||||
|
console.log("(" + c['__refid'] + ") updating cid " + c['cid'] + " -> " + parseInt(c['sid'].toString() + c['cid'].toString()))
|
||||||
|
await DB.Upsert(c['__refid'], {collection: 'course', sid: c['sid'], cid: c['cid']}, {
|
||||||
|
$set: {
|
||||||
|
cid: parseInt(c['sid'].toString() + c['cid'].toString())
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
@@ -520,12 +520,16 @@ export const save: EPR = async (info, data, send) => {
|
|||||||
const sid = course.number('ssnid');
|
const sid = course.number('ssnid');
|
||||||
const cid = course.number('crsid');
|
const cid = course.number('crsid');
|
||||||
const stype = course.number('st');
|
const stype = course.number('st');
|
||||||
|
const kacid = course.str('kac_id');
|
||||||
|
|
||||||
if (!(_.isNil(sid) || _.isNil(cid))){
|
if (!(_.isNil(sid) || _.isNil(cid))){
|
||||||
await DB.Upsert<CourseRecord>(
|
await DB.Upsert<CourseRecord>(
|
||||||
refid,
|
refid,
|
||||||
{ collection: 'course', sid, cid, stype, version },
|
{ collection: 'course', sid, cid, stype, version },
|
||||||
{
|
{
|
||||||
|
$set: {
|
||||||
|
kacId: kacid
|
||||||
|
},
|
||||||
$max: {
|
$max: {
|
||||||
score: course.number('sc', 0),
|
score: course.number('sc', 0),
|
||||||
exscore: course.number('ex', 0),
|
exscore: course.number('ex', 0),
|
||||||
@@ -635,7 +639,7 @@ export const load: EPR = async (info, data, send) => {
|
|||||||
console.log("DataID: " + refid);
|
console.log("DataID: " + refid);
|
||||||
if (version == 0) return send.deny();
|
if (version == 0) return send.deny();
|
||||||
|
|
||||||
const profile = await DB.FindOne<Profile>(refid, {
|
let profile = await DB.FindOne<Profile>(refid, {
|
||||||
collection: 'profile',
|
collection: 'profile',
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -663,7 +667,7 @@ export const load: EPR = async (info, data, send) => {
|
|||||||
if(eventConfig[eventData['events'][eventIter]['id']]['toggle']) {
|
if(eventConfig[eventData['events'][eventIter]['id']]['toggle']) {
|
||||||
for(const itemIter in EVENT_ITEMS6[eventData['events'][eventIter]['id']]) {
|
for(const itemIter in EVENT_ITEMS6[eventData['events'][eventIter]['id']]) {
|
||||||
let itemId = parseInt(EVENT_ITEMS6[eventData['events'][eventIter]['id']][itemIter])
|
let itemId = parseInt(EVENT_ITEMS6[eventData['events'][eventIter]['id']][itemIter])
|
||||||
if(await DB.Count(refid, {collection:'item', type: typeIds[eventData['events'][eventIter]['type']], id: itemId}) === 0) {
|
if(await DB.Count(refid, {collection:'item', type: typeIds[eventData['events'][eventIter]['type']][0], id: itemId}) === 0) {
|
||||||
await DB.Upsert(
|
await DB.Upsert(
|
||||||
refid,
|
refid,
|
||||||
{collection: 'item', type: typeIds[eventData['events'][eventIter]['type']][0], id: itemId},
|
{collection: 'item', type: typeIds[eventData['events'][eventIter]['type']][0], id: itemId},
|
||||||
@@ -751,8 +755,9 @@ export const load: EPR = async (info, data, send) => {
|
|||||||
const stampRC = profile.stampRC ? profile.stampRC : 0;
|
const stampRC = profile.stampRC ? profile.stampRC : 0;
|
||||||
const stampRD = profile.stampRD ? profile.stampRD : 0;
|
const stampRD = profile.stampRD ? profile.stampRD : 0;
|
||||||
const sysBG = profile.sysBG ? profile.sysBG : 0;
|
const sysBG = profile.sysBG ? profile.sysBG : 0;
|
||||||
const bplSupport = profile.bplSupport ? profile.bplSupport : 0;
|
|
||||||
const creatorItem = profile.creatorItem ? profile.creatorItem : 0;
|
const creatorItem = profile.creatorItem ? profile.creatorItem : 0;
|
||||||
|
const bplPro = (profile.bplSupport > 10) ? true : false
|
||||||
|
profile.bplSupport = profile.bplSupport ? profile.bplSupport % 10 : 0;
|
||||||
|
|
||||||
const customize = [];
|
const customize = [];
|
||||||
customize.push(bgm, subbg, nemsys, stampA, stampB, stampC, stampD, stampRA, stampRB, stampRC, stampRD, sysBG);
|
customize.push(bgm, subbg, nemsys, stampA, stampB, stampC, stampD, stampRA, stampRB, stampRC, stampRD, sysBG);
|
||||||
@@ -796,6 +801,7 @@ export const load: EPR = async (info, data, send) => {
|
|||||||
arena,
|
arena,
|
||||||
valgeneTicket,
|
valgeneTicket,
|
||||||
creatorItem,
|
creatorItem,
|
||||||
|
bplPro,
|
||||||
...profile,
|
...profile,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
+21
-1
@@ -5,6 +5,7 @@ import { Skill } from '../models/skill';
|
|||||||
import { getVersion, IDToCode, GetCounter } from '../utils';
|
import { getVersion, IDToCode, GetCounter } from '../utils';
|
||||||
import { Mix } from '../models/mix';
|
import { Mix } from '../models/mix';
|
||||||
import { Rival } from '../models/rival';
|
import { Rival } from '../models/rival';
|
||||||
|
import { Item } from '../models/item';
|
||||||
import { PREGENE, COURSES6} from '../data/exg';
|
import { PREGENE, COURSES6} from '../data/exg';
|
||||||
import { textureslist } from '../data/webui'
|
import { textureslist } from '../data/webui'
|
||||||
import * as fs from 'fs';
|
import * as fs from 'fs';
|
||||||
@@ -16,6 +17,7 @@ export const updateProfile = async (data: {
|
|||||||
appeal?: string;
|
appeal?: string;
|
||||||
akaname?: string;
|
akaname?: string;
|
||||||
bplSupport?: string;
|
bplSupport?: string;
|
||||||
|
bplPro?: boolean;
|
||||||
nemsys?: string;
|
nemsys?: string;
|
||||||
bgm?: string;
|
bgm?: string;
|
||||||
subbg?: string;
|
subbg?: string;
|
||||||
@@ -60,7 +62,7 @@ export const updateProfile = async (data: {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (data.bplSupport && data.bplSupport.length > 0) {
|
if (data.bplSupport && data.bplSupport.length > 0) {
|
||||||
const validBplSupport = parseInt(data.bplSupport);
|
const validBplSupport = data.bplPro ? parseInt(data.bplSupport) + 10 : parseInt(data.bplSupport);
|
||||||
if (!_.isNaN(validBplSupport)) update.bplSupport = validBplSupport;
|
if (!_.isNaN(validBplSupport)) update.bplSupport = validBplSupport;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -810,6 +812,24 @@ export const preGeneRoll = async (data: { set: number, refid: string, items: []
|
|||||||
} else console.log('pregeneset none')
|
} else console.log('pregeneset none')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const preGeneReward = async (data: { reward: [], refid: string }, send: WebUISend) => {
|
||||||
|
let reward = Object.values(data.reward)
|
||||||
|
let rewardItem = await DB.Find<Item>(data.refid, {collection: 'item', type: reward[0], id: reward[1], param: reward[2]})
|
||||||
|
if(rewardItem.length === 0) {
|
||||||
|
DB.Upsert(data.refid, { collection: "item", type: reward[0], id: reward[1] }, { $set: { param: reward[2] } })
|
||||||
|
send.json({
|
||||||
|
received: true,
|
||||||
|
reward: reward
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
send.json({
|
||||||
|
received: false,
|
||||||
|
reward: reward
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
export const manageEvents = async (data: { eventConfig: {} }) => {
|
export const manageEvents = async (data: { eventConfig: {} }) => {
|
||||||
IO.WriteFile('webui/asset/config/events.json', JSON.stringify(data.eventConfig, null, 4));
|
IO.WriteFile('webui/asset/config/events.json', JSON.stringify(data.eventConfig, null, 4));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import {
|
|||||||
getRivalScores,
|
getRivalScores,
|
||||||
addRival,
|
addRival,
|
||||||
preGeneRoll,
|
preGeneRoll,
|
||||||
|
preGeneReward,
|
||||||
manageEvents,
|
manageEvents,
|
||||||
manageStartupFlags
|
manageStartupFlags
|
||||||
} from './handlers/webui';
|
} from './handlers/webui';
|
||||||
@@ -24,9 +25,8 @@ import {
|
|||||||
saveValgene,
|
saveValgene,
|
||||||
saveE
|
saveE
|
||||||
} from './handlers/profiles';
|
} from './handlers/profiles';
|
||||||
import {
|
import { ARENA } from './data/exg';
|
||||||
ARENA
|
import { dataUpdate } from './handlers/migrate'
|
||||||
} from './data/exg';
|
|
||||||
|
|
||||||
export function register() {
|
export function register() {
|
||||||
|
|
||||||
@@ -34,16 +34,14 @@ export function register() {
|
|||||||
R.Contributor("ovv (this fork)");
|
R.Contributor("ovv (this fork)");
|
||||||
R.GameCode('KFC');
|
R.GameCode('KFC');
|
||||||
|
|
||||||
|
R.Config('sdvx_eg_root_dir', { type: 'string', needRestart: true, default: '', name: 'Exceed Gear Data Directory', desc: 'The root directory of your SDVX Exceed Gear game files (for asset copying)'});
|
||||||
R.Config('arena_szn',{ type: 'string', options: Object.keys(ARENA), default: 'None', name: 'Ranked Match Season', desc: 'Current ARENA/SINGLE BATTLE ranked season. Also sets ARENA STATION catalog corresponding to that season.'});
|
R.Config('arena_szn',{ type: 'string', options: Object.keys(ARENA), default: 'None', name: 'Ranked Match Season', desc: 'Current ARENA/SINGLE BATTLE ranked season. Also sets ARENA STATION catalog corresponding to that season.'});
|
||||||
R.Config('enable_valk_songs' ,{ type: 'boolean', default: false, name:'Enable Valkyrie Model Songs', desc:'Enable the valkyrie model songs on non-valkyrie mode.'});
|
|
||||||
R.Config('use_blasterpass',{ type: 'boolean', default: true, name:'Use Blaster Pass', desc:'Enable Blaster Pass for VW and EG'});
|
R.Config('use_blasterpass',{ type: 'boolean', default: true, name:'Use Blaster Pass', desc:'Enable Blaster Pass for VW and EG'});
|
||||||
R.Config('tama_track_lib',{ type: 'boolean', default: true, name:'Enable Track Liberation', desc:'(Requires TAMANEKO adventure event to be enabled) A TAMANEKO adventure map that will unlock a random song that has no unlock condition. OVER ADVENTURE will be displayed if this is disabled and if you have completed all other adventures.'});
|
R.Config('tama_track_lib',{ type: 'boolean', default: true, name:'Enable Track Liberation', desc:'(Requires TAMANEKO adventure event to be enabled) A TAMANEKO adventure map that will unlock a random song that has no unlock condition. OVER ADVENTURE will be displayed if this is disabled and if you have completed all other adventures.'});
|
||||||
R.Config('unlock_all_valk_items', { type: 'boolean', default: false, name:'Unlock All Valkyrie and Premium Items', desc: 'Unlock Nemsys, BGM, Submonitor BG, System BG and Stamp Items (Valk crews not included; check \'unlock all navigators\' option)'});
|
R.Config('unlock_all_valk_items', { type: 'boolean', default: false, name:'Unlock All Valkyrie and Premium Items', desc: 'Unlock Nemsys, BGM, Submonitor BG, System BG and Stamp Items (Valk crews not included; check \'unlock all navigators\' option)'});
|
||||||
R.Config('unlock_all_songs', { type: 'boolean', default: false, name:'Unlock All Songs'});
|
R.Config('unlock_all_songs', { type: 'boolean', default: false, name:'Unlock All Songs'});
|
||||||
R.Config('unlock_all_navigators', { type: 'boolean', default: false, name:'Unlock All Navigators'} );
|
R.Config('unlock_all_navigators', { type: 'boolean', default: false, name:'Unlock All Navigators'} );
|
||||||
R.Config('unlock_all_appeal_cards', { type: 'boolean', default: false, name:'Unlock All Appeal Cards'});
|
R.Config('unlock_all_appeal_cards', { type: 'boolean', default: false, name:'Unlock All Appeal Cards'});
|
||||||
R.Config('enable_removed_songs', {type: 'boolean', default: true, name:'Enable removed songs', desc: 'Songs hidden or removed server-side will appear.'})
|
|
||||||
R.Config('sdvx_eg_root_dir', { type: 'string', needRestart: true, default: '', name: 'Exceed Gear Data Directory', desc: 'The root directory of your SDVX Exceed Gear game files (for asset copying)'});
|
|
||||||
R.Config('use_information' ,{ type: 'boolean', default: true, name:'Use Asphyxia Information', desc:'Enable the Asphyxia information section after entry. Otherwise, it will try to look for official information data and display them.'});
|
R.Config('use_information' ,{ type: 'boolean', default: true, name:'Use Asphyxia Information', desc:'Enable the Asphyxia information section after entry. Otherwise, it will try to look for official information data and display them.'});
|
||||||
R.Config('use_asphyxia_gameover',{ type: 'boolean', default: true, name:'Use Asphyxia Gameover', desc:'Enable the Asphyxia gameover message after ending the game.'})
|
R.Config('use_asphyxia_gameover',{ type: 'boolean', default: true, name:'Use Asphyxia Gameover', desc:'Enable the Asphyxia gameover message after ending the game.'})
|
||||||
R.Config('april_fools',{ type: 'boolean', default: false, name:'April Fools', desc:'Enable April Fools Event (toggles Grace crew + April Fools songs)'});
|
R.Config('april_fools',{ type: 'boolean', default: false, name:'April Fools', desc:'Enable April Fools Event (toggles Grace crew + April Fools songs)'});
|
||||||
@@ -53,6 +51,7 @@ export function register() {
|
|||||||
R.WebUIEvent('getRivalScores', getRivalScores);
|
R.WebUIEvent('getRivalScores', getRivalScores);
|
||||||
R.WebUIEvent('addRival', addRival);
|
R.WebUIEvent('addRival', addRival);
|
||||||
R.WebUIEvent('preGeneRoll', preGeneRoll);
|
R.WebUIEvent('preGeneRoll', preGeneRoll);
|
||||||
|
R.WebUIEvent('preGeneReward', preGeneReward);
|
||||||
R.WebUIEvent('manageEvents', manageEvents);
|
R.WebUIEvent('manageEvents', manageEvents);
|
||||||
R.WebUIEvent('manageStartupFlags', manageStartupFlags);
|
R.WebUIEvent('manageStartupFlags', manageStartupFlags);
|
||||||
R.WebUIEvent('updateProfile', updateProfile);
|
R.WebUIEvent('updateProfile', updateProfile);
|
||||||
@@ -124,4 +123,6 @@ export function register() {
|
|||||||
}));
|
}));
|
||||||
|
|
||||||
R.Unhandled(undefined)
|
R.Unhandled(undefined)
|
||||||
|
|
||||||
|
dataUpdate()
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-1
@@ -33,9 +33,13 @@ game
|
|||||||
skill_name_id(__type="s16") #{skill.name}
|
skill_name_id(__type="s16") #{skill.name}
|
||||||
skill_type(__type="s16") #{skill.type !== undefined ? skill.type : 0}
|
skill_type(__type="s16") #{skill.type !== undefined ? skill.type : 0}
|
||||||
|
|
||||||
if bplSupport
|
if bplSupport > 0 && !bplPro
|
||||||
support_team_id(__type="s32") #{bplSupport}
|
support_team_id(__type="s32") #{bplSupport}
|
||||||
|
|
||||||
|
additional_info
|
||||||
|
if bplPro && bplSupport > 0
|
||||||
|
pro_team_id(val=`${bplSupport}`)
|
||||||
|
|
||||||
ea_shop
|
ea_shop
|
||||||
packet_booster(__type="s32") 1
|
packet_booster(__type="s32") 1
|
||||||
if version < 5
|
if version < 5
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ function getMedal(clear) {
|
|||||||
function getAppealCard(appeal) {
|
function getAppealCard(appeal) {
|
||||||
|
|
||||||
var result = appeal_db["appeal_card_data"]["card"].filter(object => object["@id"] == appeal);
|
var result = appeal_db["appeal_card_data"]["card"].filter(object => object["@id"] == appeal);
|
||||||
return "static/asset/ap_card/" + ((result.length > 0) ? result[0]["info"]["texture"] : 'ap_06_0001') + ".jpg"
|
return "static/asset/ap_card/" + ((result.length > 0) ? result[0]["info"]["texture"] : 'ap_06_0001') + ".png"
|
||||||
}
|
}
|
||||||
|
|
||||||
function getSongLevel(musicid, type) {
|
function getSongLevel(musicid, type) {
|
||||||
|
|||||||
@@ -55,7 +55,10 @@ async function loadItems(itemSet, gene_edition, items_crew, items_stamp, items_s
|
|||||||
let geneItems = await getGeneratorEditionItems(gene_edition, itemSet)
|
let geneItems = await getGeneratorEditionItems(gene_edition, itemSet)
|
||||||
let itemCounts = countGeneItems(geneItems, items_crew, items_stamp, items_subbg, items_bgm, items_nemsys, items_sysbg)
|
let itemCounts = countGeneItems(geneItems, items_crew, items_stamp, items_subbg, items_bgm, items_nemsys, items_sysbg)
|
||||||
if(gene_edition === 'premium') {
|
if(gene_edition === 'premium') {
|
||||||
if(itemCounts[0] >= itemCounts[1]) $('#pregene-roll').attr('disabled', 'disabled')
|
if(itemCounts[0] >= itemCounts[1]) {
|
||||||
|
$('#pregene-roll').attr('disabled', 'disabled')
|
||||||
|
checkSetReward(geneItems)
|
||||||
|
}
|
||||||
else $('#pregene-roll').removeAttr('disabled')
|
else $('#pregene-roll').removeAttr('disabled')
|
||||||
} else if(gene_edition === 'valkyrie') {
|
} else if(gene_edition === 'valkyrie') {
|
||||||
$('#valgene-roll').attr('disabled', 'disabled')
|
$('#valgene-roll').attr('disabled', 'disabled')
|
||||||
@@ -126,6 +129,24 @@ function redirectAfterRoll() {
|
|||||||
location.search = urlParams;
|
location.search = urlParams;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function checkSetReward(geneItems) {
|
||||||
|
let refid = document.getElementsByName("refid")[0].value
|
||||||
|
if ('reward' in geneItems) {
|
||||||
|
emit('preGeneReward', {
|
||||||
|
reward: geneItems.reward,
|
||||||
|
refid: refid
|
||||||
|
}).then(
|
||||||
|
function(response) {
|
||||||
|
if(response.data.received) {
|
||||||
|
$('.modal-card-head').append('<p class="modal-card-title">Got reward for completing set - ' + response.data.reward[4] + '</p>')
|
||||||
|
$('.modal-card-body').append('<img style="width: 400px; padding: 10px;" src="static/asset/valgene_item/item_' + response.data.reward[3] + '_' + response.data.reward[1] + '.png">')
|
||||||
|
$('.modal-card-foot').append('<button onclick=redirectAfterRoll(); class="button is-primary">Close</button>')
|
||||||
|
$('.modal').addClass('is-active')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$(document).ready(async function() {
|
$(document).ready(async function() {
|
||||||
if(document.getElementById("data-pass-unlock-all").innerText === 'true') {
|
if(document.getElementById("data-pass-unlock-all").innerText === 'true') {
|
||||||
$('.card-content').text("The \"Unlock All Valkyrie and Premium Items\" option is enabled. You wouldn't need this.")
|
$('.card-content').text("The \"Unlock All Valkyrie and Premium Items\" option is enabled. You wouldn't need this.")
|
||||||
|
|||||||
@@ -218,7 +218,10 @@ $(document).ready(function() {
|
|||||||
text: json["supportTeams"][i].name,
|
text: json["supportTeams"][i].name,
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
$('[name="bplSupport"]').val(profile_data["bplSupport"] ? profile_data["bplSupport"] : 0);
|
let bplSupport = profile_data["bplSupport"] ? profile_data["bplSupport"] % 10 : 0
|
||||||
|
$('[name="bplSupport"]').val(bplSupport);
|
||||||
|
|
||||||
|
if(profile_data["bplSupport"] >= 10) $('[name="bplPro"]').attr('checked', true);
|
||||||
|
|
||||||
for (var i in json["sysbg"]) {
|
for (var i in json["sysbg"]) {
|
||||||
if(unlock_all || (items_sysbg.find(x => x.id === json["sysbg"][i].id) || json["sysbg"][i].id === 0)) {
|
if(unlock_all || (items_sysbg.find(x => x.id === json["sysbg"][i].id) || json["sysbg"][i].id === 0)) {
|
||||||
|
|||||||
@@ -5495,6 +5495,13 @@
|
|||||||
"rtype": "aptitle",
|
"rtype": "aptitle",
|
||||||
"rid": 10347,
|
"rid": 10347,
|
||||||
"troptype": 3
|
"troptype": 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 786,
|
||||||
|
"title": "HEXA DIVER Ep:開催!NEMSYS GAME EXPOを全曲獲得",
|
||||||
|
"rtype": "aptitle",
|
||||||
|
"rid": 10348,
|
||||||
|
"troptype": 3
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
+1230
-116
File diff suppressed because it is too large
Load Diff
@@ -294,6 +294,40 @@
|
|||||||
"name": "TAMA猫アドベンチャー (TAMANEKO Adventure)",
|
"name": "TAMA猫アドベンチャー (TAMANEKO Adventure)",
|
||||||
"desc": "New unlock system where you complete map missions to earn TAMANEKO food. New and XCD charts are available to unlock, as well as a 'Track Liberation' and 'OVER ADVENTURE' feature.",
|
"desc": "New unlock system where you complete map missions to earn TAMANEKO food. New and XCD charts are available to unlock, as well as a 'Track Liberation' and 'OVER ADVENTURE' feature.",
|
||||||
"info": "Toggle to enable/disable event."
|
"info": "Toggle to enable/disable event."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "reflecstamp2",
|
||||||
|
"type": "stamp",
|
||||||
|
"enabled": true,
|
||||||
|
"name": "REFLEC BEAT Song Stamp Event (2024)",
|
||||||
|
"desc": "Stamp event to unlock 5 more songs originally from the REFLEC BEAT game series.",
|
||||||
|
"info": "Toggle this on to enable this stamp event."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "mystreun",
|
||||||
|
"type": "cross_online",
|
||||||
|
"enabled": true,
|
||||||
|
"name": "MYSTICAL Re:UNION",
|
||||||
|
"desc": "Crossover event for SDVX and DDR. Toggle on to unlock song/s.",
|
||||||
|
"info": [
|
||||||
|
"Song 1: Blφφdy Cφncertφ",
|
||||||
|
"Song 2: OROCHI STRIKE",
|
||||||
|
"Song 3: Lichtsäule",
|
||||||
|
"Song 4: REINCARNATION",
|
||||||
|
"Song 5: Re:RHYZE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "bpls4tripletribe",
|
||||||
|
"type": "cross_online",
|
||||||
|
"enabled": true,
|
||||||
|
"name": "BEMANI PRO LEAGUE -SEASON 4- Triple Tribe",
|
||||||
|
"desc": "Crossover event between SOUND VOLTEX -Valkyrie model-, DanceDanceRevolution 20th anniversary model, and beatmania IIDX LIGHTNING MODEL cabinets where you would earn TD, TB and TS points which can be used to unlock songs through the participating games.<br>However, since it's difficult to replicate such crossover event in Asphyxia, you can just toggle the corresponding SOUND VOLTEX songs' option to automatically unlock them on your next login.",
|
||||||
|
"info": [
|
||||||
|
"Song 1: 'Come to Life",
|
||||||
|
"Song 2: 'SOLAR ECLIPSE'",
|
||||||
|
"Song 3: 'COSMIC V3LOCITY'"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"flags": [
|
"flags": [
|
||||||
@@ -318,7 +352,7 @@
|
|||||||
{
|
{
|
||||||
"id": "demoloopinfo",
|
"id": "demoloopinfo",
|
||||||
"key": "DEMOLOOP_INFORMATION",
|
"key": "DEMOLOOP_INFORMATION",
|
||||||
"str": "DEMOLOOP_INFORMATION\tdemo_info/240129_bpls3_streaming.png",
|
"str": "DEMOLOOP_INFORMATION\tdemo_info/240604_bpls4iidx_demo.png",
|
||||||
"explain": "Enables display of available information in attract mode."
|
"explain": "Enables display of available information in attract mode."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -345,6 +379,12 @@
|
|||||||
"str": "WHITE_DAY_2024",
|
"str": "WHITE_DAY_2024",
|
||||||
"explain": "Enables Navigator White Day greeting."
|
"explain": "Enables Navigator White Day greeting."
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"id": "halloween",
|
||||||
|
"key": "HALLOWEEN_EVENT",
|
||||||
|
"str": "HALLOWEEN_EVENT",
|
||||||
|
"explain": "Enables Navigator Halloween greeting."
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"id": "aprilrainbowline",
|
"id": "aprilrainbowline",
|
||||||
"key": "APRIL_RAINBOW_LINE_ACTIVE",
|
"key": "APRIL_RAINBOW_LINE_ACTIVE",
|
||||||
|
|||||||
@@ -112,7 +112,37 @@
|
|||||||
"stamp": [368, 369, 370, 371, 372, 373, 374, 375, 376, 377],
|
"stamp": [368, 369, 370, 371, 372, 373, 374, 375, 376, 377],
|
||||||
"subbg": [464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482]
|
"subbg": [464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482]
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
{
|
||||||
|
"id": 12,
|
||||||
|
"name": "Premium Generator Vol. 5",
|
||||||
|
"jpn_exc": false,
|
||||||
|
"items": {
|
||||||
|
"crew": [161],
|
||||||
|
"stamp": [384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396],
|
||||||
|
"subbg": [498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514]
|
||||||
|
},
|
||||||
|
"reward": [11, 161, 5, "crew", "NEAR & NOAH (EXCEED GEAR) Alternate Style"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 13,
|
||||||
|
"name": "Premium Generator (この素晴らしい世界に祝福を!3)",
|
||||||
|
"jpn_exc": true,
|
||||||
|
"items": {
|
||||||
|
"crew": [162, 163],
|
||||||
|
"stamp": [397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408],
|
||||||
|
"subbg": [515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 14,
|
||||||
|
"name": "Premium Generator (宝鐘マリン)",
|
||||||
|
"items": {
|
||||||
|
"crew": [164],
|
||||||
|
"stamp": [409, 410, 411, 412, 413, 414, 415, 416, 417, 418],
|
||||||
|
"subbg": [532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552]
|
||||||
|
}
|
||||||
|
}
|
||||||
],
|
],
|
||||||
"valgene":[
|
"valgene":[
|
||||||
{
|
{
|
||||||
@@ -262,6 +292,16 @@
|
|||||||
"bgm": [64, 65, 66, 67, 68, 69, 70, 71],
|
"bgm": [64, 65, 66, 67, 68, 69, 70, 71],
|
||||||
"nemsys": [44, 45]
|
"nemsys": [44, 45]
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 15,
|
||||||
|
"name": "Valkyrie Generator Touhou Project",
|
||||||
|
"items": {
|
||||||
|
"stamp": [378, 379, 380, 381, 382, 383],
|
||||||
|
"subbg": [483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497],
|
||||||
|
"bgm": [72, 73, 74, 75, 76, 77, 78, 79, 80],
|
||||||
|
"nemsys": [46]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -84,6 +84,17 @@ div
|
|||||||
.control.is-expanded
|
.control.is-expanded
|
||||||
.select.is-fullwidth
|
.select.is-fullwidth
|
||||||
select(name="bplSupport" id="bplsupport_select")
|
select(name="bplSupport" id="bplsupport_select")
|
||||||
|
.field
|
||||||
|
label.label BPL Pro Player
|
||||||
|
span.icon.has-tooltip-right(data-tooltip="Enabling this will show the BPL Pro Player label instead of the Supporter label.")
|
||||||
|
i.mdi.mdi-help-circle
|
||||||
|
.control.is-expanded
|
||||||
|
.field-body
|
||||||
|
.field
|
||||||
|
.control
|
||||||
|
label.switch.is-rounded
|
||||||
|
input(name="bplPro" type="checkbox")
|
||||||
|
span.check
|
||||||
.field
|
.field
|
||||||
label.label Valgene Tickets
|
label.label Valgene Tickets
|
||||||
span.icon.has-tooltip-right(data-tooltip="Number of tickets you can use to buy Valkyrie Generator Items, instead of PASELI or credits.")
|
span.icon.has-tooltip-right(data-tooltip="Number of tickets you can use to buy Valkyrie Generator Items, instead of PASELI or credits.")
|
||||||
|
|||||||
Reference in New Issue
Block a user