Wedding Cutscene

naonauno
naonauno
Author

Description

This script is the WIP of the new Wedding Cutscene event.

Tags

cutscene event wedding

Script Details

Version v4
Visibility Public
Created Apr 04, 2025
Last Updated Apr 11, 2025
Collaborators
1

Script Content

39411 characters
-- Native calls
function CleanUp()
	LogMessage("@NAO [WeddingCeremony] CleanUp().")

	f_EndUseLocator("Orphan#1", "flowerchild1", GL_STANCE_STAND)
	f_EndUseLocator("Orphan#2", "flowerchild2", GL_STANCE_STAND)

	if AliasExists("#COURTED") then 
		f_EndUseLocator("#COURTED", "MarryPos2", GL_STANCE_STAND)
		ReleaseAvoidanceGroup("#COURTED")
		RemoveProperty("#COURTED", "OCCURING_MARRIAGE")
		RemoveProperty("#COURTED", "Wedding")
		RemoveProperty("#COURTED", "courted")
		RemoveProperty("#COURTED", "WEDDING_FORCED")
	end

	if AliasExists("#MAIN") then
		RemoveProperty("#MAIN", "IsMainActorInWeddingCeremony")
		f_EndUseLocator("#MAIN", "MarryPos1", GL_STANCE_STAND)
		AllowAllMeasures("#MAIN")
		ReleaseAvoidanceGroup("#MAIN")
		RemoveProperty("#MAIN","InWedding")
		RemoveProperty("#MAIN", "OCCURING_MARRIAGE")
		RemoveProperty("#MAIN", "WEDDING_FORCED")
	end

	GetInsideBuilding("#MAIN", "#WEDDING_CHAPEL")

	if AliasExists("Visitors") then
		ListClear("Visitors")
	end

	BuildingGetInsideSimList("#WEDDING_CHAPEL", "tmp")
	BuildingFindSimByProperty("#WEDDING_CHAPEL", "BUILDING_NPC", 11, "#PRIEST")
	ListRemove("tmp","#PRIEST")

	LogMessage("@NAO [WeddingCeremony] Length of list:" .. ListSize("tmp"))
 
	BuildingLockForCutscene("#WEDDING_CHAPEL", 0)

	SetState("#MAIN", STATE_CUTSCENE, false)

	for i = 0, ListSize("tmp") -1 do
		ListGetElement("tmp", i, "#SIM"..i)

		if SimGetAge("#SIM"..i) > 15 then
			LogMessage("@NAO [WeddingCeremony] CleanUp ['"..GetName("#SIM"..i).."']")

			AllowMeasure("#SIM"..i, "BuyNobilityTitle", EN_BOTH)

			if HasProperty("#SIM"..i, "AttendingWedding") then
				RemoveProperty("#SIM"..i, "AttendingWedding")
			end
			if HasProperty("#SIM"..i, "WEDDING_GUEST") then
				RemoveProperty("#SIM"..i, "WEDDING_GUEST")
			end

			SimResetBehavior("#SIM"..i)
			f_ExitCurrentBuilding("#SIM"..i)
			
			if GetInsideBuilding("#SIM"..i, "#BUILDING") ~= false then
				if GetID("#BUILDING") == GetID("#WEDDING_CHAPEL") then
					ReleaseAvoidanceGroup("#SIM"..i)
					MoveSetActivity("#SIM"..i)
				end
			end
		end
	end

	ListClear("tmp")
end

