Beyond Skyrim: Roscrea - A Large Scale Collaborative Modding Project Releasing An Unofficial Expansion For The Elder Scrolls V: Skyrim

Overview:

During the ongoing production of Beyond Skyrim: Roscrea, I primarily worked as a Level Designer, remotely coordinating with lead mod developers and fellow level designers to create engaging, hand-crafted open world and interior environments. This involved integrating assets and content from other development teams — such as 3D Art and Writing — into a cohesive and playable world that aligned with the project's overall vision, developed over the course of five years. In addition to level design, I also contributed a few smaller features, including a fully scripted puzzle and the contents of an in-game lorebook.

Platform: PC

Game Engine: Creation (The Elder Scrolls V: Skyrim)

Duration: Five Years

Team Size: 50+

Roles:

Project Trailer:

Project Roles:

Click for more images.

  • Created sections of the open-world exterior and interior dungeon levels that were engaging for players and aligned with the overall vision established by the project Leads.

  • Collaborated closely with the Writing team to ensure each level or location supported quest and narrative implementation, and accurately reflected in-game descriptions.

  • Maintained design cohesion across the Level Design team by following established world-building guidelines — such as asset placement rules and biome-specific details (e.g., appropriate flora) — to avoid conflicts with other designers' work.

  • Wrote an in-game lorebook in the form of a tribal folklore story, using animal characters to create a mythological origin that tied into established in-game historical content and explained behaviors observed in the species depicted.

  • Ensured the lorebook accurately reflected the in-game history and worldbuilding developed by the Writing team.

Click to expand text.

The Fox and Bear

Translated and Written by: St. Cato 3e 277

Compiled and Transcribed by: F. Buccio of Craneshore 4e 82

-

Once, on a warm short-summer's evening, the two companions; Fox and Bear were sunbathing at their favorite spot. Dozing the day away atop a flat rock that sat in a clearing of the forest.

The two had spent the entire morning hunting and fishing, and both had been very successful.

Fox had managed to track a hare back to its den and had eaten the whole lot.

Bear had stood atop a waterfall belonging to a nearby stream and caught five salmon as they tried to jump past him.

Perched atop the highest mountain, Dragon had watched with envy all day at Fox and Bear's good fortune.

Dragon too had spent the morning hunting; but since he felt that anything down below the mountain was beneath him, he had only managed to find and devour three ibex that had been grazing along the mountain slope.

Dragon was still hungry; and after watching Fox and Bear, he was angry.

Flying down from the tops of the mountain, Dragon roared awake the slumbering companions. Fox and Bear were startled to see Dragon hovering above them, petrified by the fear of Dragon’s fiery breath.

"What have we done that has angered you so?" Asked Bear as he looked up at Dragon.

"You both have spent an afternoon of the short-summer sleeping and being slothful with your full bellies!" Answered Dragon. "I have spent the whole day hunting for food and I'm still hungry. Three ibex is not enough!"

"That is because you are so large." Fox chimed from his hiding place beneath Bear.

"That's right. Even just one ibex would sate Fox and I, and if you would come down from the mountain you could find other things to eat besides ibex." Added Bear.

Dragon snarled at the pair's comments, a small puff of flame exiting his flared nostrils.

"Do not insult me! For you know that only the mountains are worthy of me!" Dragon's eyes glaring at Bear and Fox.

"I am the strongest. So why should I have to spend the whole day hunting for myself? That is why from this day forth every kill you make will be left on this rock for me to eat. When I am satisfied you will be able to eat the rest."

Bear's nostrils now too flared with anger at Dragon's unjust proclamation; but before Bear could say something in retort, Fox poked his head out from under Bear and spoke.

"Of course mighty Dragon, we can do this for you."

Dragon bared his maw with a smile. "Good. I'll be here tomorrow for my supper."

The last words but trailing as Dragon lifted off back up to the top of the mountain.

The next day, Fox and Bear had awoken early to get started on their hunts, and it went well. This time Bear managed to catch seven salmon from the waterfall, and Fox had dug out a whole warren of mice. Both placed their catches out on their rock.

Not soon after, Dragon flew down from the mountains and landed on the other end of the flat rock. He inspected the stack of fish and mice before gobbling them all up.

"Hey! You ate it all! What will we eat?" Asked Bear as he looked at where his fish had once been.

