Skip to content

Commit

Permalink
Merge branch 'main' into requiredonclient-warning
Browse files Browse the repository at this point in the history
  • Loading branch information
GeckoEidechse authored Dec 17, 2023
2 parents ac707e1 + 93b9c73 commit c50a9a3
Show file tree
Hide file tree
Showing 42 changed files with 501 additions and 72 deletions.
5 changes: 4 additions & 1 deletion .gitattributes
Original file line number Diff line number Diff line change
@@ -1 +1,4 @@
/Northstar.Client/mod/resource/northstar_client_localisation_*.txt text diff working-tree-encoding=UTF-16LE-BOM
/Northstar.Client/mod/resource/northstar_client_localisation_*.txt text diff working-tree-encoding=UTF-16LE-BOM

# Highlight `.gnut` like `.nut` files
*.gnut linguist-language=Squirrel
33 changes: 20 additions & 13 deletions .github/nativefuncs.json
Original file line number Diff line number Diff line change
Expand Up @@ -421,13 +421,7 @@
"helpText":"Returns whether or not a given path leads to a folder.",
"returnTypeString":"bool",
"argTypes":"string path"
},
{
"name":"NSPushGameStateData",
"helpText":"",
"returnTypeString":"void",
"argTypes":"struct gamestate"
}
}
],
"UI":[
{
Expand Down Expand Up @@ -508,6 +502,25 @@
"returnTypeString":"array<string>",
"argTypes":"string modName"
},
{
"name": "NSIsModDownloadable",
"helpText": "checks whether a mod is verified and can be auto-downloaded",
"returnTypeString": "bool",
"argTypes": "string name, string version"

},
{
"name": "NSDownloadMod",
"helpText": "downloads a given mod from distant API to local game profile",
"returnTypeString": "void",
"argTypes": "string name, string version"
},
{
"name": "NSGetModInstallState",
"helpText": "get status of the mod currently being installed",
"returnTypeString": "ModInstallState",
"argTypes": ""
},
{
"name":"NSReloadMods",
"helpText":"",
Expand Down Expand Up @@ -724,12 +737,6 @@
"returnTypeString":"bool",
"argTypes":"string path"
},
{
"name":"NSPushUIPresence",
"helpText":"",
"returnTypeString":"void",
"argTypes":"struct presence"
},
{
"name":"NSGetMasterServerAuthResult",
"helpText":"",
Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/add-to-project.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ on:
issues:
types:
- opened
pull_request_target:
types:
- opened

jobs:
add-to-project:
Expand Down
8 changes: 8 additions & 0 deletions Northstar.Client/mod.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@
"LoadPriority": 0,
"InitScript": "cl_northstar_client_init.nut",
"ConVars": [
{
"Name": "allow_mod_auto_download",
"DefaultValue": "0"
},
{
"Name": "filter_hide_empty",
"DefaultValue": "0"
Expand Down Expand Up @@ -82,6 +86,10 @@
"After": "NSUpdateGameStateClientStart"
}
},
{
"Path": "ui/menu_ns_moddownload.nut",
"RunOn": "UI"
},
{
"Path": "ui/menu_ns_serverbrowser.nut",
"RunOn": "UI",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -367,5 +367,25 @@ Press Yes if you agree to this. This choice can be changed in the mods menu at a
"PROGRESSION_DISABLED_BODY" "^CCCC0000Progression has been disabled.^\n\nTitans, Weapons, Factions, Skins, etc. will all be unlocked and usable at any time.\n\nThis can be changed at any time in the multiplayer lobby."

"PROGRESSION_ANNOUNCEMENT_BODY" "^CCCC0000Progression can now be enabled!^\n\nNorthstar now supports vanilla progression, meaning you can choose to unlock Weapons, Skins, Titans, etc. through levelling up and completing challenges.\n\nYou can enable progression using the button at the bottom of the lobby screen.\n\nThis can be changed at any time."

// Mod downloading
"MISSING_MOD" "Missing mod \"%s1\" v%s2"
"MOD_NOT_VERIFIED" "(mod is not verified, and couldn't be downloaded automatically)"
"MOD_DL_DISABLED" "(automatic mod downloading is disabled)"
"DOWNLOADING_MOD_TITLE" "Downloading mod"
"DOWNLOADING_MOD_TITLE_W_PROGRESS" "Downloading mod (%s1%)"
"DOWNLOADING_MOD_TEXT" "Downloading %s1 v%s2..."
"DOWNLOADING_MOD_TEXT_W_PROGRESS" "Downloading %s1 v%s2...\n(%s3/%s4 MB)"
"CHECKSUMING_TITLE" "Checksuming mod"
"CHECKSUMING_TEXT" "Verifying contents of %s1 v%s2..."
"EXTRACTING_MOD_TITLE" "Extracting mod (%s1%)"
"EXTRACTING_MOD_TEXT" "Extracting %s1 v%s2...\n(%s3/%s4 MB)"
"FAILED_DOWNLOADING" "Failed downloading mod"
"FAILED_READING_ARCHIVE" "An error occurred while reading mod archive."
"FAILED_WRITING_TO_DISK" "An error occurred while extracting mod files to the filesystem."
"MOD_FETCHING_FAILED" "Mod archive could not be downloaded from Thunderstore."
"MOD_CORRUPTED" "Downloaded archive checksum does not match verified signature."
"NO_DISK_SPACE_AVAILABLE" "There is not enough space on your disk."
"MOD_FETCHING_FAILED_GENERAL" "Mod extraction failed. Check logs for more details."
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -353,5 +353,9 @@ Choisissez Oui si vous êtes d'accord. Ce choix peut être modifié à tout inst
"TOGGLE_PROGRESSION" "Activer la progression"
"Y_BUTTON_TOGGLE_PROGRESSION" "%[Y_BUTTON|]% Activer la progression"
"PROGRESSION_ANNOUNCEMENT_BODY" "^CCCC0000Le système de progression peut être activé !^\n\nNorthstar supporte désormais le système de progression du jeu original, vous permettant de choisir si vous souhaitez débloquer les armes, skins, titans etc. en gagnant des niveaux et en complétant des défis.\n\nVous pouvez activer la progression en utilisant le bouton en bas de l'écran d'accueil.\n\nCeci peut être changé à tout moment."
"AUTHENTICATION_FAILED_HEADER" "Échec de l'authentification"
"AUTHENTICATION_FAILED_HELP" "Aide"
"AUTHENTICATION_FAILED_ERROR_CODE" "Code d'erreur : ^DB6F2C00%s1^"
"AUTHENTICATION_FAILED_BODY" "L'authentification avec Atlas a échoué."
}
}
21 changes: 17 additions & 4 deletions Northstar.Client/mod/scripts/vscripts/cl_northstar_client_init.nut
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
global enum eDiscordGameState
{
LOADING = 0
MAINMENU
LOBBY
INGAME
}

global struct GameStateStruct {

string map
Expand All @@ -15,10 +23,7 @@ global struct GameStateStruct {
}

global struct UIPresenceStruct {
bool isLoading
bool isLobby
string loadingLevel
string loadedLevel
int gameState
}

global struct RequiredModInfo
Expand Down Expand Up @@ -48,3 +53,11 @@ global struct MasterServerAuthResult
string errorCode
string errorMessage
}

global struct ModInstallState
{
int status
int progress
int total
float ratio
}
11 changes: 4 additions & 7 deletions Northstar.Client/mod/scripts/vscripts/presence/cl_presence.nut
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
untyped
globalize_all_functions

void function NorthstarCodeCallback_GenerateGameState() {

GameStateStruct gs

GameStateStruct function DiscordRPC_GenerateGameState( GameStateStruct gs )
{
int highestScore = 0
int secondHighest = 0

Expand Down Expand Up @@ -40,6 +38,5 @@ void function NorthstarCodeCallback_GenerateGameState() {
gs.timeEnd = expect float(level.nv.roundEndTime - Time())
else
gs.timeEnd = expect float(level.nv.gameEndTime - Time())

NSPushGameStateData(gs)
}
return gs
}
20 changes: 12 additions & 8 deletions Northstar.Client/mod/scripts/vscripts/presence/ui_presence.nut
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
untyped
globalize_all_functions

void function NorthstarCodeCallback_GenerateUIPresence() {
UIPresenceStruct uis
UIPresenceStruct function DiscordRPC_GenerateUIPresence( UIPresenceStruct uis )
{
if ( uiGlobal.isLoading )
uis.gameState = eDiscordGameState.LOADING;
else if ( uiGlobal.loadedLevel == "" )
uis.gameState = eDiscordGameState.MAINMENU;
else if ( IsLobby() || uiGlobal.loadedLevel == "mp_lobby" )
uis.gameState = eDiscordGameState.LOBBY;
else
uis.gameState = eDiscordGameState.INGAME;

uis.isLoading = uiGlobal.isLoading
uis.isLobby = IsLobby()
uis.loadingLevel = uiGlobal.loadingLevel
uis.loadedLevel = uiGlobal.loadedLevel
NSPushUIPresence(uis)
}
return uis
}
117 changes: 117 additions & 0 deletions Northstar.Client/mod/scripts/vscripts/ui/menu_ns_moddownload.nut
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
global function DownloadMod
global function DisplayModDownloadErrorDialog

global enum eModInstallStatus
{
DOWNLOADING,
CHECKSUMING,
EXTRACTING,
DONE,
FAILED,
FAILED_READING_ARCHIVE,
FAILED_WRITING_TO_DISK,
MOD_FETCHING_FAILED,
MOD_CORRUPTED,
NO_DISK_SPACE_AVAILABLE,
NOT_FOUND
}

const int MB = 1024*1000;

bool function DownloadMod( RequiredModInfo mod )
{
// Downloading mod UI
DialogData dialogData
dialogData.header = Localize( "#DOWNLOADING_MOD_TITLE" )
dialogData.message = Localize( "#DOWNLOADING_MOD_TEXT", mod.name, mod.version )
dialogData.showSpinner = true;

// Prevent user from closing dialog
dialogData.forceChoice = true;
OpenDialog( dialogData )

// Save reference to UI elements, to update their content
var menu = GetMenu( "Dialog" )
var header = Hud_GetChild( menu, "DialogHeader" )
var body = GetSingleElementByClassname( menu, "DialogMessageClass" )

// Start actual mod downloading
NSDownloadMod( mod.name, mod.version )

ModInstallState state = NSGetModInstallState()
while ( state.status < eModInstallStatus.DONE )
{
state = NSGetModInstallState()
UpdateModDownloadDialog( mod, state, menu, header, body )
WaitFrame()
}

printt( "Mod status:", state.status )

// Close loading dialog
CloseActiveMenu()

return state.status == eModInstallStatus.DONE
}

void function UpdateModDownloadDialog( RequiredModInfo mod, ModInstallState state, var menu, var header, var body )
{
switch ( state.status )
{
case eModInstallStatus.DOWNLOADING:
Hud_SetText( header, Localize( "#DOWNLOADING_MOD_TITLE_W_PROGRESS", string( state.ratio ) ) )
Hud_SetText( body, Localize( "#DOWNLOADING_MOD_TEXT_W_PROGRESS", mod.name, mod.version, floor( state.progress / MB ), floor( state.total / MB ) ) )
break
case eModInstallStatus.CHECKSUMING:
Hud_SetText( header, Localize( "#CHECKSUMING_TITLE" ) )
Hud_SetText( body, Localize( "#CHECKSUMING_TEXT", mod.name, mod.version ) )
break
case eModInstallStatus.EXTRACTING:
Hud_SetText( header, Localize( "#EXTRACTING_MOD_TITLE", string( state.ratio ) ) )
Hud_SetText( body, Localize( "#EXTRACTING_MOD_TEXT", mod.name, mod.version, floor( state.progress / MB ), floor( state.total / MB ) ) )
break
default:
break
}
}

void function DisplayModDownloadErrorDialog( string modName )
{
ModInstallState state = NSGetModInstallState()

DialogData dialogData
dialogData.header = Localize( "#FAILED_DOWNLOADING", modName )
dialogData.image = $"ui/menu/common/dialog_error"

switch ( state.status )
{
case eModInstallStatus.FAILED_READING_ARCHIVE:
dialogData.message = Localize( "#FAILED_READING_ARCHIVE" )
break
case eModInstallStatus.FAILED_WRITING_TO_DISK:
dialogData.message = Localize( "#FAILED_WRITING_TO_DISK" )
break
case eModInstallStatus.MOD_FETCHING_FAILED:
dialogData.message = Localize( "#MOD_FETCHING_FAILED" )
break
case eModInstallStatus.MOD_CORRUPTED:
dialogData.message = Localize( "#MOD_CORRUPTED" )
break
case eModInstallStatus.NO_DISK_SPACE_AVAILABLE:
dialogData.message = Localize( "#NO_DISK_SPACE_AVAILABLE" )
break
case eModInstallStatus.NOT_FOUND:
dialogData.message = Localize( "#NOT_FOUND" )
break
case eModInstallStatus.FAILED:
default:
dialogData.message = Localize( "#MOD_FETCHING_FAILED_GENERAL" )
break
}

AddDialogButton( dialogData, "#DISMISS" )
AddDialogFooter( dialogData, "#A_BUTTON_SELECT" )
AddDialogFooter( dialogData, "#B_BUTTON_DISMISS_RUI" )

OpenDialog( dialogData )
}
Loading

0 comments on commit c50a9a3

Please sign in to comment.