Skip to content

Commit 2aae758

Browse files
authored
refactor: better naming & objecting (#32)
1 parent 80b573e commit 2aae758

File tree

19 files changed

+1322
-419
lines changed

19 files changed

+1322
-419
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,5 @@ static/
77
package-lock.json
88
config.ini
99
tosu.exe
10+
_version.js
1011
**/tosu/gameOverlay/

.versionrc

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
{
2+
"bumpFiles": [
3+
{
4+
"filename": "package.json",
5+
"type": "json"
6+
},
7+
{
8+
"filename": "packages/tosu/package.json",
9+
"type": "json"
10+
}
11+
],
12+
"packageFiles": [
13+
{
14+
"filename": "package.json",
15+
"type": "json"
16+
},
17+
{
18+
"filename": "packages/tosu/package.json",
19+
"type": "json"
20+
}
21+
]
22+
}

package.json

+2
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@
66
"prepare": "husky install",
77
"start": "pnpm run -C packages/tosu run:dev",
88
"build": "pnpm run -C packages/tosu compile",
9+
"release": "standard-version",
910
"prettier:fix": "prettier --write \"**/*.{js,jsx,ts,tsx,css,scss}\""
1011
},
1112
"dependencies": {
1213
"@types/node": "^18.14.6",
14+
"standard-version": "^9.5.0",
1315
"tsconfig-paths": "^4.2.0",
1416
"typescript": "^5.3.3"
1517
},

packages/tosu/package.json

