Jump to content

Alternative start using Creation Kit


shamanwise

Recommended Posts

I simply hijack mq101 on the first stage and have the gamemanger quest I made determine how to start the game.

 

Thanks for the help, I've got my new start working great, the only challenge now is "picking up" the MainQuest line, I'm trying to start it at MQ103 area, where you go the the Jarl of Whiterun to inform him, however the Jarl doesn't respond, nothing in Dragons reach is setup for this part, and only Sven in Riverwood gives me the "I saw a dragon in Helgen" but no quests get added and nothing "happens."

Did you intend to have an easy way to pick-up the MainQuest line in your mod?

 

Thanks!

-Chance

Link to comment
Share on other sites

Ive left the vanilla main quest start completely untouched. For any alternative start I had a scene setup with the smith in riverwood. I had it so when you talk to him He asks you to deliver a letter to the yarl concerning a dragon sighting and the main quest continues normally from there. This was in an older messy version.

 

As for the dragonsreach and riverwood not being setup for the MQ this is correct. All the triggers in these areas are based on stage conditions so the scripts still need to be adjusted to fire them. Since your interested in the mod I just got motivated to bump this up on my priority list.

Link to comment
Share on other sites

Thanks for your continued help, as far as I know, this is the only place I have found a real discussion regarding alternate starts from the creation kit point of view.

 

I have tried to start the Main quest at MQ102 At Stage "30" which *should* put DragonsReach into the scene where the Jarl will be ready to accept information for this quest.

 

I have attempted to do this, for simplicity's sake with a trigger field the player walks through as a test.

 

Scriptname MetroChoice extends Quest
Quest Property MQ102 Auto
Event OnTriggerEnter(ObjectReference ActionRef)
      if (akActionRef == Game.GetPlayer())
	MQ102.SetStage(30)
      endIf
EndEVENT

I have verified that the Property is correctly assigned to the MQ102 Quest within Creation Kit.

I'm far from a proficient coder, as best as I can tell this script *should* work, but it doesn't. (Probably something small I've overlooked)

However, if you open console and type

SetStage MQ102 30

It works correctly, Dragon's Reach is setup correct and the Main Quest is successfully started.

 

Thanks for your continued help, I hope this topic helps anyone else with this fun mess :)

 

-Chance

Link to comment
Share on other sites

Its a mess for sure. Bethesda wanted to be very sure the beginning of the game went smoothly, lots of redundant crap. I have another alt start mod I made that has the entire MQ and dialogues fixed. I need to merge the two so Ill upload a copy for you to look at in a bit.
Link to comment
Share on other sites

I've been waiting for someone to come up with a clean way of getting this done. If I understand correctly, essentially you need to start a new quest in one of the dragon-attack fragments and finish mq101. Am I right?
Link to comment
Share on other sites

MQ101 - Stage 0 - MQQuickstart 0 (condition) I added this line to start my game manager quest first thing.

ovht_GameTypeManager.SetStage(5)

 

Then on ovht_fp_GameManagerQuest - Stage 5 I run my initiate function which lives in my central script file.

kmyQuest.InitGameSelection()

 

Heres a peak at my central script files currently (WIP).

 

 

Scriptname ovht_fp_GM_GMExtendedScript extends Quest  
;=======================================
;OnUpdate play short title screens
;=======================================

Int TitleSequenceCount
Event OnUpdate()
	ShortTitle()
EndEvent

Function RegisterTitleScreens()
Game.ShowTitleSequenceMenu()
RegisterForSingleUpdate(4)
IntroMusic.Add()
EndFunction

Function ShortTitle()
If TitleSequenceCount == 0
	Game.StartTitleSequence("Sequence3")
	TitleSequenceCount = 1
	RegisterForSingleUpdate(5)

ElseIf TitleSequenceCount == 1
	Game.StartTitleSequence("Sequence4")
	TitleSequenceCount = 2
	RegisterForSingleUpdate(5)

ElseIf TitleSequenceCount == 2
	Game.HideTitleSequenceMenu()
EndIf
EndFunction
;=================================================================================================






;=======================================;=======================================
;Alternative Start: Player Spawn, Generation, and Setup 
;=======================================;=======================================

Function InitGameSelection()
Game.GetPlayer().moveto(ovht_fp_GM_TempPlayerInsert)
Int InputButton = ovht_fp_GM_StartTypeMessage.Show()
If (InputButton == 0) ;Is Vanilla Start
	InitVanillaStartMode()

Elseif (InputButton == 1) ;Is Start by Ship
	InitAlternativeStartMode()
	SpawnPlayerShip()