function Init()
    GetSettlement("#MAIN", "settlement")

	if not FindNearestBuilding("#MAIN", -1, GL_BUILDING_TYPE_WEDDINGCHAPEL, -1, false, "#WEDDING_CHAPEL") then
		MsgQuick("#MAIN", "Building #WEDDING_CHAPEL not found!")
		return
	end

	LogMessage("@NAO [WeddingCeremony] Init of: " .. GetName("#MAIN") .. " and " .. GetName("#COURTED"))

	local function getDate()

		local timer = 
			{
				getCurrentRound = math.floor(GetGametime()/24),
				getCurrentTime = math.mod(GetGametime(), 24),
				getEventDate = 0
			}

		LogMessage("@NAO [WeddingCeremony] Current Round: "..timer.getCurrentRound)
		LogMessage("@NAO [WeddingCeremony] Current Game Time: "..timer.getCurrentTime.."h00.")

		local found = false

		while not found do
		    local slotKey = "CEREMONY_SLOT#"..timer.getCurrentRound.."#"..timer.getEventDate

		    if not HasProperty("#WEDDING_CHAPEL", slotKey) then
		        local currentTime = math.floor(GetGametime() / 24)
		        local timeDifference = timer.getEventDate - timer.getCurrentTime

		        if timer.getCurrentRound == currentTime and timeDifference < 4 then
		            LogMessage("@NAO [WeddingCeremony] 4H PREP TIME IMPOSSIBLE FOR: " .. slotKey)
		            SetProperty("#WEDDING_CHAPEL", slotKey, 0)
		            timer.getEventDate = timer.getEventDate + 6

		            if timer.getEventDate > 24 - 1 then
		                timer.getEventDate = 0
		                timer.getCurrentRound = timer.getCurrentRound + 1
		            end
		        else
		            LogMessage("@NAO [WeddingCeremony] SLOT FOUND: " .. slotKey)
		            SetProperty("#WEDDING_CHAPEL", slotKey, timer.getEventDate)
		            found = true
		            return timer.getEventDate
		        end
		    else
		        LogMessage("@NAO [WeddingCeremony] ALREADY TAKEN: " .. slotKey)
		        timer.getEventDate = timer.getEventDate + 6

		        if timer.getEventDate > 24 - 1 then
		            timer.getEventDate = 0
		            timer.getCurrentRound = timer.getCurrentRound + 1
		        end
		    end
		end
	end

    local date = getDate()
    CityScheduleCutsceneEvent("settlement", "Date(Wedding)", "", "Start", date, 4, "@L_WEDDING_CITYEVENT_+0", GetID("#MAIN"), GetID("#COURTED"))

	SimAddDatebookEntry("#MAIN", SettlementEventGetTime("Date(Wedding)"), "#WEDDING_CHAPEL","You are getting married!","This is your big day! You are getting married soon, you should probably attend the event in a great moment of community.")
	SimAddDate("#MAIN","#WEDDING_CHAPEL", "#WEDDING_CHAPEL", SettlementEventGetTime("Date(Wedding)")-120, "AttendWedding")

	SimAddDatebookEntry("#COURTED", SettlementEventGetTime("Date(Wedding)"), "#WEDDING_CHAPEL","You are getting married!","This is your big day! You are getting married soon, you should probably attend the event in a great moment of community.")
	SimAddDate("#COURTED","#WEDDING_CHAPEL", "#WEDDING_CHAPEL", SettlementEventGetTime("Date(Wedding)")-120, "AttendWedding")

    local function canInvite(GuestAlias, GuestDyn)
        return math.max(GetNobilityTitle("#MAIN"), GetNobilityTitle("#COURTED")) >= GetNobilityTitle(GuestAlias) - 2 and f_SimIsValid(GuestAlias) and not GetState(GuestAlias, STATE_SICK)
    end

    local function invite(GuestAlias)
        local Invitation = MsgNews(GuestAlias, "", "@P"..
            "@B[O, @L_THIEF_067_LETABDUCTEEOUT_ACTION_BTN_+0]"..
            "@B[C, @L_THIEF_067_LETABDUCTEEOUT_ACTION_BTN_+1]", 
            weddingceremony_AIInitAnswer, "politics", 2, 
            "@L_FAMILY_1_MARRIAGE_MESSAGE_HEAD_LEAVE_+0",
            "@L_MEASURE_MARRY_CEREMONY_ASK_BODY_+0",
            GetID("#MAIN"), GetID("#COURTED"), GetID("#WEDDING_CHAPEL"), GetID(GuestAlias))

        	if Invitation == "O" or Invitation == "C" then
        		SimAddDate(GuestAlias, "#WEDDING_CHAPEL", "#WEDDING_CHAPEL", SettlementEventGetTime("Date(Wedding)")-120, "AttendWedding")
        		SimAddDatebookEntry(GuestAlias, SettlementEventGetTime("Date(Wedding)"), "#WEDDING_CHAPEL", "@L_WEDDING_CEREMONY_DIARY_BODY_+0","@L_WEDDING_CEREMONY_DIARY_HEAD_+0")
        		SetProperty(GuestAlias, "AttendingWedding", 1)
        		--MsgNewsNoWait("#MAIN", GuestAlias, "", "politics", -1, "Answer to the Wedding invitation","I will be happy to attend your Wedding Ceremony.")
        		--MsgNewsNoWait("#COURTED", GuestAlias, "", "politics", -1, "Answer to the Wedding invitation","I will be happy to attend your Wedding Ceremony.")
        		SetProperty(GuestAlias, "WEDDING_GUEST", 1) 
        		MsgNewsNoWait(GuestAlias, GuestAlias, "@C[@L_WEDDING_COOLDOWN_BODY_+0,%3i,%4l]", "default", -1, "@L_WEDDING_COOLDOWN_HEAD_+0", "@L_WEDDING_COOLDOWN_BODY_+0", GetID("#MAIN"), GetID("#COURTED"), DestTime, ID)
        	else
        		return false
        	end
    end

    local function returnSim(index, dynasty)
		if not DynastyGetFamilyMember(dynasty, index, "Guest") then
			return false
		end

		if SimGetAge("Guest") < 16 then
			return false
		end

		if GetID("Guest") == GetID("#MAIN") or GetID("Guest") == GetID("#COURTED") then
			return false
		end

		if GetID(dynasty) ~= GetDynastyID("Guest") then
			return false
		end

		if canInvite("Guest", "GuestDyn") then
			return invite("Guest")
		end
    end

    if GetSettlement("#MAIN", "#SETTLEMENT") then
    	local i, u
        for i = 0, CityGetBuildings("#SETTLEMENT", GL_BUILDING_CLASS_LIVINGROOM, -1, -1, -1, FILTER_HAS_DYNASTY, "Residence") - 1 do
            if GetDynasty("Residence"..i, "GuestDyn") then
                local limit = 0
                for u = 0, DynastyGetFamilyMemberCount("GuestDyn") - 1 do
                    if returnSim(u, "GuestDyn") then
                    	limit = limit + 1
                    	if limit == 3 then
                        	break
                    	end
                    end
                end
            end
        end
    end

	local ID = "Event" .. GetID("#MAIN")
	local DestTime = math.mod(GetGametime(),24) + date/60 - math.mod(GetGametime(),24)

	MsgNewsNoWait("#MAIN", "#MAIN", "@C[@L_WEDDING_COOLDOWN_+0,%3i,%4l]", "default", -1, "@L_WEDDING_COOLDOWN_HEAD_+0", "@L_WEDDING_COOLDOWN_BODY_TO_SELF_+0", GetID("#MAIN"), GetID("#COURTED"), DestTime, ID)
	MsgNewsNoWait("#COURTED", "#COURTED", "@C[@L_WEDDING_COOLDOWN_+0,%3i,%4l]", "default", -1, "@L_WEDDING_COOLDOWN_HEAD_+0", "@L_WEDDING_COOLDOWN_BODY_TO_COURTED_+0", GetID("#MAIN"), GetID("#COURTED"), DestTime, ID)
end

-- Call Threads
function InitSims()
	BuildingFindSimByProperty("", "BUILDING_NPC", 11, "#PRIEST")

	BuildingGetInsideSimList("", "tmp")
	ListRemove("tmp", "#PRIEST")
	ListRemove("tmp", "#MAIN")
	ListRemove("tmp", "#COURTED")

	local OrphanCount = 0

	ListNew("Visitors")
	for i = 0, ListSize("tmp") -1 do
		ListGetElement("tmp", i, "#SIM"..i)
		if SimGetAge("#SIM"..i) > 15 then
			ListAdd("Visitors","#SIM"..i)
			CutsceneAddSim("","#SIM"..i)
			LogMessage("@NAO [WeddingCeremony] Visitor added to list: " .. GetName("#SIM"..i))
			SimResetBehavior("#SIM"..i)
			SimSetBehavior("#SIM"..i, "idle")
			SimStopMeasure("#SIM"..i)
		else
			OrphanCount = OrphanCount +1
			ChangeAlias("#SIM"..i, "Orphan#"..OrphanCount)
			LogMessage("@NAO [WeddingCeremony] Minor (" .. OrphanCount .. "): " .. GetName("Orphan#"..OrphanCount))
		end
	end
	ListClear("tmp")

	CutsceneAddSim("", "#MAIN")
	CutsceneAddSim("", "#COURTED")
	CutsceneAddSim("", "#PRIEST")
	if AliasExists("Orphan#1") and AliasExists("Orphan#2") then
		CutsceneAddSim("","Orphan#1")
		CutsceneAddSim("","Orphan#2")
	end
end

function SetUpOrphan1()
	GetLocatorByName("#WEDDING_CHAPEL", "flowerchild1", "FC1")
	f_MoveTo("", "FC1")
	f_BeginUseLocator("", "FC1", GL_STANCE_STAND, true)
	GetPosition("", "Pos1")
	StartSingleShotParticle("particles/pray_glow.nif", "Pos1", 1, 15)
end

function SetUpOrphan2()
	GetLocatorByName("#WEDDING_CHAPEL", "flowerchild2", "FC2")
	f_MoveTo("", "FC2")
	f_BeginUseLocator("", "FC2", GL_STANCE_STAND, true)
	GetPosition("", "Pos2")
	StartSingleShotParticle("particles/pray_glow.nif", "Pos2", 1, 15)
end