"I am still unsatisfied. Do better tomorrow and you may eat." Replied Dragon uncaringly, before he pushed off the ground with his mighty wings back up to the top of the mountain.

Going to bed hungry that night, Fox and Bear vowed to redouble their efforts, but like the first day, Dragon ate everything that they had brought. So Fox and Bear went to bed very hungry that second night.

The next morning, before even the sun had risen, Bear was awoken by the sound of Fox's words being whispered into one of his ears.

"Wake up Bear. Don't worry, we'll eat tonight. I've got a plan!"

"It's still dark, why do you wake me Fox?" Asked Bear.

"Because, we need to start hunting now, before the sun rises." Answered Fox. "Bring anything you've caught from the stream to me before the sun rises."

"Why? we're supposed to bring anything we catch to the flat rock Fox."

"Ah…" Sounded Fox. "We only have to bring our kills during the day, when Dragon can watch us; but at night when he cannot see us, we can eat what we catch."

From then on Fox and Bear would hunt mostly during the night and morning. A tradition maintained by their descendants to this very day.

  • Designed and scripted a new puzzle type that maintained a familiar user experience by aligning its interaction style with pre-existing puzzles, minimizing player confusion.

  • Developed the puzzle to be modular and easily reusable, allowing other level designers to implement it across multiple dungeons with minimal adjustment.

  • Implemented clear positive and negative feedback systems to indicate correct or incorrect player inputs, reinforcing intuitive gameplay.

Click to expand text.

  
  Scriptname RosSwordsInStoneManager extends ObjectReference  
{Activator for the 'Sword in the Stone' puzzle in RosSecretAtmoranTempleInt03.}

Weapon property ROSMQ11PuzzleSword01 Auto
{The first listed sword that the player can put into one of the activators.}

Weapon property ROSMQ11PuzzleSword02 Auto
{The second listed sword that the player can put into one of the activators.}

Weapon property ROSMQ11PuzzleSword03 Auto
{The third listed sword that the player can put into one of the activators.}

Weapon property ROSMQ11PuzzleSword04 Auto
{The forth listed sword that the player can put into one of the activators.}

Message property NoSwordMessage Auto
{Message for when there is none of the swords.}

Message property RosSwordsPuzzleSlot1Menu Auto
{Menu for slot 1.}

Message property RosSwordsPuzzleSlot2Menu Auto
{Menu for slot 2.}

Message property RosSwordsPuzzleSlot3Menu Auto
{Menu for slot 3.}

Message property RosSwordsPuzzleSlot4Menu Auto
{Menu for slot 4.}

ObjectReference property RosSwordPuzzleSwordActivator1 Auto
{The invisible box activator.}

ObjectReference property RosSwordPuzzleSwordActivator2 Auto
{The invisible box activator.}

ObjectReference property RosSwordPuzzleSwordActivator3 Auto
{The invisible box activator.}

ObjectReference property RosSwordPuzzleSwordActivator4 Auto
{The invisible box activator.}

ObjectReference property ROSMQ11PuzzleSword01aActivator Auto
{The sword activator for sword 1 in the "RosSwordPuzzleSwordActivator1" slot.}

ObjectReference property ROSMQ11PuzzleSword01bActivator Auto
{The sword activator for sword 2 in the "RosSwordPuzzleSwordActivator1" slot.}

ObjectReference property ROSMQ11PuzzleSword01cActivator Auto
{The sword activator for sword 3 in the "RosSwordPuzzleSwordActivator1" slot.}

ObjectReference property ROSMQ11PuzzleSword01dActivator Auto
{The sword activator for sword 4 in the "RosSwordPuzzleSwordActivator1" slot.}

ObjectReference property ROSMQ11PuzzleSword02aActivator Auto
{The sword activator for sword 1 in the "RosSwordPuzzleSwordActivator2" slot.}

ObjectReference property ROSMQ11PuzzleSword02bActivator Auto
{The sword activator for sword 2 in the "RosSwordPuzzleSwordActivator2" slot.}

ObjectReference property ROSMQ11PuzzleSword02cActivator Auto
{The sword activator for sword 3 in the "RosSwordPuzzleSwordActivator2" slot.}