Elseif (InputButton == 2) ;Is Start by Traveller
	InitAlternativeStartMode()
	SpawnPlayerTraveller()	
Endif
EndFunction



Function InitVanillaStartMode()
ovht_fp_GM_IsAltStartGameChecker.SetValue(0) ;this value lets me disable certain things in the game if in alt start mode.
Mq101.SetStage(10)
DialogueWhiterunGuardGateStop.Start()
EndFunction

Function InitAlternativeStartMode()
;MQ Cleanup Scripts
MQ101.SetStage(1001)
MQ101DragonAttack.SetStage(1001)

;Whiterun Fixes
WhiterunMainGateRef.Lock(false) ;Make sure Whiterun main gate is unlocked
;Whiterun house purchase
MQ00.SetStage(5) ;enable house purchasing
Alias_Balgruuf.GetActorReference().SetRelationshipRank(Game.GetPlayer(), 3) ;enable house purchasing in Whiterun


MQ103.SetStage(30);TEMP DELETE ;Attempt to add MQ pickup


EndFunction



Function SpawnPlayerShip()
ovht_fp_GM_IsAltStartGameChecker.SetValue(1)
Game.GetPlayer().moveto(ovht_fp_GM_ShipPlayerInsert)
Game.ShowFirstPersonGeometry()
Game.FadeOutGame(False, true, 2.0, 30.0)
Game.DisablePlayerControls(abMovement =true, abFighting = true, abCamSwitch = true, abLooking = true, abSneaking = true, abMenu = false, abJournalTabs= false)
RegisterTitleScreens()
CharGenShip()
ovht_fp_GM_StartShipQuest.SetStage(0)
EndFunction
Function CharGenShip()
CharGenAddGear()
Utility.Wait(15) ;Wait for intro slides to finish
Game.ShowRaceMenu()
Utility.Wait(1)
CharGenFailSafe()
EndFunction



Function SpawnPlayerTraveller()
ovht_fp_GM_IsAltStartGameChecker.SetValue(2)
Game.GetPlayer().moveto(ovht_fp_GM_TravellerPlayerInsert)
Game.ShowFirstPersonGeometry()
Game.FadeOutGame(False, true, 2.0, 30.0)
Game.DisablePlayerControls(abMovement =true, abFighting = true, abCamSwitch = true, abLooking = true, abSneaking = true, abMenu = false, abJournalTabs= false)
RegisterTitleScreens()
CharGenTraveller()
ovht_fp_GM_StartTravellerQuest.SetStage(0)
EndFunction 
Function CharGenTraveller()
CharGenAddGear()
Utility.Wait(15) ;Wait for intro slides to finish
Game.ShowRaceMenu()
Utility.Wait(1)
CharGenFailSafe()
EndFunction



Function CharGenFailSafe()
Game.EnablePlayerControls()
Game.GetPlayer().SetRestrained(false) ;try forcing an idle
Game.SetInChargen(false, false, false) ;enable saving and waiting
Game.SetHudCartMode(false)
EndFunction


;=================================================================================================



;=======================================
;Player start items
;=======================================
Function CharGenAddGear()

;Remove derp gear
Game.GetPlayer().RemoveAllItems()

	;Add player items	
Game.GetPlayer().AddItem(ovht_fp_PlayerStartItemsList001)
	;Multi items
Game.GetPlayer().AddItem(Gold001, 200)
Game.GetPlayer().AddItem(IronArrow, 19)
;/
;Add and equip player gear
Game.GetPlayer().AddItem(ovht_fp_PlayerStartGearList001, 1, false)
Game.GetPlayer().EquipItem(ovht_fp_PlayerStartGearList001)
Game.GetPlayer().AddItem(ClothesCollegeRobesApprentice, 1, false)
Game.GetPlayer().EquipItem(ClothesCollegeRobesApprentice, 1, false)

/;



EndFunction
;=================================================================================================



;=======================================
;Race
;=======================================
Function AddRaceSpells()
Actor player = Game.GetPlayer()
RemoveRaceSpells(player)
Race playerRace = player.GetActorBase().GetRace()

if playerRace == ArgonianRace
elseif playerRace == BretonRace
	player.AddSpell(ConjureFamiliar)
elseif playerRace == DarkElfRace  
	player.AddSpell(Sparks)
elseif playerRace == HighElfRace  
	player.AddSpell(Fury)
elseif playerRace == ImperialRace  
elseif playerRace == KhajiitRace  
elseif playerRace == NordRace  
elseif playerRace == OrcRace  
elseif playerRace == RedguardRace  
elseif playerRace == WoodElfRace  
endif
EndFunction