function ImportantSimIsMissing()
	LogMessage("@NAO [WeddingCeremony] " .. GetName("") .. " has missed their wedding.")
	MsgQuick("#MAIN", GetName("#MISSING").." is missing!")

	CutsceneCameraSetRelativePosition("", "#CHAPEL_PRIEST", "#PRIEST")
	MsgSay("#PRIEST", "_MEASURE_MARRY_CEREMONY_UNEXPECTED_SITUATION_+0")
	MsgSay("#PRIEST", "_MEASURE_MARRY_CEREMONY_MISSING_+0", GetID("MISSING"))
	MsgSay("#PRIEST", "_MEASURE_MARRY_CEREMONY_MISSING_+1")
	MsgSay("#PRIEST", "_MEASURE_MARRY_CEREMONY_UNEXPECTED_SITUATION_+1")
	ClearImportantPersonSection("Wedding")
	Sleep(5)
	EndCutscene("")
	DestroyCutscene("")
	return
end

function ImportantSimCannotPay()
	LogMessage("@NAO [WeddingCeremony] " .. GetName("") .. " cannot cover the expenses of the ceremony.")
	MsgQuick("#MAIN","@L_MEASURE_WEDDING_FAILURE_+1", GetID(""))

	CutsceneCameraSetRelativePosition("", "#CHAPEL_PRIEST", "#PRIEST")
	MsgSay("#PRIEST", "_MEASURE_MARRY_CEREMONY_UNEXPECTED_SITUATION_+0")
	MsgSay("#PRIEST", "_MEASURE_MARRY_CEREMONY_NO_MONEY_+0", GetID("#MAIN"))
	MsgSay("#PRIEST", "_MEASURE_MARRY_CEREMONY_NO_MONEY_+1")
	MsgSay("#PRIEST", "_MEASURE_MARRY_CEREMONY_UNEXPECTED_SITUATION_+1")
	ClearImportantPersonSection("Wedding")
	Sleep(5)
	EndCutscene("")
	DestroyCutscene("")
	return
end

function GoToMarryPos()
	f_MoveTo("", "E2")
	f_BeginUseLocator("", "E2", GL_STANCE_STAND, true) 
	SetData("There", 1)
	while true do
		Sleep(5)
	end
end

function DoReactGuest()
	local DIALOG, EMOTE = "_POSITIVE", "bench_talk_short"

	if DynastyGetDiplomacyState("#MAIN", "#SIM") == DIP_FOE or GetFavorToDynasty("#MAIN", "#SIM") < 40 or SimGetAlignment("#MAIN") >= 70 then
		DIALOG = "_NEGATIVE"
		EMOTE = "bench_talk_offended"
	elseif GetFavorToDynasty("#MAIN", "#SIM") <= 55 and DynastyGetDiplomacyState("#MAIN", "#SIM") < DIP_ALLIANCE then
		if Rand(2) == 0 then
			DIALOG = "_NEGATIVE"
			EMOTE = "bench_talk_offended"
		end
	end

	local SKILL = GetSkillValue("#SIM", RHETORIC)

	if SKILL >= 7 then
		DIALOG = DIALOG.."_GOOD_RHETORIC"
	elseif SKILL >= 4 then
		DIALOG = DIALOG.."_NORMAL_RHETORIC"
	else
		DIALOG = DIALOG.."_WEAK_RHETORIC"
	end

	Sleep(0.25)
	DIALOG = "@L_FAMILY_1_MARRIAGE_COMMENT"..DIALOG

	PlayAnimationNoWait("#SIM", EMOTE)
	MsgSay("#SIM", DIALOG)
end

local function GetCost()
	return ( math.max(GetNobilityTitle("#MAIN"), IsDynastySim("#COURTED") and GetNobilityTitle("#COURTED") or 0) *2) *300
end

function AIInitAnswer()
	local list, timer = {"Office","Trial","Duel"}

	for i = 1, 3 do
		if GetImpactValue("Guest", list[i].."Timer") > 0 then
			if ImpactGetMaxTimeleft("Guest", list[i].."Timer") <= 4 then
				return "C"
			end
		end
	end
		
	if Rand(2) == 0 then
		return "O"
	else
		return "C"
	end
end

function UseSitGuest()
	MoveSetStance("", GL_STANCE_SITBENCH)
end

function GoToSitGuest()
	LogMessage("@NAO SitGuest with "..GetName(""))
	if SimGetAge("") > 15 and HasProperty("", "AttendingWedding") then
		GetFreeLocatorByName("#WEDDING_CHAPEL", "Sit", 1, 29, "#POS", false)
		f_BeginUseLocator("", "#POS", GL_STANCE_STAND, true)
	end
end

function GetUp()
	local Random = Rand(5)
	Sleep(1/Random)
	MoveSetStance("", GL_STANCE_STAND)
end

function Flee()
	GetFleePosition("", "", 75, "FleePos")
	f_MoveTo("", "FleePos", GL_MOVESPEED_RUN)
end