ObjectReference property ROSMQ11PuzzleSword02dActivator Auto
{The sword activator for sword 4 in the "RosSwordPuzzleSwordActivator2" slot.}

ObjectReference property ROSMQ11PuzzleSword03aActivator Auto
{The sword activator for sword 1 in the "RosSwordPuzzleSwordActivator3" slot.}

ObjectReference property ROSMQ11PuzzleSword03bActivator Auto
{The sword activator for sword 2 in the "RosSwordPuzzleSwordActivator3" slot.}

ObjectReference property ROSMQ11PuzzleSword03cActivator Auto
{The sword activator for sword 3 in the "RosSwordPuzzleSwordActivator3" slot.}

ObjectReference property ROSMQ11PuzzleSword03dActivator Auto
{The sword activator for sword 4 in the "RosSwordPuzzleSwordActivator3" slot.}

ObjectReference property ROSMQ11PuzzleSword04aActivator Auto
{The sword activator for sword 1 in the "RosSwordPuzzleSwordActivator4" slot.}

ObjectReference property ROSMQ11PuzzleSword04bActivator Auto
{The sword activator for sword 2 in the "RosSwordPuzzleSwordActivator4" slot.}

ObjectReference property ROSMQ11PuzzleSword04cActivator Auto
{The sword activator for sword 3 in the "RosSwordPuzzleSwordActivator4" slot.}

ObjectReference property ROSMQ11PuzzleSword04dActivator Auto
{The sword activator for sword 4 in the "RosSwordPuzzleSwordActivator4" slot.}

ObjectReference property LeadPole1 Auto
{The "PortGatePole" that is opened by the trap linker for sword 1.}

ObjectReference property LeadPole2 Auto
{The "PortGatePole" that is opened by the trap linker for sword 2.}

ObjectReference property LeadPole3 Auto
{The "PortGatePole" that is opened by the trap linker for sword 3.}

ObjectReference property LeadPole4 Auto
{The "PortGatePole" that is opened by the trap linker for sword 4.}

ObjectReference property LeadPoleFinal Auto
{The "PortGatePole" that is opened when all 4 swords are placed properly.}

ObjectReference property Trap1 Auto
{The trap that is activated by the trap linker when the wrong sword is placed within sword 1 slot.}

ObjectReference property Trap2 Auto
{The trap that is activated by the trap linker when the wrong sword is placed within sword 2 slot.}

ObjectReference property Trap3 Auto
{The trap that is activated by the trap linker when the wrong sword is placed within sword 3 slot.}

ObjectReference property Trap4 Auto
{The trap that is activated by the trap linker when the wrong sword is placed within sword 4 slot.}

ObjectReference property dustDropFX Auto
{Activates dust drop effects.}

Sound property rumbleSFX Auto
{Sound for the lead poles opening.}

int property sword1State = 0 auto hidden

int property sword2State = 0 auto hidden

int property sword3State = 0 auto hidden

int property sword4State = 0 auto hidden

int property puzzleState = 0 auto hidden

bool oneTimeDustDropCounter = False

Auto State Active
	Event OnActivate(ObjectReference triggerRef)
		gotoState("Busy")
		if (triggerRef == RosSwordPuzzleSwordActivator1)
			ActivateBox1()
		ElseIf (triggerRef == ROSMQ11PuzzleSword01aActivator || triggerRef == ROSMQ11PuzzleSword01bActivator || triggerRef == ROSMQ11PuzzleSword01cActivator || triggerRef == ROSMQ11PuzzleSword01dActivator)
			ActivateSword1(triggerRef)
		ElseIf (triggerRef == RosSwordPuzzleSwordActivator2)
			ActivateBox2()
		ElseIf (triggerRef == ROSMQ11PuzzleSword02aActivator || triggerRef == ROSMQ11PuzzleSword02bActivator || triggerRef == ROSMQ11PuzzleSword02cActivator || triggerRef == ROSMQ11PuzzleSword02dActivator)
			ActivateSword2(triggerRef)
		ElseIf (triggerRef == RosSwordPuzzleSwordActivator3)
			ActivateBox3()
		ElseIf (triggerRef == ROSMQ11PuzzleSword03aActivator || triggerRef == ROSMQ11PuzzleSword03bActivator || triggerRef == ROSMQ11PuzzleSword03cActivator || triggerRef == ROSMQ11PuzzleSword03dActivator)
			ActivateSword3(triggerRef)
		ElseIf (triggerRef == RosSwordPuzzleSwordActivator4)
			ActivateBox4()
		ElseIf (triggerRef == ROSMQ11PuzzleSword04aActivator || triggerRef == ROSMQ11PuzzleSword04bActivator || triggerRef == ROSMQ11PuzzleSword04cActivator || triggerRef == ROSMQ11PuzzleSword04dActivator)
			ActivateSword4(triggerRef)
		EndIf
		gotoState("Active")
	EndEvent
