Jump to content

Rob McGinnis

Members
  • Posts

    346
  • Joined

  • Last visited

Blog Entries posted by Rob McGinnis

  1. Rob McGinnis
    Neverwinter Nights 2 Community Update
    July 20, 2007
     
    This week's NWN2 News Update was delayed so that we could bring you a certain piece of news.
     
    Pool of Radiance Remastered Released in Spanish
     

     
    The folks at the Spanish community Neverwinteros and the Spanish translation group ClanDlan have translated the original Pool of Radiance Remastered by the Hall of Fame author Markus 'Wayne' Schlegel into the Spanish language.
     
    The mod is fully translated and available for download in Nwvault here.
     
    They will be continuing their translation efforts with Tragedy in Tragidor by Phoenixus.
     
    Granny Update
    For those of you that think we forgot about poor old Granny, rest assured we didn't. We are ironing out some final details and putting things together for release. We want to give you all some supporting files and a little bit of documentation, rather than just release the tool, but those last little details are the hold up. More news to follow as the situation changes.
     
    New Toolset Feature with 1.07
    With the 1.07 Patch we will be putting in a new toolset feature. This feature enables you to change the textures on walls, ceilings and floors of many of the tilesets in the toolset. Josh Verrall gives us a small peek at how it works
     

     
     
     
     
    Mask of the Betrayer Screenshot

     
     
    Persistent World Spotlight: Talernon 2
    by Dragonbane777
     

     
    A continuation of the Hall of Fame Persistent World from Neverwinter Nights 1, Talernon2 is the evolution of this world and its stories, as well as its successes and failures, a culmination of a highly experienced team working towards the goal of creating a rich and developed campaign setting and story. A heavy Role-Play server, Talernon2 strives to use Neverwinter Nights 2 as an engine for the PnP version of Dungeons and Dragons, trying to achieve more of a table-top feel and less of a
  2. Rob McGinnis
    Neverwinter Nights 2 Community Update
    July 13, 2007
     
    This week we take a quick look at the NWN2 Fan Art Contest, Some great user-made content and we take another small peek at the NWN2: Mask of The Betrayer expansion.
     
     
     
    NW2 Fan Art Contest
     
    I thought I would show off some of the entires for the NWN2 Fan Art Contest. The contest ends July 31st, so get your entries in quickly. We have two categories you can submit your entries for. The first category is Your Favorite Creature or Monster. The second category is Your Favorite Companion or NPC in NWN2. There are already quite a few entires on the Vault. I would love to show more, but I am limited to the number of images I can include in the Blog and I have a lot to share.
     
    Favorite Creature
     

    This Pic of an Ogre Mage is by Laban.
     
    Favorite Companion/NPC
     

    This little comic of Qara and Neeshka is done by SuiSa.
     
    You can find more details on the contest here. You can also find more of the entries on NWVault.
     
     
    Community Creations
     
    Baldur's Gate UI Mod
    Trevor Morris has created an excellent Baldur's Gate-stylized UI mod. You can find it here on the Neverwinter Vault.

     
     
    Davion Shores Area Prefabs
    He describes his first area, Riverbridge as A town perched over a waterfall in an autumn setting. A small pit stop or point of interest for travellers wandering through the forested hillsides.
     

     
    His second area, The Mossy Inn, is described as a possible rest area for travellers trekking through the swamplands.
     

     
    In case you don't know already, prefab areas are works created by other area designers for you to use in your own mods or persistent worlds. They would cut down on building time and, usually, the author of the area simply asks to be credited for the work.
     
     
    Mask of The Betrayer Sneak Peek
    Here's this week's screenshot to whet your appetite.
     

     
     
    That's pretty much it for this week. Hope you enjoyed what was here. See you again next week for another weekly update.
  3. Rob McGinnis
    Neverwinter Nights 2 Community Update
    July 3, 2007
     
    Welcome back to another NWN2 Community Update. This week, I am doing the Community Update a day early, due to a Holiday in the United States. Today's edition features some of the Console Commands that will be available to DMs in 1.07, a little information about Multi-Select, some changes to the camera and controls in Mask of The Betrayer, a look at an upcoming Persistent World, and a little surprise for patch 1.07.
     
    Multi-Select
    The Multi-select system is going through a simple overhaul. The first part of which, that you should see, is that now, multi-selected parties should be able to perform their default actions. This means you will be able to open doors, pick locks, etc. without having to de-select your group now. Other changes will be forth-coming, but so far, this is the big change.
     
    DM Console Commands in 1.07
    I have been receiving a lot of requests for what script commands we are making available to DMs in the 1.07 patch. To answer this question I am going to post a good number of them, along with their descriptions:
     
    SetCHA : Set the currently targeted creature to the specified CHA.
    SetCON : Set the currently targeted creature to the specified CON.
    SetDEX : Set the currently targeted creature to the specified DEX.
    SetDieRollMode : Usage: 'SetDieRollMode (0/1/2). 0 = normal random die rolling. 1 = minimum die rolls. 2 = maximum die rolls.'
    SetINT : Set the currently targeted creature to the specified INT.
    SetSTR : Set the currently targeted creature to the specified STR.
    SetWIS : Set the currently targeted creature to the specified WIS.
    command : 'command <MATCH>' will return all commands that include any characters in the MATCH sequence.
    commands : 'commands <MATCH>' will return all commands that include any characters in the MATCH sequence.
    dm_getvarfloat : Returns the value of the specified variable.
    dm_getvarint : Returns the value of the specified variable.
    dm_getvarobject : Returns the value of the specified variable.
    dm_getvarstring : Returns the value of the specified variable.
    dm_giveXP : Gives the specified amount of XP to the current target.
    dm_givegold : Gives the specified amount of gold to the current target.
    dm_god : Turn player character invincible.
    dm_jumptopoint : Jump to the specified points. Syntax is: float float.
    dm_modifyage : Your current target will have its age adjusted by the value specified. Positive values will cause an increase, while negative values will cause a decrease.
    dm_setCR : Your current target will have its challenge rating set to the value specified.
    dm_setage : Your current target will have its age set to the value specified.
    dm_setattackbase : Your current target will have its base attack bonus set to the value specified.
    dm_setfaction : Your current target will have its faction set to the one specified in the command line.
    dm_setfactionreputation : Where: faction1 and faction2 are the names of factions. x is an integer value indicating the value to set the reputation value to. Description: This function will set the reputation value for how faction2 feels about faction1 (0 is hostile, 100 is friendly).
    dm_setspellresistance : Your current target will have its spell resistance set to the value specified.
    dm_setvarfloat : Sets variable specified to the given value.
    dm_setvarint : Sets variable specified to the given value.
    dm_setvarobject : Sets variable specified to the given value.
    dm_setvarstring : Sets variable specified to the given value.
    givefeat : Usage: 'givefeat FEATID'
    giveitem : Usage: 'giveitem ITEMTEMPLATE <AMOUNT>' Will create an item and add it to you inventory. If you don't specify an amount, it is assumed to be one.
    givespell : Usage: 'givespell SPELLID SLOT'
    givexp : Usage: 'givexp <AMOUNT>' Will give the supplied number of experience points, or enough to level up if no number is supplied
    logcommands :
    loggameeffects : Usage: 'loggameeffects'
    logrunscript :
    logserverai : Usage: 'logserverai'
    portraitsave :
    rain :
    removefeat : Usage: 'removefeat FEATID'
    resetlevels : Usage: 'resetlevels <OBJECT> <EXP>'
    resetpackage :
    resetstats :
    resourcestats :
    rs : Usage: 'runscript SCRIPTFILE <TARGET>' Will run the script. If <TARGET> is a valid object, the script will be run with that object as OBJECT_SELF.
    runscript : Usage: 'runscript SCRIPTFILE <TARGET>' Will run the script. If <TARGET> is a valid object, the script will be run with that object as OBJECT_SELF.
    takedamage : Usage: 'takedamage DAMAGE <TARGET>' - DAMAGE can be any number greater than zero. <TARGET> (optional) is the tag of the object you are trying to target
    unpolymorph : Usage: 'unpolymorph'
    usebehavior : Usage: 'usebehavior NUMBER' This will change the currently controlled creature to use designated behavior set from the NWN2_BehaviorParams.2da
    usescriptset : Usage: 'usescriptset NUMBER' This will change the currently controlled creature to use designated script set from the nwn2_scriptsets.2da
     
     
     
     
    MoTB Camera Changes
    In Mask of The Betrayer, we will be implementing something called Play Modes. This will replace the current camera/control scheme in NWN2 with something a little bit more streamlined. Basically, there will be two play modes that can be configured from the Game Options screen - Character Mode and Strategy Mode. These modes will affect both the function of the camera and the controls for each mode, and are designed to be most efficient for the two primary styles of play
  4. Rob McGinnis
    Written by Rich Taylor, Lead Programmer.
     
    Whew, sorry for not finishing off the UI Objects. There's not too many left to document here before all the basic UI types should be covered, I think...
     
    Anyway, on to UIListBox. UIListBox is a container similar to UIPane and anything listed under UIPane that makes sense for UIListBox probably does the same thing under UIListBox. So I'm going to stick to discussing the attributes that are unique to UIListBox. Refer to UIPane for the basic attributes (Like X, Y, Height, Width, etc).
     
    There's a couple different ways list boxes are used.
    A list box can be used for displaying multiple rows of objects. Things like the Feat List or the lines of text in the chat windows use it this way. This is accomplished by just adding multiple objects to the list box. Typically these objects are the same size, but that is not a requirement.
     
    A list box can also be used for containing a single large text field and being able to scroll over that text field. This can be seen in places like the class and race descriptions on character creation. This approach is accomplished by having a single text field within the list box, making the height of the text field dynamic, and changing the text of the text field. The listbox will allow for scrolling over the large text field.
     
    Another note, I may use the term 'control' a lot in this write up. 'Controls' in this context are the contents of the list box. These are different than 'children' of the list box, which would include every object contained by the listbox, like the scrollbar. I will try to call controls 'rows' to make it more clear, but if I slip up and call it a 'control,' I'm talking about a row. =)
     
    xPadding
    The amount of padding that the listbox should put between the edges of the listbox and the contents of the listbox. This padding is applied equally to both sides. So if the padding is 5, and the ListBox is 100 pixels wide, then the ListBox will constrain the rows to a max width of 90.
     
    yPadding
    The amoutn of padding that the list box puts between each row. This includes padding between the top row and the top of the list box and the bottom row and the bottom of the list box as well.
     
    snaptobottom
    Setting this to 'true' will make it so that any time the text field in the listbox gets resized, the listbox will snap to the bottom to show the bottom of the text. This is used mostly for situations where text keeps getting added to a text field and you want the list box to keep scrolling to the bottom to display all the text. This is not how the chat window works, BTW.
     
    scrollsegmentsize
    This is how many pixels you want the listbox to scroll for each 'scroll click' on the part of the user. The parameter is a number, the default vaule is 1.
     
    unequalcontrols
    This is a somewhat complicated attribute. If you don't have any preference, it's usually best to just set it to true. The purpose of it is to speed up performance on list boxes where each row is the same height. So if your list box will definitely have each row with the same height, then set this to false to speed up scrolling with that list box.
     
    showpartialchild
    This tells the list box if it should just clip the bottom row if it can't show the entire row. Defaults to true, parameters are 'true' or 'false.'
     
    scrollbaronright
    Setting this to true moves the scrollbar over to the right side of the list box. Setting it to false will move the scroll bar to the left side of the list box. The default behavior is 'true'.
     
    selectonleftclick
    This tells the game that you want the user to be able to click on the rows of the list box. This means that the list box is intended to contain a number of rows and you want the user to pick a row. It is false by default. If false, then clicking on a row will perform the 'LeftClick' callback if you click on a button row, or will set the text field as the focus if there is just a single large text field in the list box. If by true, clicking on the row will still execute the OnLeftClick callback for the button if there is one. It will also set that row as selected.
     
    hidescrollbarwhennotneeded
    If this is set to true, the scrollbar will be hidden unless there are enough contents within the list box to require scrolling to see them all. Defaults to false.
     
    hidescrollbar
    If this is set to true, then the scrollbar will be hidden no matter what. This is for the rare case you may want text to scroll by but don't care to have the user being able to scroll back up. Defaults to false.
     
    If the engine finds a UIFrame nested within a ListBox while loading the XML, it treats that Frame as a border for the full size of the list box. I'm not sure if this ever saw any actual testing though, as I believe we usually just added a separate UIFrame to the Scene to act as the border.
     
    If the engine finds a UIScrollBar nested within a ListBox while loading the XML, that scrollbar will become the scrollbar for the ListBox and be attached to the left or right depending on the attributes.
     
    A listbox can contain the following types of UIObjects as its rows:
    Button, Label, Hotbarbutton, Text, Collapsable, Pane, Grid, Icon, TextTree
     
    If the object found has an attribute called 'prototype=true', then that object becomes the ProtoType for the list box. The prototype defines all the attributes, styles, etc., that each row that is added dynamically to the listbox should have. Unfortunately, this is something better experimented with to understand rather than me trying to explain. But in brief, find a listbox that has a prototype object in the game, and see what effect changing the prototype's attributes have on the way the listbox rows look in the game.
     
    Anyway, that's all I have to write about ListBox at the moment. I thought there would be more than this to write about it, so I imagine I'm missing some stuff. As always, just ask if I've neglected to cover some topic about UIListBox.
  5. Rob McGinnis
    By Rich Taylor
     
    A new callback in 1.06 is:
    UIObject_Misc_ExtractData( sourceobject, datatype, index, destinationvar )
     
    This callback can be used to extract the data imbedded by the engine within UI Objects. First I'll go over the parameters, then I'll give some examples.
     
    sourceobject
    This parameter is used to define which UI Object we are extracting data from. It accepts the following options:
     
    selected:listboxname - By replacing 'listboxname' with the name of the listbox you're interested in, you can tell this callback to use the selected row within the list box as the source of the data.
     
    self: - By using 'self:', you are telling the callback to use the object that invoked the callback as the source from which to extract the data.
     
    context:uiobject - By using context:uiobject:', you are telling the callback to use the UI Object that invoked the context menu. This obviously only means anything if the callback is being called from a context menu node. If called from anywhere else, the callback will do nothing.
     
    objectname - If you enter any string besides the above 3 options, the callback will search for a UIObject within the same scene as the object executing this callback that has that name.
     
    datatype
    The datatype tells the callback which data type it should be extracting from the UIObject. Note that regardless of what the original data type is, the data type that gets stored in the GUI Variable at the end will always be a string.
     
    The data type values are:
    bool -'true' or 'false' are the strings that will get stored in the GUI variable
    int
    float
    string
    strref
    objectid
     
    Again, it's important to remember that no matter what the originating data type is, the result will be stored as a string variable within the GUI variable specified.
     
    index
    This is the index of the data to extract. If the index is invalid for the UIObject, a default value will get stored in the GUI variable (Either "" or "0" or "false" depending on what the originating data type was).
     
    destinationvar
    This can be a local:# or global:#. The type of the stored data will always be a string.
     
    Example 1
    Now for some real examples that will work.
     
    The grid icons in the inventory grid have the following data imbedded in them:
    OBJECT_ID(0) = The object currently displayed in that icon
    OBJECT_ID(1) = The object that was dispalyed in that icon on the previous frame
    int(0) = The stacksize for that object on the previous update frame
    int(1) = Indicates if the item is identified or not
    int(2) = Indicates if the item is usable or not
    int(3) = Indicates if the item is ghosted or not
     
    It would be possible for me to change the inventory screen to drop items if I double right click on them.
     
    I would edit the 'InvPrototypeButton' inside of inventory.xml and add:
     
    OnRightDoubleClick0=UIObject_Misc_ExtractData("self:","objectid",0,local:3)
    OnRightDoubleClick1=UIObject_Misc_ExecuteServerScript("gui_dropitem",local:3)
     
    When I right double click that item, the first callback will extract the Object ID of the item and place it in local:3 as a string that looks like: "32144" or whatever the object ID is.
     
    Then the 2nd callback would execute, asking the server to fire off the "gui_dropitem" script, and it would pass the 32144 value in as a parameter to the script (Either as a string "32144" or an integer 32144, depending on what the parameter type the script is expecting).
     
    Now I will be adding an IntToObject() script funciton that will make it possible to take that int parameter and turn it into an object parameter. At that point, you could use the DropItem action and have the player drop that object.
     
    Note that in this example, I would've had to remove the OnRightClick call to the context menu for the item button or it would end up blocking the double right click (Due to the context menu popping up and blocking the second click).
     
    Example 2
    This example is a lot more complicated, I'll try to explain it clearly.
     
    The spell buttons in the game usually have the following pieces of data:
    int(0) = The spell ID that the button represents
    int(1) = The multi-class index that can cast that spell
    int(2) = Not used anymore, so nothing.
    int(3) = The meta magic feat, if any
    int(4) = Whether or not this is a spontanously cast spell
    int(5) = Whether or not this is a domain spell
    int(6) = Whether or not this is a cheat-command spell cast
     
    The values for int(3), the meta magic feat, are:
    1 = Empower
    2 = Extend
    4 = Maximize
    8 = Quicken
    16 = Silent
    32 = Still
    64 = Persistent
    128 = Permanent
     
    The warlock invocations are also meta-magic feats, as follows (Note, I'm not sure how many of these are actually in the game, I'm just going down the list of constants in the code):
    256 = Draining Blast
    512 = Eldritch Spear
    1024 = Frightful Blast
    2048 = Hideous Blow
    4096 = Beshadowed Blast
    8192 = Brimstone Blast
    16384 = Eldritch Chain
    32768 = Hellrime Blast
    65536 = Bewitching Blast
    13102 = Eldritch Cone
    262144 = Noxious Blast
    524288 = Vitrioloic Blast
    1048576 = Eldritch Doom
    2097152 = Utterdark Blast
     
    Let's say I want to make my own custom Examine Spell command for the spells_known.xml listing of spells.
     
    First off, let's add our own custom radial menu (Another new feature in 1.06).
     
    In spells_known.xml, I would go to the SPELLPANE_PROTO pane and add a
    OnRightClick=UIObject_OnRadial_DisplayCustomRadial("root-customspell")
     
    root-customspell will be the name of a new root node that I would then add to the contextmenu.xml
     
    For now, that root node will only have 1 sub node called: node-spellexamine
     
    node-spellexamine will be the name of a new radial node that I would make with the following callbacks:
    OnLeftClickExpanded0=UIObject_Misc_ExtractData("context:uiobject","int",0,local:5)
    OnLeftClickExpanded1=UIObject_Misc_ExecuteServerScript("gui_spellexamine",local:5)
    OnLeftClickCollapsed0=UIObject_Misc_ExtractData("context:uiobject","int",0,local:5)
    OnLeftClickCollapsed1=UIObject_Misc_ExecuteServerScript("gui_spellexamine",local:5)
     
    Now when I go into the game and bring up the Spells Known screen and right click on the spell icon for a spell in the list, I will get a context menu with 1 item called 'Examine'. Clicking on that will first call:
    UIObject_Misc_ExtractData()
    which will extract the spell ID from int(0) on the button I brought the context menu up on and place that ID in local:5
     
    Then it will fire
    UIObject_Misc_ExecuteServerScript()
    and pass along the spell ID (As stored in local:5) as the parameter to the script: gui_spellexamine
     
    From there I can do whatever I want with that data.
     
    To recap, the new features mentioned in this article are:
    UIObject_Misc_ExtractData()
     
    and
     
    UIObject_OnRadial_DisplayCustomRadial()
     
    Feel free to ask any time you would like me to provide a detailed list of what data is imbedded in a given UI Object. Some you'll probably be able to figure out on your own via trial and error, but I'll be happy to look into any specific UI Object if you need.
  6. Rob McGinnis
    Neverwinter Nights 2 Community Update
    June 20th, 2007
     
    Another busy week has gone by. Since the last update, we have been playing on the 1.06 patch. Things are definitely improving and I am sure many of us are thankful for the undo functionality added to the toolset. [Edit: I was just sent a PM from JasonNH on the Bio Boards. Unfortunately, there appears to be an issue where Undo removes water. This was not reported in the beta, so some investigation is underway. New information: This is fixed in later builds. - Rob].
     
    This week, we are going to talk about a new DM Client feature, the Model/Animation viewer, a couple toolset improvments, some great mods by Heed and Charlie and a little bit about the Red Wizard of Thay class in the expansion.
     
    DM Client Facelift
    One of the areas we have spent considerable time on for the 1.07 patch is the DM Client. In this first pass we are trying to get the DM Client to be useable for DM-led events and adventures. For 1.07 you should see console commands accessible, a new UI for changing players' alignments, and notes will be visible in the creator (The stuff between the {} brackets in the toolset) among many other changes.
     
    We have also added a new feature to the Player List for DMs. This new feature will allow you to apply a filter to your Player List to only show the players you want to see. That means, say you are a DM on a server with 60+ players; you can select the players in the event you are running and filter your Player List to only show those few players.
     
    Here's a screenshot to illustrate
     

     
    The shot above is a picture of a Work In Progress. The portrait on top will be the portrait of your DM Avatar. It will always remain at the top. The two buttons below the portrait are for showing the selected players and showing all the players. The pic also shows the checkboxes for selecting the players.
     
    Model/Animation Viewer
    By now, those of you that have been using the toolset should have seen the new Model & Animation Viewer plugin included with the 1.06 patch. This tool is leading the way for the Granny export tools that will allow Custom Content Creators to create custom animations for creatures and objects. The Animation Viewer will allow you to see what animations are available for each model, frames and much more.
     
    Toolset Improvements
    Coming up in the 1.07 patch we'll see a few more toolset improvements. Two of those improvements are the ability to switch between male & female models in the Armor Set tab for armor properties, and the other is the SetLightActive script that will allow modders to turn lights on and off through script - without having to create and destroy them all the time.
     
     
    Heed's PC Tools
    Heed's PC Tools is a GUI driven suite of tools allowing player characters to perform a variety of functions. The majority of the functionality will likely be of most interest to those playing multiplayer games. PC Tools allows players access to common functions such as saving the character, displying an "AFK" visual effect, checking the game date/time, unsticking the character from unpathable locations, creation of campfire or tent objects, a full emote studio including visual effect props such as mandolin, flute, shovel, rake, etc., a dice roll pane for rolling standard die rolls as well as ability, save and skill, 9 custom buttons for end user addition of functionality -- and more! The interface is collapsable down to a core element which can be left open on screen by the player without excessive obscuring of the available screen space. Further minimization can be done so that entire menu collapses into a single icon.
     

     

     
     
    Charlie's Item Appearance Changer
    Tired of your gear looking like everyone else's? Change it! Charlie's Item Appearance Changer is a UI-driven system that allows you to select from a range of item appearances for your visible equipment! It can be installed for use in the official campaign, or added to your new module or online world. You can preview different armor, weapons, cloaks, helms, boots, gloves and shields.
     

     
    Both Heed's PC Tools and Charlie's Item Appearance Changer are available on Neverwinter Vault.
     
    The Red Wizard of Thay
    In the expansion, we are including the Red Wizard of Thay prestige class. This long-awaited class is a very welcome addition for me, and I am sure it is for many of you too. So, I thought I'd take a moment to go over the Red Wizard and how it's implemented.
     
    Requirements: The Red Wizard prestige class requires that you be human and have any non-good alignment. You must have 8 ranks in the Spellcraft skill and at least one metamagic feat or item creation feat (other than scribe scroll). Other feats you must have are Spell Penetration and Greater Spell Penetration, too. On top of all that you must be a specialist wizard with the ability to cast at least 3rd level arcane spells.
     
    Class Features: The Red Wizard uses the d4 Hit Die, just like a normal wizard and has a low base attack bonus (BAB). Her high save is Will. Red Wizards gain no armor or weapon proficiencies and gain 2 skill points, plus intelligence modifier, per level in skill points.
     
    The special features a Red Wizard gains are as follows (not listed in any particular order):
     
    1. Red Wizards continue to gain spells per level as though gaining a level in Wizard.
    2. Enhanced Specialization: Upon becoming a Red Wizard, the character becomes even more skilled at casting spells from his chosen school of specialization.
    3. Specialist Defense: A Red Wizard gains a bonus to defending against schools from his specialist school.
    4. Spell Power: The Red Wizard's effective caster level for determining level-dependent variable checks is increased by +1.
    5. Wizard Bonus Feat: Red Wizards gain a bonus metamagic or item creation feat.
     
     
    Unfortunately, we were not able to implement the Red Wizard's ability to perform Circle Magic for the expansion. Given the time we had, and the complexities involved, we felt it would be better for everyone if we spent time on other features for the expansion. Even with this in mind, the class is great fun to play... and... well... who doesn't want to be a Red Wizard?
     
    For more information and background on the Red Wizards, checkout their Wikipedia Entry.
     
    Persistent World Spotlight
    Each week, we would like to do a spotlight on a different Persistent World in each Community Update. I invite all of your Persistent World admins and owners out there to write up a small description of your world and to go over its high points. You also should include a section that answers the question "Why would I want to play on this server?" This will be a great opportunity to really "sell" the virtues of your PW to all those players out there.
     
    You can PM your write-ups to me here on these boards. Next week, we will be taking a quick look at The Frontier.
     
     
     
     
    That's about it for this week's update. It would have been up earlier today, but I just wanted to be able to tell you that stealth and perception should be greatly improved with 1.07. In essence, it works like it did in NWN1, but there may need to be some adjustments due to the Companion system.
     
    Tschuz!
  7. Rob McGinnis
    Neverwinter Nights 2 Community Update
    June 13th, 2007
     
    NWN2 Game Update Version 1.06 Released!
    That's right, the 1.06 game patch has been released. French-language users may have a little trouble downloading the patch. You can download the patch from the NWVault Official Patches page while we work on a fix. As always, we want to hear about any issues caused by the patch. You can let us know here, in the announcement thread on the Bioware forums.
     
    We Have a Winner!
    Congratulations to jclef, the winner of our first mod-making contest for NWN2. His module, Grimm Brigade, was a lot of fun to play and very original. But, I have to say, competition was pretty tough and the results were quite close. Second place goes to Maerduin for The Birthday and third place goes to Death Quaker for The Rampion Champion.
     

     
    As I said, judging was quite difficult. We looked at a lot of different things: story, originality, polish, custom content, technique, fun factor and generally just how much effort seemed to go into the building of the modules. All of them were quite good. Some were confusing or didn't really follow the theme of the contest, so they received lower scores. But, overall I think the contest went well and the modules submitted were great!
     
    jclef, you should be receiving a tarnished spoon, some Macaroni & Cheese and an old bit of pocket lint as your prize pretty soon. Oh yeah: it is being send C.O.D, so make sure you have $15.95 to cover the shipping expenses.
     
     
    Fan Art Contest
    So now it's time to announce the next contest!
     
    With the fun we had with the mod-making contest, we thought we would hold a contest for the non-builders. The best one we could think of will be a Fan Art contest. This contest will go a little longer than the mod-making contest and there will be two main categories.
     
    The first category is Your Favorite NWN2 Companion (Khelgar, Neeshka, etc.) or NPC (Lord Nasher, Wolf, etc.). The second category is Your Favorite Creature or Monster in NWN2.
     
    All art must be two-dimensional and will be uploaded to NWVault. The exact location will be announced shortly in the NWN2 General Forums as will any size limitations or specifications. The rules are basically the same as for the mod-making contest. The deadline for entries will be July 31st at noon Pacific Time (GMT -8 hours ). All work must be your own original artwork. Artwork will be judged by Obsidian and the Community. Entrants are limited to a maximum of two pieces of artwork per category (4 pieces total). By entering, you are making your artwork available for Obsidian's and public use with NWN2 at no cost.
     
    I can't wait to see the talent we have in the community!
     
     
    Bridges Everywhere!
     

     
    I just saw this: TD Mephisto has some great bridges now on NWVault! You can check them out here.
     
     
    That's about it for this week's update. Hope you found the information interesting.
  8. Rob McGinnis
    Neverwinter Nights 2 Community Update
     
    June 7, 2007
     
    For this week's Community Update, we'll take another look at some of the great community creations out there.
     
    NWN2 Community Representatives In Europe
    Working with Atari Europe, we are expanding the Community Representative program to Europe. Currently, we are testing the system with the French-speaking part of the community and, if all goes well, we should be expanding it to other languages as well. We have a great bunch of people out there as Community Reps: Zantigui, mostal, argyl, Elynehil and Drakolight. You can find many of them in our Community Rep IRC channel, and they have started an IRC channel for French-speaking Community members as well.
     
     
    Item Modification Made Easy
    Normally if you want a special item in game you have to find a store that sells it. Chances are that unless you are after something fairly common you will have to settle for something that is only close to what you want. Module designers must specify every item that goes into a store, so making a mod that is suitable for the many classes (and races) can be daunting.
     

    Instead of this approach, Charlie's Item Modifier gives you a dynamic approach to item design. The player can specify what properties she wants on an item. Much work is taken off the module builder and the player gets a wide choice of equipment, to suit any style of play. Charlie's Item Modifier uses a custom UI, which is much more powerful than other conversation based item modifiers. You can see what properties your proposed item has, the level required to use it, and how much it will cost to make. You can continue to make changes until you are happy with the result, before confirming any changes and committing your hard won gold. You can find Charlie's Item Modifier on NWNVault.
     
     
    Patcha's Custom Rest System
     

    This custom rest system will expand your roleplay enjoyment. It includes systems for resting, praying and studying! The system is activated by using objects, such as the old widget system we had in NWN1. Per Patcha's comments, the english may be a little rough, so contact Patcha on the Bioware Forums if you want to help out with translations. Patcha's rest system can be found here, on NWVault.
     
     
    Placeable Weapons
     
    Kivinen has spent quite a bit of time to bring us this great set of placeable items. This hak pak has lots of item models converted to placeables with several different orientations. There are orientations for hanging things on the wall (dn, up, dw, uw), leaning weapons etc against wall (dl, ul), and putting them flatly on the ground (fl). This can be used to replace the boring loot sacks with base item type specific model on the ground.
     

     
    You can find Kivinen's Placeables hak pak right here, on Neverwinter Vault.
     
    That's about it for this week. Unfortunately, I have no secrets to tell this time, but hopefully I should be able to sneak in and get something for next week.
     
    Have Fun!
  9. Rob McGinnis
    Neverwinter Nights 2 Community Update
     
    Welcome back to another Community Update. Today we are going to spend a little time talking about the 1.07 patch. Of course, I can't give everything away, but I will give you a little peek into what's coming up.
     
    NWN2 Worlds Down?
    You may have noticed that the Persistent World-focused site NWN2worlds.net has been down for the last few days. Strauss is in the middle of moving and assures me his site will be up and running again shortly. If you haven't checked it out already, the site is about Multiplayer and Persistent Worlds in Neverwinter Nights 2. I have a feeling he may have an interesting Dev Q&A posted when he comes back online too.
     
    Hellfire at it Again
    The guys at Robinson Workshop have been working on their sewer tileset some more. Here's a few screenshots to drool over:
     

     

     

     
    And my favorite, not related to sewers; what looks to be a really tall tower.
     

     
    Buff and Rebuff
    Tired of casting all your buffs over and over again? LostCreation has created this little UI Enhancement to make your wiggling fingers do some resting. This UI mod allows you to basically record your buffs and play them back again easily.
     

     

     
    A Peek Behind the Curtain
    As many of you know, the DM Client has been a weakness of NWN2. When we released the game, we released it as a beta with the intention of working with the community to give them a DM Client the way they want it. We wanted to fill the gaps that DM had with NWN1 and incorporate some of the features that were made available through the use of the DMFI tools. In essence, we wanted to create a more fully functional DM Client with NWN2. Obviously we ran into a few roadblocks. The release of the game didn't quite go as we hoped as compatibility issues came roaring at us. So, unfortunately, that left us dealing with some serious issues in the game. We knew the DM Client needed work, but there was just never enough time to actually focus on it. We tried to give some other small fixes that would not require a full review of a system, as the DM Client would, in the meantime.
     
    So, for the DM Client, we sat down in a chat with some of the community members and got their input on some of the issues with the DM Client. It was a great meeting and we received a lot of great suggestions. We are hoping to get as many of those suggestions in as we can, in the time allowed, but I am sure we will not see all the fixes in one patch. But, until then, here's some of the fixes that we should see in 1.07. As a reminder, some of this may be a work in progress and could change:
     
    * Hot keys on the numeric keypad should now work as intended.
    * Dead player characters will now appear on the chooser, and should be interactive.
    * The floating text from DMs will no longer give away the DM's position.
    * DMs will move silently.
    * There will be an interface for setting a character's alignment
     

     
    And one thing I think you will all be happy about: Chat windows will be easily moveable (dragable), without resizing the windows.
     
    That should be about enough to hold you over until next week. I hope you've enjoyed this week's update.
     
    Remember, if you have anything you would like included in the community update, just send me a message on these forums, or the Bioware forums.
  10. Rob McGinnis
    Neverwinter Nights 2 Community Update
     
    May 16th and the year is flying by. Time for another update.
     
    There's been a lot of action on the vault lately. I'm going to focus on the player-made shtuff again for this update.
     
     
    Stained Glass Windows
    Ar_Pharazon has created a great hakpack with some stained glass windows. If you have been looking for that special touch for your church or cathedral building, here it is. Great work.
     

     
     
     
    Prestige Class Wizard
    Thankfully, this plugin was updated by its author, Ville Alasaari. This tool helps you to create custom Prestige Classes. Give it a try and provide feedback to the author.

     
     
     
     
    NWN1-style Lighting Effects
    If you miss the sparkling lights or the many colored spotlight effects that were in NWN1, Thomas_B has created a great set of visual effects that fill that gap.
     

     

     
     
    Vines
    Sometimes, it's the little details that make the mod. These vines, made by Camb (the same Camb that brought us the blood splatters in an earlier update), will surely add some life and detail to your mod. Check them out on the Vault.
     

     
     
    Fan Art
    I have a great appreciation for any Fan-made creations, be they mods, models, effects or Fan Art. I was browsing through the forums a while back and came across this great little piece of Fan Art by Lollu:
     

     
     
    Lollu goes by a different name on DeviantArt, but you can see more of Lollu's art here: Artist
  11. Rob McGinnis
    Neverwinter Nights 2 Community Update
     
    Welcome back to the Neverwinter Nights 2 Community Update. This week's update will be a little on the short side and delayed due to workload. Because of this I am adding a little secret surprise at the bottom of the page. I think it may be well worth the wait.
     
     
    Patch 1.06 Released as Beta
    On Monday we released the 1.06 patch as a beta to the community. It contains a lot of fixes and new features for the builders in the community, chief among them the addition of the terrain undo functionality. With this undo capability, you now have five levels of undo when working with terrain sculpting, texturing, water and grass.
     
    Other things you may find range from script additions for builders and DMs to a nice little toolset feature that allows you to create a blueprint out of a spawned in creature in the toolset. Slowly but surely, we are getting there.
     
    You can find the discussion for the patch here
     
    Journey to the Underdark
    Many of us have been watching Botumys' progress over the last few months as he worked on some Drow Cave settings and objects. Well, it looks like his work has made its way over to the vault. You can check it out here, in the blueprint prefab section of the vault. Oh yeah, here's a little picture of it as well.
     

     
    Secret Surprise
    So, the contents of this 3 MB RAR file you will need to download might give you a smile, or it might not. Based on your requests, we are working on something - in fact the object of the video is a work in progress - and I just wanted to show you that we are listening to you. The video was smuggled out of our development labs by a crack team of gnomish commandos, so the quality isn't that great, but I think you will get the picture. There are many more things in the works... this is only one of them. You will need FRAPS to view the video (http://www.fraps.com/download.php).
     
    So, here's the file: Surprise
     
    You can also try this link, if the first one doesn't work for you. Thanks to one of our IRC friends for the link.
     
    Well, I need to bring this week's update to a close. I will try to bring you a larger update next week. Have fun.
  12. Rob McGinnis
    Rich Taylor gives us a peek into what will be in the 1.05 patch:
     
    While the 1.04 patch is about to come out for NWN2, the 1.05 patch isn't too far off either. Rather than make 1.05 a big patch like 1.04 is, we want to release a small, quick patch to try and quickly resolve some issues the custom content community for NWN2 is running into.
     
    I recently revamped the auto-updater to allow for incremental patches. This means that if someone had 1.02, the patcher would patch them up to 1.03, then to 1.04 (once 1.04 is released). While this may seem like it doesn't offer anything to the end-user, it makes it several times faster to make patches on our end, which means the end-user will see more frequent, smaller patches, instead of the periodic large patch.
     
    The following is a list of the items that have gone in so far for 1.05:
     
    armorrulestats.2da will no longer be capped at 255 rows
     
    DisplayGuiScreen() script function now has a new parameter that allows the script to define the *.xml file if the 'screen name' can't be found in the gui INI files.
     
    Appearances.2da had the NWN2_Scale column changed to NWN2_Scale_X, NWN2_Scale_Y, NWN2_Scale_Z, allowing all 3 dimensions to be scaled seperately.
     
    The chat boxes will no longer clear their text on area or module transitions.
     
    NWN2_Deities.2da can now be overridden correctly, without having to stick it into the override directory.
     
    NWN2_Deities.2da's description column can now work with hard coded strings in place of STRREFs. Simply enclose the string in " marks.
     
    GetIsPartyTransition() script function will now correctly return TRUE or FALSE. Before it would always return TRUE, which would cause the default transition scripts to jump the party even if the trigger was flagged as not being a party transition.
     
    A bug has been fixed that was preventing mouse clicks from going through the screen space occupied by the quickspell menus even if the quickspell menu wasn't visibly blocking that part of the screen.
     
    There's a number of 2DAs that should be fixed in the toolset with regards to respecting the Label Column if the STRREF column is blank. I'm out of the office this week, so I'm not 100% sure that this had made it in at this time, but it is my goal for the 1.05 patch for it to be there.
     
    Also going in is Multiselect for the DM Client and in the normal game mode. This will allow you to drag-select any party members not being actively controlled by another player and issue simple commands like move, attack, talk, and even unlock/disarm. The game will pick the character with the highest score for picking and disarming and have them do the action. This is our first pass at multi-select support, there will be more features going in with regards to this over time.
     
    Anyway, that's all I can think of off hand and after looking over my notes from last week. I expect 1.05 to be released early Feb.
  13. Rob McGinnis
    Neverwinter Nights 2 Community Update
     
    Well, it's that time of week again, where I need to dig into the production list and scour the community for those things that may interest you.
     
    Mod-Making Contest Complete
    Monday was the last day for submissions to the mod-making contest. The theme for this contest was Grimm's Fairy Tales. We have quite a few submissions and, after playing a couple mods yesterday, I think the competition is going to be pretty fierce. The exteriors I have seen so far are nicely done and the storylines have been pretty fun. You can check all the mods for yourself here, on Neverwinter Vault. We will be playing through the modules this month and, hopefully, should be able to announce a winner at the beginning of June.
     
    Granny Gets Her Wings
    So, the Granny beta is moving along swimmingly - or should I say soaringly? We had a little breakthrough this week, but I think it would be best if you read the words of one of the beta testers, when he was motivated to experiment a bit, yourself:
     

    So he experimented a bit with placing some soaring birds in a module. The result was actually quite good. So much so, in fact, that it led the beta tester to say this:

    Oh.. you probably want to see the result too. Here you go. By the way, we hope to release the Granny tools with the 1.06 Final Version patch.
     
     
    Can't Judge a Book By Its Cover
    Your Vault tidbit for today is this little Book UI change. This UI mod, created by clubok, changes the UI to look like a book when you read one. Pretty cool, if you ask me.
     
    Sneak Peek at 1.06
    The patch is currently in QA and we hope to have it out for beta testing pretty soon. So far, things are looking good, so hopefully we can get a beta out next week. Here's just a quick peek at what we have in there. Of course, this is not everything.
     
    -New texture for cliff faces
     
    -Five levels of Undo in the Toolset
    -The Flatten Tool has been made a little more flexible
    -Key commands have been added for the brushes in the toolset
     
    New Scripts functions:
    -SetLockKeyeRequired()
    -SetLockKeyTag()
    -SetLockLockDC()
    -SetLockUnlockDC()
    -SetLockLockable()
    -SetTrapActive() was fixed to work on Doors and Placeables as well as Triggers.
    -GetAreaSize()
     
    -Export Characters (single and all)
     
    That's about it for today's update. As you would guess, things are pretty busy here so see you all next week.
  14. Rob McGinnis
    Neverwinter Nights 2 Community Update
     
    Hello again, everyone. This week I thought I would dedicate the update to a few of the community works. Just a warning, though: There's a lot of screenshots in this one, so it may take a while to load fully.
     
     
    Formations, Formations, Formations
    (Not to be confused with the famous "Developers" speech, from a certain MS guy).
     
    Jasperre has been working on a great little AI script that allows for formations! After watching the video, I asked him if he wanted to write a little something up for the Community Update, and here it is:
     

     

    Granny Beta and Custom Content
     
    I know some of you have been waiting to see what the Granny beta has yielded. Here's a few examples to whet your appetite:
     

     

     

     
     
    RogueDao Strikes Again
     
    We have been following RogueDao Studios' work on their Planescape mod, Purgatorio, for quite a while. They have given me some screenshots I think you would all like to see (as a reminder, this is all work in progress)...
     

     

     

     

     
     
    Blood Effect
    And, on my travels through the vault, I found this great Blood Splatter effect by Camb. The screenshots are a little dark, but I think you'll get the picture.
     
    Next Week
     
    Be prepared for some 1.06 news!
  15. Rob McGinnis
    By: Rich Taylor, Lead Programmer
     
    The 1.05 beta was posted today. One tweak that I intend to have made before 1.05 final is to remove the 'tabs = 5 spaces' change in the script editor. While some people do want some option like that, I think it needs to be implemented as something that can be turned on/off/adjusted, so for now, it's best to leave it out and re-implement it correctly in 1.06.
     
    As far as 1.06 goes, I've spent a lot of time this week integrating a lot of the NWN1 1.67 changes, especially the script functions. I won't go into details now, but I will once I'm done. But in summary, most of the script functions that have been missing from NWN1's later patches should be in 1.06.
  16. Rob McGinnis
    Neverwinter Nights 2 Community Update
     
    So, based on the feedback from the Bioware NWN2 forum, it seems we have been neglecting the news side of things. One of the issues is that we give out information in so many places, it's difficult to remember what information was given where. Hopefully we can change that with this Blog.
     
    Starting today, I plan on releasing some news every week, when there is news to give. If there is no news, I will probably post about some of the cool things I have seen in the community so that others can experience it to. So, without further a-do, here's the news for this week:
     
    Granny Beta Underway!
    That
  17. Rob McGinnis
    - By Rich Taylor
     
    Just a note about a few more 1.06 things. But first, regarding 1.05 Final, it seriously, really, probably, maybe, should be coming out early next week (which means this week - Rob)... That's about all I know about it. =)
     
    EnableAreaWater() - Turn water rendering on/off in an area.
    SpeakOneLinerConversation() - Now takes a volume parameter (Only supports talk, whisper, and shout)
    SetScale() - changed to accept x, y, z axis as parameters
    Dedicated Server now correctly lists modules in directory format that are located in the MyDocs directories.
    Dedicated Server now takes a -moduledir parameter to allow launching modules stored in directory format to be loaded via command line parameters.
  18. Rob McGinnis
    Rich Taylor brings us another look at what's happening on his end:
     
    Here's a list many of the scripting changes made in 1.06 so far. Most of them come from the 1.67 and 1.68 updates of NWN1.
     
    ActionRest() - The bIgnoreNoRestFlag wasn't actually doing anything. It will now force rest even if the area is flagged NoRest or there are monsters nearby. If the character is still in combat, it will not force rest.
     
    CreateItemOnObject() - Added new string parameter to provide the newly created object a new tag.
     
    EffectHeal() now works on doors and placeables.
     
    GetAbilityScore() now takes a 'nBaseAttribute' parameter to allow querying just the base attribute.
     
    OnClick event for placeables that fires whether or not the player can actually path to them.
     
    SpeakConversationOneLiner() now takes a parameter to determine if the spoken line should have whisper, talk, or shout volume.
     
    Added:
    CreateTrapAtLocation()
    CreateTrapOnObject()
    GetAreaSize()
    GetInfiniteFlag()
    GetKeyRequiredFeedback()
    GetPickpocketableFlag()
    GetPlaceableLastClickedBy()
    GetTrapActive() - (Now works on doors and placeables too)
    GetTrapRecoverable()
    SetFortitudeSavingThrow()
    SetReflexSavingThrow()
    SetWillSavingThrow()
    SetHardness
    SetInfiniteFlag()
    SetKeyRequiredFeedback()
    SetLockKeyRequired()
    SetLockKeyTag()
    SetLockLockable()
    SetLockLockDC()
    SetLockUnlockDC()
    SetModuleXPScale()
    SetPickpocketableFlag()
    SetTrapDetectable()
    SetTrapDetectDC()
    SetTrapDisarmable()
    SetTrapDisarmDC()
    SetTrapKeyTag()
    SetTrapOneShot()
    SetTrapRecoverable()
    SetUseableFlag()
     
     
    I also added a couple console commands to help with GUI debugging
    openuiscreen []
    closeuiscreen
    unloaduiscreen
     
    Also added a console command:
    guidebug [MOUSEINPUT] [MOUSEOVER] [CALLBACKS]
     
    This brings up an extra 'chat' window and will provide engine-level debugging info about mouse-overs, mouseinput, or callback execution. This feature isn't really finished as of this post, but I hope to spend some more time polishing it up for 1.06.
     
    There are some new toolset features and bug fixes. The bug with seams showing up between tiles has been fixed as well as issues with Specular lighting not looking right. There is also now 5-level terrain undo for grass, water, and terrain adjustment and some improvements to some of the brushes.
     
    There's some other things as well, but this is a pretty good sampling of the new things that will be in 1.06.
     
    Also, be prepared for more 1.06 information in the near future. - Rob
  19. Rob McGinnis
    By: Rich Taylor
     
    This is just a quick note to mention that I've added:
    object IntToObject( int nInt );
     
    and
     
    int ObjectToInt( object oObj );
     
    scripting functions for 1.06.
  20. Rob McGinnis
    Question: Could flying ever be a possibility?
     
    Answer: The NWN1 and NWN2 engines really don't have a concept of up or down when it comes to how the engine sees the world of the game. Adding that understanding would probably require a lot of work and the re-writing of large sections of the engine.
  21. Rob McGinnis
    Question: Is it possible to use NWN custom creatures (meshes&texture) in NWN 2?
     
    Answer: For creatures the changes between NWN1 and NWN2 are really too radical to use the old creatures. It's probably possible to import non-animating models though. Hopefully, we will have some tools out to help with Custom Content soon.
  22. Rob McGinnis
    Neverwinter Nights 2 Community Update
     
    Here we are with the second installment of the Community News. It's been a busy week, to say the least.
     
    Update to the 1.05 Game Update Update
    I think it's fair to say that the 1.05 patch has been my least favorite patch so far. Not because of content - the content of it is great - but because it has been a thorn in our side like no other. When we released the patch to everyone, a seemingly small issue was found that caused the toolset error out on startup. There was a small workaround for this, but that workaround may cause bigger issues in the log run. So, rather than take chances, we decided to pull the patch to find and fix the issue. This turned out to be more troublesome than originally expected. Thanks to Tanita for finding the workaround which led us to the core issue.
     
    Neverwinter Nights 2: Mask of the Betrayer Announced!
    Well, our PR guy Shane let the big secret out: we are working on an expansion. As I am writing this, we are pretty far along in working on the expansion. You probably already know that it takes part mostly in Rashemen and that there are going to be a bunch of new textures, creatures and what-all in there. Check out Kevin Saunders' interview on Game Banshee as he lets some more secrets slip.
     
    I would tell you more, but Feargus is standing over my shoulder and - what? Get back to typing... right.
     
     
    Top Mods Translated to Spanish
    Neverwinteros.com and clandlan.net are taking an initiative to translate the best mods into Spanish. They're working right now with Pool of Radiance Remastered and the next will be Tragedy in Tragidor. Both mods are great fun, so if you haven't tried them, head over to The Vault and check them out. For the Spanish translations, Neverwinteros.com will be updating their progress on their website.
     
    HotTA PW Featured in UK Magazine
    The folks of the Persistent World Heroes of the Third Age, were recently featured with some single player mods in PC Gamer UK magazine. Not sure when it's hitting news stands, but it's still pretty cool. Way to go HotTA! You can check out the HotTA PW here, along with the article.
     
    Adam Miller's Dark Waters Released
    This is one of the mods we have been watching and waiting for since the toolset beta. I expect to be diving into it soon. You can find it on the vault here.
     
    Dark Waters is set in a world on the edge of change, recovering from a war that flooded all but the highest peaks. The Gifted that once ruled with the power of their minds are long dead, leaving the ordinary folk to struggle to survive. Where once only science held reign, now magic and faith seep into the world, changing everyone they touch.
     
    Other top modules you may want to check out are Tragedy in Tragidor and Pool of Radiance Remastered.
     
    New Textures
    Lord Sullivan has uploaded some new and reworked textures to the vault. You can get his texture pack here. The pack contains snow, beach sand and a couple great cobblestone textures. I really encourage those of you new to modding to check out NWVault. There's a lot of great stuff out there made by the community already. Here's a few places to check there:
     
    Prefab Areas
    These are pre-made areas waiting for you to set them down in your mod. Exteriors and Interiors can be found in this section.
     
    Prefab Blueprints
    These are pre-made creatures and objects. Using these will speed up your building and make things a bit easier.
     
    Visual Effects
    Visual Effects made by community members. Would be great to see more of these, but the ones that are there now are pretty cool.
  23. Rob McGinnis
    This callback will be one of the most powerful new tools when it comes to creating custom actions in the game.
     
    UIObject_Input_ActionTargetScript(), new in 1.06, will let you make 'GUI actions' similar to the 'actions' that are created when you click on a spell or feat button to cast it, or on a button in the DM Choser that then has you select a target to do the action to.
     
    Once the user clicks on a valid target, a bunch of data will be sent to the server along with a request to execute a script associated with the click.
     
    Anyway, enough summary, here's the details:
     
    UIObject_Input_ActionTargetScript("sValidTargetTypes",nValidCursor,nInvalidCursor,nSpellTargetIndex,bUseHostile,"sScriptName", script parameter list...)
     
    sValidTargetTypes
    This parameter is a string that will list the types of objects that will be valid to click on. If you enter a "", that means all targets are valid for this action. Otherwise, you can enter a list, seperated by commas or any other deliminator you want to use. The valid target names are:
    self
    creature
    ground
    item
    door
    placeable
    trigger
     
    For example: "creature,placeable" would mean that valid targets would include clicking on placeables and clicking on creatures.
     
    nValidCursor
    This is an integer constant to point to one of the cursors that the engine understands. You can only really use the cursors compiled into the game's executable. I will make a list of those constants at the end of this post. This is the cursor that you want to use when the cursor is over a valid target.
     
    nInvalidCursor
    Just like the nValidCursor parameter, except this is the cursor you want displayed when the mouse is over an invalid target. For example, if my valid targets were creatures and placeables, but the mouse was over open ground, this is the cursor that would be shown.
     
    nSpellTargetIndex
    This is a reference into the spelltarget.2da to indicate that you want to use one of the spell targeting projected textures like the ones used when targeting Area of Effect spells. If you do not want an AoE texture around the cursor, just enter -1 for this parameter.
     
    bIsHostile
    This tells the engine if you want to use the Hostile Texture column from spelltarget.2da or not. If you entered -1 for nSpellTargetIndex, then this parameter doesn't mean anything. You must enter either "true" or "false", even if you entered -1 for nSpellTargetIndex.
     
    sScriptName
    The name of the script you want to follow. This follows the same restrictions that UIObject_Misc_ExecuteServerScript() usese, in that the script name must start with 'gui_', or else the server will reject the request.
     
    Parameter List
    This is an unlimited list of parameters just like ExecuteServerScript() supports. However, there are a few extra parameters that this function can support:
    target.object - This will replace the parameter with the OBJECT_ID of the object that the user clicked on.
    target.x - This will replace the parameter with the X value of the position that the user clicked on as a float. If the user clicked on a specific object, instead of open ground, then this X will be the position of that object as far as the client knows. Since the client could be a few milliseconds out of synch with the server, the server may consider this object at a slightly different position than the client does.
    target.y - Same as X, except for the Y value of the position vector.
    target.z - Same as X, except for the Z value of the position vector.
     
    For example, if I wanted to create a DM Action button that deleted whatever placeable the DM targetted as well as all placeables within 15 yards of the target, I would create a UIButton with the following callback:
    OnLeftClick=UIObject_Input_ActionTargetScript("placeable",51,53,17,"true","gui_eraseplaceables","target:object")
     
    The number 51 would be for the CURSOR_KILL cursor, the number 53 would be for the CURSOR_NOKILL cursor, the number 17 would be for row 17 in spelltarget.2da whcih is a large circle with a 30 yard width (so 15 yard radius), and the "true" is because I want it to use the hostile texture out of that 2DA. I want to use the clicked on placeable as my starting point, so I go ahead and pass that along as a parameter as well. It will be passed into gui_eraseplaceables as either a string or an int, depending on what parameter I have that script expecting.
     
    Anyway, the list of cursor constants is:
     
    #define MOUSECURSOR_DEFAULT 1
    #define MOUSECURSOR_DEFAULT_DOWN 2
    #define MOUSECURSOR_WALK 3
    #define MOUSECURSOR_WALK_DOWN 4
    #define MOUSECURSOR_NOWALK 5
    #define MOUSECURSOR_NOWALK_DOWN 6
    #define MOUSECURSOR_ATTACK 7
    #define MOUSECURSOR_ATTACK_DOWN 8
    #define MOUSECURSOR_NOATTACK 9
    #define MOUSECURSOR_NOATTACK_DOWN 10
    #define MOUSECURSOR_TALK 11
    #define MOUSECURSOR_TALK_DOWN 12
    #define MOUSECURSOR_NOTALK 13
    #define MOUSECURSOR_NOTALK_DOWN 14
    #define MOUSECURSOR_FOLLOW 15
    #define MOUSECURSOR_FOLLOW_DOWN 16
    #define MOUSECURSOR_EXAMINE 17
    #define MOUSECURSOR_EXAMINE_DOWN 18
    #define MOUSECURSOR_NOEXAMINE 19
    #define MOUSECURSOR_NOEXAMINE_DOWN 20
    #define MOUSECURSOR_TRANSITION 21
    #define MOUSECURSOR_TRANSITION_DOWN 22
    #define MOUSECURSOR_DOOR 23
    #define MOUSECURSOR_DOOR_DOWN 24
    #define MOUSECURSOR_USE 25
    #define MOUSECURSOR_USE_DOWN 26
    #define MOUSECURSOR_NOUSE 27
    #define MOUSECURSOR_NOUSE_DOWN 28
    #define MOUSECURSOR_MAGIC 29
    #define MOUSECURSOR_MAGIC_DOWN 30
    #define MOUSECURSOR_NOMAGIC 31
    #define MOUSECURSOR_NOMAGIC_DOWN 32
    #define MOUSECURSOR_DISARM 33
    #define MOUSECURSOR_DISARM_DOWN 34
    #define MOUSECURSOR_NODISARM 35
    #define MOUSECURSOR_NODISARM_DOWN 36
    #define MOUSECURSOR_ACTION 37
    #define MOUSECURSOR_ACTION_DOWN 38
    #define MOUSECURSOR_NOACTION 39
    #define MOUSECURSOR_NOACTION_DOWN 40
    #define MOUSECURSOR_LOCK 41
    #define MOUSECURSOR_LOCK_DOWN 42
    #define MOUSECURSOR_NOLOCK 43
    #define MOUSECURSOR_NOLOCK_DOWN 44
    #define MOUSECURSOR_PUSHPIN 45
    #define MOUSECURSOR_PUSHPIN_DOWN 46
    #define MOUSECURSOR_CREATE 47
    #define MOUSECURSOR_CREATE_DOWN 48
    #define MOUSECURSOR_NOCREATE 49
    #define MOUSECURSOR_NOCREATE_DOWN 50
    #define MOUSECURSOR_KILL 51
    #define MOUSECURSOR_KILL_DOWN 52
    #define MOUSECURSOR_NOKILL 53
    #define MOUSECURSOR_NOKILL_DOWN 54
    #define MOUSECURSOR_HEAL 55
    #define MOUSECURSOR_HEAL_DOWN 56
    #define MOUSECURSOR_NOHEAL 57
    #define MOUSECURSOR_NOHEAL_DOWN 58
    #define MOUSECURSOR_RUNARROW 59
    #define MOUSECURSOR_WALKARROW 75
    #define MOUSECURSOR_PICKUP 91
    #define MOUSECURSOR_PICKUP_DOWN 92
    #define MOUSECURSOR_CHATBOX_SIZING 99
    #define MOUSECURSOR_NODEFAULT 125
    #define MOUSECURSOR_NODEFAULT_DOWN 126
    #define MOUSECURSOR_MAP 128
    #define MOUSECURSOR_MAP_DOWN 127
    #define MOUSECURSOR_NOMAP 130
    #define MOUSECURSOR_NOMAP_DOWN 129
    #define MOUSECURSOR_WAIT_DOWN 131
    #define MOUSECURSOR_WAIT 132
  24. Rob McGinnis
    Question: Is there any reasonably simple way to change the eye alignment on head models? The eyes on most of the gnome and elf heads are very oddly placed, giving the impression that they are always squinting or looking up. Very distracting in cutscenes- the impression I get from most of the Elves is that of whiny teenagers looking sullenly up at parents while getting yelled at. I get the impression that many of the head models were built in one race and modified to fit one or more others. I am academically curious about whether I'm right about that.
     
    I'm willing to put in the work to fix them, but I don't know where to start, and I notice there is a thread further down about someone who is having problems with custom elf heads being cross eyed. I'm wondering if this isn't similar to the twisted skins on Elf heads in NWN1- weird mesh placement?
    Firefairy
     
    Answer: The eyes are unique for each head. They would have to be manually rotated in the original MAX file to be more consistent with general pivot/alignment of the head. Then the entire head would have to be re-exported.
  25. Rob McGinnis
    1.06 will have a number of new script functions that will give improved control over custom GUIs.
     
    Two of the new script functions are:
     
    SetGUIProgressBarPosition();
     
    This script function will let you set the position of a progress bar (Between 0.0 for empty and 1.0 for full).
     
    The other new function is:
     
    SetGUITexture();
     
    This script function will let you set the texture for a UIIcon, a UIFrame's fill texture, or a Button's Base Frame's fill texture.
     
    Both script functions require the UIScene to be scriptloadable like all the other GUI related scripting functions.
×
×
  • Create New...