-- Scheduled Event
function Start()

	LogMessage("@NAO [WeddingCeremony] Celebrating "..GetName("#MAIN").." and "..GetName("#COURTED").."'s union. |")

	CutsceneCallThread("", "InitSims", "#WEDDING_CHAPEL")

	BuildingFindSimByProperty("#WEDDING_CHAPEL", "BUILDING_NPC", 11, "#PRIEST")

	MsgSayNoWait("#PRIEST", "_MEASURE_MARRY_CEREMONY_TAKE_A_SEAT_+0")

	if not chr_SpendMoney("#MAIN", GetCost(), "Wedding") then
		if not HasProperty("", "Tutorial") then
			CutsceneCallThread("", "ImportantSimCannotPay", "#MAIN")
			return
		end
	end

	BuildingGetInsideSimList("#WEDDING_CHAPEL", "Sit_Visitors")

	ListRemove("Sit_Visitors", "#MAIN")
	ListRemove("Sit_Visitors", "#COURTED")
	ListRemove("Sit_Visitors", "#PRIEST")

	for i = 0, ListSize("Sit_Visitors") -1 do
		ListGetElement("Sit_Visitors", i, "#SIM")
		CutsceneCallThread("", "GoToSitGuest", "#SIM")
	end

	if AliasExists("Orphan#1") and AliasExists("Orphan#2") then
		CutsceneCallThread("", "SetUpOrphan1", "Orphan#1")
		CutsceneCallThread("", "SetUpOrphan2", "Orphan#2")
		ListRemove("Sit_Visitors", "Orphan#1")
		ListRemove("Sit_Visitors", "Orphan#2")
	end

	BuildingLockForCutscene("#WEDDING_CHAPEL", "")

	GetLocatorByName("#WEDDING_CHAPEL", "WeddingPriest", "PriestPos", false)
	GetLocatorByName("#WEDDING_CHAPEL", "Exit1", "E1")
	GetLocatorByName("#WEDDING_CHAPEL", "Exit2", "E2")
	GetLocatorByName("#WEDDING_CHAPEL", "Front1", "MarryPos1") 
	GetLocatorByName("#WEDDING_CHAPEL", "Front2", "MarryPos2")

	Sleep(2)

	f_StartHighPriorMusic(13)

	CutsceneCameraCreate("", "#PRIEST")

	SetExclusiveMeasure("#MAIN", 3000, EN_BOTH)
	ForbidMeasure("#MAIN", 3000, EN_BOTH)

	if not GetInsideBuilding("#COURTED", "#WEDDING_CHAPEL") then
		CopyAlias("#COURTED", "#MISSING")
	elseif not GetInsideBuilding("#COURTED", "#WEDDING_CHAPEL") then 
		CopyAlias("#MAIN", "#MISSING")
	end

	if AliasExists("#MISSING") then
		CutsceneCallThread("", "ImportantSimIsMissing", "#MISSING")
		return
	end

    CutsceneCallThread("", "GoToMarryPos", "#COURTED")

    f_MoveToNoWait("#MAIN", "E1")
    f_BeginUseLocatorNoWait("#MAIN", "E1", GL_STANCE_STAND, true)

    while not HasData("There") do
		CutsceneCameraBlend("", 0.1, 1)
		CutsceneCameraSetRelativePosition("", "#CHAPEL_PRIEST", "#MAIN")
		Sleep(0.1)
    end

    CutsceneCameraSetRelativePosition("", "#CHAPEL_PRIEST", "#PRIEST")
    PlayFE("#PRIEST", "smile", 2, 2.5, 0)
    Sleep(2.5)

	AlignTo("#MAIN", "#COURTED")
	AlignTo("#COURTED", "#MAIN")

	SetAvoidanceGroup("#MAIN", "#COURTED")

	local Guests = ListSize("Visitors")

	CutsceneCameraSetRelativePosition("", "#CHAPEL_INTRO(01)", "#PRIEST")
	CutsceneCameraBlend("", 5, 1)
	CutsceneCameraSetRelativePosition("", "#CHAPEL_INTRO(02)", "#PRIEST")
	Sleep(5.5)

	PlayFE("#MAIN", "smile", 2, 2.5, 0)
	PlayFE("#COURTED", "smile", 2, 2.5, 0)

	Sleep(1.5)
	AlignTo("#MAIN", "#PRIEST")
	AlignTo("#COURTED", "#PRIEST")
	Sleep(1.5)

	f_MoveToNoWait("#MAIN", "MarryPos1", GL_MOVESPEED_WALK)	
	f_MoveToNoWait("#COURTED", "MarryPos2", GL_MOVESPEED_WALK)

	Sleep(0.5)
	CutsceneCameraSetRelativePosition("", "#CHAPEL_INTRO(BACK)", "#MAIN")
	Sleep(0.5)
	CutsceneCameraBlend("", 15, 1)
	CutsceneCameraSetRelativePosition("", "#CHAPEL_PRIEST(FAR)", "#PRIEST")

	f_BeginUseLocator("#COURTED", "MarryPos2", GL_STANCE_STAND, true)
	f_BeginUseLocator("#MAIN", "MarryPos1", GL_STANCE_STAND, true)

	Sleep(1)

	local list = { {"#COURTED","#MAIN"}, {"#MAIN","#COURTED"} }

	MsgSay("#PRIEST", "_FAMILY_1_MARRIAGE_CEREMONY_PRIEST_HUSBAND_+0", GetID(list[SimGetGender("#MAIN")+1][1]), GetID(list[SimGetGender("#MAIN")+1][2]))

	for i = 0, ListSize("Sit_Visitors") -1 do
		ListGetElement("Sit_Visitors", i, "#SIM")
		CutsceneCallThread("", "UseSitGuest", "#SIM")
	end

	ListClear("Sit_Visitors")

	CutsceneCameraSetRelativePosition("", "#CHAPEL_PRIEST", "#PRIEST")

	MsgSay("#PRIEST", "_FAMILY_1_MARRIAGE_CEREMONY_PRIEST_HUSBAND_+1", GetID(list[SimGetGender("#MAIN")+1][1]), GetID(list[SimGetGender("#MAIN")+1][2]))

	CutsceneCameraSetRelativePosition("", "#CHAPEL_PRIEST(FAR)","#PRIEST")

	CutsceneSetData("", "SkipProgressBar", 0)

	TrialHUDSetSims("", GetID("#MAIN"), GetID("#COURTED"), GetID("#PRIEST"), GetID("#PRIEST"), GetID("#PRIEST"))
	
	CutsceneCallThread("", "SetWeddingHUD", "#MAIN")

	CutsceneHUDShow("", "LetterBoxPanel")
	CutsceneHUDShow("", "TrialPanel")
	CutsceneShowCharacterPanel("", true)

	-- Progress, Guest1, Guest2, Guest3, Arrow, Timer
	TrialHUDSetStatus("", 0, 0, 0, 0, 0, 0.0)
	Sleep(0.5)

	TrialHUDSetStatus("", 8, 7, 8, 9, 8, 2.0)
	Sleep(0.5)

	SetProperty("#MAIN", "IsMainActorInWeddingCeremony", "1")

	SetExclusiveMeasure("#MAIN", 3000, EN_BOTH)
	AllowMeasure("#MAIN", 3001, EN_BOTH)
	AllowMeasure("#MAIN", 3002, EN_BOTH)

	if GetLocalPlayerDynasty("LocalPlayerDyn") then
		GetDynasty("#MAIN", "SimDyn")
		if (GetID("SimDyn") == GetID("LocalPlayerDyn")) then
			HudClearSelection()
			HudAddToSelection("#MAIN")
		end
	end

	Sleep(1)

	ProgressBar:SetValueInt("VISIBILITY", 1)
	local Width
	while true do
		Width = ProgressBar:GetValueInt("ABS_WIDTH")
		ProgressBar:SetValueInt("ABS_WIDTH", Width-5)
		Sleep(0.1)
		if Width < 10 or CutsceneGetData("", "SkipProgressBar") then
			break
		end
	end

	ProgressBar:SetValueInt("VISIBILITY",0)
	ProgressBar:SetValueInt("ABS_WIDTH",1000)

	if CutsceneGetData("", "SkipProgressBar") then
		LogMessage("@NAO #E No Skip detected.")
		CutsceneCallThread("", "SayYes", "#MAIN")
	end
end

