Cmushi Posted October 26, 2024 Posted October 26, 2024 If Obsidian expands on the lore surronding the Apotheosis project, they better name the head npc Noqn for your amazing contribution and dedication. 3 1
beatspores Posted January 26 Posted January 26 Will there be a Mac version too? I don't know nearly enough about programming to know if this is at all a logical question, but I figured I could ask since you have made both Linux and Windows already. 1
Noqn Posted January 26 Author Posted January 26 (edited) 5 hours ago, beatspores said: Will there be a Mac version too? I don't know nearly enough about programming to know if this is at all a logical question, but I figured I could ask since you have made both Linux and Windows already. I got asked this a while ago elsewhere but never got a response back, I'll copy paste what I wrote back then: _________________ Apotheosis needs to extract some game files that I'm not certain are available in the Mac version. You could help me by verifying whether they exist and if so where they are located! Two Unity asset files (required for extracting icons) on Windows and Linux these are located at .../PillarsOfEternityII_Data/assetbundles/gui.unity3d .../PillarsOfEternityII_Data/sharedassets2.assets The "exported" and "lax*_exported" game data folders. On Windows and Linux these are located at .../PillarsOfEternityII_Data/exported/ .../PillarsOfEternityII_Data/lax1_exported/ .../PillarsOfEternityII_Data/lax2_exported/ ... Thanks! Another issue is GTK 3, the GUI framework I'm using. The GTK libraries are preinstalled on pretty much every Linux distribution and I'm bundling the windows libraries with the windows version of Apotheosis. But just as a heads up I think Mac users would have to install GTK 3 on their own to be able to run Apotheosis. Edited January 26 by Noqn
beatspores Posted January 28 Posted January 28 On 1/26/2025 at 2:54 PM, Noqn said: I got asked this a while ago elsewhere but never got a response back, I'll copy paste what I wrote back then: ... I shot you a PM! 1
Manart Posted February 17 Posted February 17 On 1/26/2025 at 9:54 PM, Noqn said: I got asked this a while ago elsewhere but never got a response back, I'll copy paste what I wrote back then: _________________ Apotheosis needs to extract some game files that I'm not certain are available in the Mac version. You could help me by verifying whether they exist and if so where they are located! Two Unity asset files (required for extracting icons) on Windows and Linux these are located at .../PillarsOfEternityII_Data/assetbundles/gui.unity3d .../PillarsOfEternityII_Data/sharedassets2.assets The "exported" and "lax*_exported" game data folders. On Windows and Linux these are located at .../PillarsOfEternityII_Data/exported/ .../PillarsOfEternityII_Data/lax1_exported/ .../PillarsOfEternityII_Data/lax2_exported/ ... Thanks! Another issue is GTK 3, the GUI framework I'm using. The GTK libraries are preinstalled on pretty much every Linux distribution and I'm bundling the windows libraries with the windows version of Apotheosis. But just as a heads up I think Mac users would have to install GTK 3 on their own to be able to run Apotheosis. Wait wait, can you guys give this newbie a step-by-step instruction on how you managed to run this amazing program on Mac? I've been just running it on my PC and then play the game on my Mac haha. 1
Noqn Posted February 17 Author Posted February 17 1 hour ago, Manart said: Wait wait, can you guys give this newbie a step-by-step instruction on how you managed to run this amazing program on Mac? I've been just running it on my PC and then play the game on my Mac haha. There's a Mac release available now and I think I've made the correct code changes support Mac, but I've got no way of testing the app myself so just to be clear... no clue if it actually works Mac download links can be found here: https://gitlab.com/noqn/apotheosis#download--run (Be sure to confirm whether your mac is arm or x64 and select the appropriate download) In addition, on Mac you also have to download GTK 3 (the gui toolkit I've used for Apotheosis) yourself. First, install https://brew.sh/, then you can simply run the following commands: brew install gtk+3 brew install gtksourceview4 brew install adwaita-icon-theme After that, Apotheosis should theoretically be able to run, but again I really have no clue whether it will work at all. Please let me know how it goes 1
Manart Posted February 23 Posted February 23 Uhm, this, apparently. (I may be dumb, will check on it again tomorrow.) 1
Lexx Posted February 24 Posted February 24 I don't want to make a new thread for it, and this one seems to be the most active, so I'll just ask here... Is it possible to add new armor / weapon models to the game? Was wondering if it'd be feasible to add the unique weapons from Avowed into Deadfire. 1 "only when you no-life you can exist forever, because what does not live cannot die."
Noqn Posted February 26 Author Posted February 26 On 2/24/2025 at 7:51 PM, Lexx said: I don't want to make a new thread for it, and this one seems to be the most active, so I'll just ask here... Is it possible to add new armor / weapon models to the game? Was wondering if it'd be feasible to add the unique weapons from Avowed into Deadfire. Check this thread out: There's at least one mod that adds a new armor model to the game: https://www.nexusmods.com/pillarsofeternity2/mods/373 1
Noqn Posted February 26 Author Posted February 26 On 2/23/2025 at 5:50 PM, Manart said: Uhm, this, apparently. (I may be dumb, will check on it again tomorrow.) Ah... Shame it didn't work out of the box... I'll see if I can find a way to debug the mac build somehow and figure out what's wrong. Sorry for the false hope
Adonis Jorge Silva Santos Posted February 28 Posted February 28 I have one doubt, is it possible to change enchantment descriptions with apotheosis? I modded the Eccea but only the stats changed, the enchantment description remained (the elemental ones, the Bullet ones changed) 1
Noqn Posted February 28 Author Posted February 28 3 hours ago, Adonis Jorge Silva Santos said: I have one doubt, is it possible to change enchantment descriptions with apotheosis? I modded the Eccea but only the stats changed, the enchantment description remained (the elemental ones, the Bullet ones changed) Yep! If you go to the StatusEffect you can edit the OverrideDescriptionString text by pressing the pen icon: 2
lalolalo9 Posted Sunday at 12:48 AM Posted Sunday at 12:48 AM Hey Noqn Thanks alot for Apotheosis, you cannot imagine how grateful I am About the user scripts! It works, I made a simple script to make all unique items craftable. If you are interested in the code it looks something like this. int count = 0; string[] debugnames = { "" } ; string[] debugnamesID = { "" } ; // Creates a new recipe category called uniques if (TryCreateGameData<RecipeCategory>("Lalolalo9_Unique_Crafting", out var Lalolalo9_Unique_CraftingCat)) { if (Lalolalo9_Unique_CraftingCat.TryGetComponent(out RecipeCategoryComponent rcc)) { var stringindex = rcc.DisplayName.AppendStringTableEntry("Uniques"); rcc.DisplayName = stringindex; } } else { // If the catergory already exist assing Lalolalo9_Unique_CraftingCat var to it. if(TryGetGameData<RecipeCategory>("Lalolalo9_Unique_Crafting", out Lalolalo9_Unique_CraftingCat)) { } } // Starts adding all unique to a new list because creating new gamedataobjects while looping through it throws errors foreach (var equipitemGDO in GameData.OfType<EquippableGameData>()) { // If the item does not have an itemcomponent return if (!TryGetGameData(equipitemGDO.DebugName, out _, out ItemComponent itemC)) { return; } // Check the name of the item, if its empty chnaces are it does not exist in game // Tip adding a + "" converts most objects in the game to string especially useful if working with enumerators like FilterTypes in Itemcomponent var itemdisplayname = itemC.DisplayName.GetStringTableText() + ""; // We only want unique items and not quest related and items with names that are not empty if (itemC.IsUnique == true && (itemC.FilterType + "") != "Quest" && (itemC.DisplayName.GetStringTableText() + "") != "") { // Recipe order in crafitn GUI are not alfabethic or anything, I found out that they are sorted according to when each items was made. // This step makes the debugnames uniform and when we will sort it the items will be grouped nicely in crafting window if (equipitemGDO.TryGetComponent(out EquippableComponent EquipCDOPreSorted)) { // counting how many items are eligible count = count + 1; // preparation to assing correct debugnames so the lsit is nicely sorted string filtertype = itemC.FilterType + "a"; string DebugNameToAdd = "Default"; string EquipTypeSubstituted = (EquipCDOPreSorted.EquipmentType + "").Replace("SmallShield","ShieldS").Replace("MediumShield","ShieldM").Replace("LargeShield","ShieldL"); if(EquipCDOPreSorted.EquipmentType != 0) { DebugNameToAdd = filtertype.FirstOrDefault() + "" + EquipTypeSubstituted + "_" + equipitemGDO.DebugName; } else { DebugNameToAdd = filtertype.FirstOrDefault() + "" + EquipCDOPreSorted.EquipmentSlot + "_" + equipitemGDO.DebugName; } // Adding items to the array debugnames = debugnames.Concat(new string[] { DebugNameToAdd }).ToArray(); debugnamesID = debugnamesID.Concat(new string[] { equipitemGDO.DebugName }).ToArray(); } } } // Sorts the list of debugnames based on the new debugnames Array.Sort(debugnames, debugnamesID); // Now we are making the RecipeData items for (int i = 1; i < count ; i++) { // We check if the item can be created, if it exist which I doubt this will run if (TryCreateGameData<RecipeData>("LalRecipe"+debugnames[i], out var createdRecipe)) { // We want the recipe component so we can modify it if (createdRecipe.TryGetComponent(out RecipeComponent recipeComponent)) { // We want the item which we are adding a recipe to // Actually all these step may be put together and using try create gamedata as the latest would be best to prevent any unneccesary objects created if (TryGetGameData<ItemGameData>(debugnamesID[i], out var itemde)) { // Adding the item to the output list of our recipe component RecipeProduct itemtoAdd = RecipeProduct.Default with { ItemID = itemde.ID}; recipeComponent.Output = recipeComponent.Output.Add(itemtoAdd); // Here we need the name again of our string so we can assign it as the recipe name in our overview if (itemde.TryGetComponent(out EquippableComponent EquipCDO)) { if (itemde.TryGetComponent(out ItemComponent itemCDO)) { string NameToAdd = "Default"; // Some replacement to make in game a little bit more readable string EquipTypeSubstitutedGUI = (EquipCDO.EquipmentType + "").Replace("SmallShield","ShieldS").Replace("MediumShield","ShieldM").Replace("LargeShield","ShieldL"); string EquipSlotSubstitutedGUI = (EquipCDO.EquipmentSlot + "").Replace("GrimoireOrTrinket","GrimTrin").Replace("RingAnyHand","Ring"); if(EquipCDO.EquipmentType != 0) { NameToAdd = EquipTypeSubstitutedGUI + " " + itemCDO.DisplayName.GetStringTableText(); } else { NameToAdd = EquipSlotSubstitutedGUI + " " + itemCDO.DisplayName.GetStringTableText(); } // Assigning the name to the recipe component var stringindex = recipeComponent.DisplayName.AppendStringTableEntry(NameToAdd); recipeComponent.DisplayName = stringindex; } } } // Setting the category and cost recipeComponent.Category = Lalolalo9_Unique_CraftingCat.ID; recipeComponent.Cost = 100; } } } Please forgive the main newbie mistakes but hey if it works it works About the AI conditionals, its still a work in progess to create all those conditions because it needs alot of testing. However a another great idea came to mind. I would like to add some random encounters in Deadfire but I fear, I need to edit the Worldmap scene to that, and so far did not have any luck. But once I know how, I will make a randomized beast spawner using Userscripts to make some challenges during adventure. Something like the scripted interaction where you aim at the orlan during your trip, but instead when travelling on island there is a certain chance you will be ambushed by something. I think that sounds fun to make combat more rewarding. But still in the initial stages. Just wanted to shout out and say thanks alot for Apotheosis!! Sincerely Lalolalo9 2
lalolalo9 Posted Sunday at 09:05 AM Posted Sunday at 09:05 AM Actually ModScriptHook was the key. So what I did was make a ModScripthook that calls a GlobalScript after 2 hours. This GlobalScripthoook will then call itself every 2 hours. It will check what the player is doing on the world map (walking) and if thee player hast been ambushed at night yet it will trigger an encounter, if he has been ambushed, then it will wait until daytime to reset the globalvalue, it works quite well actually. Now only thing left is to generate those random encounter and put in an nice mix of mobs in these encounters. How I'll find out Code snippet CallGlobalScriptAfterTimePasses(Lalolalo9RandomEncounter, 0, 1, 10, 0, True) if { IsWorldMapTransitMode(Walking) and IsGlobalValue(Lalolalo9_ambushedToday, EqualTo, 0) and IsCurrentlyNighttime() } then LaunchRandomEncounter(RE_Lalolalo9Repeatable_encounter) if { IsGlobalValue(Lalolalo9_ambushedToday, NotEqualTo, 0) and IsCurrentlyDaytime() } then SetGlobalValue(Lalolalo9_ambushedToday, 0) 2
Kvellen Posted Sunday at 07:52 PM Posted Sunday at 07:52 PM (edited) Hey noqn, could I make a request for a chatter editor as future addition? Meant to ask about it in the past but always stopped short of typing up a request for it. What with interest in voice modding being a real niche within a niche. And the need to expend the capabilities of an existing voice being a niche within that niche. But mainly because honestly .chatterbundle file structures are a pretty weird layout amongst the other node based data types. I wouldn't even be able to describe how the layout for that should look! But I thought it couldn't hurt to ask. 14 hours ago, lalolalo9 said: Actually ModScriptHook was the key. So what I did was make a ModScripthook that calls a GlobalScript after 2 hours. This GlobalScripthoook will then call itself every 2 hours. It will check what the player is doing on the world map (walking) and if thee player hast been ambushed at night yet it will trigger an encounter, if he has been ambushed, then it will wait until daytime to reset the globalvalue, it works quite well actually. Now only thing left is to generate those random encounter and put in an nice mix of mobs in these encounters. How I'll find out As much as the idea of looping scripts scare me, that's actually a really good solution! Edited Sunday at 11:18 PM by Kvellen 1
brokensave Posted 8 hours ago Posted 8 hours ago I can't get past this stage of setup it just hangs there indefintly and becomes unresponsive too so I can't cancel it after clicking ok. Any ideas on why this is happening or how to fix?
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now