Skip to content

Suggestions Thread: Miscellaneous (Minor uncategorized tweaks and changes)

1911131415

Comments

  • SelpheaSelphea Member Posts: 23
    Just a couple minor UI bugfix requests.

    First is when Hasted and casting a spell that can target others on yourself, then casting a spell that targets self while the first spell is casting, the second spell won't register. For example, cast Mage Armor first then Shield while Mage Armor is casting, for some reason Shield won't register. On the other hand Mage Armor, Flame Weapon then Shield works.

    Second is when changing areas while buffs are fading, the entire line of status icons will disappear. If this has to do with the game trying to apply transparency to icons that have 0 transparency when transitioning, I'm OK with having a 5-4-3-2-1 countdown overlay on the buff icons rather than fading them in and out repeatedly.
  • QlippothQlippoth Member Posts: 8
    If the player character dies with less than -10 HP, and they are holding a two handed weapon, the PC body, while laying down, will shoulder their equipped weapon on their shoulder. This animation should not play if the PC is laying on the ground and dead (or bleeding).
  • AnatoliAnatoli Member Posts: 4
    This is propably suggested already but:

    Creature Resize glow: Resized creatures have always (since 1.69(?) when the option came out) had the original creature's glow on them. I'm sure most of the old players know this issue
    shadguy
  • PlokPlok Member Posts: 106
    edited April 2018
    Can we please, please have some tools for making dealing with large amounts of nwscript code more manageable/modular/extensible?

    As far as I'm aware, nwscript has the following datatypes:
    • Scalars (int, float, string)
    • Handles (objects, events)
    • Structs (vector, location, user defined)
    ...and the following methods of breaking up the program:
    • Functions (cannot be passed as values, cannot be used across files except via #include)
    • Scripts/Actions (.nss file with a main() function, cannot return a value, see ExecuteScript)
    We could really do with a few more things to make large collections of scripts more modular and maintainable. There's three things I can think of that would certainly make my life a lot easier: Arrays, dynamic linking and functions as values (lamdas).

    Arrays have already been mentioned on the first page but, holy cow would arrays give us a lot. Currently, we sort of have arrays via 2da files. However the problem with 2da files is that you can only ever override them, never extend them. If we have arrays, we have the ability to have dynamic data. Arrays + Structs practically gives us a type system.

    Dynamic linking of includes, so that #including a .nss file doesn't just copy and paste it into the .nss file you're compiling. This would let you call functions across .nss files and maintain libraries seperately from your haks/scripts. You could even use it to do a bit of modularity by creating stub functions that are overriden by another hak pack. This would let you break things apart into multiple, optional haks.

    Make functions into a value-type (lamdas). Look at Lisp. We have that. We can use this to do functional programming (obviously), object oriented programming (add functions to structs to create methods), event-based programming and so many other things. It would also let us completely invert program control so that code we have no knowledge of can be integrated inside core functionality with no modification.


    Let's put all this together, what can we do? Behold this monstrosity from the PRC include prc_inc_sneak_attack.nss (spoilered because it's horrible)
    
    int GetRogueSneak(object oPC)
    {
       object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC);
    
       int iClassLevel;
       int iRogueSneak = 0;
    
       // Rogue
       iClassLevel = GetLevelByClass(CLASS_TYPE_ROGUE, oPC);
       if (iClassLevel) iRogueSneak += (iClassLevel + 1) / 2;
    
       // Arcane Trickster (Epic)
       iClassLevel = GetLevelByClass(CLASS_TYPE_ARCTRICK, oPC);
       if (iClassLevel >= 12) iRogueSneak += (iClassLevel - 10) / 2;
    
       // Black Flame Zealot
       iClassLevel = GetLevelByClass(CLASS_TYPE_BFZ, oPC);
       if (iClassLevel) iRogueSneak += iClassLevel / 3;
    
       // Nightshade
       iClassLevel = GetLevelByClass(CLASS_TYPE_NIGHTSHADE, oPC);
       if (iClassLevel) iRogueSneak += iClassLevel / 3;
    
       //Ambush Attack
       if (GetHasFeat(FEAT_UR_SNEAKATK_3D6,oPC)) iRogueSneak += 3;
    
       // Outlaw Crimson Road
       //iClassLevel = GetLevelByClass(CLASS_TYPE_OUTLAW_CRIMSON_ROAD, oPC);
       //if (iClassLevel) iRogueSneak += (iClassLevel + 1) / 2;
    
       // Temple Raider
       //iClassLevel = GetLevelByClass(CLASS_TYPE_TEMPLE_RAIDER, oPC);
       //if (iClassLevel>= 2) iRogueSneak += (iClassLevel + 1) / 3;
    
       // Ghost-Faced Killer
       iClassLevel = GetLevelByClass(CLASS_TYPE_GHOST_FACED_KILLER, oPC);
       if (iClassLevel >= 2) iRogueSneak += ((iClassLevel + 1) / 3);
    
       // Ninja
       iClassLevel = GetLevelByClass(CLASS_TYPE_NINJA, oPC);
       if (iClassLevel) iRogueSneak += (iClassLevel + 1) / 2;
    
       // Slayer of Domiel
       iClassLevel = GetLevelByClass(CLASS_TYPE_SLAYER_OF_DOMIEL, oPC);
       if (iClassLevel) iRogueSneak += (iClassLevel + 1) / 2;
    
       // Skullclan Hunter
       iClassLevel = GetLevelByClass(CLASS_TYPE_SKULLCLAN_HUNTER, oPC);
       if (iClassLevel) iRogueSneak += iClassLevel / 3;
    
       // Shadowmind
       iClassLevel = GetLevelByClass(CLASS_TYPE_SHADOWMIND, oPC);
       if (iClassLevel) iRogueSneak += (iClassLevel + 1) / 2;
    
       //Psychic Rogue
       iClassLevel = GetLevelByClass(CLASS_TYPE_PSYROGUE, oPC);
       if (iClassLevel) iRogueSneak += (iClassLevel + 2) / 3;
    
       // Fist of Dal Quor
       iClassLevel = GetLevelByClass(CLASS_TYPE_FIST_DAL_QUOR, oPC);
       if (iClassLevel) iRogueSneak += (iClassLevel + 1) / 2;
    
       //Dragon Devotee and Hand of the Winged Masters
       int nBonusFeatDice = 0;
       int nCount;
       for(nCount = FEAT_SPECIAL_SNEAK_ATTACK_5D6; nCount >= FEAT_SPECIAL_SNEAK_ATTACK_1D6; nCount--)
       {
          if (GetHasFeat(nCount,oPC))
          {
             nBonusFeatDice = nCount - FEAT_SPECIAL_SNEAK_ATTACK_1D6 + 1;
             if (DEBUG) DoDebug("prc_inc_sneak: Bonus Sneak Dice: " + IntToString(nBonusFeatDice));
             break;
          }
       }
       
       //Kapak racial sneak attack
       if(GetHasFeat(FEAT_RACIAL_SNEAK_1D6)) iRogueSneak += 1;
       
       //Naztharune Rakshasa racial sneak attack
       if(GetHasFeat(FEAT_RACIAL_SNEAK_6D6)) iRogueSneak += 6;
       
       if(iRogueSneak > 0) //the feats only apply if you already have Sneak Attack
           iRogueSneak += nBonusFeatDice;
    
       if (GetBaseItemType(oWeapon) == BASE_ITEM_LONGBOW || GetBaseItemType(oWeapon) == BASE_ITEM_SHORTBOW)
       {
          // Peerless Archer
          iClassLevel = GetLevelByClass(CLASS_TYPE_PEERLESS, oPC);
          if (iClassLevel) iRogueSneak += (iClassLevel + 2) / 3;
    
          // Blood Archer
          iClassLevel = GetLevelByClass(CLASS_TYPE_BLARCHER, oPC);
          if ((iClassLevel >= 5) && (iClassLevel < 8)) iRogueSneak++;
          if ((iClassLevel >= 8) && (iClassLevel < 10)) iRogueSneak += 2;
          if (iClassLevel >= 10) iRogueSneak += 3;
    
          // Order of the Bow Initiate
          //iClassLevel = GetLevelByClass(CLASS_TYPE_ORDER_BOW_INITIATE, oPC);
       }
       if(GetBaseItemType(oWeapon) == BASE_ITEM_SLING)
       {
          // Halfling Warslinger
          iClassLevel = GetLevelByClass(CLASS_TYPE_HALFLING_WARSLINGER, oPC);
          if (iClassLevel) iRogueSneak += (iClassLevel + 1) / 2;
       }
    
       if (GetBaseItemType(oWeapon) == BASE_ITEM_WHIP)
       {
          // Lasher
          iClassLevel = GetLevelByClass(CLASS_TYPE_LASHER, oPC);
          if (iClassLevel > 0) iRogueSneak += ((iClassLevel - 1) / 4) + 1;
       }
       
       if (GetWeaponRanged(oWeapon))
       {
          // Bowman
          iClassLevel = GetLevelByClass(CLASS_TYPE_BOWMAN, oPC);
          if (iClassLevel > 0) iRogueSneak += ((iClassLevel) / 4) + 1;
       }
    
       //Justice of Weald and Woe
       iClassLevel = GetLevelByClass(CLASS_TYPE_JUSTICEWW, oPC);
       if(iClassLevel > 1) iRogueSneak++;
       if(iClassLevel > 6) iRogueSneak++;
    
       //Shadowblade
       iClassLevel = GetLevelByClass(CLASS_TYPE_SHADOWBLADE, oPC);
       if (iClassLevel) iRogueSneak += (iClassLevel + 1) / 2;
    
       if(GetHasSpellEffect(MOVE_SH_ASSASSINS_STANCE, oPC))
       {
           iRogueSneak += 2;
       }
    
       // -----------------------------------------------------------------------------------------
       // Future PRC's go here.  DO NOT ADD ROGUE/BLACKGUARD/ASSASSIN SNEAK ATTACKS AS CLASS FEATS.
       // Placeholder feats are fine, even encouraged.  Example: "Ranged Sneak Attack +1d6".
       // The feat should do nothing, just show that you have the bonus.
       // -----------------------------------------------------------------------------------------
    
       if (DEBUG) DoDebug("prc_inc_sneak: Rogue Sneak Dice: " + IntToString(iRogueSneak));
       return iRogueSneak;
    }

    Wow. That's more than a hundred lines of if spaghetti. Everytime someone wants to add some Sneak Attack dice and then recompile all the .nss files that depend on it (a lot). That's also only one of the functions in that file is more than 600 lines, it also handles things like Dragonfire Strike (change your sneak attack damage to energy damage defined by your draconic heritage). Let's see what we could do to that if we had the 3 things I suggested:

    //prc_inc_sneak_attack.nss struct PRC_ClassSneakAttack = { int class_id; int sneak_attack_start; int sneak_attack_levels_per_dice; function onSneakAttack; }; struct PRC_ClassSneakAttack[] sa_classes = []; //Here's some encapsulation to stop people directly editing the array this code depends on void registerSneakAttackClass(struct PRC_ClassSneakAttack class) { array_push(sa_classes, class); //Append class to the sa_classes array } //Arrays now let us stop having to edit massive #included functions just to //have sneak attack progression - anyone can register their own classes without //having to edit the PRC int getSneakAttackDice(object pc) { int sa_dice = 0; int len = array_length(sa_classes); int i = 0; int class_level; struct PRC_ClassSneakAttack class; for (i; i < len; i++){ class = sa_classes[i]; class_level = GetLevelByClass(pc, class.class_id); if (class_level >= class.sneak_attack_start){ sa_dice ++; sa_dice += level / (class.sneak_attack_levels_per_dice - class.sneak_attack_start); } } return sa_dice; } //Here's an example of an event/callback system //It lets us push control flow out to other scripts dynamically void onSneakAttack(object attacker, object target) { int len = array_length(sa_classes); int i = 0; struct PRC_ClassSneakAttack class; for (i; i < len; i++){ class = sa_classes[i]; if (GetLevelByClass(attacker, class.class_id)){ class.onSneakAttack(attacker, target); } } } //Here's an object constructor for some OOP //other files can now use this to easily create appropriate structs for the above. //The EMPTY_FUNCTION I've just put in to represent null/void/empty, it could //be a stub function that does nothing, it could be a null PRC_ClassSneakAttack newClassSneakAttack( int class_id, int sneak_attack_start = 1, int sneak_attack_levels_per_dice = 2, function on_sneak_attack = EMPTY_FUNCTION) { struct PRC_ClassSneakAttack obj; obj.class_id = class_id; obj.sneak_attack_start = sneak_attack_start; obj.sneak_attack_levels_per_dice = sneak_attack_levels_per_dice; obj.onSneakAttack = on_sneak_attack; return obj; } //In another file that registers a new class - note the default args in the constructor function above struct PRC_ClassSneakAttack prestige = newClassSneakAttack(CLASS_FOOBAR); registerSneakAttackClass(prestige);

    That replaces the whole 600 lines, is modular, extensible has a well defined type system and doesn't require anyone to edit that script to add new sneak attacking classes. If it's linked dynamically instead of just copied-and-pasted via #include it could be maintained seperately from anything that uses it and wouldn't have to live in the same hak file. Because it uses arrays of structs, there's no dependency on .2da files that can't be extended.

    I haven't even gone very far down refactoring this. If calling functions is cheap, I could to do things like create a sum helper functionto turn the getSneakAttackDice into something like:
    int getSneakAttackDice(object pc) { sum(sa_classes, getClassSneakAttackDice, pc); } void getClassSneakAttackDice(PRC_ClassSneakAttack class, object pc) { class_level = GetLevelByClass(pc, class.class_id); if (class_level >= class.sneak_attack_start){ sa_dice ++; sa_dice += class_level / (class.sneak_attack_levels_per_dice - class.sneak_attack_start); } return sa_dice; }
    Post edited by Plok on
    BehindflayerProont
  • mlkent22mlkent22 Member Posts: 41
    Could we get a save/load option for the visual tab in the toolset, it would make it much easier to make area lighting match other areas..
  • JuliusBorisovJuliusBorisov Member, Administrator, Moderator, Developer Posts: 22,714
    Plok said:

    Can we list spells in your spellbook in alphabetical order rather than in the order they were learned (or spells.2da order for clerics/druids/paladins/rangers)? It can be quite hard to find the spell you're after at present.

    https://trello.com/c/CoXu1q2b/184-list-spells-in-your-spellbook-in-alphabetical-order-rather-than-in-the-order-they-were-learned
    Proont
  • Savant1974Savant1974 Member Posts: 303
    Hi, not sure if this has been mentioned, but NWN has always had an issue with henchmen being recognised in a conversation (is Tomi present? Then use *this* dialogue branch), yet the henchie can still be out of range to actually join in, causing the conversation to break. Can we get those two distances to match please?
    Proont
  • GearsOfMadnessGearsOfMadness Member Posts: 4
    https://forums.beamdog.com/discussion/comment/928712/#Comment_928712

    This was touched upon the post linked above and the couple replies following.

    The idea of currency is one I think could be expanded upon. I agree on the issue of repricing items/etc. Though I think the best way to accomplish this would be to add a toggle in the NwN.ini option for the server itself, which toggled a GUI icon and counter to appear in the inventory based on up to 4 or so currency types.

    Then have the names of the currency based on a 2da line that could be edited by a builder, by adjusting the tlk call entry.

    Then default the currency types to the standard copper/silver/gold/platinum of D&D, so that non-hak servers could still use the system by toggling on the NwN.ini if the host opted in.

    This would let servers stay the standard gold only option. Though if the server wanted to expand upon currency, they could do so and become 1, 2, 3, or 4 typed. Personal choice to balance the prices then. As well if they used haks, they could rename their currency to whatever.
    Proont
  • PlokPlok Member Posts: 106
    edited April 2018
    Just want to reiterate Arrays. I need them so badly.

    Please give me something I can iterate over; arrays, lists, ordered hashtables, linked lists, anything! I'll even take pointer arithmetic! If I can iterate over a list of structs (and populate it dynamically - 2das don't cut it) I can make the cleanest, simplest, most powerful scripts the world has ever seen.

    Arrrrrrraaaaayyyyyssss. My precious. ;)
  • ProlericProleric Member Posts: 1,269
    @Plok NWScript already supports pseudo-arrays of integers, strings, objects and locations, though true arrays of structs would be nice.
  • PlokPlok Member Posts: 106
    @Proleic Did not know that. Did some googling and found SetLocalArrayString. I really should have thought of that; using the whole Set/GetLocal hashtable thing and adding a number to the key.

    Still want arrays of structs though. I can't actually see much of a use for structs without arrays besides preventing function argument bloat (if you have a dozen arguments you've forgotten some ;)).
  • ProlericProleric Member Posts: 1,269
    @Plok Agreed. You can fake array of structs by creating a set of pseudo-arrays (e.g. Player(*).sName, Player(*).nPortrait, Player(*).lLocation) but it's a bit tedious.

    As it stands, another use for structs is to return multiple values from a function.
  • JuliusBorisovJuliusBorisov Member, Administrator, Moderator, Developer Posts: 22,714

    Hi, not sure if this has been mentioned, but NWN has always had an issue with henchmen being recognised in a conversation (is Tomi present? Then use *this* dialogue branch), yet the henchie can still be out of range to actually join in, causing the conversation to break. Can we get those two distances to match please?

    @Savant1974 Can you file this as a bug first? Let's see what the QA thinks about it.
  • BrabeumBrabeum Member Posts: 11
    We can purchase the game directly from you and get a Steam key so we can play it on Steam. Let us do the opposite.

    I bought the basic game from Steam only because I didn't know I could buy it directly from you. I would much rather buy the bonus content and all future content directly from you, and I would much rather launch the game with your launcher than be forced to run Steam in the background while I play and be forced to update by Steam whenever you release an update before I can play again.
  • JuliusBorisovJuliusBorisov Member, Administrator, Moderator, Developer Posts: 22,714
    edited April 2018
    @Brabeum Unfortunately, it's not possible. About Steam and a "forced update" - just copy and paste your game folder and run it from the .exe file - this way you'll always be able to run exactly the version you want (be it 8166, 8167, 8168 etc) - despite your Steam Client will update the game.
  • BrabeumBrabeum Member Posts: 11
    edited April 2018
    @JuliusBorisov Thanks I'll give that a shot. Will Steam still have to be running?

    And since this has primarily to do with you, here is my next suggestion:

    Make your job a lot easier and lock or just abandon the Steam forums. Post some stickies there, cross post update patch notes to the wall, link some magazine articles to their hub, but funnel the good players here and leave the toxic people behind.

    It has been a month, and I commend you for all the work you do here and there, but Steam forums have their own special breed of toxicity due to Steam's own moderators rarely if ever taking any action, and most developers leave those forums to the trolls eventually due to the headaches. So don't give yourself one.

    The first thread I read there implied I could get the same game for half the price and I got trolled into going to GoGs website and nearly bought the diamond edition. Thankfully while trying to figure out the difference I saw the "what is enhanced" post stickied on there, which is why I purchased the EE instead, but had those forums funneled me here I would have bought the game here.

    I'd also have not spent much of the last month playing on PWs I didn't really like until I saw you tell people asking for a PW subforum there to come here. Minutes later I found a good one here that isn't advertised on Steam and have been having even more fun playing ever since.

    Anyways, that is my experience. Keep up the good work and try not to let all those haters get you down.


    JuliusBorisov
  • JuliusBorisovJuliusBorisov Member, Administrator, Moderator, Developer Posts: 22,714
    No problem, @Brabeum . Don't let yourself become too sad because of what you see there.

    "Will Steam still have to be running?" - no. You copy the game folder to another place and run it from the .exe - it won't have anything to do with the Steam Client (as the game is DRM). MP (or servers) should work fine as the game will still use the same NWN folder in Documents.
    Telariusricoyung
  • BrabeumBrabeum Member Posts: 11
    edited April 2018
    Actually any content needed for PWs, like CEP, downloaded through the steam workshop and placed in the steam workshop folder will also have to be copied to the relevant folders in documents. But thanks to some workshop items being set up incorrectly, and a month of hunting for, and/or unpacking required hak/tlk/etc. files for all the PWs I have been trying to the right places, I picked up exactly the skills and experience I needed to troubleshoot and solve this minor issue and I am up and running and already playing in my current favorite PW now without Steam running in the background.

    I can already tell the game is running better as a result, so again thank you, @JuliusBorisov I am truly grateful, you made my week.

    Which brings me to my third suggestion. Those of us with older systems, cheap laptops, and/or have a slow or wifi internet connection are not interested in a graphics overhaul because then we wouldn't be able to play, or at least would have to reduce some of the settings back to where they are now to be able to do so.

    So please include a "classic graphics" video option for us if you do revamp everything to take advantage of some of the newer graphic card features, so that those of us that don't have them and/or have slower internet connections can keep playing if possible.
    JuliusBorisovProont
  • dTddTd Member Posts: 182
    I'd also like to suggest one of the huge draws to nwn in general is it's ability to run on old hardware. Please keep that in mind when talking about moving to 64bit. I have many machines quite capable of running servers which are all 32bit only. How many servers are online now on 32bit machines, I bet most of them. I'm not a luddite, I do like progress and I realize the benefit of going 64bit, but can't both architectures be supported? I was a bit taken aback when I found that the beamdog linux client was 64bit only, which forced me to get it on my linux box through steam. I'd have much rather used the beamdog client.
    ricoyung
  • perfidiousperfidious Member Posts: 2
    When chat logging is enabled, please make it so the game automatically saves the logs in dated formats instead of always overwriting "nwclientLog1.txt" repeatedly.
    ricoyung
  • Lord_SullivanLord_Sullivan Member Posts: 6
    Well I have something to say that doesn't seem to have been brought up and I really don't care to read through all the posts to see if anyone else has mentioned it.

    Would it be possible to change the "SHADOW CASTING SYSTEM" ? It currently cast polygon shadows and given this game is Low Poly based... well the shadows that are cast other then creature models can look like crap i.e. "Bushes" "Trees" anything "Foliage" or anything that uses a texture with transparency to dictate the shape and/or look of an object.

    For instance, I can't create a "Forged steel fence" based on a (PLane + Texture) and give it shadows unless I model the the whole thing in to a forged steel fence. If NWN:EE where to have alpha channel based shadows, one can create a simple plane + a texture (+ Alpha channel) and be done with it.

    Not to mention the visual beauty and atmosphere it would bring to the game considering all tree foliage is on the most simple planes/polygons.

    IMO, this is not a minor thing, it is of great importance.

    Love what as been done so fare (i.e. the move to OpenGL 3.0) but the lack of info on the matter of the shadows is holding me back from making my purchase.

    Your humble flower sniffer and tree hugger B)

    Lord Sullivan.
  • Taro94Taro94 Member Posts: 125
    A small suggestion I have (or maybe not that small?) is adding an INI setting that would make characters exported to local vault overwrite its previous version. At the moment each character export means a new file in the folder, which is pretty annoying.

    I understand the intention (that is, someone may theoretically want to import an earlier character instance to a new module), but at least for me it was always a nuisance and nothing more.
  • SnafulatorSnafulator Member Posts: 27
    Not sure if it has been mentioned before but i would like a filter added to the server browser to hide servers that require HAK packs :)
    RifleLeroy
  • FreshLemonBunFreshLemonBun Member Posts: 909
    The class selection menu automatically expands with new classes, this is good and the kind of behavior wanted. The problem is that the shown classes in the list becomes unstable at 255 entries and above so it doesn't show all of the classes or it shows no classes. Please extend this limit to about 1000 or so to give more room for extensive modding.
  • ShadooowShadooow Member Posts: 402
    Idea for toolset improvement.

    In placeable list mark useable placeables. This could be done as bolding their name in the list. The reason for this is that when you want to edit some placeables that are useable and there is 150 of various placeables in list this is quite problematic task especially if you aren't creator of that area or you created it several years ago...
    RifleLeroy
  • ShadooowShadooow Member Posts: 402
    Toolset idea #2:

    Allow us to direct FirstName/LastName/Name/Description into TLK. This is currently not possible and we must do this manually via editing the blueprint with GFF editor.
  • ricoyungricoyung Member Posts: 83
    Plok said:

    Can we list spells in your spellbook in alphabetical order rather than in the order they were learned (or spells.2da order for clerics/druids/paladins/rangers)? It can be quite hard to find the spell you're after at present.

    Perhaps better to make it an option? alphabetical or by level... Likely many older vet players might balk at "just" the alphabetized version when they have become so used to by Level...INOW give them a chance to get used to the idea, I was at first thinking...no,no,no. but then thought more on it and thought "maybe" this might work better, but it would take some getting used to...still, if I was givin a choice of both ways, I would vote on it. :) but probably not without the choice. :(
    DM_DjinnRifleLeroy
  • LaputianBirdLaputianBird Member Posts: 107
    ricoyung said:

    Plok said:

    Can we list spells in your spellbook in alphabetical order rather than in the order they were learned (or spells.2da order for clerics/druids/paladins/rangers)? It can be quite hard to find the spell you're after at present.

    Perhaps better to make it an option? alphabetical or by level... Likely many older vet players might balk at "just" the alphabetized version when they have become so used to by Level...INOW give them a chance to get used to the idea, I was at first thinking...no,no,no. but then thought more on it and thought "maybe" this might work better, but it would take some getting used to...still, if I was givin a choice of both ways, I would vote on it. :) but probably not without the choice. :(
    I believe they meant alphabetical order inside each level, not across all levels, which sounds like a sensible request that wouldn't mess with anything
    ricoyung
  • ShadooowShadooow Member Posts: 402

    I believe they meant alphabetical order inside each level, not across all levels, which sounds like a sensible request that wouldn't mess with anything

    You surely don't know nwn1 (bitter)vets, do you? >:)
  • LaputianBirdLaputianBird Member Posts: 107
    Shadooow said:


    You surely don't know nwn1 (bitter)vets, do you? >:)

    Apparently not as well as you.

    However the alphabetical ordering of spells across spell levels doesn't make sense at all, given the GUI splits different spell levels by different panels, so I still believe the request was about ordering them inside each panel/level
    DerpCity
Sign In or Register to comment.