function ContinueAfterYes()
	SimGetCutscene("#MAIN", "Cutscene")

	local list = { {"#COURTED","#MAIN"}, {"#MAIN","#COURTED"} }

	CutsceneHUDShow("Cutscene", "LetterBoxPanel", false)
	CutsceneHUDShow("Cutscene", "TrialPanel", false)

	CutsceneCameraBlend("Cutscene", 2, 1)
	CutsceneCameraSetRelativePosition("Cutscene", "#CHAPEL_RIGHT", "#PRIEST")
	Sleep(1.25)
	PlayAnimationNoWait("#COURTED", "giggle")
	Sleep(0.5)
	PlayAnimationNoWait("#MAIN", "curtsy")

	MsgSay(list[SimGetGender("#MAIN")+1][1], "_FAMILY_1_MARRIAGE_CEREMONY_ANSWER_+0")

	CutsceneCameraSetRelativePosition("Cutscene", "#CHAPEL_PRIEST(FAR)","#PRIEST")

	MsgSay("#PRIEST", "_FAMILY_1_MARRIAGE_CEREMONY_PRIEST_WIFE_+0", GetID(list[SimGetGender("#MAIN")+1][2]), GetID(list[SimGetGender("#MAIN")+1][1]))

	CutsceneCameraBlend("", 2, 1)
	CutsceneCameraSetRelativePosition("", "#CHAPEL_LEFT", "#PRIEST")
	Sleep(1.25)
	PlayAnimationNoWait("#MAIN", "giggle")
	Sleep(0.75)
	PlayAnimationNoWait("#COURTED", "nod")

	MsgSay(list[SimGetGender("#MAIN")+1][2], "_FAMILY_1_MARRIAGE_CEREMONY_ANSWER_+0")

	CutsceneCameraSetRelativePosition("", "#CHAPEL_PRIEST(FAR)", "#PRIEST")

	MsgSay("#PRIEST", "_FAMILY_1_MARRIAGE_CEREMONY_PRIEST_FINALE_+0", GetID(list[SimGetGender("#MAIN")+1][1]))

	CutsceneCameraBlend("", 8, 1)
	CutsceneCameraSetRelativePosition("", "#CHAPEL_PRIEST(UP)", "#PRIEST")

	AlignTo("#MAIN", "#COURTED")
	AlignTo("#COURTED", "#MAIN")
	Sleep(1)

	ShowOverheadSymbol("#MAIN", false, true, 0, "@L$S[2001]")
	ShowOverheadSymbol("#COURTED", false, true, 0, "@L$S[2001]")

	if AliasExists("Orphan#1") and AliasExists("Orphan#2") then
		PlayAnimationNoWait("Orphan#1", "pray_standing")
		PlayAnimationNoWait("Orphan#2", "pray_standing")
	end

	AnimLength = chr_MultiAnim(list[SimGetGender("#MAIN")+1][1], "kiss_male", list[SimGetGender("#MAIN")+1][2], "kiss_female", 128, 1.0, true)
	Sleep(AnimLength * 0.25)

	ShowOverheadSymbol("#COURTED", false, true, 0, "@L$S[2001]")
	ShowOverheadSymbol("#MAIN", false, true, 0, "@L$S[2001]")

	if not HasProperty("#MAIN", "CourtingDiff") then			
		gameplayformulas_CalcCourtingDifficulty("#COURTED", "#MAIN")
	end

	local Difficulty = GetProperty("#MAIN", "CourtingDiff")
	xp_CourtingSuccess("#MAIN", Difficulty, 1)
	xp_CourtingSuccess("#COURTED", Difficulty, 1)

	Sleep(0.25)

	for i = 0, Guests-1 do
		ListGetElement("Visitors", i, "#SIM")
		if IsDynastySim("#SIM") and not GetState("#SIM", STATE_NPC) then
			if GetID("#SIM") ~= GetID("#MAIN") and GetID("#SIM") ~= GetID("#COURTED") then
				chr_GainXP("#SIM", GL_EXP_GAIN_RARE)
				ReleaseLocator("#SIM")
				if GetDynasty("#SIM", "CheckDyn") then
					if GetImpactValue("CheckDyn", "Ceremony") == 0 then
						AddImpact("CheckDyn", "Ceremony", 1, 6)
					end
				end
			end
		end

		ModifyFavorToSim("#SIM", "#MAIN", GL_FAVOR_MOD_VERYSMALL)
	end

	if Guests > 8 then
    	dyn_AddFame("#MAIN", 3)
	elseif Guests > 5 then
	    dyn_AddFame("#MAIN", 2)
	elseif Guests > 2 then
	    dyn_AddFame("#MAIN", 1)
	end

	MsgNewsNoWait("All", "", "", "politics", -1, "@L_MEASURE_MARRY_CEREMONY_HEAD_+0", "@L_MEASURE_MARRY_CEREMONY_NEWS_BODY_+0", GetID("#MAIN"), GetID("#COURTED"), GetID("#WEDDING_CHAPEL"), Guests)

	Sleep(0.5)

	LogMessage("@NAO [WeddingCeremony] There are "..ListSize("Visitors").." visitors. ("..Guests.." guests)")

	if Guests > 1 then
		ListNew("Reacting")
		for INDEX = 0, (Guests -1) do
			local CONFLICTING = false
			ListGetElement("Visitors", INDEX, "#REACT")
			LogMessage("@NAO [WeddingCeremony] Currently processing "..GetName("#REACT").." (Sim "..INDEX..").")

			if ListSize("Reacting") > 0 then
				for CHECK = 0, ListSize("Reacting")-1 do
					ListGetElement("Reacting", CHECK, "#VERIFY")
					if GetName("#VERIFY") == GetName("#REACT") then 
						CONFLICTING = true
					end
				end
			end
			if not CONFLICTING then
				LogMessage("@NAO [WeddingCeremony] Script confirmed no double data for "..GetName("#REACT").." (Sim "..INDEX..").")
				ListAdd("Reacting", "#REACT")
			end
		end

		for INDEX = 0, ListSize("Reacting") -1 do
			ListGetElement("Reacting", INDEX, "#SIM")
			Sleep(Rand(0.7,2))
			CutsceneCameraSetRelativePosition("", "#CHAPEL_GUEST", "#SIM")
			CutsceneCallThread("", "DoReactGuest", "#SIM")
		end

		ListClear("Reacting")
	end

	Sleep(7.5)

	RemoveProperty("#COURTED", "CourtDiff")
	MeasureSetNotRestartable()
	PlaySound3D("#WEDDING_CHAPEL", "locations/bell_stroke_cathedral_loop+0.wav", 1.0)

	AddImpact("#MAIN", "LoveLevel", 10, 24)
	AddImpact("#COURTED", "LoveLevel", 10, 24)

	if GetImpactValue("#COURTED", "LoveLevel") >= 10 then
		MsgNewsNoWait("#MAIN", "#COURTED", "", "schedule", -1, "@L_FAMILY_2_COHIBITATION_FULLOFLOVE_HEAD_+0", "@L_FAMILY_2_COHIBITATION_FULLOFLOVE_BODY_+0", GetID("#COURTED"))
	end

	CutsceneCameraBlend("", 2.5, 0)
	CutsceneCameraSetRelativePosition("", "Far_HUpYLeft", "#MAIN")

	Sleep(4)

	RemoveProperty("#COURTED", "Wedding")
	RemoveProperty("#COURTED", "courted")
	RemoveProperty("#MAIN", "#WEDDING_MAIN")

	RemoveProperty("#MAIN", "#WEDDING_FORCED")
	RemoveProperty("#COURTED", "#WEDDING_FORCED")

	PlaySound3D("#WEDDING_CHAPEL", "locations/bell_stroke_cathedral_loop+0.wav", 1.0)
	ClearImportantPersonSection("Wedding")

	LogMessage("@NAO [WeddingCeremony] Marrying sims...")
	SimMarry("#MAIN", "#COURTED")

	SetState("#COURTED", STATE_INLOVE, false)

	Sleep(1)

	SimResetBehavior("#COURTED")
	ClearImportantPersonSection("Wedding")

	Sleep(4)

	EndCutscene("")
	DestroyCutscene("")
end

