Thursday, June 3, 2010

Scripting Woes

The cosmetic resource out of my hair, and v5.63 uploaded, I've decided to revisit an old idea, somewhat inspired by Herculine's scouters.

The original form of my 'tracking system' was to be an inventory item, that displayed a menu of your installed companions. Clicking one's name would either enable or disable the tracking quest, depending on whether it was already enabled or disabled.

The thing never worked right. The menu refused to appear on command, and took two or three commands to close completely. It was a pain. I defaulted to the terminal interface, since it relied on normal game systems that the devs had put the time into making work half assedly well.

After that whole 20thCW selectors thing, I got a lot better at writing menus, and have been tossing around revisiting my old ideas; but I didn't want to delay an existing project to do it.

My plate is fairly clean at the moment, so now seemed the time, before I get bogged down in bug-testing whatever people manage to break next.

Wrote out the mod additions, tested in game, and of course it still doesn't work. The menu works correctly now, but the scripting attached to the buttons refuses to fire.

The real pisser of it is I can't figure out why. The scripting looks correct to me. The GECK doesn't kick anything back, Cipcis' "script validator" tells me everything is fine.

Nonetheless, you click an option and the menu simply closes. It does not actually execute the code. I've tried a half dozen permutations, three different block types...

...and I'm forced to wonder once again whether Bethsoft's software engineers are just massively incompetent, or if they fucking hate modders.

Truth be told, I may well scrap the whole mess if I can't get it working as I want. I don't really like teleporters on their own.

As usual, I'm not out of ideas yet, though. I had been hoping to keep it relatively simple... but then again, these things will never be the plug 'n play type for do-it-yourselfers that can't be bothered to learn to script.


  1. Okay, I've already admitted that scripting and quest creating looks like a lot of gibberish to me most of the time, so I'm not going to try to make anyone believe otherwise. But I do know what I've seen work in Oblivion for a very similar companion system, so I offer a simple observation...

    The CM Partners companion system runs a quest, editor ID CMPQ I believe. When creating companions for that system, you have the option of making the recruitable NPC the target of that quest so that, once you've activated the second stage of the quest by recruiting one and have the quest set as your active quest in your journal, any recruitable character that you've targeted with the quest when you created them will appear on your map and your compass with the red quest marker. Select something else as your active quest and the markers of course are no longer visible.

    Now, I haven't too closely examined the inner workings of the RR Companion system and suspect that scripting and quest writing for FO3 has its differences from Oblivion, but I also suspect that the two games and the two companion systems are similar enough that something along these lines might work here as well.

    I know it's not quite the same thing as what you were shooting for, but it's a step in that direction. It's just an idea I'm throwing out there...

  2. I wasn't going to delve into detail, since I didn't want people chomping at the bit and bugging me to make it work... but I'll do it here to let you see the scale of what I've got going.

    My system here will start with a standard pop-up menu. I'm sure you've seen them before; equip item, close pip-boy, menu pops up.

    Menu has four options.

    1) Cycle tracking. This script checks the tracking quest for the NPC in question. If it's at stage 10 (tracking), it sets it to 20 (non-tracking). If it's 20, it switches to 10.

    2) Summon [NPC name]. This enables the NPC, has them come to you wherever you are - moving normally overland - and initiate conversation EG: "What did you want?"

    3) 'Emergency Reset'. This pulls the NPC from combat, resets the health system variables, pulls sleep packages, sandbox packages, teleports to the player location +256 units on the X axis, and applies/reapplies the default follow package.

    Now, while I appreciate the advice (really, I do), I've never liked the tracking quest in CM. It never worked right for me, and eventually I just gave up trying.

    That aside, we're dealing with completely different worlds here.

    If all I wanted to do cycle tracking from an inventory item? Heck, that's easy.

    I'm shooting for an integrated companion management item that will allow you to find, summon, or in the worst case force-move your companion to you; so that no matter where you are - from the player's bedroom in Vault 1 to the alien mothership in Zeta, you'll be able to pull that companion to you and keep them working right.

    More so, I want the whole thing to feel like an add-on module for your pip-boy. Like it's something Vault-Tec designed.

    The problem, is much like in some of my original companion system work, I'm in uncharted territory here. There's no tutorial to read, no database to sort through, no one I know of with experience in this area that I could ask.

    Granted, I could post in the forums and hope for some help... but odds are good I'd end up with a big, fat, "I don't know."

    The worst part, is I'm having to again do my own debugging, and there are so many variables. I don't know if the scripts are erroring out, or if I'm trying to pull too many packages, or if the script is just plain stopping totally after the menu displays.

    Undocumented functions, unknown errors, an indecipherable engine, completely apathetic developers...

    The fun just continues. So I get to go item by item, trying to find a common thread or more ideally the single detail that's causing the scripts to stop.

  3. Do you need more eyes looking at your code? Sometimes a fresh perspective helps find things that should be obvious.

  4. Appreciate the offer, but right now there's nothing to look at.

    I axed the entire mess and started again.

    Knowing this time that this would be yet another of those instances where the GECK disobeys its own rules, I decided to start simple and keep the item to one function at a time.

    I've successfully gotten it to cycle tracking and teleport a companion, so I'm thinking the hangup is hiding in the menu someplace.

    I have the sneaking suspicion it has something to do with the gamemode block.

    At this point - and assuming the menu continues to misbehave - I can either have one item that spawns three others (each of the sub-items would remove themselves upon use, to cut down on inventory clutter), or I can try doing it with a script variable in a quest script.


    If EmergencyTeleport == 1
    NPCRef.moveto player 128 0 0
    RemoveScriptPackage Somepackage
    AddScriptPackage 1VaultGuardPlayer

    Then all the inventory item would have to do is set the quest script variable.

    It's a roundabout way of doing it... but it wouldn't be the first time I've had to use distasteful methods to get something working.