Skip to content

Commit

Permalink
fix: gotoif continues after not matching
Browse files Browse the repository at this point in the history
  • Loading branch information
bradhannah committed Dec 9, 2023
1 parent 42dc1d9 commit e496bef
Show file tree
Hide file tree
Showing 7 changed files with 64 additions and 14 deletions.
3 changes: 2 additions & 1 deletion Ultima5Redux/DataFiles/CutSceneScripts.csv
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,8 @@ MapNum,FrameNum,Command,StrParam,IntParam,X,Y,Visible,Comment
1,201,OutputModalText,"'Tis now thy sacred quest to unto the Codex and learn the darkness of Dishonor!",0,0,0,false,
1,202,SoundEffect,DaaaaDoooo,0,0,0,false,"Cool little sound!"
1,203,OutputModalText,"Return again why thy Quest is done!",0,0,0,false,
1,204,Goto,,11,0,0,false,Leave Shrine
1,204,ChangeShrineState,ShrineOrdainedNoCodex,0,0,0,false
1,205,Goto,,11,0,0,false,Leave Shrine
1,300,NoOp,,0,0,0,false,Jumped to if ShrineStatus.ShrineOrdainedNoCodex
1,301,OutputModalText,"ShrineStatus.ShrineOrdainedNoCodex",0,0,0,false,
1,302,Goto,,11,0,0,false,Leave Shrine
Expand Down
10 changes: 10 additions & 0 deletions Ultima5Redux/DataFiles/CutSceneScripts.json
Original file line number Diff line number Diff line change
Expand Up @@ -714,6 +714,16 @@
},
{
"FrameNum": 204,
"Command": "ChangeShrineState",
"StrParam": "ShrineOrdainedNoCodex",
"IntParam": 0,
"X": 0,
"Y": 0,
"Visible": false,
"Comment": ""
},
{
"FrameNum": 205,
"Command": "Goto",
"StrParam": "",
"IntParam": 11,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
using System;
using Ultima5Redux.Maps;
using Ultima5Redux.References.Maps;
using Ultima5Redux.State;

namespace Ultima5Redux.MapUnits.TurnResults.SpecificTurnResults.ScriptTurnResults {
public class ChangeShrineState : CutOrIntroSceneScriptLineTurnResult {
public ShrineState.ShrineStatus TheNewShrineStatus;
public ShrineReference TheShrineReference;

public ChangeShrineState(CutOrIntroSceneScriptLine scriptLine,
ShrineReference theShrineReference) : base(TurnResultType.Script_ChangeShrineState,
TurnResulActionType.ActionRequired, scriptLine) {
TheShrineReference = theShrineReference;

TheNewShrineStatus =
(ShrineState.ShrineStatus)Enum.Parse(typeof(ShrineState.ShrineStatus), scriptLine.StrParam);
}
}
}
3 changes: 2 additions & 1 deletion Ultima5Redux/MapUnits/TurnResults/TurnResult.cs
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,8 @@ public enum TurnResultType
FailedToSneakPastTrollUnderBridge, FallDownWaterfallVariant_Underworld, FallDownWaterfallVariant_Normal,
PlayerTakesDamage, TeleportToNewLocation, LoadCombatMap, ExecuteCutScene, Script_PromptVirtueMeditate,
Script_ExitBuilding, Script_CreateMapUnit, Script_MapUnitMove, Script_Pause, Script_SoundEffect,
Script_Goto, Script_GotoIf, Script_NoOp, Script_PromptMantra, Script_OutputModalText
Script_Goto, Script_GotoIf, Script_NoOp, Script_PromptMantra, Script_OutputModalText,
Script_ChangeShrineState
}

[SuppressMessage("ReSharper", "SwitchStatementMissingSomeEnumCasesNoDefault")]
Expand Down
8 changes: 4 additions & 4 deletions Ultima5Redux/Maps/CutOrIntroSceneScript.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public enum Result { Continue, Goto, EndSequence, GotoIf }
public enum CutOrIntroSceneScriptLineCommand
{
CreateMapunit, MoveMapunit, PromptVirtueMeditate, PromptMantra, EndSequence, Comment, Output, Pause,
SoundEffect, Goto, GotoIf, NoOp, OutputModalText
SoundEffect, Goto, GotoIf, NoOp, OutputModalText, ChangeShrineState
}