function ContinueAfterNo()
	SimGetCutscene("#MAIN", "Cutscene")

	local list = { {"#COURTED","#MAIN"}, {"#MAIN","#COURTED"} }

	CutsceneHUDShow("Cutscene", "LetterBoxPanel", false)
	CutsceneHUDShow("Cutscene", "TrialPanel", false)

	CutsceneCameraBlend("Cutscene", 2, 1)
	CutsceneCameraSetRelativePosition("Cutscene", "#CHAPEL_RIGHT", "#PRIEST")
	Sleep(1.25)
	PlayAnimationNoWait("#COURTED", "giggle")
	Sleep(0.5)
	PlayAnimationNoWait("#MAIN", "curtsy")

	MsgSay(list[SimGetGender("#MAIN")+1][1], "_FAMILY_1_MARRIAGE_CEREMONY_ANSWER_+0")

	CutsceneCameraSetRelativePosition("Cutscene", "#CHAPEL_PRIEST(FAR)","#PRIEST")

	MsgSay("#PRIEST", "_FAMILY_1_MARRIAGE_CEREMONY_PRIEST_WIFE_+0", GetID(list[SimGetGender("#MAIN")+1][2]), GetID(list[SimGetGender("#MAIN")+1][1]))

	CutsceneCameraBlend("", 2, 1)
	CutsceneCameraSetRelativePosition("", "#CHAPEL_LEFT", "#PRIEST")
	Sleep(1.25)
	PlayAnimationNoWait("#MAIN", "giggle")
	Sleep(0.75)
	PlayAnimationNoWait("#COURTED", "nod")

	MsgSay(list[SimGetGender("#MAIN")+1][2], "_FAMILY_1_MARRIAGE_CEREMONY_ANSWER_+0")

	CutsceneCameraSetRelativePosition("", "#CHAPEL_PRIEST(FAR)", "#PRIEST")

	MsgSay("#PRIEST", "_FAMILY_1_MARRIAGE_CEREMONY_PRIEST_FINALE_+0", GetID(list[SimGetGender("#MAIN")+1][1]))

	CutsceneCameraBlend("", 8, 1)
	CutsceneCameraSetRelativePosition("", "#CHAPEL_PRIEST(UP)", "#PRIEST")

	AlignTo("#MAIN", "#COURTED")
	AlignTo("#COURTED", "#MAIN")
	Sleep(1)

	ShowOverheadSymbol("#MAIN", false, true, 0, "@L$S[2001]")
	ShowOverheadSymbol("#COURTED", false, true, 0, "@L$S[2001]")

	if AliasExists("Orphan#1") and AliasExists("Orphan#2") then
		PlayAnimationNoWait("Orphan#1", "pray_standing")
		PlayAnimationNoWait("Orphan#2", "pray_standing")
	end

	AnimLength = chr_MultiAnim(list[SimGetGender("#MAIN")+1][1], "kiss_male", list[SimGetGender("#MAIN")+1][2], "kiss_female", 128, 1.0, true)
	Sleep(AnimLength * 0.25)

	ShowOverheadSymbol("#COURTED", false, true, 0, "@L$S[2001]")
	ShowOverheadSymbol("#MAIN", false, true, 0, "@L$S[2001]")

	if not HasProperty("#MAIN", "CourtingDiff") then			
		gameplayformulas_CalcCourtingDifficulty("#COURTED", "#MAIN")
	end

	local Difficulty = GetProperty("#MAIN", "CourtingDiff")
	xp_CourtingSuccess("#MAIN", Difficulty, 1)
	xp_CourtingSuccess("#COURTED", Difficulty, 1)

	Sleep(0.25)

	for i = 0, Guests-1 do
		ListGetElement("Visitors", i, "#SIM")
		if IsDynastySim("#SIM") and not GetState("#SIM", STATE_NPC) then
			if GetID("#SIM") ~= GetID("#MAIN") and GetID("#SIM") ~= GetID("#COURTED") then
				chr_GainXP("#SIM", GL_EXP_GAIN_RARE)
				ReleaseLocator("#SIM")
				if GetDynasty("#SIM", "CheckDyn") then
					if GetImpactValue("CheckDyn", "Ceremony") == 0 then
						AddImpact("CheckDyn", "Ceremony", 1, 6)
					end
				end
			end
		end

		ModifyFavorToSim("#SIM", "#MAIN", GL_FAVOR_MOD_VERYSMALL)
	end

	if Guests > 8 then
    	dyn_AddFame("#MAIN", 3)
	elseif Guests > 5 then
	    dyn_AddFame("#MAIN", 2)
	elseif Guests > 2 then
	    dyn_AddFame("#MAIN", 1)
	end

	MsgNewsNoWait("All", "", "", "politics", -1, "@L_MEASURE_MARRY_CEREMONY_HEAD_+0", "@L_MEASURE_MARRY_CEREMONY_NEWS_BODY_+0", GetID("#MAIN"), GetID("#COURTED"), GetID("#WEDDING_CHAPEL"), Guests)

	Sleep(0.5)

	LogMessage("@NAO [WeddingCeremony] There are "..ListSize("Visitors").." visitors. ("..Guests.." guests)")

	if Guests > 1 then
		ListNew("Reacting")
		for INDEX = 0, (Guests -1) do
			local CONFLICTING = false
			ListGetElement("Visitors", INDEX, "#REACT")
			LogMessage("@NAO [WeddingCeremony] Currently processing "..GetName("#REACT").." (Sim "..INDEX..").")

			if ListSize("Reacting") > 0 then
				for CHECK = 0, ListSize("Reacting")-1 do
					ListGetElement("Reacting", CHECK, "#VERIFY")
					if GetName("#VERIFY") == GetName("#REACT") then 
						CONFLICTING = true
					end
				end
			end
			if not CONFLICTING then
				LogMessage("@NAO [WeddingCeremony] Script confirmed no double data for "..GetName("#REACT").." (Sim "..INDEX..").")
				ListAdd("Reacting", "#REACT")
			end
		end

		for INDEX = 0, ListSize("Reacting") -1 do
			ListGetElement("Reacting", INDEX, "#SIM")
			Sleep(Rand(0.7,2))
			CutsceneCameraSetRelativePosition("", "#CHAPEL_GUEST", "#SIM")
			CutsceneCallThread("", "DoReactGuest", "#SIM")
		end

		ListClear("Reacting")
	end

	Sleep(7.5)

	RemoveProperty("#COURTED", "CourtDiff")
	MeasureSetNotRestartable()
	PlaySound3D("#WEDDING_CHAPEL", "locations/bell_stroke_cathedral_loop+0.wav", 1.0)

	AddImpact("#MAIN", "LoveLevel", 10, 24)
	AddImpact("#COURTED", "LoveLevel", 10, 24)

	if GetImpactValue("#COURTED", "LoveLevel") >= 10 then
		MsgNewsNoWait("#MAIN", "#COURTED", "", "schedule", -1, "@L_FAMILY_2_COHIBITATION_FULLOFLOVE_HEAD_+0", "@L_FAMILY_2_COHIBITATION_FULLOFLOVE_BODY_+0", GetID("#COURTED"))
	end

	CutsceneCameraBlend("", 2.5, 0)
	CutsceneCameraSetRelativePosition("", "Far_HUpYLeft", "#MAIN")

	Sleep(4)

	RemoveProperty("#COURTED", "Wedding")
	RemoveProperty("#COURTED", "courted")
	RemoveProperty("#MAIN", "#WEDDING_MAIN")

	RemoveProperty("#MAIN", "#WEDDING_FORCED")
	RemoveProperty("#COURTED", "#WEDDING_FORCED")

	PlaySound3D("#WEDDING_CHAPEL", "locations/bell_stroke_cathedral_loop+0.wav", 1.0)
	ClearImportantPersonSection("Wedding")

	LogMessage("@NAO [WeddingCeremony] Marrying sims...")
	SimMarry("#MAIN", "#COURTED")

	SetState("#COURTED", STATE_INLOVE, false)

	Sleep(1)

	SimResetBehavior("#COURTED")
	ClearImportantPersonSection("Wedding")

	Sleep(4)

	EndCutscene("")
	DestroyCutscene("")
