Skip to content

Compile and release binaries on every commit#18

Open
ThreeDeeJay wants to merge 45 commits into
francot514:masterfrom
ThreeDeeJay:master
Open

Compile and release binaries on every commit#18
ThreeDeeJay wants to merge 45 commits into
francot514:masterfrom
ThreeDeeJay:master

Conversation

@ThreeDeeJay
Copy link
Copy Markdown

@ThreeDeeJay ThreeDeeJay commented Mar 26, 2026

Automatically builds and uploads Windows artifacts using GitHub actions on every commit push to, e.g.:

Also, upgraded .NET Framework to 4.7.2 since 4.5 doesn't seem to be available anymore.
And added some missing NuGet packages.

This probably needs more testing though, because I'm still not able to run it and get the same error as the one I get in the official build:

Unhandled Exception: System.IO.EndOfStreamException: Unable to read beyond the end of the stream.
   at System.IO.MemoryStream.InternalReadInt32()
   at System.IO.BinaryReader.ReadInt32()
   at FSO.Files.Utils.IoBuffer.ReadInt32() in D:\a\FreeSims\FreeSims\sims.files\utils\IoBuffer.cs:line 131
   at FSO.Files.Formats.IFF.Chunks.NGBH.Read(IffFile iff, Stream stream) in D:\a\FreeSims\FreeSims\sims.files\formats\iff\chunks\NGBH.cs:line 43
   at FSO.Files.Formats.IFF.IffFile.prepare[T](Object input) in D:\a\FreeSims\FreeSims\sims.files\formats\iff\IffFile.cs:line 204
   at FSO.Files.Formats.IFF.IffFile.List[T]() in D:\a\FreeSims\FreeSims\sims.files\formats\iff\IffFile.cs:line 273
   at FSO.Content.TS1.TS1NeighborhoodProvider.InitSpecific(Int32 id) in D:\a\FreeSims\FreeSims\SimsVille\ContentManager\other\TS1NeighbourProvider.cs:line 63
   at FSO.Content.TS1.TS1NeighborhoodProvider..ctor(Content contentManager) in D:\a\FreeSims\FreeSims\SimsVille\ContentManager\other\TS1NeighbourProvider.cs:line 38
   at FSO.Content.Content..ctor(String basePath, GraphicsDevice device) in D:\a\FreeSims\FreeSims\SimsVille\ContentManager\Content.cs:line 76
   at FSO.Client.TSOGame.Initialize() in D:\a\FreeSims\FreeSims\SimsVille\Game.cs:line 90
   at Microsoft.Xna.Framework.Game.DoInitialize()
   at Microsoft.Xna.Framework.Game.Run(GameRunBehavior runBehavior)
   at FSO.Client.GameStartProxy.Start(Boolean useDX) in D:\a\FreeSims\FreeSims\SimsVille\GameStartProxy.cs:line 22
   at FSO.Client.Program.Main(String[] args) in D:\a\FreeSims\FreeSims\SimsVille\Program.cs:line 29

But hopefully this PR should make it easier to push and test updates.

@ThreeDeeJay ThreeDeeJay marked this pull request as draft March 26, 2026 15:58
@salvadorc17
Copy link
Copy Markdown

Hey my brother francot514 has said this looks good but will be better if you clean it up into one commit only

@ThreeDeeJay
Copy link
Copy Markdown
Author

Yeah, to be fair, figuring out the proper-ish build process did take some trial and error 😅
But are you saying it worked on francot514's end? I still haven't been able to get it running but it does seem to behave just like the official build so maybe I'm missing something on my end. I installed TS1 CC and TSO.

Also I noticed there's a few files missing that are present in the official build, like tuning.dat, which I'm not sure where it comes from either because it's not in the game files, repo or compiled #2 (comment)
That's why I marked the PR as a draft, but if it can be "fixed in post" by adding those files (e.g. tuning.dat into the Content folder), it will carry onto the build because the whole folder gets copied into the build artifacts.

