mirror of
https://github.com/open-goal/jak-project
synced 2026-07-09 14:55:51 -04:00
Discord RPC enhancements/additions (#1162)
* various discord rpc additions * fix formatting * revert changes in game-task-h and task-control-h * discord-rpc: refactor boss and racer/flut checks now works via checking process states * fix codacy
This commit is contained in:
@@ -827,20 +827,38 @@ void update_discord_rpc(u32 discord_info) {
|
||||
if (gDiscordRpcEnabled) {
|
||||
DiscordRichPresence rpc;
|
||||
char state[128];
|
||||
char large_image_text[128];
|
||||
auto info = discord_info ? Ptr<DiscordInfo>(discord_info).c() : NULL;
|
||||
if (info) {
|
||||
int cells = (int)*Ptr<float>(info->fuel).c();
|
||||
int orbs = (int)*Ptr<float>(info->money_total).c();
|
||||
int scout_flies = (int)*Ptr<float>(info->buzzer_total).c();
|
||||
int deaths = *Ptr<int>(info->deaths).c();
|
||||
auto cutscene = Ptr<Symbol>(info->cutscene)->value;
|
||||
auto ogreboss = Ptr<Symbol>(info->ogreboss)->value;
|
||||
auto plantboss = Ptr<Symbol>(info->plantboss)->value;
|
||||
auto racer = Ptr<Symbol>(info->racer)->value;
|
||||
auto flutflut = Ptr<Symbol>(info->flutflut)->value;
|
||||
char* status = Ptr<String>(info->status).c()->data();
|
||||
char* level = Ptr<String>(info->level).c()->data();
|
||||
const char* full_level_name = jak1_get_full_level_name(Ptr<String>(info->level).c()->data());
|
||||
memset(&rpc, 0, sizeof(rpc));
|
||||
rpc.largeImageKey = level;
|
||||
strcpy(large_image_text, full_level_name);
|
||||
if (!strcmp(level, "finalboss")) {
|
||||
strcpy(state, "Fighting Final Boss");
|
||||
} else if (plantboss != offset_of_s7()) {
|
||||
strcpy(state, "Fighting Dark Eco Plant");
|
||||
rpc.largeImageKey = "plant-boss";
|
||||
strcpy(large_image_text, "Dark Eco Plant");
|
||||
} else if (ogreboss != offset_of_s7()) {
|
||||
strcpy(state, "Fighting Klaww");
|
||||
rpc.largeImageKey = "ogreboss";
|
||||
strcpy(large_image_text, "Klaww");
|
||||
} else if (!strcmp(level, "title")) {
|
||||
strcpy(state, "On title screen");
|
||||
rpc.largeImageKey = "title";
|
||||
strcpy(large_image_text, "Title screen");
|
||||
} else if (!strcmp(level, "intro")) {
|
||||
strcpy(state, "Intro");
|
||||
} else if (cutscene != offset_of_s7()) {
|
||||
@@ -852,14 +870,30 @@ void update_discord_rpc(u32 discord_info) {
|
||||
strcat(state, std::to_string(orbs).c_str());
|
||||
strcat(state, " | Flies: ");
|
||||
strcat(state, std::to_string(scout_flies).c_str());
|
||||
|
||||
strcat(large_image_text, " | Cells: ");
|
||||
strcat(large_image_text, std::to_string(cells).c_str());
|
||||
strcat(large_image_text, " | Orbs: ");
|
||||
strcat(large_image_text, std::to_string(orbs).c_str());
|
||||
strcat(large_image_text, " | Flies: ");
|
||||
strcat(large_image_text, std::to_string(scout_flies).c_str());
|
||||
strcat(large_image_text, " | Deaths: ");
|
||||
strcat(large_image_text, std::to_string(deaths).c_str());
|
||||
}
|
||||
rpc.largeImageText = large_image_text;
|
||||
rpc.state = state;
|
||||
if (racer != offset_of_s7()) {
|
||||
rpc.smallImageKey = "target-racer";
|
||||
rpc.smallImageText = "Driving A-Grav Zoomer";
|
||||
} else if (flutflut != offset_of_s7()) {
|
||||
rpc.smallImageKey = "flutflut";
|
||||
rpc.smallImageText = "Riding on Flut Flut";
|
||||
} else {
|
||||
rpc.smallImageKey = 0;
|
||||
rpc.smallImageText = 0;
|
||||
}
|
||||
rpc.startTimestamp = gStartTime;
|
||||
rpc.details = status;
|
||||
rpc.largeImageKey = level;
|
||||
rpc.largeImageText = full_level_name;
|
||||
rpc.smallImageKey = 0;
|
||||
rpc.smallImageText = 0;
|
||||
rpc.partySize = 0;
|
||||
rpc.partyMax = 0;
|
||||
Discord_UpdatePresence(&rpc);
|
||||
|
||||
@@ -138,9 +138,14 @@ struct DiscordInfo {
|
||||
u32 fuel;
|
||||
u32 money_total;
|
||||
u32 buzzer_total;
|
||||
u32 deaths;
|
||||
u32 status;
|
||||
u32 level;
|
||||
u32 cutscene; // check if cutscene is playing
|
||||
u32 cutscene; // check if cutscene is playing
|
||||
u32 ogreboss; // are we fighting ogreboss?
|
||||
u32 plantboss; // are we fighting plant-boss?
|
||||
u32 racer; // are we driving the zoomer?
|
||||
u32 flutflut; // are we riding on flut flut?
|
||||
};
|
||||
|
||||
// static_assert(offsetof(CpadInfo, new_pad) == 76, "cpad type offset");
|
||||
|
||||
@@ -314,9 +314,14 @@
|
||||
((fuel (pointer float))
|
||||
(money-total (pointer float))
|
||||
(buzzer-total (pointer float))
|
||||
(deaths (pointer int32))
|
||||
(status string)
|
||||
(level string)
|
||||
(cutscene? symbol)
|
||||
(ogreboss? symbol)
|
||||
(plant-boss? symbol)
|
||||
(racer? symbol)
|
||||
(flutflut? symbol)
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
+44
-1
@@ -43,7 +43,9 @@
|
||||
(unknown 15)
|
||||
)
|
||||
|
||||
|
||||
;; forward declarations needed for discord rpc.
|
||||
(declare-type ogreboss process-drawable)
|
||||
(declare-type plant-boss process-drawable)
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;; updates
|
||||
@@ -191,9 +193,50 @@
|
||||
(set! (-> info fuel) (&-> *game-info* fuel))
|
||||
(set! (-> info money-total) (&-> *game-info* money-total))
|
||||
(set! (-> info buzzer-total) (&-> *game-info* buzzer-total))
|
||||
(set! (-> info deaths) (&-> *game-info* total-deaths))
|
||||
(set! (-> info status) "Playing Jak and Daxter: The Precursor Legacy™")
|
||||
(set! (-> info level) (symbol->string (-> (level-get-target-inside *level*) name))) ;; grab the name of level we're in
|
||||
(set! (-> info cutscene?) (-> obj movie?))
|
||||
(set! (-> info ogreboss?) (the-as symbol (and (process-by-ename "ogreboss-1") (case (-> (process-by-ename "ogreboss-1") next-state name) (
|
||||
('ogreboss-die
|
||||
'ogreboss-idle
|
||||
'ogreboss-stage1
|
||||
'ogreboss-stage2
|
||||
'ogreboss-stage3-hit
|
||||
'ogreboss-stage3-shuffle
|
||||
'ogreboss-stage3-throw
|
||||
'ogreboss-wait-for-player) #t)))))
|
||||
(set! (-> info plant-boss?) (the-as symbol (and (process-by-ename "plant-boss-3") (case (-> (process-by-ename "plant-boss-3") next-state name) (
|
||||
('plant-boss-idle
|
||||
'plant-boss-hit
|
||||
'plant-boss-vulnerable
|
||||
'plant-boss-spawn
|
||||
'plant-boss-reset
|
||||
'plant-boss-attack) #t)))))
|
||||
(set! (-> info racer?) (the-as symbol (and *target* (case (-> *target* next-state name) (
|
||||
('target-racing
|
||||
'target-racing-bounce
|
||||
'target-racing-death
|
||||
'target-racing-falling
|
||||
'target-racing-grab
|
||||
'target-racing-hit
|
||||
'target-racing-jump
|
||||
'target-racing-smack
|
||||
'target-racing-start) #t)))))
|
||||
(set! (-> info flutflut?) (the-as symbol (and *target* (case (-> *target* next-state name) (
|
||||
('target-flut-air-attack
|
||||
'target-flut-air-attack-hit-ground
|
||||
'target-flut-double-jump
|
||||
'target-flut-falling
|
||||
'target-flut-grab
|
||||
'target-flut-hit
|
||||
'target-flut-hit-ground
|
||||
'target-flut-jump
|
||||
'target-flut-running-attack
|
||||
'target-flut-stance
|
||||
'target-flut-start
|
||||
'target-flut-walk) #t)))))
|
||||
|
||||
(with-profiler "discord-update" (pc-discord-rpc-update info))
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user