Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Categories

Dark Dreams of Furiae - a new module for NWN:EE! Buy now
Attention, new and old users! Please read the new rules of conduct for the forums, and we hope you enjoy your stay!

Faiths and Powers: Gods of the Realms (Kitpack and divine caster/spell tweaks)

134689123

Comments

  • [Deleted User][Deleted User] Posts: 0
    edited September 2015
    The user and all related content has been deleted.

    Post edited by [Deleted User] on
    SereverusGrammarsaladBrer_Rabbit
  • GrammarsaladGrammarsalad Member Posts: 2,523

    Update: I have it working but it takes forever and a day to install. Every spell in every sphere causes this to run:

    COPY_EXISTING_REGEXP GLOB ~.*\.spl~ ~override~
    LPF CLONE_EFFECT match_resource = EVAL ~%spell_res%~ resource = EVAL ~d5_%spell_num%~ END
    BUT_ONLY
    So, loop through ~1500 spells and check every effect in every extended header, and do that ~250 times, that's 375,000 iterations... hang on, the installer has been running the entire time I've been typing this, and it's not done yet. I'll update the post when it finishes.

    EDIT - 20 minutes and the installer is still chugging away...
    @subtledoctor

    I am not familiar with that command, but can you use READ to limit it to just priest spells?

    Man, I'm going to regret posting this without testing, but what about something like:
    COPY_EXISTING_REGEXP GLOB ~.*\.spl~ ~override~
    READ_SHORT ~0x1c~ ~type~ //If I have my READ correct, should read the spell type
    PATCH_IF (~%type%~ = ~2~) BEGIN //Only patch prest spells
    LPF CLONE_EFFECT match_resource = EVAL ~%spell_res%~ resource = EVAL ~d5_%spell_num%~ END
    //May need an additional END...
    BUT_ONLY

  • The user and all related content has been deleted.

  • kjeronkjeron Member Posts: 2,162
    @subtledoctor
    I am not familiar with "CLONE_EFFECT", but my understanding from your post on g3 relevant to this:

    You find the spell you want through SPELL.IDS, copy and rename it using your prefix (d5_XXX), and then modify it as desired now or later.
    You then want to search through every spell in the game, check each of their effects for an immunity/removal opcode (206/318/321/324) that matches the original spells resource, and duplicate that effect with your spells resource.

    Is that correct? I think I could help if your still having issues.

  • [Deleted User][Deleted User] Posts: 0
    edited September 2015
    The user and all related content has been deleted.

  • GrammarsaladGrammarsalad Member Posts: 2,523
    Okay, I see the issue...

    Well, there has to be a way of narrowing it down

  • GrammarsaladGrammarsalad Member Posts: 2,523
    edited September 2015
    I'll look through them this weekend to see what spells with these effects g have in common

    Edit: thinking about this, that could be a nightmare! It's not just a 'protection from thing...'

  • kjeronkjeron Member Posts: 2,162
    @subtledoctor

    2e), or 3) Check every spell in the game that uses opcodes 206/318/321/324 to refer to one of the spells in our array, and duplicate the effect so as to also refer to our new copies of the original spell.
    Everything works great except for the italicized bit. Right now I have it as 2e) - it has to check every spell in our array, and step 2 is already iterating through those spells, so it's a convenient place to do it. But, it takes forever. (It can also miss some spells, as it turns out.)

    Now I'm thinking, since we have a nice predictable formula for renaming our spell copies (RES --> prefix + NUM), the process can be un-linked from step 2, and it will still be dependable. So I can make it step 3: Run through REGEXP GLOB ~.*\.spl~ a single time (instead of 400 times), check for opcodes 206/318/321/324, and make a duplicate effect, running the renaming formula on the .spl resource in each such effect.

    It should work fine, and should be orders of magnitude faster. But actually setting it down in Weidu seems to be very tricky. If you have any suggestions, feel free to post here or over at G3, or PM me in either forum.

    Here is what I tried, note it is only set up to copy the priest spells, and I am sure there is a better way to derive the spells number than what I did. Using the entire IWDEE priest spell list as [list], it takes about 4 seconds to run through on my laptop:

    ACTION_FOR_EACH spell_label IN [list] BEGIN
    OUTER_SPRINT $label(~%spell_label%~) ~1~
    END
    COPY_EXISTING ~SPELL.IDS~ ~override~ COUNT_2DA_ROWS 2 row_cnt
    FOR(cur_row = 0; cur_row < row_cnt; ++cur_row) BEGIN
    READ_2DA_ENTRY cur_row 1 2 spell_id
    READ_2DA_ENTRY cur_row 0 2 ~spell_num~
    PATCH_IF (VARIABLE_IS_SET $label(~%spell_id%~)) BEGIN
    convert = ~%spell_num%~
    convert += 9998000
    TEXT_SPRINT spell_num ~%convert%~
    INNER_PATCH_SAVE spell_res ~%spell_num%~ BEGIN REPLACE_TEXTUALLY EXACT_MATCH ~9999~ ~SPPR~ END
    INNER_PATCH_SAVE spell_num ~%spell_num%~ BEGIN REPLACE_TEXTUALLY EXACT_MATCH ~9999~ ~~ END
    INNER_ACTION BEGIN
    OUTER_SPRINT $old_spell(~%spell_num%~) ~%spell_res%~
    COPY_EXISTING ~%spell_res%.spl~ ~override/d5_%spell_num%.spl~
    END
    END
    END
    BUT_ONLY
    COPY_EXISTING_REGEXP GLOB ~.*\.spl~ ~override~
    READ_LONG 0x64 ab_off
    READ_SHORT 0x68 ab_num
    READ_LONG 0x6a fx_off
    FOR (i = 0; i < ab_num; ++i) BEGIN fx_add = 0
    READ_SHORT (ab_off + i * 0x28 + 0x1e) fx_num
    READ_SHORT (ab_off + i * 0x28 + 0x20) fx_idx
    FOR (k = 0; k < fx_num; ++k) BEGIN
    READ_SHORT (fx_off + (fx_idx + k) * 0x30) opcode
    PATCH_IF ((opcode = 206) OR (opcode = 318) OR (opcode = 321) OR (opcode = 324)) BEGIN
    READ_ASCII (fx_off + (fx_idx + k) * 0x30 + 0x14) resource
    SNPRINT 4 resource_class ~%resource%~
    PATCH_IF (~%resource_class%~ STRING_EQUAL_CASE ~SPPR~) BEGIN
    INNER_PATCH_SAVE old_spell_num ~%resource%~ BEGIN REPLACE_TEXTUALLY EXACT_MATCH ~SPPR~ ~~ END
    PATCH_IF(VARIABLE_IS_SET $old_spell(~%old_spell_num%~)) BEGIN
    READ_BYTE (fx_off + (fx_idx + k) * 0x30 + 0x2) target
    READ_BYTE (fx_off + (fx_idx + k) * 0x30 + 0x3) power
    READ_LONG (fx_off + (fx_idx + k) * 0x30 + 0x4) param1
    READ_LONG (fx_off + (fx_idx + k) * 0x30 + 0x8) param2
    READ_BYTE (fx_off + (fx_idx + k) * 0x30 + 0xc) timing
    READ_BYTE (fx_off + (fx_idx + k) * 0x30 + 0xd) resist
    READ_LONG (fx_off + (fx_idx + k) * 0x30 + 0xe) duration
    READ_BYTE (fx_off + (fx_idx + k) * 0x30 + 0x12) prob1
    READ_BYTE (fx_off + (fx_idx + k) * 0x30 + 0x13) prob2
    READ_LONG (fx_off + (fx_idx + k) * 0x30 + 0x1c) dicenum
    READ_LONG (fx_off + (fx_idx + k) * 0x30 + 0x20) dicetype
    READ_LONG (fx_off + (fx_idx + k) * 0x30 + 0x24) savetype
    READ_LONG (fx_off + (fx_idx + k) * 0x30 + 0x28) savebonus
    READ_LONG (fx_off + (fx_idx + k) * 0x30 + 0x2c) unknown
    INSERT_BYTES (fx_off + (fx_idx + k) * 0x30) 0x30
    WRITE_SHORT (fx_off + (fx_idx + k) * 0x30) opcode
    WRITE_BYTE (fx_off + (fx_idx + k) * 0x30 + 0x2) target
    WRITE_BYTE (fx_off + (fx_idx + k) * 0x30 + 0x3) power
    WRITE_LONG (fx_off + (fx_idx + k) * 0x30 + 0x4) param1
    WRITE_LONG (fx_off + (fx_idx + k) * 0x30 + 0x8) param2
    WRITE_BYTE (fx_off + (fx_idx + k) * 0x30 + 0xc) timing
    WRITE_BYTE (fx_off + (fx_idx + k) * 0x30 + 0xd) resist
    WRITE_LONG (fx_off + (fx_idx + k) * 0x30 + 0xe) duration
    WRITE_BYTE (fx_off + (fx_idx + k) * 0x30 + 0x12) prob1
    WRITE_BYTE (fx_off + (fx_idx + k) * 0x30 + 0x13) prob2
    WRITE_EVALUATED_ASCII (fx_off + (fx_idx + k) * 0x30 + 0x14) ~d5_%old_spell_num%~ #8 //resource
    WRITE_LONG (fx_off + (fx_idx + k) * 0x30 + 0x1c) dicenum
    WRITE_LONG (fx_off + (fx_idx + k) * 0x30 + 0x20) dicetype
    WRITE_LONG (fx_off + (fx_idx + k) * 0x30 + 0x24) savetype
    WRITE_LONG (fx_off + (fx_idx + k) * 0x30 + 0x28) savebonus
    WRITE_LONG (fx_off + (fx_idx + k) * 0x30 + 0x2c) unknown
    ++fx_add
    ++k

    END
    END
    END
    END
    fx_num += fx_add
    WRITE_SHORT (ab_off + i * 0x28 + 0x1e) fx_num
    FOR (j = i + 1; j < ab_num; j += 1) BEGIN
    READ_SHORT (ab_off + j * 0x28 + 0x20) fx_idx
    WRITE_SHORT (ab_off + j * 0x28 + 0x20) (fx_idx + fx_add)
    END
    END
    BUT_ONLY

    Any use?

  • Brer_RabbitBrer_Rabbit Member Posts: 159
    ... (looks for download link)

    (leaves disappointed and cries quietly to herself)

  • The user and all related content has been deleted.

    Brer_RabbitGrammarsalad
  • GrammarsaladGrammarsalad Member Posts: 2,523

    ... (looks for download link)

    (leaves disappointed and cries quietly to herself)

    The sphere system is a skeleton; it is almost finished and will be awesome (it's really fun in my tests when I see the huge variations between priests of Lathander/Helm/Talos and druids, and see that they all still have totally useful and powerful spellbooks) but it's just the backbone (or maybe, one of the thighbones) of this mod. The meat of the mod is in the kits, and creating dozens of kits is going to take a while. Look for a proper release sometime around this holiday season.
    It's definitely more than a thighbone

  • The user and all related content has been deleted.

    Brer_Rabbit
  • kjeronkjeron Member Posts: 2,162
    edited September 2015


    One thing I think I notice is that %spell_num% from the first section will have 4 digits (because the IDS number of e.g. CLERIC_BLESS is "1101") whereas it looks like %old_spell_num% from the later section will only have 3 digits (the spell res minus SPPR - thank you SNPRINT - so for Bless, just "101"). Is that right? I mean, easy enough to add the "1" - I just want to know if I'm reading the code correctly.

    The number saved and checked for in the array is 3 digits.

    edit - after installing your mod, I see your question differently, my version assumes copies named d5_XXX, not d5_XXXX. I dropped the preceeding number thinking you were only interested in priest spells. - /edit

    Before saving it to the array, I took the 4 digit number(1101) in SPELL.IDS, added 999800 to it = 9999101, then textually replaced ~9999~ with ~(empty)~ = 101. A Wizard spell would replace ~10000~. SPELL.IDS should not have any spell number that high, as anything over 3999 has no meaning.
    I know there has to be a better way, but I just don't know how else to easily remove the preceeding 1 or 2, it probably can be done with regexp replacement, but I struggle with that.

    If you're going to be making copies of both priest and wizard spells, you would need to replace the $old_spell() with $old_prs_spell() and $old_wiz_spell() to differentiate them, as they would have the same 3 digit numbers

    Grammarsalad
  • The user and all related content has been deleted.

    Grammarsalad
  • GrammarsaladGrammarsalad Member Posts: 2,523
  • [Deleted User][Deleted User] Posts: 0
    edited September 2015
    The user and all related content has been deleted.

    Post edited by [Deleted User] on
  • KamigoroshiKamigoroshi Member Posts: 5,600
    edited September 2015
    Totemic Druid, if anything, would be right at home with the Shaman. Just call it something other than "Druid". Totemic Shaman, Spirit Whisperer or something along those lines might all work.

    Returning the Shapeshifter to its non-lycanthropic days would perhaps make more sense here. As this allows for other animal deities to be included into the mix as well.

    If possible, I don't like to see using sentient humanoid/giant races such as Trolls shapeshifting forms for druids. This would make as little sense as an "Elf", "Cyclope", or "Djinn" form. Better to instead focus only on animals, vermin, plants/myconids and possibly magical animals. My take would be something like this:


    - Forest Druid
    Any Neutral.
    Followers of Sylvanus, Chautea, Mielikki, Angharradh, Rillifane Rallathil, Baervan Wildwanderer, Sheela Peryroyl.
    Primary spheres: Plant/Animal.
    Shapeshifts: Ferret, Wolf, Deer, Bear.

    - Mountain Druid
    Any Neutral.
    Followers of Grumbar, Geb, Urdlen, Gwaeron Windstrom, Uthgar, Aerdrie Faenya.
    Primary spheres: Earth/Air.
    Shapeshifts: Hare, (Mountain) Lion, Bear, Cave Bear.

    - Arctic Druid
    Any Neutral.
    Followers of Auril, Ulutiu, Bahamut.
    Primary spheres: Cold/Animal
    Shapeshifts: Chicken (ptarmigans), Ice Wolf, Polar Bear. "Maybe" Yeti if they're considered primates.

    - Jungle Druid (Avenger)
    Any Neutral.
    Followers of Ubtao, Thard Harr.
    Primary spheres: Affliction/Plant.
    Shapeshifts: Cat, Giant Spider, Panther, Giant Snake, Ankheg.

    - Swamp Druid
    Any Neutral.
    Followers of Talona, Sebek.
    Primary spheres: Water/Affliction.
    Shapeshifts: Rat, Giant Spider, Giant Snake. Maybe Otyugh.

    - Plains Druid (was Shapeshifter).
    Any Neutral.
    Followers of Nobanion, Malar, Lurue, Selûne.
    Primary spheres: Animal/Light.
    Shapeshifts: Ferret, Wolf, Horse, Lion. Maybe Werewolf.

    - Gray Druid
    Any Neutral.
    Followers of Ghaunadaur, Moander, Callarduran Smoothhands, Dumathoin, Segojan Earthcaller, Shar.
    Primary Spheres: Earth/Deception. Or even better "Cavern" (earth with some funghi and darkness mixed in)
    Shapeshifts: Carrion Crawler, Giant Beetles, Myconid. Perhaps Hooked Horror.

    Post edited by Kamigoroshi on
    JuliusBorisov
  • [Deleted User][Deleted User] Posts: 0
    edited September 2015
    The user and all related content has been deleted.

    Post edited by [Deleted User] on
    Brer_RabbitJuliusBorisov
  • [Deleted User][Deleted User] Posts: 0
    edited September 2015
    The user and all related content has been deleted.

    Post edited by [Deleted User] on
    Brer_Rabbit
  • KamigoroshiKamigoroshi Member Posts: 5,600


    - Jungle Druid (Avenger)
    Any Neutral.
    Followers of Ubtao, Thard Harr.
    Primary spheres: Affliction/Plant.
    Shapeshifts: Cat, Giant Spider, Panther, Giant Snake, Ankheg.

    - Swamp Druid
    Any Neutral.
    Followers of Talona, Sebek.
    Primary spheres: Water/Affliction.
    Shapeshifts: Rat, Giant Spider, Giant Snake. Maybe Otyugh.

    After some more thinking, the Swamp and Jungle Druid appear to be tied too closely to one another. Perhaps it would be better to just broaden up its ecosystem by including marshes, bogs and fens as well. This would at the very least allow "true" freshwater deities to be accessible to druids. And make it more distinctive from the Jungle Druid in the process;

    - Jungle Druid
    Any Neutral.
    Followers of Ubtao, Talona, Thard Harr.
    Primary spheres: Affliction/Plant.
    Shapeshifts: Small Spider, Panther, Giant/Sword Spider, Wyvern (According to the Monstrous Manual, they're living in warm forests and jungles).

    - Wetland Druid
    Any Neutral.
    Followers of Eldath, Isis, Sebek.
    Primary spheres: Water/Life. (Water is life, no?)
    Shapeshifts: Water Vole (Rat), Wild Dog, Snake, Basilisk (given their crocodile-like features).
    HLA: Water Elemental (?)

    That branch, together with the Gray Druid, would from the looks of it not make it in the initial mod release. But that's ok. We have to save stuff for further updates after all. Thinking out loud now: I'd *love* to have a "Sea/Coastal Druid" here. But the lack of marine, semi-aquatic creatures makes this regretable an impossible task. :frowning:

    Brer_Rabbit
  • [Deleted User][Deleted User] Posts: 0
    edited October 2015
    The user and all related content has been deleted.

    Post edited by [Deleted User] on
    KamigoroshiGrammarsaladbrus
  • bob_vengbob_veng Member Posts: 2,299
    edited September 2015
  • KamigoroshiKamigoroshi Member Posts: 5,600

    I still need a 3rd shapeshift form for the desert/plains druid... leopard, hare, and ________. Any suggestions?

    If you're looking for something in-between the weak hare and powerful leopard, then how about the wild/war dog? This canid would thematically also fit the plains druid, given the African wild dog is native Sub-Saharan Africa. Other fitting plains animals could include the snake, basilisk, or even a painted cow (aurochs, bisons, ect.).

    Regarding the Mountain Druid's shapeshift; I just remembered that there's also the "Mountain Bear". Kind of looks like a dirty polar bear. And while I haven't looked at its stats now, it could fit this Druid branch better than the brown bear or cave bear. Just a thought.

    Brer_Rabbit
  • [Deleted User][Deleted User] Posts: 0
    edited September 2015
    The user and all related content has been deleted.

    Post edited by [Deleted User] on
  • KamigoroshiKamigoroshi Member Posts: 5,600
    edited September 2015
    image
    The mountain bear does indeed appear as a summoning through Summon Animal III. But if all bears have the same stats anyway, then we can just as well stay with the brown or cave bear for that druidic branch. At least they won't look like dirt. :p

    The basilisk is indeed a brutish reptilian monster with animal intelligence. One could say they are very similar to wyverns in that regard. Only that they are not related to dragons (with the exeption of dracolisks). In D&D there's also a basilisk variant with a poison gaze that could be adopted for this shapeshift. If petrification is deemed as too powerful, that is.

    JuliusBorisov
  • bob_vengbob_veng Member Posts: 2,299
    in ad&d, the explanation for how the gaze works for example is pretty naturalistic:

    Dragon #81
    "Precisely how the creatureís gaze works is
    a mystery; most learned observers agree
    that the creatureís eyes emit a radiation that
    if absorbed by the eyes of other creatures ó
    or even itself, if its gaze is reflected back
    upon it ó causes an inexplicable chemical
    change in the bloodstream, altering living
    flesh to stone. "

    more natural sounding stuff:

    "Like other reptilian creatures, basilisks
    are cold-blooded. They derive much of their
    energy from the heat of the sun, and spend
    much time sunning themselves on rocks or
    heights to gather this heat. (They will also
    often creep up to campfires at night for the
    same reason.) But unlike most reptiles,
    basilisks can tolerate a fairly wide range of
    temperature, and can also store heat effi-
    ciently in their coiled digestive organs;"

    JuliusBorisov
  • [Deleted User][Deleted User] Posts: 0
    edited September 2015
    The user and all related content has been deleted.

    Post edited by [Deleted User] on
    Brer_Rabbit
  • GrammarsaladGrammarsalad Member Posts: 2,523
    Regarding aquatic/sea druids, does anybody know if there is any infinity engine game that has sufficient animations? We might be able to work something that requires extended animations if so...

    Also, apologies for the absence. I need to catch up on the posts here

  • KamigoroshiKamigoroshi Member Posts: 5,600
    edited September 2015

    While we're on the subjects of exotic shapeshifting and Hold abilities... I've been thinking about the Gray Druid (perhaps to be renamed "Cave Druid.") For shapeshifting I'm thinking maybe myconid, small spider, and Otyugh. Myconid actually seems a little weird, because it's a biped. But maybe as a special trait, due to its spongy body it would be resistant to crushing damage? It needs something special.

    Or maybe scrap myconid and use a different form, maybe an ooze or jelly. But I'm not sure I want to do that, since we'll likely have a proper Oozemaster in the Alienists category, which will be able to do this.

    Another question is, what would be a Gray/Cave Druid's spirit summon? I think it should be either a Spirit Snake, or we should make up a reason why that kit doesn't have one.

    Thoughts?

    Myconids are indeed sentient beings, not unlike treants. So I believe shriekers/gas spore funghi to be better alternatives for the Gray Druid. Weren't spiders already setteld for the Jungle Druid? I'm still thinking beetle and carrion crawler is the way to go here. The more unique from the surface druids, the better.

    As for oozes: the Gray Druid in AD&D can control oozes, puddings and molds in a similar fashion of how evil clerics can control undead. So some sort of amorphous shapeshift may fit in as well. On the other hand we already got the Alienist (Oozemaster). Having two kits with the same flavor might feel repetitive.

    How about a Spirit Boring Beetle? Or a Bonebat (they're in Siege of Dragonspear)? Sounds quite fun! In any case I believe we should go for a non-mammalian one here.

    Alternative names for the Gray Druid may include; Cavern Druid, Underdark Druid or Subterranean Druid. Anything's better than "Cave" imho. That one sounds too much like a caveman.

    Regarding aquatic/sea druids, does anybody know if there is any infinity engine game that has sufficient animations? We might be able to work something that requires extended animations if so...

    Other than that blurry Aboleth in a tank and the deformed clones in Irenicus' dungeon? None. Even the water elemental looks like a golem. And the marine fishes and that one whale in Whyrm's Tooth are part of the background art.

    Closests shapeshift forms for a Sea/Coastal Druid would probably be the polar bear (being maritime bears and all). Well, there's also the Nymph/Sirene and perhaps even the water elemental. Theoretically we could create a "Saltwater Scrag" (an ocean dwelling troll) shapeshift form. But, well, they're sentient giants of low intelligence. *shrugs*

    Brer_Rabbit
Sign In or Register to comment.