Anyhow, if I guess I'll mark it as ready to review so it can be merged.
By the way, don't maintainers have an option to squash and merge the PR into a single commit? 🤔
image

@ThreeDeeJay ThreeDeeJay marked this pull request as ready for review March 27, 2026 19:41
@salvadorc17
Copy link
Copy Markdown

Which version of monogame you linked against in SimsVille, seems it cant find the proper version to run and yes some files missing like Content/deluxe.xml and the tunning.dat comes from TSO there is issue loading it

@ThreeDeeJay
Copy link
Copy Markdown
Author

ThreeDeeJay commented Mar 27, 2026

yes some files missing like Content/deluxe.xml and the tunning.dat comes from TSO there is issue loading it

Huh, I can't find it with Windows search or even with Everything.
Maybe it's downloaded by the update utility?
Nevermind, found it. I had misspelled it.

Do I still need it if I just want to play TS1 offline?
And if so, wouldn't it be a good idea for FS to just read it from the original location or copy it over?

Which version of monogame you linked against in SimsVille, seems it cant find the proper version to run

I kept this version

<package id="MonoGame.Framework.WindowsGL" version="3.4.0.459" targetFramework="net4" />

@salvadorc17
Copy link
Copy Markdown

Yes it should read from FS, will tell franco to fix that issue, but its needed to handle some game local variables

@salvadorc17
Copy link
Copy Markdown

The soft openal and Monogame used by default is windows, so need that folder of files in the solution (instead of windowsgl) plus some missing files like deluxe.xml and config.ini

@ThreeDeeJay
Copy link
Copy Markdown
Author

Hmm, I had tried putting the monogame DLL in the Windows folder but it's not recognized
image

@ThreeDeeJay
Copy link
Copy Markdown
Author

By the way, does FS even use OpenAL Soft?
I just noticed even Simitone comes with soft_oal.dll but doesn't actually use it (DLL doesn't get loaded according to API monitor)

@salvadorc17
Copy link
Copy Markdown

Simitone is a different project, so has different requeriments, but what you need to do is put entire Monogame folder into the new compiled versions

@ThreeDeeJay
Copy link
Copy Markdown
Author

Ok, so I extracted FreeSims.zip then replaced the Monogame folder with the one from SimsVille.rar and first I got this:

Unhandled Exception: Microsoft.Xna.Framework.Audio.NoAudioHardwareException: Failed to init OpenALSoundController ---> System.DllNotFoundException: Unable to load DLL 'soft_oal.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)
   at Microsoft.Xna.Framework.Audio.OpenALSoundController.OpenSoundController()
   at Microsoft.Xna.Framework.Audio.OpenALSoundController..ctor()
   at Microsoft.Xna.Framework.Audio.OpenALSoundController.get_GetInstance()
   at Microsoft.Xna.Framework.SdlGamePlatform..ctor(Game game)
   --- End of inner exception stack trace ---
   at Microsoft.Xna.Framework.SdlGamePlatform..ctor(Game game)
   at Microsoft.Xna.Framework.GamePlatform.PlatformCreate(Game game)
   at Microsoft.Xna.Framework.Game..ctor()
   at FSO.Client.TSOGame..ctor() in D:\a\FreeSims\FreeSims\SimsVille\Game.cs:line 33
   at FSO.Client.GameStartProxy.Start(Boolean useDX) in D:\a\FreeSims\FreeSims\SimsVille\GameStartProxy.cs:line 19
   at FSO.Client.Program.Main(String[] args) in D:\a\FreeSims\FreeSims\SimsVille\Program.cs:line 29

so I moved soft_oal.dll into the windows folder and it seemed to fix that error but then I'm back at the original error I've been getting.

@salvadorc17
Copy link
Copy Markdown

Download this https://www.mediafire.com/file/x1ez0sv4wm67ijm/UserData.zip/file and put into your The Sims folder

@ThreeDeeJay
Copy link
Copy Markdown
Author

ThreeDeeJay commented Mar 30, 2026

