Windows81 / Roblox-Freedom-Distribution

A fork of the "Rōblox Filtering Disabled" project which allows people to host their own instances of Rōblox for other people to play.
GNU General Public License v3.0
26 stars 10 forks source link

Enable flags in 2021E that are enabled in later versions of Rōblox #13

Closed idontyboi closed 1 month ago

idontyboi commented 1 month ago

I tried to run my game [a incremental game] in RFD and decided that my game has a minimum Roblox Client requirement of version 470 without sacrificing functionality. Even getting it to run on version 470 required flipping dozens, and dozens of FFlags to enable functionality that was in beta or in prototype stages at the time.

Would like to share those flags that enabling functionality in later versions of Roblox, for version 463:

Flags Functionality
DFFlagTheseAreSomeOfMyBestAttributes, FFlagAttributeSynchronization, FFlagStudioAttributesUI, DFFlagAttributeShortCircuit, DFFlagStricterAttributes Enables Attribute support (needed for almost every game post-mid 2021)
FFlagSimCanNotTriggerTouchEvents Enables the BasePart.CanTouch property
FFlagSimExpandPartPhysicsApi Likely adds ApplyAngularImpulse, ApplyImpulse and ApplyImpulseAtPosition.
FFlagGraphicsParticlesNewOrientations Enables ParticleEmitter.Orientation property
FFlagParallelLua Self explanatory.
FFlagTaskLibrary Enables the initial version of task that is for Parallel Lua.
FFlagAutomaticSizing2 Enables AutomaticSize in user interface elements.
FFlagEnableCloudsPhase1Beta, FFlagRenderClouds Enables the Clouds instance.
FFlagSimSolverUniversalConstraintEnabled Enables the UniversalConstraint instance.
FFlagTxRlEn Recommended for connection to modern Roblox textures
FFlagSupportMeshPartHeads Supports MeshPart Heads. Maybe some game will need this.
FFlagRaycastNestedFilterTables Support nested filter tables in RaycastParams.
FFlagSimTouchEventsUseCollisionGroups Enables the workspace.TouchesUseCollisionGroups property.
These FFlags will enable functionality but RFD needs to support the APIs: Flags Functionality
DFFlagAvatarEditorServiceEnabled2, DFFlagAESGetBatchItemDetailsEnabled Enables AvatarEditorService
DFFlagPromptBundlePurchaseEnabled Enables MarketplaceService:PromptBundlePurchase.
DFFlagTeleportAsyncEnabled Enables TeleportService:TeleportAsync.
These flags enable non-final functionality that likely isn't worth enabling since very few games will benefit without manual script changes: Flags Functionality
DFFlagDataStoresV2Enabled Enables an ALPHA version of the V2 datastore. RFD will need to be updated to support this.
DFFlagEnableMeshPartHeadsProperty Enables MeshPartHeads property in Workspace. It's different from MeshPartHeadsAndAccessories and is INCOMPATIBLE with the released version.

This will allow running for some more games. Anything newer requires hosting using Studio instead of RCC

Windows81 commented 1 month ago

I put your flags and set all of their values, except for the non-final ones, to true. This is the content of my ./Roblox/v463/Server/DevSettingsFile.json:

DevSettingsFile.json

Does thos reach your intended result?

Windows81 commented 1 month ago

I also put the same flags in the client's ClientSettings.json.

idontyboi commented 1 month ago

The latest version of RFD does not work due to missing game_container. So using older version and put in the DevSettingsFile.json manually.

Before (Attributes not working.): image

After (Attributes working.): image image

Would it be worth doing the same thing for v348 to increase game compatibility for that release? Maybe backporting functions with reverse engineering? task.wait and task.spawn alone will improve game compatibility such that most games throughout 2021L or really early 2022E will work in 2021E without any changes.

Windows81 commented 1 month ago

Sorry about the delay. I'm doing a lot of refactoring and have been busy with other things. I'm getting my master's in computer engineering right now and I'm barely out of week 5 of the first semester.

Windows81 commented 1 month ago

The game_container isn't working because I'm stòópid and released an unfinished buggy build.

idontyboi commented 1 month ago

Alright, using an older RFD build that works until then. Playing on RFD is actually more performant than playing on Studio, backporting my place files to 463 instead of 481 to play on it.

2 more flag suggestions to add in v463:

  1. Clouds do not appear after adding them due to FFlagRenderClouds still being false.
  2. FFlagWrapDeformer enables the WrapDeformer, WrapTarget and WrapLayer Instances. It's before they became a beta feature, but have compatible APIs.