Function RemoveRaceSpells(Actor pActor)
pActor.RemoveSpell(ConjureFamiliar)
pActor.RemoveSpell(Sparks)
pActor.RemoveSpell(Fury)  
EndFunction


Function AddRaceSkills()
Actor Player = Game.GetPlayer()
Race PlayerRace = player.GetActorBase().GetRace()

If playerRace == ArgonianRace
elseif playerRace == BretonRace
elseif playerRace == DarkElfRace  
elseif playerRace == HighElfRace  
elseif playerRace == ImperialRace  
elseif playerRace == KhajiitRace  
elseif playerRace == NordRace  
elseif playerRace == OrcRace  
elseif playerRace == RedguardRace  
elseif playerRace == WoodElfRace  
Endif
EndFunction
;=================================================================================================

;=======================================
;blank section
;=======================================
;=================================================================================================


;=======================================+=======================================-=======================================+=======================================
;=======================================*===================================Properties==================================*=======================================
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;Dont forget to fill the goddamn properties :palmface:


;=======================================
;Race
;=======================================
; special starting race spells
Spell Property ConjureFamiliar Auto  
Spell Property Sparks Auto  
Spell Property Fury Auto  
; player races
Race Property ArgonianRace Auto  
Race Property BretonRace Auto  
Race Property DarkElfRace Auto  
Race Property HighElfRace Auto  
Race Property ImperialRace Auto  
Race Property KhajiitRace Auto  
Race Property NordRace Auto  
Race Property OrcRace Auto  
Race Property RedguardRace Auto  
Race Property WoodElfRace Auto  


;=======================================
; player gear and items
;=======================================
FormList Property ovht_fp_PlayerStartGearList001 Auto  
FormList Property ovht_fp_PlayerStartItemsList001 Auto 

Armor Property ClothesBoots01 Auto
Armor Property ClothesCollegeHood Auto
Armor Property ClothesCollegeRobesApprentice Auto

MiscObject Property Gold001 Auto 
Ammo Property IronArrow Auto


;=======================================
;Special properties
;=======================================
GlobalVariable Property ovht_fp_GM_IsAltStartGameChecker Auto ;IMPORTANT FLAG
Quest Property ovht_fp_GameManagerQuest Auto 
Quest Property ovht_fp_GM_StartShipQuest Auto  
Quest Property ovht_fp_GM_StartTravellerQuest Auto 
Message Property ovht_fp_GM_StartTypeMessage Auto 
MusicType Property IntroMusic Auto ;duh

;Player Insertion Points
ObjectReference Property ovht_fp_GM_TempPlayerInsert Auto 
ObjectReference Property ovht_fp_GM_ShipPlayerInsert Auto  
ObjectReference Property ovht_fp_GM_TravellerPlayerInsert Auto 


;Fixes
Quest Property MQ00 Auto ;Needs to prestart because start game enabled flag shouldnt be set.
Quest Property MQ103 Auto ;MQ Pickup TEMP FIX DELETE
Quest Property MQ101 Auto  ;runs cleanup
Quest Property MQ101DragonAttack Auto ;runs cleanup

;Whiterun Fixes
Quest Property DialogueWhiterunGuardGateStop Auto
ObjectReference Property WhiterunMainGateRef Auto 
ReferenceAlias Property Alias_Balgruuf Auto  

;Helgen Fixes
;....

 

 

 

 

If vanilla start is picked MQ101 continues normally.

If not I run these new cleanup stages on MQ101 and MQ101DragonAttack each with new stages 1001.

 

MQ101 Stage 1001

 

 

;Debug.Messagebox("MQ101 cleanup completed")
;=======================================================
;Disable NPCs
;=======================================================

;Disable Ulfric
Alias_Ulfric.TryToDisable()
Alias_Ulfric.GetActorRef().MoveToMyEditorLocation()
Alias_Ulfric.TryToEnable()
Alias_Ulfric.GetActorRef().SetOutFit(UlfricOutfit)

;Disable Ulfrics's Stormcloak crew
Alias_StormcloakPrisoner01.TryToDisable()
Alias_StormcloakPrisoner02.TryToDisable()
Alias_StormcloakPrisoner03.TryToDisable()
Alias_StormcloakPrisoner04.TryToDisable()

;Disable Ralof
Alias_Ralof.GetActorRef().IgnoreFriendlyHits(False)
Alias_Ralof.GetActorRef().SetNotShowOnStealthMeter(false)
Alias_Ralof.GetActorRef().BlockActivation(false)
Alias_Ralof.TryToDisable() ;Testing