end

function ContinueAfterSuccessfulMurder()
	SimGetCutscene("#MAIN", "Cutscene")

	BuildingGetInsideSimList("#WEDDING_CHAPEL", "Sit_Visitors")

	ListRemove("Sit_Visitors", "#MAIN")
	ListRemove("Sit_Visitors", "#COURTED")
	ListRemove("Sit_Visitors", "#PRIEST")

	if AliasExists("Orphan#1") and AliasExists("Orphan#2") then
		ListRemove("Sit_Visitors", "Orphan#1")
		ListRemove("Sit_Visitors", "Orphan#2")
	end

	CutsceneCameraSetRelativePosition("Cutscene", "Far_HUpYLeft", "#MAIN")

	for i = 0, ListSize("Sit_Visitors") -1 do
		ListGetElement("Sit_Visitors", i, "#SIM")
		CutsceneCallThread("Cutscene", "GetUp", "#SIM")
		Sleep(2)
		CutsceneCallThread("Cutscene", "Flee", "#SIM")
	end

	ListClear("Sit_Visitors")

	f_StartHighPriorMusic(35)

	MoveSetStance("#PRIEST", GL_STANCE_CROUCH)

	-- Progress, Guest1, Guest2, Guest3, Arrow, Timer
	TrialHUDSetStatus("Cutscene", 2, 1, 2, 3, 2, 2.0)
	Sleep(0.5)

	local Guests = ListSize("Visitors")
	local list = { {"#COURTED","#MAIN"}, {"#MAIN","#COURTED"} }

	Sleep(2)

	CutsceneHUDShow("Cutscene", "LetterBoxPanel", false)
	CutsceneHUDShow("Cutscene", "TrialPanel", false)

	Sleep(1)

	CutsceneCameraSetRelativePosition("Cutscene", "#CHAPEL_PRIEST(FAR)","#PRIEST")

	MsgSay("#PRIEST", "_FAMILY_1_MARRIAGE_CEREMONY_MURDER_+1")

	MoveSetStance("#PRIEST", GL_STANCE_STAND)

	CutsceneCameraBlend("Cutscene", 2, 1)
	CutsceneCameraSetRelativePosition("Cutscene", "#CHAPEL_PRIEST","#PRIEST")
	Sleep(0.5)
	AlignTo("#MAIN", "#PRIEST")
	AlignTo("#PRIEST", "#MAIN")
	MsgSay("#PRIEST", "_FAMILY_1_MARRIAGE_CEREMONY_MURDER_+2")

	Sleep(0.5)

	for i = 0, Guests - 1 do
		ListGetElement("Visitors", i, "#SIM")
		if IsDynastySim("#SIM") and not GetState("#SIM", STATE_NPC) then
			if GetID("#SIM") ~= GetID("#MAIN") and GetID("#SIM") ~= GetID("#COURTED") then
				chr_GainXP("#SIM", GL_EXP_GAIN_RARE)
				ReleaseLocator("#SIM")
				if GetDynasty("#SIM", "CheckDyn") then
					if GetImpactValue("CheckDyn", "Ceremony") == 0 then
						AddImpact("CheckDyn", "Ceremony", 1, 6)
					end
				end
			end
		end
		ShowOverheadSymbol("#SIM", false, true, 0, "@L$S[2001]")
		ModifyFavorToSim("#SIM", "#MAIN", -GL_FAVOR_MOD_EPIC)
		ModifyFavorToSim("#MAIN", "#SIM", -GL_FAVOR_MOD_EPIC)
	end

	dyn_AddFame("#MAIN", -1)
	ShowOverheadSymbol("#MAIN", false, true, 0, "@L$S[2001]")

	f_StartHighPriorMusic(19)

	MsgNewsNoWait("All", "", "", "politics", -1, "@L_MEASURE_MARRY_CEREMONY_HEAD_+0", "@L_MEASURE_MARRY_CEREMONY_MURDER_NEWS_BODY_+0", GetID("#MAIN"), GetID("#COURTED"))

	Sleep(0.5)

	if Guests > 1 then
		ListNew("Reacting")
		for INDEX = 0, (Guests -1) do
			local CONFLICTING = false
			ListGetElement("Visitors", INDEX, "#REACT")

			if ListSize("Reacting") > 0 then
				for CHECK = 0, ListSize("Reacting")-1 do
					ListGetElement("Reacting", CHECK, "#VERIFY")
					if GetName("#VERIFY") == GetName("#REACT") then 
						CONFLICTING = true
					end
				end
			end
			if not CONFLICTING then
				ListAdd("Reacting", "#REACT")
			end
		end

		local MaxReact, MaxReactCount = 3, 0

		for INDEX = 0, ListSize("Reacting") -1 do
			MaxReactCount = MaxReactCount +1
			if MaxReactCount == MaxReact then
				break
			else
				ListGetElement("Reacting", INDEX, "#SIM")
				Sleep(Rand(0.7,2))
				CutsceneCameraSetRelativePosition("Cutscene", "#CHAPEL_GUEST", "#SIM")
				ReleaseLocator("SIM")
				--PlayAnimationNoWait("#SIM", "bench_talk_offended")
				MsgSay("#SIM", "Horrible!")
			end
		end

		ListClear("Reacting")
	end

	MeasureSetNotRestartable()

	CutsceneCameraSetRelativePosition("Cutscene", "Far_HUpYLeft", "#MAIN")

	Sleep(4)

	RemoveProperty("#MAIN", "#WEDDING_MAIN")
	RemoveProperty("#MAIN", "#WEDDING_FORCED")

	ClearImportantPersonSection("Wedding")

	EndCutscene("Cutscene")
	DestroyCutscene("Cutscene")
end

