Jump to content

Lindor

Sacred Game Modder
  • Posts

    1,101
  • Joined

  • Last visited

  • Days Won

    37

Everything posted by Lindor

  1. It's a very powerful spell, but given that the alternative to the bronze mod, radius increase, I'd say that strength is definitely the better option. I've never tried it without the Strength mod, but with it will be able to debuff and protect from boss CAs. If it's a question about wether you want to spend a modification point at all, then the answer is yes, do it, not just the bronze but also the the silver and gold mods (Pentagram and Protection) are sooo worth it. They're the reason why this spell is so powerful.
  2. I think the helmet of insanity is a reference to Sacred: Underworld's Hood of Madness, one of the few non-weapon all-class-uniques. The only other one I can remember is the amulet you get for the Bounty-Hunter quest, which is a secret (and rather boring) questline without logbook entries. I think it was called "Medal of Honor" or "Star of Ancaria" or something like that. Ah, so much nostalgia
  3. Don't judge too quickly. The intention was not to find the location of the picture I think. She posted the picture to illustrate where Libi's Pratfall does NOT look ike in her memory, as indicated by the red markers.
  4. Ancient Magic is a missing must have imho. Depends on your gear. Theoretically you could gather gear with high amount of gold slots and stack lots of Dawargons Circlets and enjoy your 100% Damage immunity. Also Expulse Magic is good enouth to replace spell resistance. Just that the latter is less.. stressfull. But good news is you don't need to worry about damage. Your Glacias Thorns, if modded correctly, is so OP it will melt everything even without %LL. And you did mod it correctly. It's not gonna be perfect, but it's gonna work. I'd still swap Riding and Enhanced Perception for Ancient Magic and Spell Resistance. Shield Lore falls into the category of overated skills for me.
  5. 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.
  6. 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.
  7. 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
  8. That's exactly my point. I don't know this for sure. Someone needs to test it with all the different game versions.
  9. 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.
  10. 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".
  11. 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
  12. 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
  13. 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
  14. It was human error on my end, it's also present in EE 3.2A. Thx for clarification
  15. @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?
  16. 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
  17. 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
  18. 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
  19. 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)
  20. 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
  21. 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.
  22. The function "onInitWorldobjects" uses "FTYPE_MAGICLIGHT" multiple times while it should be "FXTYPE_MAGICLIGHT". Spelling mistake.
  23. 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?
  24. 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
×
×
  • Create New...
Please Sign In or Sign Up