Jump to content

Skyrim SE asking for advice on how to start a mod (learning CK)


Recommended Posts

Posted (edited)

hi fellow modders, 

playing SE for some time i decided to learn CK trying to realize some ideas i have about Serana.

long story short, my mod would start (possibly) showing a scene right after the moment Serana  "stumbles out and gets the scroll", going silent during subsequent Serana's forcegreet and doing things later trying not to interfere blabla as usual.

now as i said i'm learning so i am not sure if it is even doable...

so my questions are: is it even possible?

can i "hook" my startquest  to some event, npc encounter etc. without modifying\patching Dawnguard?

i asked that trying to avoid losing weeks searching for something that maybe is simply impossible for some reason i actually don't know

Sorry for my English, I'm not a native speaker

thanks in advance

Edited by fottenberg
Posted (edited)

Not an expert on the matter, but this may be possible with a higher priority quest taking control of Serana. However, how you'd get it to reliably start at the correct moment without modifying the existing Dawnguard quest I do not know. I mean you could spam the OnUpdate event every second checking for a specific stage with GetStage but that would be some really disguisting code.

Edited by traison
Posted

thank you

from your answer looks like trying to intercept events from my quest would not be a good solution.

my actual idea is to start the quest simply loading the game and insert a scene between Serana stumbling out (Quest DLC1VQ01 "Awakening" between stage 20 and 30) - the script QF_DLC01VQ01_0100352A.psc is involved (i believe)

i would like to know if it's possible, for example, to "patch" that quest and\or the script because that would be the only "interference" so to speak, the mod is about Serana subsequent behaviour\dialogues on the road, in locations etc.

i don't know if i can touch Dawnguard like any other downloaded mod... but i will try anyway.

crashing Skyrim SE in all the possible ways is something i'm well accustomed to, at this point it is my main activity  ?

 

 

Posted

Hook it to the event when pressing the button.

Register for single update in ca 60s.

Insert check scene completed, if not register single update again. Otherwise your stuff.

Insert a safety counter to limit the updates, like trash it after 20 updates. (20min the scene should be completed)

If the stumble out scene completed, proceed with your stuff.

 

This should not interfere with anything, separate from dawnguard.

Posted

Back up your skyrim.ini files before installing CK. Else your going to start the game and suddenly everything's back to fucking vanilla, including a damn controller enabled and no mouse (yes, I'm still salty about that).

  • 2 weeks later...
Posted

Did not look into it.

However, it's a scene hitting the button, I guess.

On scene end would be a good entry point, as the ref is the player.

Posted
On 9/8/2023 at 8:15 PM, Tlam99 said:

Hook it to the event when pressing the button.

should i create an alias of the button object (or Serana coffin activator, i would prefer) and proceed with (my) button alias's script?

if i'm not wrong i need to create an alias for every other quest's object i intend to interact with

but the limits\possibilities of that are unclear to me, and i can't find tutorials or examples about that.

thanks for help

Posted

Every quest object needs an alias. 

If your quest is a following quest, you could use the alias

of the main (trigger) quest to fill your alias.

Best check out how this scene is made.

Posted
29 minutes ago, Tlam99 said:

Did not look into it.

However, it's a scene hitting the button, I guess.

On scene end would be a good entry point, as the ref is the player.

ops, i was editing my post trying to be more concise, sorry but thank for your fast answer!

yes, i know a bit the objects i want to interact with, i'm at the point where i need to learn the basics of what i can\can't do 

Posted
19 minutes ago, Tlam99 said:

Every quest object needs an alias. 

If your quest is a following quest, you could use the alias

of the main (trigger) quest to fill your alias.

Best check out how this scene is made.

this. you cleared two points i was unsure about.

the vanilla scene ends with serana exit from the coffin, here DLC1VQ01 stops and calls for Serana ForceGreet (package) and for DLC1VQ02 to start

in order to avoid pestering papyrus with trash my idea was to place some triggerbox around seranacoffin OR better (as you suggested) using directly an activator (button or coffin opener) to start my onupdate-registerforsingleupdate thing where my scene happens

before all that a check to insure if serana is already out = skip everything and start my Main quest (what we are talking about happens in my Activator quest, the Main quest is separated)

this should be more or less

Posted

a bit more details on how i am trying to do things

i looked into DLC1VQ01 tho see what happens, and looks like everything i need is in the DLC1VQ01PuzzleCoffinActivator's script:

Spoiler

Scriptname DLC1VQ01PuzzleCoffinScript extends ObjectReference  

import debug
import utility

objectReference property coffin auto 
objectReference property puzzleController auto
actor property Serana auto 
quest property DLC1VQ01 auto
;scene property SeranaGetScrollScene auto

DLC1VQ01PuzzleControllerScript mainScript

Event OnInit()
    mainScript = puzzleController as DLC1VQ01PuzzleControllerScript
EndEvent

auto State waiting
    Event OnActivate(objectReference triggerRef)
            gotoState("done")
            Serana.BlockActivation()
            coffin.PlayAnimation("open")
;             Debug.Trace("RNPC: anim sent...")
            Utility.Wait(2.2)
            serana.setGhost(false)
;             Debug.Trace("RNPC: wait done...")
            DLC1VQ01.setstage(20)
;             Debug.Trace("RNPC: 20 set...")
            Utility.Wait(1.0)
            DLC1VQ01.setstage(30)
;             Debug.Trace("RNPC: 30 set...")
            serana.evaluatePackage()
;             Debug.Trace("RNPC: initial forcegreet should be running...")
            ; while SeranaGetScrollScene.isPlaying() == 1
                ; wait(3)
            ; endWhile
            ; coffin.PlayAnimation("taken")
            ;sendAnimationEvent(Serana, "DLC01CoffinEnterInstant")
            self.disable()
    EndEvent
endState

State Done
EndState
 

from my understanding i created an alias of DLC1VQ01PuzzleCoffinActivator (specific reference, allow reserved) with its script (extends ObjectReference)

addes properties like serana, player, myActivator quest

looking how DLC1VQ01 was made i'm thinking about doing all in my activator script, so i think i should add properties like DLC1VQ01 quest, DLC1VQ01PuzzleCoffinActivator (or maybe not?), and my scene alias and from there set the appropriate stage in my activator quest

looks like a recipe for disaster

 

Posted

update: i'm trying a different approach and it worked so far

the point where i would like to insert my scene is right before both Dlc1vq01 script and\or its activator calls  serana.evaluatePackage() and so her usual Forcegreet package is fired

knowing that packages are put in a stack on the actor i wrote my forcegreet package (some random idles, just for testing), added to my quest serana alias and gave my quest a slight priority and now Serana comes out of her sarcophagus dancing, laughing and other random shit  LOL

it works so far, so i'm exploring what i can do directly from a package

 

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...