function SetWeddingHUD()
	local Bool = true
	local Node = FindNode("\\GUI\\HudRoot")
	local Child, _Child

	for i = 0, Node:GetChildCnt() - 1 do
		Child = Node:GetChildAt(i)
		if Child:GetValueString("IDENTIFIER") ~= nil then
			if Child:GetValueString("IDENTIFIER") == "WeddingPanel" then
				LogMessage("@NAO ("..i..") -> "..Child:GetName())
				break
			end
		end
	end

	local NewLabels

	if Bool then
		NewLabels = {
		    'Cheap',        -- Very low-budget, unimpressive
		    'Modest',       -- A simple and decent ceremony
		    'Respectable',  -- A proper, well-organized wedding
		    'Grand',        -- A lavish event with notable guests
		    'Magnificent',  -- Extravagant and highly prestigious
		    'Legendary', 	-- A wedding that will be remembered for generations
		    'Disastrous',   -- Worst possible wedding, maybe barely legal

		}
	else
		NewLabels = {
		    '@L_REPLACEMENTS_PENALTIES_+1',
		    '@L_REPLACEMENTS_PENALTIES_+2',
		    '@L_REPLACEMENTS_PENALTIES_+3',
		    '@L_REPLACEMENTS_PENALTIES_+4',
		    '@L_REPLACEMENTS_PENALTIES_+5',
		    '@L_REPLACEMENTS_PENALTIES_+6',
		    '@L_REPLACEMENTS_PENALTIES_+0'
		}
	end

	ProgressBar = nil

	for i = 0, Child:GetChildCnt() - 1 do
		Node = Child:GetChildAt(i)
		if Node ~= nil then
			if Node:GetName() == "AccuserNameLabel" then
				Node:SetValueString("TEXT", GetName("#MAIN"))
			end
			if Node:GetName() == "AccusedNameLabel" then
				Node:SetValueString("TEXT", GetName("#COURTED"))
			end
			if Node:GetName() == "cl_WinContainer" then
				_Child = Node:GetChildAt(1)
				LogMessage("@NAO cl_WinContainer ("..i..") -> "..(_Child:GetValueString("TEXT") or 'nil'))
				_Child:SetValueString("TEXT",NewLabels[i-28])
				LogMessage("@NAO #W cl_WinContainer ("..i..") -> "..(_Child:GetValueString("TEXT") or 'nil'))
			end
			if Node:GetName() == "ProgressBarDesc" then
				ProgressBar = Node
			end
		end
	end
end

function ForbidWeddingMeasures()
	ForbidMeasure("#MAIN", 3000, EN_BOTH)
	ForbidMeasure("#MAIN", 3001, EN_BOTH)
	ForbidMeasure("#MAIN", 3002, EN_BOTH)
	LogMessage("@NAO ForbidWeddingMeasures")
end

function SayYes()
	SimGetCutscene("#MAIN","Cutscene")
	CutsceneCallThread("Cutscene", "ForbidWeddingMeasures", "#MAIN")
	CutsceneSetData("Cutscene","SkipProgressBar","1")
	local Charisma = GetSkillValue("#MAIN", CHARISMA)
	local Rethoric = GetSkillValue("#MAIN", RHETORIC)
	local Alignment = SimGetAlignment("#MAIN")
	local AlignmentVariant = f_GetAlignmentVariant(Alignment)

	local EndValue = Charisma + Rethoric

	if EndValue < 3 then
		MsgSay("#MAIN", "@L_FAMILY_1_MARRIAGE_CEREMONY_POSITIVE_ANSWER_"..AlignmentVariant.."_+1")
	elseif EndValue < 6 then
		MsgSay("#MAIN", "@L_FAMILY_1_MARRIAGE_CEREMONY_POSITIVE_ANSWER_"..AlignmentVariant.."_+2")
	elseif EndValue > 5 then
		MsgSay("#MAIN", "@L_FAMILY_1_MARRIAGE_CEREMONY_POSITIVE_ANSWER_"..AlignmentVariant.."_+3")
	end
	CutsceneCallThread("Cutscene", "ContinueAfterYes", "#MAIN")
end

function SayNo()
	SimGetCutscene("#MAIN","Cutscene")
	CutsceneCallThread("Cutscene", "ForbidWeddingMeasures", "#MAIN")
	CutsceneSetData("Cutscene","SkipProgressBar","1")
	local Charisma = GetSkillValue("#MAIN", CHARISMA)
	local Rethoric = GetSkillValue("#MAIN", RHETORIC)
	local Alignment = SimGetAlignment("#MAIN")
	local AlignmentVariant = f_GetAlignmentVariant(Alignment)

	local EndValue = Charisma + Rethoric

	if EndValue < 3 then
		MsgSay("#MAIN", "@L_FAMILY_1_MARRIAGE_CEREMONY_NEGATIVE_ANSWER_"..AlignmentVariant.."_+1")
	elseif EndValue < 6 then
		MsgSay("#MAIN", "@L_FAMILY_1_MARRIAGE_CEREMONY_NEGATIVE_ANSWER_"..AlignmentVariant.."_+2")
	elseif EndValue > 5 then
		MsgSay("#MAIN", "@L_FAMILY_1_MARRIAGE_CEREMONY_NEGATIVE_ANSWER_"..AlignmentVariant.."_+3")
	end
	CutsceneCallThread("Cutscene", "Continue", "#MAIN")
end

function Murder()
	SimGetCutscene("#MAIN","Cutscene")
	CutsceneCallThread("Cutscene", "ForbidWeddingMeasures", "#MAIN")
	CutsceneSetData("Cutscene", "SkipProgressBar", "1")
	AddItems("#MAIN", "Dagger", 1, INVENTORY_EQUIPMENT)

	MsgSay("#MAIN", "_FAMILY_1_MARRIAGE_CEREMONY_MURDER_+0")

	SetProperty("#MAIN", "KillAction_start", 1)
	feedback_OverheadActionName("#MAIN")
	GetPosition("#COURTED", "ParticleSpawnPos")

	BattleWeaponPresent("#MAIN")
	Sleep(2)

	PlayAnimationNoWait("#MAIN","finishing_move_01")
	Sleep(1)	

	local SimCount = Find("#MAIN", "__F((Object.GetObjectsByRadius(Sim) == 2000))", "SIM", -1)
	for i = 0, SimCount -1 do
		AddEvidence("SIM"..i, "#MAIN", "#COURTED", 16)
	end

	AddEvidence("#MAIN", "#MAIN", "#COURTED", 16)

	Kill("#COURTED")

	StartSingleShotParticle("particles/bloodsplash.nif", "ParticleSpawnPos", 2, 4)
	PlaySound3DVariation("#COURTED", "Effects/combat_strike_mace", 1)
	
	Sleep(2)
	BattleWeaponStore("#MAIN")

	CutsceneCallThread("Cutscene", "ContinueAfterSuccessfulMurder", "#MAIN")
end

-- InitAlias("Believer", MEASUREINIT_SELECTION, "__F( NOT(Object.BelongsToMe())AND(Object.Type == Sim)AND(Object.IsDynastySim()))",
--			"@L_ARTEFACTS_184_USEFLOWEROFDISCORD_TARGET2_+0", 0)

Collaborators

No additional collaborators yet.

Version History

Version Date Author Comment Actions
v4 Apr 11, 2025
naonauno
Version 4
v3 Apr 06, 2025
naonauno
Version 3
v2 Apr 04, 2025
naonauno
Version 2
v1 Apr 04, 2025
naonauno
Initial version