Thanks, after adding that, the official FS build finally starts. 👌

However, in my build, if I copy deluxe.xml from the official to my build (config.ini is auto-generated), I get this:

Unhandled Exception: System.Exception: This MGFX effect was built for a different platform!
   at Microsoft.Xna.Framework.Graphics.Effect.ReadHeader(Byte[] effectCode, Int32 index)
   at Microsoft.Xna.Framework.Graphics.Effect..ctor(GraphicsDevice graphicsDevice, Byte[] effectCode, Int32 index, Int32 count)
   at Microsoft.Xna.Framework.Content.EffectReader.Read(ContentReader input, Effect existingInstance)
   at Microsoft.Xna.Framework.Content.ContentTypeReader`1.Read(ContentReader input, Object existingInstance)
   at Microsoft.Xna.Framework.Content.ContentReader.InnerReadObject[T](T existingInstance)
   at Microsoft.Xna.Framework.Content.ContentReader.ReadObject[T]()
   at Microsoft.Xna.Framework.Content.ContentReader.ReadAsset[T]()
   at Microsoft.Xna.Framework.Content.ContentManager.ReadAsset[T](String assetName, Action`1 recordDisposableObject)
   at Microsoft.Xna.Framework.Content.ContentManager.Load[T](String assetName)
   at FSO.Client.TSOGame.LoadContent() in D:\a\FreeSims\FreeSims\SimsVille\Game.cs:line 183
   at Microsoft.Xna.Framework.Game.Initialize()
   at FSO.Common.Rendering.Framework.Game.Initialize() in D:\a\FreeSims\FreeSims\sims.common\rendering\framework\Game.cs:line 26
   at FSO.Client.TSOGame.Initialize() in D:\a\FreeSims\FreeSims\SimsVille\Game.cs:line 93
   at Microsoft.Xna.Framework.Game.DoInitialize()
   at Microsoft.Xna.Framework.Game.Run(GameRunBehavior runBehavior)
   at FSO.Client.GameStartProxy.Start(Boolean useDX) in D:\a\FreeSims\FreeSims\SimsVille\GameStartProxy.cs:line 22
   at FSO.Client.Program.Main(String[] args) in D:\a\FreeSims\FreeSims\SimsVille\Program.cs:li

and if I copy over "Monogame\WindowsGL\MonoGame.Framework.dll" from the official build, I get the soft_oal.dll error above so I just move it like I did earlier and I get the splash screen but it eventually crashes without actually starting the game, with this error:

Unhandled Exception: System.IO.FileNotFoundException: Could not find file 'C:\Games\SimsVille\Fork\Content\nhood.png'.
   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
   at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)
   at SimsVille.UI.Model.Neighborhood.LoadContent() in D:\a\FreeSims\FreeSims\SimsVille\UI\Model\Neighborhood.cs:line 94
   at FSO.Client.UI.Screens.CoreGameScreen..ctor() in D:\a\FreeSims\FreeSims\SimsVille\UI\Screens\CoreGameScreen.cs:line 280
   at FSO.Client.GameController.ShowLotDebug() in D:\a\FreeSims\FreeSims\SimsVille\UI\GameController.cs:line 98
   at FSO.Client.UI.Screens.LoadingScreen.CheckPreloadLabel() in D:\a\FreeSims\FreeSims\SimsVille\UI\Screens\LoadingScreen.cs:line 147
   at FSO.Client.UI.Screens.LoadingScreen.tween_OnComplete(UITweenInstance tween, Single progress) in D:\a\FreeSims\FreeSims\SimsVille\UI\Screens\LoadingScreen.cs:line 178
   at FSO.Client.UI.Framework.UITweenInstance.Complete() in D:\a\FreeSims\FreeSims\SimsVille\UI\Framework\UITween.cs:line 149
   at FSO.Client.UI.Framework.UITween.Update(UpdateState state) in D:\a\FreeSims\FreeSims\SimsVille\UI\Framework\UITween.cs:line 78
   at FSO.Client.UI.UILayer.Update(UpdateState state) in D:\a\FreeSims\FreeSims\SimsVille\UI\UILayer.cs:line 342
   at FSO.Common.Rendering.Framework.GameScreen.Update(GameTime time, Boolean hasFocus) in D:\a\FreeSims\FreeSims\sims.common\rendering\framework\GameScreen.cs:line 78
   at FSO.Client.TSOGame.Update(GameTime gameTime) in D:\a\FreeSims\FreeSims\SimsVille\Game.cs:line 213
   at Microsoft.Xna.Framework.Game.DoUpdate(GameTime gameTime)
   at Microsoft.Xna.Framework.Game.Tick()
   at Microsoft.Xna.Framework.SdlGamePlatform.RunLoop()
   at Microsoft.Xna.Framework.Game.Run(GameRunBehavior runBehavior)
   at FSO.Client.GameStartProxy.Start(Boolean useDX) in D:\a\FreeSims\FreeSims\SimsVille\GameStartProxy.cs:line 22
   at FSO.Client.Program.Main(String[] args) in D:\a\FreeSims\FreeSims\SimsVille\Program.cs:line 29