EndState

State Busy
	Event OnActivate(ObjectReference triggerRef)
		
	EndEvent
EndState

;If the player has activated the invisible trigger box1, handle that activation.
Function ActivateBox1(Bool swordMenu1 = False, Int aiButton = 0)
	;Does the player have one of the swords we're looking for?
	bool hasSword = (Game.GetPlayer().GetItemCount(ROSMQ11PuzzleSword01) > 0 || Game.GetPlayer().GetItemCount(ROSMQ11PuzzleSword02) > 0 || Game.GetPlayer().GetItemCount(ROSMQ11PuzzleSword03) > 0 || Game.GetPlayer().GetItemCount(ROSMQ11PuzzleSword04) > 0)
	if (!hasSword)
		NoSwordMessage.Show()
	Else
		swordMenu1 = True
	EndIf
	While swordMenu1
		If aiButton != -1	
			aiButton = RosSwordsPuzzleSlot1Menu.Show()
			swordMenu1 = False
			If aiButton == 0 ; Sword1
				if (Game.GetPlayer().GetItemCount(ROSMQ11PuzzleSword01) > 0)
					Game.GetPlayer().RemoveItem(ROSMQ11PuzzleSword01, 1, True)
					RosSwordPuzzleSwordActivator1.Disable()
					ROSMQ11PuzzleSword01aActivator.Enable()
				EndIf
				LeadPole1.Activate(Self)
				sword1State = 1
			ElseIf aiButton == 1 ; Sword2
				if (Game.GetPlayer().GetItemCount(ROSMQ11PuzzleSword02) > 0)
					Game.GetPlayer().RemoveItem(ROSMQ11PuzzleSword02, 1, True)
					RosSwordPuzzleSwordActivator1.Disable()
					ROSMQ11PuzzleSword01bActivator.Enable()
				EndIf
				Trap1.Activate(Self)
			ElseIf aiButton == 2 ; Sword3
				if (Game.GetPlayer().GetItemCount(ROSMQ11PuzzleSword03) > 0)
					Game.GetPlayer().RemoveItem(ROSMQ11PuzzleSword03, 1, True)
					RosSwordPuzzleSwordActivator1.Disable()
					ROSMQ11PuzzleSword01cActivator.Enable()
				EndIf
				Trap1.Activate(Self)
			ElseIf aiButton == 3 ; Sword4
				if (Game.GetPlayer().GetItemCount(ROSMQ11PuzzleSword04) > 0)
					Game.GetPlayer().RemoveItem(ROSMQ11PuzzleSword04, 1, True)
					RosSwordPuzzleSwordActivator1.Disable()
					ROSMQ11PuzzleSword01dActivator.Enable()
				EndIf
				Trap1.Activate(Self)
			ElseIf aiButton == 4 ; None
				swordMenu1 = False
			EndIf
		EndIf
	EndWhile
	If (sword1State == 1 && sword2State == 1 && sword3State == 1 && sword4State == 1)
		puzzleState = 1
		Utility.Wait(1)
		rumbleSFX.Play(LeadPoleFinal)
		If (!oneTimeDustDropCounter)
			dustDropFX.Activate(Self)
			oneTimeDustDropCounter = True
		EndIf
		Utility.Wait(2.5)
		LeadPoleFinal.Activate(Self)
	EndIf
EndFunction

