* [Monogame] Fix FSO.Windows having runtime errors on standalone build.
* [LotView] Begin Optimizations
- Fix large CPU usage from chat panel when a lot has many objects (about
5%!)
- Fix large CPU usage when scrolling due to signalling scroll changed to
every object in the property despite this info not being used (this
function has now been removed. 7.55% usage on large test lot)
- Spread room lighting updates across multiple frames to prevent stutter
(may want to disable for events? perhaps give indoors updates more
chances than outdoors ones?)
* [LotView] World effects now have their own classes
No dictionary lookup required for parameters and techniques (faster draw
calls), and the benefit of compile time type checking on effect
parameters. Downside is large classes for each effect, a lot of
redundant info getting params cached and exposed as the correct type.
* [WIP
* [WIP] More refactoring
2D, 2D Hybrd work in progress. 3D still to be done.
* [WIP] Moments before disaster
A lot of stuff is about to be removed and reworked. This is here just as
a sort of "worked here at least" build.
* [3D] Reintroduce 3d (temp toggle with TAB)
Pushing as in case something goes wrong removing old world stuff, still
WIP.
* [LotView] Remove Old World Classes
Known issues:
- No 3D/2D switch yet (currently stubbed to Tab, should be in settings)
- No First Person Cam yet
- In 2D mode, rendering a roof causes the static layer to fall into an
infinite void (???)
- 2D Mode thumbnails do not render
- Lot Thumbnails are completely untested and can be influenced by hybrid
rotation.
- Facade Generator is untested.
- Hybrid 2D Rotation is still a work in progress, and smooth zoom should
be moved to the 2D controller
- Interweaving 2D and 3D entities may break a lot of things
(SpriteIndices unbound, BlendState changed)
- Headlines cut off things behind them a lot more (to be fixed)
- 2D to 3D causes surrounding lots to behave incredibly unusually.
- Still some cleanup to do.
* [IDE] Add TREE resource support
Adds labels, comments and gotos. These can be added via key shortcuts
CTRL+L and CTRL-/. You can add a goto by right clicking a label to point
to. Also fixed a lot of issues when editing BHAVs, especially with the
tracer open.
* [IDE] Very hacky way to fix comment key shortcut
* [WIP] Some improvements to Hybrid 3D
- Fix lot and object thumbnails
- Fix surrounding lots when drawing with 3D camera (includes 2d to 3d
transition)
* [LotView] Implement First Person Camera
* [LotView] Grass rotation
* [LotView] Fix thumbnail bounds
* [LotView] Rotation rework, general fixes
* [LotView] WIP Middle Mouse 2D rotation
- Breaks first person camera for the moment.
* [LotView] More work on hybrid. Add Head Seek.
Still lots more to go 👼 also fixed nuget being bad
* [NuGet] Fix stupid behaviour
* [LotView] Fix OpenGL
- Also fix a longstanding issue where the ground would flash or still be
solid colors on min lighting
* [Volcanic] Fix focus check for external window input
- Also fix some multitile stuff.
* [VM] Inventory Token Modes
- and where to find them
* [World] Some fixes for 3D mode switching.
* [LotView] Fix a few more things in LotView
* [LotView] Fix more bugs.
* [LotView] Fix LightAdjust stuff
* [PIFF] Add additional death type.
* [LotView] Fix some problems with switching between modes.
* [UI] Add mode switch button
* HoldemCasinoEOD plus a few updates to older EODs and some misc
Full description in pull request to main repo, relevant strings for
global server listed elsewhere
* HoldemCasino EOD: Logic Error
Deal hole cards face up except dealer. Duh
* Console Removal
Forgot to remove Console.WriteLine
* S1ndle's Amazing Casino Set
<P g="02B9B1A7" s="19" p="305" n="lamp-ceiling-Hold'em Dice lamp" />
<P g="02B9B1A8" s="19" p="265" n="lamp-floor-Hold'em Dice lamp" />
<P g="02B9B1A9" s="19" p="175" n="lamp-table-Hold'em Dice lamp" />
<P g="02B9B1AA" s="19" p="230" n="lamp-wall-Hold'em Neon Sign" />
<P g="02B9B1AC" s="13" p="350" n="counter-1-The Hold'em Cabinets" />
<P g="02B9B1AD" s="13" p="325" n="counter-2-The Hold'em Island Counter"
/>
<P g="22EF511F" s="13" p="1000" n="table-end-The Hold'em Display Table"
/>
<P g="31CF873D" s="17" p="485" n="rug-runner-1x4-The Hold'em Runner" />
<P g="0D79D716" s="17" p="700" n="rug-area-3x3-The Hold'em Area Rug" />
<P g="7E055DC7" s="18" p="115" n="sign-foldable-The Hold'em Sign" />
<P g="20B11DFB" s="7" p="15" n="column-The Hold'em Column" />
<P g="7CEF5108" s="18" p="1100" n="bar-The Hold'em Watering Hole" />
The Game Table itself:
<P g="37EF5198" s="15" p="35000" n="Casino Hold'em" />
* #113 Review
•Required fix completed
•Nearly all suggested additional changes completed
•Found another logic error related to face up cards
•Found a nasty bug that would have caused players to push each other off
of the table, and they probably were doing so on the blackjack table, so
fixed it there, too
* Final? changes
• Nuget HandEvaluator
• Requested locks added
• Couple of null checks added, though not necessary since correct nuget
package was added
* Jams
:jams:
* HoldemCasinoEOD & BlackjackEOD Patch
• Client: Null check for very rare bug
• Strings changed from "Play Blackjack" to "Play" for both tables
• Check for NPC Dealer before trying to push interaction and possibly
throwing null
* TwoPersonJobObjectMazeEOD
Vanilla TSO Maze, with a twist, plus:
• UIImages can have tooltips
* Of course you know this means war...
Creative, right?
* Unleashed Coffee Table fix
Fix for unleashed coffee table (inits for left and right tiles are now
properly assigned and labelled).
Last commit I promise.
* CT - Is Skill Object? fix
sorry
* Bugfixes: BlackjackEOD & HoldemCasinoEOD
•The repairman bug (infinite loop) is now fixed for HoldemCasino tables
•Pushing a hand on which a player doubled down now returns the doubled
bet amount, rather than just the original bet amount
* BlackjackEOD: Min Table Balance reworked
Needs to be 8 times maximum bet instead of 6 to cover each player
splitting every hand and getting a blackjack on all of them.
•So worst case scenario is 4 players with 4 blackjacks, less 4 times
their initial bet: 1 for the original bet and 3 for each split.
•MinimumBet * (3:2 BlackjackWinRatio) * 4(Hands) * 4(Players) -
MinimumBet * 4 (Hands) * 4(Players) = 8*MinimumBet = TableMinBalance
* Obstensible Fixed Side Bet
Changed side bet payout logic to make sure only one player is paid for
their side bet, based on bug reports of "phamtom payouts"
The bug reports were not sufficient in helping me uncover the error, but
these fixes are good failsafes.
* No more double dealing - Blackjack, HoldemCasino, Roulette
Attempt 1 to fix the double NPCs phenomenon: a remove object instance
prim is invoked at the end of the Dealing/Croupier: Stop interaction(s).
* New EOD Panel Size
Future EODs of DoubleTall size won't have to be bound by the seam..
* New Seasonal Costume
A seasonal costume is being added to the black "costume" trunk for both
genders.
* Null Check for OnClose
A bug was encoutnered in BandEOD where a Sim would disconnect from the
EOD server but the EOD Panel would not close. A patch for band is
forthcoming, but closing the EODPanel shouldn't throw null, either.
* piffsfromdiscord
* missedone
* bugfix
* Add Rotation from any Origin to UIElement
UIImage is the only UIElement to use rotation so far, but it can be used in other classes in the future.
When a rotation angle (radians) is specified that isn't the default 0F, the UImage uses the DrawLocalTexture that allows for a rotation argument. The default rotation Origin is (0.0f, 0.0f) but a custom rotation origin can be set.
Note that the rotation origin specified is not used in the Draw method of the spritebatch, but only to recalculate the 2DMatrix of the UIElement.
Also a change was made (really by ripinperiperi) to HitTestArea.
* UI Updates
Boring updates to the UI, but maybe helpful some day
* Update UISlotsEOD.cs
Wheelspin animations are faster to match the 1.2x animation speed from ages ago.
* Update UIInvisibleButton.cs
Feedback from cbt, less expensive version of invisible button
* Make Band Suck Less - Updates to band
Pending cbt test
* UIImage - Remove DissolveOpacity
Remove DissolveOpacity for PR
* Band piff & Tex
.piff and Textures for Band 2
* Update CityGeometry.cs
City geometry fix - won't error on non-Sunrise crater maps
* Band strings
Band2 strings should be in their own file.
* Revert City Geometry
Reverted to current deployed version as requested
* Band update from CBT Feedback
•Payout has been boosted, especially at early rounds
•RockOn or Sellout? ends when 3 people choose sellout or two people choose rock on.
•Failsafes to keep buttons from appearing activated
•Failsafes added to cleanly go back to the lobby when a player disconnects
•Note tooltips are no longer solfeggio, but are now E major notes with a Lo and Hi E (hard coded literals)
* uh ok
* band strings mismatch
hate csproj files
* Cooldown EOD
Initial commit. No object with which to test yet, so entries for EOD don't exist yet in VMEODServer and UIEODController. So this isn't actually able to be tested yet.
* CooldownEOD final fixes
Ready for testing
* 0x00001004
oh yea
* [IDE] WIP PIFF viewer
Do not use - just liberating from my PC with nightmare thermals
* [IDE] PIFF editor, with summary+comments, deleting existing patches.
Useful for keeping track of changes by other users. Available on Object
Window and Iff Resource Browser. Right now the patch list is a little
shaky with updating.
* [IDE] Editor UI. Not hooked up yet.
* [Upgrades] Initial Functionality
- Missing some behaviour for constant replacement, followed by upgrade.
- Does not yet support relative object pricing.
- Does not yet report correct price for store discount.
- Inventory does not yet show upgrade level. (trade does)
- Other changes to make build/buy more extendable.
- Upgrade Level now stored in database so the transaction is never lost.
- Fix an issue where users would run check trees for random objects when
hovering over a sim's shadow. (could cause an exception)
- More!
- Fix a bug where the game could crash when switching properties.
- Global Tuning: Tuning that is sent as soon as the player logs in, and
is available in city view.
- Tuning Presets: Tuning that can be applied as part of an ingame timed
event. This can include tuning for motives, object payouts, skill speed
and more - and allows all of these things to be automatically changed
while the server is running.
- Admin API for Events. (should make things easier on other M.O.M.I. ;)
)
- Tuning changes while the server is running now immediately update any
lots that are open. (fixes dynamic payouts not updating til a lot
restart)
- Interpolation for slot-slot movement. Very simple right now - could be
improved for things like table slots.
- Hidden objects (like the go here destination) no longer update
shadows, causing a stutter.
- New collision test function - should be helpful finding the desyncs
that have been hitting popular lots.
- Fix object shadows when shadows for surrounding lots are enabled
- Terrain Force logic now uses global tuning.
- "Community" category flag can now be set by Volcanic.
* [Server, Client] Add Free Vote
A mechanism that allows avatars in neighborhoods without elections to
vote in an ongoing election of their choosing.
* [Server] Free Vote, Github Releases, Restore Lot Tool, Test Utils
Still need to fix an issue with the unauthenticated disconnect.
* [Server] Improvements, Account Lockout
- Too many failed password attempts can now cause an account lockout.
- More reasonable CORS policy that doesn't spam warnings.
* [UI] Add Free Vote Confirmation Text
- New updates system, trigger updates from the admin utility. WIP
- Connection re-establish for Lot and City. When a client disconnects,
their session is kept alive for 30 seconds for them to reconnect to it
(with their session key). WIP
- WorldGeometry stuff for Simitone.
- Automatic TSO patching for installing the wrong version of TSO.
- New patcher application with better handling for errors, multiple
queued incremental updates and rollback.
- 3D mode's build/buy grid now uses a grid texture rather than relying
on wireframe rendering.
- FSOMarkDonated tso call.
- Better server validation for interaction commands.
- Various optimisations.
- Fixed a bug with routing where doing an action while sitting would
report destinations within objects as valid.
- Fixed a lot of UI nits with nhood page.
- Search now works for nhoods.
- 3D fences are slightly shorter than wall height to avoid seams in MSAA
mode.
* Save last_login when users login through AuthLoginController
I don't think this data is obtainable from anywhere in the database at this time. I think it can be pretty useful.
* [Server] Allow users to be banned from admin API
- Make the API able to ban users and disconnect them.
- Show the INV-150 banned message instead of INV-110 message when a banned user tries to login.
* Forgot ToolRunServer.cs
* [API] SMTP Mailer, misc. admin API features
- Send ingame emails and notify the client.
- Unban users.
- Kick users.
- SMTP Mailer added with optional configuration in config.json. For now it only sends emails asynchronously upon banning a user.
* [Hotfix] Fixes that are hot
- Disable texture compression in cases where it would break on OpenGL 3D
mode and would turn most textures black (monogame issue, may be
re-enabled in future)
- Directional lighting setting is now ignored on minimum lighting.
(fixes black sims, minimum lighting in 3d)
- Fixed key shortcuts for live mode activating when typing. You can now
click or right click on the lot to remove focus from a textbox, letting
you use these commands.
- Skill Gameplay can no longer be disabled for NPCs.
- Audio crashfix for simulation pause.
- Fix newspaper possibly crashing for systems with non-english or
modified date strings.
- Fix an assumption where some systems did not understand "./update.exe"
for launching the updater
* [PIFF] Spotlight patch
- Stops spotlight advertising itself as a table
- Not sure how the original game was fine with this (multiple objects do
the same thing). There must have been some tell to ignore it.
* [API] Began Work on Email Confirmation
- Made optional registration routes for email confirmation.
- Created HTML Mail template files for token sending and
- Created new database table `fso_email_confirm` to store tokens.
- Added new config.json configuration variables.
- Created Database objects for email confirmations.
* [API] Finished Email Confirmation for Registration
- Finished Email Confirmation. Now server admins can choose if they want
registration to require email confirmation by adding
`forceEmailConfirmation: true` in config.json
* [API] Implemented Password Reset (w/ Email Confirmation)
- Added password reset handling to API. Usable with or without SMTP enabled.
- When not using SMTP, it asks the user for their old password and if it is correct the password is changed.
- Created necessary Mail templates.
* [API] Added SQL to Manifest, removed forceEmailConfirmation.
If SMTP is enabled and configured, registration will force the use of emails without having to set `forceEmailConfirmation: true`.
* [API] Removed unnecessary routes
Forgot to remove these (they are included in the controllers).
- Dynamic Money Object Tuning
- Models a supply/demand market for all of the single money objects.
- Less popular objects pay out more. More popular objects pay out less.
- One "bonus" skill may be selected each day to have a higher payout.
- (note: all payout scales factor out the differing times for each
object type to complete)
- More information on the blog, and a future announcement.
- "Read City News" Interaction on Newspaper
- Shows recent/current news and upcoming events.
- Shows the bonus object, and the current payout percentage for each
object.
- Graphs the trend in object payouts over the last week.
- Skill Gameplay Disable
- Lets a lot owner disable skill decay, skill gain and money object
payouts on their lot at will. Useful for casual lot types.
- Can keep enabled for roommates only, or disable entirely.
- Skill gameplay is disabled for visitors by default for services,
entertainment and romance lots.
- Secure Trading
- Trade objects, money and lots... possibly all in one go!
- Revamped system to improve user awareness of possible scams.
- Supports extreme cases such as lot swapping.
- (needs further testing, that's why we beta)
- The snow covering Sunrise Crater has melted due to rain showers.
- Directional Lighting
- Adds an extra pass to the advanced lighting to store light direction.
- Objects and Sims now respect the light direction at their location.
- (in 2D mode, this currently only affects sims. more info coming soon)
- Uses an additional 4x4 pixel per tile half-float buffer
- DXT5 Texture Compression
- Prevents crashes on machines with low VRAM at the cost of visual
quality. (quarters sprite VRAM usage)
- Enabled by default for now, can be disabled from graphics options.
- Will eventually only be enabled by default on intel GPUs.
- Server performance improvements
- Objects that are for sale no longer simulate every tick (5x
performance improvement on extreme store lots, 2.5x increase on a
typical lot)
- ~25% improvement to single core performance on typical lots (and
reduced locking)
- Data service serializer cache
- Restaurant exceptions on round end are fixed.
- (now all you have to deal with is weird routing)
- Lot thumbnails smartly mask out ground colour when it is not sloped or
dead.
- Your lot won't have an ugly green diamond under it in the thumbnail.
(aka the ground)
- Fixed a bug with pets where they would consider their own interactions
more important than getting back in the cage.
- In 3D mode, the catalog thumbnail is now a rotating 3D model, rather
than the usually broken render seen before.
- Premultiplication is now the same between OpenGL and DirectX.
- Discord rich presence now uses lot category icons from Alex.
- Pets crates now show their breed as part of the name, where
applicable.
- Lot server now attempts to log simantics state when aborting a thread
in an infinite loop.
- Actually fix light permissions
- Many minor changes.
- Added transaction logging in preparation for dynamic tuning
- Added database-soured tuning system
- Added motive overfill (see blog)
- Added weather and particle system. Currently set to rotate levels of
snow based on time.
- The city's ground is now entirely snow!
- Many misc shader and graphics changes.
- Experimental Ultra Lighting mode with 3D object shadows. Enabled in 3D
mode.
- Object Wear: objects now accumulate at 1% per sim day
- Break & Repair: Objects over 50% wear now have a chance of breaking
that increases with the object's wear
- Price depreciation: Object sale price is now tied to its wear. As a
result of this change, existing objects will lower in value more than
usual, but newly bought objects should be fine.
- Light Management: Roommates can now change lights to stay on
permanently, and change light color.
- Dialog and TSO primitive descriptors for IDE.
- Add Shutdown task for automated shutdown.
- Cleanup and bugfix various areas.
You MUST run server.exe db-init after this version.
- Re-enabled and fixed returning non-roommate objects to their
inventories
- Implemented opening a property just to cycle database actions, eg.
roommate object sendback.
- Implemented Sim Retire. Even works when a lot is open - all of the
objects for the removed avatar will be deleted from the lot, just as if
they moved out.
- Implemented lot deletion. When the last avatar leaves a lot, its owner
becomes null. The next time this lot opens, it is deleted from db and
nfs. (opens instantly to close, though a purge task will be implemented
in the future to do this when some lots are missed)
- You can no longer buy a lot when you are the owner of a lot. You must
first move out of your existing lot.
- Lot move out has centralised functionality to stop weird data service
bugs.
- Center sim now considers terrain height
- Quitting to Select-A-Sim now attempts to re-obtain avatar data. If it
fails, you are sent back to the login screen.
- Fix objects being on sale after you buy them
- Object deletion is now deferred til after tick execution (fixes some
object crashes)
- Floor pattern 1 no longer sells for greater than 0
- Minor change to db structure. Make sure you run "server.exe db-init"
on servers.
* Hosts keep track of the servers in the pool. Each server and its role is recorded. This helps with service discovery.
* Tasks are async events that have run such as database pruning or top100 calculation. This helps admins know if a task completed or not.