So I copy that too from the official build and it finally starts the game, but I still run into some errors like this in some menus, I think loading the empty lot

Unhandled Exception: System.IO.FileNotFoundException: Could not find file 'C:\Games\SimsVille\Fork\Content\Characters\FSO.Client.UI.Panels.UIXMLLotEntry.xml'.
   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
   at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)
   at tso.world.Model.XmlCharacter.Parse(String xmlFilePath) in D:\a\FreeSims\FreeSims\SimsVille\World\Model\XmlCharacter.cs:line 42
   at FSO.Client.UI.Panels.UIGizmo.SelectCharacter(String file) in D:\a\FreeSims\FreeSims\SimsVille\UI\Panels\UIGizmo.cs:line 368
   at FSO.Client.UI.Panels.UIGizmo.SimBoxSelect(String charname) in D:\a\FreeSims\FreeSims\SimsVille\UI\Panels\UIGizmo.cs:line 406
   at FSO.Client.UI.Panels.UIGizmoTop100.Top100ItemSelect(UIElement button) in D:\a\FreeSims\FreeSims\SimsVille\UI\Panels\UIGizmo.cs:line 225
   at FSO.Client.UI.Controls.UIListBox.OnMouseEvent(UIMouseEventType type, UpdateState update) in D:\a\FreeSims\FreeSims\SimsVille\UI\Controls\UIListBox.cs:line 190
   at FSO.Common.Rendering.Framework.IO.InputManager.HandleMouseEvents(UpdateState state) in D:\a\FreeSims\FreeSims\sims.common\rendering\framework\io\InputManager.cs:line 513
   at FSO.Client.UI.UILayer.Update(UpdateState state) in D:\a\FreeSims\FreeSims\SimsVille\UI\UILayer.cs:line 322
   at FSO.Common.Rendering.Framework.GameScreen.Update(GameTime time, Boolean hasFocus) in D:\a\FreeSims\FreeSims\sims.common\rendering\framework\GameScreen.cs:line 78
   at FSO.Client.TSOGame.Update(GameTime gameTime) in D:\a\FreeSims\FreeSims\SimsVille\Game.cs:line 213
   at Microsoft.Xna.Framework.Game.DoUpdate(GameTime gameTime)
   at Microsoft.Xna.Framework.Game.Tick()
   at Microsoft.Xna.Framework.SdlGamePlatform.RunLoop()
   at Microsoft.Xna.Framework.Game.Run(GameRunBehavior runBehavior)
   at FSO.Client.GameStartProxy.Start(Boolean useDX) in D:\a\FreeSims\FreeSims\SimsVille\GameStartProxy.cs:line 22
   at FSO.Client.Program.Main(String[] args) in D:\a\FreeSims\FreeSims\SimsVille\Program.cs:line 29