; Disable Tullius
Alias_GeneralTullius.TryToDisable()
Alias_GeneralTullius.GetActorRef().MoveToMyEditorLocation()
Alias_GeneralTullius.TryToEnable()

;Disable Tullius's Imperial crew
Alias_ImperialSoldierFort01.TryToDisable()
Alias_ImperialSoldierFort01.GetActorRef().DisableNoWait()
Alias_ImperialSoldier01.TryToDisable()
Alias_ImperialSoldier02.TryToDisable()
Alias_HelgenArcher01.GetActorRef().DisableNoWait()
Alias_HelgenArcher02.GetActorRef().DisableNoWait()
Alias_HelgenArcher03.GetActorRef().DisableNoWait()
Alias_HelgenArcher04.GetActorRef().DisableNoWait()

;Disable Hadvar
Alias_Hadvar.GetActorRef().IgnoreFriendlyHits(False)
Alias_Hadvar.GetActorRef().SetNotShowOnStealthMeter(false)
Alias_Hadvar.GetActorRef().BlockActivation(false)
Alias_Hadvar.TryToDisable() ;Testing

;Disable Lokir
Alias_Prisoner01.TryToDisable()

;Disable Civilians
Alias_CivilianTorri.tryToDisable()
Alias_CivilianTorolf.tryToDisable()
Alias_CivilianGunnar.trytoDisable()
CiviliansOutsideHelgenMarker.disable()

;Disable Alduin
;Alias_Alduin.GetRef().Disable()

;Disable Elenwen
Alias_Elenwen.trytoDisable()
Alias_Elenwen.GetActorRef().MoveToMyEditorLocation()
Alias_Elenwen.GetActorRef().EnableNoWait()

;Disable Justiciars
Alias_Justiciar01.trytoDisable()
Alias_Justiciar02.trytoDisable()

;Disable Priest of Arkay
Alias_Priest.GetActorRef().DisableNoWait()

;Disable Hodies
Alias_CartHorse1.TryToDisable()
Alias_CartHorse2.TryToDisable()
Alias_CartHorse1.GetRef().DisableNoWait()
;=======================================================



;=======================================================
;Cleanup Helgen
;=======================================================

;Disable activation of Helgens Keep doors.
Alias_KeepDoorInteriorImperials.GetRef().BlockActivation(true)
Alias_KeepDoorInteriorStormcloaks.GetRef().BlockActivation(true)

;Removes draw bridge and adds rubble at Helgen Keep cave exit.
BridgeOriginal.disable()
BridgeDebris.enable()

;Unlock and open Helgens exterior gates
NorthGate.Lock(False)
NorthGate.SetOpen(True)
EastGate.Lock(False)
EastGate.SetOpen(True)



; release activation block on keep doors
Alias_KeepDoorInteriorImperials.GetRef().BlockActivation(true)
Alias_KeepDoorInteriorStormcloaks.GetRef().BlockActivation(true)

;Block exterior keep doors
ovht_KeepImperialDoor.BlockActivation()
ovht_KeepStormCloakDoor.BlockActivation()


; Release reservation of Helgen
HelgenReserved.Clear()
FortNeugradEnableMarker.Enable()
PostMQ101KeepMarker.enableNoWait()
MQ101OutsideClutterMarker.enableNoWait()


Stop()

 

 

 

and MQ101DragonAttack Stage 1001

 

 

 

;Debug.Messagebox("MQ101DragonAttack cleanup completed")
;=======================================================
;Disable NPCs
;=======================================================

;Disable Imperials
Alias_ImperialSoldier01.tryToDisableNoWait()
Alias_ImperialSoldier02.tryToDisableNoWait()
Alias_ImperialSoldierHelgen01.tryToDisableNoWait()
Alias_ImperialSoldierHelgen02.tryToDisableNoWait()
Alias_DragonBaitATower.tryToDisable()                                    
Alias_DragonBaitBTower.tryToDisable()
Alias_ArcherBTower.tryToDisable()
Alias_DragonBaitDBridge.tryToDisable()
Alias_ImperialArcherA01.tryToDisable()
Alias_ImperialArcherA02.tryToDisable()
Alias_ImperialArcherA03.tryToDisable()
Alias_ImperialArcherC01.tryToDisable()
Alias_ImperialArcherC02.tryToDisable()
Alias_ImperialArcherD01.tryToDisable()
Alias_ImperialArcherD02.tryToDisable()
Alias_ImperialArcherD03.tryToDisable()
Alias_ImperialArcherD04.tryToDisable()
Alias_ImperialMageC01.tryToDisable()
Alias_ImperialMageD01.tryToDisable()
Alias_ImperialSoldierFodderC01.tryToDisable()
Alias_ImperialSoldierFodderD01.tryToDisable()