Function ActivateBox2(Bool swordMenu2 = False, Int aiButton = 0)
	;Does the player have one of the swords we're looking for?
	bool hasSword = (Game.GetPlayer().GetItemCount(ROSMQ11PuzzleSword01) > 0 || Game.GetPlayer().GetItemCount(ROSMQ11PuzzleSword02) > 0 || Game.GetPlayer().GetItemCount(ROSMQ11PuzzleSword03) > 0 || Game.GetPlayer().GetItemCount(ROSMQ11PuzzleSword04) > 0)
	if (!hasSword)
		NoSwordMessage.Show()
	Else
		swordMenu2 = True
	EndIf
	While swordMenu2
		If aiButton != -1	
			aiButton = RosSwordsPuzzleSlot2Menu.Show()
			swordMenu2 = False
			If aiButton == 0 ; Sword1
				if (Game.GetPlayer().GetItemCount(ROSMQ11PuzzleSword01) > 0)
					Game.GetPlayer().RemoveItem(ROSMQ11PuzzleSword01, 1, True)
					RosSwordPuzzleSwordActivator2.Disable()
					ROSMQ11PuzzleSword02aActivator.Enable()
				EndIf
				Trap2.Activate(Self)
			ElseIf aiButton == 1 ; Sword2
				if (Game.GetPlayer().GetItemCount(ROSMQ11PuzzleSword02) > 0)
					Game.GetPlayer().RemoveItem(ROSMQ11PuzzleSword02, 1, True)
					RosSwordPuzzleSwordActivator2.Disable()
					ROSMQ11PuzzleSword02bActivator.Enable()
				EndIf
				LeadPole2.Activate(Self)
				sword2State = 1
			ElseIf aiButton == 2 ; Sword3
				if (Game.GetPlayer().GetItemCount(ROSMQ11PuzzleSword03) > 0)
					Game.GetPlayer().RemoveItem(ROSMQ11PuzzleSword03, 1, True)
					RosSwordPuzzleSwordActivator2.Disable()
					ROSMQ11PuzzleSword02cActivator.Enable()
				EndIf
				Trap2.Activate(Self)
			ElseIf aiButton == 3 ; Sword4
				if (Game.GetPlayer().GetItemCount(ROSMQ11PuzzleSword04) > 0)
					Game.GetPlayer().RemoveItem(ROSMQ11PuzzleSword04, 1, True)
					RosSwordPuzzleSwordActivator2.Disable()
					ROSMQ11PuzzleSword02dActivator.Enable()
				EndIf
				Trap2.Activate(Self)
			ElseIf aiButton == 4 ; None
				swordMenu2 = False
			EndIf
		EndIf
	EndWhile
	If (sword1State == 1 && sword2State == 1 && sword3State == 1 && sword4State == 1)
		puzzleState = 1
		Utility.Wait(1)
		rumbleSFX.Play(LeadPoleFinal)
		If (!oneTimeDustDropCounter)
			dustDropFX.Activate(Self)
			oneTimeDustDropCounter = True
		EndIf
		Utility.Wait(2.5)
		LeadPoleFinal.Activate(Self)
	EndIf
EndFunction

