riperiperi / freeso Goto Github PK
View Code? Open in Web Editor NEWRe-implementation of The Sims Online.
Home Page: http://freeso.org
License: Mozilla Public License 2.0
Re-implementation of The Sims Online.
Home Page: http://freeso.org
License: Mozilla Public License 2.0
Lot Creation in the cityview on the server rebuild Branch doesnt work, the Buy window doesn't show up
Hi there, thanks for your awesome work on FreeSO!
I am trying to build under Linux using Mono msbuild. Apart from the minor naming issues already fixed in #166 & #167 , I still have some issue left.
Where can I find the following files? They don't seem to be present in mainline MonoGame either
/FreeSO/TSOClient/FreeSO.sln.metaproj : error MSB3202: The project file "/FreeSO/TSOClient/../Other/libs/FSOMonoGame/MonoGame.Framework/MonoGame.Framework.WindowsGL.csproj" was not found. [/FreeSO/TSOClient/FreeSO.sln]
/FreeSO/TSOClient/FreeSO.sln.metaproj : error MSB3202: The project file "/FreeSO/TSOClient/../Other/libs/FSOMonoGame/MonoGame.Framework/MonoGame.Framework.Windows.csproj" was not found. [/FreeSO/TSOClient/FreeSO.sln]
/FreeSO/TSOClient/FreeSO.sln.metaproj : error MSB3202: The project file "/FreeSO/TSOClient/../Other/libs/FSOMonoGame/MonoGame.Framework/MonoGame.Framework.Linux.csproj" was not found. [/FreeSO/TSOClient/FreeSO.sln]
/FreeSO/TSOClient/FreeSO.sln.metaproj : error MSB3202: The project file "/FreeSO/TSOClient/../Other/libs/FSOMonoGame/MonoGame.Framework/MonoGame.Framework.Net.WindowsGL.csproj" was not found. [/FreeSO/TSOClient/FreeSO.sln]
/FreeSO/TSOClient/FreeSO.sln.metaproj : error MSB3202: The project file "/FreeSO/TSOClient/../Other/libs/FSOMonoGame/ThirdParty/Lidgren.Network/Lidgren.Network.WindowsGL.csproj" was not found. [/FreeSO/TSOClient/FreeSO.sln]
/FreeSO/TSOClient/FreeSO.sln.metaproj : error MSB3202: The project file "/FreeSO/TSOClient/../Other/libs/FSOMonoGame/MonoGame.Framework.Content.Pipeline/MonoGame.Framework.Content.Pipeline.Windows.csproj" was not found. [/FreeSO/TSOClient/FreeSO.sln]
Our engine obviously has some interesting additional possibilities, one of which being a modern re-implementation of the original sims series, playable in full 3d, with new lighting and supporting other custom enhancements. Might create as part of this project to start, then branch out to its own repo later.
I'm trying to build FreeSO for Android using VS 2017 (Windows). So I choose "Release, Any CPU, FSODroid", I'm I doing it right? I got 33 errors. Any tips, please?
The type or namespace name 'FSO' could not be found (are you missing a using directive or an assembly reference?)
The type or namespace name 'TargalmagePCL' could not be found (are you missing a using directive or an assembly reference?)
The name 'FSOEnvironment' does not exist in the current context
And some other errors... (all in FSOActivity.cs)
Currently, the game renders text using XNA SpriteFonts generated from the game's fonts at compile time. Not only does this mean we're distributing a rendered version of the game font, but it means that the result is rather low quality (limited size range) and requires slow redraws every frame.
We should be rendering using the ttf font directly, into "label" textures that are only regenerated when the text is changed.
We need a library that does this entirely within C#, so that we can cross compile to ARM easily. That means no wrapper classes!
Apologies if this is mentioned somewhere, but what platforms are recommended for FreeSO development? Is anyone developing/testing on Linux or OS X ?
After cloning (including submodules), I attempt to run Other/libs/FSOMonoGame/Protobuild.exe and see:
Installing http://protobuild.org/hach-que/Protobuild.Manager...
(1/10) HTTP GET http://protobuild.org/hach-que/Protobuild.Manager/api
Exception during web request:
System.Net.WebException: The remote server returned an error: (404) Not Found.
at System.Net.WebClient.DownloadDataInternal (System.Uri address, System.Net.WebRequest& request) [0x00072] in <f8bb3922e51744d9ace1aa6aedc374ea>:0
at System.Net.WebClient.DownloadString (System.Uri address) [0x00020] in <f8bb3922e51744d9ace1aa6aedc374ea>:0
at (wrapper remoting-invoke-with-check) System.Net.WebClient.DownloadString(System.Uri)
at Protobuild.RetryableWebClient+<>c__DisplayClass17_0.<DownloadString>b__0 (System.Uri u) [0x00000] in <2927a5e341f14949a89505ff5ebc49ee>:0
at Protobuild.RetryableWebClient.PerformRetryableRequest[T] (System.String message, System.Uri baseUri, System.Func`2[T,TResult] func) [0x00052] in <2927a5e341f14949a89505ff5ebc49ee>:0
Backing off web requests for 100ms...
(2/10) HTTP GET http://protobuild.org/hach-que/Protobuild.Manager/api
Exception during web request:
System.Net.WebException: The remote server returned an error: (404) Not Found.
at System.Net.WebClient.DownloadDataInternal (System.Uri address, System.Net.WebRequest& request) [0x00072] in <f8bb3922e51744d9ace1aa6aedc374ea>:0
at System.Net.WebClient.DownloadString (System.Uri address) [0x00020] in <f8bb3922e51744d9ace1aa6aedc374ea>:0
at (wrapper remoting-invoke-with-check) System.Net.WebClient.DownloadString(System.Uri)
at Protobuild.RetryableWebClient+<>c__DisplayClass17_0.<DownloadString>b__0 (System.Uri u) [0x00000] in <2927a5e341f14949a89505ff5ebc49ee>:0
at Protobuild.RetryableWebClient.PerformRetryableRequest[T] (System.String message, System.Uri baseUri, System.Func`2[T,TResult] func) [0x00052] in <2927a5e341f14949a89505ff5ebc49ee>:0
Backing off web requests for 200ms...
(3/10) HTTP GET http://protobuild.org/hach-que/Protobuild.Manager/api
Exception during web request:
System.Net.WebException: The remote server returned an error: (404) Not Found.
... <repeated>...
OSX 10.13.4
I'm finding this game really interesting but I've stumbled upon a lack of a really nice feature - being able to play on a local server with friends. I know that legacy versions of FreeSO relied on LAN servers only but I'd love to see an online (MMO-like gameplay) and LAN play options. Is there any chance for that?
Steps to reproduce:
Output of error:
exception inside UnhandledException handler: The type initializer for 'System.Console' threw an exception.
[ERROR] FATAL UNHANDLED EXCEPTION: System.TypeInitializationException: The type initializer for 'System.Console' threw an exception. ---> System.TypeInitializationException: The type initializer for 'System.ConsoleDriver' threw an exception. ---> System.Exception: Magic number is wrong: 542
at System.TermInfoReader.ReadHeader (System.Byte[] buffer, System.Int32& position) [0x00028] in <0cc37f4786fa491387f4cb0ad6d68b47>:0
at System.TermInfoReader..ctor (System.String term, System.String filename) [0x0005f] in <0cc37f4786fa491387f4cb0ad6d68b47>:0
at System.TermInfoDriver..ctor (System.String term) [0x00055] in <0cc37f4786fa491387f4cb0ad6d68b47>:0
at System.ConsoleDriver.CreateTermInfoDriver (System.String term) [0x00000] in <0cc37f4786fa491387f4cb0ad6d68b47>:0
at System.ConsoleDriver..cctor () [0x0004d] in <0cc37f4786fa491387f4cb0ad6d68b47>:0
--- End of inner exception stack trace ---
at System.Console.SetupStreams (System.Text.Encoding inputEncoding, System.Text.Encoding outputEncoding) [0x00007] in <0cc37f4786fa491387f4cb0ad6d68b47>:0
at System.Console..cctor () [0x0008e] in <0cc37f4786fa491387f4cb0ad6d68b47>:0
--- End of inner exception stack trace ---
at FSO.Client.FSOProgram.CurrentDomain_UnhandledException (System.Object sender, System.UnhandledExceptionEventArgs e) [0x0000b] in <40b2c171dc624f2d8a922b51726e2050>:0
AL lib: (EE) alc_cleanup: 1 device not closed
Plugins, or EODs, are TSO's way of adding extra functionality to objects that the normal gameplay of The Sims doesn't allow. They're a large part of what made TSO what it is, and made it easier for people to manage their lots, have fun and make money with others.
Our implementation works in a "Client/Server" kind of fashion, where the EOD acts as a standalone server within the simulation. This server is started upon the first call of the SimAntics "Invoke Plugin" primitive, and closed when everyone disconnects. Here's a textdump from VMEODServer:
When Invoke Plugin is called, the calling thread blocks in the format of an animation.
The plugin returns EVENTS (short code, short[] dataForTemps) on the false branch.
These events obviously queue up, multiple per frame and have priority over the final "close".
- these MUST be synchronised across clients (using commands)! all other comms (UI) are done async
Plugins can either run on an object, with connections (Thread, ObjectID) (joinable, objects share same plugin)
...or run just on their thread alone. (Thread)
AvatarID specifies who sees the UI and "connects" to the plugin. This can be 0. (Dance Floor Controller connects to itself to get events)
The primitive "Invoke Plugin", as well as providing events allows SimAntics to send events to the plugin server, contained in the specified local. Special event "-2" initiates a connection, while special event "-1" closes one. See VMInvokePlugin.cs for more details.
Plugins need two different handlers, one for UI and one for the "server".
UI handlers are in FSO.Client.UI,Panels.EODs and are managed by UIEODController. They subclass UIEOD, which provides the messaging functionality.
Server handlers are in FSO.SimAntics.NetPlay.EODs.Handlers, and are managed by VMEODServer. They subclass VMEODHandler, which provides some functionality, but most of it (outgoing messages) is through a back reference to the VMEODServer that owns it. Save data for plugin servers is currently accessed via the GlobalLink, and generally tied to the persist id of the object in question. See SignsPlugin for an example.
Have a look at the existing classes to get a feel of how this all works. To implement additional plugins, you will need to watch videos of how they worked, and look at their scripts within Volcanic or Edith.
Plugins to be implemented:
The current update path is very primitive:
The key word you're looking for here is "manually". There are many chances for this process to go wrong (and it has) and a lot of time is typically spent preparing these updates. Other issues include the increasing size of our updates, and the increasing chance that something will either be corrupted or not extract. There are no safeguards when this happens, and the user often has to reinstall the FreeSO client, which the launcher doesn't make too easy.
The solution is to rethink how we do updates entirely. The less files we have to update, the less intrusive it will be to push out corrective updates for both us and our users, especially for minor updates that just change objects or PIFF patches. Catching things that go wrong and re-updating when they do will save a lot of hassle for users that are affected often.
develop
or feature branches, to avoid affecting game updates.Update binaries are getting larger and larger, as they contain all of the files used by the FreeSO client. This includes our additional objects, 3D city, ui etc... The thing is, most of these files do not change between game versions, and most likely never will. If we discover a bug with a single library or object, it doesn't make sense pushing out an update with 128MB of content to fix it.
The solution is to instead only update the files that have changed from the last patch. With the above in mind, that means the following:
Note that this means a few things for servo - specifically that for the most optimal calculation of differences we will need to make sure the buildbot does not build clean every time. This will mean it could leave multiple dlls unmodified, meaning they do not need to be included in the incremental update.
This issue is still WIP, but it is the current focus of development. As a result the Admin API angular app will probably be cleaned up too.
There is no option that if the host looses connection or is kicked out due to a crashing bug another user takes over the hosting. Everyones game is stopped now.
Currently, when one element in a sprite group (wall/staticobj/floor) changes, the whole cache for it is regenerated, then re-rendered. This can get very expensive for viewing multiple floors, especially when one is more active than the others (eg. walls cutaway on top, all others walls up).
Sprite caches should be generated per-floor. This has obvious benefits despite needing more draw calls, and in render modes like software depth for iOS, the sprite-texture groups tend to be split over floors anyways due to their overlaps.
In fact, since baked sprite draw-arrays are only for sprites sharing the same texture, we only actually need to regenerate the them for textures where the sprites have been modified, removed or added. This requires a lot smarter sprite tracking, which should be easy to do for objects (since they have sprites hard-attached to them), but will likely require a considerable rewrite for walls/floors.
It's worth considering even just for objects alone, as they tend to have the most draw calls. For example, one object in the cache could change, but no other of the 3000 sprites share the same texture, therefore they can continue using the vertex data generated previously. This would directly impact the "dynamic" object layer the most, as it currently regenerates its sprite caches every frame.
@riperiperi
i found a issue in ts1/tso chemistry set flask sprite,can this can be fix?
Currently, room score is unimplemented and stays at whatever value it started at. This can be done in a similar way to how lighting contribution is calculated. See room-map generation and related lighting functions in VMContext, VMEntity, VMArchitecture.
In builds before 398 (http://forum.freeso.org/threads/creating-lan-server.2495/) there was the option to join a LAN server. In the newest builds (with master server) such an option does not exist.
Can we expect it back in the near future?
Hi just wondering if there is plans to make a native version of the launcher and game for Linux?
As shown in the image
https://imgur.com/a/wmLfk
Thus happened while playing chess*
A queue system would be nice for performing any of these actions
Windows 8.1, screen resolution 3840x2160 (4K), Version beta/update-16:
On the neighborhood view, where moving the mouse curser normally results in a squares on the ground to be drawn, this only happens in the top left quarter of the screen. It also does not react to left clicking in the area where the squares are not drawn. Right clicking in the bottom right area results in ultra-fast screen movement towards the bottom right (which is probably caused by the client taking the mouse distance from the presumed "center", which is here in the top left quarter, to determine the scroll speed).
Resizing the window back to 1080p resolution is a workaround to this issue. This issue does not arise inside of lots (there, 4K works fine).
There is one animation mode that has not been implemented (because it doesn't seem used in many cases, but the notable instances are very noticable). This is the idle animation, which is played when no other animations are present on the sim. Here's a few potential cases:
Additionally, implementation of this mode would stop avatars "running on the spot" when they exit routing and do not play another animation.
When a sim is on a working object (potion for example) you cant click on him if mouse hitting the hitbox of the potion machine as well as the sim
Main screen takes the main focus from Private Messaging system when pressing the ENTER key.
The only way to bypass it is by ctrl+H having the chat window up.
Sorry, the textbox does not allow me to copy/paste text.
Here is an image of the error before crash:
http://i.imgur.com/F7pAIPB.png
While it's nice to have separate sprite caches for walls, floors and objects, having multiple scrolling render targets and having to restore them all to screen really seems to burn up battery/gpu cycles due to filling the space of the entire screen >6 times every frame. All of these scroll buffers need to redraw at the same time when you scroll anyways - there's only a minor benefit right now when it only has to redraw objects while the camera is static (and not walls/floors).
Drawing them all to one scroll buffer would also avoid weird z-order issues where transparent static objects would remove the floor between it and an object behind it, as they would be drawn in the correct floor order.
known Volcanic can play TSO xa audio,but can provide a small tool for free export or precision point TSO xa audio?
The UI isn't exactly very big on high resolutions (1080P). Is there an option to increase the icon / font size?
Simitone seems an option but I am unaware how to set that up without owning The Sims Collection.
Currently, balconies play havoc with the room pathfinding. It thinks there is a path through the single "outside" room on the upper floor, but there isn't. This can make lots with many balconies hard to work with. These should ideally be multiple "outside" rooms, and even be possible inside.
Pools do a segmentaton like this, but they do not correctly retain the lighting from their surrounding room, or bleed it into other adjacent rooms. This effect creates a sort of black hole, where all the light is hilariously absorbed by the pool.
To fix these issues, we must segment rooms on fences and pool boundaries, and do it right, so that "outside" room status and lighting contributions bleed over these room boundaries. These rooms would be marked "adjacent", and any changes to their lighting contribution/room score would bleed into the other rooms via a depth first search or other traversal.
I will try to fix it I think I found the root of the problem! I know C# but this is a huge project i'll suggest a pull request if I succeed (its a minor problem anyway), can be reproduced by a+ctrl+delete on textbox
When the lot-city connection fails, all lots on the lot server are closed and released to ensure consistency, and to release those lots' claims in the database. However, if the city is still alive, it will still have allocations for these lots set up in LotAllocations, meaning that the city server believes the lot server is hosting the lot when it has already shut down.
When a user attempts to re-open their lot after this, LotAllocations believes it is already open, and tells the user to connect to it on the lot server. However, when the user connects to the lot server, they are booted off immediately because the lot is not actually being hosted.
Any additional lots will start and allocate as normal.
Solution:
This is a pretty low priority issue as the game functions correctly after closing the error message, but it is slightly annoying.
On startup, while Charvatia has claimed exclusive access to the Monogame dll in the root directory, FreeSO tries to use it and fails. This results in the following error message:
Since the global server will render Charvatia obsolete, this problem will be resolved then. Even so, it would be nice to at least have a flag that suppressed this error.
(I'm aware this is a known issue)
At a specific time in the day, the sim changes for the robot factory job and walks up to the carpool. Aaaaand... nothing!
I'm aware that in the global server the sim would probably be transported to the job lot, but right now it would be a good idea to either simulate the sim "going to work" and receiving a paycheck before changing back to normal clothes, or maybe just having the "Go to Work" interaction disabled for the time being.
I'd like to hear your comments on this!
The "server" sim from Charvatia has his/her needs decay, which means a tombstone is placed multiple times. Despite you needing to click through a dialog to die more than 2 times, Rhys has added a timeout to this, meaning the server sim can now spam gravestones.
A potential solution to this would be freezing the server sim's needs meaning that they wouldn't have needs decaying causing death and cause this spam.
Another solution could be simply disabling death for the sim. This would stop the gravestone spam, but the invisible server sim would still complain about low needs!
Finally, we could simply remove the gravestones entirely, or the trigger to place them on death, thereby resolving the potential for trolls to die in front of entrances or certain areas with the intention of blocking out other players - with permissions, this means the players have to wait until a build/buy roomie or an admin to join and remove the tombstone.
However, removing tombstones means this potential trolling method is impossible, which would improve the experience for everyone!
The Change Password API ('/userapi/password') doesn't properly validate the old password. It calls the PasswordHasher.Hash
directly (which generates a hash with a new salt), rather than PasswordHasher.Verify
.
See RegistrationController.cs line 380:
var old_password_hash = PasswordHasher.Hash(model.old_password);
if (old_password_hash.data!=da.Users.GetAuthenticationSettings(user.user_id).data)
...
I assume this should instead be similar to the AuthLoginController's method of validating the password:
var authSettings = db.Users.GetAuthenticationSettings(user.user_id);
var isPasswordCorrect = PasswordHasher.Verify(model.old_password, new PasswordHash
{
data = authSettings.data,
scheme = authSettings.scheme_class
});
if (!isPasswordCorrect)
...
It would probably be a good idea to have at least some basic information on the wiki so people can test the modifications they make.
The Gonzo net is not updated to Framework 4.0? or that is intended for linux and cross platform support??
Most objects in a lot are completely inanimate, eg. windows, doors, chairs, counters, but still perform a full VM tick every frame. This tick usually consists of initializing the execution context, checking to see if it is valid, checking interaction status, finding the top stack frame, getting the current instruction & its handler, running the Sleep primitive to poll for interrupts and decrement the parameter (one of the 20000 ticks the object wants to sleep for), handling its return value and then doing a few other checks and background operations that really could be skipped for most objects.
I would say over 90% of objects in most lots have a main method that is literally just "idle 20000 ticks", as the objects do not need to animate or do any kind of internal polling. The tick function also performs some operations to do with currently playing sounds and headlines, which are in an even smaller minority, yet are currently run constantly on every object. It is only important to run entity and thread ticks every frame on avatars.
The solution would be to implement a "schedule", where the VM would only run ticks on the objects that have been "scheduled" to continue executing on that frame, instead of all of them. The thread would be extended to include an internal timer to indicate how long it has been dormant for, so time sensitive variables can be updated accordingly. For example, an object entering idle for "20000 ticks" would schedule itself to run again on tick (current + 20000). If it is interrupted out of idle by another object, this registration should be moved to (newCurrent + 1) to execute as soon as possible. Its "Tick()" function would never even be touched for the frames where it is not scheduled, saving execution time.
When idling in freeso.ml, VMEntity ticks take ~79% of the internal tick's execution time. If we could strip out this theoretical 90%, that's an easy 3.5x speedup for idle lots. This would make it a lot easier to host lots on the MMO server, and a little easier to run on slower devices. The bottleneck would quickly become the renderer. (yes, even more than it is now)
Things which need to be considered:
Post any images to be used in the Readme or anywhere else in the repo in this issue.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.