-
Posts
1,097 -
Joined
-
Last visited
-
Days Won
37
Content Type
Profiles
Forums
Downloads
Calendar
Everything posted by Lindor
-
Damage Lore - and underutilized skills in general
Lindor replied to idbeholdME's topic in Sacred 2 General Discussion
The Wiki Damage Lore page is not very informative about Damage Lore on spell damage based combat arts. All that I know is that it doesn't affect built-in DoT. But I don't know wether and if, then how much it affects spell damage based triggered DoTs. Only thing that is general consens is that spell damage can trigger DoTs, but honestly I'm not even sure about that. Would be interesting to know whether it's worth it or not for a spellcaster hero. Another underrated skill for me is Combat Discipline, although one shouldn't go for that if one attempts to build a character around "chance to halve regen time", because that doesn't work with combos. Definitely something that would be worth fixing if only one got the skills to read and speak Assembly like Dmitriy, Combat Discipline does a huge amount of work on your DPS when mastered. It especially synergizes well with the higher speed cap from EEs balance.txt. Warding Energy Lore is also pretty good not because of the shieldstrength but because of the "block warding energy +x" bonus. Flat damage absorption which synergizes extremely well with percentage damage absorption from toughness. Overrated Skills however are also existent. Any skills which have to do with Attack Value/Defense Value like Combat Reflexes, e.g. Because of a typo in the source code (I think it was a "+" instead of a "="), Attack Value and Defense Value both don't do anything in the hit chance formula calculation. Only level difference matters afaik. Dmitriy fixes that in the Addendum. Don't know wether he fixed it for PFP as well. -
questscripts.txt bundle
Lindor replied to Lindor's topic in Sacred 2 Downloads - Builds, Blank Characters, Items, more!
This shouldn't be the final version; there will hopefully be future updates if I find the time. Unfortunately it seems to be impossible to debug these scripts ingame. I can only check for syntax errors using the standard lua interpreter, but this doesn't detect semantic errors or typos like this, or by doing it manually, but this is time consuming and risky as humans make mistakes. Currently I know that I have to further develop and debug the code prettifyer which is doable. It's on my to-do-list for this weekend. However at some point you just have to trust it and go with it, even if you know there are bad or even possibly game crashing mistakes. The community will report them so we can backtrace and correct. That's how it works. The script is simply too massive to ensure complete safety. As for your report: thanks, things like these are super important information for me. I expected there to be errors which I couldn't find. Please continue reporting any mistakes you find. And maybe I can calm you a little bit: Line 148 is pretty early in the script which means the mistake is human error since I formatted all the early functions myself and not by machine. That you found one right at the beginning is not an indicator about the mistake density. If you found one late in the file which wasn't there before so it got introduced by machine, that would be an indicator for a higher mistake density and it's even more important to find those errors so I can backtrace it in my prettifyer's code to see what went wrong. -
On future versions could you maybe cross-reference on the file you ultimately decided to use? I don't want everything from the file, just the changes you made, so I have to compare your file with the original to get only your translations. Or alternatively, if there was a file with just your changes, that would also be nice
-
Thx <3
-
questscripts.txt bundle
Lindor replied to Lindor's topic in Sacred 2 Downloads - Builds, Blank Characters, Items, more!
That's exactly my point. I don't know this for sure. Someone needs to test it with all the different game versions. -
Much appreciated. With your permission I'd like to integrate your work in my mod. I've been working on it for years now and it won't be finished any time soon, but the day it gets released you would get mentioned in the "thanks to" section.
-
questscripts.txt bundle
Lindor replied to Lindor's topic in Sacred 2 Downloads - Builds, Blank Characters, Items, more!
The data comes directly out of the dlls, can't remember which EE version it was. Look at "questscripts.txt stuff/FXTYPTES". The first entry is "FTYPE_MAGICLIGHT". -
Version 1.0.0
25 downloads
Contains: lua script formatting tool + source code for each Addendum, Dark mod and Sacred 2 EE 3.2A: questscripts sorted into different folders/files to increase overview and moddability all scripts formatted and beautified all known questscripts.txt bugfixes merging tool to merge all scripts into a single questscripts.txt pre-merged questscripts.txt The security of no syntax errors being present due to it being tested with the standard lua interpreter merging tool source code source code README.txt with detailed description of the tools overall README.txt with detailed description of the files (Dmitriy if you consider using it then you should read this) detailed description: @dimitrius154 @Flix -
questscripts.txt bundle View File Contains: lua script formatting tool + source code for each Addendum, Dark mod and Sacred 2 EE 3.2A: questscripts sorted into different folders/files to increase overview and moddability all scripts formatted and beautified all known questscripts.txt bugfixes merging tool to merge all scripts into a single questscripts.txt pre-merged questscripts.txt The security of no syntax errors being present due to it being tested with the standard lua interpreter merging tool source code source code README.txt with detailed description of the tools overall README.txt with detailed description of the files (Dmitriy if you consider using it then you should read this) detailed description: @dimitrius154 @Flix Submitter Lindor Submitted 06/10/2023 Category Ice & Blood Patches and Mods
-
There is another questscripts.txt fix: One superfluous comma is breaking the syntax. Correction: do quest.setScript(2122, "OnDeath", function(args) local lizards = { {tcid = 6411, alive = true, behaviour = "Enemy_hunter"}, {tcid = 6413, alive = true, behaviour = "Enemy_warrior_kicknrush"}, {tcid = 6414, alive = true, behaviour = "Enemy_mage_phalanx"}, {tcid = 6415, alive = true, behaviour = "Enemy_mage_phalanx"}, {tcid = 6417, alive = true, behaviour = "Enemy_warrior_brave_ex"}, {tcid = 6418, alive = true, behaviour = "Enemy_warrior_brave_ex"}, {tcid = 6419, alive = true, behaviour = "Enemy_warrior_brave_ex"} } for I, lizard in ipair(lizards) do if args.tcid == lizard.tcid then do lizard.alive = false end do changeCreature({tcid = lizard.tcid, behaviour = "JOB_QUESTSTAGING", emotion = "ANIM_TYPE_SM20", mortality = "IMMORTAL", loopCount = - 1}) end end end if args.tcid == 6360 then for I, lizard in ipairs(lizards) do if lizard.alive == false then do changeCreature({tcid = lizard.tcid, behaviour = "JOB_QUESTSTAGING", emotion = "ANIM_TYPE_IDLE", loopCount = 1}) end do changeCreature({tcid = lizard.tcid, behaviour = lizard.behaviour, delay = 3}) end end end end end) end Previously, it would say "do lizard.alive = false,". The comma was breaking the syntax. I don't know wether this syntax bug was present prior to my prettification or not, but it would surprise me if it wasn't. EDIT: Actually the same issue exists for quest 2123
-
It was human error on my end, it's also present in EE 3.2A. Thx for clarification
-
@dimitrius154 @Flix These are the cutscene functions being present in EE 3.2A: function cutscene_DM(args) function cutscene_DR_bad(args) function cutscene_DR_good(args) function cutscene_HE_bad(args) function cutscene_IN_bad(args) function cutscene_SE_good(args) function cutscene_SW(args) function cutscene_TG_bad(args) function cutscene_TG_good(args) It seems like there are three missing, one for DM, HE and SW each. It also seems like you added one of the missing functions in Addendum / Dark mod: function cutscene_HE_good(args) Do you two have more insights on them? Why are the missing functions not present? What are the consequences of adding cutscene_HE_good? Why are good and bad mixed into one function for DM / SW?
-
I have written my own lua code beautifier now and so far the results are promising. Can probably upload a fully formatted questscripts.txt in 2 weeks. Important functions formatting done by hand, actual questscripts formatting done by machine
-
The same issue exists for "_AREA_CENTER_LIZARD_2". Fix: function _AREA_CENTER_LIZARD_2(wpos) local AreaCreatures = { { Tag = 1, CID = 1047, Behaviour = "JOB_RICH_STATIST", Faction = 32, Equipment = 34 }, { Tag = 1, CID = 1473, Behaviour = "JOB_RICH_STATIST", Faction = 32, Equipment = 34 }, { Tag = 1, CID = 1474, Behaviour = "JOB_RICH_STATIST", Faction = 32, Equipment = 34 }, { Tag = 1, CID = 1475, Behaviour = "JOB_RICH_STATIST", Faction = 32, Equipment = 34 }, { Tag = 1, CID = 1476, Behaviour = "JOB_RICH_STATIST", Faction = 32, Equipment = 34 }, { Tag = 1, CID = 1477, Behaviour = "JOB_RICH_STATIST", Faction = 32, Equipment = 34 }, { Tag = 1, CID = 1827, Behaviour = "JOB_RICH_STATIST", Faction = 32, Equipment = 34 }, { Tag = 1, CID = 1828, Behaviour = "JOB_RICH_STATIST", Faction = 32, Equipment = 34 }, { Tag = 1, CID = 1829, Behaviour = "JOB_RICH_STATIST", Faction = 32, Equipment = 34 }, { Tag = 1, CID = 1830, Behaviour = "JOB_RICH_STATIST", Faction = 32, Equipment = 34 }, { Tag = 1, CID = 1831, Behaviour = "JOB_RICH_STATIST", Faction = 32, Equipment = 34 }, { Tag = 1, CID = 1832, Behaviour = "JOB_RICH_STATIST", Faction = 32, Equipment = 34 }, { Tag = 3, CID = 1105, Behaviour = "JOB_POOR_STATIST", Faction = 32, Equipment = 33 }, { Tag = 3, CID = 1161, Behaviour = "JOB_POOR_STATIST", Faction = 32, Equipment = 33 }, { Tag = 3, CID = 1162, Behaviour = "JOB_POOR_STATIST", Faction = 32, Equipment = 33 }, { Tag = 3, CID = 1106, Behaviour = "JOB_POOR_STATIST", Faction = 32, Equipment = 33 }, { Tag = 3, CID = 1163, Behaviour = "JOB_POOR_STATIST", Faction = 32, Equipment = 33 }, { Tag = 3, CID = 1164, Behaviour = "JOB_POOR_STATIST", Faction = 32, Equipment = 33 } } local points, numPoints = getSpawnPoints({position = wpos, radius = 400}) local creatures = getn(AreaCreatures) if points then for id, object in ipairs(points) do local randomnumber = math.floor(math.random(1, creatures)) do spawnCreature({ behaviour = AreaCreatures[randomnumber].Behaviour, creature_id = AreaCreatures[randomnumber].CID, faction_id = AreaCreatures[randomnumber].Faction, equipset_id = AreaCreatures[randomnumber].Equipment, mortality = 0, position = object }) end end end end
-
There's a big bug in the "_AREA_CENTER_HUMANS_CAPITAL" function. Originally it would spawn two creatures per spawn point. Here's the fix: function _AREA_CENTER_HUMANS_CAPITAL(wpos) local AreaCreatures = { { Tag = 1, CID = 316, Behaviour = "JOB_RICH_STATIST", Faction = 12, Equipment = 34 }, { Tag = 1, CID = 325, Behaviour = "JOB_RICH_STATIST", Faction = 12, Equipment = 34 }, { Tag = 1, CID = 318, Behaviour = "JOB_RICH_STATIST", Faction = 12, Equipment = 34 }, { Tag = 1, CID = 1072, Behaviour = "JOB_RICH_STATIST", Faction = 12, Equipment = 34 }, { Tag = 1, CID = 327, Behaviour = "JOB_RICH_STATIST", Faction = 12, Equipment = 34 }, { Tag = 1, CID = 994, Behaviour = "JOB_RICH_STATIST", Faction = 12, Equipment = 34 }, { Tag = 1, CID = 995, Behaviour = "JOB_RICH_STATIST", Faction = 12, Equipment = 34 }, { Tag = 1, CID = 1043, Behaviour = "JOB_RICH_STATIST", Faction = 12, Equipment = 34 }, { Tag = 2, CID = 321, Behaviour = "JOB_KID", Faction = 12, Equipment = 43 }, { Tag = 2, CID = 736, Behaviour = "JOB_KID", Faction = 12, Equipment = 43 }, { Tag = 2, CID = 691, Behaviour = "JOB_KID", Faction = 12, Equipment = 43 }, { Tag = 2, CID = 692, Behaviour = "JOB_KID", Faction = 12, Equipment = 43 }, { Tag = 2, CID = 966, Behaviour = "JOB_KID", Faction = 12, Equipment = 43 }, { Tag = 2, CID = 329, Behaviour = "JOB_KID", Faction = 12, Equipment = 43 }, { Tag = 2, CID = 963, Behaviour = "JOB_KID", Faction = 12, Equipment = 43 }, { Tag = 2, CID = 578, Behaviour = "JOB_KID", Faction = 12, Equipment = 43 }, { Tag = 2, CID = 965, Behaviour = "JOB_KID", Faction = 12, Equipment = 43 }, { Tag = 2, CID = 323, Behaviour = "JOB_KID", Faction = 12, Equipment = 43 }, { Tag = 2, CID = 331, Behaviour = "JOB_KID", Faction = 12, Equipment = 43 }, { Tag = 2, CID = 712, Behaviour = "JOB_KID", Faction = 12, Equipment = 43 }, { Tag = 3, CID = 574, Behaviour = "JOB_POOR_STATIST", Faction = 12, Equipment = 33 }, { Tag = 3, CID = 575, Behaviour = "JOB_POOR_STATIST", Faction = 12, Equipment = 33 }, { Tag = 3, CID = 576, Behaviour = "JOB_POOR_STATIST", Faction = 12, Equipment = 33 }, { Tag = 3, CID = 320, Behaviour = "JOB_POOR_STATIST", Faction = 12, Equipment = 33 }, { Tag = 3, CID = 322, Behaviour = "JOB_POOR_STATIST", Faction = 12, Equipment = 33 }, { Tag = 3, CID = 997, Behaviour = "JOB_POOR_STATIST", Faction = 12, Equipment = 33 }, { Tag = 3, CID = 998, Behaviour = "JOB_POOR_STATIST", Faction = 12, Equipment = 33 }, { Tag = 3, CID = 999, Behaviour = "JOB_POOR_STATIST", Faction = 12, Equipment = 33 }, { Tag = 3, CID = 1000, Behaviour = "JOB_POOR_STATIST", Faction = 12, Equipment = 33 }, { Tag = 3, CID = 1001, Behaviour = "JOB_POOR_STATIST", Faction = 12, Equipment = 33 }, { Tag = 3, CID = 330, Behaviour = "JOB_POOR_STATIST", Faction = 12, Equipment = 33 }, { Tag = 3, CID = 324, Behaviour = "JOB_POOR_STATIST", Faction = 12, Equipment = 33 }, { Tag = 3, CID = 983, Behaviour = "JOB_POOR_STATIST", Faction = 12, Equipment = 33 }, { Tag = 3, CID = 984, Behaviour = "JOB_POOR_STATIST", Faction = 12, Equipment = 33 }, { Tag = 3, CID = 985, Behaviour = "JOB_POOR_STATIST", Faction = 12, Equipment = 33 }, { Tag = 3, CID = 978, Behaviour = "JOB_POOR_STATIST", Faction = 12, Equipment = 33 }, { Tag = 3, CID = 332, Behaviour = "JOB_POOR_STATIST", Faction = 12, Equipment = 33 }, { Tag = 3, CID = 979, Behaviour = "JOB_POOR_STATIST", Faction = 12, Equipment = 33 }, { Tag = 3, CID = 980, Behaviour = "JOB_POOR_STATIST", Faction = 12, Equipment = 33 } } local points, numPoints = getSpawnPoints({position = wpos, radius = 500}) local creatures = getn(AreaCreatures) if points then for id, object in ipairs(points) do local randomnumber = math.floor(math.random(1, creatures)) do spawnCreature({ behaviour = AreaCreatures[randomnumber].Behaviour, creature_id = AreaCreatures[randomnumber].CID, faction_id = AreaCreatures[randomnumber].Faction, equipset_id = AreaCreatures[randomnumber].Equipment, mortality = 0, position = object }) end end end end
-
As can be seen here, the spelling mistake also exists in the dll files. I don't kow wether to use FTYPE or FXTYPE. Maybe none of those work due to the spelling mistake and other FX need to be applied instead or maybe both work and it doesn't matter. Needs to be tested (@Flix @idbeholdME @dimitrius154 someone wants to test? I can't dew it, my PC would potentially give false negatives due to it requiring minimum settings with PhysX disabled)
-
There's a major mistake in the "_AREA_CENTER_GHOSTVILLAGE" function. The way the "AreaCreatures" table was set up, the entries would overwrite each other and in the end there's basically just one areacreature left. Here's the correction: function _AREA_CENTER_GHOSTVILLAGE(wpos) local AreaCreatures = { { Tag = 2, CID = 1077, Behaviour = "JOB_KID", Faction = 12, Equipment = 43 }, { Tag = 2, CID = 1076, Behaviour = "JOB_KID", Faction = 12, Equipment = 43 }, { Tag = 3, CID = 1080, Behaviour = "JOB_POOR_STATIST", Faction = 12, Equipment = 33 }, { Tag = 3, CID = 1078, Behaviour = "JOB_POOR_STATIST", Faction = 12, Equipment = 33 }, { Tag = 3, CID = 1079, Behaviour = "JOB_POOR_STATIST", Faction = 12, Equipment = 33 }, { Tag = 3, CID = 1081, Behaviour = "JOB_POOR_STATIST", Faction = 12, Equipment = 33 } } local points, numPoints = getSpawnPoints({position = wpos, radius = 300}) local creatures = getn(AreaCreatures) if points then for id, object in ipairs(points) do local randomnumber = math.floor(math.random(1, creatures)) do spawnCreature({ behaviour = AreaCreatures[randomnumber].Behaviour, creature_id = AreaCreatures[randomnumber].CID, faction_id = AreaCreatures[randomnumber].Faction, equipset_id = AreaCreatures[randomnumber].Equipment, mortality = 0, position = object }) end end end end
-
Additional findings: the function "CM_FlushProtocol" doesn't seem to existin spite of being called by "CM_GarbageCollect"; either it's hardcoded or it's an unfinished idea the function "CM_ResolveQuestStates" doesn't do anything, looks like an unfinished idea the function "CM_Timed_OnPrecondsFulfilled" doesn't do anything, looks like an unfinished idea the function "CM_Timed_OnSetup" doesn't do anything, looks like an unfinished idea the function "CM_Timed_OnDeath" doesn't do anything, looks like an unfinished idea the function "CM_Timed_OnWon" doesn't do anything, looks like an unfinished idea the function "CM_Timed_OnLost" doesn't do anything, looks like an unfinished idea The CM patch scripts look like the very unfinished attempt to transform the questscripts.txt in a more overviewable state by scripting general functions for patterns within questsstages and then just calling the same functions over and over again. But as I said, it looks very unfinished. Next up I'll work on an overview of all hardcoded and non-hardcoded functions and variables.
-
The function "onInitWorldobjects" uses "FTYPE_MAGICLIGHT" multiple times while it should be "FXTYPE_MAGICLIGHT". Spelling mistake.
-
questID functions calling "getQuestState" via table quest name 339 scorpion "M_DE_1h_B_rr-DEB5b" 667 enterValley, enterDamm "M_OR_1i_B_nn-ORB6b" 712 oldDragon, oldDragonBack "M_DR_1k_G_rr-DRG6" 730 oldDragon, oldDragonBack "M_DR_1k_B_nn-DRB6a" 1287 showWaterfall "M_HE_1_nn-Startquest All" 1540 showWaterfall "M_OR_1g_G_nn-ORG5_Shaman-Ritual" 1570 enterDarkVillage "S_HU_3c_rr-Das Geisterdorf VT" 1559 showWaterfall "S_HE_1_N_db-Startquest Multiplayer All" 1622 scorpion "M_DE_1k_G_nn-DEG5" 3327 golemOben, golemUnten "S_HU_1_N_nn-Golem_Portal_DONOTDELETE" 3347 oldDragon, oldDragonBack, scorpion "S_DR_1_N_nn-Dragon Teleport - Free Play - DO NOT DELETE" 3714 Lichinsel "S_BI_3a_nn-Der verschollene General" 3782 Eisdungeon "S_BI_5_N_JT - Auf der Spur V" These are all the quests with table calls. For every ther call of the "getQuestState" function, the id is used directly as a parameter. Except showWaterfall, all functions are hero teleporting functions. Are there any bells ringing? Known bugs for these quests? Maybe similarities?
-
Except the Mungo beans which didn't smell good anymore, the entirety of the ingredients are in there! Incredible how much that reduced while cooking, even all the Napa cabbage I love cooking with coconut milk and sesame oil. The sesame oil I bought was stretched with soja oil, but still: it was very delicious
-
? For me it looks like they match? I found many more examples where the getQuestState function is called with an int as parameter. Actually it seems like the call with a table as a parameter is the exception and not vice versa. I still don't know if one of those routines is a bug. If the table call is a bug, then a couple of main quest scripts are a little bit broken, like the teleporting scripts at the Octagolamus valley. But ingame they seem to work well, so I think that the function can be called both ways, I'm just not 100% sure.
-
Usually the hardcoded "getQuestState" function is called like this: getQuestState({id = 3650}) But for the functions "blutsee" and "blutgrotte" it's called like this: getQuestState(3650) getQuestState(3649) I don't know wether it's a bug or not, but I think so. These are questscripts for some blood forest quests I think. Any known bugs for these quests?
-
would be interesting to know which teleporter this fixes. any ideas? EDIT: I think it's a teleporter in the blood forest which teleports your hero to sector BB-30
-
The "Platte8G" exists twice EDIT: I'm convinced that the second "Platte8G" was an accidental spelling mistake, it should be named "Platte8H" instead. Doesn't matter which one you rename, they both do the same. This should fix a broken teleporter somewhere.