// "FrameNum": 0,
Expand Down Expand Up @@ -68,7 +68,6 @@ public enum CutOrIntroSceneScriptLineCommand
scripts =
JsonConvert.DeserializeObject<Dictionary<SingleCutOrIntroSceneMapReference.CutOrIntroSceneMapType
, List<CutOrIntroSceneScriptLine>>>(Resources.CutSceneScripts);
//SingleCutOrIntroSceneMapReference.CutOrIntroSceneMapType
foreach (KeyValuePair<SingleCutOrIntroSceneMapReference.CutOrIntroSceneMapType,
List<CutOrIntroSceneScriptLine>> kvp in scripts) {
_scripts.Add(kvp.Key, new CutOrIntroSceneScript(kvp.Key, kvp.Value));
Expand All @@ -85,14 +84,15 @@ public enum CutOrIntroSceneScriptLineCommand
private readonly List<CutOrIntroSceneScriptLine> _scriptLines;

public int NumberOfFrames => _scriptLines.GroupBy(i => i.FrameNum).Count();
//Count(i => i.FrameNum == nFrame)

public TurnResults GenerateTurnResultsFromFrame(int nFrame, ShrineReference shrineReference = null) {
TurnResults turnResults = new();
IEnumerable<CutOrIntroSceneScriptLine> scriptLinesInFrame = _scriptLines.Where(i => i.FrameNum == nFrame);
foreach (CutOrIntroSceneScriptLine scriptLine in scriptLinesInFrame) {
switch (scriptLine.Command) {

case CutOrIntroSceneScriptLine.CutOrIntroSceneScriptLineCommand.ChangeShrineState:
turnResults.PushTurnResult(new ChangeShrineState(scriptLine, shrineReference));
break;
case CutOrIntroSceneScriptLine.CutOrIntroSceneScriptLineCommand.SoundEffect:
turnResults.PushTurnResult(new SoundEffect(scriptLine));
break;
Expand Down
33 changes: 25 additions & 8 deletions Ultima5Redux/Maps/CutSceneMap.cs
Original file line number Diff line number Diff line change
Expand Up @@ -56,10 +56,23 @@ public class CutSceneMap : Map

public ScriptLineResult ProcessScriptLine(CutOrIntroSceneScriptLine scriptLine) {
switch (scriptLine.Command) {
case CutOrIntroSceneScriptLine.CutOrIntroSceneScriptLineCommand.ChangeShrineState:
// change it man
var newShrineStatus =
(ShrineState.ShrineStatus)Enum.Parse(typeof(ShrineState.ShrineStatus), scriptLine.StrParam);
//ChangeShrineState changeShrineState = new (scriptLine, ShrineCutSceneState.CurrentShrine, newShrineStatus)
ShrineState shrineState = GetShrineState(ShrineCutSceneState.CurrentShrine
.VirtueRef.Virtue);
shrineState.TheShrineStatus = newShrineStatus;

break;
case CutOrIntroSceneScriptLine.CutOrIntroSceneScriptLineCommand.CreateMapunit:
var mapUnit = new CutSceneNonPlayerCharacter(scriptLine.Visible, scriptLine.TileReference);

mapUnit.MapUnitPosition.XY = scriptLine.Position;
var mapUnit = new CutSceneNonPlayerCharacter(scriptLine.Visible, scriptLine.TileReference) {
MapUnitPosition = {
XY = scriptLine.Position
}
};

mapUnit.SetActive(scriptLine.Visible);
// we maintain a specific identifier for the mapunit going forward
_mapUnitsByIdentifier.Add(scriptLine.StrParam, mapUnit);
Expand Down Expand Up @@ -99,7 +112,8 @@ public class CutSceneMap : Map
case CutOrIntroSceneScriptLine.CutOrIntroSceneScriptLineCommand.GotoIf:
var gotoDetails = new Goto(scriptLine);
int nGotoLine = ProcessGoto(gotoDetails);
return new ScriptLineResult(ScriptLineResult.Result.GotoIf, nGotoLine);
if (nGotoLine != -1) return new ScriptLineResult(ScriptLineResult.Result.GotoIf, nGotoLine);
break;
case CutOrIntroSceneScriptLine.CutOrIntroSceneScriptLineCommand.PromptMantra:
break;
case CutOrIntroSceneScriptLine.CutOrIntroSceneScriptLineCommand.NoOp:
Expand All @@ -113,17 +127,20 @@ public class CutSceneMap : Map
return new ScriptLineResult(ScriptLineResult.Result.Continue);
}

private ShrineState GetShrineState(VirtueReference.VirtueType virtueType) =>
ShrineCutSceneState?.CurrentShrine != null
? GameStateReference.State.TheShrineStates.GetShrineStateByVirtue(virtueType)
: null;

private int ProcessGoto(Goto gotoResult) {
if ((gotoResult.TheGotoCondition.ToString().StartsWith("ShrineStatus_") && ShrineCutSceneState == null) ||
ShrineCutSceneState.CurrentShrine == null) {
throw new Ultima5ReduxException(
"For ShrineStatus_ type GotoCondition, expected shrine state to have already been tracked.");
}

ShrineState shrineState = ShrineCutSceneState?.CurrentShrine != null
? GameStateReference.State.TheShrineStates.GetShrineStateByVirtue(ShrineCutSceneState.CurrentShrine
.VirtueRef.Virtue)
: null;
ShrineState shrineState = GetShrineState(ShrineCutSceneState.CurrentShrine
.VirtueRef.Virtue);

switch (gotoResult.TheGotoCondition) {
case Goto.GotoCondition.None:
Expand Down
1 change: 1 addition & 0 deletions Ultima5Redux/Ultima5Redux.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,7 @@
<Compile Include="MapUnits\TurnResults\SpecificTurnResults\OutputToConsole.cs" />
<Compile Include="MapUnits\TurnResults\SpecificTurnResults\PlayerMoved.cs" />
<Compile Include="MapUnits\TurnResults\SpecificTurnResults\ReadScroll.cs" />
<Compile Include="MapUnits\TurnResults\SpecificTurnResults\ScriptTurnResults\ChangeShrineState.cs" />
<Compile Include="MapUnits\TurnResults\SpecificTurnResults\ScriptTurnResults\CreateMapUnit.cs" />
<Compile Include="MapUnits\TurnResults\SpecificTurnResults\ScriptTurnResults\ExecuteCutScene.cs" />
<Compile Include="MapUnits\TurnResults\SpecificTurnResults\ScriptTurnResults\ExitBuilding.cs" />
Expand Down

0 comments on commit e496bef

Please sign in to comment.