From 95fc53ee123389dcd3226757acdad15ce8bfda77 Mon Sep 17 00:00:00 2001 From: Alex Yong Date: Fri, 7 Nov 2025 05:27:58 +0000 Subject: [PATCH 1/7] Testing out github actions workflow --- .github/workflows/build.yml | 59 +++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 .github/workflows/build.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..73d1437 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,59 @@ +name: Build Simitone + +on: + workflow_dispatch: + inputs: + configuration: + description: 'Build configuration' + required: false + default: 'Release' + type: choice + options: + - Release + - Debug + +jobs: + build: + runs-on: windows-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Setup .NET 9 + uses: actions/setup-dotnet@v4 + with: + dotnet-version: '9.0.x' + + - name: Run Protobuild + shell: pwsh + run: | + cd FreeSO/Other/libs/FSOMonoGame/ + ./protobuild.exe --generate + continue-on-error: true + + - name: Restore Simitone dependencies + run: dotnet restore Client/Simitone/Simitone.sln + + - name: Restore FreeSO dependencies + run: dotnet restore FreeSO/TSOClient/FreeSO.sln + continue-on-error: true + + - name: Restore Roslyn dependencies + shell: pwsh + run: | + cd FreeSO/TSOClient/FSO.SimAntics.JIT.Roslyn/ + dotnet restore + continue-on-error: true + + - name: Build + run: dotnet build Client/Simitone/Simitone.sln -c ${{ inputs.configuration || 'Release' }} --no-restore + + - name: Upload build artifacts + uses: actions/upload-artifact@v4 + with: + name: SimitoneWindows-${{ inputs.configuration || 'Release' }} + path: Client/Simitone/Simitone.Windows/bin/${{ inputs.configuration || 'Release' }}/net9.0-windows/ + if-no-files-found: error From a3e521613a0b899edc369a4e3aa82fe47afb1633 Mon Sep 17 00:00:00 2001 From: Alex Yong Date: Wed, 4 Feb 2026 21:23:46 +0000 Subject: [PATCH 2/7] Adding ability to turn free will on or off for sims --- .../Simitone/Simitone.Client/SimitoneGame.cs | 4 ++ .../Simitone.Client/UI/Panels/UIMainPanel.cs | 37 +++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/Client/Simitone/Simitone.Client/SimitoneGame.cs b/Client/Simitone/Simitone.Client/SimitoneGame.cs index 52ca85b..075182d 100644 --- a/Client/Simitone/Simitone.Client/SimitoneGame.cs +++ b/Client/Simitone/Simitone.Client/SimitoneGame.cs @@ -133,6 +133,10 @@ protected override void Initialize() if (FSOEnvironment.Enable3D) FSO.Files.RC.DGRP3DMesh.InitRCWorkers(); //FSO.Content.Content.Init(GlobalSettings.Default.StartupPath, GraphicsDevice); FSO.SimAntics.VMAvatar.MissingIconProvider = Simitone.Client.UI.Model.UIIconCache.GetObject; + + // Initialize Free Will setting from config + VM.FreeWillEnabled = GlobalSettings.Default.TS1FreeWill; + base.Initialize(); GameFacade.GameThread = Thread.CurrentThread; diff --git a/Client/Simitone/Simitone.Client/UI/Panels/UIMainPanel.cs b/Client/Simitone/Simitone.Client/UI/Panels/UIMainPanel.cs index 1d98575..a3837b1 100644 --- a/Client/Simitone/Simitone.Client/UI/Panels/UIMainPanel.cs +++ b/Client/Simitone/Simitone.Client/UI/Panels/UIMainPanel.cs @@ -2,6 +2,7 @@ using FSO.Client.UI.Framework; using FSO.Common.Utils; using FSO.Content; +using FSO.SimAntics; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Simitone.Client.UI.Controls; @@ -242,6 +243,7 @@ public void Switcher_OnCategorySelect(int obj) new UICatFunc(GameFacade.Strings.GetString("145", "1"), "opt_neigh.png", () => { Game.ReturnToNeighbourhood(); }), new UICatFunc(GameFacade.Strings.GetString("145", "5"), "opt_quit.png", () => { Game.CloseAttempt(); }), }); + AddFreeWillToggle(panel); break; } SetSubpanel(panel); @@ -434,6 +436,41 @@ public void ShowSelect() }; } + private void AddFreeWillToggle(UISubpanel parent) + { + var container = new UIContainer(); + container.Position = new Vector2(350, 16); + parent.Add(container); + + var toggleButton = new UICatButton(Content.Get().CustomUI.Get("opt_save.png").Get(GameFacade.GraphicsDevice)); + + var label = new UILabel(); + label.Alignment = TextAlignment.Middle | TextAlignment.Center; + label.Wrapped = true; + label.Position = new Vector2(-27, 90); + label.Size = new Vector2(120, 1); + label.CaptionStyle = label.CaptionStyle.Clone(); + label.CaptionStyle.Size = 12; + label.CaptionStyle.Color = UIStyle.Current.Text; + + Action updateLabel = () => { + bool enabled = VM.FreeWillEnabled; + label.Caption = "Free Will:\n" + (enabled ? "ON" : "OFF"); + label.CaptionStyle.Color = enabled ? UIStyle.Current.Text : UIStyle.Current.NegMoney; + }; + + toggleButton.OnButtonClick += (btn) => { + VM.FreeWillEnabled = !VM.FreeWillEnabled; + GlobalSettings.Default.TS1FreeWill = VM.FreeWillEnabled; + GlobalSettings.Default.Save(); + updateLabel(); + }; + + container.Add(toggleButton); + container.Add(label); + updateLabel(); + } + public override void GameResized() { base.GameResized(); From dd3d0de39b0517a719b45072f608eff9c9a74430 Mon Sep 17 00:00:00 2001 From: Alex Yong Date: Wed, 4 Feb 2026 23:14:52 +0000 Subject: [PATCH 3/7] spacing adjustment --- .../Simitone.Client/UI/Panels/UIMainPanel.cs | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/Client/Simitone/Simitone.Client/UI/Panels/UIMainPanel.cs b/Client/Simitone/Simitone.Client/UI/Panels/UIMainPanel.cs index a3837b1..358b2e8 100644 --- a/Client/Simitone/Simitone.Client/UI/Panels/UIMainPanel.cs +++ b/Client/Simitone/Simitone.Client/UI/Panels/UIMainPanel.cs @@ -438,16 +438,16 @@ public void ShowSelect() private void AddFreeWillToggle(UISubpanel parent) { - var container = new UIContainer(); - container.Position = new Vector2(350, 16); - parent.Add(container); + // Index 3 (4th button) to match spacing of existing buttons + // Existing buttons use: 50 + i * 120f for button X, 50 + i * 120f - 27 for label X + int index = 3; + float buttonX = 50 + index * 120f; + float labelX = buttonX - 27; - var toggleButton = new UICatButton(Content.Get().CustomUI.Get("opt_save.png").Get(GameFacade.GraphicsDevice)); - var label = new UILabel(); label.Alignment = TextAlignment.Middle | TextAlignment.Center; label.Wrapped = true; - label.Position = new Vector2(-27, 90); + label.Position = new Vector2(labelX - 77, 106); label.Size = new Vector2(120, 1); label.CaptionStyle = label.CaptionStyle.Clone(); label.CaptionStyle.Size = 12; @@ -459,6 +459,8 @@ private void AddFreeWillToggle(UISubpanel parent) label.CaptionStyle.Color = enabled ? UIStyle.Current.Text : UIStyle.Current.NegMoney; }; + var toggleButton = new UICatButton(Content.Get().CustomUI.Get("opt_save.png").Get(GameFacade.GraphicsDevice)); + toggleButton.Position = new Vector2(buttonX - 50, 16); toggleButton.OnButtonClick += (btn) => { VM.FreeWillEnabled = !VM.FreeWillEnabled; GlobalSettings.Default.TS1FreeWill = VM.FreeWillEnabled; @@ -466,8 +468,12 @@ private void AddFreeWillToggle(UISubpanel parent) updateLabel(); }; - container.Add(toggleButton); - container.Add(label); + // Animate in like other buttons + GameFacade.Screens.Tween.To(label, 0.5f, new Dictionary() { { "X", labelX } }, TweenQuad.EaseOut); + GameFacade.Screens.Tween.To(toggleButton, 0.5f, new Dictionary() { { "X", buttonX } }, TweenQuad.EaseOut); + + parent.Add(label); + parent.Add(toggleButton); updateLabel(); } From 3697c09d557c8edb2aaf199dbbe08bd957726bf1 Mon Sep 17 00:00:00 2001 From: Alex Yong Date: Fri, 6 Feb 2026 16:08:24 +0000 Subject: [PATCH 4/7] adding freewill toggle icon and attribution --- .../uigraphics/live/modes/opt_freewill.png | Bin 0 -> 3099 bytes .../Simitone.Client/Simitone.Client.csproj | 3 +++ .../Simitone.Client/UI/Panels/UIMainPanel.cs | 2 +- README.md | 5 +++++ 4 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 Client/Simitone/Simitone.Client/Content/uigraphics/live/modes/opt_freewill.png diff --git a/Client/Simitone/Simitone.Client/Content/uigraphics/live/modes/opt_freewill.png b/Client/Simitone/Simitone.Client/Content/uigraphics/live/modes/opt_freewill.png new file mode 100644 index 0000000000000000000000000000000000000000..045e3fc8fc3a76eafa270bca36101a3bafac5720 GIT binary patch literal 3099 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 QxZ@YHv4I7=THihHKM?|GqW}N^ literal 0 HcmV?d00001 diff --git a/Client/Simitone/Simitone.Client/Simitone.Client.csproj b/Client/Simitone/Simitone.Client/Simitone.Client.csproj index 1e2baf0..743a658 100644 --- a/Client/Simitone/Simitone.Client/Simitone.Client.csproj +++ b/Client/Simitone/Simitone.Client/Simitone.Client.csproj @@ -473,6 +473,9 @@ PreserveNewest + + PreserveNewest + PreserveNewest diff --git a/Client/Simitone/Simitone.Client/UI/Panels/UIMainPanel.cs b/Client/Simitone/Simitone.Client/UI/Panels/UIMainPanel.cs index 358b2e8..5394f97 100644 --- a/Client/Simitone/Simitone.Client/UI/Panels/UIMainPanel.cs +++ b/Client/Simitone/Simitone.Client/UI/Panels/UIMainPanel.cs @@ -459,7 +459,7 @@ private void AddFreeWillToggle(UISubpanel parent) label.CaptionStyle.Color = enabled ? UIStyle.Current.Text : UIStyle.Current.NegMoney; }; - var toggleButton = new UICatButton(Content.Get().CustomUI.Get("opt_save.png").Get(GameFacade.GraphicsDevice)); + var toggleButton = new UICatButton(Content.Get().CustomUI.Get("opt_freewill.png").Get(GameFacade.GraphicsDevice)); toggleButton.Position = new Vector2(buttonX - 50, 16); toggleButton.OnButtonClick += (btn) => { VM.FreeWillEnabled = !VM.FreeWillEnabled; diff --git a/README.md b/README.md index 54e32fd..7562fda 100644 --- a/README.md +++ b/README.md @@ -27,3 +27,8 @@ On modern operating systems, The Sims has a few nagging issues that make it less Simitone -> Semitone -> musical term -> C# -> a note Further questions can be directed at my PR manager, uh, ... burglar cop. + + +# Attributions + +Icon for Free Will option: Creativity And Resourcefulness icon by Icons8 \ No newline at end of file From 09a7ad7d6d3ba371731b1411441217fc7071863f Mon Sep 17 00:00:00 2001 From: Alex Yong Date: Fri, 6 Feb 2026 16:51:07 +0000 Subject: [PATCH 5/7] Pointing this to my branch with needed FreeSO changes until FreeSO pr is merged into upstream --- .gitmodules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index 05a705e..620f840 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ [submodule "FreeSO"] path = FreeSO - url = https://github.com/riperiperi/FreeSO + url = https://github.com/alexjyong/FreeSO From 95b97c14307c0c87591323e8660e64430f630361 Mon Sep 17 00:00:00 2001 From: Alex Yong Date: Fri, 6 Feb 2026 16:58:56 +0000 Subject: [PATCH 6/7] Pointing this to my branch with needed FreeSO changes until FreeSO pr is merged into upstream --- FreeSO | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FreeSO b/FreeSO index f86bbd3..6ffae86 160000 --- a/FreeSO +++ b/FreeSO @@ -1 +1 @@ -Subproject commit f86bbd34b2112296ed786741f640a0535886d180 +Subproject commit 6ffae86faf42d797de0a2f4b61b88b8d578d474b From bdf63638d2d15aaafb280eb4da86209042277649 Mon Sep 17 00:00:00 2001 From: Alex Yong Date: Mon, 9 Feb 2026 10:59:06 -0500 Subject: [PATCH 7/7] Updating submodules --- .gitmodules | 2 +- FreeSO | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index 620f840..05a705e 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ [submodule "FreeSO"] path = FreeSO - url = https://github.com/alexjyong/FreeSO + url = https://github.com/riperiperi/FreeSO diff --git a/FreeSO b/FreeSO index 6ffae86..3072dfc 160000 --- a/FreeSO +++ b/FreeSO @@ -1 +1 @@ -Subproject commit 6ffae86faf42d797de0a2f4b61b88b8d578d474b +Subproject commit 3072dfcdebd07c7f2630a3148657ff15bc25d851