The Black Scourge of Candle Cove -- Tchos' development diary
#376
Posté 10 août 2012 - 05:24
#377
Posté 11 août 2012 - 12:50
So I finished the music shop, and added the shopkeepers. Aldanon the Sage makes a fairly decent Väinämöinen, who sells the magical bard equipment. Joukahainen, not being as talented in the singing department, sells the more skald-like style of bard equipment. Building the shops for the two of them took more time than I would have liked, and a search for themed prefab stores on the Vault was unfruitful. Bonus Blueprints comes with a good selection of them, but didn't seem to have any that specialised in bard gear.

Joukahainen also is going to offer a melancholy quest. Maybe I shouldn't have decided to add another side quest, but it was just the perfect opportunity. I've put in the skeleton of it, but I have to stop for the day. It occurs to me that there should be some contrasting lighting by the wares display in the 3rd pic, too, so I'll fix that later.
Modifié par Tchos, 11 août 2012 - 01:31 .
#378
Posté 12 août 2012 - 09:45
The only other news at the moment is that Eguintir Eligard and I have made an informal collaborative agreement in regard to creating new placeables that can be of use to both of our projects, wherein he provides the meshes, and I texture them. I just received several such meshes today, including a versatile plane of the kind I had wanted before, in two orientations, and a singular potion bottle. Others are planned. So I guess there'll be a somewhat more substantial placeable pack than I was expecting to be released. I'll show these once I've textured them.
#379
Posté 13 août 2012 - 08:22
Tchos wrote...
"My Love is Vengeance" --
Behind Blue Eyes?
Nice.
#380
Posté 13 août 2012 - 10:07
In other news, new page placeable:
#381
Posté 13 août 2012 - 11:52
#382
Posté 14 août 2012 - 12:04
#383
Guest_Iveforgotmypassword_*
Posté 14 août 2012 - 08:08
Guest_Iveforgotmypassword_*
#384
Posté 14 août 2012 - 08:45
Maybe it should include things like this handout from Baltron's Beacon: http://dc166.4shared.com/doc/Uo_Gx3lY/preview005.png How many other handouts are there like that from other P&P modules or supplements?
#385
Guest_Iveforgotmypassword_*
Posté 14 août 2012 - 02:47
Guest_Iveforgotmypassword_*
Failing that they'd still be a really good addition to all city and tavern walls.
#386
Posté 14 août 2012 - 10:01
The day's work and obstacles:
For a conversation, I wanted to include a special option for if there's a ranger in the party with fey as a favoured enemy, along with other more general special options. I looked through the available scripts, and didn't find any, either searching for "favoured" or "favored", though I could have sworn I saw a check for something like that once. I also searched on the Vault script sections for both NWN1 and 2. Lastly, I went to Lilac Soul's Script Generator, and chose an option that I'd almost never had occasion to use before, that being the starting conditional. It informed me that what I needed to do was just check for the constant of a feat, since all of the favoured enemy choices are individually numbered feats.
So I ended up just making a new gc_ script that's essentially the same as the "check feat" script, except that it's named for what I want to check (easier to find) and it has a list of all the possible favoured enemies right there in the script comments, where the usual feat-checking script refers you to a larger include file.
Next task was a condition to see if the player speaker is neutral on either of the axes. That seems to be more complicated than it should be. For now, I'm going with a check for "not good" and "not evil", or "not lawful" and "not chaotic", and see if those work. The disadvantage is that true neutral characters will probably see the dialogue option twice if I use the standard check scripts, since they don't handle compound ANDs and ORs.
This is also one of the conversations where I'm including the ability for player-created party members to discuss a course of action amongst themselves. It's in a fairly limited fashion, but since different party members will have different options available to them based on their class, alignment, feats, etc., a typical well-rounded party would likely have some conflicting motivations. There is an opportunity to be evil here, if the player wishes.
One problem, due to the aforementioned options and conditions, is that certain combinations, such as a lawful evil character, may propose doing something evil, and then be able to gainsay him/herself by pointing out that such an action would not be right.
Next I needed to decide between spawning and destroying a creature, or using the "script hidden" property I'd never used before. I decided to try spawning the creature as script hidden, and changing it with a script. Then I found that I was wrong about being able to make anything usable. Apparently trees don't work that way. So I opted for a speak trigger to start things running, where I had intended the player click on the tree to do so. Perhaps it's just as well, though, because I think the description of the tree is an important prelude to the quest, and the player could easily have missed the opportunity to examine the tree, whereas now I'm having the description in the popup DM text window instead. Still, it's an "ambush" style forced conversation, which I don't prefer.
It turns out it was more straightforward to spawn the creature when needed, rather than spawning script hidden. I did cache the creatures who'll be spawned, though, to avoid a stutter on spawn. As a kill quest, it was pretty straightforward to set up, and simple in execution. As is usual in cases like this, it's the writing and story that surround the quest that I intend as the point of interest in playing it, and not the mechanics involved. That's for other quests.
It's possible, though only barely possible, to miss this quest altogether. It's perhaps easier to miss quests back in town, though, because they're mostly inside the dozen-odd individual shops, and there are only two buildings in town that you actually have to enter in order to finish the main quest. This module rewards exploring.
I'm again bothered by how quickly the fights are over, and how little damage is taken by the party.
I'm sort of sad that I never really got to make use of the quest-maker plugins, because by the time I had learned enough to understand how to use them effectively, I had learned enough that I didn't need them in the first place. I would have liked a little more of a honeymoon period. I suppose that's why there aren't very many beginner's utilities out there for this game.
I know there's some built-in functionality in the default scripts to have a creature bark a one-liner when it sees the player and starts attacking, but I can't seem to find documentation on how to use it.
#387
Posté 14 août 2012 - 10:38
The potential downside is that they don't glow when you hit the Z key, so you won't know they're usable unless you hunt around with the cursor. That's not necessarily a bad thing though.
Modifié par DannJ, 14 août 2012 - 10:39 .
#388
Posté 14 août 2012 - 10:41
#389
Posté 14 août 2012 - 10:51
i Guess checks could be done against Search or Spot to bring a chat-notice to the player .....
#390
Posté 15 août 2012 - 01:02
KevL's idea of a trigger that makes a search/spot check is also good. I'm increasingly using hidden items in my modules that don't glow at all when the Z key is used, only making them usable if you pass a search/track check when within the specified search radius.
You don't want to pander to lazy players *too* much.
#391
Posté 15 août 2012 - 06:46
I actually have a trail of "breadcrumbs" leading to this tree. I placed a lootable body near the pathway up to the ledge, to make it easier to find the place, and there are some conspicuous placeables around the tree that should invite further investigation, which are explained in the conversation and DM popup text, so it shouldn't need any spot/survival checks in this case. Furthermore, one of the instances of a quest item that the player should be searching for is located right next to the tree. It's also the only oak tree in the area, but I have a hard time telling it apart from the other trees, myself.
The only reason you might still miss it is because I placed one extra copy of the quest item in the forest, so that players don't get too frustrated in trying to find them, so they might find all of the other ones and miss that one. And the Z key is almost required to find these things, too, because I tinted them to blend in very well with their surroundings. Of course, if you're good at scanning the screen with your mouse, then you can find them that way, too.
#392
Posté 16 août 2012 - 09:32
I had a little problem with a death script, which I based on nw_c2_bossdie, an older script from 2001, but seems to work fine, for the most part. I use scripts like this for generating random treasure on tough fights, and updating journals and such. The problem, which hadn't happened previously, was that it upon killing it, the treasure was generated on the PC rather than on the creature. The script passed the PC through the script "to determine treasure", it said, but I crawled through the referenced functions, and determined that there was really no reason to mention the PC at all, because the treasure generating functions are only supposed to consider the PC if the treasure is being generated on an object. If it's on a creature, then the creature's type and level is the only thing that should determine the treasure. So I removed the reference to the PC in the death script, and left both of the parameters at their defaults of OBJECT_SELF. That fixed the problem.
"Script hidden" was not the best way to have the dryad emerge from and return to her tree. I already mentioned I used a normal spawn to bring her in, but at the end of the quest I tried using script hidden to make her despawn, thinking she would fade away smoothly. Instead, she just abruptly vanishes. I looked around, and didn't find any general purpose "despawn" scripts, but eventually found the ga_force_exit script, and that worked very nicely. I specified her original spawn point, and it made it look like she was re-merging with her tree.
I'm very happy with the way the dryad quest turned out, but I'm speaking as the sort of person who really enjoys playing a good character. I don't know if my evil options will appeal as much to an evil character, because I don't enjoy playing that way, and I would hate to see someone actually take these actions. But the options are there.
All the same, I think in future modules, I can improve things further with a denser packing of quest content into each area. Some of my areas are involved in up to three simultaneous quests, but others have only one. The size of the area matters, of course. But I love areas that have a lot of things to do and see, and a lot of interactions, with a good variety in quest types.
#393
Posté 16 août 2012 - 09:41
Tchos wrote...
I don't know if my evil options will appeal as much to an evil character, because I don't enjoy playing that way, and I would hate to see someone actually take these actions.
#394
Posté 17 août 2012 - 03:26
#395
Posté 17 août 2012 - 10:21
The player must drink a special potion while within a certain proximity to a certain spot. At first I was going to try to use a trigger, and check to see if the player was standing in the trigger, but I didn't know how to do that without setting a variable, which seemed clumsy for this task. Since I had learned about this other command recently, I opted to use the GetDistanceToObject() function on the item's tag-based activation.
Well, that didn't work, and I'm not sure why, but I'm guessing it's because it's checking the distance between the potion and the marker instead of the PC and the marker. That shouldn't make a difference, since the location of the PC should be the same as the location of the potion in the PC's inventory, but I switched it to use GetDistanceBetween() instead, which compares two specific objects, one of which I defined as the PC.
That didn't work either, and after I put in some debug text to find out what was going on, I was getting a distance of 0.0f, which the docs said would happen if one of the objects was invalid. I rechecked my tags, and all seemed fine.
Eventually the bit about environmental objects and objects with 0 HP not working with scripts came back to me, and I checked the object I had chosen as the marker. It was an environmental object. Fixed that, and the script worked...but with another problem.
Somehow, it was getting a valid distance between me and the target even when I wasn't even in the same area. I used my debug text and was actually able to home in on the hotspot by watching the distance report get smaller and smaller until it reached the necessary proximity to fire the script, even though I was in a different area (Questland), and there weren't even any placeables around. So I determined that I needed to add a check to the script to see if the player is in the correct area first. That fixed it, but I wonder why it happened.
I had a lot of trouble staying focused today, unless you count spending hours reading forum posts. The necessity of opening problem areas many times compounded this lack of focus, because the toolset crashed at least a dozen times during my troubleshooting and testing efforts.
After adding that check, I needed to script a light on and off. Luckily, I had just read something on the forums about lights not being scriptable as easily as one would expect, due to losing their tags somehow during saving or loading. I found the workaround, and the light switching on and off works fine with GetNearestObject(OBJECT_TYPE_LIGHT,oTarget);.
I learned today that setting the plot flag on a chest or a door, which I had been doing to prevent them from being accidentally destroyed by AoE, prevents them from being unlocked with the Knock spell. That's undesired behaviour. I'll revise the problematic items by giving them ample hit points instead.
Next I needed to change the music during the event, and change it back afterward. I found the necessary commands (save, restore, set, start, and stop) in the ginc_sound include file, and imported the needed custom track. I'll have to stop there for the day, though, and script it into the event later.
#396
Posté 18 août 2012 - 12:36
You can just give your chests a silly high amount of hitpoints.Tchos wrote...
Today I worked on an "event" at the climax of a quest. Again, the sort of thing that would ordinarily be handled by a cutscene, but which I'm doing in the freeform style as before. Also needed to import another icon for a quest item related to this event.
The player must drink a special potion while within a certain proximity to a certain spot. At first I was going to try to use a trigger, and check to see if the player was standing in the trigger, but I didn't know how to do that without setting a variable, which seemed clumsy for this task. Since I had learned about this other command recently, I opted to use the GetDistanceToObject() function on the item's tag-based activation.
Well, that didn't work, and I'm not sure why, but I'm guessing it's because it's checking the distance between the potion and the marker instead of the PC and the marker. That shouldn't make a difference, since the location of the PC should be the same as the location of the potion in the PC's inventory, but I switched it to use GetDistanceBetween() instead, which compares two specific objects, one of which I defined as the PC.
That didn't work either, and after I put in some debug text to find out what was going on, I was getting a distance of 0.0f, which the docs said would happen if one of the objects was invalid. I rechecked my tags, and all seemed fine.
Eventually the bit about environmental objects and objects with 0 HP not working with scripts came back to me, and I checked the object I had chosen as the marker. It was an environmental object. Fixed that, and the script worked...but with another problem.
Somehow, it was getting a valid distance between me and the target even when I wasn't even in the same area. I used my debug text and was actually able to home in on the hotspot by watching the distance report get smaller and smaller until it reached the necessary proximity to fire the script, even though I was in a different area (Questland), and there weren't even any placeables around. So I determined that I needed to add a check to the script to see if the player is in the correct area first. That fixed it, but I wonder why it happened.
I had a lot of trouble staying focused today, unless you count spending hours reading forum posts. The necessity of opening problem areas many times compounded this lack of focus, because the toolset crashed at least a dozen times during my troubleshooting and testing efforts.
After adding that check, I needed to script a light on and off. Luckily, I had just read something on the forums about lights not being scriptable as easily as one would expect, due to losing their tags somehow during saving or loading. I found the workaround, and the light switching on and off works fine with GetNearestObject(OBJECT_TYPE_LIGHT,oTarget);.
I learned today that setting the plot flag on a chest or a door, which I had been doing to prevent them from being accidentally destroyed by AoE, prevents them from being unlocked with the Knock spell. That's undesired behaviour. I'll revise the problematic items by giving them ample hit points instead.
Next I needed to change the music during the event, and change it back afterward. I found the necessary commands (save, restore, set, start, and stop) in the ginc_sound include file, and imported the needed custom track. I'll have to stop there for the day, though, and script it into the event later.
As for detecting, there are stock functions to detect in ranges and in triggers. I'd have to dig it up, but I'm using that code myself.
It's impossible to constantly be focused, we're human.
#397
Posté 18 août 2012 - 01:04
string sCurrentArea = GetTag(GetArea(oPC));
object oHotspot = GetObjectByTag("plc_ml_fountain_arcane");
float fHotspot = GetDistanceBetween(oHotspot, oPC);
// A distance of 0.0f is reported if an object is invalid.
// 6.0m is the distance from the arcane nexus to the first bone pile you encounter.
if ((fHotspot > 6.2) || (fHotspot == 0.0))
{
AssignCommand(oPC, SpeakString("You must drink this potion near the arcane nexus in the Ruins of Linanoroc."));
return;
}
Modifié par Tchos, 18 août 2012 - 01:06 .
#398
Posté 18 août 2012 - 01:15
GetFirstObjectInShape
GetNextObjectInShape
with SHAPE_SPHERE (since this give you a circle of radius x)
to get objects in triggers, use
GetFirstInPersistentObject
GetNextInPersistentObject
I can't find my examples, but the usage is fairly straightforward and judging by the coding bits you've shown I wouldn't expect you to have any significant trouble with them.
#399
Posté 18 août 2012 - 01:56
I forgot to mention, in regard to making wanted poster placeables -- I was looking for examples of actual historical wanted posters to see how they handled pictures, but I ran across this generator. The font isn't very readable in most of it, but I'm sure there are some others out there. This could be useful for anyone who wants a shortcut to creating a texture for the placeable from scratch. I used one of the early character concept sketches from the NWN2 OC.

Yes, it occured to me too late that I made the reward amount far too low.
#400
Guest_Iveforgotmypassword_*
Posté 19 août 2012 - 06:00
Guest_Iveforgotmypassword_*





Retour en haut





