Dice Mini-Game for The Living and the Dead II

I created the dice mini-game, which, with the help of Uncle Ju and a talented team from www.tamriel.ru, became a part of the extensive add-on for The Elder Scrolls IV: Oblivion - The Living And The Dead II.

This was my first experience of collaborating with a team on a project of such scale.

Demo

Below, you can view a GIF image illustrating what was accomplished in the project:

Dice mini-game

Scripts

NPC Inventory Update Every 5 Days

I developed a script to update NPC inventory every 5 days. Here’s the script’s source code below:

scn a7DiceRefresh

begin gamemode

	if (GetDayOfWeek == 5)

		if(a7DiceNPCRef.GetItemCount a7DiceShirt == 0)
			a7DiceNPCRef.additem a7DiceShirt 1
			a7DiceNPCRef.equipitem a7DiceShirt 0	
		endif

		if(a7DiceNPCRef.GetItemCount a7DiceShoes == 0)
			a7DiceNPCRef.additem a7DiceShoes 1
			a7DiceNPCRef.equipitem a7DiceShoes 0	
		endif

		if(a7DiceNPCRef.GetItemCount Gold001 < 5)
			a7DiceNPCRef.additem Gold001 50
		endif

	endif

end

Main Logic Source Code

Here is the main source code that embodies the core logic of the project:

scn a7DiceRoll

short Randomizer
short Dice1PosX
short Dice1PosY
short Dice2PosX
short Dice2PosY
short Order
short Play
short Won
short Gold
short Misc
short Action
short Dice1Val
short Dice2Val
short DiceSumPlayer
short DiceSumNPC