Unhandled Exception: System.IO.IOException: The process cannot access the file 'C:\Games\SimsVille\Fork\Content\nhood.png' because it is being used by another process.
   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
   at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)
   at SimsVille.UI.Model.Neighborhood.LoadContent() in D:\a\FreeSims\FreeSims\SimsVille\UI\Model\Neighborhood.cs:line 94
   at SimsVille.UI.Model.Neighborhood.DeviceReset(GraphicsDevice Device) in D:\a\FreeSims\FreeSims\SimsVille\UI\Model\Neighborhood.cs:line 129
   at FSO.Common.Rendering.Framework._3DAbstract.m_Device_DeviceReset(Object sender, EventArgs e) in D:\a\FreeSims\FreeSims\sims.common\rendering\framework\3DAbstract.cs:line 55
   at System.EventHandler`1.Invoke(Object sender, TEventArgs e)
   at Microsoft.Xna.Framework.EventHelpers.Raise[TEventArgs](Object sender, EventHandler`1 handler, TEventArgs e)
   at Microsoft.Xna.Framework.Graphics.GraphicsDevice.Reset()
   at Microsoft.Xna.Framework.Graphics.GraphicsDevice.Reset(PresentationParameters presentationParameters)
   at Microsoft.Xna.Framework.GraphicsDeviceManager.ApplyChanges()
   at FSO.Client.TSOGame.Window_ClientSizeChanged(Object sender, EventArgs e) in D:\a\FreeSims\FreeSims\SimsVille\Game.cs:line 63
   at Microsoft.Xna.Framework.EventHelpers.Raise[TEventArgs](Object sender, EventHandler`1 handler, TEventArgs e)
   at Microsoft.Xna.Framework.SdlGameWindow.ClientResize(Int32 width, Int32 height)
   at Microsoft.Xna.Framework.SdlGamePlatform.SdlRunLoop()
   at Microsoft.Xna.Framework.SdlGamePlatform.RunLoop()
   at Microsoft.Xna.Framework.Game.Run(GameRunBehavior runBehavior)
   at FSO.Client.GameStartProxy.Start(Boolean useDX) in D:\a\FreeSims\FreeSims\SimsVille\GameStartProxy.cs:line 22
   at FSO.Client.Program.Main(String[] args) in D:\a\FreeSims\FreeSims\SimsVille\Program.cs:line 29

Anyhow, just reporting my testing process for reference.
Once the files are added to the repo or loaded from the games' installation folders, it will probably be a lot more stable. 🤞

By the way, any chance the audio could be fully positional (every sound being a 3D emitter)?
OpenAL Soft can render audio in 3D (with verticality), so stuff near the top of the screen would sound like it's coming from there, and same for the bottom. But I just tested it and it just seems like OpenAL Soft is just receiving the stereo mix and virtualizing it behind me, unless I add this to an alsoft.ini file in the root folder:

[game_compat]
reverse-z=true

@salvadorc17
Copy link
Copy Markdown

The build.yml should copy those files from the packages folder. About 3d audio not sure how that works

@ThreeDeeJay ThreeDeeJay marked this pull request as draft March 30, 2026 18:57
@salvadorc17
Copy link
Copy Markdown

Youre still copying from WindowsGL and it builds with Windows(Dx) in Monogame folder

@ThreeDeeJay
Copy link
Copy Markdown
Author

ThreeDeeJay commented Mar 30, 2026

Yeah, I noticed it was overwriting the new binaries from NuGet with the old ones so I deleted it from the repo.
So with the latest build I just had to copy deluxe.xml and nhood.png into Content and voila, the game's playable. Nevermind, I just noticed the files were added to the main repo so I merged it and now it's playable right out of the box👌

@ThreeDeeJay ThreeDeeJay marked this pull request as ready for review March 30, 2026 20:54
@salvadorc17
Copy link
Copy Markdown

salvadorc17 commented Mar 30, 2026

That sounds good, now important is to test gameplay features. Check fixes branch is updated to Net 4.8 and Monogame 3.6

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants