From 8292d309177df7d193f59ad452c41228175a12b4 Mon Sep 17 00:00:00 2001 From: Herwin Bozet Date: Wed, 30 Sep 2026 22:41:50 +0200 Subject: [PATCH] Update Server.pb, Object.pbi, kidney.ini, and 3 more files --- core/server/Server.pb | 52 +++++++++++++++++++++++-- core/server/test/Object.pbi | 65 +++++++++++++++++++++++++++++++- defs/items/kidney.ini | 5 +-- defs/reagents/carbon.ini | 7 ++-- defs/reagents/carbon_dioxide.ini | 7 ++-- defs/reagents/oxygen.ini | 9 ++--- 6 files changed, 125 insertions(+), 20 deletions(-) diff --git a/core/server/Server.pb b/core/server/Server.pb index 02006fc..96e76fd 100644 --- a/core/server/Server.pb +++ b/core/server/Server.pb @@ -2,19 +2,65 @@ ;- Compiler Directives EnableExplicit - -XIncludeFile "../Commons/HashMap/HashMap.pbi" +;XIncludeFile "../Commons/HashMap/HashMap.pbi" +XIncludeFile "./test/Object.pbi" +#DefsFolder = "C:\Users\Herwin\Desktop\Projects\Yass13" +;- Tests + +; Parses every definition file in the given folder, returns #False if any of them failed. +Procedure.b Test_ParseDefsFolder(Folder.s) + Protected Directory.i + Protected FilePath.s + Protected *Object.YassObject + Protected Success.b = #True + + Directory = ExamineDirectory(#PB_Any, Folder, "*.ini") + If Not Directory + PrintN("FAIL: Can't examine folder: " + Folder) + ProcedureReturn #False + EndIf + + While NextDirectoryEntry(Directory) + If DirectoryEntryType(Directory) <> #PB_DirectoryEntry_File + Continue + EndIf + + FilePath = Folder + DirectoryEntryName(Directory) + *Object = FromDefinitionFile(FilePath) + + If *Object = #Null + PrintN("FAIL: " + FilePath) + Success = #False + Else + PrintN("OK: " + FilePath + " -> '" + *Object\Id + "' (" + *Object\Type + ")") + FreeYassObject(*Object) + EndIf + Wend + + FinishDirectory(Directory) + ProcedureReturn Success +EndProcedure + + +;- Entry Point + If Not OpenConsole("YASS13") DebuggerError("Failed to open console !") End 1 EndIf +Define TestsPassed.b = #True +If Not Test_ParseDefsFolder(#DefsFolder + "\defs\items\") : TestsPassed = #False : EndIf +If Not Test_ParseDefsFolder(#DefsFolder + "\defs\reagents\") : TestsPassed = #False : EndIf - +If Not TestsPassed + DebuggerError("Definition parsing tests failed !") + End 1 +EndIf Debug "Done :)" diff --git a/core/server/test/Object.pbi b/core/server/test/Object.pbi index 3ae66ba..940315f 100644 --- a/core/server/test/Object.pbi +++ b/core/server/test/Object.pbi @@ -1,9 +1,72 @@ +XIncludeFile "../../Commons/HashMap/HashMap.pbi" + Structure YassObject - id.s + Id.s + Type.s EndStructure +Macro YassObjectPtr : i : EndMacro +; Returns the raw value with its surrounding double quotes removed. +Procedure.s UnquoteValue(Value.s) + ProcedureReturn Trim(Trim(Value), #DQUOTE$) +EndProcedure + +Procedure FreeYassObject(*Object.YassObject) + FreeStructure(*Object) +EndProcedure + +; Returns a newly allocated YassObject, or #Null if the file can't be opened or lacks core values. +; The caller owns the returned object and must free it with FreeYassObject(). +Procedure.YassObjectPtr FromDefinitionFile(DefFilePath.s) + Protected *Object.YassObject + + ; 1. Load Ini + If Not OpenPreferences(DefFilePath) + Debug "Failed to open definition file: " + DefFilePath + ProcedureReturn #Null + EndIf + + ; 2. Read "Object" group + If Not PreferenceGroup("Object") + Debug "Missing [Object] group in: " + DefFilePath + ClosePreferences() + ProcedureReturn #Null + EndIf + + ; 3. Read core values + *Object = AllocateStructure(YassObject) + *Object\Id = UnquoteValue(ReadPreferenceString("id", "")) + *Object\Type = UnquoteValue(ReadPreferenceString("type", "")) + + If *Object\Id = "" Or *Object\Type = "" + Debug "Missing 'id' or 'type' in: " + DefFilePath + FreeYassObject(*Object) + ClosePreferences() + ProcedureReturn #Null + EndIf + + ; 4. For each other group, iterate + ExaminePreferenceGroups() + While NextPreferenceGroup() + If PreferenceGroupName() = "Object" + Continue + EndIf + + ; 4.1 For each value, Debug it + ExaminePreferenceKeys() + While NextPreferenceKey() + If Left(PreferenceKeyName(), 1) = "#" + Continue + EndIf + Debug PreferenceKeyName() + " = " + UnquoteValue(PreferenceKeyValue()) + Wend + Wend + + ClosePreferences() + ProcedureReturn *Object +EndProcedure diff --git a/defs/items/kidney.ini b/defs/items/kidney.ini index 86c01f8..90015c4 100644 --- a/defs/items/kidney.ini +++ b/defs/items/kidney.ini @@ -1,7 +1,6 @@ -[Item] +[Object] id="organ_kidney" - -traits[] = "organ;edible" +type="item" # Trait for organ [Trait.Organ] diff --git a/defs/reagents/carbon.ini b/defs/reagents/carbon.ini index 3a78875..1204e18 100644 --- a/defs/reagents/carbon.ini +++ b/defs/reagents/carbon.ini @@ -1,10 +1,9 @@ -[Reagent] +[Object] id="carbon" - -traits[] = "chemical" +type="reagent" -[Trait.Chemical] +[Trait.Chem] # As kelvins # Sublimes at 1 atm, so melting = boiling melting = 3915 diff --git a/defs/reagents/carbon_dioxide.ini b/defs/reagents/carbon_dioxide.ini index b334ed8..e09f729 100644 --- a/defs/reagents/carbon_dioxide.ini +++ b/defs/reagents/carbon_dioxide.ini @@ -1,10 +1,9 @@ -[Reagent] +[Object] id="carbon_dioxide" - -traits[] = "chemical" +type="reagent" -[Trait.Chemical] +[Trait.Chem] # As kelvins # Sublimes at 1 atm, so melting = boiling melting = 194.65 diff --git a/defs/reagents/oxygen.ini b/defs/reagents/oxygen.ini index 1ab0d89..1e82a5f 100644 --- a/defs/reagents/oxygen.ini +++ b/defs/reagents/oxygen.ini @@ -1,10 +1,9 @@ -[Reagent] +[Object] id="oxygen" - -traits[] = "chemical;oxydizer" +type="reagent" -[Trait.Chemical] +[Trait.Chem] # As kelvins melting = 54.36 @@ -15,6 +14,6 @@ boiling = 90.188 density = 1.429 -[Trait.Oxydizer] +[Trait.ChemOxydizer] # Keep as-is, I'll implement later idk = 1.0