Function ActivateBox3(Bool swordMenu3 = False, Int aiButton = 0)
	;Does the player have one of the swords we're looking for?
	bool hasSword = (Game.GetPlayer().GetItemCount(ROSMQ11PuzzleSword01) > 0 || Game.GetPlayer().GetItemCount(ROSMQ11PuzzleSword02) > 0 || Game.GetPlayer().GetItemCount(ROSMQ11PuzzleSword03) > 0 || Game.GetPlayer().GetItemCount(ROSMQ11PuzzleSword04) > 0)
	if (!hasSword)
		NoSwordMessage.Show()
	Else
		swordMenu3 = True
	EndIf
	While swordMenu3
		If aiButton != -1	
			aiButton = RosSwordsPuzzleSlot3Menu.Show()
			swordMenu3 = False
			If aiButton == 0 ; Sword1
				if (Game.GetPlayer().GetItemCount(ROSMQ11PuzzleSword01) > 0)
					Game.GetPlayer().RemoveItem(ROSMQ11PuzzleSword01, 1, True)
					RosSwordPuzzleSwordActivator3.Disable()
					ROSMQ11PuzzleSword03aActivator.Enable()
				EndIf
				Trap3.Activate(Self)
			ElseIf aiButton == 1 ; Sword2
				if (Game.GetPlayer().GetItemCount(ROSMQ11PuzzleSword02) > 0)
					Game.GetPlayer().RemoveItem(ROSMQ11PuzzleSword02, 1, True)
					RosSwordPuzzleSwordActivator3.Disable()
					ROSMQ11PuzzleSword03bActivator.Enable()
				EndIf
				Trap3.Activate(Self)
			ElseIf aiButton == 2 ; Sword3
				if (Game.GetPlayer().GetItemCount(ROSMQ11PuzzleSword03) > 0)
					Game.GetPlayer().RemoveItem(ROSMQ11PuzzleSword03, 1, True)
					RosSwordPuzzleSwordActivator3.Disable()
					ROSMQ11PuzzleSword03cActivator.Enable()
				EndIf
				LeadPole3.Activate(Self)
				sword3State = 1
			ElseIf aiButton == 3 ; Sword4
				if (Game.GetPlayer().GetItemCount(ROSMQ11PuzzleSword04) > 0)
					Game.GetPlayer().RemoveItem(ROSMQ11PuzzleSword04, 1, True)
					RosSwordPuzzleSwordActivator3.Disable()
					ROSMQ11PuzzleSword03dActivator.Enable()
				EndIf
				Trap3.Activate(Self)
			ElseIf aiButton == 4 ; None
				swordMenu3 = False
			EndIf
		EndIf
	EndWhile
	If (sword1State == 1 && sword2State == 1 && sword3State == 1 && sword4State == 1)
		puzzleState = 1
		Utility.Wait(1)
		rumbleSFX.Play(LeadPoleFinal)
		If (!oneTimeDustDropCounter)
			dustDropFX.Activate(Self)
			oneTimeDustDropCounter = True
		EndIf
		Utility.Wait(2.5)
		LeadPoleFinal.Activate(Self)
	EndIf
EndFunction

Function ActivateBox4(Bool swordMenu4 = False, Int aiButton = 0)
	;Does the player have one of the swords we're looking for?
	bool hasSword = (Game.GetPlayer().GetItemCount(ROSMQ11PuzzleSword01) > 0 || Game.GetPlayer().GetItemCount(ROSMQ11PuzzleSword02) > 0 || Game.GetPlayer().GetItemCount(ROSMQ11PuzzleSword03) > 0 || Game.GetPlayer().GetItemCount(ROSMQ11PuzzleSword04) > 0)
	if (!hasSword)
		NoSwordMessage.Show()
	Else
		swordMenu4 = True
	EndIf
	While swordMenu4
		If aiButton != -1	
			aiButton = RosSwordsPuzzleSlot4Menu.Show()
			swordMenu4 = False
			If aiButton == 0 ; Sword1
				if (Game.GetPlayer().GetItemCount(ROSMQ11PuzzleSword01) > 0)
					Game.GetPlayer().RemoveItem(ROSMQ11PuzzleSword01, 1, True)
					RosSwordPuzzleSwordActivator4.Disable()
					ROSMQ11PuzzleSword04aActivator.Enable()
				EndIf
				Trap4.Activate(Self)
			ElseIf aiButton == 1 ; Sword2
				if (Game.GetPlayer().GetItemCount(ROSMQ11PuzzleSword02) > 0)
					Game.GetPlayer().RemoveItem(ROSMQ11PuzzleSword02, 1, True)
					RosSwordPuzzleSwordActivator4.Disable()
					ROSMQ11PuzzleSword04bActivator.Enable()
				EndIf
				Trap4.Activate(Self)
			ElseIf aiButton == 2 ; Sword3
				if (Game.GetPlayer().GetItemCount(ROSMQ11PuzzleSword03) > 0)
					Game.GetPlayer().RemoveItem(ROSMQ11PuzzleSword03, 1, True)
					RosSwordPuzzleSwordActivator4.Disable()
					ROSMQ11PuzzleSword04cActivator.Enable()
				EndIf
				Trap4.Activate(Self)
			ElseIf aiButton == 3 ; Sword4
				if (Game.GetPlayer().GetItemCount(ROSMQ11PuzzleSword04) > 0)
					Game.GetPlayer().RemoveItem(ROSMQ11PuzzleSword04, 1, True)
					RosSwordPuzzleSwordActivator4.Disable()
					ROSMQ11PuzzleSword04dActivator.Enable()
				EndIf
				LeadPole4.Activate(Self)
				sword4State = 1
			ElseIf aiButton == 4 ; None
				swordMenu4 = False
			EndIf
		EndIf
	EndWhile
	If (sword1State == 1 && sword2State == 1 && sword3State == 1 && sword4State == 1)
		puzzleState = 1
		Utility.Wait(1)
		rumbleSFX.Play(LeadPoleFinal)
		If (!oneTimeDustDropCounter)
			dustDropFX.Activate(Self)
			oneTimeDustDropCounter = True
		EndIf
		Utility.Wait(2.5)
		LeadPoleFinal.Activate(Self)
	EndIf