+5-2
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@
44
"main": "dist/index.js",
55
"bin": "dist/index.js",
66
"scripts": {
7+
"genver": "npx genversion src/_version.js",
78
"ts:run": "ts-node --transpile-only -r tsconfig-paths/register --project tsconfig.json",
89
"ts:compile": "ncc build src/index.ts -o dist -m -d",
9-
"run:dev": "pnpm run ts:run src/index.ts",
10-
"compile": "pnpm run ts:compile && pkg -t node18-win-x64 --output dist/tosu.exe --debug --config pkg.json --compress brotli dist/index.js && pnpm run ts:run src/postBuild.ts"
10+
"run:dev": "pnpm run genver && pnpm run ts:run src/index.ts",
11+
"compile": "pnpm run genver && pnpm run ts:compile && pkg -t node18-win-x64 --output dist/tosu.exe --debug --config pkg.json --compress brotli dist/index.js && pnpm run ts:run src/postBuild.ts"
1112
},
1213
"dependencies": {
1314
"@fastify/send": "^2.1.0",
@@ -20,6 +21,7 @@
2021
"fastify": "^4.25.1",
2122
"find-process": "^1.4.7",
2223
"game-overlay": "workspace:*",
24+
"genversion": "^3.1.1",
2325
"osu-catch-stable": "^4.0.0",
2426
"osu-classes": "^3.0.0",
2527
"osu-mania-stable": "^5.0.0",
@@ -28,6 +30,7 @@
2830
"osu-taiko-stable": "^5.0.0",
2931
"pkg": "^5.8.0",
3032
"resedit": "^2.0.0",
33+
"semver": "^7.5.4",
3134
"ts-node": "^10.9.1",
3235
"tsprocess": "workspace:*",
3336
"winston": "^3.8.2"

packages/tosu/src/entities/AllTimesData/index.ts

+15-20
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { DataRepo } from '@/entities/DataRepoList';
2-
import { wLogger } from '@/logger';
32

43
import { AbstractEntity } from '../AbstractEntity';
54

@@ -18,32 +17,29 @@ export class AllTimesData extends AbstractEntity {
1817
}
1918

2019
async updateState() {
21-
wLogger.debug(`[AllTimesData:updateState] starting`);
22-
23-
const { process, bases, settings } = this.services.getServices([
20+
const { process, patterns, settings } = this.services.getServices([
2421
'process',
25-
'bases',
22+
'patterns',
2623
'settings'
2724
]);
28-
if (process === null) {
29-
throw new Error('Process not found');
30-
}
31-
if (bases === null) {
32-
throw new Error('Bases repo not found');
33-
}
34-
if (settings === null) {
35-
throw new Error('Settings repo not found');
36-
}
3725

3826
const {
39-
statusAddr,
27+
statusPtr,
4028
playTimeAddr,
41-
menuModsAddr,
29+
menuModsPtr,
4230
chatCheckerAddr,
4331
skinDataAddr,
4432
settingsClassAddr,
4533
canRunSlowlyAddr
46-
} = bases.bases;
34+
} = patterns.getPatterns([
35+
'statusPtr',
36+
'playTimeAddr',
37+
'menuModsPtr',
38+
'chatCheckerAddr',
39+
'skinDataAddr',
40+
'settingsClassAddr',
41+
'canRunSlowlyAddr'
42+
]);
4743

4844
const skinOsuAddr = process.readInt(skinDataAddr + 0x7);
4945
if (skinOsuAddr === 0) {
@@ -52,11 +48,11 @@ export class AllTimesData extends AbstractEntity {
5248
const skinOsuBase = process.readInt(skinOsuAddr);
5349

5450
// [Status - 0x4]
55-
this.Status = process.readPointer(statusAddr - 0x4);
51+
this.Status = process.readPointer(statusPtr);
5652
// [PlayTime + 0x5]
5753
this.PlayTime = process.readInt(process.readInt(playTimeAddr + 0x5));
5854
// [MenuMods + 0x9]
59-
this.MenuMods = process.readInt(process.readInt(menuModsAddr + 0x9));
55+
this.MenuMods = process.readPointer(menuModsPtr);
6056
// ChatChecker - 0x20
6157
this.ChatStatus = process.readByte(chatCheckerAddr - 0x20);
6258
this.SkinFolder = process.readSharpString(
@@ -82,7 +78,6 @@ export class AllTimesData extends AbstractEntity {
8278
process.readInt(canRunSlowlyAddr + 0x46)
8379
);
8480

85-
wLogger.debug(`[MenuData:updateState] updated`);
8681
settings.setShowInterface(this.ShowInterface);
8782
}
8883
}

packages/tosu/src/entities/BassDensityData/index.ts

+3-10
Original file line numberDiff line numberDiff line change
@@ -13,25 +13,20 @@ export class BassDensityData extends AbstractEntity {
1313
}
1414

1515
async updateState() {
16-
wLogger.debug(`[BaseDensityData:updateState] starting`);
17-
18-
const { process: osuProcess, bases } = this.services.getServices([
16+
const { process: osuProcess, patterns } = this.services.getServices([
1917
'process',
20-
'bases'
18+
'patterns'
2119
]);
2220
if (osuProcess === null) {
2321
throw new Error('Process not found');
2422
}
25-
if (bases === null) {
26-
throw new Error('Bases repo not found');
27-
}
2823

2924
const isWin = process.platform === 'win32';
3025
const leaderStart = isWin ? 0x8 : 0xc;
3126

3227
// Ruleset = [[Rulesets - 0xB] + 0x4]
3328
const rulesetAddr = osuProcess.readInt(
34-
osuProcess.readInt(bases.getBase('rulesetsAddr') - 0xb) + 0x4
29+
osuProcess.readInt(patterns.getPattern('rulesetsAddr') - 0xb) + 0x4
3530
);
3631
if (rulesetAddr === 0) {
3732
wLogger.debug('rulesetAddr is zero');
@@ -69,7 +64,5 @@ export class BassDensityData extends AbstractEntity {
6964

7065
this.currentAudioVelocity = currentAudioVelocity;
7166
this.density = (1 + currentAudioVelocity) * 0.5;
72-
73-
wLogger.debug(`[BaseDensityData:updateState] updated`);
7467
}
7568
}

packages/tosu/src/entities/BeatmapPpData/index.ts

+3-4
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,9 @@ export class BeatmapPPData extends AbstractEntity {
119119
}
120120

121121
updateCurrentAttributes(stars: number, pp: number) {
122+
wLogger.debug(
123+
`maxPP -> ${this.currAttributes.maxThisPlayPP} pp -> ${pp} stars -> ${stars}`
124+
);
122125
const maxThisPlayPP =
123126
pp > this.currAttributes.maxThisPlayPP
124127
? pp
@@ -162,8 +165,6 @@ export class BeatmapPPData extends AbstractEntity {
162165
}
163166

164167
async updateMapMetadata(currentMods: number) {
165-
wLogger.debug(`[BeatmapPpData:updateMapMetadata] starting`);
166-
167168
const start_time = performance.now();
168169

169170
const { menuData, settings } = this.services.getServices([
@@ -350,8 +351,6 @@ export class BeatmapPPData extends AbstractEntity {
350351
).toFixed(2)}ms`
351352
);
352353

353-
wLogger.debug(`[BeatmapPpData:updateMapMetadata] updating`);
354-
355354
this.updatePPData(oldStrains, resultStrains, ppAcc as never, {
356355
ar: mapAttributes.ar,
357356
cs: mapAttributes.cs,

packages/tosu/src/entities/DataRepoList.ts

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Process } from 'tsprocess/dist/process';
22

3-
import { MemoryBase } from '@/objects/memoryBase';
3+
import { MemoryPatterns } from '@/objects/memoryPatterns';
44

55
import { AllTimesData } from './AllTimesData';
66
import { BassDensityData } from './BassDensityData';
@@ -15,8 +15,10 @@ import { UserProfile } from './UserProfile';
1515

1616
export interface DataRepoList {
1717
process: Process;
18-
bases: MemoryBase;
18+
patterns: MemoryPatterns;
19+
1920
settings: Settings;
21+
2022
allTimesData: AllTimesData;
2123
beatmapPpData: BeatmapPPData;
2224
menuData: MenuData;
@@ -65,7 +67,7 @@ export class DataRepo {
6567
return services.reduce(
6668
(acc, item: keyof Pick<DataRepoList, T[number]>) => {
6769
const instance = this.get(item);
68-
if (!instance) {
70+
if (!instance || instance === null) {
6971
throw new Error(
7072
`Service "${item}" was not set in DataRepo list`
7173
);

packages/tosu/src/entities/GamePlayData/index.ts

+11-23
Original file line numberDiff line numberDiff line change
@@ -110,17 +110,18 @@ export class GamePlayData extends AbstractEntity {
110110
}
111111

112112
async updateState() {
113-
wLogger.debug(`[GamePlayData:updateState] starting`);
114-
115-
const { process, bases, allTimesData, menuData } =
113+
const { process, patterns, allTimesData, menuData } =
116114
this.services.getServices([
117115
'process',
118-
'bases',
116+
'patterns',
119117
'allTimesData',
120118
'menuData'
121119
]);
122120

123-
const { baseAddr, rulesetsAddr } = bases.bases;
121+
const { baseAddr, rulesetsAddr } = patterns.getPatterns([
122+
'baseAddr',
123+
'rulesetsAddr'
124+
]);
124125

125126
const rulesetAddr = process.readInt(
126127
process.readInt(rulesetsAddr - 0xb) + 0x4
@@ -221,30 +222,26 @@ export class GamePlayData extends AbstractEntity {
221222
this.HitMissPrev = this.HitMiss;
222223
this.ComboPrev = this.Combo;
223224

224-
wLogger.debug(`[GamePlayData:updateState] updated`);
225-
226225
// [[[Ruleset + 0x68] + 0x38] + 0x38]
227226
this.HitErrors = this.getHitErrors(
228227
process,
229-
bases.leaderStart,
228+
patterns.getLeaderStart(),
230229
scoreBase
231230
);
232231

233-
this.updateLeaderboard(process, bases.leaderStart, rulesetAddr);
232+
this.updateLeaderboard(process, patterns.getLeaderStart(), rulesetAddr);
234233
this.updateGrade(menuData);
235234
this.updateStarsAndPerformance();
236235
}
237236

238237
async updateKeyOverlay() {
239-
wLogger.debug(`[GamePlayData:updateKeyOverlay] starting`);
240-
241-
const { process, bases } = this.services.getServices([
238+
const { process, patterns } = this.services.getServices([
242239
'process',
243-
'bases'
240+
'patterns'
244241
]);
245242

246243
const rulesetAddr = process.readInt(
247-
process.readInt(bases.bases.rulesetsAddr - 0xb) + 0x4
244+
process.readInt(patterns.getPattern('rulesetsAddr') - 0xb) + 0x4
248245
);
249246
if (rulesetAddr === 0) {
250247
return;
@@ -340,7 +337,6 @@ export class GamePlayData extends AbstractEntity {
340337
leaderStart: number,
341338
scoreBase: number = 0
342339
): Array<number> {
343-
wLogger.debug(`[GamePlayData:getHitErrors] processing`);
344340
if (scoreBase === 0) return [];
345341

346342
const errors: Array<number> = [];
@@ -356,8 +352,6 @@ export class GamePlayData extends AbstractEntity {
356352
errors.push(error);
357353
}
358354

359-
wLogger.debug(`[GamePlayData:getHitErrors] done`);
360-
361355
return errors;
362356
}
363357

@@ -382,8 +376,6 @@ export class GamePlayData extends AbstractEntity {
382376
}
383377

384378
private updateGrade(menuData: MenuData) {
385-
wLogger.debug(`[GamePlayData:updateGrade] processing`);
386-
387379
const remaining =
388380
menuData.ObjectCount -
389381
this.Hit300 -
@@ -416,7 +408,6 @@ export class GamePlayData extends AbstractEntity {
416408
leaderStart: number,
417409
rulesetAddr: number
418410
) {
419-
wLogger.debug(`[GamePlayData:updateLeaderboard] processing`);
420411
// [Ruleset + 0x7C]
421412
const leaderBoardBase = process.readInt(rulesetAddr + 0x7c);
422413

@@ -432,7 +423,6 @@ export class GamePlayData extends AbstractEntity {
432423
}
433424

434425
private updateStarsAndPerformance() {
435-
wLogger.debug(`[GamePlayData:updateStarsAndPerformance] starting`);
436426
if (!config.calculatePP) {
437427
wLogger.debug(
438428
`[GamePlayData:updateStarsAndPerformance] pp calculation disabled`
@@ -502,7 +492,5 @@ export class GamePlayData extends AbstractEntity {
502492
curPerformance.pp
503493
);
504494
beatmapPpData.updateFcPP(fcPerformance.pp);
505-
506-
wLogger.debug(`[GamePlayData:updateStarsAndPerformance] updated`);
507495
}
508496
}

packages/tosu/src/entities/MenuData/index.ts

+6-11
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,12 @@ export class MenuData extends AbstractEntity {
3636
}
3737

3838
async updateState() {
39-
wLogger.debug(`[MenuData:updateState] starting`);
40-
41-
const { process, bases } = this.services.getServices([
39+
const { process, patterns } = this.services.getServices([
4240
'process',
43-
'bases'
41+
'patterns'
4442
]);
4543

46-
const { baseAddr } = bases.bases;
44+
const baseAddr = patterns.getPattern('baseAddr');
4745

4846
const beatmapAddr = process.readPointer(baseAddr - 0xc);
4947
if (beatmapAddr === 0) {
@@ -124,22 +122,19 @@ export class MenuData extends AbstractEntity {
124122
// [Beatmap] + 0xFC
125123
this.ObjectCount = process.readInt(beatmapAddr + 0xfc);
126124

127-
wLogger.debug('State: MenuData updated');
128-
129125
this.previousMD5 = this.MD5;
130126
}
131127

132128
updateMP3Length() {
133-
wLogger.debug(`[MenuData:updateMP3Length] starting`);
134-
const { process, bases } = this.services.getServices([
129+
const { process, patterns } = this.services.getServices([
135130
'process',
136-
'bases'
131+
'patterns'
137132
]);
138133

139134
// [[GetAudioLength + 0x7] + 0x4]
140135
this.MP3Length = Math.round(
141136
process.readDouble(
142-
process.readPointer(bases.getBase('getAudioLengthAddr') + 0x7) +
137+
process.readPointer(patterns.getPattern('getAudioLengthPtr')) +
143138
0x4
144139
)
145140
);

0 commit comments

Comments
 (0)