Windows81 commented 1 month ago

I should have these changes released in RFD version 0.53.1.

idontyboi commented 1 month ago

Wow, those clouds look great RobloxScreenShot20240930_131858023

But I need to delete the database every time I start up the server or I get this:

Traceback (most recent call last):
  File "D:\Programs\RFD\Source\web_server\_logic.py", line 273, in __open_from_static
    return func(self)
           ^^^^^^^^^^
  File "D:\Programs\RFD\Source\web_server\endpoints\joinscript.py", line 131, in _
    self.send_json(perform_join(self) | {
                   ^^^^^^^^^^^^^^^^^^
  File "D:\Programs\RFD\Source\web_server\endpoints\joinscript.py", line 55, in perform_join
    (user_code, id_num, username) = init_player(
                                    ^^^^^^^^^^^^
  File "D:\Programs\RFD\Source\web_server\endpoints\joinscript.py", line 14, in init_player
    (user_code, id_num, username) = self.server.storage.players.add_player(
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: cannot unpack non-iterable NoneType object
Windows81 commented 1 month ago

Dum.

El lun, 30 sept 2024 a las 10:34, idontyboi @.***>) escribió:

Wow, those clouds look great RobloxScreenShot20240930_131858023.png (view on web) https://github.com/user-attachments/assets/3f28a094-7a00-4562-914c-32e43af56c92

But I need to delete the database every time I start up the server or I get this:

Traceback (most recent call last): File "D:\Programs\RFD\Source\web_server_logic.py", line 273, in __open_from_static return func(self) ^^^^^^^^^^ File "D:\Programs\RFD\Source\webserver\endpoints\joinscript.py", line 131, in self.send_json(perform_join(self) | { ^^^^^^^^^^^^^^^^^^ File "D:\Programs\RFD\Source\web_server\endpoints\joinscript.py", line 55, in perform_join (user_code, id_num, username) = init_player( ^^^^^^^^^^^^ File "D:\Programs\RFD\Source\web_server\endpoints\joinscript.py", line 14, in init_player (user_code, id_num, username) = self.server.storage.players.add_player( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ TypeError: cannot unpack non-iterable NoneType object

— Reply to this email directly, view it on GitHub https://github.com/Windows81/Roblox-Freedom-Distribution/issues/13#issuecomment-2382744225, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABLI4A65VRZ4CP5TZKTNYFLZZESMRAVCNFSM6AAAAABO2IHZWOVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDGOBSG42DIMRSGU . You are receiving this because you commented.Message ID: @.***>

Windows81 commented 1 month ago

I wasn't able to reproduce your errors. I'm using Python 3.12. Can you send me the GameConfig.toml or are you using what simply came from ./Examples?

idontyboi commented 1 month ago

I simply used what came from Examples "F3X server" using Python 3.12.6. Are the examples outdated or something? It looks like it is because there is also this every time I join

Traceback (most recent call last):
  File "D:\Programs\RFD\source\web_server\_logic.py", line 273, in __open_from_static
    return func(self)
           ^^^^^^^^^^
  File "D:\Programs\RFD\source\web_server\endpoints\avatar.py", line 73, in _
    avatar = avatar_data(id_num, self.game_config)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\Programs\RFD\source\web_server\endpoints\avatar.py", line 21, in __init__
    .retrieve_avatar_type(id_num, user_code)
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\Programs\RFD\source\config\types\callable.py", line 38, in __call__
    result = self._call(*args, *kwargs.values())
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: func.<locals>.f() takes 0 positional arguments but 2 were given
Windows81 commented 1 month ago

I fixed the config file last night and didn't commit to Github. Feel free to evaluate the file against the structure in the README.

El mar, 1 oct 2024 a las 10:09, idontyboi @.***>) escribió:

I simply used what came from Examples "F3X server" using Python 3.12.6. Are the examples outdated or something? It looks like it is because there is also this every time I join

Traceback (most recent call last): File "D:\Programs\RFD\source\web_server_logic.py", line 273, in open_from_static return func(self) ^^^^^^^^^^ File "D:\Programs\RFD\source\webserver\endpoints\avatar.py", line 73, in avatar = avatar_data(id_num, self.game_config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\Programs\RFD\source\web_server\endpoints\avatar.py", line 21, in init .retrieve_avatar_type(id_num, user_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\Programs\RFD\source\config\types\callable.py", line 38, in call__ result = self._call(args, kwargs.values()) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ TypeError: func..f() takes 0 positional arguments but 2 were given

— Reply to this email directly, view it on GitHub https://github.com/Windows81/Roblox-Freedom-Distribution/issues/13#issuecomment-2385375085, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABLI4A55YN6YDY6GHZ5KON3ZZJYEBAVCNFSM6AAAAABO2IHZWOVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDGOBVGM3TKMBYGU . You are receiving this because you commented.Message ID: @.***>

Windows81 commented 1 month ago

Just updated the config file now.

https://github.com/Windows81/Roblox-Freedom-Distribution/blob/353e84e8caf4d5fced498d04115cdeea53f20993/Examples/F3X%20Server/GameConfig.toml

idontyboi commented 1 month ago

Those two issues are fixed. I managed to make a RFD instance for a incremental game that I got a place file to, yoooo. Porting from 481 to 463 did not take that long. GetPivot and SetPivot can be replaced with GetBoundingBox and SetPrimaryPartCFrame.

image

Thank you for implementing these flags so it's actually possible to port this colossal modern game to RFD. Wouldn't trust any 2021E revival for hosting any of my place files. Turkey banned Roblox over here so it's the only way to play.

Final question: I get disconnected with Error 266 after 10 minutes of joining, the DevConsole says it's a "Security timeout" by RCCService. Is it possible for that to be patched? image

Windows81 commented 1 month ago

See if you get the same thing when running 2018M.

I think it might be Windows 7 working against you.

El mié, 2 oct 2024 a las 12:36, idontyboi @.***>) escribió:

Those two issues are fixed. I managed to make a RFD instance for a incremental game that I got a place file to, yoooo. Porting from 481 to 463 did not take that long. image.png (view on web) https://github.com/user-attachments/assets/babc4b93-c966-40a7-82c2-7840bd905cb6

Thank you for giving me the ability to actually play large games :D

Final question: I get disconnected with Error 266 after 10 minutes of joining, the DevConsole says it's a "Security timeout" by RCCService. Is it possible for that to be patched?

— Reply to this email directly, view it on GitHub https://github.com/Windows81/Roblox-Freedom-Distribution/issues/13#issuecomment-2388534286, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABLI4AY35WNIHFNJANUMGLLZZPSD5AVCNFSM6AAAAABO2IHZWOVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDGOBYGUZTIMRYGY . You are receiving this because you commented.Message ID: @.***>

Windows81 commented 1 month ago

I need to try it out myself, but no such problems occurred when I used previous versions of RFD.

El mié, 2 oct 2024 a las 19:29, VisualPlugin Rōblox @.***>) escribió:

See if you get the same thing when running 2018M.

I think it might be Windows 7 working against you.

El mié, 2 oct 2024 a las 12:36, idontyboi @.***>) escribió:

Those two issues are fixed. I managed to make a RFD instance for a incremental game that I got a place file to, yoooo. Porting from 481 to 463 did not take that long. image.png (view on web) https://github.com/user-attachments/assets/babc4b93-c966-40a7-82c2-7840bd905cb6

Thank you for giving me the ability to actually play large games :D

Final question: I get disconnected with Error 266 after 10 minutes of joining, the DevConsole says it's a "Security timeout" by RCCService. Is it possible for that to be patched?

— Reply to this email directly, view it on GitHub https://github.com/Windows81/Roblox-Freedom-Distribution/issues/13#issuecomment-2388534286, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABLI4AY35WNIHFNJANUMGLLZZPSD5AVCNFSM6AAAAABO2IHZWOVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDGOBYGUZTIMRYGY . You are receiving this because you commented.Message ID: @.***>

idontyboi commented 1 month ago

2018 Server RCC crashes on startup. I tried to move the RFD directory from D: to C:, even tried blank files. Analyzed the dump, hoping not much out of it. WinDbg analyzing actually yielded something. The result is that RCCService of 2018M uses the popcnt instruction which the poor Pentium E6500 does not have.

FAILED_INSTRUCTION_ADDRESS: 
RCCService+60738b
0123738b f30fb8c0        popcnt  eax,eax

2021E works just fine. I do not know why in HELL that happens. Analyzing it further, will return with results once I get them. Trying to patch RCCService to avoid this instruction, now testing it

Windows81 commented 1 month ago

Do you have a public IPv4 or v6 address?

I can try connecting to your 2021E server. Maybe it'll keep me in longer.

As for the popcnt issue: https://www.partitionwizard.com/partitionmagic/cpu-does-not-have-popcnt.html might help.

Windows81 commented 1 month ago

As for the Security Timeout problem: I patched out the jmp instructions that lead to them being loaded.

Can't guarantee that anything will work.

Server.zip

idontyboi commented 1 month ago

This actually works to fix the security timeout problem. Tested with a opposite patch that triggers it and I instantly got kicked. Tested further, waited 40 minutes and it did not kick me. Thanks for your help. I don't plan to do anything with 2018, I patch one instruction and several more came up that can't be patched out.

Windows81 commented 1 month ago

Are you on Matrix or Discord by any chance? I'd like to see what game you're doing.

My usernames are "VisualPlugin:matrix.org" and "21098765432109", respectively.

idontyboi commented 1 month ago

Figured out how to make 2018 work without POPCNT instructions. This is a very large patch and it's 100% possible that it might break something. But initial test seem to be fine (username is chosen completely randomly from a userID set, so the default user codes are working too): image

Fixed the patch

>rccservice.exe
0060738B:F3->E8
0060738C:0F->AA
0060738D:B8->C2
0060738E:C0->6A
0060738F:A8->00
00607390:01->90
0076576B:F3->E8
0076576C:0F->CA
0076576D:B8->DE
0076576E:C0->54
0076576F:A8->00
00765770:01->90
007657BB:F3->E8
007657BC:0F->7A
007657BD:B8->DE
007657BE:C0->54
007657BF:A8->00
007657C0:01->90
0076580B:F3->E8
0076580C:0F->2A
0076580D:B8->DE
0076580E:C0->54
0076580F:A8->00
00765810:01->90
0086B6E9:F3->E8
0086B6EA:0F->69
0086B6EB:B8->7F
0086B6EC:C0->44
0086B6ED:83->00
0086B6EE:E0->90
0086B6EF:01->90
0086B729:F3->E8
0086B72A:0F->32
0086B72B:B8->7F
0086B72C:D1->44
0086B72D:83->00
0086B72E:E2->90
0086B72F:01->90
0086B759:F3->E8
0086B75A:0F->F9
0086B75B:B8->7E
0086B75C:C0->44
0086B75D:83->00
0086B75E:E0->90
0086B75F:01->90
0086B789:F3->E8
0086B78A:0F->C9
0086B78B:B8->7E
0086B78C:C0->44
0086B78D:83->00
0086B78E:E0->90
0086B78F:01->90
008B52EE:F3->E8
008B52EF:0F->64
008B52F0:B8->E3
008B52F1:C0->3F
008B52F2:24->00
008B52F3:01->90
008B5300:F3->81
008B5301:0F->CA
008B5302:B8->00
008B5303:C0->04
008B5304:81->00
008B5305:CA->00
008B5306:00->E8
008B5307:04->4C
008B5308:00->E3
008B5309:00->3F
008B530A:24->00
008B530B:01->90
008B532A:F3->E8
008B532B:0F->0B
008B532C:B8->E3
008B532D:C0->3F
008B532E:A8->00
008B532F:01->90
00CB363A:00->52
00CB363B:00->51
00CB363C:00->53
00CB363D:00->89
00CB363E:00->C2
00CB363F:00->31
00CB3640:00->C0
00CB3641:00->90
00CB3642:00->90
00CB3643:00->85
00CB3644:00->D2
00CB3645:00->74
00CB3646:00->08
00CB3647:00->89
00CB3648:00->D3
00CB3649:00->4B
00CB364A:00->21
00CB364B:00->DA
00CB364C:00->40
00CB364D:00->EB
00CB364E:00->F4
00CB364F:00->90
00CB3650:00->90
00CB3651:00->5B
00CB3652:00->59
00CB3653:00->5A
00CB3654:00->A8
00CB3655:00->01
00CB3656:00->C3
00CB3657:00->E8
00CB3658:00->DE
00CB3659:00->FF
00CB365A:00->FF
00CB365B:00->FF
00CB365C:00->83
00CB365D:00->E0
00CB365E:00->01
00CB365F:00->C3
00CB3660:00->51
00CB3661:00->50
00CB3662:00->89
00CB3663:00->C8
00CB3664:00->E8
00CB3665:00->D1
00CB3666:00->FF
00CB3667:00->FF
00CB3668:00->FF
00CB3669:00->89
00CB366A:00->C2
00CB366B:00->58
00CB366C:00->59
00CB366D:00->83
00CB366E:00->E2
00CB366F:00->01
00CB3670:00->C3
00CB3671:00->90

Multiplayer works, but jumping on the bricks has a chance to completely fling them... does that happen in 2018M standard?

Windows81 commented 1 month ago

I won't add that just yet. Let me know if anything else happens.