EndFunction

Function ActivateSword1(ObjectReference triggerRef)
; 	;Debug.Trace("Activating sword. " + triggerRef + " " + LeadPole1.GetOpenState())
	If (!(LeadPole1.GetOpenState() == 2 || LeadPole1.GetOpenState() == 4))
		if (triggerRef == ROSMQ11PuzzleSword01aActivator)
			If (sword1State == 1 && sword2State == 1 && sword3State == 1 && sword4State == 1)
				LeadPoleFinal.Activate(Self)
				puzzleState = 0
			EndIf
			Game.GetPlayer().AddItem(ROSMQ11PuzzleSword01, 1, False)
			RosSwordPuzzleSwordActivator1.Enable()
			ROSMQ11PuzzleSword01aActivator.Disable()
			LeadPole1.Activate(Self)
			sword1State = 0
		ElseIf (triggerRef == ROSMQ11PuzzleSword01bActivator)
			Game.GetPlayer().AddItem(ROSMQ11PuzzleSword02, 1, False)
			RosSwordPuzzleSwordActivator1.Enable()
			ROSMQ11PuzzleSword01bActivator.Disable()
		ElseIf (triggerRef == ROSMQ11PuzzleSword01cActivator)
			Game.GetPlayer().AddItem(ROSMQ11PuzzleSword03, 1, False)
			RosSwordPuzzleSwordActivator1.Enable()
			ROSMQ11PuzzleSword01cActivator.Disable()
		ElseIf (triggerRef == ROSMQ11PuzzleSword01dActivator)
			Game.GetPlayer().AddItem(ROSMQ11PuzzleSword04, 1, False)
			RosSwordPuzzleSwordActivator1.Enable()
			ROSMQ11PuzzleSword01dActivator.Disable()
		EndIf
	EndIf
EndFunction

Function ActivateSword2(ObjectReference triggerRef)
; 	;Debug.Trace("Activating sword. " + triggerRef + " " + LeadPole2.GetOpenState())
	If (!(LeadPole2.GetOpenState() == 2 || LeadPole2.GetOpenState() == 4))
		if (triggerRef == ROSMQ11PuzzleSword02aActivator)
			Game.GetPlayer().AddItem(ROSMQ11PuzzleSword01, 1, False)
			RosSwordPuzzleSwordActivator2.Enable()
			ROSMQ11PuzzleSword02aActivator.Disable()
		ElseIf (triggerRef == ROSMQ11PuzzleSword02bActivator)
			If (sword1State == 1 && sword2State == 1 && sword3State == 1 && sword4State == 1)
				LeadPoleFinal.Activate(Self)
				puzzleState = 0
			EndIf
			Game.GetPlayer().AddItem(ROSMQ11PuzzleSword02, 1, False)
			RosSwordPuzzleSwordActivator2.Enable()
			ROSMQ11PuzzleSword02bActivator.Disable()
			LeadPole2.Activate(Self)
			sword2State = 0
		ElseIf (triggerRef == ROSMQ11PuzzleSword02cActivator)
			Game.GetPlayer().AddItem(ROSMQ11PuzzleSword03, 1, False)
			RosSwordPuzzleSwordActivator2.Enable()
			ROSMQ11PuzzleSword02cActivator.Disable()
		ElseIf (triggerRef == ROSMQ11PuzzleSword02dActivator)
			Game.GetPlayer().AddItem(ROSMQ11PuzzleSword04, 1, False)
			RosSwordPuzzleSwordActivator2.Enable()
			ROSMQ11PuzzleSword02dActivator.Disable()
		EndIf
	EndIf
EndFunction

