Jump to content
  • Announcements

    • AndalayBay

      Orphan Attachments   07/31/2018

      I have been doing some housekeeping lately and I've noticed that I had a lot of orphaned attachments. Attachments get orphaned when the PM or post is deleted without removing the attachment first. Deleting a PM or post does not delete the attachment and the file or image remain on the server. I'd like to ask all members to go through their attachments and delete any attachments you don't need anymore or those that have been orphaned. Where can I get a list of my attachments? Click on your display name in the upper right corner of the forums and pick "My Attachments" from the drop-down list. How can I tell an attachment is orphaned? If the PM has been deleted, you'll see a message like this in your attachment list: Unfortunately there is no message if the post has been deleted, so please check your old posts. We do purge old birthday threads every once in a while. Also some hosted projects have been shut down, so you may have orphaned attachments on one of those locations. Thanks!


  • Content count

  • Joined

  • Last visited

Posts posted by HoundAkragth

  1. 22 hours ago, puddles said:

    @HoundAkragth Lighter? Darker? Completely the wrong sort of texture?

    Sorry, been really busy. Technically, doing this on my lunch hour. Er, would an image of pemmican help? The attached should be it.

    T'be honest, pemmican's highly dependent on what it's made from; more tallow, and it's whiter. The redder the original meat, the generally darker the resulting jerky and pemmican. The finer ground the jerky, the less mottled it looks. It could, as shown below, be solid brown. Everything except the obviously plants things is pemmican.

    I personally think it looks fine, but I've never been picky with textures.


  2. 53 minutes ago, puddles said:

    Yeah, I know the feeling. It’s my busy season at work, but at least I’m only hitting 9 hour days.

    Is this supposed to be pemmican strips, or “pemmican blobs”?

    Pemmican's like clay before the tallow cools completely, so any shape you care to make them is fine. I was personally thinking "protein bar". And now I seriously should probably get to work instead of messaging on my cellphone before my boss starts yelling.

  3. 7 hours ago, puddles said:

    Unless you already have someone on the pemmican MU, I can surely whip up something for that when I get you the Bosmer Fire this week/weekend. I found a texture for it, I just want to bake the ambient occlusion onto the texture via Blender.

    Go ahead if you want to; I'm drowned under work this week yet again. Pulling fifteen hour days is not fun.

  4. 1 hour ago, Munch Universe said:

    Hammering a hardwood or softwood plank to make a wood panel is not working. The script is running and recognizes the hammer, but the menu isn't coming up and I'm not scoring any hits on the board. I've tried some debugging but without success. HoundAkragth, if you find the time, perhaps you can have a look and see if you spot anything amiss.

    CBWoodHammerQS is the script in question. CBWoodCarvingQS is very similar, just uses a blade instead of a hammer and it is running as it should. That may help to track down the problem. I'll have a look myself in the AM when I'm fresh but right now I'm just spinning my wheels.

    Tried making the if statement for hammering staves as another elseif for the plank/harrada instead of as a standalone if statement?

    if eval rTarget.GetIsID CBPlankHard == 1 ||  rTarget.GetIsID CBPlankSoft || rTarget.GetIsID CBPlankSalv
    elseif eval rTarget.GetIsID CBStaveHarrada
    elseif eval ( CompareName stave rTarget == 1)
           set Reset to 1
            ; DebugPrint "CBWoodHammerQS: No valid target found"

    To clarify, what we had before we started patching was something like:

    if eval ( CompareName stave rTarget == 1)
    elseif eval rTarget.GetIsID CBPlankHard == 1 ||  rTarget.GetIsID CBPlankSoft || rTarget.GetIsID CBPlankSalv
    elseif eval rTarget.GetIsID CBStaveHarrada
           set Reset to 1
           ; DebugPrint "CBWoodHammerQS: No valid target found"

    We'd hit the elseif for stave, first, and that'd set everything to stave construction.

    Afterwards, if eval ( CompareName stave rTarget == 1 && Mode != 30 && Messaged != 3 ) ;ensure harrada construction has not initiatedwas placed after the else set Reset to 1.

    T'be honest, I haven't been getting that same error. A tad bit of a lag and the script resetting & stopping before the messagebox came up and thus needing to try again, but that's it.

  5. 1 hour ago, Munch Universe said:

    So far we haven't used any command specific to OBSE 21, but there are some from OBSE 20, so that is what we've been using as the requirement. Given the slightest need, I wouldn't hesitate to require 21, there just hasn't been a need so far.

    Music is working, at least to a degree. It could be that it isn't working on all NPCs, but certainly it works on some, since I've tested it and seen things added to the basket. Even if it is slightly broken, it may not matter since the in-game result seems about right. Which is not to say that I am not interested in a fix, only that I had no idea there was a problem. I appreciate the help. As HoundAkragth pointed out, the first problem is figuring out how to test it properly. 

    If the basket is not set to be owned by the player, what happens when the player finishes and goes to pick up the basket? Without SetOwnership, the ownership is that of the ground it is placed on. Sometimes that won't be a problem, but in other instances it could lead to your basket belonging to someone else. There may be an easy way around that problem, but it could be a problem that needs to be dealt with. The MusicBasket is a permanent reference, normally stored in the basement of the CBGuildHall, a hidden cell added by CB, and transported to the player as needed. Perhaps if it is assigned to the player first, SetOwnership isn't needed. SetOwnership is also a bit tricky because I've found it often behaves like a return or at least can impact code downstream of itself. So I try to put it as late in a block of code as possible.

    Thanks for the tips regarding the BonePile. It tests successfully in game, but it is possible I've always opened the bone pile when testing and thus never seen the problem. I'll get back to you on the CBKey suggestions. They look good.

    Don't think you can pick up the basket? If I'm not wrong, activating the basket won't do anything but give you the message you need to put away the Lute. And putting away the lute actually just disables and... I think deletes the reference. It certainly goes nowhere near the inventory, though I'm not entirely certain what would happen if the player tried to activate an activator belonging to someone.

    ...Can activators be picked up? It doesn't appear to actually be an item that can...

    Anyway. Basically, I was noticing Isault (I may be misspelling as this is all from off the top of my head and 2:11 AM in the morning for me) wouldn't donate, at all; neither would Cam. Check the script package they were on - was the one for finding the activator object - and forcing them to evaluate the package looked like they walked over... and refused to activate said object. I toggled SetOwnership to Isault, worked fine. Removed SetOwnership, worked fine. Lowered responsibility to pretty low, looked like it worked fine. So... Workaround? Sure, probably. I need more testing b/c I hadn't tried it on Cam yet.

  6. 52 minutes ago, AndalayBay said:

    A find package is used to find an object. The object has to be persistent. If you want the NPC to activate an activator, I don’t think a find package will work. I took a look at the various package types and I’m not sure what would get an NPC to activate an activator. That has to be doable though. I would look at the various activators in the game, do a text search for the editor ID and see if I could find one that’s the object of an AI package. If you can’t find one, then another option would be to use a marker in a trigger zone. Give the NPC a travel package to the marker, which would set off the trigger zone. Then have the trigger zone set off your activator. Yeah, that’s ugly. Hopefully there is a package that would get an NPC to activate an activator. Actually you could probably just get the NPC to travel to the activator. Put a trigger zone around your activator and it would trigger your activator. It doesn’t look like a travel package to an activator would get an NPC to activate it, but it’s worth a try.

    Hm. Then to all appearances this shouldn't be working at all, even to the extent it is. What's getting some - but not all - NPCs to activate it? Thanks, though. I'll go see if there is an example of an activator + AI package.

  7. 7 minutes ago, AndalayBay said:

    I haven’t been following your discussion, but I’d like to give you guys a caution based on your last post, @HoundAkragth. NPC’s can’t access a container with a script unless your mod requires OBSE 21+. I believe that shadeMe was able to fix the bug with OBSE. We discovered the bug when we had eat packages for the NPC’s in Dark Brotherhood Chronicles that included the NPC getting something to eat from a container. If you need NPC’s to access containers, then giving them an eat package with no food in their inventory is an easy way to test the fix. Combine that with low responsibility and an aggression of 20 and fights will break out.

    It's an activator, not a container, but thanks for the tip and I'll keep it in mind for the future. It's the Find Package for AI Packages I was having issues with, if you could shed some light?

  8. There's something wrong with the Music AI package; I think it's because a responsible AI (I don't know how high/low the setting needs to be) doesn't want to try activating an item with an ownership that is set to the player? Removing CBMusicLuteOS's rBasket.setOwnership works fairly well, but I haven't thoroughly tested.

    Took me a while to hunt down just why the AI might not want to activate the basket.

  9. Still working on getting through the smithing scripts and the music one, and it might be slower this weekend.


    elseif eval( iProc == 1 ); equippables
    	set Equip to 1

    The comment seems erroneous. iProc 1 seems to be for ingredient conversions, and set Equip to 1 results in attempting to equip the base item, which results in situations like when I try to convert a mod-added meat item to the generic Meat item, eating said mod-added meat if there's more in the inventory.

    Also, why not rConvRef.GetRefCount so we can convert stacks? Although that might be just a limitation of the engine.

    if eval( Equip == 1 && IsFormValid rConvRef == 1 )
    	set rNewItem to rConvRef.GetBaseObject
    	Player.EquipItem rNewItem

    Missing the rConvRef.Activate here to pick up said item before attempting to equip it.

    if eval( nameIncludes $sInclude rConvRef && GetObjectType rConvRef != 25 )

    This runs whether or not IProc == 1. IProc == 2 also needs to search by name, and they're not necessarily ingredient items; testing says it fried the knife -> chopping knife conversion. May want to check arTemp["Value"][4] is equal to 1 before bailing out based on the rConvRef item type.


    if eval( ar_HasKey arTemp["Value"][4] && arTemp["Value"][4] == 1 &&  GetObjecType rConvRef != 25)

    right after ForEach arTemp <- arConvert to skip the whole for loop iteration if we're concerned about time.


    This doesn't quite work properly; deletion / disabling never triggers unless TimeSet == 2, and TimeSet == 2 only when the bonepile's been opened. There's only a few ways that the disable + deletion code can run to completion. One, the bonepile has been opened, there's an item in the bone pile, but then the item is removed the second time the bone pile is opened. Or two, the bone pile has timed out and the pile is empty and the pile is opened again.

    Bit of a mess, that logic; I rearranged it. I do tend to favor having only one state variable. It makes my life easier.


    Scn CBSkinBonePileOS
    ; attached to the Meat Pile to hold bones for optional use
    short TimeSet
    short Empty
    float fSkinTime
    float fTimer
    ref rInv
    ref rContainer
    BEGIN GameMode
    	; "TimeSet" == Mode Stage
    	; -1 = Done
    	; 0  = Start
    	; 1  = Wait
    	; 2  = Check For Items
    	; 3  = Disable Actor
    	; 4  = Delete Actor
    	if eval (Empty == 1) ; legacy code to make sure things in the state of empty = 1 get where they need to be.
    		set TimeSet to 3
    	elseif eval (Empty == 2)
    		set TimeSet to 4
    	if eval (TimeSet == -1) ; nothing to do on script
    	elseif eval (TimeSet == 0) ; setup
    		set fSkinTime to GameDaysPassed
    		set TimeSet to 1
    		if eval (fTimer != 0)
    			set fTimer to 0 ; initialize the float
    	elseif eval TimeSet == 1 ; Wait for either timing out, or opened menu
    		if eval (GameDaysPassed >= (fSkinTime + 1)) ; if there's been more than one day, delete
    			set TimeSet to 3
    	elseif eval (TimeSet == 2) ; check to see if there's any bones in the pile
    		set rContainer to GetSelf
    		set TimeSet to 3 ; if there's nothing in the pile, delete
    		if eval (GetNumItems > 0) ; check for bones if there's items.
    			ForEach rInv <- rContainer
    				if eval(CompareName bone rInv)
    					set TimeSet to 1 ; go back to waiting if pile contains bones.
    					printc "CBSkinBonePileOS: Bone Pile not empty."
    	elseif eval(TimeSet == 3) ; disable item
    		set TimeSet to 4
    	elseif eval(TimeSet == 4) ; delete item
    		if eval(fTimer > 1.5)
    			set TimeSet to -1 ; end script after done with deletion
    		set fTimer to (fTimer + GetSecondsPassed)
    	else ; contingency that should never be hit, but sends the pile straight to disable + delete
    		set fTimer to 0 ; just in case TimeSet == 0 was never run
    		set TimeSet to 3 ; send to disable
    BEGIN OnLoad
    	if eval TimeSet == 1
    		if eval GameDaysPassed >= (fSkinTime + 1)
    			set TimeSet to 3 ; second backup mechanism to check time
    BEGIN MenuMode 1008
    	if eval TimeSet == 1
    		set TimeSet to 2 ; signals menu was opened, check for bones when back in game mode
    		printC "CBSkinBonePileOS: TimeSet set to 2"



  10. 10 hours ago, Munch Universe said:

    Regarding forging rings, I guess the truth is that we never really thought about it in any detail. I implemented it but I think CLShade and Ben were involved in conceiving of it. Now that you mention it, you have a point. It depends on what metal is being used. Gold, silver and copper melt at forge temperatures so that casting is an option. To fully melt Iron needs higher temperatures not readily achieved in a forge without bellows and I think even then the temperatures are better for getting it hot enough to work but perhaps not enough to liquify. One argument for casting is to illustrate the process, even if hammering would be another way to get the same result.

    I'm afraid I don't quite track what you mean with "tanning". As in tanning leather? But if so, what does that have to do with nutrition? Or do you mean as in skin becoming tanner? 

    Assuming you are talking about tanning leather, that was intended and might well have been the next major thing to be implemented. Introducing bulk salt was, in part, preparation for tanning. We have acorns to provide tannic acid and urine can be assumed to be readily available. I think what pushed this down the list of things to do is that making leather production take some time and more complicated leaves it less useful to the player than metal forging. We already have that problem with clothing, where there is a nice tailoring system but it is involved enough that the player needs to work hard for something relatively cheap while something rare and expensive can be made with comparative ease. There is no obvious solution to this problem because making smithing even more complicated does not seem wise, in this case more from the scripting side because the player experience isn't overly complicated.

    I'm looking forward to see what you come up with for the retexture. If nothing else, it is enough of a change to rate a short explanation and perhaps gather a little attention on the Nexus for a week.

    Depends on the forge, but yeah, they do fall a tad short for casting iron - taffy is probably what's typically seen - and frankly even if it were possible cast swords lack the... structure that hot-forging give them; it's better to forge a sword than cast given anything but modern technology if I remember right, and I wouldn't say that modern technology can produce a brilliant sword with just casting. Aside from that, I frankly personally think the weight cost for ore and materials and for the 'portable' forge is rather low; for that weight cost I'd say make jewelry with it and nothing else but on the other hand I don't want to make my life any harder. Probably a smelter/bloomery on top of the forge furnace. Too tired to think clearly, though.

    I was talking about tanning leather, yeah. The vegetable tanning method and not the braining method? Interesting. So. Uh. If you wanted to simplify for the player, you could leave it at defleshing hide and then putting hide into barrel of tannic acid for a few weeks. Time consuming, but simple. Curing - the salt - isn't... entirely critical. Can be skipped, if the process is started quickly enough. The urine/lye is... not completely necessary, although it makes the process quicker by enhancing the tannic acid's effectiveness among other things, but a bit more effort defleshing+dehairing and an application of tannic acid or letting it rot just enough to loosen hair works adequately. Technically speaking, the only part I'm seriously missing is taking the hides out once for further dehairing and defleshing before putting it back in the tannic acid. But yes, salt and urine / wood ash lye does make success rates higher and the results can be thicker and therefore more suitable for armor.

    For armor, though, boiled leather probably will be necessary after making normal leather. Or maybe not, I'm not sure. There's a lot of post-tanning treatments that can be done for leather to 'improve' or add one trait or another.

  11. 20 hours ago, Munch Universe said:

    Thanks for the warning. If Oblivion was a strictly medieval European simulation, pemmican would be out of scope. But as you are certainly aware, Bethesda didn't design the game to be a strict medieval European simulation. In fact TES3 Morrowind leans pretty heavily on Native American culture and as you point out, the flora (and fauna) are not all derived from Europe. We've talked out this kind of thing in the team in the past. We do have the ambition of trying to be "realistic" but it is best to take the games and lore as a given, describing a foreign civilization on a foreign planet at some unknown time in history. If you consider the level of technology, it depends a bit on where you look. For the most part it is roughly Renaissance (availability of full plate wasn't until around 1500 plus or minus 2 decades) but the ships are probably about a century more advanced. The Dwemer ruins employ steam technology which is roughly Victorian in look and feel, but given that it works without maintenance for thousands of years, it is far more advanced than anything we have today. So Bethesda doesn't make it easy for us.

    I'm guessing what you are calling protein poisoning is gout, a very painful swelling of the joints as a result of the accumulation of urea in the blood, which precipitates and forms deposits in the joints. Scurvy is caused by a lack of vitamin C and indeed, flavourings can help to provide at least some of the required vitamins. Most of these would affect the player over a time scale a bit long for the game. I suppose you could play for a year or two of game time, but in my experience about 2 months will get you through the main quest pretty easily. The whole disease system in Oblivion and all the TES games is really pretty absurd, but there probably is no good solution to the problem. Imagine playing for 7 weeks of game time and on the threshold of completing the main quest, your character comes down with the plague and dies. It would be entirely realistic and entirely frustrating. So sometimes we need to concede the limitations of the format and not worry too much about "realism". 

    Don't worry too much about digressions. Often they lead to interesting ideas. I'm old school. An email which is longer than 2 paragraphs is not impolite in my book. If you know a lot of "useless" information, you are perfect for CB, since it is mostly a collection of "useless" information. The whole point to being interested in "realism" is so that stuff you learn in the context of playing a silly game might actually relate a bit to the real world and teach you something you may profit from. We strip complicated activities down into a few steps, but you do gain a little insight into things like cooking, construction and smithing. Maybe it is enough to spark some interest and get someone to look into these things in the real world. To me, that would be the real pay off for taking the time to develop CB, along with the comradeship of the virtual friends I make this way.

    EDIT: With regard to the retexture, we are not in a hurry and if you would like to do it, that would be great. 

    Whoops. Yeah, Renaissance is closer in time period. But that's very true; TES isn't a very exact match for any period in history, and then there's magic, in which I also include alchemy. There's also materials that don't exist in the real world, whose properties may have some technological implications. I wouldn't be terribly surprised if some inns had a refrigerator kept cold by frost salts, and there's been a bit in Skyrim about fire salts powering a forge (hmm... that's something that niggles my mind with an idea).

    Protein poisoning's not quite gout. It is literally what its common moniker sounds like: starving to death (on a pure lean meat diet). Gout can result as a complication, though, and protein toxicity. Anyway, there's a limit to how much protein a human can convert into calories and process in a single day, which is unfortunately well below the calories needed to maintain weight. Beyond that much protein, eating more protein provides no more energy than eating dirt does. The symptoms will manifest in under two weeks and on average about a week - diarrhea, malaise, lethargy, slow heartbeat. Exactly what is the killer isn't certain - could be the high urea and ammonia in the blood, could be the organ failure caused by starvation, but the time that it takes seems to align with how long it takes to starve: about two to three months, assuming there is water. The cure's pretty simple: eat less protein, eat more fat and carbohydrates. The recommendation is that over fifty percent of caloric intake should be carbohydrates and fat.

    I wouldn't want to implement this, as it makes things more complicated than necessary. Nor would I be terribly concerned with nutrition deficiencies for CB; most of them take months, and even years as you said and are impractical for the game.

    As for how the disease system works, at this point I've slapped a "MAGIC" label on it. Along with a lot of minor things. Like how we're carrying around bloody pieces of meat for weeks on end without it going bad. Or how we're carrying six pieces of torso armor, a pair of boots and five warhammers (I'm exaggerating).

    I do have a question - I don't want changes resulting from this - but is there a reason why ya'll decided on casting for jewelry instead of forging? I understand why hot forging - one, it's more... universally applicable and two, iron and steel weapons aren't cold-forged due to numerous reasons, and I do have some idea of why casting, but I was wondering.

    And another question is about tanning. Was it because of the same time scale issue about nutrition deficiencies that it wasn't implemented?

    I'll see if I can manage the retexture on the weekend, then.

  12. 8 hours ago, Munch Universe said:

    Pemmican sounds interesting. For us modern types, whose exercise often consists of pushing keys on the keyboard, it might not be such a good thing. But for a hero in a cold environment full of hard physical exercise, it is certain to be a good thing. A basic version would be easy, just add tallow instead of salt. Flavorings are tempting, but would require a fair bit more effort to integrate into the existing scripting. I'd be tempted to give pemmican a low level bonus property due to the wealth of calories it would provide.

    Your approach to testing sounds brilliant. If nothing else, putting a second pair of eyes on the code will help because often one gets trapped in a particular way of seeing things, then just never questions them again. Your fix to the bait problem, for example, immediately made sense to me but I failed to spot the problem until you pointed it out.

    I know my way around GIMP2 well enough to retexture things reasonably well. Though when it comes to things like spectral properties, that tends to be a bit over my head. I know enough to recognize a problem but not necessarily how to fix it. I looked at Blender, then decided not to learn how to use it. It was a deliberate decision because I'm busy enough with the scripting that I didn't want to pile that on top as well. In addition, I like working with collaborators and if I can't find someone who is interested enough in a particular project to devote some time to modelling, then it probably isn't worth doing. In principle CB is so open ended that there is almost no limit to what could be done in its context. So it is useful to have some way to check if something is really worth doing. 

    Another thing I tend to factor in a lot, but almost no one else can, present company most likely excluded, is how hard it is to make a change. Take pemmican, for example. Given a suitable model, the scripts will only need an extra line or two. The whole thing won't take 30 minutes. So even if it is relatively low value, it is so easy it is worth doing. Something of high value would be to restructure construction to use a series of wood pieces of different sizes and shapes. It would make CB a fair bit more realistic, but it would require redoing a large number of items, rewriting a dozen scripts, would create compatibility problems with existing saves and may end up weighing the mod down with excessive detail. We wanted to go in that direction some day but the hurdles were just too high to launch into it while the team was still active and we never got to it.

    One of the efforts I'm particularly proud of is the barrels. A skilled animator, Koniption, created the barrels and animated them, then I rigged up the scripting. It was one of those cases where she couldn't have done the complex scripting they took and I couldn't have done the animation without spending a year learning how to do such things well. But together we produced something pretty spectacular. I realize most players probably barely notice, but in a way that is good, too. If everything goes so smoothly and immersively that it seems normal, that is a good thing. Unfortunately Koniption ran into some health problems and retired from modding, as far as I know. I haven't heard from her in a number of years.

    Coming back to pemmican, it sounds like a retexture it all it would take. That might take an extra hour, so it is no big deal. GIMP2 needs an extension to handle what Oblivion needs of it (normal mapping), but is otherwise not hard to learn or use. If you are feeling ambitious and would like to take a crack at it, I'd be happy to explain. If you'd rather not, I can do it. To be honest, it would probably take less time for me to do it myself than to explain how to do it but I'd be happy to teach you how to use GIMP2, if you would like. 

    I wish that the scripts weren't embedded in the esp/esm because I'd be able to take a look at the logic and take notes while my Windows machine is inaccessible, but oh well. I'll test the fixes you implement when I can in a few days.

    Ah - I didn't realize the editor for textures was GIMP2. Probably should have. It's actually my primary image editor outside of Windows. If you get around to retexturing before the weekend, go ahead and just do it, but if not I can see if I can manage it. Should be fun.

    I'd agree with you on the barrels as something to be proud of. Those are neat. If I remember right, there's a transition for the brewing between empty to grain-filled?

    So, as a warning before trying to implement pemmican - it's not period-accurate for the medieval period Oblivion is based off of; it didn't exist in Europe until the colonial era. It did, however exist for the Native Americans, so there's that. If period accuracy is a concern, don't bother. Then again, tomatoes are also not period-accurate. So up to you.

    Pemmican's the historical equivalent of protein bars, with fat instead of sugar, so yes, just like adding a protein bar to a normal modern diet without a corresponding increase in exercise, it would be a bad idea to do the same. It is, however, unlike jerky, something that a human can survive on for months before hitting problems. Jerky alone will result in protein poisoning - probably more familiar as rabbit starvation - in a matter of a few weeks. The flavorings actually aren't just for flavor; they're to increase the time before malnutrition sets in - scurvy, etc - but I'm digressing. I know a lot of useless information like this.

  13. Pemmican's ground jerky + melted fat (usually from tallow or tallow-like fat products). It can be flavored with other things, like onions and berries and stuff, but the base is jerky + tallow. The tallow's to turn loose protein fibers and powder into a solid chunk of browned protein once it cools and re-congeals, but also to add oils and fats that jerky loses in the process of making it. I suggested it mainly because I ended up with extra animal fat a lot and it is a traditional trail food, and I think a retextured tallow or clay chunk could probably do just fine as a model.  Mottled brown, brown-red instead of gray/yellow/whatever color it was.

    As for looking through the code, I've found that going through the code first gives me ideas on what would be edge cases and then I can go test them in-game; they usually end up exercising the normal part of the code as well. Any of that, unfortunately, will have to wait for the weekend. I don't have access to the computer that contains Windows until then.

    I haven't done much with smithing, unfortunately.  I think I used the forge to make a few iron bars and arrowheads, but there's a bit of a gateway there in terms of armorer skill and resources and I didn't start on the new character until fairly recently.

    You do some modeling for this, I presume? I actually know pretty much nothing about modeling. :(

  14. I'm happy to help and I think I'm half in love with the code. It's sensibly named, well ordered, and doesn't try breaking my brain. I can draw state machines off this. T'be honest looking at how well it was written, I don't think you need any help with the "fixing" part of it, it's just that I'm not too good at describing problems and go straight to the fixing part. Me, words, no mixy. I do better with code. And state machine diagrams.

    The bit I'm most impressed with is the barding / music and the cooking; both feel complicated and work quite smoothly. One of the smaller bits that I liked that wasn't that big was the ability to make jerky without salt. I see that all too rarely. I'd love to be able to make pemmican too, but it's nice enough that I can make jerky without salt.

    I can see if I can shell out some time on the weekend to poke through the rest of the scripts if you'd like? The above I encountered through gameplay, but there's bits I wouldn't be likely to do with my playstyle and bits I wouldn't notice in-game like clean up.

  15. So, er. The same HoundAkragth here as quoted. CB 0.812.2 and OBSE 21 from CLS-Craftybits_Complete_08122.7z.

    This is mostly me reading off the code to guess at what's intended. You have very sensible code I can actually mostly trace. Some of this has already been said but I thought I'd collate this as a record. If you need me to post this elsewhere, I can do so.

    Also, do note that I didn't take that much time to do more than what I'd call patching. Some of these could use with a more comprehensive fix than what I've given them.

    Canoe Frame:

    Mostly, this is a case of "Adding a Container Object to a Actor". Since I'm packing the new items... Yeah. Suggest CBCanoeFramePlacer instead of CBCanoeFrameC. Work-around is simply not to use Pack New Items.

    Fish Trap Not Catching Fish:

    This only happens if the player hasn't put bait into the Fish Trap; waiting several days doesn't help to add fish to the trap.

    I found that the script would not run any of the commands after the removeItem in this if there wasn't any bait -

    	rFishTrap.removeItem rBait 1
    	rFishTrap.addItem rFish 1
    	set rFish to 0
    	set FishFlag to 1

    So, here's the suggestion (which has been mildly tested) -

    	rFishTrap.addItem rFish 1
    	set rFish to 0
    	set FishFlag to 1
    	if eval (IsFormValid rBait == 1)
    		rFishTrap.removeItem rBait 1

    Stave Aging:

    It still doesn't age even if the time interval is set to zero. As both the Gnarl and the Spriggan scripts both use 30, there may have been a change somewhere that removed that 'other script'.

    I don't actually have much of a comment on using a barrel to age the staves, actually. It doesn't make much of difference for me as the aging barrels over the time period the staves need to age tend to fall beneath the ground anyway and I don't have the best grasp on how the cell reference deletions work. Practically speaking I'd probably end up dragging said barrel around via grab key anyway and at least a barrel would be less likely to end up flung under the ground when I dropped it to start fighting.


    Bathing is resetting before it gets to the actual bathing part of the script; I don't think it's a serious problem as the only things that are done in Bathe > 0 is remove "getting sick", maybe losing a soap bar, and adding the soap effects, but it'd have been nice to see the messages that are in those sections to make sure it's been done.

    CBKey + Fish:

    The culprit for the CBKey and fish error where all objects with names containing fish are turned into fish fillets is in CBMstCBKeyInitOS at the top where it's creating -

    let CBKeyQ.arConvert[ix] := ar_Construct Map
    let CBKeyQ.arConvert[ix][1] := ar_Construct Map
    let CBKeyQ.arConvert[ix][1][0]:= "Fish"
    let CBKeyQ.arConvert[ix][4] := 1
    let CBKeyQ.arConvert[ix][5] := CBFishGenericFillet

    CBMstCBKeyQS detects anything containing Fish in its name as a iProc == 1 and then does its conversion. Mind you, I don't know if that's supposed to be there at all. I'd recommend adding Amur Catfish to the exclusions if it is and probably "Fish Trap" and "Fishing Boat" -

    let CBKeyQ.arConvert[ix] := ar_Construct Map
    let CBKeyQ.arConvert[ix][1] := ar_Construct Map
    let CBKeyQ.arConvert[ix][1][0]:= "Fish"
    let CBKeyQ.arConvert[ix][2] := ar_Construct Map
    let CBKeyQ.arConvert[ix][2][0] := "Amur Catfish"
    let CBKeyQ.arConvert[ix][2][1] := "Fish Trap"
    let CBKeyQ.arConvert[ix][2][2] := "Fishing Boat"
    let CBKeyQ.arConvert[ix][4] := 1
    let CBKeyQ.arConvert[ix][5] := CBFishGenericFillet

    Also, I'm not entirely sure why iProc == 1 handles both ingredient conversion and equipping items. I'd actually recommend taking equipping weapons out of iProc == 1 - remove set Equip to 1 from the script. The EquipItem the Equip flag allows breaks things when it runs on things that aren't valid inventory items.

    What I'd recommend doing for iProc == 1 is -

    set Mode to 99
    if eval(rConvItem.GetObjectType == 25)
        Player.PlayGroup CastTouchAlt 1
        Player.AddItem rNew 1
        set rTargetDel to rConvRef
        set DelUnused to 1

    The reasoning for the 25 is because that's the integer for ingredients, and iProc 1 seems to be ingredients-only. Not to mention without the equip, there won't be a stuck CB Key from that vector. There's a better way of doing this, by the way of doing the rConvItem object type check before breaking out of the for loop walking through the conversion array so the exclusions above are unnecessary, but I should think that the type check could be left in anyway.

    And then for equipping items, instead of eval( Equip == 1) in Mode 99 -

    if eval( Equip == 1 && IsFormValid rConvRef == 1)
      set rNewItem to rConvRef.GetBaseObject
      if eval(rNewItem.IsWeapon == 1)
        rConvRef.Activate Player
        Player.EquipItem rNewItem
    set Equip to 0

    These aren't tested though; I just simply removed the Equip and added exclusions in my personal copy instead of solving that way, but the above would likely cover more scenarios. I'm not sure if I need all the form/ref checks or if they'd break the if statement before jumping out, but logically this should work.

    Picking up Fish Trap:

    When picking up a fish trap, the fish trap itself seems to stick around (it doesn't, it's actually an entirely new fish trap reference).

    "set TrapDeployed to 0" in "Reset == 1" is part of the problem. What probably ends up happening is that somehow the script runs a few times before stopping entirely. I found "set TrapDeployed to 9" worked nicely, but that may not be the best way to fix things.

    Bow Upgrade - Broken Bow:

    When I only add sinew or harrada fiber, upgrading a bow results in a broken bow. This is because CValue, CHealth, CDamage, and fCSpeed do not get set if there's no Horn and default to 0. The script uses all four variables anyway for SetGoldValue, SetObjectHealth, SetAttackDamage, SetWeaponSpeed and thus results in setting the bow values to 0.


    There's also a few icons - hardwood bow, the wooden slats among them - that appear very pixelated and wrong. They're not important things that impact gameplay but I thought I'd repeat it here.