begin gamemode
	if(Play == 1)		
          set Dice1Val to 1 + 0.06 * GetRandompercent
		set Dice2Val to 1 + 0.06 * GetRandompercent
		
		set Randomizer to 1 + 0.02 * GetRandompercent
		if(Randomizer == 1)
			set Randomizer to -1
		endif
		if(Randomizer == 2)
			set Randomizer to 1
		endif
		set Dice1PosX to 1969.3079 + Randomizer

		set Randomizer to 1 + 0.10 * GetRandompercent
		if(Randomizer <= 5)
			set Randomizer to Randomizer - Randomizer * 2
		endif
		if(Randomizer > 5)
			set Randomizer to Randomizer / 2
		endif
		set Dice1PosY to 2214.5613 + Randomizer

		set Randomizer to 1 + 0.02 * GetRandompercent
		if(Randomizer == 1)
			set Randomizer to -1
		endif
		if(Randomizer == 2)
			set Randomizer to 1
		endif
		set Dice2PosX to 1975.3948 + Randomizer

		set Randomizer to 1 + 0.10 * GetRandompercent
		if(Randomizer <= 5)
			set Randomizer to Randomizer - Randomizer * 2
		endif
		if(Randomizer > 5)
			set Randomizer to Randomizer / 2
		endif
		set Dice2PosY to 2213.5500 + Randomizer

		a7DiceDice01Ref.setPos x, Dice1PosX
		a7DiceDice01Ref.setPos y, Dice1PosY
		a7DiceDice01Ref.setPos z, 8100.8057

		a7DiceDice02Ref.setPos x, Dice2PosX
		a7DiceDice02Ref.setPos y, Dice2PosY
		a7DiceDice02Ref.setPos z, 8100.8057

		if(Dice1Val == 1)
			a7DiceDice01Ref.setAngle x, 270
			a7DiceDice01Ref.setAngle y, 0
			a7DiceDice01Ref.setAngle z, 0
		endif

		if(Dice1Val == 2)
			a7DiceDice01Ref.setAngle x, 0
			a7DiceDice01Ref.setAngle y, 270
			a7DiceDice01Ref.setAngle z, 0
		endif

		if(Dice1Val == 3)
			a7DiceDice01Ref.setAngle x, 0
			a7DiceDice01Ref.setAngle y, 0
			a7DiceDice01Ref.setAngle z, 0
		endif

		if(Dice1Val == 4)
			a7DiceDice01Ref.setAngle x, 180
			a7DiceDice01Ref.setAngle y, 0
			a7DiceDice01Ref.setAngle z, 0
		endif

		if(Dice1Val == 5)
			a7DiceDice01Ref.setAngle x, 0
			a7DiceDice01Ref.setAngle y, 90
			a7DiceDice01Ref.setAngle z, 0
		endif

		if(Dice1Val == 6)
			a7DiceDice01Ref.setAngle x, 90
			a7DiceDice01Ref.setAngle y, 0
			a7DiceDice01Ref.setAngle z, 0
		
		endif

		if(Dice2Val == 1)
			a7DiceDice02Ref.setAngle x, 270
			a7DiceDice02Ref.setAngle y, 0
			a7DiceDice02Ref.setAngle z, 0
		endif

		if(Dice2Val == 2)
			a7DiceDice02Ref.setAngle x, 0
			a7DiceDice02Ref.setAngle y, 270
			a7DiceDice02Ref.setAngle z, 0
		endif

		if(Dice2Val == 3)
			a7DiceDice02Ref.setAngle x, 0
			a7DiceDice02Ref.setAngle y, 0
			a7DiceDice02Ref.setAngle z, 0
		endif

		if(Dice2Val == 4)
			a7DiceDice02Ref.setAngle x, 180
			a7DiceDice02Ref.setAngle y, 0
			a7DiceDice02Ref.setAngle z, 0
		endif

		if(Dice2Val == 5)
			a7DiceDice02Ref.setAngle x, 0
			a7DiceDice02Ref.setAngle y, 90
			a7DiceDice02Ref.setAngle z, 0
		endif

		if(Dice2Val == 6)
			a7DiceDice02Ref.setAngle x, 90
			a7DiceDice02Ref.setAngle y, 0
			a7DiceDice02Ref.setAngle z, 0
		endif

		if(Order == 1)
			a7DiceDice01Ref.enable
			a7DiceDice02Ref.enable
			set DiceSumNPC to Dice1Val + Dice2Val
			Message "Очки противника: %.0f" DiceSumNPC, 10
			set Play to 2
		endif
		
		if(Order == 2)
			a7DiceDice01Ref.enable
			a7DiceDice02Ref.enable
			set DiceSumPlayer to Dice1Val + Dice2Val
			Message "Мои очки: %.0f" DiceSumPlayer, 10
			set Play to 2
		endif
	endif

	if(Order > 0 && Player.GetSitting == 0)
		a7DiceNPCRef.StartConversation Player, a7DiceNotSit
		Player.RemoveItem Gold001 Gold
		a7DiceNPCRef.additem Gold001 Gold	
		set Randomizer to 0
		set Dice1PosX to 0
		set Dice1PosY to 0
		set Dice2PosX to 0
		set Dice2PosY to 0
		set Order to 0
		set Play to 0
		set Won to 0
		set Gold to 0
		set Misc to 0
		short Action = 0
		set Dice1Val to 0
		set Dice2Val to 0
		set DiceSumPlayer to 0
		set DiceSumNPC to 0
		return		
	endif

	if(DiceSumPlayer > DiceSumNPC && Order == 2 && Play == 2)
		set Won to 1
	endif
	if(DiceSumPlayer < DiceSumNPC && Order == 2 && Play == 2)
		set Won to 2
	endif
	if(DiceSumPlayer == DiceSumNPC && Order == 2 && Play == 2)
		set Won to 3
	endif

	if(Action == 1 && Order == 2)		
		if(Misc == 1)
			a7DiceNPCRef.removeitem a7DiceShoes, 1
        		Player.additem a7DiceShoes, 1
		endif
		if(Misc == 2)
     		a7DiceNPCRef.removeitem a7DiceShirt, 1
        		Player.additem a7DiceShirt, 1
		endif
		if(Misc == 0)
			Player.additem Gold001, Gold
			a7DiceNPCRef.removeitem Gold001, Gold
		endif	
		set Randomizer to 0
		set Dice1PosX to 0
		set Dice1PosY to 0
		set Dice2PosX to 0
		set Dice2PosY to 0
		set Order to 0
		set Play to 0
		set Won to 0
		set Gold to 0
		set Misc to 0
		set Action to 0
		set Dice1Val to 0
		set Dice2Val to 0
		set DiceSumPlayer to 0
		set DiceSumNPC to 0
		return
	endif

	if(Action == 2 && Order == 2)
		a7DiceNPCRef.additem Gold001, Gold
		Player.removeitem Gold001, Gold
		set Randomizer to 0
		set Dice1PosX to 0
		set Dice1PosY to 0
		set Dice2PosX to 0
		set Dice2PosY to 0
		set Order to 0
		set Play to 0
		set Won to 0
		set Gold to 0
		set Misc to 0
		set Action to 0
		set Dice1Val to 0
		set Dice2Val to 0
		set DiceSumPlayer to 0
		set DiceSumNPC to 0
		return
	endif

	if(Action == 3 && Order == 2)
		set Randomizer to 0
		set Dice1PosX to 0
		set Dice1PosY to 0
		set Dice2PosX to 0
		set Dice2PosY to 0
		set Order to 0
		set Play to 0
		set Won to 0
		set Gold to 0
		set Misc to 0
		set Action to 0
		set Dice1Val to 0
		set Dice2Val to 0
		set DiceSumPlayer to 0
		set DiceSumNPC to 0
		return
	endif
end