Function ActivateSword3(ObjectReference triggerRef)
; 	;Debug.Trace("Activating sword. " + triggerRef + " " + LeadPole3.GetOpenState())
	If (!(LeadPole3.GetOpenState() == 2 || LeadPole3.GetOpenState() == 4))
		if (triggerRef == ROSMQ11PuzzleSword03aActivator)
			Game.GetPlayer().AddItem(ROSMQ11PuzzleSword01, 1, False)
			RosSwordPuzzleSwordActivator3.Enable()
			ROSMQ11PuzzleSword03aActivator.Disable()
		ElseIf (triggerRef == ROSMQ11PuzzleSword03bActivator)
			Game.GetPlayer().AddItem(ROSMQ11PuzzleSword02, 1, False)
			RosSwordPuzzleSwordActivator3.Enable()
			ROSMQ11PuzzleSword03bActivator.Disable()
		ElseIf (triggerRef == ROSMQ11PuzzleSword03cActivator)
			If (sword1State == 1 && sword2State == 1 && sword3State == 1 && sword4State == 1)
				LeadPoleFinal.Activate(Self)
				puzzleState = 0
			EndIf
			Game.GetPlayer().AddItem(ROSMQ11PuzzleSword03, 1, False)
			RosSwordPuzzleSwordActivator3.Enable()
			ROSMQ11PuzzleSword03cActivator.Disable()
			LeadPole3.Activate(Self)
			sword3State = 0
		ElseIf (triggerRef == ROSMQ11PuzzleSword03dActivator)
			Game.GetPlayer().AddItem(ROSMQ11PuzzleSword04, 1, False)
			RosSwordPuzzleSwordActivator3.Enable()
			ROSMQ11PuzzleSword03dActivator.Disable()
		EndIf
	EndIf
EndFunction

Function ActivateSword4(ObjectReference triggerRef)
; 	;Debug.Trace("Activating sword. " + triggerRef + " " + LeadPole4.GetOpenState())
	If (!(LeadPole4.GetOpenState() == 2 || LeadPole4.GetOpenState() == 4))
		if (triggerRef == ROSMQ11PuzzleSword04aActivator)
			Game.GetPlayer().AddItem(ROSMQ11PuzzleSword01, 1, False)
			RosSwordPuzzleSwordActivator4.Enable()
			ROSMQ11PuzzleSword04aActivator.Disable()
		ElseIf (triggerRef == ROSMQ11PuzzleSword04bActivator)
			Game.GetPlayer().AddItem(ROSMQ11PuzzleSword02, 1, False)
			RosSwordPuzzleSwordActivator4.Enable()
			ROSMQ11PuzzleSword04bActivator.Disable()
		ElseIf (triggerRef == ROSMQ11PuzzleSword04cActivator)
			Game.GetPlayer().AddItem(ROSMQ11PuzzleSword03, 1, False)
			RosSwordPuzzleSwordActivator4.Enable()
			ROSMQ11PuzzleSword04cActivator.Disable()
		ElseIf (triggerRef == ROSMQ11PuzzleSword04dActivator)
			If (sword1State == 1 && sword2State == 1 && sword3State == 1 && sword4State == 1)
				LeadPoleFinal.Activate(Self)
				puzzleState = 0
			EndIf
			Game.GetPlayer().AddItem(ROSMQ11PuzzleSword04, 1, False)
			RosSwordPuzzleSwordActivator4.Enable()
			ROSMQ11PuzzleSword04dActivator.Disable()
			LeadPole4.Activate(Self)
			sword4State = 0
		EndIf
	EndIf
EndFunction



  

Post-Mortem:

I gained a lot of experience from working on the Beyond Skyrim: Roscrea project.

The large size and remote nature of the development team was something my education hadn’t fully prepared me for. I initially found the various discipline teams to be rather isolated from one another, rarely communicating outside their own disciplinary bubbles. When issues arose and completed work needed to be revised or redone, I attributed those setbacks to a lack of cross-communication between the teams.

Before joining the Roscrea team, I had never worked on a project with more than eight team members, where everyone participated in meetings — regardless of whether the topic was relevant to their specific discipline. Everyone had a voice, and everyone was kept up to date on changes being made.

As development progressed, I became more accustomed to working within a larger production. I began to recognize that my previous experience with a more “communal” production style wasn’t suited to a project of this scale — especially one with a fully remote team. Adjusting to this new structure became a key part of my learning experience.

Note: All screenshots and the video reflect the work of the entire team (Programming, Art, Design, FX, SFX, etc).