;Disable Stormcloaks
Alias_StormcloakPrisoner01.tryToDisableNoWait()
Alias_StormcloakPrisoner02.tryToDisableNoWait()
Alias_StormcloakPrisoner03.tryToDisableNoWait()
Alias_StormcloakPrisoner04.tryToDisableNoWait()

;Disable Civilians
Alias_CivilianGunnar.tryToDisableNoWait()
Alias_CivilianTorolf.tryToDisableNoWait()
Alias_CivilianTorri.tryToDisableNoWait()
Alias_CivilianMatlara.tryToDisableNoWait()
Alias_CivilianIngrid.tryToDisableNoWait()
Alias_CivilianVilod.tryToDisableNoWait()
Alias_ElenwensHorse.tryToDisableNoWait()
;=======================================================


;=======================================================
;Enable clean up and destruction
;=======================================================
;need to clean up
Alias_TowerCollision.GetRef().DisableNoWait()
AlduinAttackEnableMarker1.enableNoWait()
AlduinPatrolBTowerExplosionTrigger.disableNoWait()
BlockerBMarker.disableNoWait()
BlockerCMarker.disableNoWait()
DragonTowerHole.disableNoWait()
HouseBlockerMarker.disableNoWait()
ExplosionTriggerA01.disableNoWait()
ExplosionTriggerB02.disableNoWait()
PlayerInCTrigger.disableNoWait()
PlayerInInnRoadTrigger.disableNoWait()
PlayerInInnTrigger.disableNoWait()
PlayerInKeepAreaTrigger.disableNoWait()
PlayerInSquareTrigger.disableNoWait()
RubbleAMarker.disableNoWait()
RubbleBMarker.disableNoWait()
RubbleCMarker.disableNoWait()
RubbleDMarker.disableNoWait()
RubbleEMarker.disableNoWait()
SetStageTriggerPreLedge.disableNoWait()
SmokeFXA.disableNoWait()
SmokeFXB.disableNoWait()
SmokeFXC.disableNoWait()
SmokeFXD.disableNoWait()
SmokeFXE.disableNoWait()
CollisionAMarker.disableNoWait()
CollisionBMarker.disableNoWait()
CollisionCMarker.disableNoWait()
CollisionInnMarker.disableNoWait()
CollisionInnBackside.disableNoWait()
TowerARockDebrisMarker.disableNoWait()
dunCGHelgenGatesMarker.disableNoWait()

;enable the post Helgen Markers
PostCGMajorClutter.enableNoWait()
PostCGMajorFX.enableNoWait()
PostCGAreaA.enableNoWait()
PostCGAreaAclutter.enableNoWait()
PostCGAreaB.enableNoWait()
PostCGAreaBClutter.enableNoWait()
PostCGAreaC.enableNoWait()
PostCGAreaD.enableNoWait()
PostCGAreaE.enableNoWait()
PostCGAreaEClutter.enableNoWait()
PostCGOutsideClutter.enableNoWait()
PostCGTriggerMarker.disableNoWait()
;=======================================================
stop()

 

 

These are all the things each quest will normally do if completed normally all bunched together in one special cleanup stage. Im leaving them in their original script files to save myself filling all those properties.. for now.

 

And thats basiclly it. Ive gone through hundreds of versions until I finally came up with something that causes almost no conflicts and edits almost no vanilla records all with scripts. Still working on how I want to present picking up the main questline for AltStart modes and merging any message boxes into the user interface.

Link to comment
Share on other sites

  • 5 weeks later...

I've been trying to work out something similar: a simple mod that rewrites the start of MQ101, but I'm having trouble working out how to script it.

I'm getting the hang of putting quests together, but the scripting is still casuing problems for me.

This is basically the sequence I'm tryng to make:

 

1 - Chosing to start a new game takes the player directly to Helgen.

 

2 - Once the player has been loaded, the race selection/character creation menu appears.

 

3 - When the player finishes by chosing their name, the game autosaves.

 

The exact location in Helgen isn't important at the moment, and neither is the player's clothing, or what happens after the autosave: I just need to get these 3 steps to work, and then I can build on it from there, so any suggestions or help would be welcome.

Link to comment
Share on other sites

  • Recently Browsing   0 members

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