From 0e913076c216833c0009817da552ec6470058d83 Mon Sep 17 00:00:00 2001 From: niklascfw Date: Fri, 6 Mar 2026 22:14:59 +0100 Subject: [PATCH] Moved to extracting Patches after Install/Update with custom Homebrew app --- .../oc/SaltySD/plugins/FPSLocker/patches.zip | Bin 0 -> 719864 bytes .../0100001019F6E000/D60A7F43A98034BE.yaml | 27 -- .../0100001019F6E000/E13F632FC2A66EEB.yaml | 27 -- .../0100001019F6E000/F80EEC237D0963EE.yaml | 27 -- .../010000400F582000/02F2E5C8CBF5A92F.yaml | 12 - .../010000600CD54000/78885A1CA987C04C.yaml | 16 - .../010000A017F96000/1146A5AA87A93969.yaml | 27 -- .../010000A017F96000/A21FFE97D09DCE4E.yaml | 25 -- .../010000A017F96000/EEE598377C0A5966.yaml | 27 -- .../010000B01A452000/2E7487767D0CA0EE.yaml | 33 -- .../010000B01A452000/2F33996FD9C81253.yaml | 33 -- .../010000B01A452000/7C724F497564C027.yaml | 33 -- .../010000B01A452000/95761555A341B190.yaml | 33 -- .../010000F012936000/1570FE23108B93C4.yaml | 10 - .../0100011005D92000/A3A998AF3252D110.yaml | 88 ----- .../0100040016EE2000/331E3DFBDF650226.yaml | 27 -- .../01000400204FE000/2D22A87AE49C75AA.yaml | 75 ---- .../01000400204FE000/A9DEA3043D6E0060.yaml | 75 ---- .../0100041018810000/B8BE1CFAE53CAEBE.yaml | 10 - .../0100047013378000/7E65E5BC3564BE46.yaml | 20 - .../010005001A8CA000/F87BEAF2C5CE13E3.yaml | 28 -- .../010007400FF24000/090B1F7F7AF35D00.yaml | 26 -- .../010007B010FCC000/4EEA2970DF38ECE1.yaml | 10 - .../010008301AA96000/2A5244CCB17B44AC.yaml | 36 -- .../010008301AA96000/5BCA5C20C8F8A9B4.yaml | 36 -- .../010008301AA96000/612E3D607D2A13BB.yaml | 28 -- .../010008301AA96000/88CC45A195E0BDA8.yaml | 28 -- .../010008501186E000/30B812AB1BA3D447.yaml | 46 --- .../010008E01E32A000/823FE359B4A99A4D.yaml | 30 -- .../010008E01E32A000/AD4CBC4878008E1E.yaml | 30 -- .../010008E01E32A000/BBA39C65C1CC6463.yaml | 30 -- .../0100092021C80000/2A4A71E176DAA356.yaml | 11 - .../010009D018A06000/012A8C2C413E79B8.yaml | 27 -- .../010009D018A06000/26C1E658E9B5B612.yaml | 27 -- .../010009D018A06000/2EEE840599DC7021.yaml | 25 -- .../010009D018A06000/33614E4F6B3267B3.yaml | 25 -- .../010009D018A06000/3889588A60E1F399.yaml | 27 -- .../010009D018A06000/3AAA28C9CB8367B9.yaml | 27 -- .../010009D018A06000/46094C03E2EC668B.yaml | 27 -- .../010009D018A06000/520620FBA0B196A3.yaml | 27 -- .../010009D018A06000/C2F2C4B700B30598.yaml | 25 -- .../010009D018A06000/CA61076D0CE6670D.yaml | 25 -- .../01000A10041EA000/0C0CAC3FCF0F0BEB.yaml | 18 - .../01000A10041EA000/4F7995092FAA5DC0.yaml | 16 - .../01000AA013A5E000/B26DE1669B729335.yaml | 26 -- .../01000AB01F9C0000/2D2065AEBF94F9AE.yaml | 24 -- .../01000AB01F9C0000/657F40EEBD955F31.yaml | 25 -- .../01000AD01F94A000/505069EBC0B82A6F.yaml | 25 -- .../01000AD01F94A000/52DA46C0166A8643.yaml | 25 -- .../01000AD01F94A000/65A9705A4BB35AA2.yaml | 27 -- .../01000AD01F94A000/A31FE9B8AF1156D4.yaml | 27 -- .../01000B202041A000/725731C74E4CA6A9.yaml | 11 - .../01000BB00E9D2000/4BC4A8A814FD46A4.yaml | 25 -- .../01000BD00CE64000/E417100FFEEFD1DE.yaml | 21 -- .../01000BF0152FA000/12024D08CCFD25EB.yaml | 10 - .../01000C40236A8000/5C2942CCDF0AA6EA.yaml | 16 - .../01000CE002072000/346959B36CD9F14D.yaml | 14 - .../01000D60248D6000/196339C0BADE07C3.yaml | 25 -- .../01000DA017CF0000/6C46135714ABB870.yaml | 18 - .../01000DF00EBBA000/5D3FE9C0FAA44B4C.yaml | 10 - .../01000DF01234A000/5EFAB20F5C1F0F68.yaml | 25 -- .../01000E10133B2000/5EFAB20F5C1F0F68.yaml | 25 -- .../01000E200DC58000/9E6B0D0023F9DB3B.yaml | 15 - .../01000F801EC5A000/33E7D684796F363B.yaml | 19 - .../01000F9020CD4000/6ACDAEE7DDC5E503.yaml | 11 - .../01000F9020CD4000/8593E6008F5A883D.yaml | 11 - .../01000F9020CD4000/F140F141FDC4C331.yaml | 11 - .../010010100FF14000/12F93E2DBBCFA54F.yaml | 10 - .../01001040220E8000/336E56D09501A52E.yaml | 19 - .../010010901AFB0000/3D3FEFC161B49AB8.yaml | 10 - .../010010A01BBF4000/47A022F858BA09B1.yaml | 11 - .../010010B00DDA2000/8A39E660F956BB00.yaml | 21 -- .../010010F01418E000/49CF6B0B0A62F9E2.yaml | 37 -- .../0100111004460000/6D9EA94F8AAC00A8.yaml | 39 -- .../0100118009C68000/6401F57C7D6D3728.yaml | 10 - .../010011C00E636000/FAD1AF4EDC6DB267.yaml | 31 -- .../01001270012B6000/6D9EA94F8AAC00A8.yaml | 41 -- .../01001300232F4000/6070FC72448EE560.yaml | 19 - .../0100134025F8E000/81C9C793B5370E9B.yaml | 19 - .../0100149019460000/B9E42653FB44EF2B.yaml | 21 -- .../0100154019A7C000/6D9F6C7B79F5197F.yaml | 21 -- .../010015800B178000/EB8A679B5DDD0060.yaml | 10 - .../010015F018C3C000/9806FB67CE24E904.yaml | 12 - .../010016A00AEC0000/5C9CCD358BE85FC9.yaml | 83 ---- .../010016C00F474000/4BC4A8A814FD46A4.yaml | 25 -- .../010017A0128C4000/3D4E3A9252AA6C63.yaml | 23 -- .../0100182014022000/56EEFA704373BDB3.yaml | 21 -- .../0100182014022000/9151E53EE514B03A.yaml | 27 -- .../010018601E9E0000/31A37D73E22F1059.yaml | 31 -- .../01001890167FE000/512FB8C2D12C4F36.yaml | 27 -- .../01001890167FE000/5F7A2866D8E20BBA.yaml | 21 -- .../010018C01B106000/63B72CD5F2A90020.yaml | 21 -- .../010019B00BE72000/03B058B1F6BE7195.yaml | 13 - .../010019C00E9CC000/4BC4A8A814FD46A4.yaml | 25 -- .../010019D01D736000/3BA6C7665F67A711.yaml | 58 --- .../01001A0011798000/66B2DEA98B5CDF65.yaml | 12 - .../01001A700C832000/97FC79E063E26C9B.yaml | 11 - .../01001A9018560000/DD425ECC07C305DF.yaml | 27 -- .../01001AD01ABE8000/E196E389FD9E0364.yaml | 19 - .../01001B0019F9E000/9E365FE9EC3A52D3.yaml | 10 - .../01001BE01908C000/C95F34910CE1CDC0.yaml | 32 -- .../01001BE01908C000/E1F81DC590FDE0B5.yaml | 27 -- .../01001BE01908C000/FE78C7B94C4E791A.yaml | 25 -- .../01001BE01E620000/D2EADA78AA71283E.yaml | 25 -- .../01001C400E9D8000/737E56D43D2C0B38.yaml | 24 -- .../01001C700873E000/C0F144F5139F542E.yaml | 11 - .../01001CC01B2D4000/0DE3020411F4232B.yaml | 27 -- .../01001CC01B2D4000/26AB1CB54DD4508D.yaml | 25 -- .../01001CC01B2D4000/504EBEAB62E802AD.yaml | 27 -- .../01001CC01B2D4000/8D4FD57DB7D63120.yaml | 25 -- .../01001CC01B2D4000/A45BCB8A63C50DC8.yaml | 27 -- .../01001CC01B2D4000/A5DA93E6537350D8.yaml | 25 -- .../01001CC01B2D4000/C606C7DC1C0EC88F.yaml | 25 -- .../01001CF0190C2000/4C6727375D877B90.yaml | 21 -- .../01001D00186E8000/6133D5CC14F51B7A.yaml | 27 -- .../01001D00186E8000/C26E93197DEB4004.yaml | 27 -- .../01001D00186E8000/E2AFE5A73F5C0803.yaml | 27 -- .../01001E20203DC000/6D05923E7005E182.yaml | 25 -- .../01001E3017A10000/17F37A56B17DD9CC.yaml | 15 - .../01001E400FD58000/CCEE412E679A2143.yaml | 10 - .../01001E9023920000/169AD641E042A8B4.yaml | 43 --- .../01001E9023920000/4FC3CB13E1D3292E.yaml | 43 --- .../01001E9023920000/6656BA1B5B8AC30A.yaml | 43 --- .../01001E9023920000/8CFF66758D7BD507.yaml | 43 --- .../01001F100E8AE000/EB57CF3434044523.yaml | 26 -- .../01001F3018880000/DF556AF2E30073C0.yaml | 21 -- .../0100207021C3C000/2C2D599E55912C6C.yaml | 17 - .../0100207023882000/7DE262BD1732DBFB.yaml | 19 - .../010020B016EF4000/7E25622D50D562BF.yaml | 33 -- .../010020F014DBE000/2B37ED2A971948F3.yaml | 92 ----- .../010021401ADCC000/A1E1EFBA68B846A9.yaml | 19 - .../010021601C496000/7A450848CFDEC18E.yaml | 53 --- .../0100217014266000/2F81A2EC9B298B37.yaml | 25 -- .../010021801DD26000/B2D4462B71536EC6.yaml | 51 --- .../010022A02008C000/F678FD2BB197125B.yaml | 25 -- .../010023001969A000/D40B81867A121EB0.yaml | 27 -- .../010023001969A000/F327FFD8C2E85895.yaml | 27 -- .../010024600C794000/3776E7BBC7C01E43.yaml | 12 - .../010024700901A000/9CDFB0CD24CAE030.yaml | 26 -- .../0100255016498000/12024D08CCFD25EB.yaml | 10 - .../010025A01CD86000/D2A5A1FC6EEADF31.yaml | 27 -- .../010025C0145D4000/0CC82881FF112C6D.yaml | 25 -- .../010025C0145D4000/0FCB7D1E6E4D1836.yaml | 27 -- .../010025C0145D4000/0FF5CF27929E07F9.yaml | 27 -- .../010025C0145D4000/6267E76E9540F2ED.yaml | 27 -- .../010025C0145D4000/E82F8A34CCC706E7.yaml | 27 -- .../010025C0145D4000/EA4853C29547CBBC.yaml | 27 -- .../010025C0145D4000/F898CCE9C3A291AF.yaml | 25 -- .../01002620102C6000/7D1714279435589C.yaml | 12 - .../010026E00CDF8000/A953B35A45BEA33D.yaml | 19 - .../010026F013B3A000/5EAF1BB0E2B89AF4.yaml | 25 -- .../0100272013014000/D1D421137AAE1A5E.yaml | 18 - .../010027400CDC6000/4979B200D53BB282.yaml | 22 -- .../0100276019E96000/EC983B9153629AC8.yaml | 27 -- .../010027B01E32C000/227837B490A51033.yaml | 30 -- .../010027B01E32C000/38171F8A5687B940.yaml | 30 -- .../010027B01E32C000/C7E4E6F4167C8E3A.yaml | 30 -- .../0100285016010000/14C878ECCA9D7CB5.yaml | 38 -- .../010028901FF00000/EB58D577539E9151.yaml | 26 -- .../010028D005A3C000/0C0CAC3FCF0F0BEB.yaml | 18 - .../010028D005A3C000/4F7995092FAA5DC0.yaml | 16 - .../010028D00BA1A000/85E49C169A8B988A.yaml | 21 -- .../010029B0118E8000/799D1061182C1302.yaml | 44 --- .../010029F01BA3E000/F8EA898027152437.yaml | 27 -- .../01002A4021B86000/99519C9259122E4F.yaml | 19 - .../01002A4021B86000/E5D70A1E288F74A7.yaml | 19 - .../01002A501869E000/BFA92380757EF97D.yaml | 21 -- .../01002AF011D14000/D1B29E1ABDCD955E.yaml | 36 -- .../01002B00111A2000/C3CF52BF2B05D731.yaml | 21 -- .../01002B7013440000/A19E113723E5C32E.yaml | 21 -- .../01002B9012E28000/6C3F685C62070885.yaml | 23 -- .../01002BD00F626000/4C277E67AB50D547.yaml | 11 - .../01002BE016054000/751420FADE402804.yaml | 27 -- .../01002C0015644000/3A3C781930CB8201.yaml | 33 -- .../01002C101C1AA000/0542802E014A7312.yaml | 27 -- .../01002C101C1AA000/08C88691FFA5407C.yaml | 27 -- .../01002C101C1AA000/0F7616E6F5EE08CE.yaml | 20 - .../01002C101C1AA000/225B47BDEC7C2D4E.yaml | 27 -- .../01002C101C1AA000/3DCE80782561A0CA.yaml | 27 -- .../01002C101C1AA000/471546458FD9E43D.yaml | 20 - .../01002C101C1AA000/8D76B30C877FED66.yaml | 27 -- .../01002C101C1AA000/9ACB108D8DC59245.yaml | 20 - .../01002C101C1AA000/A995EDA18F71EA37.yaml | 27 -- .../01002C101C1AA000/E1426CF1C30E7CC7.yaml | 27 -- .../01002C101C1AA000/E28441A322FE29BF.yaml | 27 -- .../01002C101C1AA000/ED20E42E41B58D88.yaml | 27 -- .../01002C400E526000/1FF442C5ABEB0459.yaml | 21 -- .../01002C9022770000/2AD8CC7892EBF9FA.yaml | 43 --- .../01002C9022770000/2B18130BD191CAC5.yaml | 43 --- .../01002C9022770000/E5F70FFCBD0DD378.yaml | 43 --- .../01002D901CDB6000/A42569DBA6D326B5.yaml | 10 - .../01002DB00DDFE000/4CCD2F6D331DD104.yaml | 42 --- .../01002E800E9D4000/B151A224A429F9A7.yaml | 25 -- .../01002ED00B01C000/31F61EC3A4FEFDF7.yaml | 19 - .../01002FC012548000/2E7487767D0CA0EE.yaml | 33 -- .../01002FC012548000/2F33996FD9C81253.yaml | 33 -- .../01002FC012548000/7C724F497564C027.yaml | 33 -- .../01002FC012548000/95761555A341B190.yaml | 33 -- .../01002FD01A24C000/8F72E0D61C4BA0B1.yaml | 12 - .../0100300012F2A000/320A17744AEFD67F.yaml | 12 - .../0100309016E7A000/14C878ECCA9D7CB5.yaml | 38 -- .../0100321017CC0000/D147CAEF2BC74574.yaml | 23 -- .../010032B01C6F2000/FEEA420683820CD5.yaml | 27 -- .../010032C00AC58000/2CDB9B9D70010E88.yaml | 16 - .../010032F01F7CC000/DE7B50B9FEF89856.yaml | 25 -- .../010032F01F7CC000/F7EB23F0D8E5A933.yaml | 25 -- .../01003310159F8000/8C7A99CBD1AEA208.yaml | 21 -- .../010033501FF38000/B7F344920B6D140E.yaml | 21 -- .../010033801EF3A000/503ACC27B3F97603.yaml | 10 - .../010035F022078000/7B53433FA04477FC.yaml | 31 -- .../010035F022078000/E363F4466EE5E8BE.yaml | 31 -- .../0100367016DF0000/38896FEC1B4ADB1C.yaml | 23 -- .../010036E00FB20000/1DA748FC9499882F.yaml | 13 - .../010036E019EA2000/6895FE7D0D1B8E2F.yaml | 22 -- .../010036F0201D4000/42A0B64E45AD9ABA.yaml | 25 -- .../010037401A374000/3C3A2E68DBD1BBEC.yaml | 25 -- .../010037A01F96C000/5B863A6EFCE084B0.yaml | 12 - .../010037C022390000/96B7F9BD973D298E.yaml | 18 - .../01003820186A2000/A5EC643318B3A543.yaml | 10 - .../010038900DFE0000/E9578A470B175851.yaml | 21 -- .../010038D0133C2000/019FBFE7738EA314.yaml | 19 - .../0100393016D7E000/DC33AFEE8682A86C.yaml | 25 -- .../010039400E8D6000/D27FD8A515077F34.yaml | 25 -- .../010039501F11C000/B174F363C2823CBE.yaml | 11 - .../01003980174BC000/217C9ECF258C0312.yaml | 31 -- .../01003990220BE000/820EF220126FF10A.yaml | 10 - .../01003990220BE000/C17F9C48EEFAB9DF.yaml | 12 - .../01003990220BE000/FE67FB035271B5E4.yaml | 12 - .../010039A00BC64000/77009C1234634A4E.yaml | 40 -- .../010039B015CB6000/39DC785D9073C22B.yaml | 48 --- .../01003A70209AE000/2CE51030AF9800A5.yaml | 25 -- .../01003AE01AA76000/6C46135714ABB870.yaml | 18 - .../01003AE01AA76000/85D00BDAADD369E6.yaml | 19 - .../01003AE01AA76000/8D6606B544CBCBC8.yaml | 19 - .../01003AF0200B0000/5F96AEDEA20AE78F.yaml | 27 -- .../01003AF0200B0000/742CA53262A767AE.yaml | 25 -- .../01003AF0200B0000/7F731AAE7DDCAF66.yaml | 27 -- .../01003AF0200B0000/E43BBBBFACE60867.yaml | 27 -- .../01003AF0200B0000/F678FD2BB197125B.yaml | 25 -- .../01003B90136DA000/1F936E043FB8C349.yaml | 12 - .../01003BA01575E000/EF2694EA89E001DB.yaml | 25 -- .../01003BD00CAAE000/8B40EBBA7244C94A.yaml | 28 -- .../01003BF01E940000/5346BDF1EEC2BA4C.yaml | 25 -- .../01003CC00D0BE000/F6FB99E54347E740.yaml | 47 --- .../01003CC01BBA0000/D64B8283BD5CEA63.yaml | 74 ---- .../01003CD01299E000/4232D493269475B2.yaml | 12 - .../01003D100E9C6000/4BC4A8A814FD46A4.yaml | 25 -- .../01003E3014AFE000/69CACEEC5F01C41B.yaml | 10 - .../01003E601E324000/4F41309B39EEBE5E.yaml | 27 -- .../01003E601E324000/6F49452BD0B343B1.yaml | 27 -- .../01003E601E324000/A6BD61CFB142E663.yaml | 25 -- .../01003E800A102000/283095029A5AB467.yaml | 27 -- .../01003EB01C2F0000/0D28F064B3A5D030.yaml | 17 - .../01003EB01C2F0000/1EC3E6373D7DA9A6.yaml | 17 - .../01003EB01C2F0000/4183AB952B599826.yaml | 17 - .../01003EB01C2F0000/452F9C150D1D17B7.yaml | 17 - .../01003EB01C2F0000/8286C091117CAECF.yaml | 17 - .../01003EB01C2F0000/D152798E91A87AE7.yaml | 12 - .../01003EB01C2F0000/F1E096F78DFB8263.yaml | 17 - .../01003EB01C2F0000/FF46A0C56BAD0A32.yaml | 17 - .../01003FB00C5A8000/DCDFA5A4AD9A175D.yaml | 102 ----- .../01003FB012926000/D27FD8A515077F34.yaml | 25 -- .../010040401D564000/1053EA8AD2A50F15.yaml | 25 -- .../010040601A9B8000/1E965D5B338E3D05.yaml | 10 - .../010040601A9B8000/9ACE779510EC93C9.yaml | 10 - .../010040A0209DC000/A4A3B5A20B03B2A7.yaml | 53 --- .../010040C01D248000/43D0D0D68A22E370.yaml | 13 - .../0100416004C00000/01ACE43E724259C3.yaml | 36 -- .../0100416004C00000/2847991952B3D7AB.yaml | 34 -- .../0100422020BC4000/A179DD4F4BFB3A04.yaml | 36 -- .../0100422020BC4000/C2D14E1A5A788D6A.yaml | 37 -- .../010042A013DB8000/8683E654CCD68852.yaml | 25 -- .../010042D00D900000/EC593A5F9552100A.yaml | 43 --- .../0100438012EC8000/1A0EAEC3AE90B018.yaml | 21 -- .../010044500CF8E000/9B3DDF2FB9100E51.yaml | 21 -- .../010044700DEB0001/3DEF0E36AA8C6592.yaml | 22 -- .../010044B01E786000/2CF926BBD5D1AB4D.yaml | 21 -- .../010044D015F4A000/37C3FAEFC9A4C374.yaml | 56 --- .../0100453019AA8000/2A720C7CE5C84905.yaml | 350 ----------------- .../0100453019AA8000/3F2425864CF22684.yaml | 356 ------------------ .../010045301B86C000/1933FBAFE977FA75.yaml | 27 -- .../010045301B86C000/791D79EBD7A0115E.yaml | 27 -- .../010045301B86C000/D7A32C718E9D6363.yaml | 27 -- .../0100459009A2A000/ACF717E72EA920C2.yaml | 28 -- .../010046000EE40000/8F6B002FEB5D0F8E.yaml | 21 -- .../010047000E9AA000/01EB7A6DE827BFD9.yaml | 35 -- .../010047401EA8E000/928AF9461536F5E3.yaml | 25 -- .../0100479008552000/A03FD278F67CDFD2.yaml | 19 - .../010047E01EA24000/6D05923E7005E182.yaml | 25 -- .../010047E01EA24000/728D92CB9E54CE7A.yaml | 27 -- .../010047E01EA24000/C0D9B410A09A4ADD.yaml | 27 -- .../01004800197F0000/F4685ACC91FEDB12.yaml | 21 -- .../010049B017774000/2F81A2EC9B298B37.yaml | 25 -- .../01004A001E32E000/0214CA2211DE8313.yaml | 30 -- .../01004A001E32E000/8E8BFFE66292CFF1.yaml | 30 -- .../01004A001E32E000/F7D1E815E44D0A56.yaml | 30 -- .../01004AB00A260000/DF3766A2BB651A3E.yaml | 61 --- .../01004AD014BF0000/D7A05D106FF46FC0.yaml | 15 - .../01004B100A5CC000/4E7978E35F9D7490.yaml | 16 - .../01004B2016E7C000/14C878ECCA9D7CB5.yaml | 38 -- .../01004BA017CD6000/4B86FC4FDF7B1A70.yaml | 27 -- .../01004BA017CD6000/5BE02E1373BDE2CC.yaml | 27 -- .../01004BC0166CC000/44D207EA6428E3F1.yaml | 21 -- .../01004D20219E0000/4583D73E326FFE7B.yaml | 43 --- .../01004D20219E0000/555E8872455F107E.yaml | 43 --- .../01004D20219E0000/6DE3725465A43249.yaml | 43 --- .../01004D300C5AE000/A6CE40DC3AEDB1BE.yaml | 21 -- .../01004D300C5AE000/D9BA7DB72FFAFECD.yaml | 19 - .../01004D901AFDA000/D334BC060F1FA3AE.yaml | 25 -- .../01004DC00D936000/31CDAD67EA25CC16.yaml | 12 - .../01004F401BEBE000/DF2D64FB63F1BD00.yaml | 27 -- .../01004FF021942000/4EAC4BED64458C8C.yaml | 13 - .../01004FF021942000/5D738626CE19A40F.yaml | 13 - .../01004FF021942000/DF48D885EB914AC7.yaml | 13 - .../01004FF021942000/EBFF3A6C8EA30490.yaml | 13 - .../0100500012AB4000/118AA7B71E824B3B.yaml | 27 -- .../010050F00BC1A000/6BEC9B23B09DF46C.yaml | 56 --- .../010050F01DF9C000/11D6D6158B566A74.yaml | 38 -- .../010050F01DF9C000/25A4C89527E7A6E6.yaml | 38 -- .../010050F01DF9C000/456F89F80D657095.yaml | 37 -- .../010050F01DF9C000/5F765D2CC4CDEF1C.yaml | 36 -- .../010050F01DF9C000/7C8FE1FD610E1F1F.yaml | 38 -- .../010050F01DF9C000/C370209AECC8D2FB.yaml | 37 -- .../010050F01DF9C000/C59C89CCDF382602.yaml | 38 -- .../010051B0131F0000/E0E9D0429A2458E1.yaml | 21 -- .../010051C0134F8000/20503FA77FA416B7.yaml | 34 -- .../010051C0134F8000/389E38618E93A5E0.yaml | 34 -- .../010051C0134F8000/72F6F8B54276185C.yaml | 34 -- .../010051C0134F8000/BC99D4D0A9474360.yaml | 37 -- .../0100521017B2A000/249EAB9BF046C5EA.yaml | 21 -- .../010052701BB0A000/8322528255D2CC63.yaml | 55 --- .../01005270232F2000/51198224D1A8F16C.yaml | 19 - .../01005270232F2000/FEABC8D141EECCA5.yaml | 19 - .../0100535014D76000/8CCC67A5A75CB8E5.yaml | 10 - .../0100538017BAC000/A2DDF741D0E37D15.yaml | 19 - .../010053D014C44000/086367BD573D1899.yaml | 10 - .../010053E002EA2000/76EC789B99A25BA5.yaml | 12 - .../01005420101DA000/134EC3D8BE75126F.yaml | 53 --- .../0100544020572000/153DB27728D41305.yaml | 35 -- .../0100544020572000/1CEA83A1E6684665.yaml | 31 -- .../0100544020572000/29F67D61B0AD1500.yaml | 35 -- .../0100544020572000/3B2CB1C8865E7B1E.yaml | 35 -- .../0100544020572000/540477886936CDC5.yaml | 30 -- .../0100544020572000/5E43788065113530.yaml | 12 - .../0100544020572000/9B9CCD97EB6EF789.yaml | 30 -- .../0100544020572000/A947DDE7826A3562.yaml | 12 - .../010054A0085CA000/325E49E94A030B7E.yaml | 43 --- .../010054A020574000/6CB3E54C5F648410.yaml | 31 -- .../010054A020574000/EF85880A244D33EC.yaml | 30 -- .../010054A020574000/FB3497202E5934FB.yaml | 30 -- .../010054E01D878000/0181E008CA25A289.yaml | 12 - .../010054E01D878000/2213810D247A7293.yaml | 12 - .../010054E01D878000/25636E9F2595CFFD.yaml | 12 - .../010054E01D878000/27BDC0166D5D5A1B.yaml | 12 - .../010054E01D878000/39296BB1FD4A3F20.yaml | 13 - .../010054E01D878000/641E15F899C4A057.yaml | 12 - .../010054E01D878000/668645A62391CDDE.yaml | 12 - .../010054E01D878000/7E587D3ADCFD66BC.yaml | 12 - .../010054E01D878000/8AB0BBEBB5F628E6.yaml | 12 - .../010054E01D878000/A2932DA7A96EC054.yaml | 12 - .../010054E01D878000/AF76EBEDE6A89F89.yaml | 12 - .../010054E01D878000/B8264CDBC1CBFFCF.yaml | 12 - .../010054E01D878000/C3A7D284DA741DBC.yaml | 12 - .../010054E01D878000/C953D6F477604662.yaml | 12 - .../010054E01D878000/D404E90111F98D16.yaml | 12 - .../010054E01D878000/DF4B53A8F7EA6FB6.yaml | 12 - .../010054E01D878000/E60B4F857609BD49.yaml | 12 - .../010054E01D878000/EB8D70AB59D8A4C2.yaml | 12 - .../010054E01D878000/EE92CAF016873D08.yaml | 12 - .../010054E01D878000/F51888C0188BFA18.yaml | 12 - .../010054E01D878000/F57C74294E14BDCC.yaml | 12 - .../010054E01D878000/FF365FA7E744CDDA.yaml | 12 - .../010055200E87E000/9F1B5FB4C53E321F.yaml | 32 -- .../0100559011740000/D2FD97779381FB9A.yaml | 14 - .../010055B01AA08000/4CBD150A248DA39C.yaml | 21 -- .../010055B01AA08000/E196E389FD9E0364.yaml | 21 -- .../010055D009F78000/89048449BA238C8C.yaml | 32 -- .../010055D01C8D4000/444303671674DD91.yaml | 27 -- .../010055E00CA68000/B70F06EAC87FA2AF.yaml | 40 -- .../0100567011972000/97313EA9E2BD0EC1.yaml | 19 - .../010056B015FE8000/E43525F22282A477.yaml | 54 --- .../010056E00853A000/746F0D697EEEE2DD.yaml | 11 - .../010056F00C7B4000/B5B9C7BB8D9716F6.yaml | 27 -- .../010057D006492000/67DACC049CEEE858.yaml | 15 - .../010057E00AC56000/2D5B93C856CDF009.yaml | 16 - .../0100582010AE0000/B3967105033ACC08.yaml | 120 ------ .../010058301BB98000/4779B3A56B655418.yaml | 75 ---- .../010058301BB98000/CAEAFFC2CD152394.yaml | 74 ---- .../010058600E530000/BD5F1ED30FDBA245.yaml | 36 -- .../010058C01F3EE000/301E4A1FB0BA1575.yaml | 25 -- .../010058C01F3EE000/A15393F630A9767F.yaml | 25 -- .../010058F01DF8C000/1670D126B5E8EE66.yaml | 25 -- .../010058F01DF8C000/4CD22960CFB56AB4.yaml | 25 -- .../010058F01DF8C000/BDB53001D5CAD0AE.yaml | 27 -- .../010058F01DF8C000/E6B427227FED8411.yaml | 27 -- .../010058F01DF8C000/F0787926C4CFF8F1.yaml | 27 -- .../010058F01DF8C000/F5E599C889DF733A.yaml | 27 -- .../0100592005164000/83A6B710A3F3F4F9.yaml | 19 - .../01005A2014362000/F00EFE6846627B4A.yaml | 10 - .../01005AB01DAD0000/50F47EC19A33A73E.yaml | 33 -- .../01005AE0209A8000/293D73083149473E.yaml | 75 ---- .../01005AE0209A8000/2D22A87AE49C75AA.yaml | 75 ---- .../01005AE0209A8000/36B692C0FA9F6F46.yaml | 75 ---- .../01005AE0209A8000/50C9028B61A0BB7F.yaml | 75 ---- .../01005AE0209A8000/71C5F3CB333F1542.yaml | 75 ---- .../01005AE0209A8000/A9DEA3043D6E0060.yaml | 75 ---- .../01005BD010872000/496A2F5A9CE4FBEB.yaml | 24 -- .../01005C7015D30000/110D8FB47B55EA19.yaml | 21 -- .../01005C7015D30000/9E7FB72540D748BA.yaml | 21 -- .../01005D10128D2000/1A876E8881CEFBE3.yaml | 26 -- .../01005D2016934000/090A100AA49CE00F.yaml | 27 -- .../01005D2016934000/49F6F257348A42A1.yaml | 27 -- .../01005D2016934000/4D6E50FF58BF7486.yaml | 27 -- .../01005D2016934000/579CCC60D8E3DAF1.yaml | 27 -- .../01005DF00DC26000/029C2837B0EEE8A9.yaml | 21 -- .../01005E101122E000/44AA379DE2A71A9F.yaml | 25 -- .../01005EA01C0FC000/3AEBA262CC1D26D3.yaml | 28 -- .../01005EA01C0FC000/C8CDBFD621A6B29B.yaml | 28 -- .../01005EA01C0FC001/D91C67509C6AED8D.yaml | 20 - .../01005FD017E60000/3E961285846C72A5.yaml | 37 -- .../01005FD017E60000/7C992B6A003C599F.yaml | 37 -- .../01005FD017E60000/B8630C6EE3A22FE8.yaml | 31 -- .../010060700AC50000/E853C44FDF18B88F.yaml | 33 -- .../01006080117C2000/DFC7E8979528DE44.yaml | 32 -- .../0100626011656000/761CD556AB357C87.yaml | 21 -- .../0100628004BCE000/81DA4F9E1E961CA6.yaml | 20 - .../010063B012DC6000/68FED4970010ACF3.yaml | 19 - .../010064101356C000/652D04C4BD51AE83.yaml | 54 --- .../010064400B138000/EB8A679B5DDD0060.yaml | 10 - .../010064C01A9BA000/1BA8D8FD3897F22F.yaml | 10 - .../010064C01A9BA000/E73AB32BD1B16098.yaml | 10 - .../010064C01A9BA000/FB852EECDE7A745D.yaml | 10 - .../0100650018FE0000/7A450848CFDEC18E.yaml | 54 --- .../0100651014DBA000/789C2939A757C0CD.yaml | 43 --- .../010065A014024000/6FB56071CCB321B6.yaml | 21 -- .../010065A014024000/B898981D361D0201.yaml | 27 -- .../010065A01CFB6000/0BB69E112916D851.yaml | 10 - .../010065A01CFB6000/B70D6561B718C8E0.yaml | 10 - .../010065D012FA0000/C403B87FCDAD7604.yaml | 26 -- .../010066101A55A000/338C569A607B7C30.yaml | 19 - .../010066101A55A000/911284C45A26DD34.yaml | 19 - .../010066101A55A000/F3FFA17B5E56809F.yaml | 19 - .../0100664016D5C000/D45B9332B5742A70.yaml | 21 -- .../0100664016D5C000/E47783ECB944D857.yaml | 27 -- .../0100668022DF4000/DCBCB511177F87F6.yaml | 19 - .../010066C024AA8000/10F5B0B223490693.yaml | 10 - .../010066C024AA8000/FBDD7ABB7B1DB6A9.yaml | 10 - .../010066F01A0E0000/153D5A2ABB9C0BA6.yaml | 21 -- .../010066F01A0E0000/2C58E765387F9DDA.yaml | 21 -- .../010066F01A0E0000/58C1B2EA8257D5F1.yaml | 21 -- .../010066F01A0E0000/768428355C994280.yaml | 21 -- .../010066F01A0E0000/B5DCAAA828DA5034.yaml | 21 -- .../010066F01A0E0000/F09EAE79357E3032.yaml | 21 -- .../0100670014482000/824B38A25986B2AB.yaml | 24 -- .../0100670014482001/2B59D6C677258A2A.yaml | 29 -- .../0100670014482002/0AE4D1770B196094.yaml | 21 -- .../0100670014B3E000/372AB37327DB2C31.yaml | 27 -- .../010067B017588000/E5EFB5ABA3601B97.yaml | 75 ---- .../0100690020FBE000/2735E564A9BD3DA3.yaml | 25 -- .../0100690020FBE000/349E9751D50B3B88.yaml | 25 -- .../0100690020FBE000/3768668BABF5F551.yaml | 25 -- .../0100690020FBE000/84C1B1AE29550FC8.yaml | 25 -- .../0100690020FBE000/8FDB10262446CB3D.yaml | 25 -- .../0100690020FBE000/C26EE97D7ECDE83B.yaml | 25 -- .../0100690020FBE000/CC93EA5C0A2F96FE.yaml | 25 -- .../010069100B7F0000/A953B35A45BEA33D.yaml | 19 - .../010069500DD86000/5AD84EFD9D28FDDE.yaml | 21 -- .../010069C01AB82000/0A4F14A5C12F470A.yaml | 33 -- .../010069C01AB82000/541F680F325BD5AC.yaml | 31 -- .../010069C01AB82000/E1BD1040BFBDDAFF.yaml | 31 -- .../01006AC01F630000/7C37B073B19F3CCF.yaml | 24 -- .../01006AC01F630000/B70551B5A2D0F15F.yaml | 24 -- .../01006AC01F630000/FFF55266A618D06A.yaml | 25 -- .../01006AE02236C000/43B775EC81DB2B63.yaml | 25 -- .../01006AE02236C000/DBD5C9EC799E65A9.yaml | 25 -- .../01006B4018ECA000/B8BE1CFAE53CAEBE.yaml | 10 - .../01006BB0203CA000/F8FA82D6A1BFE328.yaml | 25 -- .../01006BD0095F4000/019FBFE7738EA314.yaml | 19 - .../01006BD018B54000/0A1AC10CCFE46061.yaml | 27 -- .../01006BD018B54000/892E6C4FE0D850B5.yaml | 27 -- .../01006BD018B54000/AFDEB128252898AC.yaml | 27 -- .../01006BD018B54000/B771B34505774A8E.yaml | 27 -- .../01006BD018B54000/D53CF6573CAED4B1.yaml | 27 -- .../01006BD018B54000/FD3AC4FFB1B769D5.yaml | 27 -- .../01006BD019A78000/F54FC539CAF24C64.yaml | 21 -- .../01006C10131F6000/0F73F1D52820F90B.yaml | 21 -- .../01006C300E9F0000/1719AABFA5EAE42B.yaml | 45 --- .../01006C600E46E000/6D5DB3434CCF63F2.yaml | 21 -- .../01006C7021024000/03DBE839CAA0632B.yaml | 27 -- .../01006C7021024000/499A85D046C70186.yaml | 25 -- .../01006C7021024000/72D353380DD03B52.yaml | 27 -- .../01006C7021024000/BD9B46CAE607D7E8.yaml | 27 -- .../01006CB010840000/9F2F187D1C6E44EC.yaml | 27 -- .../01006CC01182C000/C31E59266A218855.yaml | 21 -- .../01006D0017F7A000/59874C9B530095AC.yaml | 27 -- .../01006D0017F7A000/BF0607AC795B593A.yaml | 21 -- .../01006DC010326000/05DE5A7F20BD1532.yaml | 27 -- .../01006DC012B00000/EAAB46ED1E4989C0.yaml | 25 -- .../01006DD00FE16000/CA77083E259D87A2.yaml | 19 - .../01006EC00F2CC000/F199FFD7D83F399E.yaml | 21 -- .../01006F301AE9C000/6C91A8A476E70C5D.yaml | 21 -- .../01006F301AE9C000/97D2B53D2C0B35EA.yaml | 21 -- .../01006F301AE9C000/B46B22D9AC7E567B.yaml | 21 -- .../01006F301AE9C000/E9A887A36762C526.yaml | 21 -- .../01006F301AE9C000/F50C38B64DE532F7.yaml | 21 -- .../01006F301AE9C000/F5ECD5701434461C.yaml | 21 -- .../01006F301AE9C000/F89171E031F95ADC.yaml | 21 -- .../01006F401D934000/66FCB9B306005BBA.yaml | 21 -- .../01006F401D934000/8AA7D10343CB3870.yaml | 21 -- .../01006F401D934000/D71970AAA5D34DD0.yaml | 21 -- .../01006F401D934000/E3FBEB5A9C7788CD.yaml | 21 -- .../01006F901C7F2000/406F004D76F961F3.yaml | 27 -- .../01006FC01B540000/B91475B2ADE6F74D.yaml | 19 - .../01006FE016FB2000/191B397CA0310A18.yaml | 13 - .../010070A00E9CE000/4BC4A8A814FD46A4.yaml | 25 -- .../0100711017B30000/2C7A626BA5F25D5F.yaml | 13 - .../0100711022E24000/15AFE82282E0EF30.yaml | 25 -- .../0100711022E24000/9646E1065A7E897B.yaml | 25 -- .../0100711022E24000/98C2DD2B041D3CCC.yaml | 25 -- .../0100711022E24000/BCEB97447A39F9FE.yaml | 25 -- .../010071800BA98000/173E2EDEA9E5D940.yaml | 18 - .../010071F0228CA000/9BA2F2849F9D9FDF.yaml | 26 -- .../010071F0228CA000/DE26B43C3D21B3A3.yaml | 26 -- .../0100727018A10000/2EEE840599DC7021.yaml | 25 -- .../010072900AFF0000/FE757B10B45C3444.yaml | 76 ---- .../010072E01CE0E000/1BFD68BCB8481BC9.yaml | 27 -- .../010072E01CE0E000/42350FCC758887D1.yaml | 25 -- .../010072E01CE0E000/53C0F2107412F0E2.yaml | 25 -- .../010072E01CE0E000/645C3BE90D4ED3D5.yaml | 25 -- .../010072E01CE0E000/85F60F87D19B5270.yaml | 27 -- .../010072E01CE0E000/8A9EBE9FC405A31C.yaml | 27 -- .../010072E01CE0E000/A245DABD986CBC85.yaml | 25 -- .../010072E01CE0E000/CA23556FE5EF2EB1.yaml | 25 -- .../01007300020FA000/4B159F0F7A360669.yaml | 40 -- .../010073301E7E4000/55DFB4A664D8B596.yaml | 25 -- .../010073401175E000/E8DB38F170B0149D.yaml | 21 -- .../0100736019D8E000/72AE4B77322A5B1B.yaml | 10 - .../010073601DF1A000/D36459588F85315D.yaml | 48 --- .../010073601DF1A000/E8BF195297B63BA2.yaml | 52 --- .../0100739018020000/B75E7D3DB78D69C1.yaml | 27 -- .../010073A010430000/2972E95EEFF95144.yaml | 25 -- .../010073B010F6E000/2619FF1E39C93BAE.yaml | 19 - .../010073C01AF34000/2D99FA4793E426C3.yaml | 27 -- .../010073C01AF34000/675538722EE1FACB.yaml | 27 -- .../010073C01AF34000/B3DFF885ABB66B5C.yaml | 27 -- .../010073C01AF34000/C6F56735E3837278.yaml | 27 -- .../010073C01B7FE000/F294A4EBE966E8A9.yaml | 25 -- .../010073F0197DA000/955DF07AA5F4497B.yaml | 32 -- .../0100742007266000/A03FD278F67CDFD2.yaml | 19 - .../010074200E910000/8E82D24A9B7504FB.yaml | 25 -- .../0100748021808000/D1D3FFB94AB458B4.yaml | 21 -- .../010074C021210000/1A371F609F4B6172.yaml | 10 - .../010074C021210000/1D9F49E321B8C939.yaml | 10 - .../010074F013262000/82D187FE9EF9BE92.yaml | 89 ----- .../010075000C608000/F1D71307616AB7E4.yaml | 50 --- .../010075101EF84000/109D974E180A5AA1.yaml | 32 -- .../0100755017EE0000/061A7341077C0974.yaml | 19 - .../0100755017EE0000/546820C12D88850D.yaml | 21 -- .../0100755017EE0000/66BC954F5323014C.yaml | 26 -- .../0100755017EE0000/74BCAC96835DB9AE.yaml | 19 - .../0100755017EE0000/9DBA6AA32721CAB9.yaml | 26 -- .../0100755017EE0000/A697413E1DA7851A.yaml | 26 -- .../0100755017EE0000/C561C6BED2F0B348.yaml | 19 - .../010075A00BA14000/6888027D61CF603D.yaml | 12 - .../0100760020BBA000/734C4A6ED33AE189.yaml | 36 -- .../0100760020BBA000/8E3D8436FCAA4C78.yaml | 37 -- .../010076F00E9C8000/4BC4A8A814FD46A4.yaml | 25 -- .../0100770008DD8000/FB08F1D20FD1204F.yaml | 11 - .../010077A012A5C000/F5ECE696120B65B3.yaml | 21 -- .../010077B00E046000/D2775FAFCF4835CB.yaml | 31 -- .../0100781020710000/1FF44387A22D39F8.yaml | 10 - .../0100781020710000/48D35EF3C7EFBF5F.yaml | 10 - .../0100781020710000/C7BD9BFC5F202073.yaml | 12 - .../0100781020710000/CEDA530B146C0260.yaml | 10 - .../01007820196A6000/37531419DA7654EC.yaml | 35 -- .../010078C01769A000/7BA282E94D34C620.yaml | 25 -- .../010078D000F88000/1B58983BDFAE165A.yaml | 47 --- .../010078D000F88000/56405C9D6C8C0A6A.yaml | 50 --- .../010078D000F88000/60EF5AF2F6E5231F.yaml | 50 --- .../010078D000F88000/7640CE319C043D56.yaml | 50 --- .../010078D000F88000/81E15238E2B6AABD.yaml | 52 --- .../010078D000F88000/8263E738648A23E3.yaml | 50 --- .../010078D000F88000/82C912DDD4663022.yaml | 50 --- .../010078D010BD6000/DFC7E8979528DE44.yaml | 32 -- .../010079500FD5C000/6B0B26802F0DAAAF.yaml | 10 - .../010079C017F5E001/F47C697C2B59443B.yaml | 18 - .../010079C017F5E002/BD5CD5189BC90093.yaml | 10 - .../010079C01CFA6000/D1D3FFB94AB458B4.yaml | 21 -- .../01007A3009184000/928EFE2954F68055.yaml | 27 -- .../01007A700A87C000/88C035C2E44076ED.yaml | 15 - .../01007A700A87C001/F7A872504BDA3100.yaml | 15 - .../01007B0017C90000/55DFB4A664D8B596.yaml | 25 -- .../01007B301CFBE000/7E20C8548DC38F3A.yaml | 19 - .../01007B5017A12000/4A5D86DA05A4E7BB.yaml | 27 -- .../01007BE01FCC2000/BDDD7E8FA07C8C75.yaml | 25 -- .../01007BF01A86A000/21502D0863ED6F58.yaml | 33 -- .../01007D70145F4000/E8418C6B4BDCC1EE.yaml | 25 -- .../01007DE016E9E000/6348715E851F18EE.yaml | 25 -- .../01007E3006DDA000/D55608916FA56C18.yaml | 109 ------ .../01007E700DBF6000/29E1CD0FBB24697E.yaml | 25 -- .../01007EF00011E000/8E9978D50BDD20B4.yaml | 230 ----------- .../01007EF00011E000/A12F75F49B36F4B8.yaml | 148 -------- .../01007EF00011E000/DE0B6AC4EFC1DDA7.yaml | 161 -------- .../01007FB010DC8000/3C1DC69847A35C30.yaml | 25 -- .../01007FB010DC8000/D3744AF2C376CDC4.yaml | 19 - .../0100801011C3E000/C4DF04F647BDC727.yaml | 91 ----- .../0100803005D52000/62B7F19804BCB70E.yaml | 26 -- .../01008120128C2000/3D4E3A9252AA6C63.yaml | 23 -- .../010081E01A45C000/25D3C2E9040D1A9A.yaml | 27 -- .../010081E01A45C000/36C7E946E6C11C8E.yaml | 27 -- .../0100821020BBC000/D45002D206976B20.yaml | 37 -- .../010082901D6F2000/FCA830BAE649B898.yaml | 32 -- .../010082F015576000/8BFBF5B8A7098443.yaml | 41 -- .../0100830004FB6000/40F973CE3B5EC8D7.yaml | 17 - .../010083201F234000/A6F7BF79EBCBCC70.yaml | 10 - .../010083501AB36000/0959D87753F9FED4.yaml | 21 -- .../010083602099A000/B174F363C2823CBE.yaml | 11 - .../010083A018262000/59AF76C13F680B7C.yaml | 36 -- .../010084F017B32000/2BFF5F7711EE6C9F.yaml | 21 -- .../0100853015E86000/0C4BD6CA532E589C.yaml | 21 -- .../0100853015E86000/184D48D1AFF6A941.yaml | 32 -- .../0100853015E86000/1FEBABDBBDE0228B.yaml | 34 -- .../0100853015E86000/22D0D857A4DAEBBC.yaml | 28 -- .../0100853015E86000/252A2FD2AD6A13FE.yaml | 28 -- .../0100853015E86000/351B77A43CF31BF4.yaml | 32 -- .../0100853015E86000/4995675B5380FA50.yaml | 21 -- .../0100853015E86000/538D60FF5A324C92.yaml | 21 -- .../0100853015E86000/63C5A645F3E5985A.yaml | 28 -- .../0100853015E86000/6488A67709988BD7.yaml | 32 -- .../0100853015E86000/8F6376506EA4E8D5.yaml | 32 -- .../0100853015E86000/909C5FD598A092B1.yaml | 28 -- .../0100853015E86000/9761E793CBE5895F.yaml | 32 -- .../0100853015E86000/9AA64F897E1D50BA.yaml | 32 -- .../0100853015E86000/BC6CA2DEA3306522.yaml | 28 -- .../0100853015E86000/C534121E724B33A1.yaml | 32 -- .../0100853015E86000/C9ABDB1674CBED09.yaml | 32 -- .../0100853015E86000/CF94B485A949F8D1.yaml | 28 -- .../0100853015E86000/D5C5F47DFABD0812.yaml | 21 -- .../0100853015E86000/DEA84284F054C693.yaml | 21 -- .../0100853015E86000/E152A4B27D349B17.yaml | 28 -- .../0100853015E86000/E9DA1530FB30E130.yaml | 32 -- .../0100853015E86000/F9C32ECFD8646E3A.yaml | 32 -- .../0100853015E86000/FB1995474546F7C0.yaml | 28 -- .../010085401A454000/2E7487767D0CA0EE.yaml | 33 -- .../010085401A454000/2F33996FD9C81253.yaml | 33 -- .../010085401A454000/7C724F497564C027.yaml | 33 -- .../010085401A454000/95761555A341B190.yaml | 33 -- .../010085500130A000/32C590B064956546.yaml | 14 - .../010085500E9D0000/D27FD8A515077F34.yaml | 25 -- .../010086C00AF7C000/C7DAB27F22ACD2ED.yaml | 26 -- .../010087800DCEA000/6B0B26802F0DAAAF.yaml | 10 - .../010087E01FCD6000/ACD959FBAECADE00.yaml | 12 - .../010088801B324000/9B743181AB8A26F9.yaml | 27 -- .../010088B01572E000/E5AD28BC6E790692.yaml | 10 - .../010088B017734000/288908CE7F6177CC.yaml | 11 - .../0100890021AE2000/55E2BD1FFCD31993.yaml | 11 - .../010089A0117D4000/9B7A3AC5AF1A3B0D.yaml | 62 --- .../01008AF016240000/217C9ECF258C0312.yaml | 32 -- .../01008AF01AD22000/222C0A2546723943.yaml | 12 - .../01008AF01AD22000/8F3E77E1322E9F6F.yaml | 12 - .../01008C2014340000/F00EFE6846627B4A.yaml | 10 - .../01008C8012920000/8C93B930348C9787.yaml | 74 ---- .../01008CB0156BC000/7735C8DD89D145F2.yaml | 95 ----- .../01008CD0172D6000/2B1C8B24F6744644.yaml | 12 - .../01008CD0172D6000/B9CC2F4DE53D4F94.yaml | 12 - .../01008CD0172D6000/E711B99C30E041F7.yaml | 12 - .../01008CD0172D6000/F716D367A6D7F5BA.yaml | 12 - .../01008D0016AF4000/FB827BF029E0778A.yaml | 12 - .../01008D100D43E000/B6CFBB9BB8F8A2E7.yaml | 26 -- .../01008D4007A1E000/C3D46BB3C7059DB1.yaml | 29 -- .../01008D4015904000/CA77083E259D87A2.yaml | 19 - .../01008D80148C8000/BC82DB38671F8468.yaml | 19 - .../01008E101E868000/42AD50169E847BA2.yaml | 19 - .../01008E101E868000/CE6953FB28A66265.yaml | 19 - .../01008E401E6D0000/C124FFD193F533B4.yaml | 27 -- .../01008E401E6D0000/E08769D5B56A5A25.yaml | 21 -- .../01008F600F2D0000/EB57CF3434044523.yaml | 27 -- .../010090100E334000/05D2208140190484.yaml | 13 - .../010090100E334000/CBFC09BA9105CD4D.yaml | 12 - .../01009040091E0000/F2FE5EF877839F4F.yaml | 30 -- .../0100906014C3C000/EAB1DC1D53E319F9.yaml | 15 - .../01009060193C4000/B880EEE5B8946289.yaml | 25 -- .../010090F012916000/D3DD5B220DCEB626.yaml | 21 -- .../010091901E440000/8021F22E7A401A3E.yaml | 25 -- .../010091B01A438000/A735894277FF90F3.yaml | 41 -- .../0100926016012000/30997D8F7566EBB5.yaml | 11 - .../0100926016012000/561B0F485E699E4E.yaml | 11 - .../0100926016012000/7FF42DE6AA57290B.yaml | 11 - .../0100926016012000/8EACFE3E9E92B0FE.yaml | 11 - .../0100926016012000/B2395B882C2BCB24.yaml | 11 - .../010092A0172E4000/C4067E8CB3258656.yaml | 28 -- .../010093C01F256000/CABB3B5447C2F79F.yaml | 25 -- .../010093C0215B4000/26350BBA224575AE.yaml | 21 -- .../010093C0215B4000/5AF690F4A8BFCC67.yaml | 21 -- .../010093C0215B4000/7816CA5FECA60315.yaml | 21 -- .../010093C0215B4000/D1D3FFB94AB458B4.yaml | 21 -- .../010093C0215B4000/EAADF33F510C5853.yaml | 21 -- .../010093D00CB22000/E8418C6B4BDCC1EE.yaml | 25 -- .../0100947013122000/9FC46F388F6C684C.yaml | 12 - .../0100950012F66000/D1B29E1ABDCD955E.yaml | 38 -- .../010095301AAEE000/FE78C7B94C4E791A.yaml | 25 -- .../0100956016464000/F9C83728910E28A4.yaml | 25 -- .../010095D012E5E000/929D9160BA57A570.yaml | 23 -- .../010097000BC10000/FB4239AA962B429B.yaml | 56 --- .../010097100EDD6000/7F4216B6E784A4B2.yaml | 21 -- .../010097F018538000/0E7A0A7276477C53.yaml | 12 - .../010097F018538000/2E3EAEB4B6834BEF.yaml | 13 - .../010097F018538000/37CBC5751D80E70E.yaml | 12 - .../010097F018538000/448820AF8E20D65D.yaml | 12 - .../010097F018538000/456BDB6160D317A3.yaml | 12 - .../010097F018538000/491561854A6DC444.yaml | 12 - .../010097F018538000/4983F1C36957B7E5.yaml | 12 - .../010097F018538000/500A59C7C5A7C1E8.yaml | 12 - .../010097F018538000/54300203FF8ABCC6.yaml | 12 - .../010097F018538000/682B1552A9C571C9.yaml | 10 - .../010097F018538000/741C1E11C3A1FD02.yaml | 12 - .../010097F018538000/757760621154BA5A.yaml | 12 - .../010097F018538000/8ACF8D236ADAB16F.yaml | 12 - .../010097F018538000/AE7422A20BC9C3B0.yaml | 13 - .../010098A0128C6000/3D4E3A9252AA6C63.yaml | 23 -- .../010098A02288A000/7E610F688F92412B.yaml | 25 -- .../01009970122E4000/AE2768797E3337EE.yaml | 25 -- .../010099900CAB2000/F2F739A2F1CAFF72.yaml | 12 - .../010099C01896C000/60B9AE6094566A23.yaml | 21 -- .../01009A5009A9E000/069E3EFC16365FFD.yaml | 29 -- .../01009BC00B872000/53116900DC7BBE11.yaml | 28 -- .../01009D200952E000/028C5AB881F17582.yaml | 32 -- .../01009E701356A000/72E8F20EBBDBA296.yaml | 21 -- .../01009E702225A000/07E20F126ABEFF78.yaml | 16 - .../01009EB00EBAA000/4BC4A8A814FD46A4.yaml | 25 -- .../01009EE0111CC000/E1F0CFC02F449EF3.yaml | 28 -- .../01009EE01EB02000/63A4CF08E30A56B1.yaml | 10 - .../01009F201CFBC000/0BB69E112916D851.yaml | 10 - .../01009F201CFBC000/B70D6561B718C8E0.yaml | 10 - .../01009F8017F48000/69EE5F71F187EAA9.yaml | 21 -- .../01009FA01FF6C000/1218D04A7C77F2DA.yaml | 27 -- .../01009FA01FF6C000/6CFA2609A2D00FA5.yaml | 27 -- .../01009FA01FF6C000/EBDE239CB7780F58.yaml | 27 -- .../01009FA01FF6C000/FCCC4FDA392C1C16.yaml | 27 -- .../01009FB0172F4000/F712547C68C66A0A.yaml | 27 -- .../01009FE010876000/407978D722447B25.yaml | 24 -- .../0100A0800E9C4000/D27FD8A515077F34.yaml | 25 -- .../0100A0B018A72000/5EABF05A814EBB1B.yaml | 25 -- .../0100A0C01BED8000/7E06539B5874B9C4.yaml | 12 - .../0100A21017C42000/01CBDFDED43B80F5.yaml | 80 ---- .../0100A21017C42000/3980F76403AE4CF2.yaml | 80 ---- .../0100A21017C42000/693314C08EA157F3.yaml | 77 ---- .../0100A21017C42000/807A2202464D445B.yaml | 74 ---- .../0100A21017C42000/B24C86A2B02DE960.yaml | 80 ---- .../0100A2601720A000/DD6F5AF530CC2072.yaml | 25 -- .../0100A2902051A000/05ADD0D5FD677639.yaml | 27 -- .../0100A2902051A000/3D6E4BDE905836BC.yaml | 25 -- .../0100A2902051A000/779FC981128BA290.yaml | 25 -- .../0100A2A01A026000/008F995D1A63B383.yaml | 27 -- .../0100A3501946E000/0D9649011312F62E.yaml | 21 -- .../0100A3D0199AC000/BCC955FF933FEF2E.yaml | 26 -- .../0100A55019C38000/B9DB6040F70BE58F.yaml | 21 -- .../0100A5A020D5E000/16346DDFF65961FF.yaml | 10 - .../0100A5A020D5E000/8B3609ECB49DBBED.yaml | 10 - .../0100A5A022B14000/2E049E21624484CF.yaml | 10 - .../0100A5E014196000/0E9D849EF47198D8.yaml | 27 -- .../0100A5E014196000/D24A46A2618C9E38.yaml | 27 -- .../0100A6301214E000/8C08B9719E085F91.yaml | 26 -- .../0100A6B01900E000/9E0901B84058B5B4.yaml | 15 - .../0100A7101B806000/BCC955FF933FEF2E.yaml | 26 -- .../0100A73016576000/4E2AA28721AFF2C1.yaml | 12 - .../0100A78021ADE000/140809A5980FB2E2.yaml | 11 - .../0100A88012504000/0D17FD76B32F3040.yaml | 12 - .../0100A88012504000/BCAA04FAF88EEA4A.yaml | 10 - .../0100A8A013AB2000/1EFB6879CFAD7DD3.yaml | 25 -- .../0100A8B00F0B4000/92511355705EA8C5.yaml | 21 -- .../0100A8E016236000/82AF4E16BBC0BEC8.yaml | 148 -------- .../0100A9001C042000/3565E26E8827C846.yaml | 33 -- .../0100A93016BF4000/770A07C35E631CB2.yaml | 21 -- .../0100A9400C9C2000/33463E11899166BB.yaml | 76 ---- .../0100A9801180E000/B0ADB498E82BC644.yaml | 26 -- .../0100AA400A238000/14D7D1537BD5A986.yaml | 21 -- .../0100AA50138B4000/7E65E5BC3564BE46.yaml | 20 - .../0100AA60136D2000/A7F32A28D882D046.yaml | 27 -- .../0100AA60136D2000/F73C6504D378C38B.yaml | 21 -- .../0100AA80194B0000/3A8E744D8F65CDEA.yaml | 20 - .../0100AC601DCA8000/4584432786F462DB.yaml | 27 -- .../0100AD0014AB4000/AC8C8EC9DB1A8EF4.yaml | 15 - .../0100AD10102B2000/D89FFAA2062E373D.yaml | 12 - .../0100AE7010434000/5915CDDDC4EEA6CD.yaml | 21 -- .../0100AFC01A456000/7C724F497564C027.yaml | 31 -- .../0100AFE01EC6C000/635E7DB24F2BCD32.yaml | 25 -- .../0100B04011742000/C9A3DD7702075ECD.yaml | 14 - .../0100B0500FE4E000/951D09EECE122A47.yaml | 12 - .../0100B0701AA78000/6C46135714ABB870.yaml | 18 - .../0100B140178B6000/94EA2A7C7EE32EEF.yaml | 11 - .../0100B16009C10000/490D681909609015.yaml | 25 -- .../0100B1A00D8CE000/3AAA4D3E5A1A0F88.yaml | 42 --- .../0100B1A00D8CE000/B059C2C77AD834B8.yaml | 42 --- .../0100B2002330E000/637F8C946F7C512D.yaml | 25 -- .../0100B2002330E000/AF42903B754D4859.yaml | 25 -- .../0100B2301F4A8000/BBEA8745A7893750.yaml | 19 - .../0100B2301F4A8000/C4DD7E5256163FF1.yaml | 21 -- .../0100B2301F4A8000/FF8EFD0E0E71BB03.yaml | 21 -- .../0100B28014132000/810CBA3D7DB83EC0.yaml | 62 --- .../0100B2B00E7AA000/FAD1AF4EDC6DB267.yaml | 31 -- .../0100B36008F90000/062189E9CF83BA5D.yaml | 28 -- .../0100B36008F90000/09AD6947189FC6D9.yaml | 29 -- .../0100B36008F90000/2F0040A6AA0866EF.yaml | 28 -- .../0100B36008F90000/F9648F3865C8B1AE.yaml | 28 -- .../0100B36008F90000/F99F0CE4FC4567ED.yaml | 28 -- .../0100B4D00E6B0000/8B40EBBA7244C94A.yaml | 28 -- .../0100B4F0196B8000/B8BE1CFAE53CAEBE.yaml | 10 - .../0100B6001E6D6000/6895E4F3E01808C4.yaml | 16 - .../0100B69017120000/02D54DEBD40AF215.yaml | 19 - .../0100B6C01CDA0000/01660DB6F4D0FA81.yaml | 21 -- .../0100B6C01CDA0000/13824B290C931FE5.yaml | 21 -- .../0100B6C01CDA0000/CFC1C6A56575F83A.yaml | 21 -- .../0100B750198C6000/FF0DDCCB9C3B9375.yaml | 27 -- .../0100B76011DAA000/C5D73D3EDAADACB2.yaml | 21 -- .../0100B7A01386E000/39F1BCCB912A12DF.yaml | 21 -- .../0100B7A01386E000/3AEEE2266CD84B1E.yaml | 27 -- .../0100B7C01D480000/567A8410AE613885.yaml | 27 -- .../0100B7C01D480000/8A942A9E838E5083.yaml | 27 -- .../0100B7C01D480000/CCBDDB69038F76FC.yaml | 27 -- .../0100B7C01D480000/E8EA74BE6221F2E4.yaml | 27 -- .../0100B8401EED6000/D23C95A5A7AB19C9.yaml | 25 -- .../0100B8501771A000/78BF042012CF9EE8.yaml | 21 -- .../0100B870126CE000/019FBFE7738EA314.yaml | 19 - .../0100B8901AE88000/8AF36A929664A94D.yaml | 25 -- .../0100B8A0136D4000/0F73F1D52820F90B.yaml | 19 - .../0100B8E016F76000/992787E2B5425994.yaml | 55 --- .../0100B9801F872000/007EA5E2E2541C6F.yaml | 42 --- .../0100B9801F872000/A588F7BB864AAD5F.yaml | 42 --- .../0100BA502285A000/6114E040846B8E3D.yaml | 19 - .../0100BAC01E57E000/C55F6B8AEFA54324.yaml | 14 - .../0100BAC01E57E000/E5816E16CC5D72A5.yaml | 14 - .../0100BB000A3AA000/B61F280560A937D2.yaml | 12 - .../0100BC501355A000/7C9F89C3743F202F.yaml | 27 -- .../0100BD000CB2C000/1F1363EC8CC83C73.yaml | 21 -- .../0100BD10190C0000/45C15AE4450708FD.yaml | 27 -- .../0100BD601EC3E000/3F1843C4FE400063.yaml | 32 -- .../0100BD601EC3E000/5AF163DEF288F098.yaml | 32 -- .../0100BDB01A0E6000/217A5C011269C81E.yaml | 14 - .../0100BDB01A0E6000/2600C6B1C5049FAE.yaml | 12 - .../0100BDB01A0E6000/A5513651324F6B73.yaml | 12 - .../0100BDB01A0E6000/EC2417892C9BCC7E.yaml | 12 - .../0100BDB01A0E6000/F5BE87C9F0715C3D.yaml | 12 - .../0100BDB01A0E6000/F7EA5CACC75067D4.yaml | 12 - .../0100BDD00EF5A000/B70F06EAC87FA2AF.yaml | 40 -- .../0100BDF0197C8000/41F236A333370F55.yaml | 11 - .../0100BDF0197C8000/B7242BF0E5B17B6F.yaml | 11 - .../0100BDF0197C8000/FF53171B18C7701A.yaml | 11 - .../0100BEA0244FC000/4AC071F9B9540985.yaml | 23 -- .../0100BEA0244FC000/9FD75204E7C17463.yaml | 23 -- .../0100BEB015604000/B38D51E0391187EC.yaml | 42 --- .../0100BED01E6EE000/87F1CEF6D52392AE.yaml | 12 - .../0100BEE01948E000/A3416631954C56C8.yaml | 47 --- .../0100BF500207C000/461B14E505AB9555.yaml | 34 -- .../0100BF500207C000/E380EB35262B4F9C.yaml | 34 -- .../0100BFE00E9CA000/4BC4A8A814FD46A4.yaml | 25 -- .../0100C09014530000/D92F465FE9920BB6.yaml | 22 -- .../0100C0F0020E8000/D0798521F563E6A7.yaml | 15 - .../0100C11012C68000/4EEA2970DF38ECE1.yaml | 10 - .../0100C1101EE5A000/950FB0C3D58D6A7B.yaml | 25 -- .../0100C12017BCA000/F01A4E60035AF15A.yaml | 27 -- .../0100C1300BBC6000/59719CFCD1671B98.yaml | 21 -- .../0100C1E01CDEE000/27BB06DD145F39F5.yaml | 25 -- .../0100C2801CFB8000/0BB69E112916D851.yaml | 10 - .../0100C2801CFB8000/B70D6561B718C8E0.yaml | 10 - .../0100C2A01A730000/9F7C33E21279D3E6.yaml | 58 --- .../0100C3800049C000/9D4C86E6EF74504A.yaml | 11 - .../0100C3C012718000/2CF52C8DA4468946.yaml | 21 -- .../0100C3C012718000/BB2DDA80E83D0B2F.yaml | 27 -- .../0100C47025F3A000/553262E59A96741B.yaml | 33 -- .../0100C56010FD8000/5AD255D6667B6EB5.yaml | 11 - .../0100C56010FD8000/82051A9C802D0A4C.yaml | 13 - .../0100C5A013B7A000/1B98D227021142B1.yaml | 19 - .../0100C63021ADC000/C65BE8468BF1EC89.yaml | 11 - .../0100C6C010AE4000/FE211DBFAD6EA549.yaml | 14 - .../0100C7300EEE4000/54211726D36A8D9C.yaml | 12 - .../0100C75019274000/582ADD6F24A2A6B7.yaml | 25 -- .../0100C8E01DD16000/3F2E96A4396944A1.yaml | 21 -- .../0100C9801FEE6000/53F407A2CFBF5202.yaml | 16 - .../0100C9801FEE6000/AE90FD64E7B2FE1E.yaml | 17 - .../0100CA3014ADE000/372AB37327DB2C31.yaml | 27 -- .../0100CA800F9B2000/A1E1EFBA68B846A9.yaml | 19 - .../0100CAF00B744000/FE77FFB8CBFB3A5C.yaml | 14 - .../0100CC00102B4000/8AFCBE6A930CD42E.yaml | 21 -- .../0100CC3014886000/9265FE6C4DE9600E.yaml | 21 -- .../0100CC401A16C000/ACF8E5931E38EAA0.yaml | 12 - .../0100CC80140F8000/9CB4490E8A718BAE.yaml | 27 -- .../0100CD3000BDC000/5C598E5025BF97BC.yaml | 52 --- .../0100CD3010AE2000/53EA0196A4AEB260.yaml | 92 ----- .../0100CD4012DCA000/B067B077906C6208.yaml | 64 ---- .../0100CD6023C84000/163585C5E3885A04.yaml | 25 -- .../0100CDC013238000/D626F7A72AF54744.yaml | 19 - .../0100CE101B698000/0CE2AE41BCCADC72.yaml | 27 -- .../0100CE101B698000/1CE1386EAF0C5EF5.yaml | 27 -- .../0100CE101B698000/35FC3A7D13060376.yaml | 27 -- .../0100CE101B698000/820B3E993D6FE8E1.yaml | 27 -- .../0100CE101B698000/9035B7A14BADF977.yaml | 27 -- .../0100CE101B698000/AFE59FDFAC191EBD.yaml | 27 -- .../0100CE101B698000/C4950585861A47EE.yaml | 27 -- .../0100CE101B698000/D07D96A610514C45.yaml | 27 -- .../0100CEE01D23C000/76B6E5E830A43D97.yaml | 27 -- .../0100CF3016BBE000/6A8373EFB7B2BD5D.yaml | 25 -- .../0100CF401A98E000/5ECFB8F85105FE3C.yaml | 28 -- .../0100CF5010FEC000/A1CE2940D813ACAB.yaml | 45 --- .../0100CFB01CDCE000/F678FD2BB197125B.yaml | 25 -- .../0100CFD01517A000/2438B00670539268.yaml | 25 -- .../0100D09016C6A000/4710B51EB3A3C05C.yaml | 25 -- .../0100D1202322A000/89E4C9599C96D7DE.yaml | 25 -- .../0100D1202322A000/E04F5D58727DDE13.yaml | 25 -- .../0100D1501ABAE000/086789EC0FDA4BF1.yaml | 27 -- .../0100D1501ABAE000/2B7E5D5B9A730F77.yaml | 27 -- .../0100D1501ABAE000/4B7F793B8355C016.yaml | 27 -- .../0100D1501ABAE000/9A2DB2F402A31811.yaml | 27 -- .../0100D1501ABAE000/C58AA3A366F82F70.yaml | 27 -- .../0100D1501ABAE000/DCBE53FDF98752AF.yaml | 27 -- .../0100D1F00EB72000/8B40EBBA7244C94A.yaml | 28 -- .../0100D210177C6000/9510D677DCCE4447.yaml | 11 - .../0100D30010C42000/682F4A502035678D.yaml | 21 -- .../0100D3201B808000/BCC955FF933FEF2E.yaml | 26 -- .../0100D3801E6CE000/ACCFF102CED838CE.yaml | 25 -- .../0100D3801E6CE000/E3A3FC8EEC76A4FB.yaml | 27 -- .../0100D3C010DE8000/59159483CF88330F.yaml | 52 --- .../0100D4600D0E4000/899B8B12DCD0864F.yaml | 19 - .../0100D4900E82C000/85C362CC9790F0ED.yaml | 12 - .../0100D4A00B284000/2B70B1A7B478FCA3.yaml | 19 - .../0100D4A00B284000/44E0F3E8F4996F55.yaml | 21 -- .../0100D4A00B284000/D1E3FFBA414F4929.yaml | 21 -- .../0100D4A00B284000/DE62C644228E63CC.yaml | 21 -- .../0100D5501522C000/54E89AF3414E549A.yaml | 19 - .../0100D560102C8000/48681F1D90704F6C.yaml | 12 - .../0100D5801E904000/2079893CE8402E04.yaml | 16 - .../0100D5801E904000/89349071D2B0BFF7.yaml | 19 - .../0100D5801E904000/CE493FC8CDD3D7B2.yaml | 18 - .../0100D680194B2000/9A257FAB83444214.yaml | 67 ---- .../0100D76006EF8000/2847991952B3D7AB.yaml | 34 -- .../0100D7700AF88000/F5AC009011277359.yaml | 26 -- .../0100D77019324000/A52C9938956331C9.yaml | 21 -- .../0100D7800E9E0000/92C25172D38DFEDB.yaml | 25 -- .../0100D7C01F254000/94B4FA4F36E01BE3.yaml | 25 -- .../0100D7C021496000/23E85FEDEC96439C.yaml | 36 -- .../0100D7C021496000/5D63D46226DB106F.yaml | 36 -- .../0100D7C021496000/6D560144F6B09A98.yaml | 36 -- .../0100D7C021496000/7926A67119144CFD.yaml | 37 -- .../0100D7C021496000/E9A189C0CA87A30C.yaml | 36 -- .../0100D7F00FB1A000/D871B992E95B71C5.yaml | 15 - .../0100D8700B712000/C56E6F514FADC5C5.yaml | 24 -- .../0100D9601A994000/28ED06F94D767478.yaml | 25 -- .../0100D9D021782000/D1D3FFB94AB458B4.yaml | 21 -- .../0100DA201EBF8000/10844A7A20C5597E.yaml | 25 -- .../0100DA201EBF8000/21F90AA03BED43F0.yaml | 25 -- .../0100DA201EBF8000/EE2CAB96FB6BEDA9.yaml | 25 -- .../0100DA801624E000/0909B4AC280D9D77.yaml | 10 - .../0100DAE019110000/0248DC99035AD28A.yaml | 41 -- .../0100DB1017CDC000/2C7A626BA5F25D5F.yaml | 13 - .../0100DB6020CCE000/0A0630C01D7130B7.yaml | 10 - .../0100DC2020C50000/4A64A3713EEA60CA.yaml | 12 - .../0100DC301186A000/EE295EAAEA7D31E4.yaml | 21 -- .../0100DC9020B30000/3F6808C5518371F9.yaml | 10 - .../0100DCA0064A6000/79E5950FFA85ACF6.yaml | 29 -- .../0100DCF0093EC000/71873FEB4648FA39.yaml | 21 -- .../0100DE302439E000/C4E2284BFB7D534C.yaml | 25 -- .../0100DE600BEEE000/A8631EDCC0013045.yaml | 26 -- .../0100DE70085E8000/F18ACDA7A11CB287.yaml | 29 -- .../0100DE90162A0000/0BBD86F62F380844.yaml | 55 --- .../0100DF301FA3C000/BBEA8745A7893750.yaml | 19 - .../0100DFC00E472000/448C08A9533F3CAD.yaml | 21 -- .../0100E1C0148F8000/5EABF05A814EBB1B.yaml | 27 -- .../0100E1C0148F8000/77C053D779EE97F6.yaml | 21 -- .../0100E1F013674000/E9B47349177722BE.yaml | 25 -- .../0100E2701A888000/8322528255D2CC63.yaml | 56 --- .../0100E2E0152E4000/13F322A6161F787C.yaml | 28 -- .../0100E3401D660000/FDBEE885A65A2B92.yaml | 21 -- .../0100E4900D266000/85BF83CDD25CC542.yaml | 30 -- .../0100E5600D446000/C32B29CB5FBA96D9.yaml | 26 -- .../0100E57010542000/3FB33205C25D3436.yaml | 56 --- .../0100E5900F49A000/A8BA2A8F93AAE647.yaml | 20 - .../0100E6300AA3A000/AAC6FB02E03062EF.yaml | 88 ----- .../0100E63013E60000/0C8DC9D899379FA5.yaml | 25 -- .../0100E66006406000/AA4277E6A92FEBE6.yaml | 15 - .../0100E66010ADE000/45CE2B6625A35771.yaml | 105 ------ .../0100E67012924000/B151A224A429F9A7.yaml | 25 -- .../0100E6900A5A8000/A184B59D5091B68A.yaml | 14 - .../0100E6B01BD3A000/0B00B4DFAE47EBA3.yaml | 14 - .../0100E6B01BD3A000/27AB93A086868C70.yaml | 13 - .../0100E6B01BD3A000/393323C7FBCBD72D.yaml | 13 - .../0100E6B01BD3A000/59C5C45EF17ACADA.yaml | 14 - .../0100E6B01BD3A000/6A2E388EB364D4ED.yaml | 14 - .../0100E6B01BD3A000/9558FFD5CABC4612.yaml | 18 - .../0100E6B01BD3A000/C9D5E4BE40E7EB66.yaml | 14 - .../0100E6B01BD3A000/CB3C7EF8E279A22D.yaml | 14 - .../0100E8401FC8A000/A21FFE97D09DCE4E.yaml | 25 -- .../0100E8500AD58000/07650FD5E5E2B82C.yaml | 83 ---- .../0100E870163CA000/621EE66A6743D750.yaml | 12 - .../0100E87017D0E000/ACF3FF125C2A3E68.yaml | 21 -- .../0100E9001A94C000/57B6B2062EC8C38A.yaml | 27 -- .../0100E9001A94C000/ACBD89C999804FD2.yaml | 26 -- .../0100E9400FE34000/33DBE39C8A83F1E6.yaml | 25 -- .../0100E95004038000/F77F1559371C0EC6.yaml | 164 -------- .../0100EAE00D9EC000/0FE6747D03EBA4E3.yaml | 19 - .../0100EAF01527E000/AB75C103EEC0D5FC.yaml | 19 - .../0100EBE020BC0000/386C265C45562002.yaml | 37 -- .../0100EBE020BC0000/6C434B4568552ADB.yaml | 37 -- .../0100EBE020BC0000/D3CA3F7A4AE6F9A0.yaml | 35 -- .../0100EC5013ED2000/3C1DC69847A35C30.yaml | 25 -- .../0100EC5013ED2000/D3744AF2C376CDC4.yaml | 19 - .../0100ED7012DB2000/1A971CC40B6D5B3F.yaml | 60 --- .../0100EE00205BA000/135595BF76F46B1B.yaml | 12 - .../0100EE00205BA000/21B3E4EA75F16551.yaml | 12 - .../0100EE00205BA000/AA3EDDE660D630AD.yaml | 12 - .../0100EE00205BA000/E7011BF08747297B.yaml | 12 - .../0100EE00205BA000/F2D03CFFB8DE5E4C.yaml | 12 - .../0100EF401D9B2000/2F723E9FD78D184B.yaml | 19 - .../0100EF401D9B2000/35FAA72E03DDE0D1.yaml | 19 - .../0100EF401D9B2000/9BD042D73D2FC2AE.yaml | 19 - .../0100EF401D9B2000/F9248820D4E4406B.yaml | 19 - .../0100F0400E850000/85C362CC9790F0ED.yaml | 12 - .../0100F0401C2BC000/38730D109E48050C.yaml | 10 - .../0100F09024254000/EC30FA360F7BFF02.yaml | 25 -- .../0100F0E01753E000/217C9ECF258C0312.yaml | 32 -- .../0100F1101BB9E000/171806C35E4152E7.yaml | 74 ---- .../0100F1101BB9E000/5A2EE9B7315F91E5.yaml | 74 ---- .../0100F15003E64000/1953770037ACC52A.yaml | 20 - .../0100F18023E72000/14A66A472139D638.yaml | 25 -- .../0100F2300D4BA000/DB17131624D04A9C.yaml | 25 -- .../0100F2600D710000/4CCD2F6D331DD104.yaml | 42 --- .../0100F2C0115B6000/5CB42B1CF25469FB.yaml | 183 --------- .../0100F2C0115B6000/6265F94D606242CE.yaml | 170 --------- .../0100F2C0115B6000/965EAB9CEB8EB867.yaml | 174 --------- .../0100F2C0115B6000/9B4E43650501A4D4.yaml | 178 --------- .../0100F3200E7CA000/EAA0B789264F2A75.yaml | 43 --- .../0100F3400332C000/E3938FA78579C1CA.yaml | 165 -------- .../0100F4F014108000/2284DFB25F387719.yaml | 32 -- .../0100F6701FED4000/7CE83658C7B53BB6.yaml | 12 - .../0100F6701FED4000/EBB5459731354538.yaml | 10 - .../0100F7201D1B0000/3BBD72F0EB13C1AE.yaml | 13 - .../0100F7201D1B0000/BF3F18101CBCFB33.yaml | 13 - .../0100F7901118C000/668FE05AA1AAC5A1.yaml | 19 - .../0100F7E00C70E000/0C00FC37B0610FBD.yaml | 27 -- .../0100F7E00C70E000/1C42BC734E792AFB.yaml | 27 -- .../0100F7E00C70E000/2980E59C32A0E147.yaml | 27 -- .../0100F8100B982000/3CAC2B84D43AF415.yaml | 25 -- .../0100F85018A14000/2EEE840599DC7021.yaml | 25 -- .../0100F8D01810E000/33DBE39C8A83F1E6.yaml | 25 -- .../0100F8F00C4F2000/BC714E2D7D32AB41.yaml | 12 - .../0100F8F014190000/AF7114F019CE6E1D.yaml | 21 -- .../0100FA2019AC2000/91CE601F6A7174CF.yaml | 12 - .../0100FAD01861C000/D84426C8D6B8D947.yaml | 11 - .../0100FB70133C0000/019FBFE7738EA314.yaml | 19 - .../0100FB90103DE000/4BED8F28C0F34C86.yaml | 25 -- .../0100FBD00F5F6000/5EFAB20F5C1F0F68.yaml | 26 -- .../0100FBD013AB6000/038858A1EC679156.yaml | 27 -- .../0100FBD013AB6000/0D96442AC907A3F8.yaml | 27 -- .../0100FBD013AB6000/1B45F85E3DE5615D.yaml | 27 -- .../0100FBD013AB6000/3E9AC9266BB21FC4.yaml | 27 -- .../0100FBD013AB6000/44C6A5004C499464.yaml | 27 -- .../0100FBD013AB6000/53531030A4199B74.yaml | 27 -- .../0100FBD013AB6000/54551AEABF6E1F41.yaml | 21 -- .../0100FBD013AB6000/8C7A99CBD1AEA208.yaml | 21 -- .../0100FBD013AB6000/9976A5B49537F7D7.yaml | 27 -- .../0100FBD013AB6000/B37F6B200EF31DFC.yaml | 21 -- .../0100FBD013AB6000/CD9E844E29E8CA80.yaml | 27 -- .../0100FBD013AB6000/EA6728F9AE46C055.yaml | 27 -- .../0100FC10159EC000/0AFE1AE664D9AFA1.yaml | 14 - .../0100FD0014B76000/76EB8E0320472553.yaml | 10 - .../0100FD101186C000/BF0088C59D7E97C0.yaml | 21 -- .../0100FD70134FA000/4246AC9E465556D6.yaml | 37 -- .../0100FE201680A000/8F2536786EECCEE5.yaml | 21 -- .../0100FF500E34A000/92C78BB3DCBBC3F7.yaml | 16 - variants/oc/switch/.PatchExtractor.nro.star | 0 variants/oc/switch/PatchExtractor.nro | Bin 0 -> 287172 bytes 1070 files changed, 29740 deletions(-) create mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches.zip delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100001019F6E000/D60A7F43A98034BE.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100001019F6E000/E13F632FC2A66EEB.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100001019F6E000/F80EEC237D0963EE.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010000400F582000/02F2E5C8CBF5A92F.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010000600CD54000/78885A1CA987C04C.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010000A017F96000/1146A5AA87A93969.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010000A017F96000/A21FFE97D09DCE4E.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010000A017F96000/EEE598377C0A5966.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010000B01A452000/2E7487767D0CA0EE.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010000B01A452000/2F33996FD9C81253.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010000B01A452000/7C724F497564C027.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010000B01A452000/95761555A341B190.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010000F012936000/1570FE23108B93C4.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100011005D92000/A3A998AF3252D110.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100040016EE2000/331E3DFBDF650226.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01000400204FE000/2D22A87AE49C75AA.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01000400204FE000/A9DEA3043D6E0060.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100041018810000/B8BE1CFAE53CAEBE.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100047013378000/7E65E5BC3564BE46.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010005001A8CA000/F87BEAF2C5CE13E3.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010007400FF24000/090B1F7F7AF35D00.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010007B010FCC000/4EEA2970DF38ECE1.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010008301AA96000/2A5244CCB17B44AC.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010008301AA96000/5BCA5C20C8F8A9B4.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010008301AA96000/612E3D607D2A13BB.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010008301AA96000/88CC45A195E0BDA8.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010008501186E000/30B812AB1BA3D447.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010008E01E32A000/823FE359B4A99A4D.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010008E01E32A000/AD4CBC4878008E1E.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010008E01E32A000/BBA39C65C1CC6463.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100092021C80000/2A4A71E176DAA356.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010009D018A06000/012A8C2C413E79B8.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010009D018A06000/26C1E658E9B5B612.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010009D018A06000/2EEE840599DC7021.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010009D018A06000/33614E4F6B3267B3.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010009D018A06000/3889588A60E1F399.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010009D018A06000/3AAA28C9CB8367B9.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010009D018A06000/46094C03E2EC668B.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010009D018A06000/520620FBA0B196A3.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010009D018A06000/C2F2C4B700B30598.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010009D018A06000/CA61076D0CE6670D.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01000A10041EA000/0C0CAC3FCF0F0BEB.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01000A10041EA000/4F7995092FAA5DC0.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01000AA013A5E000/B26DE1669B729335.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01000AB01F9C0000/2D2065AEBF94F9AE.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01000AB01F9C0000/657F40EEBD955F31.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01000AD01F94A000/505069EBC0B82A6F.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01000AD01F94A000/52DA46C0166A8643.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01000AD01F94A000/65A9705A4BB35AA2.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01000AD01F94A000/A31FE9B8AF1156D4.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01000B202041A000/725731C74E4CA6A9.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01000BB00E9D2000/4BC4A8A814FD46A4.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01000BD00CE64000/E417100FFEEFD1DE.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01000BF0152FA000/12024D08CCFD25EB.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01000C40236A8000/5C2942CCDF0AA6EA.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01000CE002072000/346959B36CD9F14D.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01000D60248D6000/196339C0BADE07C3.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01000DA017CF0000/6C46135714ABB870.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01000DF00EBBA000/5D3FE9C0FAA44B4C.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01000DF01234A000/5EFAB20F5C1F0F68.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01000E10133B2000/5EFAB20F5C1F0F68.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01000E200DC58000/9E6B0D0023F9DB3B.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01000F801EC5A000/33E7D684796F363B.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01000F9020CD4000/6ACDAEE7DDC5E503.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01000F9020CD4000/8593E6008F5A883D.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01000F9020CD4000/F140F141FDC4C331.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010010100FF14000/12F93E2DBBCFA54F.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01001040220E8000/336E56D09501A52E.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010010901AFB0000/3D3FEFC161B49AB8.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010010A01BBF4000/47A022F858BA09B1.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010010B00DDA2000/8A39E660F956BB00.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010010F01418E000/49CF6B0B0A62F9E2.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100111004460000/6D9EA94F8AAC00A8.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100118009C68000/6401F57C7D6D3728.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010011C00E636000/FAD1AF4EDC6DB267.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01001270012B6000/6D9EA94F8AAC00A8.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01001300232F4000/6070FC72448EE560.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100134025F8E000/81C9C793B5370E9B.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100149019460000/B9E42653FB44EF2B.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100154019A7C000/6D9F6C7B79F5197F.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010015800B178000/EB8A679B5DDD0060.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010015F018C3C000/9806FB67CE24E904.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010016A00AEC0000/5C9CCD358BE85FC9.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010016C00F474000/4BC4A8A814FD46A4.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010017A0128C4000/3D4E3A9252AA6C63.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100182014022000/56EEFA704373BDB3.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100182014022000/9151E53EE514B03A.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010018601E9E0000/31A37D73E22F1059.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01001890167FE000/512FB8C2D12C4F36.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01001890167FE000/5F7A2866D8E20BBA.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010018C01B106000/63B72CD5F2A90020.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010019B00BE72000/03B058B1F6BE7195.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010019C00E9CC000/4BC4A8A814FD46A4.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010019D01D736000/3BA6C7665F67A711.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01001A0011798000/66B2DEA98B5CDF65.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01001A700C832000/97FC79E063E26C9B.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01001A9018560000/DD425ECC07C305DF.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01001AD01ABE8000/E196E389FD9E0364.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01001B0019F9E000/9E365FE9EC3A52D3.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01001BE01908C000/C95F34910CE1CDC0.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01001BE01908C000/E1F81DC590FDE0B5.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01001BE01908C000/FE78C7B94C4E791A.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01001BE01E620000/D2EADA78AA71283E.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01001C400E9D8000/737E56D43D2C0B38.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01001C700873E000/C0F144F5139F542E.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01001CC01B2D4000/0DE3020411F4232B.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01001CC01B2D4000/26AB1CB54DD4508D.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01001CC01B2D4000/504EBEAB62E802AD.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01001CC01B2D4000/8D4FD57DB7D63120.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01001CC01B2D4000/A45BCB8A63C50DC8.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01001CC01B2D4000/A5DA93E6537350D8.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01001CC01B2D4000/C606C7DC1C0EC88F.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01001CF0190C2000/4C6727375D877B90.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01001D00186E8000/6133D5CC14F51B7A.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01001D00186E8000/C26E93197DEB4004.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01001D00186E8000/E2AFE5A73F5C0803.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01001E20203DC000/6D05923E7005E182.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01001E3017A10000/17F37A56B17DD9CC.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01001E400FD58000/CCEE412E679A2143.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01001E9023920000/169AD641E042A8B4.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01001E9023920000/4FC3CB13E1D3292E.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01001E9023920000/6656BA1B5B8AC30A.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01001E9023920000/8CFF66758D7BD507.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01001F100E8AE000/EB57CF3434044523.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01001F3018880000/DF556AF2E30073C0.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100207021C3C000/2C2D599E55912C6C.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100207023882000/7DE262BD1732DBFB.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010020B016EF4000/7E25622D50D562BF.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010020F014DBE000/2B37ED2A971948F3.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010021401ADCC000/A1E1EFBA68B846A9.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010021601C496000/7A450848CFDEC18E.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100217014266000/2F81A2EC9B298B37.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010021801DD26000/B2D4462B71536EC6.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010022A02008C000/F678FD2BB197125B.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010023001969A000/D40B81867A121EB0.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010023001969A000/F327FFD8C2E85895.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010024600C794000/3776E7BBC7C01E43.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010024700901A000/9CDFB0CD24CAE030.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100255016498000/12024D08CCFD25EB.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010025A01CD86000/D2A5A1FC6EEADF31.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010025C0145D4000/0CC82881FF112C6D.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010025C0145D4000/0FCB7D1E6E4D1836.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010025C0145D4000/0FF5CF27929E07F9.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010025C0145D4000/6267E76E9540F2ED.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010025C0145D4000/E82F8A34CCC706E7.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010025C0145D4000/EA4853C29547CBBC.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010025C0145D4000/F898CCE9C3A291AF.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01002620102C6000/7D1714279435589C.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010026E00CDF8000/A953B35A45BEA33D.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010026F013B3A000/5EAF1BB0E2B89AF4.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100272013014000/D1D421137AAE1A5E.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010027400CDC6000/4979B200D53BB282.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100276019E96000/EC983B9153629AC8.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010027B01E32C000/227837B490A51033.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010027B01E32C000/38171F8A5687B940.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010027B01E32C000/C7E4E6F4167C8E3A.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100285016010000/14C878ECCA9D7CB5.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010028901FF00000/EB58D577539E9151.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010028D005A3C000/0C0CAC3FCF0F0BEB.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010028D005A3C000/4F7995092FAA5DC0.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010028D00BA1A000/85E49C169A8B988A.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010029B0118E8000/799D1061182C1302.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010029F01BA3E000/F8EA898027152437.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01002A4021B86000/99519C9259122E4F.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01002A4021B86000/E5D70A1E288F74A7.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01002A501869E000/BFA92380757EF97D.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01002AF011D14000/D1B29E1ABDCD955E.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01002B00111A2000/C3CF52BF2B05D731.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01002B7013440000/A19E113723E5C32E.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01002B9012E28000/6C3F685C62070885.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01002BD00F626000/4C277E67AB50D547.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01002BE016054000/751420FADE402804.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01002C0015644000/3A3C781930CB8201.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/0542802E014A7312.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/08C88691FFA5407C.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/0F7616E6F5EE08CE.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/225B47BDEC7C2D4E.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/3DCE80782561A0CA.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/471546458FD9E43D.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/8D76B30C877FED66.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/9ACB108D8DC59245.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/A995EDA18F71EA37.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/E1426CF1C30E7CC7.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/E28441A322FE29BF.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/ED20E42E41B58D88.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01002C400E526000/1FF442C5ABEB0459.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01002C9022770000/2AD8CC7892EBF9FA.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01002C9022770000/2B18130BD191CAC5.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01002C9022770000/E5F70FFCBD0DD378.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01002D901CDB6000/A42569DBA6D326B5.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01002DB00DDFE000/4CCD2F6D331DD104.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01002E800E9D4000/B151A224A429F9A7.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01002ED00B01C000/31F61EC3A4FEFDF7.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01002FC012548000/2E7487767D0CA0EE.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01002FC012548000/2F33996FD9C81253.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01002FC012548000/7C724F497564C027.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01002FC012548000/95761555A341B190.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01002FD01A24C000/8F72E0D61C4BA0B1.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100300012F2A000/320A17744AEFD67F.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100309016E7A000/14C878ECCA9D7CB5.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100321017CC0000/D147CAEF2BC74574.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010032B01C6F2000/FEEA420683820CD5.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010032C00AC58000/2CDB9B9D70010E88.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010032F01F7CC000/DE7B50B9FEF89856.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010032F01F7CC000/F7EB23F0D8E5A933.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01003310159F8000/8C7A99CBD1AEA208.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010033501FF38000/B7F344920B6D140E.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010033801EF3A000/503ACC27B3F97603.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010035F022078000/7B53433FA04477FC.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010035F022078000/E363F4466EE5E8BE.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100367016DF0000/38896FEC1B4ADB1C.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010036E00FB20000/1DA748FC9499882F.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010036E019EA2000/6895FE7D0D1B8E2F.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010036F0201D4000/42A0B64E45AD9ABA.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010037401A374000/3C3A2E68DBD1BBEC.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010037A01F96C000/5B863A6EFCE084B0.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010037C022390000/96B7F9BD973D298E.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01003820186A2000/A5EC643318B3A543.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010038900DFE0000/E9578A470B175851.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010038D0133C2000/019FBFE7738EA314.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100393016D7E000/DC33AFEE8682A86C.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010039400E8D6000/D27FD8A515077F34.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010039501F11C000/B174F363C2823CBE.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01003980174BC000/217C9ECF258C0312.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01003990220BE000/820EF220126FF10A.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01003990220BE000/C17F9C48EEFAB9DF.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01003990220BE000/FE67FB035271B5E4.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010039A00BC64000/77009C1234634A4E.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010039B015CB6000/39DC785D9073C22B.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01003A70209AE000/2CE51030AF9800A5.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01003AE01AA76000/6C46135714ABB870.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01003AE01AA76000/85D00BDAADD369E6.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01003AE01AA76000/8D6606B544CBCBC8.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01003AF0200B0000/5F96AEDEA20AE78F.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01003AF0200B0000/742CA53262A767AE.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01003AF0200B0000/7F731AAE7DDCAF66.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01003AF0200B0000/E43BBBBFACE60867.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01003AF0200B0000/F678FD2BB197125B.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01003B90136DA000/1F936E043FB8C349.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01003BA01575E000/EF2694EA89E001DB.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01003BD00CAAE000/8B40EBBA7244C94A.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01003BF01E940000/5346BDF1EEC2BA4C.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01003CC00D0BE000/F6FB99E54347E740.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01003CC01BBA0000/D64B8283BD5CEA63.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01003CD01299E000/4232D493269475B2.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01003D100E9C6000/4BC4A8A814FD46A4.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01003E3014AFE000/69CACEEC5F01C41B.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01003E601E324000/4F41309B39EEBE5E.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01003E601E324000/6F49452BD0B343B1.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01003E601E324000/A6BD61CFB142E663.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01003E800A102000/283095029A5AB467.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01003EB01C2F0000/0D28F064B3A5D030.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01003EB01C2F0000/1EC3E6373D7DA9A6.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01003EB01C2F0000/4183AB952B599826.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01003EB01C2F0000/452F9C150D1D17B7.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01003EB01C2F0000/8286C091117CAECF.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01003EB01C2F0000/D152798E91A87AE7.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01003EB01C2F0000/F1E096F78DFB8263.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01003EB01C2F0000/FF46A0C56BAD0A32.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01003FB00C5A8000/DCDFA5A4AD9A175D.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01003FB012926000/D27FD8A515077F34.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010040401D564000/1053EA8AD2A50F15.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010040601A9B8000/1E965D5B338E3D05.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010040601A9B8000/9ACE779510EC93C9.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010040A0209DC000/A4A3B5A20B03B2A7.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010040C01D248000/43D0D0D68A22E370.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100416004C00000/01ACE43E724259C3.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100416004C00000/2847991952B3D7AB.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100422020BC4000/A179DD4F4BFB3A04.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100422020BC4000/C2D14E1A5A788D6A.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010042A013DB8000/8683E654CCD68852.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010042D00D900000/EC593A5F9552100A.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100438012EC8000/1A0EAEC3AE90B018.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010044500CF8E000/9B3DDF2FB9100E51.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010044700DEB0001/3DEF0E36AA8C6592.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010044B01E786000/2CF926BBD5D1AB4D.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010044D015F4A000/37C3FAEFC9A4C374.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100453019AA8000/2A720C7CE5C84905.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100453019AA8000/3F2425864CF22684.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010045301B86C000/1933FBAFE977FA75.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010045301B86C000/791D79EBD7A0115E.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010045301B86C000/D7A32C718E9D6363.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100459009A2A000/ACF717E72EA920C2.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010046000EE40000/8F6B002FEB5D0F8E.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010047000E9AA000/01EB7A6DE827BFD9.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010047401EA8E000/928AF9461536F5E3.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100479008552000/A03FD278F67CDFD2.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010047E01EA24000/6D05923E7005E182.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010047E01EA24000/728D92CB9E54CE7A.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010047E01EA24000/C0D9B410A09A4ADD.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01004800197F0000/F4685ACC91FEDB12.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010049B017774000/2F81A2EC9B298B37.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01004A001E32E000/0214CA2211DE8313.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01004A001E32E000/8E8BFFE66292CFF1.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01004A001E32E000/F7D1E815E44D0A56.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01004AB00A260000/DF3766A2BB651A3E.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01004AD014BF0000/D7A05D106FF46FC0.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01004B100A5CC000/4E7978E35F9D7490.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01004B2016E7C000/14C878ECCA9D7CB5.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01004BA017CD6000/4B86FC4FDF7B1A70.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01004BA017CD6000/5BE02E1373BDE2CC.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01004BC0166CC000/44D207EA6428E3F1.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01004D20219E0000/4583D73E326FFE7B.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01004D20219E0000/555E8872455F107E.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01004D20219E0000/6DE3725465A43249.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01004D300C5AE000/A6CE40DC3AEDB1BE.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01004D300C5AE000/D9BA7DB72FFAFECD.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01004D901AFDA000/D334BC060F1FA3AE.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01004DC00D936000/31CDAD67EA25CC16.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01004F401BEBE000/DF2D64FB63F1BD00.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01004FF021942000/4EAC4BED64458C8C.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01004FF021942000/5D738626CE19A40F.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01004FF021942000/DF48D885EB914AC7.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01004FF021942000/EBFF3A6C8EA30490.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100500012AB4000/118AA7B71E824B3B.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010050F00BC1A000/6BEC9B23B09DF46C.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010050F01DF9C000/11D6D6158B566A74.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010050F01DF9C000/25A4C89527E7A6E6.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010050F01DF9C000/456F89F80D657095.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010050F01DF9C000/5F765D2CC4CDEF1C.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010050F01DF9C000/7C8FE1FD610E1F1F.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010050F01DF9C000/C370209AECC8D2FB.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010050F01DF9C000/C59C89CCDF382602.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010051B0131F0000/E0E9D0429A2458E1.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010051C0134F8000/20503FA77FA416B7.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010051C0134F8000/389E38618E93A5E0.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010051C0134F8000/72F6F8B54276185C.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010051C0134F8000/BC99D4D0A9474360.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100521017B2A000/249EAB9BF046C5EA.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010052701BB0A000/8322528255D2CC63.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01005270232F2000/51198224D1A8F16C.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01005270232F2000/FEABC8D141EECCA5.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100535014D76000/8CCC67A5A75CB8E5.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100538017BAC000/A2DDF741D0E37D15.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010053D014C44000/086367BD573D1899.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010053E002EA2000/76EC789B99A25BA5.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01005420101DA000/134EC3D8BE75126F.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100544020572000/153DB27728D41305.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100544020572000/1CEA83A1E6684665.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100544020572000/29F67D61B0AD1500.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100544020572000/3B2CB1C8865E7B1E.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100544020572000/540477886936CDC5.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100544020572000/5E43788065113530.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100544020572000/9B9CCD97EB6EF789.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100544020572000/A947DDE7826A3562.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010054A0085CA000/325E49E94A030B7E.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010054A020574000/6CB3E54C5F648410.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010054A020574000/EF85880A244D33EC.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010054A020574000/FB3497202E5934FB.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/0181E008CA25A289.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/2213810D247A7293.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/25636E9F2595CFFD.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/27BDC0166D5D5A1B.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/39296BB1FD4A3F20.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/641E15F899C4A057.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/668645A62391CDDE.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/7E587D3ADCFD66BC.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/8AB0BBEBB5F628E6.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/A2932DA7A96EC054.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/AF76EBEDE6A89F89.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/B8264CDBC1CBFFCF.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/C3A7D284DA741DBC.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/C953D6F477604662.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/D404E90111F98D16.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/DF4B53A8F7EA6FB6.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/E60B4F857609BD49.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/EB8D70AB59D8A4C2.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/EE92CAF016873D08.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/F51888C0188BFA18.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/F57C74294E14BDCC.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/FF365FA7E744CDDA.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010055200E87E000/9F1B5FB4C53E321F.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100559011740000/D2FD97779381FB9A.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010055B01AA08000/4CBD150A248DA39C.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010055B01AA08000/E196E389FD9E0364.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010055D009F78000/89048449BA238C8C.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010055D01C8D4000/444303671674DD91.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010055E00CA68000/B70F06EAC87FA2AF.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100567011972000/97313EA9E2BD0EC1.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010056B015FE8000/E43525F22282A477.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010056E00853A000/746F0D697EEEE2DD.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010056F00C7B4000/B5B9C7BB8D9716F6.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010057D006492000/67DACC049CEEE858.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010057E00AC56000/2D5B93C856CDF009.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100582010AE0000/B3967105033ACC08.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010058301BB98000/4779B3A56B655418.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010058301BB98000/CAEAFFC2CD152394.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010058600E530000/BD5F1ED30FDBA245.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010058C01F3EE000/301E4A1FB0BA1575.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010058C01F3EE000/A15393F630A9767F.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010058F01DF8C000/1670D126B5E8EE66.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010058F01DF8C000/4CD22960CFB56AB4.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010058F01DF8C000/BDB53001D5CAD0AE.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010058F01DF8C000/E6B427227FED8411.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010058F01DF8C000/F0787926C4CFF8F1.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010058F01DF8C000/F5E599C889DF733A.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100592005164000/83A6B710A3F3F4F9.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01005A2014362000/F00EFE6846627B4A.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01005AB01DAD0000/50F47EC19A33A73E.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01005AE0209A8000/293D73083149473E.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01005AE0209A8000/2D22A87AE49C75AA.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01005AE0209A8000/36B692C0FA9F6F46.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01005AE0209A8000/50C9028B61A0BB7F.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01005AE0209A8000/71C5F3CB333F1542.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01005AE0209A8000/A9DEA3043D6E0060.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01005BD010872000/496A2F5A9CE4FBEB.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01005C7015D30000/110D8FB47B55EA19.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01005C7015D30000/9E7FB72540D748BA.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01005D10128D2000/1A876E8881CEFBE3.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01005D2016934000/090A100AA49CE00F.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01005D2016934000/49F6F257348A42A1.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01005D2016934000/4D6E50FF58BF7486.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01005D2016934000/579CCC60D8E3DAF1.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01005DF00DC26000/029C2837B0EEE8A9.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01005E101122E000/44AA379DE2A71A9F.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01005EA01C0FC000/3AEBA262CC1D26D3.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01005EA01C0FC000/C8CDBFD621A6B29B.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01005EA01C0FC001/D91C67509C6AED8D.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01005FD017E60000/3E961285846C72A5.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01005FD017E60000/7C992B6A003C599F.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01005FD017E60000/B8630C6EE3A22FE8.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010060700AC50000/E853C44FDF18B88F.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01006080117C2000/DFC7E8979528DE44.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100626011656000/761CD556AB357C87.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100628004BCE000/81DA4F9E1E961CA6.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010063B012DC6000/68FED4970010ACF3.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010064101356C000/652D04C4BD51AE83.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010064400B138000/EB8A679B5DDD0060.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010064C01A9BA000/1BA8D8FD3897F22F.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010064C01A9BA000/E73AB32BD1B16098.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010064C01A9BA000/FB852EECDE7A745D.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100650018FE0000/7A450848CFDEC18E.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100651014DBA000/789C2939A757C0CD.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010065A014024000/6FB56071CCB321B6.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010065A014024000/B898981D361D0201.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010065A01CFB6000/0BB69E112916D851.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010065A01CFB6000/B70D6561B718C8E0.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010065D012FA0000/C403B87FCDAD7604.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010066101A55A000/338C569A607B7C30.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010066101A55A000/911284C45A26DD34.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010066101A55A000/F3FFA17B5E56809F.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100664016D5C000/D45B9332B5742A70.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100664016D5C000/E47783ECB944D857.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100668022DF4000/DCBCB511177F87F6.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010066C024AA8000/10F5B0B223490693.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010066C024AA8000/FBDD7ABB7B1DB6A9.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010066F01A0E0000/153D5A2ABB9C0BA6.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010066F01A0E0000/2C58E765387F9DDA.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010066F01A0E0000/58C1B2EA8257D5F1.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010066F01A0E0000/768428355C994280.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010066F01A0E0000/B5DCAAA828DA5034.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010066F01A0E0000/F09EAE79357E3032.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100670014482000/824B38A25986B2AB.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100670014482001/2B59D6C677258A2A.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100670014482002/0AE4D1770B196094.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100670014B3E000/372AB37327DB2C31.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010067B017588000/E5EFB5ABA3601B97.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100690020FBE000/2735E564A9BD3DA3.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100690020FBE000/349E9751D50B3B88.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100690020FBE000/3768668BABF5F551.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100690020FBE000/84C1B1AE29550FC8.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100690020FBE000/8FDB10262446CB3D.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100690020FBE000/C26EE97D7ECDE83B.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100690020FBE000/CC93EA5C0A2F96FE.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010069100B7F0000/A953B35A45BEA33D.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010069500DD86000/5AD84EFD9D28FDDE.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010069C01AB82000/0A4F14A5C12F470A.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010069C01AB82000/541F680F325BD5AC.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010069C01AB82000/E1BD1040BFBDDAFF.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01006AC01F630000/7C37B073B19F3CCF.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01006AC01F630000/B70551B5A2D0F15F.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01006AC01F630000/FFF55266A618D06A.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01006AE02236C000/43B775EC81DB2B63.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01006AE02236C000/DBD5C9EC799E65A9.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01006B4018ECA000/B8BE1CFAE53CAEBE.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01006BB0203CA000/F8FA82D6A1BFE328.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01006BD0095F4000/019FBFE7738EA314.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01006BD018B54000/0A1AC10CCFE46061.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01006BD018B54000/892E6C4FE0D850B5.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01006BD018B54000/AFDEB128252898AC.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01006BD018B54000/B771B34505774A8E.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01006BD018B54000/D53CF6573CAED4B1.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01006BD018B54000/FD3AC4FFB1B769D5.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01006BD019A78000/F54FC539CAF24C64.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01006C10131F6000/0F73F1D52820F90B.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01006C300E9F0000/1719AABFA5EAE42B.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01006C600E46E000/6D5DB3434CCF63F2.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01006C7021024000/03DBE839CAA0632B.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01006C7021024000/499A85D046C70186.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01006C7021024000/72D353380DD03B52.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01006C7021024000/BD9B46CAE607D7E8.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01006CB010840000/9F2F187D1C6E44EC.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01006CC01182C000/C31E59266A218855.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01006D0017F7A000/59874C9B530095AC.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01006D0017F7A000/BF0607AC795B593A.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01006DC010326000/05DE5A7F20BD1532.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01006DC012B00000/EAAB46ED1E4989C0.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01006DD00FE16000/CA77083E259D87A2.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01006EC00F2CC000/F199FFD7D83F399E.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01006F301AE9C000/6C91A8A476E70C5D.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01006F301AE9C000/97D2B53D2C0B35EA.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01006F301AE9C000/B46B22D9AC7E567B.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01006F301AE9C000/E9A887A36762C526.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01006F301AE9C000/F50C38B64DE532F7.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01006F301AE9C000/F5ECD5701434461C.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01006F301AE9C000/F89171E031F95ADC.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01006F401D934000/66FCB9B306005BBA.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01006F401D934000/8AA7D10343CB3870.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01006F401D934000/D71970AAA5D34DD0.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01006F401D934000/E3FBEB5A9C7788CD.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01006F901C7F2000/406F004D76F961F3.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01006FC01B540000/B91475B2ADE6F74D.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01006FE016FB2000/191B397CA0310A18.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010070A00E9CE000/4BC4A8A814FD46A4.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100711017B30000/2C7A626BA5F25D5F.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100711022E24000/15AFE82282E0EF30.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100711022E24000/9646E1065A7E897B.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100711022E24000/98C2DD2B041D3CCC.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100711022E24000/BCEB97447A39F9FE.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010071800BA98000/173E2EDEA9E5D940.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010071F0228CA000/9BA2F2849F9D9FDF.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010071F0228CA000/DE26B43C3D21B3A3.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100727018A10000/2EEE840599DC7021.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010072900AFF0000/FE757B10B45C3444.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010072E01CE0E000/1BFD68BCB8481BC9.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010072E01CE0E000/42350FCC758887D1.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010072E01CE0E000/53C0F2107412F0E2.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010072E01CE0E000/645C3BE90D4ED3D5.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010072E01CE0E000/85F60F87D19B5270.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010072E01CE0E000/8A9EBE9FC405A31C.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010072E01CE0E000/A245DABD986CBC85.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010072E01CE0E000/CA23556FE5EF2EB1.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01007300020FA000/4B159F0F7A360669.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010073301E7E4000/55DFB4A664D8B596.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010073401175E000/E8DB38F170B0149D.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100736019D8E000/72AE4B77322A5B1B.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010073601DF1A000/D36459588F85315D.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010073601DF1A000/E8BF195297B63BA2.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100739018020000/B75E7D3DB78D69C1.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010073A010430000/2972E95EEFF95144.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010073B010F6E000/2619FF1E39C93BAE.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010073C01AF34000/2D99FA4793E426C3.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010073C01AF34000/675538722EE1FACB.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010073C01AF34000/B3DFF885ABB66B5C.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010073C01AF34000/C6F56735E3837278.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010073C01B7FE000/F294A4EBE966E8A9.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010073F0197DA000/955DF07AA5F4497B.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100742007266000/A03FD278F67CDFD2.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010074200E910000/8E82D24A9B7504FB.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100748021808000/D1D3FFB94AB458B4.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010074C021210000/1A371F609F4B6172.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010074C021210000/1D9F49E321B8C939.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010074F013262000/82D187FE9EF9BE92.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010075000C608000/F1D71307616AB7E4.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010075101EF84000/109D974E180A5AA1.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100755017EE0000/061A7341077C0974.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100755017EE0000/546820C12D88850D.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100755017EE0000/66BC954F5323014C.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100755017EE0000/74BCAC96835DB9AE.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100755017EE0000/9DBA6AA32721CAB9.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100755017EE0000/A697413E1DA7851A.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100755017EE0000/C561C6BED2F0B348.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010075A00BA14000/6888027D61CF603D.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100760020BBA000/734C4A6ED33AE189.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100760020BBA000/8E3D8436FCAA4C78.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010076F00E9C8000/4BC4A8A814FD46A4.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100770008DD8000/FB08F1D20FD1204F.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010077A012A5C000/F5ECE696120B65B3.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010077B00E046000/D2775FAFCF4835CB.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100781020710000/1FF44387A22D39F8.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100781020710000/48D35EF3C7EFBF5F.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100781020710000/C7BD9BFC5F202073.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100781020710000/CEDA530B146C0260.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01007820196A6000/37531419DA7654EC.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010078C01769A000/7BA282E94D34C620.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010078D000F88000/1B58983BDFAE165A.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010078D000F88000/56405C9D6C8C0A6A.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010078D000F88000/60EF5AF2F6E5231F.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010078D000F88000/7640CE319C043D56.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010078D000F88000/81E15238E2B6AABD.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010078D000F88000/8263E738648A23E3.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010078D000F88000/82C912DDD4663022.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010078D010BD6000/DFC7E8979528DE44.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010079500FD5C000/6B0B26802F0DAAAF.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010079C017F5E001/F47C697C2B59443B.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010079C017F5E002/BD5CD5189BC90093.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010079C01CFA6000/D1D3FFB94AB458B4.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01007A3009184000/928EFE2954F68055.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01007A700A87C000/88C035C2E44076ED.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01007A700A87C001/F7A872504BDA3100.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01007B0017C90000/55DFB4A664D8B596.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01007B301CFBE000/7E20C8548DC38F3A.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01007B5017A12000/4A5D86DA05A4E7BB.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01007BE01FCC2000/BDDD7E8FA07C8C75.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01007BF01A86A000/21502D0863ED6F58.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01007D70145F4000/E8418C6B4BDCC1EE.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01007DE016E9E000/6348715E851F18EE.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01007E3006DDA000/D55608916FA56C18.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01007E700DBF6000/29E1CD0FBB24697E.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01007EF00011E000/8E9978D50BDD20B4.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01007EF00011E000/A12F75F49B36F4B8.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01007EF00011E000/DE0B6AC4EFC1DDA7.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01007FB010DC8000/3C1DC69847A35C30.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01007FB010DC8000/D3744AF2C376CDC4.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100801011C3E000/C4DF04F647BDC727.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100803005D52000/62B7F19804BCB70E.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01008120128C2000/3D4E3A9252AA6C63.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010081E01A45C000/25D3C2E9040D1A9A.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010081E01A45C000/36C7E946E6C11C8E.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100821020BBC000/D45002D206976B20.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010082901D6F2000/FCA830BAE649B898.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010082F015576000/8BFBF5B8A7098443.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100830004FB6000/40F973CE3B5EC8D7.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010083201F234000/A6F7BF79EBCBCC70.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010083501AB36000/0959D87753F9FED4.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010083602099A000/B174F363C2823CBE.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010083A018262000/59AF76C13F680B7C.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010084F017B32000/2BFF5F7711EE6C9F.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/0C4BD6CA532E589C.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/184D48D1AFF6A941.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/1FEBABDBBDE0228B.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/22D0D857A4DAEBBC.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/252A2FD2AD6A13FE.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/351B77A43CF31BF4.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/4995675B5380FA50.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/538D60FF5A324C92.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/63C5A645F3E5985A.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/6488A67709988BD7.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/8F6376506EA4E8D5.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/909C5FD598A092B1.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/9761E793CBE5895F.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/9AA64F897E1D50BA.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/BC6CA2DEA3306522.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/C534121E724B33A1.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/C9ABDB1674CBED09.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/CF94B485A949F8D1.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/D5C5F47DFABD0812.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/DEA84284F054C693.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/E152A4B27D349B17.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/E9DA1530FB30E130.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/F9C32ECFD8646E3A.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/FB1995474546F7C0.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010085401A454000/2E7487767D0CA0EE.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010085401A454000/2F33996FD9C81253.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010085401A454000/7C724F497564C027.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010085401A454000/95761555A341B190.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010085500130A000/32C590B064956546.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010085500E9D0000/D27FD8A515077F34.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010086C00AF7C000/C7DAB27F22ACD2ED.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010087800DCEA000/6B0B26802F0DAAAF.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010087E01FCD6000/ACD959FBAECADE00.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010088801B324000/9B743181AB8A26F9.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010088B01572E000/E5AD28BC6E790692.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010088B017734000/288908CE7F6177CC.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100890021AE2000/55E2BD1FFCD31993.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010089A0117D4000/9B7A3AC5AF1A3B0D.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01008AF016240000/217C9ECF258C0312.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01008AF01AD22000/222C0A2546723943.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01008AF01AD22000/8F3E77E1322E9F6F.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01008C2014340000/F00EFE6846627B4A.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01008C8012920000/8C93B930348C9787.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01008CB0156BC000/7735C8DD89D145F2.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01008CD0172D6000/2B1C8B24F6744644.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01008CD0172D6000/B9CC2F4DE53D4F94.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01008CD0172D6000/E711B99C30E041F7.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01008CD0172D6000/F716D367A6D7F5BA.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01008D0016AF4000/FB827BF029E0778A.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01008D100D43E000/B6CFBB9BB8F8A2E7.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01008D4007A1E000/C3D46BB3C7059DB1.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01008D4015904000/CA77083E259D87A2.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01008D80148C8000/BC82DB38671F8468.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01008E101E868000/42AD50169E847BA2.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01008E101E868000/CE6953FB28A66265.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01008E401E6D0000/C124FFD193F533B4.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01008E401E6D0000/E08769D5B56A5A25.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01008F600F2D0000/EB57CF3434044523.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010090100E334000/05D2208140190484.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010090100E334000/CBFC09BA9105CD4D.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01009040091E0000/F2FE5EF877839F4F.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100906014C3C000/EAB1DC1D53E319F9.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01009060193C4000/B880EEE5B8946289.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010090F012916000/D3DD5B220DCEB626.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010091901E440000/8021F22E7A401A3E.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010091B01A438000/A735894277FF90F3.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100926016012000/30997D8F7566EBB5.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100926016012000/561B0F485E699E4E.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100926016012000/7FF42DE6AA57290B.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100926016012000/8EACFE3E9E92B0FE.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100926016012000/B2395B882C2BCB24.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010092A0172E4000/C4067E8CB3258656.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010093C01F256000/CABB3B5447C2F79F.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010093C0215B4000/26350BBA224575AE.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010093C0215B4000/5AF690F4A8BFCC67.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010093C0215B4000/7816CA5FECA60315.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010093C0215B4000/D1D3FFB94AB458B4.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010093C0215B4000/EAADF33F510C5853.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010093D00CB22000/E8418C6B4BDCC1EE.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100947013122000/9FC46F388F6C684C.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100950012F66000/D1B29E1ABDCD955E.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010095301AAEE000/FE78C7B94C4E791A.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100956016464000/F9C83728910E28A4.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010095D012E5E000/929D9160BA57A570.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010097000BC10000/FB4239AA962B429B.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010097100EDD6000/7F4216B6E784A4B2.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/0E7A0A7276477C53.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/2E3EAEB4B6834BEF.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/37CBC5751D80E70E.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/448820AF8E20D65D.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/456BDB6160D317A3.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/491561854A6DC444.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/4983F1C36957B7E5.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/500A59C7C5A7C1E8.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/54300203FF8ABCC6.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/682B1552A9C571C9.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/741C1E11C3A1FD02.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/757760621154BA5A.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/8ACF8D236ADAB16F.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/AE7422A20BC9C3B0.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010098A0128C6000/3D4E3A9252AA6C63.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010098A02288A000/7E610F688F92412B.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01009970122E4000/AE2768797E3337EE.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010099900CAB2000/F2F739A2F1CAFF72.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/010099C01896C000/60B9AE6094566A23.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01009A5009A9E000/069E3EFC16365FFD.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01009BC00B872000/53116900DC7BBE11.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01009D200952E000/028C5AB881F17582.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01009E701356A000/72E8F20EBBDBA296.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01009E702225A000/07E20F126ABEFF78.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01009EB00EBAA000/4BC4A8A814FD46A4.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01009EE0111CC000/E1F0CFC02F449EF3.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01009EE01EB02000/63A4CF08E30A56B1.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01009F201CFBC000/0BB69E112916D851.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01009F201CFBC000/B70D6561B718C8E0.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01009F8017F48000/69EE5F71F187EAA9.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01009FA01FF6C000/1218D04A7C77F2DA.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01009FA01FF6C000/6CFA2609A2D00FA5.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01009FA01FF6C000/EBDE239CB7780F58.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01009FA01FF6C000/FCCC4FDA392C1C16.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01009FB0172F4000/F712547C68C66A0A.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/01009FE010876000/407978D722447B25.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100A0800E9C4000/D27FD8A515077F34.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100A0B018A72000/5EABF05A814EBB1B.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100A0C01BED8000/7E06539B5874B9C4.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100A21017C42000/01CBDFDED43B80F5.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100A21017C42000/3980F76403AE4CF2.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100A21017C42000/693314C08EA157F3.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100A21017C42000/807A2202464D445B.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100A21017C42000/B24C86A2B02DE960.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100A2601720A000/DD6F5AF530CC2072.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100A2902051A000/05ADD0D5FD677639.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100A2902051A000/3D6E4BDE905836BC.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100A2902051A000/779FC981128BA290.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100A2A01A026000/008F995D1A63B383.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100A3501946E000/0D9649011312F62E.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100A3D0199AC000/BCC955FF933FEF2E.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100A55019C38000/B9DB6040F70BE58F.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100A5A020D5E000/16346DDFF65961FF.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100A5A020D5E000/8B3609ECB49DBBED.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100A5A022B14000/2E049E21624484CF.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100A5E014196000/0E9D849EF47198D8.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100A5E014196000/D24A46A2618C9E38.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100A6301214E000/8C08B9719E085F91.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100A6B01900E000/9E0901B84058B5B4.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100A7101B806000/BCC955FF933FEF2E.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100A73016576000/4E2AA28721AFF2C1.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100A78021ADE000/140809A5980FB2E2.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100A88012504000/0D17FD76B32F3040.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100A88012504000/BCAA04FAF88EEA4A.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100A8A013AB2000/1EFB6879CFAD7DD3.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100A8B00F0B4000/92511355705EA8C5.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100A8E016236000/82AF4E16BBC0BEC8.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100A9001C042000/3565E26E8827C846.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100A93016BF4000/770A07C35E631CB2.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100A9400C9C2000/33463E11899166BB.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100A9801180E000/B0ADB498E82BC644.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100AA400A238000/14D7D1537BD5A986.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100AA50138B4000/7E65E5BC3564BE46.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100AA60136D2000/A7F32A28D882D046.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100AA60136D2000/F73C6504D378C38B.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100AA80194B0000/3A8E744D8F65CDEA.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100AC601DCA8000/4584432786F462DB.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100AD0014AB4000/AC8C8EC9DB1A8EF4.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100AD10102B2000/D89FFAA2062E373D.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100AE7010434000/5915CDDDC4EEA6CD.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100AFC01A456000/7C724F497564C027.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100AFE01EC6C000/635E7DB24F2BCD32.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100B04011742000/C9A3DD7702075ECD.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100B0500FE4E000/951D09EECE122A47.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100B0701AA78000/6C46135714ABB870.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100B140178B6000/94EA2A7C7EE32EEF.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100B16009C10000/490D681909609015.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100B1A00D8CE000/3AAA4D3E5A1A0F88.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100B1A00D8CE000/B059C2C77AD834B8.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100B2002330E000/637F8C946F7C512D.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100B2002330E000/AF42903B754D4859.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100B2301F4A8000/BBEA8745A7893750.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100B2301F4A8000/C4DD7E5256163FF1.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100B2301F4A8000/FF8EFD0E0E71BB03.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100B28014132000/810CBA3D7DB83EC0.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100B2B00E7AA000/FAD1AF4EDC6DB267.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100B36008F90000/062189E9CF83BA5D.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100B36008F90000/09AD6947189FC6D9.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100B36008F90000/2F0040A6AA0866EF.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100B36008F90000/F9648F3865C8B1AE.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100B36008F90000/F99F0CE4FC4567ED.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100B4D00E6B0000/8B40EBBA7244C94A.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100B4F0196B8000/B8BE1CFAE53CAEBE.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100B6001E6D6000/6895E4F3E01808C4.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100B69017120000/02D54DEBD40AF215.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100B6C01CDA0000/01660DB6F4D0FA81.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100B6C01CDA0000/13824B290C931FE5.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100B6C01CDA0000/CFC1C6A56575F83A.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100B750198C6000/FF0DDCCB9C3B9375.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100B76011DAA000/C5D73D3EDAADACB2.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100B7A01386E000/39F1BCCB912A12DF.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100B7A01386E000/3AEEE2266CD84B1E.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100B7C01D480000/567A8410AE613885.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100B7C01D480000/8A942A9E838E5083.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100B7C01D480000/CCBDDB69038F76FC.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100B7C01D480000/E8EA74BE6221F2E4.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100B8401EED6000/D23C95A5A7AB19C9.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100B8501771A000/78BF042012CF9EE8.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100B870126CE000/019FBFE7738EA314.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100B8901AE88000/8AF36A929664A94D.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100B8A0136D4000/0F73F1D52820F90B.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100B8E016F76000/992787E2B5425994.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100B9801F872000/007EA5E2E2541C6F.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100B9801F872000/A588F7BB864AAD5F.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100BA502285A000/6114E040846B8E3D.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100BAC01E57E000/C55F6B8AEFA54324.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100BAC01E57E000/E5816E16CC5D72A5.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100BB000A3AA000/B61F280560A937D2.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100BC501355A000/7C9F89C3743F202F.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100BD000CB2C000/1F1363EC8CC83C73.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100BD10190C0000/45C15AE4450708FD.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100BD601EC3E000/3F1843C4FE400063.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100BD601EC3E000/5AF163DEF288F098.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100BDB01A0E6000/217A5C011269C81E.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100BDB01A0E6000/2600C6B1C5049FAE.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100BDB01A0E6000/A5513651324F6B73.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100BDB01A0E6000/EC2417892C9BCC7E.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100BDB01A0E6000/F5BE87C9F0715C3D.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100BDB01A0E6000/F7EA5CACC75067D4.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100BDD00EF5A000/B70F06EAC87FA2AF.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100BDF0197C8000/41F236A333370F55.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100BDF0197C8000/B7242BF0E5B17B6F.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100BDF0197C8000/FF53171B18C7701A.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100BEA0244FC000/4AC071F9B9540985.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100BEA0244FC000/9FD75204E7C17463.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100BEB015604000/B38D51E0391187EC.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100BED01E6EE000/87F1CEF6D52392AE.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100BEE01948E000/A3416631954C56C8.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100BF500207C000/461B14E505AB9555.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100BF500207C000/E380EB35262B4F9C.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100BFE00E9CA000/4BC4A8A814FD46A4.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100C09014530000/D92F465FE9920BB6.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100C0F0020E8000/D0798521F563E6A7.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100C11012C68000/4EEA2970DF38ECE1.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100C1101EE5A000/950FB0C3D58D6A7B.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100C12017BCA000/F01A4E60035AF15A.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100C1300BBC6000/59719CFCD1671B98.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100C1E01CDEE000/27BB06DD145F39F5.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100C2801CFB8000/0BB69E112916D851.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100C2801CFB8000/B70D6561B718C8E0.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100C2A01A730000/9F7C33E21279D3E6.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100C3800049C000/9D4C86E6EF74504A.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100C3C012718000/2CF52C8DA4468946.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100C3C012718000/BB2DDA80E83D0B2F.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100C47025F3A000/553262E59A96741B.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100C56010FD8000/5AD255D6667B6EB5.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100C56010FD8000/82051A9C802D0A4C.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100C5A013B7A000/1B98D227021142B1.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100C63021ADC000/C65BE8468BF1EC89.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100C6C010AE4000/FE211DBFAD6EA549.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100C7300EEE4000/54211726D36A8D9C.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100C75019274000/582ADD6F24A2A6B7.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100C8E01DD16000/3F2E96A4396944A1.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100C9801FEE6000/53F407A2CFBF5202.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100C9801FEE6000/AE90FD64E7B2FE1E.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100CA3014ADE000/372AB37327DB2C31.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100CA800F9B2000/A1E1EFBA68B846A9.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100CAF00B744000/FE77FFB8CBFB3A5C.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100CC00102B4000/8AFCBE6A930CD42E.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100CC3014886000/9265FE6C4DE9600E.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100CC401A16C000/ACF8E5931E38EAA0.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100CC80140F8000/9CB4490E8A718BAE.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100CD3000BDC000/5C598E5025BF97BC.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100CD3010AE2000/53EA0196A4AEB260.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100CD4012DCA000/B067B077906C6208.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100CD6023C84000/163585C5E3885A04.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100CDC013238000/D626F7A72AF54744.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100CE101B698000/0CE2AE41BCCADC72.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100CE101B698000/1CE1386EAF0C5EF5.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100CE101B698000/35FC3A7D13060376.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100CE101B698000/820B3E993D6FE8E1.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100CE101B698000/9035B7A14BADF977.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100CE101B698000/AFE59FDFAC191EBD.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100CE101B698000/C4950585861A47EE.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100CE101B698000/D07D96A610514C45.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100CEE01D23C000/76B6E5E830A43D97.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100CF3016BBE000/6A8373EFB7B2BD5D.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100CF401A98E000/5ECFB8F85105FE3C.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100CF5010FEC000/A1CE2940D813ACAB.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100CFB01CDCE000/F678FD2BB197125B.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100CFD01517A000/2438B00670539268.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100D09016C6A000/4710B51EB3A3C05C.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100D1202322A000/89E4C9599C96D7DE.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100D1202322A000/E04F5D58727DDE13.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100D1501ABAE000/086789EC0FDA4BF1.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100D1501ABAE000/2B7E5D5B9A730F77.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100D1501ABAE000/4B7F793B8355C016.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100D1501ABAE000/9A2DB2F402A31811.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100D1501ABAE000/C58AA3A366F82F70.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100D1501ABAE000/DCBE53FDF98752AF.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100D1F00EB72000/8B40EBBA7244C94A.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100D210177C6000/9510D677DCCE4447.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100D30010C42000/682F4A502035678D.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100D3201B808000/BCC955FF933FEF2E.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100D3801E6CE000/ACCFF102CED838CE.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100D3801E6CE000/E3A3FC8EEC76A4FB.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100D3C010DE8000/59159483CF88330F.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100D4600D0E4000/899B8B12DCD0864F.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100D4900E82C000/85C362CC9790F0ED.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100D4A00B284000/2B70B1A7B478FCA3.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100D4A00B284000/44E0F3E8F4996F55.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100D4A00B284000/D1E3FFBA414F4929.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100D4A00B284000/DE62C644228E63CC.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100D5501522C000/54E89AF3414E549A.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100D560102C8000/48681F1D90704F6C.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100D5801E904000/2079893CE8402E04.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100D5801E904000/89349071D2B0BFF7.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100D5801E904000/CE493FC8CDD3D7B2.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100D680194B2000/9A257FAB83444214.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100D76006EF8000/2847991952B3D7AB.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100D7700AF88000/F5AC009011277359.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100D77019324000/A52C9938956331C9.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100D7800E9E0000/92C25172D38DFEDB.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100D7C01F254000/94B4FA4F36E01BE3.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100D7C021496000/23E85FEDEC96439C.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100D7C021496000/5D63D46226DB106F.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100D7C021496000/6D560144F6B09A98.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100D7C021496000/7926A67119144CFD.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100D7C021496000/E9A189C0CA87A30C.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100D7F00FB1A000/D871B992E95B71C5.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100D8700B712000/C56E6F514FADC5C5.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100D9601A994000/28ED06F94D767478.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100D9D021782000/D1D3FFB94AB458B4.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100DA201EBF8000/10844A7A20C5597E.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100DA201EBF8000/21F90AA03BED43F0.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100DA201EBF8000/EE2CAB96FB6BEDA9.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100DA801624E000/0909B4AC280D9D77.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100DAE019110000/0248DC99035AD28A.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100DB1017CDC000/2C7A626BA5F25D5F.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100DB6020CCE000/0A0630C01D7130B7.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100DC2020C50000/4A64A3713EEA60CA.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100DC301186A000/EE295EAAEA7D31E4.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100DC9020B30000/3F6808C5518371F9.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100DCA0064A6000/79E5950FFA85ACF6.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100DCF0093EC000/71873FEB4648FA39.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100DE302439E000/C4E2284BFB7D534C.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100DE600BEEE000/A8631EDCC0013045.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100DE70085E8000/F18ACDA7A11CB287.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100DE90162A0000/0BBD86F62F380844.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100DF301FA3C000/BBEA8745A7893750.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100DFC00E472000/448C08A9533F3CAD.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100E1C0148F8000/5EABF05A814EBB1B.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100E1C0148F8000/77C053D779EE97F6.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100E1F013674000/E9B47349177722BE.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100E2701A888000/8322528255D2CC63.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100E2E0152E4000/13F322A6161F787C.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100E3401D660000/FDBEE885A65A2B92.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100E4900D266000/85BF83CDD25CC542.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100E5600D446000/C32B29CB5FBA96D9.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100E57010542000/3FB33205C25D3436.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100E5900F49A000/A8BA2A8F93AAE647.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100E6300AA3A000/AAC6FB02E03062EF.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100E63013E60000/0C8DC9D899379FA5.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100E66006406000/AA4277E6A92FEBE6.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100E66010ADE000/45CE2B6625A35771.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100E67012924000/B151A224A429F9A7.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100E6900A5A8000/A184B59D5091B68A.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100E6B01BD3A000/0B00B4DFAE47EBA3.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100E6B01BD3A000/27AB93A086868C70.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100E6B01BD3A000/393323C7FBCBD72D.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100E6B01BD3A000/59C5C45EF17ACADA.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100E6B01BD3A000/6A2E388EB364D4ED.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100E6B01BD3A000/9558FFD5CABC4612.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100E6B01BD3A000/C9D5E4BE40E7EB66.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100E6B01BD3A000/CB3C7EF8E279A22D.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100E8401FC8A000/A21FFE97D09DCE4E.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100E8500AD58000/07650FD5E5E2B82C.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100E870163CA000/621EE66A6743D750.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100E87017D0E000/ACF3FF125C2A3E68.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100E9001A94C000/57B6B2062EC8C38A.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100E9001A94C000/ACBD89C999804FD2.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100E9400FE34000/33DBE39C8A83F1E6.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100E95004038000/F77F1559371C0EC6.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100EAE00D9EC000/0FE6747D03EBA4E3.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100EAF01527E000/AB75C103EEC0D5FC.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100EBE020BC0000/386C265C45562002.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100EBE020BC0000/6C434B4568552ADB.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100EBE020BC0000/D3CA3F7A4AE6F9A0.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100EC5013ED2000/3C1DC69847A35C30.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100EC5013ED2000/D3744AF2C376CDC4.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100ED7012DB2000/1A971CC40B6D5B3F.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100EE00205BA000/135595BF76F46B1B.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100EE00205BA000/21B3E4EA75F16551.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100EE00205BA000/AA3EDDE660D630AD.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100EE00205BA000/E7011BF08747297B.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100EE00205BA000/F2D03CFFB8DE5E4C.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100EF401D9B2000/2F723E9FD78D184B.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100EF401D9B2000/35FAA72E03DDE0D1.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100EF401D9B2000/9BD042D73D2FC2AE.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100EF401D9B2000/F9248820D4E4406B.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100F0400E850000/85C362CC9790F0ED.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100F0401C2BC000/38730D109E48050C.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100F09024254000/EC30FA360F7BFF02.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100F0E01753E000/217C9ECF258C0312.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100F1101BB9E000/171806C35E4152E7.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100F1101BB9E000/5A2EE9B7315F91E5.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100F15003E64000/1953770037ACC52A.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100F18023E72000/14A66A472139D638.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100F2300D4BA000/DB17131624D04A9C.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100F2600D710000/4CCD2F6D331DD104.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100F2C0115B6000/5CB42B1CF25469FB.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100F2C0115B6000/6265F94D606242CE.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100F2C0115B6000/965EAB9CEB8EB867.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100F2C0115B6000/9B4E43650501A4D4.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100F3200E7CA000/EAA0B789264F2A75.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100F3400332C000/E3938FA78579C1CA.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100F4F014108000/2284DFB25F387719.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100F6701FED4000/7CE83658C7B53BB6.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100F6701FED4000/EBB5459731354538.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100F7201D1B0000/3BBD72F0EB13C1AE.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100F7201D1B0000/BF3F18101CBCFB33.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100F7901118C000/668FE05AA1AAC5A1.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100F7E00C70E000/0C00FC37B0610FBD.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100F7E00C70E000/1C42BC734E792AFB.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100F7E00C70E000/2980E59C32A0E147.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100F8100B982000/3CAC2B84D43AF415.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100F85018A14000/2EEE840599DC7021.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100F8D01810E000/33DBE39C8A83F1E6.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100F8F00C4F2000/BC714E2D7D32AB41.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100F8F014190000/AF7114F019CE6E1D.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100FA2019AC2000/91CE601F6A7174CF.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100FAD01861C000/D84426C8D6B8D947.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100FB70133C0000/019FBFE7738EA314.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100FB90103DE000/4BED8F28C0F34C86.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD00F5F6000/5EFAB20F5C1F0F68.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD013AB6000/038858A1EC679156.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD013AB6000/0D96442AC907A3F8.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD013AB6000/1B45F85E3DE5615D.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD013AB6000/3E9AC9266BB21FC4.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD013AB6000/44C6A5004C499464.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD013AB6000/53531030A4199B74.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD013AB6000/54551AEABF6E1F41.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD013AB6000/8C7A99CBD1AEA208.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD013AB6000/9976A5B49537F7D7.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD013AB6000/B37F6B200EF31DFC.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD013AB6000/CD9E844E29E8CA80.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD013AB6000/EA6728F9AE46C055.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100FC10159EC000/0AFE1AE664D9AFA1.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100FD0014B76000/76EB8E0320472553.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100FD101186C000/BF0088C59D7E97C0.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100FD70134FA000/4246AC9E465556D6.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100FE201680A000/8F2536786EECCEE5.yaml delete mode 100644 variants/oc/SaltySD/plugins/FPSLocker/patches/0100FF500E34A000/92C78BB3DCBBC3F7.yaml create mode 100644 variants/oc/switch/.PatchExtractor.nro.star create mode 100644 variants/oc/switch/PatchExtractor.nro diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches.zip b/variants/oc/SaltySD/plugins/FPSLocker/patches.zip new file mode 100644 index 0000000000000000000000000000000000000000..cc4650aa270c0388c086005e0bde38cfb8834515 GIT binary patch literal 719864 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 I6>zW0}Nwhczl5AQ0hOS!1gx0h% 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%0DGFib4n>o5!TyC^byuJwzx-#xX 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 literal 0 HcmV?d00001 diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100001019F6E000/D60A7F43A98034BE.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100001019F6E000/D60A7F43A98034BE.yaml deleted file mode 100644 index ce082a8..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100001019F6E000/D60A7F43A98034BE.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Horizon Chase 2 1.6.6 -# BID: D60A7F43A98034BE - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x833A760, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8B27A30, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x8B02598, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100001019F6E000/E13F632FC2A66EEB.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100001019F6E000/E13F632FC2A66EEB.yaml deleted file mode 100644 index 9a80401..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100001019F6E000/E13F632FC2A66EEB.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Horizon Chase 2 1.6.9 -# BID: E13F632FC2A66EEB - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x8349850, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8B36A30, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x8B11598, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100001019F6E000/F80EEC237D0963EE.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100001019F6E000/F80EEC237D0963EE.yaml deleted file mode 100644 index d76642a..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100001019F6E000/F80EEC237D0963EE.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Horizon Chase 2 1.6.3 -# BID: F80EEC237D0963EE - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x8325D00, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8B13A30, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.DynamicRes.FrameTimeBudget = 0.978 * (1000/FPS) - - - type: evaluate_write - address: [MAIN, 0x8AEE598, 0] - value_type: float - value: ["TruncDec(0.978 * FRAMETIME_TARGET, 1)", "TruncDec(0.978 * FRAMETIME_TARGET, 1)"] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010000400F582000/02F2E5C8CBF5A92F.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010000400F582000/02F2E5C8CBF5A92F.yaml deleted file mode 100644 index 980d1e3..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010000400F582000/02F2E5C8CBF5A92F.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# TT Isle of Man 2 1.0.1 -# BID: 02F2E5C8CBF5A92F - -unsafeCheck: true - -ALL_FPS: - # OptimalFrameDuration_ms = 0.96 * (1000/FPS) - - - type: evaluate_write - address: [MAIN, 0x2153CFC] - value_type: float - value: "0.96 * FRAMETIME_TARGET" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010000600CD54000/78885A1CA987C04C.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010000600CD54000/78885A1CA987C04C.yaml deleted file mode 100644 index e1091b2..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010000600CD54000/78885A1CA987C04C.yaml +++ /dev/null @@ -1,16 +0,0 @@ -# Rad Rodgers: Radical Edition 1.2.0 -# BID: 78885A1CA987C04C - -unsafeCheck: true - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x579C208, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010000A017F96000/1146A5AA87A93969.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010000A017F96000/1146A5AA87A93969.yaml deleted file mode 100644 index d37cecd..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010000A017F96000/1146A5AA87A93969.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Gori: Cuddly Carnage 1.0.6 -# BID: 1146A5AA87A93969 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x6A02E68, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6A3C938, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6245AA8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010000A017F96000/A21FFE97D09DCE4E.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010000A017F96000/A21FFE97D09DCE4E.yaml deleted file mode 100644 index d318f6a..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010000A017F96000/A21FFE97D09DCE4E.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Gori: Cuddly Carnage 1.0.7 -# BID: A21FFE97D09DCE4E - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x6A02E68, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6A3C938, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6245AA8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010000A017F96000/EEE598377C0A5966.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010000A017F96000/EEE598377C0A5966.yaml deleted file mode 100644 index 56ec6ab..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010000A017F96000/EEE598377C0A5966.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Gori: Cuddly Carnage 1.0.5 -# BID: EEE598377C0A5966 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x69FDE68, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6A37938, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6240AA8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010000B01A452000/2E7487767D0CA0EE.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010000B01A452000/2E7487767D0CA0EE.yaml deleted file mode 100644 index 255ffb7..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010000B01A452000/2E7487767D0CA0EE.yaml +++ /dev/null @@ -1,33 +0,0 @@ -# Jujutsu Kaisen Cursed Clash US 1.3.0 -# BID: 2E7487767D0CA0EE - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) rounded to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x81A5A48, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x81E8F50, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x752A248, 0] - value_type: uint32 - value: [0, 0] - # Disable bUseFixedFrameRate - - - type: write - address: [MAIN, 0x81E87A8, 0x9C4] - value_type: uint32 - value: 7 - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010000B01A452000/2F33996FD9C81253.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010000B01A452000/2F33996FD9C81253.yaml deleted file mode 100644 index f06ffcc..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010000B01A452000/2F33996FD9C81253.yaml +++ /dev/null @@ -1,33 +0,0 @@ -# Jujutsu Kaisen Cursed Clash US 1.2.0 -# BID: 2F33996FD9C81253 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) rounded to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x8069A48, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x80ACF50, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x73EE7C8, 0] - value_type: uint32 - value: [0, 0] - # Disable bUseFixedFrameRate - - - type: write - address: [MAIN, 0x80AC7A8, 0x9C4] - value_type: uint32 - value: 7 - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010000B01A452000/7C724F497564C027.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010000B01A452000/7C724F497564C027.yaml deleted file mode 100644 index 569e8f1..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010000B01A452000/7C724F497564C027.yaml +++ /dev/null @@ -1,33 +0,0 @@ -# Jujutsu Kaisen Cursed Clash US 1.4.0 -# BID: 7C724F497564C027 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x8458A48, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x849BF50, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x77DD548, 0] - value_type: uint32 - value: [0, 0] - # Disable bUseFixedFrameRate - - - type: write - address: [MAIN, 0x849B7A8, 0x9C4] - address_unsafe: true - value_type: uint32 - value: 7 - - - type: block - what: timing - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010000B01A452000/95761555A341B190.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010000B01A452000/95761555A341B190.yaml deleted file mode 100644 index d8c77d5..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010000B01A452000/95761555A341B190.yaml +++ /dev/null @@ -1,33 +0,0 @@ -# Jujutsu Kaisen Cursed Clash US 1.1.0 -# BID: 95761555A341B190 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) rounded to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x8036A48, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8079F50, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x73BB0C8, 0] - value_type: uint32 - value: [0, 0] - # Disable bUseFixedFrameRate - - - type: write - address: [MAIN, 0x80797A8, 0x9C4] - value_type: uint32 - value: 7 - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010000F012936000/1570FE23108B93C4.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010000F012936000/1570FE23108B93C4.yaml deleted file mode 100644 index 61719f0..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010000F012936000/1570FE23108B93C4.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# Agatha Christie - Hercule Poirot: The First Cases 1.0.3/1.0.3.1 -# BID: 1570FE23108B93C4 - -ALL_FPS: - # fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x4B3E500, 0x48] - value_type: float - value: "FRAMETIME_TARGET / 1000" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100011005D92000/A3A998AF3252D110.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100011005D92000/A3A998AF3252D110.yaml deleted file mode 100644 index cfd442f..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100011005D92000/A3A998AF3252D110.yaml +++ /dev/null @@ -1,88 +0,0 @@ -# Batman - The Telltale Series 1.0.4 -# BID: A3A998AF3252D110 - -DECLARATIONS: - - - type: code - name: tripleBuffer - instructions: [ - [stp, x29, x30, [sp, -16], "!"], - [mov, x29, sp], - [ldr, x0, [x26, 0x10]], - [cbz, x0, :goto1], - [adrp, x8, 0x1758000], - [ldr, x8, [x8, 0x90]], - [ldr, x8, [x8]], - [blr, x8], - [b, :goto2], - :goto1, [mov, w0, 0xc0], - [bl, 0x735480], - [str, x0, [x26, 0x10]], - :goto2, [ldr, x22, [x27]], - [adrp, x27, 0x1757000], - [ldr, x21, [x25]], - [ldr, x27, [x27, 0xf38]], - [adrp, x23, 0x1758000], - [ldr, x8, [x27]], - [ldr, x23, [x23, 0xa70]], - [mov, x0, x23], - [blr, x8], - [mov, x2, x0], - [mov, x0, x21], - [mov, x1, x22], - [bl, 0x1a90], - [mov, x21, x0], - [ldr, x0, [x25]], - [bl, 0x1ad0], - [ldr, x8, [x28]], - [mov, x1, x0], - [mov, x0, x23], - [mov, x2, x21], - [blr, x8], - [ldr, x0, [x26, 0x10]], - [ldr, x8, [x24]], - [mov, x1, x23], - [blr, x8], - [adrp, x22, 0x1758000], - [ldp, x29, x30, [sp], 16], - [ret] - ] - -MASTER_WRITE: -# Remove double buffer - - - type: asm_a64 - main_offset: 0x6440 - instructions: [ - [mov, w2, 3], - [madd, x1, x8, x2, x9] - ] - - - type: bytes - main_offset: 0xC5A6D8 - value_type: uint32 - value: 0x188CC50 - - - type: bytes - main_offset: 0x1758A90 - value_type: uint32 - value: 0x188CC50 - - - type: asm_a64 - main_offset: 0x5EE8 - instructions: [ - [bl, _tripleBuffer()] - ] - - - type: asm_a64 - main_offset: 0x5FC0 - instructions: [ - [mov, w1, 3] - ] - - - type: asm_a64 - main_offset: 0x5F8C - instructions: [ - [mov, x2, 0x1950000] - ] - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100040016EE2000/331E3DFBDF650226.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100040016EE2000/331E3DFBDF650226.yaml deleted file mode 100644 index 0606279..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100040016EE2000/331E3DFBDF650226.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# BPM: Bullets Per Minute 0.1 -# BID: 331E3DFBDF650226 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x69B8C78, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x69AEE10, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6220790, 0] - value_type: int32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000400204FE000/2D22A87AE49C75AA.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01000400204FE000/2D22A87AE49C75AA.yaml deleted file mode 100644 index f367e33..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000400204FE000/2D22A87AE49C75AA.yaml +++ /dev/null @@ -1,75 +0,0 @@ -# 無双アビス 1.4.2 -# BID: 2D22A87AE49C75AA - -DECLARATIONS: - - - type: variable - name: dr_target1 - value_type: float - default_value: 50 - evaluate: "1.5 * FRAMETIME_TARGET" - - - type: variable - name: dr_target2 - value_type: float - default_value: 40 - evaluate: "1.2 * FRAMETIME_TARGET" -MASTER_WRITE: - # REF: 09 49 A8 52 21 01 27 1E 00 20 21 1E - # Use FPS Target instead of vsync value for Dynamic Resolution max delta - - - type: asm_a64 - main_offset: 0x6E3B50 - instructions: [ - [adrp, x1, 0x1021000], - [ldr, s1, [x1, 0xe10]] - ] - # Redirect DR Targets - - - type: asm_a64 - main_offset: 0x6E3BF4 - instructions: [ - [adrp, x9, $dr_target1], - [ldr, s1, [x9, $dr_target1]] - ] - - - type: asm_a64 - main_offset: 0x6E3C04 - instructions: [ - [adrp, x9, $dr_target2], - [ldr, s1, [x9, $dr_target2]] - ] -ALL_FPS: - # REF: 00 00 F0 42 78 00 00 00 00 00 F0 42 04 00 00 00 - # FPS Lock - - - type: evaluate_write - address: [MAIN, 0x1021E1C] - value_type: uint32 - value: "120 / FPS_LOCK_TARGET" - # Prevent from setting it as 0, otherwise game crashes - - - type: evaluate_compare - compare_address: [MAIN, 0x1021E1C] - compare_type: "==" - compare_value_type: uint32 - compare_value: 0 - address: [MAIN, 0x1021E1C] - value_type: uint32 - value: 1 - # Others - - - type: evaluate_write - address: [MAIN, 0x1021E10] - value_type: float - value: "FPS_TARGET" - - - type: evaluate_write - address: [MAIN, 0x1021E14] - value_type: uint32 - value: "FPS_TARGET" - - - type: evaluate_write - address: [MAIN, 0x1021E18] - value_type: float - value: "FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000400204FE000/A9DEA3043D6E0060.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01000400204FE000/A9DEA3043D6E0060.yaml deleted file mode 100644 index fa65340..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000400204FE000/A9DEA3043D6E0060.yaml +++ /dev/null @@ -1,75 +0,0 @@ -# 無双アビス 1.5.0 -# BID: A9DEA3043D6E0060 - -DECLARATIONS: - - - type: variable - name: dr_target1 - value_type: float - default_value: 50 - evaluate: "1.5 * FRAMETIME_TARGET" - - - type: variable - name: dr_target2 - value_type: float - default_value: 40 - evaluate: "1.2 * FRAMETIME_TARGET" -MASTER_WRITE: - # REF: 09 49 A8 52 21 01 27 1E 00 20 21 1E - # Use FPS Target instead of vsync value for Dynamic Resolution max delta - - - type: asm_a64 - main_offset: 0x8B69C0 - instructions: [ - [adrp, x1, 0x11F3000], - [ldr, s1, [x1, 0xE10]] - ] - # Redirect DR Targets - - - type: asm_a64 - main_offset: 0x8B6A64 - instructions: [ - [adrp, x9, $dr_target1], - [ldr, s1, [x9, $dr_target1]] - ] - - - type: asm_a64 - main_offset: 0x8B6A74 - instructions: [ - [adrp, x9, $dr_target2], - [ldr, s1, [x9, $dr_target2]] - ] -ALL_FPS: - # REF: 00 00 F0 42 78 00 00 00 00 00 F0 42 04 00 00 00 - # FPS Lock - - - type: evaluate_write - address: [MAIN, 0x11F3E1C] - value_type: uint32 - value: "120 / FPS_LOCK_TARGET" - # Prevent from setting it as 0, otherwise game crashes - - - type: evaluate_compare - compare_address: [MAIN, 0x11F3E1C] - compare_type: "==" - compare_value_type: uint32 - compare_value: 0 - address: [MAIN, 0x11F3E1C] - value_type: uint32 - value: 1 - # Others - - - type: evaluate_write - address: [MAIN, 0x11F3E10] - value_type: float - value: "FPS_TARGET" - - - type: evaluate_write - address: [MAIN, 0x11F3E14] - value_type: uint32 - value: "FPS_TARGET" - - - type: evaluate_write - address: [MAIN, 0x11F3E18] - value_type: float - value: "FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100041018810000/B8BE1CFAE53CAEBE.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100041018810000/B8BE1CFAE53CAEBE.yaml deleted file mode 100644 index 6e0d655..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100041018810000/B8BE1CFAE53CAEBE.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# WRC Generations 1.2.2 -# BID: B8BE1CFAE53CAEBE - -ALL_FPS: - # OptimalFrameDuration_ms = (1000/FPS) - (0.07 * (1000/30) - - - type: evaluate_write - address: [MAIN, 0x2D5A83C] - value_type: float - value: "FRAMETIME_TARGET - (0.07 * (1000/30))" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100047013378000/7E65E5BC3564BE46.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100047013378000/7E65E5BC3564BE46.yaml deleted file mode 100644 index e80999d..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100047013378000/7E65E5BC3564BE46.yaml +++ /dev/null @@ -1,20 +0,0 @@ -# ぎゃる☆がん りたーんず 1.0.4 -# BID: 7E65E5BC3564BE46 -# Buffers are hardcoded into fixed size class, so it's hard to get triple buffer - -ALL_FPS: - # FPS Target + FPS Lock - - - type: evaluate_write - address: [MAIN, 0x16CE8A8, 0x20] - value_type: float - value: "60 / FPS_TARGET" - # Lipsync fix - - - type: evaluate_write - address: [MAIN, 0x1BA0A1C] - value_type: uint32 - value: FPS_TARGET - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010005001A8CA000/F87BEAF2C5CE13E3.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010005001A8CA000/F87BEAF2C5CE13E3.yaml deleted file mode 100644 index 5434f81..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010005001A8CA000/F87BEAF2C5CE13E3.yaml +++ /dev/null @@ -1,28 +0,0 @@ -# TRANSFORMERS: EARTHSPARK - Expedition 1.0.5 -# BID: F87BEAF2C5CE13E3 -# Game is using double frontbuffer and single backbuffer, everything is hardcoded - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x6B9BDD8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6BD58A8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x63DCAE8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010007400FF24000/090B1F7F7AF35D00.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010007400FF24000/090B1F7F7AF35D00.yaml deleted file mode 100644 index 5654a4c..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010007400FF24000/090B1F7F7AF35D00.yaml +++ /dev/null @@ -1,26 +0,0 @@ -# Borderlands: The Pre-Sequel Ultimate Edition 1.0.1 -# BID: 090B1F7F7AF35D00 - -DECLARATIONS: - - - type: variable - name: dr_frametime_max - value_type: float - default_value: 33.3 - evaluate: "0.999 * FRAMETIME_TARGET" - - - type: variable - name: dr_frametime_min - value_type: float - default_value: 29.97 - evaluate: "0.8991 * FRAMETIME_TARGET" -MASTER_WRITE: - - - type: asm_a64 - main_offset: 0xEA60B8 - instructions: [ - [adrp, x9, $dr_frametime_max], - [ldr, s11, [x9, $dr_frametime_max]], - [adrp, x9, $dr_frametime_min], - [ldr, s12, [x9, $dr_frametime_min]] - ] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010007B010FCC000/4EEA2970DF38ECE1.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010007B010FCC000/4EEA2970DF38ECE1.yaml deleted file mode 100644 index bf65d0b..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010007B010FCC000/4EEA2970DF38ECE1.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# Sniper Elite 4 1.0.3 -# BID: 4EEA2970DF38ECE1 - -ALL_FPS: - # Dynamic Resolution frame time target - - - type: evaluate_write - address: [MAIN, 0x2D7A974] - value_type: float - value: "0.969 * FRAMETIME_TARGET" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010008301AA96000/2A5244CCB17B44AC.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010008301AA96000/2A5244CCB17B44AC.yaml deleted file mode 100644 index 21145c9..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010008301AA96000/2A5244CCB17B44AC.yaml +++ /dev/null @@ -1,36 +0,0 @@ -# Tiebreak+: Official Game of the ATP and WTA 1.1.0 -# BID: 2A5244CCB17B44AC - -unsafeCheck: true - -MASTER_WRITE: - # Triple buffer - # REF: 00 40 00 00 00 04 00 00 00 88 00 00 02 00 00 00 - - - type: bytes - main_offset: 0x1A81E6C - value_type: uint32 - value: 3 - # Redirect Dynamic Resolution target reading to MAIN + 0x30C2F00 - # REF: 0C 9A 88 52 0C 6B A7 72 - - - type: bytes - main_offset: 0x147AA94 - value_type: uint32 - value: - - 0x9000E248 # ADRP X8, 0x30C2000 - - 0xBD4F0103 # LDR S3, [X8, 0xF00] - - 0xD503201F # NOP - ## Default values - - - type: bytes - main_offset: 0x30C2F00 - value_type: float - value: 0.03333333333 -ALL_FPS: - # Adjust Dynamic Resolution target, we are using this trick because function is overengineered and it's not easy to just use standard 1 / FPS_TARGET - - - type: evaluate_write - address: [MAIN, 0x30C2F00] - value_type: float - value: "0.8 / FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010008301AA96000/5BCA5C20C8F8A9B4.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010008301AA96000/5BCA5C20C8F8A9B4.yaml deleted file mode 100644 index 9df5368..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010008301AA96000/5BCA5C20C8F8A9B4.yaml +++ /dev/null @@ -1,36 +0,0 @@ -# Tiebreak+: Official Game of the ATP and WTA 1.2.0 -# BID: 5BCA5C20C8F8A9B4 - -unsafeCheck: true - -MASTER_WRITE: - # Triple buffer - # REF: 00 40 00 00 00 04 00 00 00 88 00 00 02 00 00 00 - - - type: bytes - main_offset: 0x1A82EAC - value_type: uint32 - value: 3 - # Redirect Dynamic Resolution target reading to MAIN + 0x30C3F00 - # REF: 28 11 91 52 08 A1 A7 72 03 01 27 1E - - - type: bytes - main_offset: 0x147B474 - value_type: uint32 - value: - - 0x9000E248 # ADRP X8, 0x30C3000 - - 0xBD4F0103 # LDR S3, [X8, 0xF00] - - 0xD503201F # NOP - ## Default values - - - type: bytes - main_offset: 0x30C3F00 - value_type: float - value: 0.03333333333 -ALL_FPS: - # Adjust Dynamic Resolution target, we are using this trick because function is overengineered and it's not easy to just use standard 1 / FPS_TARGET - - - type: evaluate_write - address: [MAIN, 0x30C3F00] - value_type: float - value: "0.8 / FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010008301AA96000/612E3D607D2A13BB.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010008301AA96000/612E3D607D2A13BB.yaml deleted file mode 100644 index cf93f9d..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010008301AA96000/612E3D607D2A13BB.yaml +++ /dev/null @@ -1,28 +0,0 @@ -# Tiebreak+: Official Game of the ATP and WTA 1.4.0 -# BID: 612E3D607D2A13BB - -DECLARATIONS: - - - type: variable - name: dr_target - value_type: float - default_value: 0.03333333333 - evaluate: "0.8 / FPS_TARGET" # we are using this trick because function is overengineered and it's not easy to just use standard 1 / FPS_TARGET -MASTER_WRITE: - # Triple buffer - # REF: 00 40 00 00 00 04 00 00 00 88 00 00 02 00 00 00 - - - type: bytes - main_offset: 0x1A8B39C - value_type: uint32 - value: 3 - # Redirect Dynamic Resolution target reading to MAIN + 0x30C3F00 - # REF: 28 11 91 52 08 A1 A7 72 03 01 27 1E - - - type: asm_a64 - main_offset: 0x1483084 - instructions: [ - [adrp, x8, $dr_target], - [ldr, s3, [x8, $dr_target]], - [nop] - ] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010008301AA96000/88CC45A195E0BDA8.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010008301AA96000/88CC45A195E0BDA8.yaml deleted file mode 100644 index d1edea3..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010008301AA96000/88CC45A195E0BDA8.yaml +++ /dev/null @@ -1,28 +0,0 @@ -# Tiebreak+: Official Game of the ATP and WTA 1.3.0 -# BID: 88CC45A195E0BDA8 - -DECLARATIONS: - - - type: variable - name: dr_target - value_type: float - default_value: 0.03333333333 - evaluate: "0.8 / FPS_TARGET" # we are using this trick because function is overengineered and it's not easy to just use standard 1 / FPS_TARGET -MASTER_WRITE: - # Triple buffer - # REF: 00 40 00 00 00 04 00 00 00 88 00 00 02 00 00 00 - - - type: bytes - main_offset: 0x1A82F0C - value_type: uint32 - value: 3 - # Redirect Dynamic Resolution target reading to MAIN + 0x30C3F00 - # REF: 28 11 91 52 08 A1 A7 72 03 01 27 1E - - - type: asm_a64 - main_offset: 0x147BE04 - instructions: [ - [adrp, x8, $dr_target], - [ldr, s3, [x8, $dr_target]], - [nop] - ] diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010008501186E000/30B812AB1BA3D447.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010008501186E000/30B812AB1BA3D447.yaml deleted file mode 100644 index 8a9efc0..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010008501186E000/30B812AB1BA3D447.yaml +++ /dev/null @@ -1,46 +0,0 @@ -# Life is Strange: Before the Storm Remastered 1.0 -# BID: 30B812AB1BA3D447 - -DECLARATIONS: - - - type: variable - name: dr_frametime_max - value_type: float - default_value: 30 - evaluate: "0.9 * FRAMETIME_TARGET" - - - type: variable - name: dr_frametime_min - value_type: float - default_value: 25 - evaluate: "0.75 * FRAMETIME_TARGET" - - - type: code - name: getDrFrametimeMax - instructions: [ - [adrp, x8, $dr_frametime_max], - [ldr, s1, [x8, $dr_frametime_max]], - [ret] - ] - - - type: code - name: getDrFrametimeMin - instructions: [ - [adrp, x8, $dr_frametime_min], - [ldr, s1, [x8, $dr_frametime_min]], - [ret] - ] -MASTER_WRITE: - # REF: 60 2e 40 bd 01 d0 27 1e 00 20 21 1e - - - type: asm_a64 - main_offset: 0x14FD210 - instructions: [ - [bl, _getDrFrametimeMax()] - ] - - - type: asm_a64 - main_offset: 0x14FD23C - instructions: [ - [bl, _getDrFrametimeMin()] - ] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010008E01E32A000/823FE359B4A99A4D.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010008E01E32A000/823FE359B4A99A4D.yaml deleted file mode 100644 index e883c22..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010008E01E32A000/823FE359B4A99A4D.yaml +++ /dev/null @@ -1,30 +0,0 @@ -# S.T.A.L.K.E.R.: Call of Prypiat 1.0.1 -# BID: 823FE359B4A99A4D - -unsafeCheck: true - -ALL_FPS: - # psLoadedFrameLimitFps - - - type: evaluate_write - address: [MAIN, 0x17DD77C] - value_type: float - value: FPS_LOCK_TARGET - # psCurrentFrameLimitFps - - - type: evaluate_write - address: [MAIN, 0x17FA8A0] - value_type: float - value: FPS_LOCK_TARGET - # psCurrentFrameLimitMs - - - type: evaluate_write - address: [MAIN, 0x1A6490C] - value_type: float - value: "1000 / FPS_LOCK_TARGET" - # ResolutionInfo::sDynresGPUBudgetMs - - - type: evaluate_write - address: [MAIN, 0x17DD758] - value_type: float - value: "0.99 * FRAMETIME_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010008E01E32A000/AD4CBC4878008E1E.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010008E01E32A000/AD4CBC4878008E1E.yaml deleted file mode 100644 index 25dff7b..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010008E01E32A000/AD4CBC4878008E1E.yaml +++ /dev/null @@ -1,30 +0,0 @@ -# S.T.A.L.K.E.R.: Call of Prypiat 1.0.3 -# BID: AD4CBC4878008E1E - -unsafeCheck: true - -ALL_FPS: - # psLoadedFrameLimitFps - - - type: evaluate_write - address: [MAIN, 0x17F9784] - value_type: float - value: FPS_LOCK_TARGET - # psCurrentFrameLimitFps - - - type: evaluate_write - address: [MAIN, 0x18168A0] - value_type: float - value: FPS_LOCK_TARGET - # psCurrentFrameLimitMs - - - type: evaluate_write - address: [MAIN, 0x1A8490C] - value_type: float - value: "1000 / FPS_LOCK_TARGET" - # ResolutionInfo::sDynresGPUBudgetMs - - - type: evaluate_write - address: [MAIN, 0x17F9760] - value_type: float - value: "FRAMETIME_TARGET - (1/30)" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010008E01E32A000/BBA39C65C1CC6463.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010008E01E32A000/BBA39C65C1CC6463.yaml deleted file mode 100644 index 6c3fbab..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010008E01E32A000/BBA39C65C1CC6463.yaml +++ /dev/null @@ -1,30 +0,0 @@ -# S.T.A.L.K.E.R.: Call of Prypiat 1.0.2 -# BID: BBA39C65C1CC6463 - -unsafeCheck: true - -ALL_FPS: - # psLoadedFrameLimitFps - - - type: evaluate_write - address: [MAIN, 0x17F9784] - value_type: float - value: FPS_LOCK_TARGET - # psCurrentFrameLimitFps - - - type: evaluate_write - address: [MAIN, 0x18168A0] - value_type: float - value: FPS_LOCK_TARGET - # psCurrentFrameLimitMs - - - type: evaluate_write - address: [MAIN, 0x1A8490C] - value_type: float - value: "1000 / FPS_LOCK_TARGET" - # ResolutionInfo::sDynresGPUBudgetMs - - - type: evaluate_write - address: [MAIN, 0x17F9760] - value_type: float - value: "0.99 * FRAMETIME_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100092021C80000/2A4A71E176DAA356.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100092021C80000/2A4A71E176DAA356.yaml deleted file mode 100644 index 54ea6f2..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100092021C80000/2A4A71E176DAA356.yaml +++ /dev/null @@ -1,11 +0,0 @@ -# Tomb Raider: Definitive Edition 1.0.1 -# BID: 2A4A71E176DAA356 - -ALL_FPS: - # Dynamic Resolution Frametime Target - # REF: E9 F3 00 B2 A9 40 A8 F2 A9 40 E8 F2 - - - type: evaluate_write - address: [MAIN, 0x1C2BB00] - value_type: float - value: FRAMETIME_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010009D018A06000/012A8C2C413E79B8.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010009D018A06000/012A8C2C413E79B8.yaml deleted file mode 100644 index 26f6889..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010009D018A06000/012A8C2C413E79B8.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# SWORD ART ONLINE Fractured Daydream JAP 1.2.2 -# BID: 012A8C2C413E79B8 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x8F57748, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8F92210, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x8791EC8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010009D018A06000/26C1E658E9B5B612.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010009D018A06000/26C1E658E9B5B612.yaml deleted file mode 100644 index 941f9f1..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010009D018A06000/26C1E658E9B5B612.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# SWORD ART ONLINE Fractured Daydream JAP 1.2.1 -# BID: 26C1E658E9B5B612 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x8F41748, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8F7C210, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x877BEC8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010009D018A06000/2EEE840599DC7021.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010009D018A06000/2EEE840599DC7021.yaml deleted file mode 100644 index db40ddc..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010009D018A06000/2EEE840599DC7021.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# ソードアート・オンライン フラクチュアード デイドリーム 1.5.2.0 -# BID: 2EEE840599DC7021 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x8676768, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x86B12E0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x7EB0F88, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010009D018A06000/33614E4F6B3267B3.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010009D018A06000/33614E4F6B3267B3.yaml deleted file mode 100644 index b7644d3..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010009D018A06000/33614E4F6B3267B3.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# SWORD ART ONLINE Fractured Daydream JAP 1.4.1.1 -# BID: 33614E4F6B3267B3 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x90A0758, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x90DB2B0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x88DAF88, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010009D018A06000/3889588A60E1F399.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010009D018A06000/3889588A60E1F399.yaml deleted file mode 100644 index fc2885a..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010009D018A06000/3889588A60E1F399.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# SWORD ART ONLINE Fractured Daydream JAP 1.1.3 -# BID: 3889588A60E1F399 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x8EA4728, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8EDF1F0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x86DEEC8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010009D018A06000/3AAA28C9CB8367B9.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010009D018A06000/3AAA28C9CB8367B9.yaml deleted file mode 100644 index 4d4108f..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010009D018A06000/3AAA28C9CB8367B9.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# SWORD ART ONLINE Fractured Daydream 1.1.1 -# BID: 3AAA28C9CB8367B9 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) rounded to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x8E90728, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8ECB1F0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x86CAEC8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010009D018A06000/46094C03E2EC668B.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010009D018A06000/46094C03E2EC668B.yaml deleted file mode 100644 index f92d45c..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010009D018A06000/46094C03E2EC668B.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# SWORD ART ONLINE Fractured Daydream JAP 1.2.0 -# BID: 46094C03E2EC668B - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x8F3C748, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8F77210, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x8776EC8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010009D018A06000/520620FBA0B196A3.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010009D018A06000/520620FBA0B196A3.yaml deleted file mode 100644 index efe83f8..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010009D018A06000/520620FBA0B196A3.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# SWORD ART ONLINE Fractured Daydream JAP 1.1.2 -# BID: 520620FBA0B196A3 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x8E95728, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8ED01F0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x86CFEC8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010009D018A06000/C2F2C4B700B30598.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010009D018A06000/C2F2C4B700B30598.yaml deleted file mode 100644 index c5bbae9..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010009D018A06000/C2F2C4B700B30598.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# SWORD ART ONLINE Fractured Daydream JAP 1.3.0 -# BID: C2F2C4B700B30598 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x8FD6748, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x9011290, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x8810F08, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010009D018A06000/CA61076D0CE6670D.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010009D018A06000/CA61076D0CE6670D.yaml deleted file mode 100644 index 58d217b..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010009D018A06000/CA61076D0CE6670D.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# SWORD ART ONLINE Fractured Daydream JAP 1.5.0.0 -# BID: CA61076D0CE6670D - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x866F768, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x86AA2E0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x7EA9F88, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000A10041EA000/0C0CAC3FCF0F0BEB.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01000A10041EA000/0C0CAC3FCF0F0BEB.yaml deleted file mode 100644 index a192599..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000A10041EA000/0C0CAC3FCF0F0BEB.yaml +++ /dev/null @@ -1,18 +0,0 @@ -# The Elder Scrolls V: Skyrim 1.1.404.0 -# BID: 0C0CAC3FCF0F0BEB - -ALL_FPS: - # Dynamic Resolution Frame Time Max = 0.99 * (1000/FPS) - # REF: 21 0C 02 1F 01 FC 00 BD, third ldr below - - - type: evaluate_write - address: [MAIN, 0x3357FB0] - value_type: float - value: "0.99 * FRAMETIME_TARGET" - # Dynamic Resolution Frame Time Min = 0.9 * (1000/FPS) - # REF: 21 0C 02 1F 01 FC 00 BD, first ldr below - - - type: evaluate_write - address: [MAIN, 0x3357FC8] - value_type: float - value: "0.9 * FRAMETIME_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000A10041EA000/4F7995092FAA5DC0.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01000A10041EA000/4F7995092FAA5DC0.yaml deleted file mode 100644 index 927011c..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000A10041EA000/4F7995092FAA5DC0.yaml +++ /dev/null @@ -1,16 +0,0 @@ -# The Elder Scrolls V: Skyrim 1.1.392.3925134 -# BID: 4F7995092FAA5DC0 - -ALL_FPS: - # Dynamic Resolution Frame Time Min = 0.9 * (1000/FPS) - - - type: evaluate_write - address: [MAIN, 0x3356FC8] - value_type: float - value: "0.9 * FRAMETIME_TARGET" - # Dynamic Resolution Frame Time Max = 0.99 * (1000/FPS) - - - type: evaluate_write - address: [MAIN, 0x3356FB0] - value_type: float - value: "0.99 * FRAMETIME_TARGET" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000AA013A5E000/B26DE1669B729335.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01000AA013A5E000/B26DE1669B729335.yaml deleted file mode 100644 index 79b5361..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000AA013A5E000/B26DE1669B729335.yaml +++ /dev/null @@ -1,26 +0,0 @@ -# Breathedge 1.0.2 -# BID: B26DE1669B729335 - -ALL_FPS: - # Disable bUseFixedFrameRate - - - type: write - address: [MAIN, 0x55CB668, 0x7F0] - address_unsafe: true - value_type: uint32 - value: 7 - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x55CBDE0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x4E6A7B8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000AB01F9C0000/2D2065AEBF94F9AE.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01000AB01F9C0000/2D2065AEBF94F9AE.yaml deleted file mode 100644 index 29e780e..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000AB01F9C0000/2D2065AEBF94F9AE.yaml +++ /dev/null @@ -1,24 +0,0 @@ -# Chernobylite 1.1 -# BID: 2D2065AEBF94F9AE - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x641EAB8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x644C838, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x5C83700, 0] - value_type: int32 - value: [0, 0] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000AB01F9C0000/657F40EEBD955F31.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01000AB01F9C0000/657F40EEBD955F31.yaml deleted file mode 100644 index e9693de..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000AB01F9C0000/657F40EEBD955F31.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Chernobylite 1.2 -# BID: 657F40EEBD955F31 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x641EAB8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x644C838, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x5C83700, 0] - value_type: int32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000AD01F94A000/505069EBC0B82A6F.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01000AD01F94A000/505069EBC0B82A6F.yaml deleted file mode 100644 index fb1a7b5..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000AD01F94A000/505069EBC0B82A6F.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Tony Hawk's Pro Skater 3 + 4 1.06 -# BID: 505069EBC0B82A6F - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x77EC4B8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x781A6A0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x7014598, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000AD01F94A000/52DA46C0166A8643.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01000AD01F94A000/52DA46C0166A8643.yaml deleted file mode 100644 index 7e9227c..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000AD01F94A000/52DA46C0166A8643.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Tony Hawk's Pro Skater 3 + 4 1.07 -# BID: 52DA46C0166A8643 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x77F8148, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7826330, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x7020598, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000AD01F94A000/65A9705A4BB35AA2.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01000AD01F94A000/65A9705A4BB35AA2.yaml deleted file mode 100644 index 4936c10..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000AD01F94A000/65A9705A4BB35AA2.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Tony Hawk's Pro Skater 3 + 4 1.05 -# BID: 65A9705A4BB35AA2 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x77DD4B8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x780B6A0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x7006068, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000AD01F94A000/A31FE9B8AF1156D4.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01000AD01F94A000/A31FE9B8AF1156D4.yaml deleted file mode 100644 index 44dc26e..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000AD01F94A000/A31FE9B8AF1156D4.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Tony Hawk's Pro Skater 3 + 4 1.0.3 -# BID: A31FE9B8AF1156D4 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x77CF4B8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x77FD6A0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6FF83C8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000B202041A000/725731C74E4CA6A9.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01000B202041A000/725731C74E4CA6A9.yaml deleted file mode 100644 index e0263f0..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000B202041A000/725731C74E4CA6A9.yaml +++ /dev/null @@ -1,11 +0,0 @@ -# DreadOut Remastered Collection 1.0.2 -# BID: 725731C74E4CA6A9 - -ALL_FPS: - # REF: DynamicResolution::.cctor - - - type: evaluate_write - address: [MAIN, 0x3E01640, 0, 0xB8, 8] - address_unsafe: true - value_type: double - value: [FPS_TARGET, FRAMETIME_TARGET] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000BB00E9D2000/4BC4A8A814FD46A4.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01000BB00E9D2000/4BC4A8A814FD46A4.yaml deleted file mode 100644 index 5cfe4fd..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000BB00E9D2000/4BC4A8A814FD46A4.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# ウィッチャー3 ワイルドハント コンプリートエディション 4.04b -# BID: 4BC4A8A814FD46A4 - -ALL_FPS: - # DRGameTargetFrameTimeInMs - - - type: evaluate_write - address: [MAIN, 0x41312B4] - value_type: float - value: "0.945 * FRAMETIME_TARGET" - # DRCinematicTargetFrameTimeInMs - - - type: evaluate_write - address: [MAIN, 0x41312E4] - value_type: float - value: "0.945 * FRAMETIME_TARGET" - # LimitFPS - - - type: evaluate_write - address: [MAIN, 0x411DCFC] - value_type: int32 - value: FPS_LOCK_TARGET - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000BD00CE64000/E417100FFEEFD1DE.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01000BD00CE64000/E417100FFEEFD1DE.yaml deleted file mode 100644 index 90ae7f7..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000BD00CE64000/E417100FFEEFD1DE.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Vampyr 0.4 -# BID: E417100FFEEFD1DE - -unsafeCheck: true - -ALL_FPS: - # r.DynResTargetFPS - - - type: evaluate_write - address: [MAIN, 0x71A31F8, 0] - value_type: int32 - value: [FPS_TARGET, FPS_TARGET] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x71B2BD0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000BF0152FA000/12024D08CCFD25EB.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01000BF0152FA000/12024D08CCFD25EB.yaml deleted file mode 100644 index 8b1516c..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000BF0152FA000/12024D08CCFD25EB.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# Zombie Army 4: Dead War 1.1.1 -# BID: 12024D08CCFD25EB - -ALL_FPS: - # Dynamic Resolution FPS Target - - - type: evaluate_write - address: [MAIN, 0x179EF64] - value_type: float - value: FPS_TARGET diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000C40236A8000/5C2942CCDF0AA6EA.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01000C40236A8000/5C2942CCDF0AA6EA.yaml deleted file mode 100644 index 11d1d4e..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000C40236A8000/5C2942CCDF0AA6EA.yaml +++ /dev/null @@ -1,16 +0,0 @@ -# Lumo 2 1.0.0.0 -# BID: 5C2942CCDF0AA6EA - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x6BB0EE8, 0] - value_type: uint32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7BC68D0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000CE002072000/346959B36CD9F14D.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01000CE002072000/346959B36CD9F14D.yaml deleted file mode 100644 index 642ce7d..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000CE002072000/346959B36CD9F14D.yaml +++ /dev/null @@ -1,14 +0,0 @@ -# The LEGO NINJAGO Movie Video Game 1.0.3 -# BID: 346959B36CD9F14D - -ALL_FPS: - # Block to 30 FPS when prerendered cutscene is played - # REF: LegoCutscenes::s_fmvCutsceneAudioInstance - - - type: compare - compare_address: [MAIN, 0x44C3468] - compare_type: "!=" - compare_value_type: uint64 - compare_value: 0 - value_type: refresh_rate - value: 30 diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000D60248D6000/196339C0BADE07C3.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01000D60248D6000/196339C0BADE07C3.yaml deleted file mode 100644 index 985bc8e..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000D60248D6000/196339C0BADE07C3.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Five Nights at Freddy's: Secret of the Mimic 1.0.0 -# BID: 196339C0BADE07C3 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x64D8628, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x64FE0E8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x5D0C1D0, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000DA017CF0000/6C46135714ABB870.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01000DA017CF0000/6C46135714ABB870.yaml deleted file mode 100644 index 83b02e0..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000DA017CF0000/6C46135714ABB870.yaml +++ /dev/null @@ -1,18 +0,0 @@ -# Fate/Samurai Remnant `JPN` 1.3.2 -# BID: 6C46135714ABB870 - -# Disable setting double buffer, REF: 28 63 A8 9B B8 5F 6E 29 2B F7 01 51 B9 83 57 B8 -MASTER_WRITE: - - - type: asm_a64 - main_offset: 0x5DB12C - instructions: [ - [mov, w25, 3] - ] -ALL_FPS: - # interval, REF: 29 00 80 52 16 00 08 8B 08 A0 8C 52 28 00 A0 72 - - - type: evaluate_write - address: [MAIN, 0x3412388] - value_type: int32 - value: VSYNC_TARGET diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000DF00EBBA000/5D3FE9C0FAA44B4C.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01000DF00EBBA000/5D3FE9C0FAA44B4C.yaml deleted file mode 100644 index e10a654..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000DF00EBBA000/5D3FE9C0FAA44B4C.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# Beholder 2 1.0.3 -# BID: 5D3FE9C0FAA44B4C - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x4275238, 0x48] - value_type: float - value: "1 / FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000DF01234A000/5EFAB20F5C1F0F68.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01000DF01234A000/5EFAB20F5C1F0F68.yaml deleted file mode 100644 index 88c5c54..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000DF01234A000/5EFAB20F5C1F0F68.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# リマザード:ブロークン ポーセリン 2.0.0 -# BID: 5EFAB20F5C1F0F68 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 1 decimals - - - type: evaluate_write - address: [MAIN, 0x58210E8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x584D710, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x4CB8880, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000E10133B2000/5EFAB20F5C1F0F68.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01000E10133B2000/5EFAB20F5C1F0F68.yaml deleted file mode 100644 index 24894d7..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000E10133B2000/5EFAB20F5C1F0F68.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Remothered: Broken Porcelain 修道院:破碎的瓷器 2.0.0 -# BID: 5EFAB20F5C1F0F68 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 1 decimals - - - type: evaluate_write - address: [MAIN, 0x58210E8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x584D710, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x4CB8880, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000E200DC58000/9E6B0D0023F9DB3B.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01000E200DC58000/9E6B0D0023F9DB3B.yaml deleted file mode 100644 index f4dca01..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000E200DC58000/9E6B0D0023F9DB3B.yaml +++ /dev/null @@ -1,15 +0,0 @@ -# OCTOPATH TRAVELER 歧路旅人 1.0.5 -# BID: 9E6B0D0023F9DB3B - -unsafeCheck: true - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x50B5698, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000F801EC5A000/33E7D684796F363B.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01000F801EC5A000/33E7D684796F363B.yaml deleted file mode 100644 index e467ef8..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000F801EC5A000/33E7D684796F363B.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# PROGRESS ORDERS 1.0.3 -# BID: 33E7D684796F363B - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x7B26958, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8B1E280, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000F9020CD4000/6ACDAEE7DDC5E503.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01000F9020CD4000/6ACDAEE7DDC5E503.yaml deleted file mode 100644 index e88c635..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000F9020CD4000/6ACDAEE7DDC5E503.yaml +++ /dev/null @@ -1,11 +0,0 @@ -# Atelier Resleriana: The Red Alchemist & the White Guardian 1.2a -# BID: 6ACDAEE7DDC5E503 - -ALL_FPS: - # MagicaCloth2.MagicaManager_TypeInfo - - - type: evaluate_write - address: [MAIN, 0x777A550, 0xB8, 0, 0x10, 0x20, 0x10] - address_unsafe: true - value_type: uint32 - value: "FPS_TARGET + 5" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000F9020CD4000/8593E6008F5A883D.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01000F9020CD4000/8593E6008F5A883D.yaml deleted file mode 100644 index eafc512..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000F9020CD4000/8593E6008F5A883D.yaml +++ /dev/null @@ -1,11 +0,0 @@ -# Atelier Resleriana: The Red Alchemist & the White Guardian 1.4 -# BID: 8593E6008F5A883D - -ALL_FPS: - # MagicaCloth2.MagicaManager_TypeInfo - - - type: evaluate_write - address: [MAIN, 0x778EF80, 0xB8, 0, 0x10, 0x20, 0x10] - address_unsafe: true - value_type: uint32 - value: "FPS_TARGET + 5" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000F9020CD4000/F140F141FDC4C331.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01000F9020CD4000/F140F141FDC4C331.yaml deleted file mode 100644 index 06ab3bb..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01000F9020CD4000/F140F141FDC4C331.yaml +++ /dev/null @@ -1,11 +0,0 @@ -# Atelier Resleriana: The Red Alchemist & the White Guardian 1.3 -# BID: F140F141FDC4C331 - -ALL_FPS: - # MagicaCloth2.MagicaManager_TypeInfo - - - type: evaluate_write - address: [MAIN, 0x7760D60, 0xB8, 0, 0x10, 0x20, 0x10] - address_unsafe: true - value_type: uint32 - value: "FPS_TARGET + 5" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010010100FF14000/12F93E2DBBCFA54F.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010010100FF14000/12F93E2DBBCFA54F.yaml deleted file mode 100644 index 21d6789..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010010100FF14000/12F93E2DBBCFA54F.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# 60 Parsecs! 1.0.10 -# BID: 12F93E2DBBCFA54F - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x393D5F8, 0x48] - value_type: float - value: "1 / FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001040220E8000/336E56D09501A52E.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01001040220E8000/336E56D09501A52E.yaml deleted file mode 100644 index 81bb574..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001040220E8000/336E56D09501A52E.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# Troublemaker 1.0.2 -# BID: 336E56D09501A52E - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x5E26958, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x562A778, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010010901AFB0000/3D3FEFC161B49AB8.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010010901AFB0000/3D3FEFC161B49AB8.yaml deleted file mode 100644 index a5ca47c..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010010901AFB0000/3D3FEFC161B49AB8.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# The Walking Dead: Destinies 1.3.0.8 -# BID: 3D3FEFC161B49AB8 - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x666C420, 0x48] - value_type: float - value: "1 / FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010010A01BBF4000/47A022F858BA09B1.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010010A01BBF4000/47A022F858BA09B1.yaml deleted file mode 100644 index 9ce9a42..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010010A01BBF4000/47A022F858BA09B1.yaml +++ /dev/null @@ -1,11 +0,0 @@ -# The Forest Quartet 4.0.2 -# BID: 47A022F858BA09B1 - -ALL_FPS: - # DynamicResolution_TypeInfo - - - type: evaluate_write - address: [MAIN, 0x4B320A0, 0xB8, 0] - address_unsafe: true - value_type: double - value: ["0.96 * FRAMETIME_TARGET", "(0.96 * FRAMETIME_TARGET) - 0.75"] diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010010B00DDA2000/8A39E660F956BB00.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010010B00DDA2000/8A39E660F956BB00.yaml deleted file mode 100644 index 3271dbf..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010010B00DDA2000/8A39E660F956BB00.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Raji: An Ancient Epic 1.0.4 -# BID: 8A39E660F956BB00 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x6B461B8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6B3C330, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010010F01418E000/49CF6B0B0A62F9E2.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010010F01418E000/49CF6B0B0A62F9E2.yaml deleted file mode 100644 index fcbe9e0..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010010F01418E000/49CF6B0B0A62F9E2.yaml +++ /dev/null @@ -1,37 +0,0 @@ -# Remnant: From The Ashes 1.0.1 -# BID: 49CF6B0B0A62F9E2 - -ALL_FPS: - # r.DynamicRes.MaxGPUTime ((1000/FPS) * 0.93) - - - type: evaluate_write - address: [MAIN, 0x7E23AF0, 0] - value_type: float - value: ["0.93 * FRAMETIME_TARGET", "0.93 * FRAMETIME_TARGET"] - # r.DynamicRes.MinGPUTime ((1000/FPS) * 0.87) - - - type: evaluate_write - address: [MAIN, 0x7E23B08, 0] - value_type: float - value: ["0.87 * FRAMETIME_TARGET", "0.87 * FRAMETIME_TARGET"] - # r.DynamicRes.MaxGPUTimeStill ((1000/FPS) * 0.945) - - - type: evaluate_write - address: [MAIN, 0x7E23B20, 0] - value_type: float - value: ["0.945 * FRAMETIME_TARGET", "0.945 * FRAMETIME_TARGET"] - # r.DynamicRes.MinGPUTimeStill ((1000/FPS) * 0.93) - - - type: evaluate_write - address: [MAIN, 0x7E23B38, 0] - value_type: float - value: ["0.93 * FRAMETIME_TARGET", "0.93 * FRAMETIME_TARGET"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7E46698, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100111004460000/6D9EA94F8AAC00A8.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100111004460000/6D9EA94F8AAC00A8.yaml deleted file mode 100644 index fb8c190..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100111004460000/6D9EA94F8AAC00A8.yaml +++ /dev/null @@ -1,39 +0,0 @@ -# SONIC FORCES 1.1.0 -# BID: 6D9EA94F8AAC00A8 -# Game speed is tied to framerate - -unsafeCheck: true - -MASTER_WRITE: - # Remove double buffer - - - type: asm_a64 - main_offset: 0xAD40FC - instructions: [ - [mov, w8, 3] - ] - # Block switching back to 30 FPS mode on loading screens - - - type: asm_a64 - main_offset: 0x6173B0 - instructions: [ - [nop] - ] -ALL_FPS: - # Switch to 60 FPS Mode - - - type: write - address: [MAIN, 0x1CAC518, 0x28, 0x20, 0x14] - value_type: uint32 - value: 1 - # FPS target - - - type: evaluate_write - address: [MAIN, 0x1C38C28, 0x1C] - value_type: float - value: FPS_TARGET - - - type: evaluate_write - address: [MAIN, 0x1C38C28, 0x14C] - value_type: float - value: FPS_TARGET diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100118009C68000/6401F57C7D6D3728.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100118009C68000/6401F57C7D6D3728.yaml deleted file mode 100644 index b0d696f..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100118009C68000/6401F57C7D6D3728.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# Figment 1.6.0 -# BID: 6401F57C7D6D3728 - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x450C7C0, 0x48] - value_type: float - value: "1 / FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010011C00E636000/FAD1AF4EDC6DB267.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010011C00E636000/FAD1AF4EDC6DB267.yaml deleted file mode 100644 index 84c9429..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010011C00E636000/FAD1AF4EDC6DB267.yaml +++ /dev/null @@ -1,31 +0,0 @@ -# Dusk Diver 酉閃町 -ダスクダイバー ユウセンチョウ- 1.0.6 -# BID: FAD1AF4EDC6DB267 - -ALL_FPS: - # Disable bSmoothFrameRate and bUseFixedFrameRate to untie game speed from framerate and unlock FPS - - - type: write - address: [MAIN, 0x5379338, 0x780] - address_unsafe: true - value_type: uint32 - # Default is 0x67, bSmoothFrameRate |= 0x20, bUseFixedFrameRate |= 0x40 - # By writing 7 we are making sure that other flags are maintained: - # bAllowMultiThreadedAnimationUpdate |= 4 - # bOptimizeAnimBlueprintMemberVariableAccess |= 2 - # bCanBlueprintsTickByDefault |= 1 - value: 7 - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 1 decimal - - - type: evaluate_write - address: [MAIN, 0x5354210, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x537A880, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001270012B6000/6D9EA94F8AAC00A8.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01001270012B6000/6D9EA94F8AAC00A8.yaml deleted file mode 100644 index 35895dc..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001270012B6000/6D9EA94F8AAC00A8.yaml +++ /dev/null @@ -1,41 +0,0 @@ -# SONIC FORCES 1.1.0/1.2.0 -# BID: 6D9EA94F8AAC00A8 -# Game speed is tied to framerate - -MASTER_WRITE: - # Remove double buffer - ## REF: E8 37 00 B9 E8 03 1F 32 - - - type: asm_a64 - main_offset: 0xAD40FC - instructions: [ - [mov, w8, 3] - ] - # Block switching back to 30 FPS mode on loading screens - ## REF: 08 10 40 F9 48 00 00 B4, replace STR - - - type: asm_a64 - main_offset: 0x6173B0 - instructions: [ - [nop] - ] -ALL_FPS: - # Switch to 60 FPS Mode - ## REF: 7F 7E 07 A9 6A A2 01 A9, ADRP + LDR below - - - type: write - address: [MAIN, 0x1CAC518, 0x28, 0x20, 0x14] - value_type: uint32 - value: 1 - # FPS target - ## REF: 00 1D 40 BD 01 D0 37 1E, ADRP + LDR above it - - - type: evaluate_write - address: [MAIN, 0x1C38C28, 0x1C] - value_type: float - value: FPS_TARGET - - - type: evaluate_write - address: [MAIN, 0x1C38C28, 0x14C] - value_type: float - value: FPS_TARGET diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001300232F4000/6070FC72448EE560.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01001300232F4000/6070FC72448EE560.yaml deleted file mode 100644 index 86b9661..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001300232F4000/6070FC72448EE560.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# 옥토패스 트래블러 0 1.0.2 -# BID: 6070FC72448EE560 - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x6C5C6E8, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7C7E8E0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100134025F8E000/81C9C793B5370E9B.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100134025F8E000/81C9C793B5370E9B.yaml deleted file mode 100644 index 83246f6..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100134025F8E000/81C9C793B5370E9B.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# Combat Forces 1.0.0 -# BID: 81C9C793B5370E9B - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x604AC78, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6843A78, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100149019460000/B9E42653FB44EF2B.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100149019460000/B9E42653FB44EF2B.yaml deleted file mode 100644 index a0ebbab..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100149019460000/B9E42653FB44EF2B.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Master Detective Archives: RAIN CODE 1.4.0 US -# BID: B9E42653FB44EF2B - -unsafeCheck: true - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8001888, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x7806CC8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100154019A7C000/6D9F6C7B79F5197F.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100154019A7C000/6D9F6C7B79F5197F.yaml deleted file mode 100644 index 7f339e5..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100154019A7C000/6D9F6C7B79F5197F.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Mortal Shell 1.2.0 -# BID: 6D9F6C7B79F5197F - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x6ACCBD8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6AEF760, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010015800B178000/EB8A679B5DDD0060.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010015800B178000/EB8A679B5DDD0060.yaml deleted file mode 100644 index cb299d2..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010015800B178000/EB8A679B5DDD0060.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# V-Rally 4 JPN 1.2.0 -# BID: EB8A679B5DDD0060 - -ALL_FPS: - # OptimalFrameDuration_ms = (1000/FPS) - (0.07 * (1000/30) - - - type: evaluate_write - address: [MAIN, 0x20A0E44] - value_type: float - value: "FRAMETIME_TARGET - (0.07 * (1000/30))" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010015F018C3C000/9806FB67CE24E904.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010015F018C3C000/9806FB67CE24E904.yaml deleted file mode 100644 index 7b2d397..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010015F018C3C000/9806FB67CE24E904.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# From Space 1.3.480 -# BID: 9806FB67CE24E904 - -unsafeCheck: true - -ALL_FPS: - # UnityEngine.Application::targetFrameRate (to adjust Dynamic Resolution) - - - type: evaluate_write - address: [MAIN, 0x6F3F760] - value_type: int32 - value: FPS_TARGET diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010016A00AEC0000/5C9CCD358BE85FC9.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010016A00AEC0000/5C9CCD358BE85FC9.yaml deleted file mode 100644 index 33cdbec..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010016A00AEC0000/5C9CCD358BE85FC9.yaml +++ /dev/null @@ -1,83 +0,0 @@ -# WARRIORS OROCHI 4 1.0.13 -# BID: 5C9CCD358BE85FC9 -# Credits to Hazerou for figuring out the offset -# Main offset stores address to start of .bss of NRO -## REF: 02 00 00 00 3C 00 00 00 - -unsafeCheck: true - -ALL_FPS: - # Without DLC Ultimate Edition installed - - - type: evaluate_compare - compare_value_type: uint64 - compare_type: "==" - compare_value: 0xE2CFDAC9EAC20398 - compare_address: [MAIN, 0x3AF80, -0x1A92FC0] - address: [MAIN, 0x3AF80, -0x934A8] - value_type: uint32 - value: [VSYNC_TARGET, FPS_TARGET] - - - type: evaluate_compare - compare_value_type: uint64 - compare_type: "==" - compare_value: 0xE2CFDAC9EAC20398 - compare_address: [MAIN, 0x3AF80, -0x1A92FC0] - address: [MAIN, 0x3AF80, -0x934A0] - value_type: float - value: FPS_TARGET - - - type: evaluate_compare - compare_value_type: uint64 - compare_type: "==" - compare_value: 0xE2CFDAC9EAC20398 - compare_address: [MAIN, 0x3AF80, -0x1A92FC0] - address: [MAIN, 0x3AF80, -0x9349C] - value_type: uint32 - value: [VSYNC_TARGET, FPS_TARGET] - - - type: evaluate_compare - compare_value_type: uint64 - compare_type: "==" - compare_value: 0xE2CFDAC9EAC20398 - compare_address: [MAIN, 0x3AF80, -0x1A92FC0] - address: [MAIN, 0x3AF80, -0x93494] - value_type: float - value: FPS_TARGET - # With DLC Ultimate Edition installed - - - type: evaluate_compare - compare_value_type: uint64 - compare_type: "!=" - compare_value: 0xE2CFDAC9EAC20398 - compare_address: [MAIN, 0x3AF80, -0x1A92FC0] - address: [MAIN, 0x3AF80, -0x93200] - value_type: uint32 - value: [VSYNC_TARGET, FPS_TARGET] - - - type: evaluate_compare - compare_value_type: uint64 - compare_type: "!=" - compare_value: 0xE2CFDAC9EAC20398 - compare_address: [MAIN, 0x3AF80, -0x1A92FC0] - address: [MAIN, 0x3AF80, -0x931F8] - value_type: float - value: FPS_TARGET - - - type: evaluate_compare - compare_value_type: uint64 - compare_type: "!=" - compare_value: 0xE2CFDAC9EAC20398 - compare_address: [MAIN, 0x3AF80, -0x1A92FC0] - address: [MAIN, 0x3AF80, -0x931F4] - value_type: uint32 - value: [VSYNC_TARGET, FPS_TARGET] - - - type: evaluate_compare - compare_value_type: uint64 - compare_type: "!=" - compare_value: 0xE2CFDAC9EAC20398 - compare_address: [MAIN, 0x3AF80, -0x1A92FC0] - address: [MAIN, 0x3AF80, -0x931EC] - value_type: float - value: FPS_TARGET diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010016C00F474000/4BC4A8A814FD46A4.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010016C00F474000/4BC4A8A814FD46A4.yaml deleted file mode 100644 index c10e281..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010016C00F474000/4BC4A8A814FD46A4.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# The Witcher 3: Wild Hunt - The Complete Edition `Cartridge only 2` 4.04a-4.04b -# BID: 4BC4A8A814FD46A4 - -ALL_FPS: - # DRGameTargetFrameTimeInMs - - - type: evaluate_write - address: [MAIN, 0x41312B4] - value_type: float - value: "0.945 * FRAMETIME_TARGET" - # DRCinematicTargetFrameTimeInMs - - - type: evaluate_write - address: [MAIN, 0x41312E4] - value_type: float - value: "0.945 * FRAMETIME_TARGET" - # LimitFPS - - - type: evaluate_write - address: [MAIN, 0x411DCFC] - value_type: int32 - value: FPS_LOCK_TARGET - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010017A0128C4000/3D4E3A9252AA6C63.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010017A0128C4000/3D4E3A9252AA6C63.yaml deleted file mode 100644 index be43c07..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010017A0128C4000/3D4E3A9252AA6C63.yaml +++ /dev/null @@ -1,23 +0,0 @@ -# Jojo's Bizarre Adventure: All-Star Battle R 2.3.3 -# BID: 3D4E3A9252AA6C63 -# There are small issues with animations in cutscenes at higher framerates - -ALL_FPS: - # Internal FPS Lock, pointer ref: 00 01 40 F9 E5 03 04 2A - - - type: evaluate_write - address: [MAIN, 0x2AEDA08, 704] - value_type: uint32 - value: VSYNC_TARGET - # Game Speed, pointer ref: F3 03 00 AA 20 00 80 52 F4 03 01 AA - - - type: evaluate_write - address: [MAIN, 0x2AEF6D0, 1360] - value_type: uint32 - value: VSYNC_TARGET - # UI Speed - - - type: evaluate_write - address: [MAIN, 0x2AEF6D0, 2554] - value_type: uint8 - value: FPS_TARGET diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100182014022000/56EEFA704373BDB3.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100182014022000/56EEFA704373BDB3.yaml deleted file mode 100644 index da21b9a..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100182014022000/56EEFA704373BDB3.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Grand Theft Auto: Vice City - Definitive Edition 1.0.7 -# BID: 56EEFA704373BDB3 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 1 decimal - - - type: evaluate_write - address: [MAIN, 0x7565298, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7589FE0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100182014022000/9151E53EE514B03A.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100182014022000/9151E53EE514B03A.yaml deleted file mode 100644 index 211f7d7..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100182014022000/9151E53EE514B03A.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Grand Theft Auto: Vice City - Definitive Edition 1.0.8 -# BID: 9151E53EE514B03A - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (Default is 36.5 ms) - - - type: evaluate_write - address: [MAIN, 0x7608988, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x762D640, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6E7AA00, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010018601E9E0000/31A37D73E22F1059.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010018601E9E0000/31A37D73E22F1059.yaml deleted file mode 100644 index 6053627..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010018601E9E0000/31A37D73E22F1059.yaml +++ /dev/null @@ -1,31 +0,0 @@ -# Bakery Simulator 1.1.0 -# BID: 31A37D73E22F1059 - -ALL_FPS: - # Disable bUseFixedFrameRate to untie game speed from framerate and unlock FPS - - - type: write - address: [MAIN, 0x5F9B6A8, 0x7A4] - address_unsafe: true - value_type: uint32 - # Default is 0x47, bUseFixedFrameRate |= 0x40 - # By writing 7 we are making sure that other flags are maintained: - # bAllowMultiThreadedAnimationUpdate |= 4 - # bOptimizeAnimBlueprintMemberVariableAccess |= 2 - # bCanBlueprintsTickByDefault |= 1 - value: 7 - # r.VSync - - - type: write - address: [MAIN, 0x57A0B58, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x5F9BFC8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001890167FE000/512FB8C2D12C4F36.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01001890167FE000/512FB8C2D12C4F36.yaml deleted file mode 100644 index dc9d7d9..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001890167FE000/512FB8C2D12C4F36.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Gigantosaurus: Dino Kart 1.1.0 -# BID: 512FB8C2D12C4F36 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x6D186C8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # r.VSync - - - type: write - address: [MAIN, 0x6581EB0, 0] - value_type: uint32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6D45C58, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001890167FE000/5F7A2866D8E20BBA.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01001890167FE000/5F7A2866D8E20BBA.yaml deleted file mode 100644 index 5e5fcc1..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001890167FE000/5F7A2866D8E20BBA.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Gigantosaurus: Dino Kart 1.0.0 -# BID: 5F7A2866D8E20BBA - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x6D196C8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6D46C58, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010018C01B106000/63B72CD5F2A90020.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010018C01B106000/63B72CD5F2A90020.yaml deleted file mode 100644 index e0fe0a9..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010018C01B106000/63B72CD5F2A90020.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Ship Graveyard Simulator 1.0.0 -# BID: 63B72CD5F2A90020 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x7D46658, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7D73FF8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010019B00BE72000/03B058B1F6BE7195.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010019B00BE72000/03B058B1F6BE7195.yaml deleted file mode 100644 index e0f9158..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010019B00BE72000/03B058B1F6BE7195.yaml +++ /dev/null @@ -1,13 +0,0 @@ -# Cel Damage HD 1.0.0 -# BID: 03B058B1F6BE7195 -# Credit to Hazerou for finding offset -# His note: 60 FPS may cause some Graphical Glitches like huge shadow and flashing light/colors appearing out of nowhere. - -unsafeCheck: true - -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x32EE1C] - value_type: float - value: ["1/FPS_TARGET", "FPS_TARGET"] diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010019C00E9CC000/4BC4A8A814FD46A4.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010019C00E9CC000/4BC4A8A814FD46A4.yaml deleted file mode 100644 index fa39efe..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010019C00E9CC000/4BC4A8A814FD46A4.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# 《巫師 3:狂獵》-完全版 4.04b -# BID: 4BC4A8A814FD46A4 - -ALL_FPS: - # DRGameTargetFrameTimeInMs - - - type: evaluate_write - address: [MAIN, 0x41312B4] - value_type: float - value: "0.945 * FRAMETIME_TARGET" - # DRCinematicTargetFrameTimeInMs - - - type: evaluate_write - address: [MAIN, 0x41312E4] - value_type: float - value: "0.945 * FRAMETIME_TARGET" - # LimitFPS - - - type: evaluate_write - address: [MAIN, 0x411DCFC] - value_type: int32 - value: FPS_LOCK_TARGET - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010019D01D736000/3BA6C7665F67A711.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010019D01D736000/3BA6C7665F67A711.yaml deleted file mode 100644 index 12f602e..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010019D01D736000/3BA6C7665F67A711.yaml +++ /dev/null @@ -1,58 +0,0 @@ -# 삼국지8 REMAKE 1.0.8 -# BID: 3BA6C7665F67A711 -# Cursor speed is tied to framerate - -DECLARATIONS: - # DON'T PUT ANYTHING BETWEEN - START - - - type: variable - name: fps_lock - value_type: uint32 - default_value: 30 - evaluate: FPS_LOCK_TARGET - - - type: variable - name: fps_lock2 - value_type: uint32 - default_value: 60 - evaluate: FPS_LOCK_TARGET - - - type: variable - name: game_speed - value_type: float - default_value: 0.0333333333 - evaluate: "1/FPS_TARGET" - - - type: variable - name: game_speed2 - value_type: float - default_value: 0.0166666666 - # DON'T PUT ANYTHING BETWEEN - END - - - type: code - name: fpsLock - instructions: [ - [adrp, x8, $fps_lock], - [ldr, w8, [x8, $fps_lock]], - [ret] - ] -MASTER_WRITE: - # Redirect FPS Lock, REF: A8 EA 00 B9 08 00 40 B9, LDR W8, [X0] - - - type: asm_a64 - main_offset: 0x1F902CC - instructions: [ - [bl, _fpsLock()] - ] - # Redirect game speed, REF: 08 31 9F 9A 20 79 68 BC 68 6E 41 B9 - - - type: asm_a64 - main_offset: 0x88B320 - instructions: [ - [adrp, x8, $game_speed], - [ldr, s0, [x8, $game_speed]] - ] -ALL_FPS: - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001A0011798000/66B2DEA98B5CDF65.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01001A0011798000/66B2DEA98B5CDF65.yaml deleted file mode 100644 index 15bdfe7..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001A0011798000/66B2DEA98B5CDF65.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# WRC9 1.2.0 -# BID: 66B2DEA98B5CDF65 - -unsafeCheck: true - -ALL_FPS: - # OptimalFrameDuration_ms = (1000/FPS) - (0.07 * (1000/30) - - - type: evaluate_write - address: [MAIN, 0x27C4B0C] - value_type: float - value: "FRAMETIME_TARGET - (0.07 * (1000/30))" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001A700C832000/97FC79E063E26C9B.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01001A700C832000/97FC79E063E26C9B.yaml deleted file mode 100644 index 83c9c36..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001A700C832000/97FC79E063E26C9B.yaml +++ /dev/null @@ -1,11 +0,0 @@ -# Fate/EXTELLA LINK 1.0.2 -# BID: 97FC79E063E26C9B - -MASTER_WRITE: - # Remove double buffer - - - type: asm_a64 - main_offset: 0x6B41E4 - instructions: [ - [mov, x8, 0x300000003] - ] diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001A9018560000/DD425ECC07C305DF.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01001A9018560000/DD425ECC07C305DF.yaml deleted file mode 100644 index ff40f43..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001A9018560000/DD425ECC07C305DF.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Bright Memory: Infinite Gold Edition 1.3 -# BID: DD425ECC07C305DF - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x6B031D8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6B30A78, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x63376C8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001AD01ABE8000/E196E389FD9E0364.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01001AD01ABE8000/E196E389FD9E0364.yaml deleted file mode 100644 index e988012..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001AD01ABE8000/E196E389FD9E0364.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# CRYMACHINA 慟哭奇機 / 크라이마키나 1.2.0 -# BID: E196E389FD9E0364 - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x7538918, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7D33D38, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001B0019F9E000/9E365FE9EC3A52D3.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01001B0019F9E000/9E365FE9EC3A52D3.yaml deleted file mode 100644 index af96de2..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001B0019F9E000/9E365FE9EC3A52D3.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# Escape Academy: The Complete Edition 3.0.6.2 -# BID: 9E365FE9EC3A52D3 - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x54AFB80, 0x48] - value_type: float - value: "1 / FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001BE01908C000/C95F34910CE1CDC0.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01001BE01908C000/C95F34910CE1CDC0.yaml deleted file mode 100644 index 552bfae..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001BE01908C000/C95F34910CE1CDC0.yaml +++ /dev/null @@ -1,32 +0,0 @@ -# Hot Wheels Unleashed 2 1.0.9 -# BID: C95F34910CE1CDC0 - -# It is recommended to disable FSR. When FSR is enabled, -# Dynamic Resolution is also disabled and it has worse performance -# at higher FPS, and quality wise it compares to dynamic resolution -# set to lowest res - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0xB58F090, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xB633E08, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0xAD75A78, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001BE01908C000/E1F81DC590FDE0B5.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01001BE01908C000/E1F81DC590FDE0B5.yaml deleted file mode 100644 index 4f2359b..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001BE01908C000/E1F81DC590FDE0B5.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# HOT WHEELS UNLEASHED 2 1.0.10 -# BID: E1F81DC590FDE0B5 - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0xAD74458, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0xB58E090, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xB632E08, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001BE01908C000/FE78C7B94C4E791A.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01001BE01908C000/FE78C7B94C4E791A.yaml deleted file mode 100644 index 2907a91..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001BE01908C000/FE78C7B94C4E791A.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# HOT WHEELS UNLEASHED 2 1.0.11 -# BID: FE78C7B94C4E791A - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0xAD73888, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0xB58D090, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xB631E08, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001BE01E620000/D2EADA78AA71283E.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01001BE01E620000/D2EADA78AA71283E.yaml deleted file mode 100644 index 743fbc3..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001BE01E620000/D2EADA78AA71283E.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Anime vs Evil: Apocalypse 1.0 -# BID: D2EADA78AA71283E - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x8DA64D0, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2", "TruncDec(FRAMETIME_TARGET, 2)"] - # r.VSync - - - type: write - address: [MAIN, 0x7DE4978, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8DE1840, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001C400E9D8000/737E56D43D2C0B38.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01001C400E9D8000/737E56D43D2C0B38.yaml deleted file mode 100644 index 102630b..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001C400E9D8000/737E56D43D2C0B38.yaml +++ /dev/null @@ -1,24 +0,0 @@ -# Persona 5 Scramble 1.0.3 -# BID: 737E56D43D2C0B38 - -unsafeCheck: true - -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x1D15228] - value_type: int32 - value: [FPS_LOCK_TARGET, VSYNC_TARGET] - - - type: evaluate_write - address: [MAIN, 0x1D28CB8] - value_type: float - value: FPS_TARGET - - - type: evaluate_write - address: [MAIN, 0x2A88DC0] - value_type: int32 - value: "VSYNC_TARGET - 1" - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001C700873E000/C0F144F5139F542E.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01001C700873E000/C0F144F5139F542E.yaml deleted file mode 100644 index ef5daee..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001C700873E000/C0F144F5139F542E.yaml +++ /dev/null @@ -1,11 +0,0 @@ -# GOD EATER 3 2.5.1 -# BID: C0F144F5139F542E - -MASTER_WRITE: - # Remove double buffer - - - type: asm_a64 - main_offset: 0xEA22EC - instructions: [ - [mov, x8, 0x300000003] - ] diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001CC01B2D4000/0DE3020411F4232B.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01001CC01B2D4000/0DE3020411F4232B.yaml deleted file mode 100644 index ffab2a4..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001CC01B2D4000/0DE3020411F4232B.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Goat Simulator 3 1.0.7.1 -# BID: 0DE3020411F4232B - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x934C2F8, 0] - value_type: float - value: ["0.81 * FRAMETIME_TARGET", "0.81 * FRAMETIME_TARGET"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x9371F70, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x8B7C198, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001CC01B2D4000/26AB1CB54DD4508D.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01001CC01B2D4000/26AB1CB54DD4508D.yaml deleted file mode 100644 index 1571f81..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001CC01B2D4000/26AB1CB54DD4508D.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Goat Simulator 3 1.0.7.3 -# BID: 26AB1CB54DD4508D - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x934D2F8, 0] - value_type: float - value: ["0.81 * FRAMETIME_TARGET", "0.81 * FRAMETIME_TARGET"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x9372F70, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x8B7D1C8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001CC01B2D4000/504EBEAB62E802AD.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01001CC01B2D4000/504EBEAB62E802AD.yaml deleted file mode 100644 index de9dae3..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001CC01B2D4000/504EBEAB62E802AD.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Goat Simulator 3 1.0.7.7 -# BID: 504EBEAB62E802AD - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x99DC468, 0] - value_type: float - value: ["0.81 * FRAMETIME_TARGET", "0.81 * FRAMETIME_TARGET"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x9A02290, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x920CBF8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001CC01B2D4000/8D4FD57DB7D63120.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01001CC01B2D4000/8D4FD57DB7D63120.yaml deleted file mode 100644 index ff03954..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001CC01B2D4000/8D4FD57DB7D63120.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Goat Simulator 3 1.0.7.6 -# BID: 8D4FD57DB7D63120 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x99DD468, 0] - value_type: float - value: ["0.81 * FRAMETIME_TARGET", "0.81 * FRAMETIME_TARGET"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x9A03290, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x920DB48, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001CC01B2D4000/A45BCB8A63C50DC8.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01001CC01B2D4000/A45BCB8A63C50DC8.yaml deleted file mode 100644 index edeb3a2..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001CC01B2D4000/A45BCB8A63C50DC8.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Goat Simulator 3 1.0.7.8 -# BID: A45BCB8A63C50DC8 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x99DC468, 0] - value_type: float - value: ["0.81 * FRAMETIME_TARGET", "0.81 * FRAMETIME_TARGET"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x9A02290, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x920CBF8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001CC01B2D4000/A5DA93E6537350D8.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01001CC01B2D4000/A5DA93E6537350D8.yaml deleted file mode 100644 index 8b54315..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001CC01B2D4000/A5DA93E6537350D8.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Goat Simulator 3 1.0.7.4 -# BID: A5DA93E6537350D8 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x92FE2F8, 0] - value_type: float - value: ["0.81 * FRAMETIME_TARGET", "0.81 * FRAMETIME_TARGET"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x9323F60, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x8B2E1E8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001CC01B2D4000/C606C7DC1C0EC88F.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01001CC01B2D4000/C606C7DC1C0EC88F.yaml deleted file mode 100644 index 62d1cc7..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001CC01B2D4000/C606C7DC1C0EC88F.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Goat Simulator 3 1.0.7.5 -# BID: C606C7DC1C0EC88F - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x954E2F8, 0] - value_type: float - value: ["0.81 * FRAMETIME_TARGET", "0.81 * FRAMETIME_TARGET"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x9573F60, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x8D7E218, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001CF0190C2000/4C6727375D877B90.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01001CF0190C2000/4C6727375D877B90.yaml deleted file mode 100644 index 02b53b9..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001CF0190C2000/4C6727375D877B90.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Insomnis 1.01 -# BID: 4C6727375D877B90 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget = (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x680CAB8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x683A358, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001D00186E8000/6133D5CC14F51B7A.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01001D00186E8000/6133D5CC14F51B7A.yaml deleted file mode 100644 index 013ea79..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001D00186E8000/6133D5CC14F51B7A.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Astor: Blade of the Monolith 1.0.2 -# BID: 6133D5CC14F51B7A - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x61F0828, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x69BEAD8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x69EC478, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001D00186E8000/C26E93197DEB4004.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01001D00186E8000/C26E93197DEB4004.yaml deleted file mode 100644 index fd97113..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001D00186E8000/C26E93197DEB4004.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Astor: Blade of the Monolith 1.0.0 / 1.0.1 -# BID: C26E93197DEB4004 - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x61EE768, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x69BCAD8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x69EA478, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001D00186E8000/E2AFE5A73F5C0803.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01001D00186E8000/E2AFE5A73F5C0803.yaml deleted file mode 100644 index 315f26d..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001D00186E8000/E2AFE5A73F5C0803.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Astor: Blade of the Monolith 1.0.3 -# BID: E2AFE5A73F5C0803 - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x61F0828, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x69BEAD8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x69EC478, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001E20203DC000/6D05923E7005E182.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01001E20203DC000/6D05923E7005E182.yaml deleted file mode 100644 index 531bac5..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001E20203DC000/6D05923E7005E182.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# スター・オーバードライブ 1.0.10 -# BID: 6D05923E7005E182 - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x674C6E8, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x77322F0, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x776C850, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001E3017A10000/17F37A56B17DD9CC.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01001E3017A10000/17F37A56B17DD9CC.yaml deleted file mode 100644 index f1ccc1b..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001E3017A10000/17F37A56B17DD9CC.yaml +++ /dev/null @@ -1,15 +0,0 @@ -# Farming Simulator 23 Nintendo Switch Edition 1.6.0.0/1.7.0.0 -# BID: 17F37A56B17DD9CC - -unsafeCheck: true - -ALL_FPS: - # Internal FPS lock - - - type: evaluate_write - address: [MAIN, 0xFAD7AC] - value_type: float - value: FPS_LOCK_TARGET - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001E400FD58000/CCEE412E679A2143.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01001E400FD58000/CCEE412E679A2143.yaml deleted file mode 100644 index 333ec2c..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001E400FD58000/CCEE412E679A2143.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# Cooking Simulator 1.0.1 -# BID: CCEE412E679A2143 - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x43E7FB8, 0x48] - value_type: float - value: "1 / FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001E9023920000/169AD641E042A8B4.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01001E9023920000/169AD641E042A8B4.yaml deleted file mode 100644 index 81f0a59..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001E9023920000/169AD641E042A8B4.yaml +++ /dev/null @@ -1,43 +0,0 @@ -# 하늘의 궤적 the 1st 1.0.4 -# BID: 169AD641E042A8B4 - -DECLARATIONS: - # Lock Max Handheld Resolution to 720p instead of 900p - - - type: code - name: adjustDrResToNativeInHH - instructions: [ - [cmp, w9, 1280], - [b.le, :goto1], - [adrp, x21, 0x65F000], - [ldr, w21, [x21, 0x830]], ## REF: nn::oe::GetOperationMode in nnMain - [cbnz, w21, :goto1], - [mov, w9, 1280], - [mov, w8, 720], - :goto1, [stp, w9, w8, [x19, 0x10]], - [ret] - ] -MASTER_WRITE: - ## REF: 69 22 02 29 - - - type: asm_a64 - main_offset: 0x2380A4 - instructions: [ - [bl, _adjustDrResToNativeInHH()] - ] -ALL_FPS: - # Min Delta - ## REF: 88 01 80 52 C1 03 80 52 28 4D 28 9B 29 00 80 52, first ADRP + ADD below it - - - type: evaluate_write - address: [MAIN, 0x65F860, 0x2C] - value_type: uint32 - value: FPS_TARGET - # Dynamic Resolution - ## REF: First function in .init_array section, ADRP + ADD + 0x220 (default float: 2) - ## Adding there 0.95 by myself because game seems to have issues with reaching 60 FPS with 1.0 - - - type: write - address: [MAIN, 0x65F378] - value_type: float - value: 0.95 diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001E9023920000/4FC3CB13E1D3292E.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01001E9023920000/4FC3CB13E1D3292E.yaml deleted file mode 100644 index c4ee7f6..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001E9023920000/4FC3CB13E1D3292E.yaml +++ /dev/null @@ -1,43 +0,0 @@ -# 하늘의 궤적 the 1st 1.0.3 -# BID: 4FC3CB13E1D3292E - -DECLARATIONS: - # Lock Max Handheld Resolution to 720p instead of 900p - - - type: code - name: adjustDrResToNativeInHH - instructions: [ - [cmp, w9, 1280], - [b.le, :goto1], - [adrp, x21, 0x65D000], - [ldr, w21, [x21, 0x830]], ## REF: nn::oe::GetOperationMode in nnMain - [cbnz, w21, :goto1], - [mov, w9, 1280], - [mov, w8, 720], - :goto1, [stp, w9, w8, [x19, 0x10]], - [ret] - ] -MASTER_WRITE: - ## REF: 69 22 02 29 - - - type: asm_a64 - main_offset: 0x236744 - instructions: [ - [bl, _adjustDrResToNativeInHH()] - ] -ALL_FPS: - # Min Delta - ## REF: 88 01 80 52 C1 03 80 52 28 4D 28 9B 29 00 80 52, first ADRP + ADD below it - - - type: evaluate_write - address: [MAIN, 0x65D860, 0x2C] - value_type: uint32 - value: FPS_TARGET - # Dynamic Resolution and Min Delta multiplier (some UI elements are not adjusted by it, that's why I'm using both values) - ## REF: First function in .init_array section, ADRP + ADD + 0x220 (default float: 2) - ## Adding there 0.95 by myself because game seems to have issues with reaching 60 FPS with 1.0 - - - type: write - address: [MAIN, 0x65D378] - value_type: float - value: 0.95 diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001E9023920000/6656BA1B5B8AC30A.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01001E9023920000/6656BA1B5B8AC30A.yaml deleted file mode 100644 index bf2ad61..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001E9023920000/6656BA1B5B8AC30A.yaml +++ /dev/null @@ -1,43 +0,0 @@ -# 하늘의 궤적 the 1st 1.0.6.1 -# BID: 6656BA1B5B8AC30A - -DECLARATIONS: - # Lock Max Handheld Resolution to 720p instead of 900p - - - type: code - name: adjustDrResToNativeInHH - instructions: [ - [cmp, w10, 1280], - [b.le, :goto1], - [adrp, x21, 0x730000], - [ldr, w21, [x21, 0x820]], ## REF: nn::oe::GetOperationMode in nnMain - [cbnz, w21, :goto1], - [mov, w10, 1280], - [mov, w8, 720], - :goto1, [stp, w10, w8, [x19, 0x10]], - [ret] - ] -MASTER_WRITE: - ## REF: 88 C2 88 1A 6A 22 02 29 - - - type: asm_a64 - main_offset: 0x2CF7B4 - instructions: [ - [bl, _adjustDrResToNativeInHH()] - ] -ALL_FPS: - # Min Delta - ## REF: C1 03 80 52 28 4D 28 9B, first ADRP + ADD below it - - - type: evaluate_write - address: [MAIN, 0x730850, 0x2C] - value_type: uint32 - value: FPS_TARGET - # Dynamic Resolution - ## REF: First function in .init_array section, ADRP + ADD + 0x220 (default float: 2) - ## Adding there 0.95 by myself because game seems to have issues with reaching 60 FPS with 1.0 - - - type: write - address: [MAIN, 0x7303D0] - value_type: float - value: 0.95 \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001E9023920000/8CFF66758D7BD507.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01001E9023920000/8CFF66758D7BD507.yaml deleted file mode 100644 index a140380..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001E9023920000/8CFF66758D7BD507.yaml +++ /dev/null @@ -1,43 +0,0 @@ -# 하늘의 궤적 the 1st 1.0.5 -# BID: 8CFF66758D7BD507 - -DECLARATIONS: - # Lock Max Handheld Resolution to 720p instead of 900p - - - type: code - name: adjustDrResToNativeInHH - instructions: [ - [cmp, w9, 1280], - [b.le, :goto1], - [adrp, x21, 0x65F000], - [ldr, w21, [x21, 0x830]], ## REF: nn::oe::GetOperationMode in nnMain - [cbnz, w21, :goto1], - [mov, w9, 1280], - [mov, w8, 720], - :goto1, [stp, w9, w8, [x19, 0x10]], - [ret] - ] -MASTER_WRITE: - ## REF: 69 22 02 29 - - - type: asm_a64 - main_offset: 0x2380A4 - instructions: [ - [bl, _adjustDrResToNativeInHH()] - ] -ALL_FPS: - # Min Delta - ## REF: 88 01 80 52 C1 03 80 52 28 4D 28 9B 29 00 80 52, first ADRP + ADD below it - - - type: evaluate_write - address: [MAIN, 0x65F860, 0x2C] - value_type: uint32 - value: FPS_TARGET - # Dynamic Resolution - ## REF: First function in .init_array section, ADRP + ADD + 0x220 (default float: 2) - ## Adding there 0.95 by myself because game seems to have issues with reaching 60 FPS with 1.0 - - - type: write - address: [MAIN, 0x65F378] - value_type: float - value: 0.95 \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001F100E8AE000/EB57CF3434044523.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01001F100E8AE000/EB57CF3434044523.yaml deleted file mode 100644 index 7d97f32..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001F100E8AE000/EB57CF3434044523.yaml +++ /dev/null @@ -1,26 +0,0 @@ -# Remothered Tormented Fathers `Cartridge only` 1.2.0 -# BID: EB57CF3434044523 -# Game stores textures inside fixed size class, so it's hard to get triple buffer - -ALL_FPS: - # Disable bUseFixedFrameRate and bSmoothFrameRate - - - type: write - address: [MAIN, 0x54C75F0, 0x770] - value_type: uint32 - value: 7 - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x54C7F70, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x4C641D0, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001F3018880000/DF556AF2E30073C0.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01001F3018880000/DF556AF2E30073C0.yaml deleted file mode 100644 index c27715d..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01001F3018880000/DF556AF2E30073C0.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Asterix & Obelix XXXL - The Ram From Hibernia 1.04.00 -# BID: DF556AF2E30073C0 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) rounded to two decimals - - - type: evaluate_write - address: [MAIN, 0x71331A8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7160D78, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100207021C3C000/2C2D599E55912C6C.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100207021C3C000/2C2D599E55912C6C.yaml deleted file mode 100644 index 498ed7b..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100207021C3C000/2C2D599E55912C6C.yaml +++ /dev/null @@ -1,17 +0,0 @@ -# Bendy and the Dark Revival 1.6.3s -# BID: 2C2D599E55912C6C - -ALL_FPS: - # PSH.DynamicResolution.DynamicResolutionController_TypeInfo - - - type: evaluate_write - address: [MAIN, 0x396F660, 0xB8, 0] - address_unsafe: true - value_type: double - value: [FPS_TARGET, FRAMETIME_TARGET] - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x3D42700, 0x48] - value_type: float - value: "1 / FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100207023882000/7DE262BD1732DBFB.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100207023882000/7DE262BD1732DBFB.yaml deleted file mode 100644 index b5d1ace..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100207023882000/7DE262BD1732DBFB.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# World At War: Cobra 1.0.0 -# BID: 7DE262BD1732DBFB - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x604AC78, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6843A78, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010020B016EF4000/7E25622D50D562BF.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010020B016EF4000/7E25622D50D562BF.yaml deleted file mode 100644 index 14b2e3f..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010020B016EF4000/7E25622D50D562BF.yaml +++ /dev/null @@ -1,33 +0,0 @@ -# CONVERGENCE: A League of Legends Story 1.0.1 -# BID: 7E25622D50D562BF -# Everything derived through DS.Game.Luna.NetworkTime$$Apply30FpsSettings + DS.Game.Luna.NetworkTime$$Apply60FpsSettings - -unsafeCheck: true - -ALL_FPS: - # fixedDeltaTime = 1/FPS - - - type: evaluate_write - address: [MAIN, 0x52BD280, 0x48] - value_type: float - value: "1 / FPS_TARGET" - - # maximumParticleDeltaTime = 1/FPS - type: evaluate_write - address: [MAIN, 0x52BD280, 0x104] - value_type: float - value: "1 / FPS_TARGET" - - # maximumDeltaTime = 6 * (1/FPS) - type: evaluate_write - address: [MAIN, 0x52BD280, 0x100] - value_type: float - value: "(1 / FPS_TARGET) * 6" - - # DS.Tech.Networking.Clock_TypeInfo = 1/FPS - type: evaluate_write - address: [MAIN, 0x4EABAE0, 0xB8, 0] - value_type: float - value: "1 / FPS_TARGET" - - # DS.Tech.Networking.ClientInterpolator_TypeInfo => every 15 FPS jump += 1 - type: evaluate_write - address: [MAIN, 0x4EABA98, 0xB8, 0] - value_type: int32 - value: "FPS_TARGET / 15" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010020F014DBE000/2B37ED2A971948F3.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010020F014DBE000/2B37ED2A971948F3.yaml deleted file mode 100644 index 488f78a..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010020F014DBE000/2B37ED2A971948F3.yaml +++ /dev/null @@ -1,92 +0,0 @@ -# Sherlock Holmes: The Devil's Daughter 1.0.0 -# BID: 2B37ED2A971948F3 - -DECLARATIONS: - - - type: variable - name: dr_target1 - value_type: float - default_value: 38 - evaluate: "1.14 * FRAMETIME_TARGET" - - - type: variable - name: dr_target2 - value_type: float - default_value: 22 - evaluate: "0.66 * FRAMETIME_TARGET" - - - type: variable - name: dr_target3 - value_type: float - default_value: 43.5 - evaluate: "1.305 * FRAMETIME_TARGET" - - - type: variable - name: dr_target4 - value_type: float - default_value: 58 - evaluate: "1.74 * FRAMETIME_TARGET" - - - type: variable - name: dr_target5 - value_type: float - default_value: 47 - evaluate: "1.41 * FRAMETIME_TARGET" - - - type: variable - name: dr_target6 - value_type: float - default_value: 34 - evaluate: "1.02 * FRAMETIME_TARGET" -MASTER_WRITE: - # Redirect Dynamic Resolution timings to MAIN + 0x3189F00 - # 38.0 - - - type: asm_a64 - main_offset: 0xFFEAFC - instructions: [ - [adrp, x10, $dr_target1], - [ldr, s1, [x10, $dr_target1]] - ] - # 22.0 - - - type: asm_a64 - main_offset: 0xFFEB0C - instructions: [ - [ldr, s1, [x10, $dr_target2]] - ] - # 43.5 - - - type: asm_a64 - main_offset: 0xFFEAD4 - instructions: [ - [adrp, x10, $dr_target3], - [ldr, s1, [x10, $dr_target3]] - ] - # 58.0 - - - type: asm_a64 - main_offset: 0xFFEAE4 - instructions: [ - [adrp, x10, $dr_target4], - [ldr, s1, [x10, $dr_target4]] - ] - # 47.0 | 34.0 - - - type: asm_a64 - main_offset: 0xFFEB20 - instructions: [ - [adrp, x11, $dr_target5], - [ldr, s1, [x11, $dr_target5]], - [adrp, x11, $dr_target6], - [fcmp, s0, s1], - [ldr, s1, [x11, $dr_target6]] - ] -ALL_FPS: - # UGameEngine::GetMaxTickRate() - # Bool Lock FPS - - - type: write - address: [MAIN, 0x30D1B7C] - value_type: uint8 - value: 0 diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010021401ADCC000/A1E1EFBA68B846A9.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010021401ADCC000/A1E1EFBA68B846A9.yaml deleted file mode 100644 index b2ff763..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010021401ADCC000/A1E1EFBA68B846A9.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# 셜록 홈즈 어웨이큰드 1.0.1 -# BID: A1E1EFBA68B846A9 - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7D81968, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x75811D8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010021601C496000/7A450848CFDEC18E.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010021601C496000/7A450848CFDEC18E.yaml deleted file mode 100644 index 8fff3bf..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010021601C496000/7A450848CFDEC18E.yaml +++ /dev/null @@ -1,53 +0,0 @@ -# Kingdom Come: Deliverance - Royal Edition 1.9.6H -# BID: 7A450848CFDEC18E -# Some prerendered cutscenes are still pushed at 30 FPS - -MASTER_WRITE: - # Block updating DR timings, REF: 00 01 27 1E 48 40 A8 52 - - - type: asm_a64 - main_offset: 0x1CA806C - instructions: [ - [nop] - ] - - - type: asm_a64 - main_offset: 0x1CA8074 - instructions: [ - [nop] - ] - - - type: asm_a64 - main_offset: 0x1CA8094 - instructions: [ - [nop], - [nop] - ] - # Write default DR timings - - - type: bytes - main_offset: 0x56FF9C8 - value_type: float - value: [32.5, 30.5, 31.5, 28.5, 33.5] -ALL_FPS: - # sys_MaxFPS - - - type: evaluate_write - address: [MAIN, 0x56FD1C8] - value_type: int32 - value: FPS_LOCK_TARGET - # Renderer thread delay - - - type: evaluate_write - address: [MAIN, 0x5704028] - value_type: float - value: "0.66 / FPS_TARGET" - # DR timings - - - type: evaluate_write - address: [MAIN, 0x56FF9C8] - value_type: float - value: ["FRAMETIME_TARGET * 0.975", "FRAMETIME_TARGET * 0.915", "FRAMETIME_TARGET * 0.945", "FRAMETIME_TARGET * 0.855", "FRAMETIME_TARGET * 1.005"] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100217014266000/2F81A2EC9B298B37.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100217014266000/2F81A2EC9B298B37.yaml deleted file mode 100644 index 56adce8..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100217014266000/2F81A2EC9B298B37.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# DRAGON QUEST TREASURES 1.0.1 -# BID: 2F81A2EC9B298B37 - -ALL_FPS: - # Disable bUseFixedFrameRate to untie game speed from framerate and unlock FPS - - - type: write - address: [MAIN, 0x7E110D8, 0x7C0] - address_unsafe: true - value_type: uint32 - # Default is 0x47, bUseFixedFrameRate |= 0x40 - # By writing 7 we are making sure that other flags are maintained: - # bAllowMultiThreadedAnimationUpdate |= 4 - # bOptimizeAnimBlueprintMemberVariableAccess |= 2 - # bCanBlueprintsTickByDefault |= 1 - value: 7 - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7E119A8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010021801DD26000/B2D4462B71536EC6.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010021801DD26000/B2D4462B71536EC6.yaml deleted file mode 100644 index 934cfe2..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010021801DD26000/B2D4462B71536EC6.yaml +++ /dev/null @@ -1,51 +0,0 @@ -# Momotaro Dentetsu: Showa, Heisei, Reiwa mo Teiban! Asia Edition 1.0.1 -# BID: B2D4462B71536EC6 - -MASTER_WRITE: - # Remove double buffer - - - type: asm_a64 - main_offset: 0x1B630 - instructions: [ - [mov, w1, 3] - ] - - - type: asm_a64 - main_offset: 0x5774C - instructions: [ - [mov, w1, 3] - ] -ALL_FPS: - # REF: 20 59 60 BC - # Internal FPS Lock - - - type: evaluate_write - address: [MAIN, 0xFF7090] - value_type: float - value: [FPS_TARGET, "60 / FPS_TARGET"] - # Blocking game to max 60 FPS because setting game speed ratio below 1 causes glitches - - - type: compare - compare_address: [MAIN, 0xFF7090] - compare_type: ">" - compare_value_type: float - compare_value: 60 - address: [MAIN, 0xFF7090] - value_type: float - value: 60 - - - type: compare - compare_address: [MAIN, 0xFF7090] - compare_type: "==" - compare_value_type: float - compare_value: 60 - address: [MAIN, 0xFF7094] - value_type: float - value: 1 - # Unknown value that is set based on FPS Lock function argument, 0 = 60 FPS, 1 = 30 FPS, 2 = 20 FPS, 3 = 15 FPS - # According to IDA is not used at all, but writing this anyway - - - type: evaluate_write - address: [MAIN, 0x10D8028] - value_type: uint32 - value: "VSYNC_TARGET - 1" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010022A02008C000/F678FD2BB197125B.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010022A02008C000/F678FD2BB197125B.yaml deleted file mode 100644 index 74b6921..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010022A02008C000/F678FD2BB197125B.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Rune Factory: Guardians of Azuma US 1.1.1 -# BID: F678FD2BB197125B - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x8F68D40, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8FA2470, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x7F816E8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010023001969A000/D40B81867A121EB0.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010023001969A000/D40B81867A121EB0.yaml deleted file mode 100644 index 8ecc877..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010023001969A000/D40B81867A121EB0.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Session: Skate Sim 1.1.3 -# BID: D40B81867A121EB0 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget = 0.81 * (1000/FPS) - - - type: evaluate_write - address: [MAIN, 0x7249868, 0] - value_type: float - value: ["0.81 * FRAMETIME_TARGET", "0.81 * FRAMETIME_TARGET"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7277438, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6A7D0C8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010023001969A000/F327FFD8C2E85895.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010023001969A000/F327FFD8C2E85895.yaml deleted file mode 100644 index 65d6896..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010023001969A000/F327FFD8C2E85895.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Session: Skate Sim 1.1.4 -# BID: F327FFD8C2E85895 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x7247868, 0] - value_type: float - value: ["FRAMETIME_TARGET", "FRAMETIME_TARGET"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7275438, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6A7A668, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010024600C794000/3776E7BBC7C01E43.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010024600C794000/3776E7BBC7C01E43.yaml deleted file mode 100644 index 4dfbe86..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010024600C794000/3776E7BBC7C01E43.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# Hellpoint 1.0.2.0 -# BID: 3776E7BBC7C01E43 - -ALL_FPS: - # Manager_TypeInfo - # Using different scales than original (0.78, 1.14) because they seem to not be good for targeting 60 FPS - - - type: evaluate_write - address: [MAIN, 0x5357390, 0xB8, 0, 0x20, 0x20] - address_unsafe: true - value_type: float - value: ["0.6 * FRAMETIME_TARGET", "0.84 * FRAMETIME_TARGET"] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010024700901A000/9CDFB0CD24CAE030.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010024700901A000/9CDFB0CD24CAE030.yaml deleted file mode 100644 index df54bb3..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010024700901A000/9CDFB0CD24CAE030.yaml +++ /dev/null @@ -1,26 +0,0 @@ -# Gal*Gun 2 1.0.4 -# BID: 9CDFB0CD24CAE030 - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x4346990, 0] - value_type: uint32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x44E6DA8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # Disable custom FPS Lock - - - type: write - address: [MAIN, 0x44E6030, 0x764] - address_unsafe: true - value_type: float - value: 0 - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100255016498000/12024D08CCFD25EB.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100255016498000/12024D08CCFD25EB.yaml deleted file mode 100644 index a40da19..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100255016498000/12024D08CCFD25EB.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# Zombie Army 4: Dead War `Asia` 1.1.1 -# BID: 12024D08CCFD25EB - -ALL_FPS: - # Dynamic Resolution FPS Target - - - type: evaluate_write - address: [MAIN, 0x179EF64] - value_type: float - value: FPS_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010025A01CD86000/D2A5A1FC6EEADF31.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010025A01CD86000/D2A5A1FC6EEADF31.yaml deleted file mode 100644 index 6f70f0d..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010025A01CD86000/D2A5A1FC6EEADF31.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Ironsmith: Medieval Simulator 1.1.0 -# BID: D2A5A1FC6EEADF31 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x6C25F58, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6C538E8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x64578D8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010025C0145D4000/0CC82881FF112C6D.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010025C0145D4000/0CC82881FF112C6D.yaml deleted file mode 100644 index aecfc34..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010025C0145D4000/0CC82881FF112C6D.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# GUNDAM BREAKER 4 1.9.0 -# BID: 0CC82881FF112C6D - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x9F98D48, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x9FC67E8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x97CADA8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010025C0145D4000/0FCB7D1E6E4D1836.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010025C0145D4000/0FCB7D1E6E4D1836.yaml deleted file mode 100644 index bc74c1f..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010025C0145D4000/0FCB7D1E6E4D1836.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# GUNDAM BREAKER 4 1.3.0 -# BID: 0FCB7D1E6E4D1836 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x9F3DD48, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x9F6B7E8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x976F5C8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010025C0145D4000/0FF5CF27929E07F9.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010025C0145D4000/0FF5CF27929E07F9.yaml deleted file mode 100644 index 8472143..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010025C0145D4000/0FF5CF27929E07F9.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# GUNDAM BREAKER 4 1.12.0 -# BID: 0FF5CF27929E07F9 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0xA080D48, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xA0AE7E8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x98B2D28, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010025C0145D4000/6267E76E9540F2ED.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010025C0145D4000/6267E76E9540F2ED.yaml deleted file mode 100644 index 782029d..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010025C0145D4000/6267E76E9540F2ED.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# GUNDAM BREAKER 4 1.10.0 -# BID: 6267E76E9540F2ED - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x9FA2D48, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x9FD07E8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x97D4E48, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010025C0145D4000/E82F8A34CCC706E7.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010025C0145D4000/E82F8A34CCC706E7.yaml deleted file mode 100644 index 486350c..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010025C0145D4000/E82F8A34CCC706E7.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# GUNDAM BREAKER 4 1.11.0 -# BID: E82F8A34CCC706E7 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0xA03AD48, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xA0687E8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x986C958, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010025C0145D4000/EA4853C29547CBBC.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010025C0145D4000/EA4853C29547CBBC.yaml deleted file mode 100644 index 55fedf8..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010025C0145D4000/EA4853C29547CBBC.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# GUNDAM BREAKER 4 1.6.0 -# BID: EA4853C29547CBBC - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x9F97D48, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x9FC57E8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x97C9DA8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010025C0145D4000/F898CCE9C3A291AF.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010025C0145D4000/F898CCE9C3A291AF.yaml deleted file mode 100644 index ddcd039..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010025C0145D4000/F898CCE9C3A291AF.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# GUNDAM BREAKER 4 1.5.0 -# BID: F898CCE9C3A291AF - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x9F64D48, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x9F927E8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x9796F88, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002620102C6000/7D1714279435589C.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01002620102C6000/7D1714279435589C.yaml deleted file mode 100644 index 734881b..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002620102C6000/7D1714279435589C.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# BioShock Remastered 2 1.0.2 -# BID: 7D1714279435589C - -unsafeCheck: true - -ALL_FPS: - # Dynamic resolution FPS factor - - - type: evaluate_write - address: [MAIN, 0x212C138, 0] - value_type: float - value: FPS_TARGET diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010026E00CDF8000/A953B35A45BEA33D.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010026E00CDF8000/A953B35A45BEA33D.yaml deleted file mode 100644 index a745fab..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010026E00CDF8000/A953B35A45BEA33D.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# Caligula Overdose/カリギュラ オーバードーズ 1.01 -# BID: A953B35A45BEA33D - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to one decimal - - - type: evaluate_write - address: [MAIN, 0x5CF2530, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x5D170A8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010026F013B3A000/5EAF1BB0E2B89AF4.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010026F013B3A000/5EAF1BB0E2B89AF4.yaml deleted file mode 100644 index cf5bf59..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010026F013B3A000/5EAF1BB0E2B89AF4.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# King's Bounty II 1.7 -# BID: 5EAF1BB0E2B89AF4 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x93CF440, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2", "TruncDec(FRAMETIME_TARGET, 2)"] - # r.VSync - - - type: write - address: [MAIN, 0x8874BA0, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x93FB7B0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100272013014000/D1D421137AAE1A5E.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100272013014000/D1D421137AAE1A5E.yaml deleted file mode 100644 index 0e37a8b..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100272013014000/D1D421137AAE1A5E.yaml +++ /dev/null @@ -1,18 +0,0 @@ -# Airhead 1.0.0 -# BID: D1D421137AAE1A5E - -unsafeCheck: true - -ALL_FPS: - # maxFixedDeltaTime, ref: UnityEngine.Time::get_timeScale - - - type: write - address: [MAIN, 0x49617C0, 0x100] - value_type: float - value: 0.0666666666 - # fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x49617C0, 0x48] - value_type: float - value: "1 / FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010027400CDC6000/4979B200D53BB282.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010027400CDC6000/4979B200D53BB282.yaml deleted file mode 100644 index 968a275..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010027400CDC6000/4979B200D53BB282.yaml +++ /dev/null @@ -1,22 +0,0 @@ -# Divinity Original Sin 2 1.0.10 -# BID: 4979B200D53BB282 -# Game is using double buffer, buffers are not allocated in loop. -# So it's not possible to get stable FPS lock between 30 and 60 without changing refresh rate. - -DECLARATIONS: - - - type: variable - name: dr_scale - value_type: double - default_value: 1000000 - evaluate: "30000000 / FPS_TARGET" - -MASTER_WRITE: - # Change location of GPU frametime double divider - - - type: asm_a64 - main_offset: 0x921768 - instructions: [ - [adrp, x8, $dr_scale], - [ldr, d1, [x8, $dr_scale]] - ] diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100276019E96000/EC983B9153629AC8.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100276019E96000/EC983B9153629AC8.yaml deleted file mode 100644 index aee7127..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100276019E96000/EC983B9153629AC8.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# 창세기전 ~회색의 잔영~ / The War of Genesis: Remnants of Gray 1.1.0 -# BID: EC983B9153629AC8 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x771FD78, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x774DA38, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6F518D8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010027B01E32C000/227837B490A51033.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010027B01E32C000/227837B490A51033.yaml deleted file mode 100644 index 6d37375..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010027B01E32C000/227837B490A51033.yaml +++ /dev/null @@ -1,30 +0,0 @@ -# S.T.A.L.K.E.R.: Clear Sky 1.0.2 -# BID: 227837B490A51033 - -unsafeCheck: true - -ALL_FPS: - # psLoadedFrameLimitFps - - - type: evaluate_write - address: [MAIN, 0x17D4774] - value_type: float - value: FPS_LOCK_TARGET - # psCurrentFrameLimitFps - - - type: evaluate_write - address: [MAIN, 0x17F18E8] - value_type: float - value: FPS_LOCK_TARGET - # psCurrentFrameLimitMs - - - type: evaluate_write - address: [MAIN, 0x1A5F36C] - value_type: float - value: "1000 / FPS_LOCK_TARGET" - # ResolutionInfo::sDynresGPUBudgetMs - - - type: evaluate_write - address: [MAIN, 0x17D4750] - value_type: float - value: "0.99 * FRAMETIME_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010027B01E32C000/38171F8A5687B940.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010027B01E32C000/38171F8A5687B940.yaml deleted file mode 100644 index f2c38c8..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010027B01E32C000/38171F8A5687B940.yaml +++ /dev/null @@ -1,30 +0,0 @@ -# S.T.A.L.K.E.R.: Clear Sky 1.0.1 -# BID: 38171F8A5687B940 - -unsafeCheck: true - -ALL_FPS: - # psLoadedFrameLimitFps - - - type: evaluate_write - address: [MAIN, 0x17BD76C] - value_type: float - value: FPS_LOCK_TARGET - # psCurrentFrameLimitFps - - - type: evaluate_write - address: [MAIN, 0x17DA8E8] - value_type: float - value: FPS_LOCK_TARGET - # psCurrentFrameLimitMs - - - type: evaluate_write - address: [MAIN, 0x1A4436C] - value_type: float - value: "1000 / FPS_LOCK_TARGET" - # ResolutionInfo::sDynresGPUBudgetMs - - - type: evaluate_write - address: [MAIN, 0x17BD748] - value_type: float - value: "0.99 * FRAMETIME_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010027B01E32C000/C7E4E6F4167C8E3A.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010027B01E32C000/C7E4E6F4167C8E3A.yaml deleted file mode 100644 index 8e78385..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010027B01E32C000/C7E4E6F4167C8E3A.yaml +++ /dev/null @@ -1,30 +0,0 @@ -# S.T.A.L.K.E.R.: Clear Sky 1.0.3 -# BID: C7E4E6F4167C8E3A - -unsafeCheck: true - -ALL_FPS: - # psLoadedFrameLimitFps - - - type: evaluate_write - address: [MAIN, 0x17D4774] - value_type: float - value: FPS_LOCK_TARGET - # psCurrentFrameLimitFps - - - type: evaluate_write - address: [MAIN, 0x17F18E8] - value_type: float - value: FPS_LOCK_TARGET - # psCurrentFrameLimitMs - - - type: evaluate_write - address: [MAIN, 0x1A5F36C] - value_type: float - value: "1000 / FPS_LOCK_TARGET" - # ResolutionInfo::sDynresGPUBudgetMs - - - type: evaluate_write - address: [MAIN, 0x17D4750] - value_type: float - value: "FRAMETIME_TARGET - (1/30)" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100285016010000/14C878ECCA9D7CB5.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100285016010000/14C878ECCA9D7CB5.yaml deleted file mode 100644 index 9e042d9..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100285016010000/14C878ECCA9D7CB5.yaml +++ /dev/null @@ -1,38 +0,0 @@ -# 鬼滅の刃 ヒノカミ血風譚 1.53 -# BID: 14C878ECCA9D7CB5 - -ALL_FPS: - # Disable bUseFixedFrameRate to unlock framerate - - - type: write - address: [MAIN, 0xB314540, 0x7F8] - address_unsafe: true - value_type: uint32 - # Default is 0x47, bUseFixedFrameRate |= 0x40 - # By writing 7 we are making sure that other flags are maintained: - # bAllowMultiThreadedAnimationUpdate |= 4 - # bOptimizeAnimBlueprintMemberVariableAccess |= 2 - # bCanBlueprintsTickByDefault |= 1 - value: 7 - # Disable CustomTimeStep - - - type: write - address: [MAIN, 0xB314540, 0x810] - value_type: uint8 - value: 0 - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xB314830, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0xAB49110, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010028901FF00000/EB58D577539E9151.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010028901FF00000/EB58D577539E9151.yaml deleted file mode 100644 index d687059..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010028901FF00000/EB58D577539E9151.yaml +++ /dev/null @@ -1,26 +0,0 @@ -# The Beast Inside 1.2.0 -# BID: EB58D577539E9151 - -ALL_FPS: - # Disable bUseFixedFrameRate - - - type: write - address: [MAIN, 0x64AD448, 0x7A4] - address_unsafe: true - value_type: uint32 - value: 7 - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x64ADD48, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x5CE8100, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010028D005A3C000/0C0CAC3FCF0F0BEB.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010028D005A3C000/0C0CAC3FCF0F0BEB.yaml deleted file mode 100644 index d0f2321..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010028D005A3C000/0C0CAC3FCF0F0BEB.yaml +++ /dev/null @@ -1,18 +0,0 @@ -# The Elder Scrolls V: Skyrim JPN 1.1.404.0 -# BID: 0C0CAC3FCF0F0BEB - -ALL_FPS: - # Dynamic Resolution Frame Time Max = 0.99 * (1000/FPS) - # REF: 21 0C 02 1F 01 FC 00 BD, third ldr below - - - type: evaluate_write - address: [MAIN, 0x3357FB0] - value_type: float - value: "0.99 * FRAMETIME_TARGET" - # Dynamic Resolution Frame Time Min = 0.9 * (1000/FPS) - # REF: 21 0C 02 1F 01 FC 00 BD, first ldr below - - - type: evaluate_write - address: [MAIN, 0x3357FC8] - value_type: float - value: "0.9 * FRAMETIME_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010028D005A3C000/4F7995092FAA5DC0.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010028D005A3C000/4F7995092FAA5DC0.yaml deleted file mode 100644 index 1ccdac9..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010028D005A3C000/4F7995092FAA5DC0.yaml +++ /dev/null @@ -1,16 +0,0 @@ -# The Elder Scrolls V: Skyrim JPN 1.1.392.3925134 -# BID: 4F7995092FAA5DC0 - -ALL_FPS: - # Dynamic Resolution Frame Time Min = 0.9 * (1000/FPS) - - - type: evaluate_write - address: [MAIN, 0x3356FC8] - value_type: float - value: "0.9 * FRAMETIME_TARGET" - # Dynamic Resolution Frame Time Max = 0.99 * (1000/FPS) - - - type: evaluate_write - address: [MAIN, 0x3356FB0] - value_type: float - value: "0.99 * FRAMETIME_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010028D00BA1A000/85E49C169A8B988A.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010028D00BA1A000/85E49C169A8B988A.yaml deleted file mode 100644 index 596ad8f..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010028D00BA1A000/85E49C169A8B988A.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# The Sinking City 1.2.0 -# BID: 85E49C169A8B988A - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 1 decimal - - - type: evaluate_write - address: [MAIN, 0x5228DC0, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x524F940, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010029B0118E8000/799D1061182C1302.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010029B0118E8000/799D1061182C1302.yaml deleted file mode 100644 index 1566317..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010029B0118E8000/799D1061182C1302.yaml +++ /dev/null @@ -1,44 +0,0 @@ -# Need For Speed Hot Pursuit Remastered 1.0.3 -# BID: 799D1061182C1302 -# Thanks to theboy181 for finding instruction responsible for calculating frame time which I used to find where is FPS target stored - -MASTER_WRITE: - # Remove FPS Lock - - - type: asm_a64 - main_offset: 0x4835A4 - instructions: [ - [nop] - ] -ALL_FPS: - # Switch game to 60 FPS mode - - - type: write - address: [MAIN, 0xF0043C] - value_type: uint32 - value: 1 - # FPS Target - - - type: evaluate_write - address: [MAIN, 0xED96A8, 0x30] - address_unsafe: true - value_type: uint32 - value: "19200000 / FPS_TARGET" - - - type: evaluate_write - address: [MAIN, 0xED96A8, 0x28] - address_unsafe: true - value_type: uint32 - value: "1920000 / FPS_TARGET" - # FPS 2D Game Speed Target - - - type: evaluate_write - address: [MAIN, 0xEFFC60, 0x30] - value_type: float - value: "1 / FPS_TARGET" - # FPS 3D Game Speed Target - - - type: evaluate_write - address: [MAIN, 0xEFFC60, 0x50] - value_type: float - value: "1 / FPS_TARGET" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010029F01BA3E000/F8EA898027152437.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010029F01BA3E000/F8EA898027152437.yaml deleted file mode 100644 index b938ae1..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010029F01BA3E000/F8EA898027152437.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Xuan Yuan Sword 7 1.0.0 -# BID: F8EA898027152437 - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x649CE60, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x6C3C9F8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6C5FB20, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002A4021B86000/99519C9259122E4F.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01002A4021B86000/99519C9259122E4F.yaml deleted file mode 100644 index de8a860..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002A4021B86000/99519C9259122E4F.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# Storm Lancers 1.0.1.72 -# BID: 99519C9259122E4F - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7ED0D60, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6EB2F28, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002A4021B86000/E5D70A1E288F74A7.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01002A4021B86000/E5D70A1E288F74A7.yaml deleted file mode 100644 index 72b0d12..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002A4021B86000/E5D70A1E288F74A7.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# Storm Lancers 1.1.0.5 -# BID: E5D70A1E288F74A7 - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7ED6D60, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6EB8F28, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002A501869E000/BFA92380757EF97D.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01002A501869E000/BFA92380757EF97D.yaml deleted file mode 100644 index df6347f..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002A501869E000/BFA92380757EF97D.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Gamedec - Definitive Edition 1.3.0 -# BID: BFA92380757EF97D - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x8A9A438, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8AC7808, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002AF011D14000/D1B29E1ABDCD955E.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01002AF011D14000/D1B29E1ABDCD955E.yaml deleted file mode 100644 index 4299572..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002AF011D14000/D1B29E1ABDCD955E.yaml +++ /dev/null @@ -1,36 +0,0 @@ -# Tennis World Tour 2 1.3.0 -# BID: D1B29E1ABDCD955E - -DECLARATIONS: - - - type: variable - name: dr_target - value_type: float - default_value: 0.03333333333 - evaluate: "1 / FPS_TARGET" - - - type: code - name: tripleBuffer - instructions: [ - [mov, w9, 3], - [str, w9, [x8, 0x1A0]], - [mov, w8, w9], - [ret] - ] -MASTER_WRITE: - - - type: asm_a64 - main_offset: 0x726338 - instructions: [ - [bl, _tripleBuffer()] - ] - # Redirect Dynamic Resolution target reading to MAIN + 0x30C3F00 - # REF: 28 11 91 52 08 A1 A7 72 03 01 27 1E - - - type: asm_a64 - main_offset: 0x1896448 - instructions: [ - [adrp, x12, $dr_target], - [ldr, s17, [x12, $dr_target]], - [nop] - ] diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002B00111A2000/C3CF52BF2B05D731.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01002B00111A2000/C3CF52BF2B05D731.yaml deleted file mode 100644 index 7dda00a..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002B00111A2000/C3CF52BF2B05D731.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Hyrule Warriors: Age of Calamity 1.3.0 -# BID: C3CF52BF2B05D731 -# Thanks to iCris4 for finding offsets -# Some cutscenes speed is hardlocked to 30 FPS, so setting FPS above results in faster speed - -unsafeCheck: true - -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x269E150] - value_type: int32 - value: [FPS_TARGET, VSYNC_TARGET, FPS_TARGET] - - - type: evaluate_write - address: [MAIN, 0x269E15C] - value_type: float - value: FPS_LOCK_TARGET - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002B7013440000/A19E113723E5C32E.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01002B7013440000/A19E113723E5C32E.yaml deleted file mode 100644 index 360e274..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002B7013440000/A19E113723E5C32E.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# New Tales from the Borderlands 1.0.2 -# BID: A19E113723E5C32E - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0xA158F08, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xA1884D8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002B9012E28000/6C3F685C62070885.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01002B9012E28000/6C3F685C62070885.yaml deleted file mode 100644 index d41061c..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002B9012E28000/6C3F685C62070885.yaml +++ /dev/null @@ -1,23 +0,0 @@ -# 真・三國無双8 Empires 1.0.1 -# BID: 6C3F685C62070885 - -ALL_FPS: - ## REF: 02 00 00 00 3C 00 00 00 - - - type: evaluate_write - address: [MAIN, 0x2111728] - value_type: int32 - value: [VSYNC_TARGET, FPS_TARGET] - - - type: evaluate_write - address: [MAIN, 0x2111730] - value_type: float - value: FPS_TARGET - - - type: evaluate_write - address: [MAIN, 0x34DF954] - value_type: float - value: "1 / FPS_TARGET" - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002BD00F626000/4C277E67AB50D547.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01002BD00F626000/4C277E67AB50D547.yaml deleted file mode 100644 index 9fec1d3..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002BD00F626000/4C277E67AB50D547.yaml +++ /dev/null @@ -1,11 +0,0 @@ -# Inertial Drift 1.2.1 -# BID: 4C277E67AB50D547 - -ALL_FPS: - # Assets.Source.Tools.CorePlugin_TypeInfo - - - type: evaluate_write - address: [MAIN, 0x577BF78, 0xB8, 0, 0xF0, 0xD8, 0x28, 0x20] - address_unsafe: true - value_type: uint32 - value: FPS_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002BE016054000/751420FADE402804.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01002BE016054000/751420FADE402804.yaml deleted file mode 100644 index cb38d1f..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002BE016054000/751420FADE402804.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# SD GUNDAM BATTLE ALLIANCE 1.4.0 -# BID: 751420FADE402804 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x7ABD908, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7AEB4D8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x72F0BD8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C0015644000/3A3C781930CB8201.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C0015644000/3A3C781930CB8201.yaml deleted file mode 100644 index dc13883..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C0015644000/3A3C781930CB8201.yaml +++ /dev/null @@ -1,33 +0,0 @@ -# Maglam Lord 1.00 -# BID: 3A3C781930CB8201 -# WARNING: Enemy Movement Speed is not scaling properly to framerate. At 60 FPS it's multiple times slower, looking like enemies are practically walking in place. - -ALL_FPS: - # Disable bUseFixedFrameRate to untie game speed from framerate and unlock FPS - - - type: write - address: [MAIN, 0x5F32908, 0x7B8] - address_unsafe: true - value_type: uint32 - # Default is 0x47, bUseFixedFrameRate |= 0x40 - # By writing 7 we are making sure that other flags are maintained: - # bAllowMultiThreadedAnimationUpdate |= 4 - # bOptimizeAnimBlueprintMemberVariableAccess |= 2 - # bCanBlueprintsTickByDefault |= 1 - value: 7 - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 1 decimal - - - type: evaluate_write - address: [MAIN, 0x5F086C0, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x5F331D8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/0542802E014A7312.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/0542802E014A7312.yaml deleted file mode 100644 index f0aa52d..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/0542802E014A7312.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Expeditions: A Mudrunner Game 1.5.0.0 -# BID: 0542802E014A7312 -# REF: 01 04 0C 5E 00 10 2E 1E - -unsafeCheck: true - -MASTER_WRITE: -# Redirect DR frametime target to MAIN+0x3574A00 - - - type: bytes - main_offset: 0x16589A0 - value_type: uint32 - value: - - 0x9000F8EC - - 0xB94A018C - # default value - - - type: bytes - main_offset: 0x3574A00 - value_type: float - value: 33.3333333333 -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x3574A00] - value_type: float - value: FRAMETIME_TARGET diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/08C88691FFA5407C.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/08C88691FFA5407C.yaml deleted file mode 100644 index b2986ea..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/08C88691FFA5407C.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Expeditions: A Mudrunner Game 1.14.0.0 -# BID: 08C88691FFA5407C -# REF: 01 04 0C 5E 00 10 2E 1E - -unsafeCheck: true - -MASTER_WRITE: -# Redirect DR frametime target to MAIN+0x36AEF00 - - - type: bytes - main_offset: 0x1718A64 - value_type: uint32 - value: - - 0xD000FCAC # adrp x12, #0x36AE000 - - 0xBD4F0182 # ldr s2, [x12, #0xf00] - # default value - - - type: bytes - main_offset: 0x36AEF00 - value_type: float - value: 33.3333333333 -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x36AEF00] - value_type: float - value: FRAMETIME_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/0F7616E6F5EE08CE.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/0F7616E6F5EE08CE.yaml deleted file mode 100644 index 061ec37..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/0F7616E6F5EE08CE.yaml +++ /dev/null @@ -1,20 +0,0 @@ -# Expeditions: A Mudrunner Game 1.19.0.0 -# BID: 0F7616E6F5EE08CE -# REF: 01 04 0C 5E 00 10 2E 1E - -DECLARATIONS: - - - type: variable - name: dr_target - value_type: float - default_value: 33.333333 - evaluate: FRAMETIME_TARGET -MASTER_WRITE: -# Redirect DR frametime target - - - type: asm_a64 - main_offset: 0x177D4A4 - instructions: [ - [adrp, x13, $dr_target], - [ldr, s2, [x13, $dr_target]] - ] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/225B47BDEC7C2D4E.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/225B47BDEC7C2D4E.yaml deleted file mode 100644 index 49c573e..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/225B47BDEC7C2D4E.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Expeditions: A Mudrunner Game 1.12.0.0 -# BID: 225B47BDEC7C2D4E -# REF: 01 04 0C 5E 00 10 2E 1E - -unsafeCheck: true - -MASTER_WRITE: -# Redirect DR frametime target to MAIN+0x3623F00 - - - type: bytes - main_offset: 0x16AB5C0 - value_type: uint32 - value: - - 0x9000FBCC - - 0xBD4F0182 - # default value - - - type: bytes - main_offset: 0x3623F00 - value_type: float - value: 33.3333333333 -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x3623F00] - value_type: float - value: FRAMETIME_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/3DCE80782561A0CA.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/3DCE80782561A0CA.yaml deleted file mode 100644 index 0e9fe1a..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/3DCE80782561A0CA.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Expeditions: A Mudrunner Game 1.16.0.0 -# BID: 3DCE80782561A0CA -# REF: 01 04 0C 5E 00 10 2E 1E - -unsafeCheck: true - -MASTER_WRITE: -# Redirect DR frametime target to MAIN+0x36B4F00 - - - type: bytes - main_offset: 0x171E454 - value_type: uint32 - value: - - 0xD000FCAC # adrp x12, #0x36B4000 - - 0xBD4F0182 # ldr s2, [x12, #0xf00] - # default value - - - type: bytes - main_offset: 0x36B4F00 - value_type: float - value: 33.3333333333 -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x36B4F00] - value_type: float - value: FRAMETIME_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/471546458FD9E43D.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/471546458FD9E43D.yaml deleted file mode 100644 index 917749c..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/471546458FD9E43D.yaml +++ /dev/null @@ -1,20 +0,0 @@ -# Expeditions: A Mudrunner Game 1.17.0.0 -# BID: 471546458FD9E43D -# REF: 01 04 0C 5E 00 10 2E 1E - -DECLARATIONS: - - - type: variable - name: dr_target - value_type: float - default_value: 33.333333 - evaluate: FRAMETIME_TARGET -MASTER_WRITE: -# Redirect DR frametime target - - - type: asm_a64 - main_offset: 0x17358B4 - instructions: [ - [adrp, x13, $dr_target], - [ldr, s2, [x13, $dr_target]] - ] diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/8D76B30C877FED66.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/8D76B30C877FED66.yaml deleted file mode 100644 index bc2a155..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/8D76B30C877FED66.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Expeditions: A Mudrunner Game 1.6.0.0 -# BID: 8D76B30C877FED66 -# REF: 01 04 0C 5E 00 10 2E 1E - -unsafeCheck: true - -MASTER_WRITE: -# Redirect DR frametime target to MAIN+0x3574A00 - - - type: bytes - main_offset: 0x16589E0 - value_type: uint32 - value: - - 0x9000F8EC - - 0xB94A018C - # default value - - - type: bytes - main_offset: 0x3574A00 - value_type: float - value: 33.3333333333 -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x3574A00] - value_type: float - value: FRAMETIME_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/9ACB108D8DC59245.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/9ACB108D8DC59245.yaml deleted file mode 100644 index 5c88ed3..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/9ACB108D8DC59245.yaml +++ /dev/null @@ -1,20 +0,0 @@ -# Expeditions: A Mudrunner Game 1.18.0.0 -# BID: 9ACB108D8DC59245 -# REF: 01 04 0C 5E 00 10 2E 1E - -DECLARATIONS: - - - type: variable - name: dr_target - value_type: float - default_value: 33.333333 - evaluate: FRAMETIME_TARGET -MASTER_WRITE: -# Redirect DR frametime target - - - type: asm_a64 - main_offset: 0x1737634 - instructions: [ - [adrp, x13, $dr_target], - [ldr, s2, [x13, $dr_target]] - ] diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/A995EDA18F71EA37.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/A995EDA18F71EA37.yaml deleted file mode 100644 index 8ca3680..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/A995EDA18F71EA37.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Expeditions: A Mudrunner Game 1.8.0.0 -# BID: A995EDA18F71EA37 -# REF: 01 04 0C 5E 00 10 2E 1E - -unsafeCheck: true - -MASTER_WRITE: -# Redirect DR frametime target to MAIN+0x3622A00 - - - type: bytes - main_offset: 0x16AA1D0 - value_type: uint32 - value: - - 0x9000FBCC - - 0xB94A018C - # default value - - - type: bytes - main_offset: 0x3622A00 - value_type: float - value: 33.3333333333 -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x3622A00] - value_type: float - value: FRAMETIME_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/E1426CF1C30E7CC7.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/E1426CF1C30E7CC7.yaml deleted file mode 100644 index ed74444..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/E1426CF1C30E7CC7.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Expeditions: A Mudrunner Game 1.10.0.0 -# BID: E1426CF1C30E7CC7 -# REF: 01 04 0C 5E 00 10 2E 1E - -unsafeCheck: true - -MASTER_WRITE: -# Redirect DR frametime target to MAIN+0x3622A00 - - - type: bytes - main_offset: 0x16AA560 - value_type: uint32 - value: - - 0x9000FBCC - - 0xB94A018C - # default value - - - type: bytes - main_offset: 0x3622A00 - value_type: float - value: 33.3333333333 -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x3622A00] - value_type: float - value: FRAMETIME_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/E28441A322FE29BF.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/E28441A322FE29BF.yaml deleted file mode 100644 index 7fd0459..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/E28441A322FE29BF.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Expeditions: A Mudrunner Game 1.11.0.0 -# BID: E28441A322FE29BF -# REF: 01 04 0C 5E 00 10 2E 1E - -unsafeCheck: true - -MASTER_WRITE: -# Redirect DR frametime target to MAIN+0x3622F00 - - - type: bytes - main_offset: 0x16AA530 - value_type: uint32 - value: - - 0x9000FBCC - - 0xBD4F0182 - # default value - - - type: bytes - main_offset: 0x3622F00 - value_type: float - value: 33.3333333333 -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x3622F00] - value_type: float - value: FRAMETIME_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/ED20E42E41B58D88.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/ED20E42E41B58D88.yaml deleted file mode 100644 index a6bfc05..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/ED20E42E41B58D88.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Expeditions: A Mudrunner Game 1.13.0.0 -# BID: ED20E42E41B58D88 -# REF: 01 04 0C 5E 00 10 2E 1E - -unsafeCheck: true - -MASTER_WRITE: -# Redirect DR frametime target to MAIN+0x3628F00 - - - type: bytes - main_offset: 0x16AFA80 - value_type: uint32 - value: - - 0xB000FBCC # adrp x12, #0x3628000 - - 0xBD4F0182 # ldr s2, [x12, #0xf00] - # default value - - - type: bytes - main_offset: 0x3628F00 - value_type: float - value: 33.3333333333 -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x3628F00] - value_type: float - value: FRAMETIME_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C400E526000/1FF442C5ABEB0459.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C400E526000/1FF442C5ABEB0459.yaml deleted file mode 100644 index 67fea67..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C400E526000/1FF442C5ABEB0459.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Gigantosaurus The Game 1.0.2 -# BID: 1FF442C5ABEB0459 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x6AFA6C8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6B28058, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C9022770000/2AD8CC7892EBF9FA.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C9022770000/2AD8CC7892EBF9FA.yaml deleted file mode 100644 index 17c9a54..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C9022770000/2AD8CC7892EBF9FA.yaml +++ /dev/null @@ -1,43 +0,0 @@ -# Trails in the Sky 1st Chapter 1.0.4 -# BID: 2AD8CC7892EBF9FA - -DECLARATIONS: - # Lock Max Handheld Resolution to 720p instead of 900p - - - type: code - name: adjustDrResToNativeInHH - instructions: [ - [cmp, w9, 1280], - [b.le, :goto1], - [adrp, x21, 0x65F000], - [ldr, w21, [x21, 0x820]], ## REF: nn::oe::GetOperationMode in nnMain - [cbnz, w21, :goto1], - [mov, w9, 1280], - [mov, w8, 720], - :goto1, [stp, w9, w8, [x19, 0x10]], - [ret] - ] -MASTER_WRITE: - ## REF: 69 22 02 29 - - - type: asm_a64 - main_offset: 0x238D24 - instructions: [ - [bl, _adjustDrResToNativeInHH()] - ] -ALL_FPS: - # Min Delta - ## REF: 88 01 80 52 C1 03 80 52 28 4D 28 9B 29 00 80 52, first ADRP + ADD below it - - - type: evaluate_write - address: [MAIN, 0x65F850, 0x2C] - value_type: uint32 - value: FPS_TARGET - # Dynamic Resolution and Min Delta multiplier (some UI elements are not adjusted by it, that's why I'm using both values) - ## REF: First function in .init_array section, ADRP + ADD + 0x220 (default float: 2) - ## Adding there 0.95 by myself because game seems to have issues with reaching 60 FPS with 1.0 - - - type: write - address: [MAIN, 0x65F368] - value_type: float - value: 0.95 diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C9022770000/2B18130BD191CAC5.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C9022770000/2B18130BD191CAC5.yaml deleted file mode 100644 index 4ba3d6f..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C9022770000/2B18130BD191CAC5.yaml +++ /dev/null @@ -1,43 +0,0 @@ -# Trails in the Sky 1st Chapter 1.0.6 -# BID: 2B18130BD191CAC5 - -DECLARATIONS: - # Lock Max Handheld Resolution to 720p instead of 900p - - - type: code - name: adjustDrResToNativeInHH - instructions: [ - [cmp, w10, 1280], - [b.le, :goto1], - [adrp, x21, 0x732000], - [ldr, w21, [x21, 0x820]], ## REF: nn::oe::GetOperationMode in nnMain - [cbnz, w21, :goto1], - [mov, w10, 1280], - [mov, w8, 720], - :goto1, [stp, w10, w8, [x19, 0x10]], - [ret] - ] -MASTER_WRITE: - ## REF: 88 C2 88 1A 6A 22 02 29 - - - type: asm_a64 - main_offset: 0x2D07B4 - instructions: [ - [bl, _adjustDrResToNativeInHH()] - ] -ALL_FPS: - # Min Delta - ## REF: C1 03 80 52 28 4D 28 9B, first ADRP + ADD below it - - - type: evaluate_write - address: [MAIN, 0x732850, 0x2C] - value_type: uint32 - value: FPS_TARGET - # Dynamic Resolution - ## REF: First function in .init_array section, ADRP + ADD + 0x220 (default float: 2) - ## Adding there 0.9 by myself because game seems to have issues with reaching 60 FPS without it - - - type: write - address: [MAIN, 0x7323D0] - value_type: float - value: 0.95 \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C9022770000/E5F70FFCBD0DD378.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C9022770000/E5F70FFCBD0DD378.yaml deleted file mode 100644 index 884d880..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002C9022770000/E5F70FFCBD0DD378.yaml +++ /dev/null @@ -1,43 +0,0 @@ -# Trails in the Sky 1st Chapter 1.0.5 -# BID: E5F70FFCBD0DD378 - -DECLARATIONS: - # Lock Max Handheld Resolution to 720p instead of 900p - - - type: code - name: adjustDrResToNativeInHH - instructions: [ - [cmp, w10, 1280], - [b.le, :goto1], - [adrp, x21, 0x730000], - [ldr, w21, [x21, 0x820]], ## REF: nn::oe::GetOperationMode in nnMain - [cbnz, w21, :goto1], - [mov, w10, 1280], - [mov, w8, 720], - :goto1, [stp, w10, w8, [x19, 0x10]], - [ret] - ] -MASTER_WRITE: - ## REF: 88 C2 88 1A 6A 22 02 29 - - - type: asm_a64 - main_offset: 0x2D0444 - instructions: [ - [bl, _adjustDrResToNativeInHH()] - ] -ALL_FPS: - # Min Delta - ## REF: C1 03 80 52 28 4D 28 9B, first ADRP + ADD below it - - - type: evaluate_write - address: [MAIN, 0x730850, 0x2C] - value_type: uint32 - value: FPS_TARGET - # Dynamic Resolution - ## REF: First function in .init_array section, ADRP + ADD + 0x220 (default float: 2) - ## Adding there 0.9 by myself because game seems to have issues with reaching 60 FPS without it - - - type: write - address: [MAIN, 0x7303D0] - value_type: float - value: 0.95 \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002D901CDB6000/A42569DBA6D326B5.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01002D901CDB6000/A42569DBA6D326B5.yaml deleted file mode 100644 index e9debb0..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002D901CDB6000/A42569DBA6D326B5.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# Just Crow Things 1.0.21 -# BID: A42569DBA6D326B5 - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x53B5280, 0x48] - value_type: float - value: "1 / FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002DB00DDFE000/4CCD2F6D331DD104.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01002DB00DDFE000/4CCD2F6D331DD104.yaml deleted file mode 100644 index e519dc7..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002DB00DDFE000/4CCD2F6D331DD104.yaml +++ /dev/null @@ -1,42 +0,0 @@ -# 魂斗羅 ローグ コープス 1.3.0 -# BID: 4CCD2F6D331DD104 - -DECLARATIONS: - - - type: variable - name: dr_factor - value_type: float - default_value: 1000000 - evaluate: "30000000 / FPS_TARGET" - - - type: code - name: fpsTarget - instructions: [ - [adrp, x8, 0xd94000], - [ldr, w8, [x8, 0x628]], - [ret] - ] -MASTER_WRITE: - # Read FPS target from code cave - - - type: asm_a64 - main_offset: 0x2004 - instructions: [ - [bl, _fpsTarget()] - ] - # Redirect DR time factor - - - type: asm_a64 - main_offset: 0x2140 - instructions: [ - [adrp, x8, $dr_factor], - [ldr, s9, [x8, $dr_factor]] - ] -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0xD94628] - value_type: uint32 - value: FPS_TARGET - - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002E800E9D4000/B151A224A429F9A7.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01002E800E9D4000/B151A224A429F9A7.yaml deleted file mode 100644 index 9817dd8..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002E800E9D4000/B151A224A429F9A7.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# The Witcher 3: Wild Hunt - The Complete Edition `Cartridge only` 4.04a-4.04b -# BID: B151A224A429F9A7 - -ALL_FPS: - # DRGameTargetFrameTimeInMs - - - type: evaluate_write - address: [MAIN, 0x41312B4] - value_type: float - value: "0.945 * FRAMETIME_TARGET" - # DRCinematicTargetFrameTimeInMs - - - type: evaluate_write - address: [MAIN, 0x41312E4] - value_type: float - value: "0.945 * FRAMETIME_TARGET" - # LimitFPS - - - type: evaluate_write - address: [MAIN, 0x411DCFC] - value_type: int32 - value: FPS_LOCK_TARGET - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002ED00B01C000/31F61EC3A4FEFDF7.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01002ED00B01C000/31F61EC3A4FEFDF7.yaml deleted file mode 100644 index a46831d..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002ED00B01C000/31F61EC3A4FEFDF7.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# Moto Racer 4 1.0.3 -# BID: 31F61EC3A4FEFDF7 - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x52ADD30, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x5B3BAB8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002FC012548000/2E7487767D0CA0EE.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01002FC012548000/2E7487767D0CA0EE.yaml deleted file mode 100644 index a5b2f2b..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002FC012548000/2E7487767D0CA0EE.yaml +++ /dev/null @@ -1,33 +0,0 @@ -# Jujutsu Kaisen Cursed Clash JP 1.3.0 -# BID: 2E7487767D0CA0EE - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) rounded to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x81A5A48, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x81E8F50, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x752A248, 0] - value_type: uint32 - value: [0, 0] - # Disable bUseFixedFrameRate - - - type: write - address: [MAIN, 0x81E87A8, 0x9C4] - value_type: uint32 - value: 7 - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002FC012548000/2F33996FD9C81253.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01002FC012548000/2F33996FD9C81253.yaml deleted file mode 100644 index d0cf1a4..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002FC012548000/2F33996FD9C81253.yaml +++ /dev/null @@ -1,33 +0,0 @@ -# Jujutsu Kaisen Cursed Clash JP 1.2.0 -# BID: 2F33996FD9C81253 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) rounded to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x8069A48, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x80ACF50, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x73EE7C8, 0] - value_type: uint32 - value: [0, 0] - # Disable bUseFixedFrameRate - - - type: write - address: [MAIN, 0x80AC7A8, 0x9C4] - value_type: uint32 - value: 7 - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002FC012548000/7C724F497564C027.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01002FC012548000/7C724F497564C027.yaml deleted file mode 100644 index dedf043..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002FC012548000/7C724F497564C027.yaml +++ /dev/null @@ -1,33 +0,0 @@ -# Jujutsu Kaisen Cursed Clash JP 1.4.0 -# BID: 7C724F497564C027 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x8458A48, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x849BF50, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x77DD548, 0] - value_type: uint32 - value: [0, 0] - # Disable bUseFixedFrameRate - - - type: write - address: [MAIN, 0x849B7A8, 0x9C4] - address_unsafe: true - value_type: uint32 - value: 7 - - - type: block - what: timing - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002FC012548000/95761555A341B190.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01002FC012548000/95761555A341B190.yaml deleted file mode 100644 index 2d8e49b..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002FC012548000/95761555A341B190.yaml +++ /dev/null @@ -1,33 +0,0 @@ -# Jujutsu Kaisen Cursed Clash JP 1.1.0 -# BID: 95761555A341B190 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) rounded to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x8036A48, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8079F50, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x73BB0C8, 0] - value_type: uint32 - value: [0, 0] - # Disable bUseFixedFrameRate - - - type: write - address: [MAIN, 0x80797A8, 0x9C4] - value_type: uint32 - value: 7 - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002FD01A24C000/8F72E0D61C4BA0B1.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01002FD01A24C000/8F72E0D61C4BA0B1.yaml deleted file mode 100644 index 94f330d..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01002FD01A24C000/8F72E0D61C4BA0B1.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# Agatha Christie - Hercule Poirot: The London Case 1.0.2 -# BID: 8F72E0D61C4BA0B1 - -unsafeCheck: true - -ALL_FPS: - # fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x6421720, 0x48] - value_type: float - value: "FRAMETIME_TARGET / 1000" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100300012F2A000/320A17744AEFD67F.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100300012F2A000/320A17744AEFD67F.yaml deleted file mode 100644 index 42306dc..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100300012F2A000/320A17744AEFD67F.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# Advance Wars 1+2: Re-Boot Camp 1.0.0 -# BID: 320A17744AEFD67F - -unsafeCheck: true - -ALL_FPS: - # _UnityEngine.Rendering.OnDemandRendering_TypeInfo - - - type: write - address: [MAIN, 0x481B2F8, 0xB8, 0] - value_type: int32 - value: -1 diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100309016E7A000/14C878ECCA9D7CB5.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100309016E7A000/14C878ECCA9D7CB5.yaml deleted file mode 100644 index 589fad1..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100309016E7A000/14C878ECCA9D7CB5.yaml +++ /dev/null @@ -1,38 +0,0 @@ -# Demon Slayer -Kimetsu no Yaiba- The Hinokami Chronicles 1.53 -# BID: 14C878ECCA9D7CB5 - -ALL_FPS: - # Disable bUseFixedFrameRate to unlock framerate - - - type: write - address: [MAIN, 0xB314540, 0x7F8] - address_unsafe: true - value_type: uint32 - # Default is 0x47, bUseFixedFrameRate |= 0x40 - # By writing 7 we are making sure that other flags are maintained: - # bAllowMultiThreadedAnimationUpdate |= 4 - # bOptimizeAnimBlueprintMemberVariableAccess |= 2 - # bCanBlueprintsTickByDefault |= 1 - value: 7 - # Disable CustomTimeStep - - - type: write - address: [MAIN, 0xB314540, 0x810] - value_type: uint8 - value: 0 - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xB314830, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0xAB49110, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100321017CC0000/D147CAEF2BC74574.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100321017CC0000/D147CAEF2BC74574.yaml deleted file mode 100644 index 4ffdadf..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100321017CC0000/D147CAEF2BC74574.yaml +++ /dev/null @@ -1,23 +0,0 @@ -# Hammerwatch Anniversary Edition 1.0.3 -# BID: D147CAEF2BC74574 - -MASTER_WRITE: - # Rewrite "v_fps_limit 30" to 99 - - - type: bytes - main_offset: 0xE028B5 - value_type: uint16 - value: 0x3939 - # Change egl Interval to lock game by default to 30 FPS - - - type: asm_a64 - main_offset: 0x141580 - instructions: [ - [mov, w1, 2] - ] - - - type: asm_a64 - main_offset: 0x1415A8 - instructions: [ - [mov, w1, 2] - ] diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010032B01C6F2000/FEEA420683820CD5.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010032B01C6F2000/FEEA420683820CD5.yaml deleted file mode 100644 index ea7fd40..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010032B01C6F2000/FEEA420683820CD5.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# DreadOut 2 0.7 -# BID: FEEA420683820CD5 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) rounded to one decimal - - - type: evaluate_write - address: [MAIN, 0x6C69668, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6C96FF8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x649B0C8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010032C00AC58000/2CDB9B9D70010E88.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010032C00AC58000/2CDB9B9D70010E88.yaml deleted file mode 100644 index dd8e96b..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010032C00AC58000/2CDB9B9D70010E88.yaml +++ /dev/null @@ -1,16 +0,0 @@ -# Dragon's Dogma: Dark Arisen 1.0.1 -# BID: 2CDB9B9D70010E88 - -unsafeCheck: true - -ALL_FPS: - # FPS Lock - - - type: evaluate_write - address: [MAIN, 0x24924D8, 0x504C] - value_type: float - value: FPS_TARGET - - - type: block - what: timing - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010032F01F7CC000/DE7B50B9FEF89856.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010032F01F7CC000/DE7B50B9FEF89856.yaml deleted file mode 100644 index 15215aa..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010032F01F7CC000/DE7B50B9FEF89856.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Five Nights at Freddy's: Help Wanted 2 0.3 -# BID: DE7B50B9FEF89856 - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x686AE48, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x7036778, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x705C0F0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010032F01F7CC000/F7EB23F0D8E5A933.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010032F01F7CC000/F7EB23F0D8E5A933.yaml deleted file mode 100644 index f208585..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010032F01F7CC000/F7EB23F0D8E5A933.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Five Nights at Freddy's: Help Wanted 2 0.1-0.2 -# BID: F7EB23F0D8E5A933 - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x53F45F8, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x5BC3628, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x5BF1308, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003310159F8000/8C7A99CBD1AEA208.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01003310159F8000/8C7A99CBD1AEA208.yaml deleted file mode 100644 index 17b23d7..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003310159F8000/8C7A99CBD1AEA208.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# スノーランナー 1.0.42 -# BID: 8C7A99CBD1AEA208 -# Just search for 0x42055555 in case of REF not working - -DECLARATIONS: - - - type: variable - name: dr_target - value_type: float - default_value: 33.333333 - evaluate: FRAMETIME_TARGET -MASTER_WRITE: -# Redirect DR frametime target -## REF: 01 04 0C 5E 00 10 2E 1E - - - type: asm_a64 - main_offset: 0x1944154 - instructions: [ - [adrp, x10, $dr_target], - [ldr, s2, [x10, $dr_target]] - ] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010033501FF38000/B7F344920B6D140E.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010033501FF38000/B7F344920B6D140E.yaml deleted file mode 100644 index 8951db6..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010033501FF38000/B7F344920B6D140E.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# The Bridge Curse 2: The Extrication 1.0.1 -# BID: B7F344920B6D140E - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x5DB8968, 0] - value_type: uint32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x65B48B8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010033801EF3A000/503ACC27B3F97603.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010033801EF3A000/503ACC27B3F97603.yaml deleted file mode 100644 index 38329de..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010033801EF3A000/503ACC27B3F97603.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# 英雄傳說 黎之軌跡Ⅱ for Nintendo Switch 1.0.1 -# BID: 503ACC27B3F97603 - -ALL_FPS: - # REF: 88 01 80 52 C1 03 80 52 28 4D 28 9B 29 00 80 52, first ADRP + ADD below it - - - type: evaluate_write - address: [MAIN, 0x6ECEB8, 0x34] - value_type: uint32 - value: FPS_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010035F022078000/7B53433FA04477FC.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010035F022078000/7B53433FA04477FC.yaml deleted file mode 100644 index f3e3163..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010035F022078000/7B53433FA04477FC.yaml +++ /dev/null @@ -1,31 +0,0 @@ -# DRAGON BALL: Sparking! ZERO 2.0.73 -# BID: 7B53433FA04477FC - -ALL_FPS: - # Disable bUseFixedFrameRate to unlock framerate - - - type: write - address: [MAIN, 0x9A2EA20, 0x9C4] - address_unsafe: true - value_type: uint32 - # Default is 0x47, bUseFixedFrameRate |= 0x40 - # By writing 7 we are making sure that other flags are maintained: - # bAllowMultiThreadedAnimationUpdate |= 4 - # bOptimizeAnimBlueprintMemberVariableAccess |= 2 - # bCanBlueprintsTickByDefault |= 1 - value: 7 - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x9A2FFF0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x9238B68, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010035F022078000/E363F4466EE5E8BE.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010035F022078000/E363F4466EE5E8BE.yaml deleted file mode 100644 index 65715bd..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010035F022078000/E363F4466EE5E8BE.yaml +++ /dev/null @@ -1,31 +0,0 @@ -# DRAGON BALL: Sparking! ZERO 2.0.74 -# BID: E363F4466EE5E8BE - -ALL_FPS: - # Disable bUseFixedFrameRate to unlock framerate - - - type: write - address: [MAIN, 0x9A35A20, 0x9C4] - address_unsafe: true - value_type: uint32 - # Default is 0x47, bUseFixedFrameRate |= 0x40 - # By writing 7 we are making sure that other flags are maintained: - # bAllowMultiThreadedAnimationUpdate |= 4 - # bOptimizeAnimBlueprintMemberVariableAccess |= 2 - # bCanBlueprintsTickByDefault |= 1 - value: 7 - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x9A36FF0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x923FB68, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100367016DF0000/38896FEC1B4ADB1C.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100367016DF0000/38896FEC1B4ADB1C.yaml deleted file mode 100644 index d9c3419..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100367016DF0000/38896FEC1B4ADB1C.yaml +++ /dev/null @@ -1,23 +0,0 @@ -# Hammerwatch 2 1.0.4 -# BID: 38896FEC1B4ADB1C - -MASTER_WRITE: - # Rewrite "v_fps_limit 30" to 99 - - - type: bytes - main_offset: 0x7C7597 - value_type: uint16 - value: 0x3939 - # Change egl Interval to lock game by default to 30 FPS - - - type: asm_a64 - main_offset: 0x135D10 - instructions: [ - [mov, w1, 2] - ] - - - type: asm_a64 - main_offset: 0x135D38 - instructions: [ - [mov, w1, 2] - ] diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010036E00FB20000/1DA748FC9499882F.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010036E00FB20000/1DA748FC9499882F.yaml deleted file mode 100644 index d7eb1d4..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010036E00FB20000/1DA748FC9499882F.yaml +++ /dev/null @@ -1,13 +0,0 @@ -# The Great Ace Attorney Chronicles 1.0.0 -# BID: 1DA748FC9499882F - -ALL_FPS: - # FPS lock - - - type: evaluate_write - address: [MAIN, 0xCF90F8, 0x4C] - value_type: float - value: FPS_LOCK_TARGET - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010036E019EA2000/6895FE7D0D1B8E2F.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010036E019EA2000/6895FE7D0D1B8E2F.yaml deleted file mode 100644 index d27d85d..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010036E019EA2000/6895FE7D0D1B8E2F.yaml +++ /dev/null @@ -1,22 +0,0 @@ -# Little Goody Two Shoes 1.0.5 -# BID: 6895FE7D0D1B8E2F - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x70CFF00, 0x48] - value_type: float - value: "1 / FPS_TARGET" - # UnityEngine.Time::maximumDeltaTime / UnityEngine.Time::maximumParticleDeltaTime - - - type: write - address: [MAIN, 0x70CFF00, 0x100] - value_type: float - value: [0.06666666666, 0.06666666666] - # UnityEngine.Application::targetFrameRate - - - type: evaluate_write - address: [MAIN, 0x6D58DA8] - value_type: uint32 - value: FPS_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010036F0201D4000/42A0B64E45AD9ABA.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010036F0201D4000/42A0B64E45AD9ABA.yaml deleted file mode 100644 index 194d466..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010036F0201D4000/42A0B64E45AD9ABA.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Platform 8 1.0.4 -# BID: 42A0B64E45AD9ABA - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x7910200, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7949910, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x69296E8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010037401A374000/3C3A2E68DBD1BBEC.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010037401A374000/3C3A2E68DBD1BBEC.yaml deleted file mode 100644 index 7a50b6b..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010037401A374000/3C3A2E68DBD1BBEC.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# DreamWorks All-Star Kart Racing 0.1.0.11740 -# BID: 3C3A2E68DBD1BBEC - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x7F0F6B8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # r.VSync - - - type: write - address: [MAIN, 0x7740598, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7F3D368, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010037A01F96C000/5B863A6EFCE084B0.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010037A01F96C000/5B863A6EFCE084B0.yaml deleted file mode 100644 index 4d0693d..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010037A01F96C000/5B863A6EFCE084B0.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# Shadows of the Damned: Hella Remastered 1.0.1 -# BID: 5B863A6EFCE084B0 - -unsafeCheck: true - -ALL_FPS: - # Bool Lock FPS, ref: LDR S0, [X0,#0x694] - - - type: write - address: [MAIN, 0x3A8A2F8] - value_type: uint32 - value: 0 \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010037C022390000/96B7F9BD973D298E.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010037C022390000/96B7F9BD973D298E.yaml deleted file mode 100644 index e0907e4..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010037C022390000/96B7F9BD973D298E.yaml +++ /dev/null @@ -1,18 +0,0 @@ -# Hitman Absolution 1.2.2RC1 -# BID: 96B7F9BD973D298E - -ALL_FPS: - # IdleFPS/ResponsiveFPS - # REF: 68 22 40 39 1F 01 00 71 A2 02 94 1A, first ADRP + ADD, add to it 0x38 - - - type: evaluate_write - address: [MAIN, 0x2E7DA10, 0x70] - value_type: uint32 - value: [FPS_TARGET, FPS_TARGET] - # DynamicResolutionScaling/FPSTarget - # REF: E0 1E 40 BD 01 10 2E 1E 00 20 21 1E, any result, first ADRP+ADD above that - - - type: evaluate_write - address: [MAIN, 0x2B7B328, 0x2C] - value_type: float - value: FPS_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003820186A2000/A5EC643318B3A543.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01003820186A2000/A5EC643318B3A543.yaml deleted file mode 100644 index 1b058ad..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003820186A2000/A5EC643318B3A543.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# Succubus With Guns 1.0.1 -# BID: A5EC643318B3A543 - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x4577FC0, 0x48] - value_type: float - value: "1 / FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010038900DFE0000/E9578A470B175851.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010038900DFE0000/E9578A470B175851.yaml deleted file mode 100644 index 921aba7..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010038900DFE0000/E9578A470B175851.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# What Remains of Edith Finch 1.0.0 -# BID: E9578A470B175851 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget ((1000/FPS) * 0.945) - - - type: evaluate_write - address: [MAIN, 0x532B3A0, 0] - value_type: float - value: ["0.945 * FRAMETIME_TARGET", "0.945 * FRAMETIME_TARGET"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x5350858, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010038D0133C2000/019FBFE7738EA314.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010038D0133C2000/019FBFE7738EA314.yaml deleted file mode 100644 index 46e35be..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010038D0133C2000/019FBFE7738EA314.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# 真・女神轉生Ⅴ HK 1.0.2 -# BID: 019FBFE7738EA314 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x75F81D0, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7621D70, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100393016D7E000/DC33AFEE8682A86C.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100393016D7E000/DC33AFEE8682A86C.yaml deleted file mode 100644 index 4cb18ee..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100393016D7E000/DC33AFEE8682A86C.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# WAIFU IMPACT 1.0.2 -# BID: DC33AFEE8682A86C - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x67B78E8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # r.VSync - - - type: write - address: [MAIN, 0x5FEB078, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x67E54B8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010039400E8D6000/D27FD8A515077F34.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010039400E8D6000/D27FD8A515077F34.yaml deleted file mode 100644 index 5b55894..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010039400E8D6000/D27FD8A515077F34.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# The Witcher 3: Wild Hunt - Complete Edition 4.04b -# BID: D27FD8A515077F34 - -ALL_FPS: - # DRGameTargetFrameTimeInMs - - - type: evaluate_write - address: [MAIN, 0x41312B4] - value_type: float - value: "0.945 * FRAMETIME_TARGET" - # DRCinematicTargetFrameTimeInMs - - - type: evaluate_write - address: [MAIN, 0x41312E4] - value_type: float - value: "0.945 * FRAMETIME_TARGET" - # LimitFPS - - - type: evaluate_write - address: [MAIN, 0x411DCFC] - value_type: int32 - value: FPS_LOCK_TARGET - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010039501F11C000/B174F363C2823CBE.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010039501F11C000/B174F363C2823CBE.yaml deleted file mode 100644 index d917ba9..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010039501F11C000/B174F363C2823CBE.yaml +++ /dev/null @@ -1,11 +0,0 @@ -# Wobbly Life 1.0.0.3 -# BID: B174F363C2823CBE - -ALL_FPS: - # DynamicResolutionManager_TypeInfo - - - type: evaluate_write - address: [MAIN, 0x84A6F58, 0xB8, 0] - address_unsafe: true - value_type: double - value: [FPS_TARGET, FRAMETIME_TARGET] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003980174BC000/217C9ECF258C0312.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01003980174BC000/217C9ECF258C0312.yaml deleted file mode 100644 index 7247e1f..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003980174BC000/217C9ECF258C0312.yaml +++ /dev/null @@ -1,31 +0,0 @@ -# Dusk Diver 2 `US` 1.0.1 -# BID: 217C9ECF258C0312 - -ALL_FPS: - # Disable bUseFixedFrameRate to untie game speed from framerate and unlock FPS - - - type: write - address: [MAIN, 0x77C7098, 0x7A4] - address_unsafe: true - value_type: uint32 - # Default is 0x47, bUseFixedFrameRate |= 0x40 - # By writing 7 we are making sure that other flags are maintained: - # bAllowMultiThreadedAnimationUpdate |= 4 - # bOptimizeAnimBlueprintMemberVariableAccess |= 2 - # bCanBlueprintsTickByDefault |= 1 - value: 7 - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 1 decimal - - - type: evaluate_write - address: [MAIN, 0x779A0E8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x77C79B8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003990220BE000/820EF220126FF10A.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01003990220BE000/820EF220126FF10A.yaml deleted file mode 100644 index 42d53ef..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003990220BE000/820EF220126FF10A.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# ABYSS SEEKER――What Do You See Deep in Abyss 1.3.0.105 -# BID: 820EF220126FF10A - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x7B04500, 0x48] - value_type: float - value: "1 / FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003990220BE000/C17F9C48EEFAB9DF.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01003990220BE000/C17F9C48EEFAB9DF.yaml deleted file mode 100644 index 80a4c74..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003990220BE000/C17F9C48EEFAB9DF.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# ABYSS SEEKER――What Do You See Deep in Abyss 1.1.0.012 -# BID: C17F9C48EEFAB9DF - -unsafeCheck: true - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x7B48F40, 0x48] - value_type: float - value: "1 / FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003990220BE000/FE67FB035271B5E4.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01003990220BE000/FE67FB035271B5E4.yaml deleted file mode 100644 index 09a975b..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003990220BE000/FE67FB035271B5E4.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# ABYSS SEEKER――What Do You See Deep in Abyss 1.2.0.020 -# BID: FE67FB035271B5E4 - -unsafeCheck: true - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x7B62100, 0x48] - value_type: float - value: "1 / FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010039A00BC64000/77009C1234634A4E.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010039A00BC64000/77009C1234634A4E.yaml deleted file mode 100644 index fcac802..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010039A00BC64000/77009C1234634A4E.yaml +++ /dev/null @@ -1,40 +0,0 @@ -# Wasteland 2: Director's Cut 1.0.1 -# BID: 77009C1234634A4E - -DECLARATIONS: - # Dynamic resolution is botched because it relies on whole frame rendering loop time, - # which means we cannot set min to 60 FPS because otherwise it will never get back to higher resolutions - - - type: variable - name: dr_fps_min - value_type: float - default_value: 20 - evaluate: "0.9 * FPS_TARGET" - - - type: variable - name: dr_fps_max - value_type: float - default_value: 33 - evaluate: "FPS_TARGET" - - - type: code - name: getDrFpsTargetMin - instructions: [ - [adrp, x20, $dr_fps_min], - [ldr, s1, [x20, $dr_fps_min]], - [ret] - ] -MASTER_WRITE: - - - type: asm_a64 - main_offset: 0x36EE98 - instructions: [ - [bl, _getDrFpsTargetMin()] - ] - - - type: asm_a64 - main_offset: 0x36EEF4 - instructions: [ - [adrp, x8, $dr_fps_max], - [ldr, s1, [x8, $dr_fps_max]] - ] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010039B015CB6000/39DC785D9073C22B.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010039B015CB6000/39DC785D9073C22B.yaml deleted file mode 100644 index d69be4f..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010039B015CB6000/39DC785D9073C22B.yaml +++ /dev/null @@ -1,48 +0,0 @@ -# Eiyuden Chronicle: Rising 1.02 -# BID: 39DC785D9073C22B - -DECLARATIONS: - - - type: variable - name: dr_target1 - value_type: double - default_value: 31 - evaluate: "0.93 * FRAMETIME_TARGET" - - - type: variable - name: dr_target2 - value_type: double - default_value: 29 - evaluate: "0.87 * FRAMETIME_TARGET" - - - type: code - name: drMaxTarget - instructions: [ - [adrp, x19, $dr_target1], - [ldr, d1, [x19, $dr_target1]], - [ret] - ] - - - type: code - name: drMinTarget - instructions: [ - [adrp, x8, $dr_target2], - [ldr, d1, [x8, $dr_target2]], - [ret] - ] -MASTER_WRITE: - # Redirect DynamicResolution$$LowerResSW Max Target in MS - - - type: asm_a64 - main_offset: 0x2426988 - instructions: [ - [bl, _drMaxTarget()] - ] - # Redirect DynamicResolution$$LowerResSW Min Target - - - type: asm_a64 - main_offset: 0x24269F4 - instructions: [ - [bl, _drMinTarget()] - ] - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003A70209AE000/2CE51030AF9800A5.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01003A70209AE000/2CE51030AF9800A5.yaml deleted file mode 100644 index 644b82f..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003A70209AE000/2CE51030AF9800A5.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# American Arcadia 1.0.3 -# BID: 2CE51030AF9800A5 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (default is 34.5) - - - type: evaluate_write - address: [MAIN, 0x76908F0, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # r.VSync - - - type: write - address: [MAIN, 0x66B5390, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x76BE650, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003AE01AA76000/6C46135714ABB870.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01003AE01AA76000/6C46135714ABB870.yaml deleted file mode 100644 index 7f47e0b..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003AE01AA76000/6C46135714ABB870.yaml +++ /dev/null @@ -1,18 +0,0 @@ -# Fate/Samurai Remnant 1.3.2 -# BID: 6C46135714ABB870 - -# Disable setting double buffer, REF: 28 63 A8 9B B8 5F 6E 29 2B F7 01 51 B9 83 57 B8 -MASTER_WRITE: - - - type: asm_a64 - main_offset: 0x5DB12C - instructions: [ - [mov, w25, 3] - ] -ALL_FPS: - # interval, REF: 29 00 80 52 16 00 08 8B 08 A0 8C 52 28 00 A0 72 - - - type: evaluate_write - address: [MAIN, 0x3412388] - value_type: int32 - value: VSYNC_TARGET diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003AE01AA76000/85D00BDAADD369E6.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01003AE01AA76000/85D00BDAADD369E6.yaml deleted file mode 100644 index 2f00e2d..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003AE01AA76000/85D00BDAADD369E6.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# Fate/Samurai Remnant 1.2.1 -# BID: 85D00BDAADD369E6 - -unsafeCheck: true - -# Disable setting double buffer, REF: 28 63 A8 9B B8 5F 6E 29 2B F7 01 51 B9 83 57 B8 -MASTER_WRITE: - - - type: bytes - main_offset: 0x5DB12C - value_type: uint32 - value: 0x52800079 -ALL_FPS: - # interval, REF: 29 00 80 52 16 00 08 8B 08 A0 8C 52 28 00 A0 72 - - - type: evaluate_write - address: [MAIN, 0x33FA018] - value_type: int32 - value: VSYNC_TARGET diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003AE01AA76000/8D6606B544CBCBC8.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01003AE01AA76000/8D6606B544CBCBC8.yaml deleted file mode 100644 index 2c8bf95..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003AE01AA76000/8D6606B544CBCBC8.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# Fate/Samurai Remnant 1.3.1 -# BID: 8D6606B544CBCBC8 - -unsafeCheck: true - -# Disable setting double buffer, REF: 28 63 A8 9B B8 5F 6E 29 2B F7 01 51 B9 83 57 B8 -MASTER_WRITE: - - - type: bytes - main_offset: 0x5DB12C - value_type: uint32 - value: 0x52800079 -ALL_FPS: - # interval, REF: 29 00 80 52 16 00 08 8B 08 A0 8C 52 28 00 A0 72 - - - type: evaluate_write - address: [MAIN, 0x3412388] - value_type: int32 - value: VSYNC_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003AF0200B0000/5F96AEDEA20AE78F.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01003AF0200B0000/5F96AEDEA20AE78F.yaml deleted file mode 100644 index e3d572f..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003AF0200B0000/5F96AEDEA20AE78F.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Rune Factory: Guardians of Azuma 1.0.4 -# BID: 5F96AEDEA20AE78F - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x8F48D40, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8F82470, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x7F616E8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003AF0200B0000/742CA53262A767AE.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01003AF0200B0000/742CA53262A767AE.yaml deleted file mode 100644 index e110b93..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003AF0200B0000/742CA53262A767AE.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Rune Factory: Guardians of Azuma 1.1.0 -# BID: 742CA53262A767AE - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x8F66D40, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8FA0470, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x7F7F6E8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003AF0200B0000/7F731AAE7DDCAF66.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01003AF0200B0000/7F731AAE7DDCAF66.yaml deleted file mode 100644 index 8883273..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003AF0200B0000/7F731AAE7DDCAF66.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Rune Factory: Guardians of Azuma 1.0.3 -# BID: 7F731AAE7DDCAF66 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x8F48D40, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8F82470, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x7F616E8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003AF0200B0000/E43BBBBFACE60867.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01003AF0200B0000/E43BBBBFACE60867.yaml deleted file mode 100644 index df2ebd2..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003AF0200B0000/E43BBBBFACE60867.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Rune Factory: Guardians of Azuma 1.0.5 -# BID: E43BBBBFACE60867 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x8F4AD40, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8F84470, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x7F636E8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003AF0200B0000/F678FD2BB197125B.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01003AF0200B0000/F678FD2BB197125B.yaml deleted file mode 100644 index 2206784..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003AF0200B0000/F678FD2BB197125B.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Rune Factory: Guardians of Azuma 1.1.1 -# BID: F678FD2BB197125B - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x8F68D40, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8FA2470, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x7F816E8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003B90136DA000/1F936E043FB8C349.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01003B90136DA000/1F936E043FB8C349.yaml deleted file mode 100644 index 1374e75..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003B90136DA000/1F936E043FB8C349.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# Shadowverse: Champion's Battle 1.3.0 -# BID: 1F936E043FB8C349 - -unsafeCheck: true - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x64DB5C0, 0x48] - value_type: float - value: "1 / FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003BA01575E000/EF2694EA89E001DB.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01003BA01575E000/EF2694EA89E001DB.yaml deleted file mode 100644 index a6d9a32..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003BA01575E000/EF2694EA89E001DB.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Nickelodeon Kart Racers 3: Slime Speedway 0.3.2.15969 -# BID: EF2694EA89E001DB - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x7F32158, 0] - value_type: float - value: [FRAMETIME_TARGET, FRAMETIME_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x7764D78, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7F5FD48, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003BD00CAAE000/8B40EBBA7244C94A.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01003BD00CAAE000/8B40EBBA7244C94A.yaml deleted file mode 100644 index 0f034bc..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003BD00CAAE000/8B40EBBA7244C94A.yaml +++ /dev/null @@ -1,28 +0,0 @@ -# Wolfenstein: Youngblood 1.5 -# BID: 8B40EBBA7244C94A - -ALL_FPS: - # rs_force460 - - - type: write - address: [MAIN, 0x7994DF0] - value_type: int32 - value: 1 - # rs_raiseThreshold = 0.96 * (30/FPS) - - - type: evaluate_write - address: [MAIN, 0x7994F14] - value_type: float - value: "(30 / FPS_TARGET) * 0.96" - # rs_dropThreshold = 0.984 * (30/FPS) - - - type: evaluate_write - address: [MAIN, 0x7994E84] - value_type: float - value: "(30 / FPS_TARGET) * 0.984" - # com_adaptiveTickMaxHz - - - type: evaluate_write - address: [MAIN, 0x85F74E0] - value_type: int32 - value: FPS_LOCK_TARGET diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003BF01E940000/5346BDF1EEC2BA4C.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01003BF01E940000/5346BDF1EEC2BA4C.yaml deleted file mode 100644 index 4990b12..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003BF01E940000/5346BDF1EEC2BA4C.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# The Exit 8 1.0.9 -# BID: 5346BDF1EEC2BA4C - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x7614450, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x764DB60, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x66356E8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003CC00D0BE000/F6FB99E54347E740.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01003CC00D0BE000/F6FB99E54347E740.yaml deleted file mode 100644 index 17bed10..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003CC00D0BE000/F6FB99E54347E740.yaml +++ /dev/null @@ -1,47 +0,0 @@ -# Amnesia Collection 1.3.0 -# BID: F6FB99E54347E740 -# Double buffer is hardcoded line by line, it's hard to make it triple - -DECLARATIONS: - - - type: variable - name: fps_lock - value_type: double - default_value: 0.03333333333333333 - evaluate: "1 / FPS_TARGET" - - - type: variable - name: dr_target - value_type: float - default_value: 33.333333 - evaluate: FRAMETIME_TARGET -MASTER_WRITE: - - - type: asm_a64 - main_offset: 0x13281C - instructions: [ - [adrp, x8, $fps_lock], - [ldr, x8, [x8, $fps_lock]] - ] - - - type: asm_a64 - main_offset: 0x3E324C - instructions: [ - [adrp, x8, $fps_lock], - [ldr, x8, [x8, $fps_lock]] - ] - - - type: asm_a64 - main_offset: 0x2D94E8 - instructions: [ - [adrp, x9, $dr_target], - [ldr, w9, [x9, $dr_target]] - ] - - - type: asm_a64 - main_offset: 0x597C5C - instructions: [ - [adrp, x9, $dr_target], - [ldr, w9, [x9, $dr_target]] - ] - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003CC01BBA0000/D64B8283BD5CEA63.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01003CC01BBA0000/D64B8283BD5CEA63.yaml deleted file mode 100644 index ed87897..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003CC01BBA0000/D64B8283BD5CEA63.yaml +++ /dev/null @@ -1,74 +0,0 @@ -# 테일즈 오브 엑실리아 리마스터 1.0.1 -# BID: D64B8283BD5CEA63 - -DECLARATIONS: - - - type: variable - name: patch_running - value_type: uint8 - default_value: 0 - - - type: code - name: applyCustomSpeed - instructions: [ - [adrp, x4, $patch_running], - [ldrb, w4, [x4, $patch_running]], - [cbnz, w4, :goto1], - [stp, s0, s1, [x8, 0x6C]], - :goto1, [ret] - ] -MASTER_WRITE: - # Block updating game speed - ## REF: 00 85 0d 2d - - - type: asm_a64 - main_offset: 0x244A5F4 - instructions: [ - [bl, _applyCustomSpeed()] - ] - - - type: asm_a64 - main_offset: 0x28EBB1C - instructions: [ - [bl, _applyCustomSpeed()] - ] - - - type: asm_a64 - main_offset: 0x2B26CC4 - instructions: [ - [bl, _applyCustomSpeed()] - ] -ALL_FPS: - # Game Speed - ## REF: Global_TypeInfo - - - type: evaluate_write - address: [MAIN, 0x82C50C0, 0xB8, 0x6C] - value_type: float - value: [FPS_TARGET, "60 / FPS_TARGET"] - # Just in case, dunno if they are used for anything, but all of them were set to target strictly 30 FPS - # UnityEngine.Time::maximumDeltaTime - - - type: write - address: [MAIN, 0x9FCFBF8, 0x100] - value_type: float - value: [0.066666666, 0.066666666] - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x9FCFBF8, 0x48] - value_type: float - value: "1 / FPS_TARGET" - # UnityEngine.Application::targetFrameRate - - - type: evaluate_write - address: [MAIN, 0x84E1EB0] - value_type: uint32 - value: FPS_TARGET - - - type: compare - compare_address: [VARIABLE, patch_running] - compare_type: "==" - compare_value: 0 - address: [VARIABLE, patch_running] - value: 1 \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003CD01299E000/4232D493269475B2.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01003CD01299E000/4232D493269475B2.yaml deleted file mode 100644 index 96461eb..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003CD01299E000/4232D493269475B2.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# RiMS Racing 1.2.0 -# BID: 4232D493269475B2 - -unsafeCheck: true - -ALL_FPS: - # OptimalFrameDuration_ms = (1000/FPS) - (0.07 * (1000/30) - - - type: evaluate_write - address: [MAIN, 0x2CDFCBC] - value_type: float - value: "FRAMETIME_TARGET - (0.07 * (1000/30))" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003D100E9C6000/4BC4A8A814FD46A4.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01003D100E9C6000/4BC4A8A814FD46A4.yaml deleted file mode 100644 index 4446ecb..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003D100E9C6000/4BC4A8A814FD46A4.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# The Witcher 3: Wild Hunt - Complete Edition 4.04b -# BID: 4BC4A8A814FD46A4 - -ALL_FPS: - # DRGameTargetFrameTimeInMs - - - type: evaluate_write - address: [MAIN, 0x41312B4] - value_type: float - value: "0.945 * FRAMETIME_TARGET" - # DRCinematicTargetFrameTimeInMs - - - type: evaluate_write - address: [MAIN, 0x41312E4] - value_type: float - value: "0.945 * FRAMETIME_TARGET" - # LimitFPS - - - type: evaluate_write - address: [MAIN, 0x411DCFC] - value_type: int32 - value: FPS_LOCK_TARGET - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003E3014AFE000/69CACEEC5F01C41B.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01003E3014AFE000/69CACEEC5F01C41B.yaml deleted file mode 100644 index bb61b87..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003E3014AFE000/69CACEEC5F01C41B.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# WRC10 1.1.0 -# BID: 69CACEEC5F01C41B - -ALL_FPS: - # OptimalFrameDuration_ms = (1000/FPS) - (0.07 * (1000/30) - - - type: evaluate_write - address: [MAIN, 0x2A149BC] - value_type: float - value: "FRAMETIME_TARGET - (0.07 * (1000/30))" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003E601E324000/4F41309B39EEBE5E.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01003E601E324000/4F41309B39EEBE5E.yaml deleted file mode 100644 index 4694775..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003E601E324000/4F41309B39EEBE5E.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# DRAGON QUEST III HD-2D Remake 1.1.0 -# BID: 4F41309B39EEBE5E - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x5AB93E8, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x62A5E28, 0] - value_type: float - value: [FRAMETIME_TARGET, FRAMETIME_TARGET] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x62D3B68, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003E601E324000/6F49452BD0B343B1.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01003E601E324000/6F49452BD0B343B1.yaml deleted file mode 100644 index 5cf4ecf..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003E601E324000/6F49452BD0B343B1.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# DRAGON QUEST III HD-2D Remake 1.0.1 -# BID: 6F49452BD0B343B1 - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x5A9D3E8, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x6289E28, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x62B7B68, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003E601E324000/A6BD61CFB142E663.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01003E601E324000/A6BD61CFB142E663.yaml deleted file mode 100644 index 2a98273..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003E601E324000/A6BD61CFB142E663.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# DRAGON QUEST III HD-2D Remake 1.1.2 -# BID: A6BD61CFB142E663 - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x5AB93E8, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x62A5E28, 0] - value_type: float - value: [FRAMETIME_TARGET, FRAMETIME_TARGET] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x62D3B68, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003E800A102000/283095029A5AB467.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01003E800A102000/283095029A5AB467.yaml deleted file mode 100644 index d2def1c..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003E800A102000/283095029A5AB467.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Trials Rising 1.0.13 -# BID: 283095029A5AB467 -# Double buffer is reserved line by line inside class array, so requires ton of patching - -DECLARATIONS: - - - type: variable - name: dr_target - value_type: float - default_value: 33.333333 - evaluate: FRAMETIME_TARGET -MASTER_WRITE: - # Force game to use dynamic speed instead of fixed speed - - - type: asm_a64 - main_offset: 0xE7BC90 - instructions: [ - [mov, w8, 2] - ] - # Redirect DR timing - - - type: asm_a64 - main_offset: 0xE88250 - instructions: [ - [adrp, x8, $dr_target], - [ldr, s0, [x8, $dr_target]] - ] diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003EB01C2F0000/0D28F064B3A5D030.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01003EB01C2F0000/0D28F064B3A5D030.yaml deleted file mode 100644 index 8ed276a..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003EB01C2F0000/0D28F064B3A5D030.yaml +++ /dev/null @@ -1,17 +0,0 @@ -# MEGATON MUSASHI W: WIRED 3.0.3 -# BID: 0D28F064B3A5D030 - -unsafeCheck: true - -ALL_FPS: - # fixedDeltaTime = 1/FPS - - - type: evaluate_write - address: [MAIN, 0xC809DA0, 0x48] - value_type: float - value: "1 / FPS_TARGET" - - # maximumDeltaTime = 1/15 (with this setting game will slow down below 15 FPS instead of 30 FPS) - type: write - address: [MAIN, 0xC809DA0, 0x100] - value_type: float - value: 0.0666666666 diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003EB01C2F0000/1EC3E6373D7DA9A6.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01003EB01C2F0000/1EC3E6373D7DA9A6.yaml deleted file mode 100644 index 71e74fa..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003EB01C2F0000/1EC3E6373D7DA9A6.yaml +++ /dev/null @@ -1,17 +0,0 @@ -# MEGATON MUSASHI W: WIRED 3.2.2 -# BID: 1EC3E6373D7DA9A6 - -unsafeCheck: true - -ALL_FPS: - # fixedDeltaTime = 1/FPS - - - type: evaluate_write - address: [MAIN, 0xCAC9F20, 0x48] - value_type: float - value: "1 / FPS_TARGET" - - # maximumDeltaTime = 1/15 (with this setting game will slow down below 15 FPS instead of 30 FPS) - type: write - address: [MAIN, 0xCAC9F20, 0x100] - value_type: float - value: 0.0666666666 diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003EB01C2F0000/4183AB952B599826.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01003EB01C2F0000/4183AB952B599826.yaml deleted file mode 100644 index 29c3829..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003EB01C2F0000/4183AB952B599826.yaml +++ /dev/null @@ -1,17 +0,0 @@ -# MEGATON MUSASHI W: WIRED 3.1.0 -# BID: 4183AB952B599826 - -unsafeCheck: true - -ALL_FPS: - # fixedDeltaTime = 1/FPS - - - type: evaluate_write - address: [MAIN, 0xC841820, 0x48] - value_type: float - value: "1 / FPS_TARGET" - - # maximumDeltaTime = 1/15 (with this setting game will slow down below 15 FPS instead of 30 FPS) - type: write - address: [MAIN, 0xC841820, 0x100] - value_type: float - value: 0.0666666666 diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003EB01C2F0000/452F9C150D1D17B7.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01003EB01C2F0000/452F9C150D1D17B7.yaml deleted file mode 100644 index 6669089..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003EB01C2F0000/452F9C150D1D17B7.yaml +++ /dev/null @@ -1,17 +0,0 @@ -# MEGATON MUSASHI W: WIRED 3.1.2 -# BID: 452F9C150D1D17B7 - -unsafeCheck: true - -ALL_FPS: - # fixedDeltaTime = 1/FPS - - - type: evaluate_write - address: [MAIN, 0xc84AD60, 0x48] - value_type: float - value: "1 / FPS_TARGET" - - # maximumDeltaTime = 1/15 (with this setting game will slow down below 15 FPS instead of 30 FPS) - type: write - address: [MAIN, 0xC84AD60, 0x100] - value_type: float - value: 0.0666666666 diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003EB01C2F0000/8286C091117CAECF.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01003EB01C2F0000/8286C091117CAECF.yaml deleted file mode 100644 index 160c37f..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003EB01C2F0000/8286C091117CAECF.yaml +++ /dev/null @@ -1,17 +0,0 @@ -# MEGATON MUSASHI W: WIRED 3.2.0 -# BID: 8286C091117CAECF - -unsafeCheck: true - -ALL_FPS: - # fixedDeltaTime = 1/FPS - - - type: evaluate_write - address: [MAIN, 0xCAA1720, 0x48] - value_type: float - value: "1 / FPS_TARGET" - - # maximumDeltaTime = 1/15 (with this setting game will slow down below 15 FPS instead of 30 FPS) - type: write - address: [MAIN, 0xCAA1720, 0x100] - value_type: float - value: 0.0666666666 diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003EB01C2F0000/D152798E91A87AE7.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01003EB01C2F0000/D152798E91A87AE7.yaml deleted file mode 100644 index 568a204..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003EB01C2F0000/D152798E91A87AE7.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# MEGATON MUSASHI W: WIRED 3.2.3 -# BID: D152798E91A87AE7 - -unsafeCheck: true - -ALL_FPS: - # fixedDeltaTime = 1/FPS - - - type: evaluate_write - address: [MAIN, 0xCAC9F20, 0x48] - value_type: float - value: "1 / FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003EB01C2F0000/F1E096F78DFB8263.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01003EB01C2F0000/F1E096F78DFB8263.yaml deleted file mode 100644 index 756a78d..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003EB01C2F0000/F1E096F78DFB8263.yaml +++ /dev/null @@ -1,17 +0,0 @@ -# MEGATON MUSASHI W: WIRED 3.1.1 -# BID: F1E096F78DFB8263 - -unsafeCheck: true - -ALL_FPS: - # fixedDeltaTime = 1/FPS - - - type: evaluate_write - address: [MAIN, 0xC84AD20, 0x48] - value_type: float - value: "1 / FPS_TARGET" - - # maximumDeltaTime = 1/15 (with this setting game will slow down below 15 FPS instead of 30 FPS) - type: write - address: [MAIN, 0xC84AD20, 0x100] - value_type: float - value: 0.0666666666 diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003EB01C2F0000/FF46A0C56BAD0A32.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01003EB01C2F0000/FF46A0C56BAD0A32.yaml deleted file mode 100644 index d3f5e98..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003EB01C2F0000/FF46A0C56BAD0A32.yaml +++ /dev/null @@ -1,17 +0,0 @@ -# MEGATON MUSASHI W: WIRED 3.1.3 -# BID: FF46A0C56BAD0A32 - -unsafeCheck: true - -ALL_FPS: - # fixedDeltaTime = 1/FPS - - - type: evaluate_write - address: [MAIN, 0xC84AD60, 0x48] - value_type: float - value: "1 / FPS_TARGET" - - # maximumDeltaTime = 1/15 (with this setting game will slow down below 15 FPS instead of 30 FPS) - type: write - address: [MAIN, 0xC84AD60, 0x100] - value_type: float - value: 0.0666666666 diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003FB00C5A8000/DCDFA5A4AD9A175D.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01003FB00C5A8000/DCDFA5A4AD9A175D.yaml deleted file mode 100644 index 9772a76..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003FB00C5A8000/DCDFA5A4AD9A175D.yaml +++ /dev/null @@ -1,102 +0,0 @@ -# Super Kirby Clash 1.0.1 -# BID: DCDFA5A4AD9A175D -# Thanks to Kirby567Fan for finding offset of interval - -unsafeCheck: true - -MASTER_WRITE: - # Block game from updating interval - - - type: asm_a64 - main_offset: 0x7264 - instructions: [ - [nop] - ] - - - type: asm_a64 - main_offset: 0x721C - instructions: [ - [nop] - ] - # Remove double buffer - - - type: asm_a64 - main_offset: 0xC5B08 - instructions: [ - [mov, w8, 3] - ] - - - type: asm_a64 - main_offset: 0xC5BB0 - instructions: [ - [mov, w2, 3] - ] - - - type: asm_a64 - main_offset: 0xC5720 - instructions: [ - [sub, sp, sp, 0x50], - [stp, x22, x21, [sp, 0x20]], - [stp, x20, x19, [sp, 0x30]], - [stp, x29, x30, [sp, 0x40]], - [add, x29, sp, 0x40] - ] - - - type: asm_a64 - main_offset: 0xC5744 - instructions: [ - [stp, xzr, xzr, [sp, 0x10]] - ] - - - type: asm_a64 - main_offset: 0xC5758 - instructions: [ - [mov, w2, 3] - ] - - - type: asm_a64 - main_offset: 0xC5780 - instructions: [ - [ldp, x29, x30, [sp, 0x40]], - [ldp, x20, x19, [sp, 0x30]], - [ldp, x22, x21, [sp, 0x20]], - [add, sp, sp, 0x50] - ] - - - type: asm_a64 - main_offset: 0xC57A0 - instructions: [ - [sub, sp, sp, 0x50], - [stp, xzr, x21, [sp, 0x18]], - [stp, x20, x19, [sp, 0x30]], - [stp, x29, x30, [sp, 0x40]], - [add, x29, sp, 0x40] - ] - - - type: asm_a64 - main_offset: 0xC57CC - instructions: [ - [mov, w2, 3] - ] - - - type: asm_a64 - main_offset: 0xC57E4 - instructions: [ - [str, x8, [sp]] - ] - - - type: asm_a64 - main_offset: 0xC580C - instructions: [ - [ldp, x29, x30, [sp, 0x40]], - [ldr, x21, [sp, 0x20]], - [ldp, x20, x19, [sp, 0x30]], - [add, sp, sp, 0x50] - ] -ALL_FPS: - # Interval - - - type: evaluate_write - address: [MAIN, 0x99CB08, 0] - value_type: int32 - value: VSYNC_TARGET diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003FB012926000/D27FD8A515077F34.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01003FB012926000/D27FD8A515077F34.yaml deleted file mode 100644 index f8f6b1e..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01003FB012926000/D27FD8A515077F34.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# ウィッチャー3 ワイルドハント 4.04b -# BID: D27FD8A515077F34 - -ALL_FPS: - # DRGameTargetFrameTimeInMs - - - type: evaluate_write - address: [MAIN, 0x41312B4] - value_type: float - value: "0.945 * FRAMETIME_TARGET" - # DRCinematicTargetFrameTimeInMs - - - type: evaluate_write - address: [MAIN, 0x41312E4] - value_type: float - value: "0.945 * FRAMETIME_TARGET" - # LimitFPS - - - type: evaluate_write - address: [MAIN, 0x411DCFC] - value_type: int32 - value: FPS_LOCK_TARGET - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010040401D564000/1053EA8AD2A50F15.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010040401D564000/1053EA8AD2A50F15.yaml deleted file mode 100644 index 379645c..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010040401D564000/1053EA8AD2A50F15.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# MotoGP 24 1.0.5 -# BID: 1053EA8AD2A50F15 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x93E6288, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x9414770, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x8C137F8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010040601A9B8000/1E965D5B338E3D05.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010040601A9B8000/1E965D5B338E3D05.yaml deleted file mode 100644 index d2d805a..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010040601A9B8000/1E965D5B338E3D05.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# たまごっちのプチプチおみせっち おまちど~さま! 1.0.6 -# BID: 1E965D5B338E3D05 - -ALL_FPS: - # UnityEngine.Rendering.OnDemandRendering_TypeInfo - - - type: write - address: [MAIN, 0x68B81F8, 0xB8, 0] - value_type: int32 - value: -1 \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010040601A9B8000/9ACE779510EC93C9.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010040601A9B8000/9ACE779510EC93C9.yaml deleted file mode 100644 index 20d857f..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010040601A9B8000/9ACE779510EC93C9.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# たまごっちのプチプチおみせっち おまちど~さま! 1.0.2 -# BID: 9ACE779510EC93C9 - -ALL_FPS: - # UnityEngine.Rendering.OnDemandRendering_TypeInfo - - - type: write - address: [MAIN, 0x683BB20, 0xB8, 0] - value_type: int32 - value: -1 diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010040A0209DC000/A4A3B5A20B03B2A7.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010040A0209DC000/A4A3B5A20B03B2A7.yaml deleted file mode 100644 index 172887f..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010040A0209DC000/A4A3B5A20B03B2A7.yaml +++ /dev/null @@ -1,53 +0,0 @@ -# 모모타로전철 ~쇼와 헤이세이 레이와에서도 국룰!~ Korea Edition 1.0.1 -# BID: A4A3B5A20B03B2A7 - -MASTER_WRITE: - # Remove double buffer - ## REF: E1 80 82 52 E0 03 13 AA, MOV W1, #2 below it - - - type: asm_a64 - main_offset: 0x1B410 - instructions: [ - [mov, w1, 3] - ] - ## REF: Use xref of function where is passed w1 in patch above - - - type: asm_a64 - main_offset: 0x5752C - instructions: [ - [mov, w1, 3] - ] -ALL_FPS: - # REF: 20 59 60 BC - # Internal FPS Lock - - - type: evaluate_write - address: [MAIN, 0xFF6098] - value_type: float - value: [FPS_TARGET, "60 / FPS_TARGET"] - # Blocking game to max 60 FPS because setting game speed ratio below 1 causes glitches - - - type: compare - compare_address: [MAIN, 0xFF6098] - compare_type: ">" - compare_value_type: float - compare_value: 60 - address: [MAIN, 0xFF6098] - value_type: float - value: 60 - - - type: compare - compare_address: [MAIN, 0xFF6098] - compare_type: "==" - compare_value_type: float - compare_value: 60 - address: [MAIN, 0xFF609C] - value_type: float - value: 1 - # Unknown value that is set based on FPS Lock function argument, 0 = 60 FPS, 1 = 30 FPS, 2 = 20 FPS, 3 = 15 FPS - # According to IDA is not used at all, but writing this anyway - - - type: evaluate_write - address: [MAIN, 0x10D7028] - value_type: uint32 - value: "VSYNC_TARGET - 1" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010040C01D248000/43D0D0D68A22E370.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010040C01D248000/43D0D0D68A22E370.yaml deleted file mode 100644 index 766cd03..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010040C01D248000/43D0D0D68A22E370.yaml +++ /dev/null @@ -1,13 +0,0 @@ -# The Legend of Heroes: Trails through Daybreak 1.0.1 -# BID: 43D0D0D68A22E370 -# Thanks to Stevens for figuring out how FPS Lock is applied - -unsafeCheck: true - -ALL_FPS: - # REF: 68 EA 50 B9 E0 03 1F 2A 7F B2 00 F9 - - - type: evaluate_write - address: [MAIN, 0x548B80, 0x34] - value_type: uint32 - value: FPS_LOCK_TARGET diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100416004C00000/01ACE43E724259C3.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100416004C00000/01ACE43E724259C3.yaml deleted file mode 100644 index 461662b..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100416004C00000/01ACE43E724259C3.yaml +++ /dev/null @@ -1,36 +0,0 @@ -# DOOM 1.2 -# BID: 01ACE43E724259C3 - -unsafeCheck: true - -ALL_FPS: - # rs_460Threshold (default) - - - type: write - address: [MAIN, 0x87AEC74] - value_type: float - value: 1 - # rs_raiseMilliseconds - - - type: evaluate_write - address: [MAIN, 0x87AF0B4] - value_type: float - value: "0.966 * FRAMETIME_TARGET" - # rs_dropMilliseconds (33/(1000/30))*(1000/FPS) - - - type: evaluate_write - address: [MAIN, 0x87AF02C] - value_type: float - value: "0.99 * FRAMETIME_TARGET" - # com_adaptiveTickMaxHz (default) - - - type: write - address: [MAIN, 0x74B2680] - value_type: int32 - value: 120 - # com_adaptiveTickMinHz - - - type: write - address: [MAIN, 0x74B25F8] - value_type: int32 - value: 15 diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100416004C00000/2847991952B3D7AB.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100416004C00000/2847991952B3D7AB.yaml deleted file mode 100644 index 7f74bb5..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100416004C00000/2847991952B3D7AB.yaml +++ /dev/null @@ -1,34 +0,0 @@ -# DOOM `West` 1.4 -# BID: 2847991952B3D7AB - -ALL_FPS: - # rs_460Threshold (default is 0.285) - - - type: write - address: [MAIN, 0x594152C] - value_type: float - value: 1 - # rs_raiseMilliseconds - - - type: evaluate_write - address: [MAIN, 0x59419EC] - value_type: float - value: "0.966 * FRAMETIME_TARGET" - # rs_dropMilliseconds - - - type: evaluate_write - address: [MAIN, 0x5941954] - value_type: float - value: "0.99 * FRAMETIME_TARGET" - # com_adaptiveTickMaxHz (default is 30) - - - type: evaluate_write - address: [MAIN, 0x66BAF50] - value_type: int32 - value: FPS_TARGET - # com_adaptiveTickMinHz (default is 30) - - - type: write - address: [MAIN, 0x66BAEB8] - value_type: int32 - value: 15 diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100422020BC4000/A179DD4F4BFB3A04.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100422020BC4000/A179DD4F4BFB3A04.yaml deleted file mode 100644 index 961c18d..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100422020BC4000/A179DD4F4BFB3A04.yaml +++ /dev/null @@ -1,36 +0,0 @@ -# 모두의 골프 월드 / 全民高爾夫 環球之旅 1.1.3 -# BID: A179DD4F4BFB3A04 -# Changed frametime target value math formula because default one sucks at 60 FPS target - -DECLARATIONS: - - - type: variable - name: dr_frametime_max - value_type: double - default_value: 40 - evaluate: "0.9 * FRAMETIME_TARGET" - - - type: variable - name: dr_frametime_min - value_type: double - default_value: 33.3333333333 - evaluate: "(0.9 * FRAMETIME_TARGET) - 6" -MASTER_WRITE: - # REF: DynamicResolution::Compute() - - - type: asm_a64 - main_offset: 0x3925918 - instructions: [ - [adrp, x10, $dr_frametime_max], - [ldr, d1, [x10, $dr_frametime_max]], - [nop] - ] - - - type: asm_a64 - main_offset: 0x39259EC - instructions: [ - [adrp, x10, $dr_frametime_min], - [ldr, d1, [x10, $dr_frametime_min]], - [nop], - [nop] - ] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100422020BC4000/C2D14E1A5A788D6A.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100422020BC4000/C2D14E1A5A788D6A.yaml deleted file mode 100644 index 6ed783c..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100422020BC4000/C2D14E1A5A788D6A.yaml +++ /dev/null @@ -1,37 +0,0 @@ -# 모두의 골프 월드 / 全民高爾夫 環球之旅 1.1.4 -# BID: C2D14E1A5A788D6A -# Changed frametime target value math formula because default one sucks at 60 FPS target - -DECLARATIONS: - - - type: variable - name: dr_frametime_max - value_type: double - default_value: 40 - evaluate: "0.9 * FRAMETIME_TARGET" - - - type: variable - name: dr_frametime_min - value_type: double - default_value: 33.3333333333 - evaluate: "(0.9 * FRAMETIME_TARGET) - 6" -MASTER_WRITE: - # REF: 0a 00 a4 d2 8a 08 e8 f2 41 01 67 9e - - - type: asm_a64 - main_offset: 0x3936338 - instructions: [ - [adrp, x10, $dr_frametime_max], - [ldr, d1, [x10, $dr_frametime_max]], - [nop] - ] - # REF: 00 0d 40 fd 0a 00 b8 d2 - - - type: asm_a64 - main_offset: 0x393640C - instructions: [ - [adrp, x10, $dr_frametime_min], - [ldr, d1, [x10, $dr_frametime_min]], - [nop], - [nop] - ] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010042A013DB8000/8683E654CCD68852.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010042A013DB8000/8683E654CCD68852.yaml deleted file mode 100644 index 9e4c208..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010042A013DB8000/8683E654CCD68852.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# GetsuFumaDen: Undying Moon 1.1.1 -# BID: 8683E654CCD68852 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x79020E8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # r.VSync - - - type: write - address: [MAIN, 0x7136C78, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x792F998, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010042D00D900000/EC593A5F9552100A.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010042D00D900000/EC593A5F9552100A.yaml deleted file mode 100644 index 2cc687e..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010042D00D900000/EC593A5F9552100A.yaml +++ /dev/null @@ -1,43 +0,0 @@ -# LEGO Star Wars: The Skywalker Saga 1.10.0 -# BID: EC593A5F9552100A - -DECLARATIONS: - - - type: variable - name: dr_target1 - value_type: float - default_value: 24 - evaluate: "0.72 * FRAMETIME_TARGET" - - - type: variable - name: dr_target2 - value_type: float - default_value: 31 - evaluate: "0.93 * FRAMETIME_TARGET" -MASTER_WRITE: - # redirect reading Dynamic Resolution timing min & max - - - type: asm_a64 - main_offset: 0x6171A0 - instructions: [ - [nop], - [ldr, s3, [x11, 0xe04]], - [fadd, s1, s1, s3], - [adrp, x12, $dr_target1], - [ldr, s2, [x12, $dr_target1]] - ] - - - type: asm_a64 - main_offset: 0x6171F0 - instructions: [ - [adrp, x11, $dr_target2], - [ldr, s2, [x11, $dr_target2]] - ] -ALL_FPS: - # g_video_swap_mode - ## Setting it to 1 to enable 120 FPS results in resolution range being always forced to docked mode - - - type: write - address: [MAIN, 0xAA62FF0] - value_type: int32 - value: 2 diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100438012EC8000/1A0EAEC3AE90B018.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100438012EC8000/1A0EAEC3AE90B018.yaml deleted file mode 100644 index cc4f798..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100438012EC8000/1A0EAEC3AE90B018.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Balan Wonderland 1.01 -# BID: 1A0EAEC3AE90B018 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget = 0.9 * (1000/FPS) - - - type: evaluate_write - address: [MAIN, 0x86FEF50, 0] - value_type: float - value: ["0.9 * FRAMETIME_TARGET", "0.9 * FRAMETIME_TARGET"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x87519B0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010044500CF8E000/9B3DDF2FB9100E51.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010044500CF8E000/9B3DDF2FB9100E51.yaml deleted file mode 100644 index bc2512e..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010044500CF8E000/9B3DDF2FB9100E51.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Hellblade: Senua's Sacrifice 1.1.0 -# BID: 9B3DDF2FB9100E51 - -ALL_FPS: - # Custom Dynamic Resolution implementation - Frame Time (MAX/MIN) - # MAX = (1/FPS) * 0.95 - # MIN = (1/FPS) * 0.9 - - - type: evaluate_write - address: [MAIN, 0x520BBE0, 0x40] - value_type: float - value: ["0.95 / FPS_TARGET", "0.9 / FPS_TARGET"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x521F7A0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010044700DEB0001/3DEF0E36AA8C6592.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010044700DEB0001/3DEF0E36AA8C6592.yaml deleted file mode 100644 index e7a32f4..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010044700DEB0001/3DEF0E36AA8C6592.yaml +++ /dev/null @@ -1,22 +0,0 @@ -# Assassin's Creed The Rebel Collection - Assassin's Creed Rogue 1.0.0 -# BID: 3DEF0E36AA8C6592 - -DECLARATIONS: - - - type: variable - name: dr_scale - value_type: float - default_value: 1000 - evaluate: "30000 / FPS_TARGET" - -MASTER_WRITE: -# Patch code to divide last frametime by float scale factor -# To match it to Dynamic Resolution calculations - - - type: asm_a64 - main_offset: 0x9F1DDC - instructions: [ - [adrp, x8, $dr_scale], - [ldr, s1, [x8, $dr_scale]] - ] - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010044B01E786000/2CF926BBD5D1AB4D.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010044B01E786000/2CF926BBD5D1AB4D.yaml deleted file mode 100644 index d4177bb..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010044B01E786000/2CF926BBD5D1AB4D.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Big Helmet Heroes 1.0.3 -# BID: 2CF926BBD5D1AB4D - -unsafeCheck: true - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7012260, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x5BB0718, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010044D015F4A000/37C3FAEFC9A4C374.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010044D015F4A000/37C3FAEFC9A4C374.yaml deleted file mode 100644 index 631ee74..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010044D015F4A000/37C3FAEFC9A4C374.yaml +++ /dev/null @@ -1,56 +0,0 @@ -# 英雄傳說 閃之軌跡III 1.0.0 -# BID: 37C3FAEFC9A4C374 -# Button polling is 2x more sensitive to holding any button at 60 FPS -# Fishing timer is decreasing 2x faster at 60 FPS -# Bike is turning 2x faster at 60 FPS - -DECLARATIONS: - - - type: variable - name: fps_lock - value_type: uint32 - default_value: 33333333 - evaluate: "FRAMETIME_TARGET * 930000" - - - type: variable - name: frame_time - value_type: float - default_value: 0.0333333333 - - - type: code - name: dynamicSpeed - instructions: [ - [str, d0, [x8, 0x20]], - [fcvt, s4, d0], - [adrp, x8, $frame_time], - [str, s4, [x8, $frame_time]], - [ret] - ] -MASTER_WRITE: - # Move loading FPS lock time - ## REF: MOV with 0x1FCA055 - - - type: asm_a64 - main_offset: 0x4FEC28 - instructions: [ - [adrp, x9, $fps_lock], - [ldr, w9, [x9, $fps_lock]] - ] - # Write game's loop time as float - ## Ref: Replace STR D0, [X8,#0x20] below - - - type: asm_a64 - main_offset: 0x4FEC94 - instructions: [ - [bl, _dynamicSpeed()] - ] - # Read lowest timing float factor - ## REF: 20 20 22 1E EA 03 00 32, replace ADRP + FMINM + LDR - - - type: asm_a64 - main_offset: 0x5E4AC - instructions: [ - [adrp, x8, $frame_time], - [fminnm, s1, s1, s2], - [ldr, s2, [x8, $frame_time]] - ] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100453019AA8000/2A720C7CE5C84905.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100453019AA8000/2A720C7CE5C84905.yaml deleted file mode 100644 index a97cdad..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100453019AA8000/2A720C7CE5C84905.yaml +++ /dev/null @@ -1,350 +0,0 @@ -# Xenoblade Chronicles X: Definitive Edition 1.0.2 -# BID: 2A720C7CE5C84905 - -DECLARATIONS: - - - type: variable - name: last_tick - value_type: uint64 - default_value: 0 - - - type: variable - name: frame_target - value_type: uint32 - default_value: 33333333 - evaluate: "FRAMETIME_TARGET * 1000000" - - - type: variable - name: speed_factor - value_type: float - default_value: 1.0 - - - type: variable - name: current_fps - value_type: float - default_value: 30.0 - - - type: variable - name: current_frametime - value_type: float - default_value: 0.0333333333 - - - type: variable - name: dr_target - value_type: float - default_value: 0.0333333333 - evaluate: "1 / FPS_TARGET" - - - type: const - name: nanoseconds_in_sec - value: 1000000000 - - - type: const - name: max_delta - value: 66666666 - - - type: variable - name: microseconds_in_sec - value_type: double - default_value: 1000000.0 - - - type: code - name: dynamicSpeed - instructions: [ - [stp, x29, x30, [sp, -16], "!"], - [mov, x29, sp], - [blr, x8], - [mrs, x0, cntpct_el0], - [adrp, x8, $last_tick], - [ldr, x7, [x8, $last_tick]], - [str, x0, [x8, $last_tick]], - [cbz, x7, :goto1], - [sub, x0, x0, x7], - [bl, _convertTickToTimeSpan()], - [adrp, x8, $frame_target], - [ldr, w1, [x8, $frame_target]], - [cmp, x1, x0], - [b.lt, :goto2], - [mov, x0, x1], - :goto2, [mov, x1, $max_delta], - [movk, x1, $max_delta, 16], - [cmp, x1, x0], - [b.gt, :goto3], - [mov, x0, x1], - :goto3, [ucvtf, d0, x0], - [adrp, x0, $microseconds_in_sec], - [ldr, d1, [x0, $microseconds_in_sec]], - [fdiv, d0, d0, d1], - [mov, x0, 1000], - [ucvtf, d1, x0], - [fdiv, d1, d1, d0], - [adrp, x0, $current_fps], - [fcvt, s1, d1], - [str, s1, [x0, $current_fps]], - [fmov, s2, 30.0], - [fdiv, s2, s2, s1], - [adrp, x0, $speed_factor], - [str, s2, [x0, $speed_factor]], - [mov, x1, 1000], - [ucvtf, d1, x1], - [fdiv, d1, d0, d1], - [fcvt, s1, d1], - [adrp, x0, $current_frametime], - [str, s1, [x0, $current_frametime]], - :goto1, [ldp, x29, x30, [sp], 16], - [ret] - ] - - - type: code - name: battleFix - instructions: [ - [adrp, x9, $speed_factor], - [ldr, s0, [x9, $speed_factor]], - [ret] - ] - - - type: code - name: cameraRotationFix - instructions: [ - [adrp, x8, $speed_factor], - [ldr, s8, [x8, $speed_factor]], - [fmul, s0, s8, s0], - [fcmp, s0, 0.0], - [b.ge, :goto1], - [fneg, s0, s0], - [fsqrt, s0, s0], - [fneg, s0, s0], - [ret], - :goto1, [fsqrt, s0, s0], - [ret] - ] - - - type: code - name: fnSiteFix - instructions: [ - [ldr, s0, [x19, 0xd0]], - [adrp, x0, $speed_factor], - [ldr, s1, [x0, $speed_factor]], - [fmul, s0, s0, s1], - [ret] - ] - - - type: code - name: longJumpFix - instructions: [ - [fmov, s11, 30.0], - [fadd, s11, s11, s11], - [ret] - ] - - - type: code - name: qteFix - instructions: [ - [adrp, x20, $speed_factor], - [ldr, s1, [x20, $speed_factor]], - [ldr, s2, [x19, 0x120]], - [fmul, s1, s2, s1], - [ret] - ] - - - type: code - name: fogSpeedFix - instructions: [ - [fsqrt, s2, s2], - [fmadd, s0, s1, s2, s0], - [ret] - ] - - - type: code - name: overdriveFix - instructions: [ - [adrp, x0, $current_frametime], - [ldr, s0, [x0, $current_frametime]], - [ret] - ] -MASTER_WRITE: - # Dynamic speed mod for stuff like UI, lipsync, grass and rain - ## Redirect nvnQueuePresentTexture call to code cave at MAIN+0x1735050 - - - type: asm_a64 - main_offset: 0x95EED8 - instructions: [ - [bl, _dynamicSpeed()] - ] - ## Function 1 to speed factor // Usage unknown - - - type: asm_a64 - main_offset: 0x286968 - instructions: [ - [adrp, x21, $speed_factor], - [ldr, x0, [x8, 0xe18]], - [ldr, s10, [x21, $speed_factor]] - ] - ## Function 3 to speed factor // Usage unknown - - - type: asm_a64 - main_offset: 0xA16F00 - instructions: [ - [adrp, x0, $speed_factor], - [ldr, s8, [x0, $speed_factor]] - ] - ## Function 4 to FPS // UI Speed - - - type: asm_a64 - main_offset: 0xA1F060 - instructions: [ - [adrp, x0, $current_fps], - [fmov, s0, w8], - [ldr, s0, [x0, $current_fps]] - ] - ## Function 5 to FPS // Usage unknown - - - type: asm_a64 - main_offset: 0x2672DC - instructions: [ - [adrp, x0, $current_fps], - [fmov, s0, w8], - [ldrh, w8, [x19, 0x68]], - [ldr, s5, [x0, $current_fps]] - ] - ## Function 6 to FPS - - - type: asm_a64 - main_offset: 0x26DB70 - instructions: [ - [adrp, x0, $current_fps], - [ldr, s0, [x0, $current_fps]], - [fcvtzu, w0, s0], - [mov, w9, 6], - [udiv, w8, w0, w9] - ] - ## Function 7 to Frametime in s // Gameplay + cutscene speed - - - type: asm_a64 - main_offset: 0x1E2924 - instructions: [ - [adrp, x9, $current_frametime] - ] - - - type: asm_a64 - main_offset: 0x1E2938 - instructions: [ - [ldr, s0, [x9, $current_frametime]] - ] - # Adjust various elements related to fighting - - - type: asm_a64 - main_offset: 0x1E8F48 - instructions: [ - [bl, _battleFix()] - ] - ## Fix gun speed - - - type: asm_a64 - main_offset: 0x30FACC - instructions: [ - [nop] - ] - # Redirect DR Target to MAIN+0x47BEF00 - - - type: asm_a64 - main_offset: 0x13A90B4 - instructions: [ - [adrp, x8, $dr_target], - [ldr, s0, [x8, $dr_target]] - ] - ## Connect function 1 - - - type: asm_a64 - main_offset: 0x1E17A0 - instructions: [ - [bl, _cameraRotationFix()] - ] - ## Connect function 2 - - - type: asm_a64 - main_offset: 0x1E17B0 - instructions: [ - [ldp, q1, q0, [x29, -0x60]] - ] - - - type: asm_a64 - main_offset: 0x1E17BC - instructions: [ - [bl, _cameraRotationFix()] - ] - # Adjust Field Action gauge bar speed - - - type: asm_a64 - main_offset: 0xE5E00 - instructions: [ - [adrp, x0, $speed_factor], - [adrp, x9, 0x1d54000], - [ldr, s8, [x0, $speed_factor]] - ] - ## Fix for FN Site - - - type: asm_a64 - main_offset: 0xE5858 - instructions: [ - [bl, _fnSiteFix()] - ] - # Fix long jump when not running - - - type: asm_a64 - main_offset: 0x23EF70 - instructions: [ - [bl, _longJumpFix()] - ] - # Adjust QTE Speed - ## Connect function - - - type: asm_a64 - main_offset: 0x5C6280 - instructions: [ - [bl, _qteFix()] - ] - # Fix fog speed - - - type: asm_a64 - main_offset: 0x296AE0 - instructions: [ - [adrp, x8, $speed_factor], - [ldr, s2, [x8, $speed_factor]], - [bl, _fogSpeedFix()] - ] - - - type: asm_a64 - main_offset: 0x676D4 - instructions: [ - [bl, _overdriveFix()] - ] -ALL_FPS: - # FPS Lock - # ref: 00 01 00 b9 2a 01 00 b9 c0 03 5f d6 - - - type: write - address: [MAIN, 0x1D943A0] - value_type: int32 - value: [1, 1] - # Lock game to 30 FPS when complex/prerendered cutscene is played - ## Adjusts DR target - - - type: compare - compare_address: [MAIN, 0x1FEFAF4] - compare_value_type: uint32 - compare_type: ">" - compare_value: 2 - address: [VARIABLE, dr_target] - value_type: float - value: 0.03333333333 - ## Force OS to run at 60 Hz with interval 2 - - - type: compare - compare_address: [MAIN, 0x1FEFAF4] - compare_value_type: uint32 - compare_type: ">" - compare_value: 2 - value_type: refresh_rate - value: 30 - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100453019AA8000/3F2425864CF22684.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100453019AA8000/3F2425864CF22684.yaml deleted file mode 100644 index 5ae56d3..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100453019AA8000/3F2425864CF22684.yaml +++ /dev/null @@ -1,356 +0,0 @@ -# Xenoblade Chronicles X: Definitive Edition 1.0.1 -# BID: 3F2425864CF22684 - -unsafeCheck: true - -MASTER_WRITE: - # Dynamic speed mod for stuff like UI, lipsync, grass and rain - ## Redirect nvnQueuePresentTexture call to code cave at MAIN+0x1744D90 - - - type: bytes - main_offset: 0x96ECD8 - value_type: uint32 - value: 0x1437582E - ## Code Cave (save floats for speed factor to MAIN+0x47CD268, frametime as FPS in MAIN+0x47CD26C, frametime in s in MAIN+0x47CD270) - - - type: bytes - main_offset: 0x1744D90 - value_type: uint32 - value: - - 0xD63F0100 - - 0x97FFF52B - - 0xB0018448 - - 0xF9413107 - - 0xF9013100 - - 0xB5000047 - - 0x17C8A7CD - - 0xCB070000 - - 0x97FFF528 - - 0xB0018448 - - 0xB9430101 - - 0xEB00003F - - 0x5400004B - - 0xAA0103E0 - - 0xD2881541 - - 0xF2A07F21 - - 0xEB00003F - - 0x5400004C - - 0xAA0103E0 - - 0x9E630000 - - 0xD00005A0 - - 0xFD469C01 - - 0x1E611800 - - 0xD2807D00 - - 0x9E630001 - - 0x1E601821 - - 0xB0018440 - - 0x1E624021 - - 0xBD026C01 - - 0x1E27D002 - - 0x1E211842 - - 0xBD026802 - - 0xD2807D01 - - 0x9E630021 - - 0x1E611801 - - 0x1E624021 - - 0xBD027001 - - 0x17C8A7AE - ## Default values for code cave - - - type: bytes - main_offset: 0x47CD268 - value_type: float - value: [1.0, 30.0, 0.033333333333] - - - type: bytes - main_offset: 0x47CD300 - value_type: uint32 - value: 33333333 - ## Function 1 to speed factor // Usage unknown - - - type: bytes - main_offset: 0x2864C8 - value_type: uint32 - value: - - 0xF0022A35 - - 0xF9470D00 - - 0xBD426AAA - ## Function 3 to speed factor // Usage unknown - - - type: bytes - main_offset: 0xA26D00 - value_type: uint32 - value: - - 0xF001ED20 - - 0xBD426808 - ## Function 4 to FPS // UI Speed - - - type: bytes - main_offset: 0xA2EE60 - value_type: uint32 - value: - - 0xF001ECE0 - - 0x1E270100 - - 0xBD426C00 - ## Function 5 to FPS // Usage unknown - - - type: bytes - main_offset: 0x266E3C - value_type: uint32 - value: - - 0xF0022B20 - - 0x1E270100 - - 0x7940D268 - - 0xBD426C05 - ## Function 6 to FPS - - - type: bytes - main_offset: 0x26D6D0 - value_type: uint32 - value: - - 0x90022B00 - - 0xBD426C00 - - 0x1E390000 - - 0x528000C9 - - 0x1AC90808 - ## Function 7 to Frametime in s // Gameplay + cutscene speed - - - type: bytes - main_offset: 0x1E24E4 - value_type: uint32 - value: 0xF0022F49 - - - type: bytes - main_offset: 0x1E24F8 - value_type: uint32 - value: 0xBD427120 - # Adjust various elements related to fighting - - - type: bytes - main_offset: 0x1E8B08 - value_type: uint32 - value: 0x145570EB - ## Code cave - - - type: bytes - main_offset: 0x1744EB4 - value_type: uint32 - value: - - 0xB0018449 - - 0xBD426920 - - 0x17AA8F14 - ## Fix gun speed - - - type: bytes - main_offset: 0x30F62C - value_type: uint32 - value: 0xD503201F - # Redirect DR Target to MAIN+0x47CDF00 - - - type: bytes - main_offset: 0x13B8DF4 - value_type: uint32 - value: - - 0xB001A0A8 - - 0xBD4F0100 - ## Default value - - - type: bytes - main_offset: 0x47CDF00 - value_type: float - value: 0.01666666666 - # Adjust camera speed rotation dynamically - ## Code cave - - - type: bytes - main_offset: 0x1744E48 - value_type: uint32 - value: - - 0xB0018448 - - 0xBD426908 - - 0x1E200900 - - 0x1E202008 - - 0x540000AA - - 0x1E214000 - - 0x1E21C000 - - 0x1E214000 - - 0xD65F03C0 - - 0x1E21C000 - - 0xD65F03C0 - ## Connect function 1 - - - type: bytes - main_offset: 0x1E1360 - value_type: uint32 - value: 0x94558EBA - ## Connect function 2 - - - type: bytes - main_offset: 0x1E1370 - value_type: uint32 - value: 0xAD7D03A1 - - - type: bytes - main_offset: 0x1E137C - value_type: uint32 - value: 0x94558EB3 - # Force 1s sleep to synchronize audio if cutscene detected - ## Use function responsible for writing type of cutscene to write its ID if it's 8 or 16 (or 0 for any other) to MAIN+0x47CDFFF - - - type: bytes - main_offset: 0x2FAC38 - value_type: uint32 - value: 0x14512898 - ### Code cave - - - type: bytes - main_offset: 0x1744E98 - value_type: uint32 - value: - - 0x52800094 - - 0xD00045C0 - - 0xB90AF414 - - 0xD2994000 - - 0xF2A77340 - - 0x97FFF3D9 - - 0x17AED763 - # Adjust Field Action gauge bar speed - - - type: bytes - main_offset: 0xE5B00 - value_type: uint32 - value: - - 0x90023740 - - 0xD000E3E9 - - 0xBD426808 - ## Fix for FN Site - - - type: bytes - main_offset: 0xE5558 - value_type: uint32 - value: 0x14597E34 - ### Code cave - - - type: bytes - main_offset: 0x1744E28 - value_type: uint32 - value: - - 0xBD40D260 - - 0xB0018440 - - 0xBD426801 - - 0x1E210800 - - 0x17A681C9 - # Fix long jump when not running - - - type: bytes - main_offset: 0x23EAD0 - value_type: uint32 - value: 0x145418DB - ## Code cave - - - type: bytes - main_offset: 0x1744E3C - value_type: uint32 - value: - - 0x1E27D00B - - 0x1E2B296B - - 0x17ABE724 - # Adjust QTE Speed - ## Code cave - - - type: bytes - main_offset: 0x1744E74 - value_type: uint32 - value: - - 0xB0018454 - - 0xBD426A81 - - 0x1400001B - - - type: bytes - main_offset: 0x1744EE8 - value_type: uint32 - value: - - 0xBD412262 - - 0x1E210841 - - 0x17BA0261 - ## Connect function - - - type: bytes - main_offset: 0x5C5870 - value_type: uint32 - value: 0x1445FD81 - # Adjust Overdrive counter, Follow Ball speed - ## Code cave - - - type: bytes - main_offset: 0x1744EC0 - value_type: uint32 - value: - - 0xB0018440 - - 0xBD427000 - - 0xD65F03C0 - ## Connect function - - - type: bytes - main_offset: 0x67354 - value_type: uint32 - value: 0x945B76DB - # Fix fog speed - - - type: bytes - main_offset: 0x296640 - value_type: uint32 - value: - - 0xF00229A8 - - 0xBD426902 - - 0x9452BA2B - ## Code cave - - - type: bytes - main_offset: 0x1744EF4 - value_type: uint32 - value: - - 0x1E21C042 - - 0x1F020020 - - 0xD65F03C0 -ALL_FPS: - # FPS Target - - - type: evaluate_write - address: [MAIN, 0x47CD300] - value_type: uint32 - value: "FRAMETIME_TARGET * 1000000" - # FPS Lock - # ref: 00 01 00 b9 2a 01 00 b9 c0 03 5f d6 - - - type: write - address: [MAIN, 0x1DA33A0] - value_type: int32 - value: [1, 1] - # DR Target - - - type: evaluate_write - address: [MAIN, 0x47CDF00] - value_type: float - value: "1 / FPS_TARGET" - # Lock game to 30 FPS when complex/prerendered cutscene is played - ## Adjusts DR target - - - type: compare - compare_address: [MAIN, 0x1FFEAF4] - compare_value_type: uint32 - compare_type: ">" - compare_value: 1 - address: [MAIN, 0x47CDF00] - value_type: float - value: 0.03333333333 - ## Force OS to run at 60 Hz with interval 2 - - - type: compare - compare_address: [MAIN, 0x1FFEAF4] - compare_value_type: uint32 - compare_type: ">" - compare_value: 1 - address: [MAIN] - value_type: refresh_rate - value: 30 \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010045301B86C000/1933FBAFE977FA75.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010045301B86C000/1933FBAFE977FA75.yaml deleted file mode 100644 index 93ba67e..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010045301B86C000/1933FBAFE977FA75.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Romancing SaGa 2: Revenge of the Seven 1.0.2 -# BID: 1933FBAFE977FA75 - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x6D1EA80, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x7BFAC70, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7C534C0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010045301B86C000/791D79EBD7A0115E.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010045301B86C000/791D79EBD7A0115E.yaml deleted file mode 100644 index 20a33b7..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010045301B86C000/791D79EBD7A0115E.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Romancing SaGa 2: Revenge of the Seven 1.0.1 -# BID: 791D79EBD7A0115E - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x6D1DA90, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x7BF9C70, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7C524C0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010045301B86C000/D7A32C718E9D6363.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010045301B86C000/D7A32C718E9D6363.yaml deleted file mode 100644 index 43f813d..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010045301B86C000/D7A32C718E9D6363.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Romancing SaGa 2: Revenge of the Seven 1.1.0 -# BID: D7A32C718E9D6363 - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x6D25AE0, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x7C01C70, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7C5A4C0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100459009A2A000/ACF717E72EA920C2.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100459009A2A000/ACF717E72EA920C2.yaml deleted file mode 100644 index a119d63..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100459009A2A000/ACF717E72EA920C2.yaml +++ /dev/null @@ -1,28 +0,0 @@ -# GRIP 1.0.8 -# BID: ACF717E72EA920C2 - -unsafeCheck: true - -MASTER_WRITE: - # Remove double buffer (nvn.NumBufferedFrames) - - - type: bytes - main_offset: 0x4F3245C - value_type: uint32 - value: 3 -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x5042FC8, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x58ECCE8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010046000EE40000/8F6B002FEB5D0F8E.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010046000EE40000/8F6B002FEB5D0F8E.yaml deleted file mode 100644 index ba04be8..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010046000EE40000/8F6B002FEB5D0F8E.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Call of Cthulhu 0.1.6 -# BID: 8F6B002FEB5D0F8E - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 1 decimal - - - type: evaluate_write - address: [MAIN, 0x61B1940, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x61D5FE8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010047000E9AA000/01EB7A6DE827BFD9.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010047000E9AA000/01EB7A6DE827BFD9.yaml deleted file mode 100644 index 14568c5..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010047000E9AA000/01EB7A6DE827BFD9.yaml +++ /dev/null @@ -1,35 +0,0 @@ -# AO Tennis 2 1.7.0 -# BID: 01EB7A6DE827BFD9 - -DECLARATIONS: - - - type: variable - name: dr_target - value_type: float - default_value: 0.03333333333 - evaluate: "1 / FPS_TARGET" - - - type: code - name: tripleBuffer - instructions: [ - [mov, w9, 3], - [str, w9, [x21, 0x1A0]], - [mov, w8, w9], - [ret] - ] -MASTER_WRITE: - - - type: asm_a64 - main_offset: 0x3DBAFC - instructions: [ - [bl, _tripleBuffer()] - ] - # Redirect Dynamic Resolution target - # REF: EC AF 40 B9 EB 07 9F 1A, first adrp + ldr below - - - type: asm_a64 - main_offset: 0x131922C - instructions: [ - [adrp, x12, $dr_target], - [ldr, s18, [x12, $dr_target]] - ] diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010047401EA8E000/928AF9461536F5E3.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010047401EA8E000/928AF9461536F5E3.yaml deleted file mode 100644 index 4ba2ddf..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010047401EA8E000/928AF9461536F5E3.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Deliver Us The Moon 1.0.0 -# BID: 928AF9461536F5E3 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x6F09528, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6F37248, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6739698, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100479008552000/A03FD278F67CDFD2.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100479008552000/A03FD278F67CDFD2.yaml deleted file mode 100644 index eecef00..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100479008552000/A03FD278F67CDFD2.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# モンスターエナジースーパークロス オフィシャルビデオゲーム 1.0.1 -# BID: A03FD278F67CDFD2 - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x67FD408, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6551268, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010047E01EA24000/6D05923E7005E182.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010047E01EA24000/6D05923E7005E182.yaml deleted file mode 100644 index 4d3f879..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010047E01EA24000/6D05923E7005E182.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Star Overdrive 1.0.10 -# BID: 6D05923E7005E182 - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x674C6E8, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x77322F0, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x776C850, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010047E01EA24000/728D92CB9E54CE7A.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010047E01EA24000/728D92CB9E54CE7A.yaml deleted file mode 100644 index dc8c9c5..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010047E01EA24000/728D92CB9E54CE7A.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Star Overdrive 1.0.6/1.0.7/1.0.8 -# BID: 728D92CB9E54CE7A - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x674C6E8, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x77322F0, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x776C850, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010047E01EA24000/C0D9B410A09A4ADD.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010047E01EA24000/C0D9B410A09A4ADD.yaml deleted file mode 100644 index 5f788fb..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010047E01EA24000/C0D9B410A09A4ADD.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Star Overdrive 1.0.5 -# BID: C0D9B410A09A4ADD - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x674B6E8, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x77312F0, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x776B850, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01004800197F0000/F4685ACC91FEDB12.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01004800197F0000/F4685ACC91FEDB12.yaml deleted file mode 100644 index 81b25af..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01004800197F0000/F4685ACC91FEDB12.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Master Detective Archives: RAIN CODE 1.4.0 EUR -# BID: F4685ACC91FEDB12 - -unsafeCheck: true - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8001888, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x7806CC8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010049B017774000/2F81A2EC9B298B37.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010049B017774000/2F81A2EC9B298B37.yaml deleted file mode 100644 index 56adce8..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010049B017774000/2F81A2EC9B298B37.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# DRAGON QUEST TREASURES 1.0.1 -# BID: 2F81A2EC9B298B37 - -ALL_FPS: - # Disable bUseFixedFrameRate to untie game speed from framerate and unlock FPS - - - type: write - address: [MAIN, 0x7E110D8, 0x7C0] - address_unsafe: true - value_type: uint32 - # Default is 0x47, bUseFixedFrameRate |= 0x40 - # By writing 7 we are making sure that other flags are maintained: - # bAllowMultiThreadedAnimationUpdate |= 4 - # bOptimizeAnimBlueprintMemberVariableAccess |= 2 - # bCanBlueprintsTickByDefault |= 1 - value: 7 - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7E119A8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01004A001E32E000/0214CA2211DE8313.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01004A001E32E000/0214CA2211DE8313.yaml deleted file mode 100644 index 0a1ce66..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01004A001E32E000/0214CA2211DE8313.yaml +++ /dev/null @@ -1,30 +0,0 @@ -# S.T.A.L.K.E.R.: Shadow Of Chornobyl 1.0.1 -# BID: 0214CA2211DE8313 - -unsafeCheck: true - -ALL_FPS: - # psLoadedFrameLimitFps - - - type: evaluate_write - address: [MAIN, 0x16494EC] - value_type: float - value: FPS_LOCK_TARGET - # psCurrentFrameLimitFps - - - type: evaluate_write - address: [MAIN, 0x16659F0] - value_type: float - value: FPS_LOCK_TARGET - # psCurrentFrameLimitMs - - - type: evaluate_write - address: [MAIN, 0x18CDACC] - value_type: float - value: "1000 / FPS_LOCK_TARGET" - # ResolutionInfo::sDynresGPUBudgetMs - - - type: evaluate_write - address: [MAIN, 0x16492F0] - value_type: float - value: "0.99 * FRAMETIME_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01004A001E32E000/8E8BFFE66292CFF1.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01004A001E32E000/8E8BFFE66292CFF1.yaml deleted file mode 100644 index 60ae9eb..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01004A001E32E000/8E8BFFE66292CFF1.yaml +++ /dev/null @@ -1,30 +0,0 @@ -# S.T.A.L.K.E.R.: Shadow Of Chornobyl 1.0.2 -# BID: 8E8BFFE66292CFF1 - -unsafeCheck: true - -ALL_FPS: - # psLoadedFrameLimitFps - - - type: evaluate_write - address: [MAIN, 0x165F4EC] - value_type: float - value: FPS_LOCK_TARGET - # psCurrentFrameLimitFps - - - type: evaluate_write - address: [MAIN, 0x167B9F0] - value_type: float - value: FPS_LOCK_TARGET - # psCurrentFrameLimitMs - - - type: evaluate_write - address: [MAIN, 0x18E7ACC] - value_type: float - value: "1000 / FPS_LOCK_TARGET" - # ResolutionInfo::sDynresGPUBudgetMs - - - type: evaluate_write - address: [MAIN, 0x165F2F0] - value_type: float - value: "0.99 * FRAMETIME_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01004A001E32E000/F7D1E815E44D0A56.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01004A001E32E000/F7D1E815E44D0A56.yaml deleted file mode 100644 index 1896080..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01004A001E32E000/F7D1E815E44D0A56.yaml +++ /dev/null @@ -1,30 +0,0 @@ -# S.T.A.L.K.E.R.: Shadow Of Chornobyl 1.0.3 -# BID: F7D1E815E44D0A56 - -unsafeCheck: true - -ALL_FPS: - # psLoadedFrameLimitFps - - - type: evaluate_write - address: [MAIN, 0x165F4EC] - value_type: float - value: FPS_LOCK_TARGET - # psCurrentFrameLimitFps - - - type: evaluate_write - address: [MAIN, 0x167B9F0] - value_type: float - value: FPS_LOCK_TARGET - # psCurrentFrameLimitMs - - - type: evaluate_write - address: [MAIN, 0x18E7ACC] - value_type: float - value: "1000 / FPS_LOCK_TARGET" - # ResolutionInfo::sDynresGPUBudgetMs - - - type: evaluate_write - address: [MAIN, 0x165F2F0] - value_type: float - value: "FRAMETIME_TARGET - (1/30)" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01004AB00A260000/DF3766A2BB651A3E.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01004AB00A260000/DF3766A2BB651A3E.yaml deleted file mode 100644 index 8772b1f..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01004AB00A260000/DF3766A2BB651A3E.yaml +++ /dev/null @@ -1,61 +0,0 @@ -# Dark Souls Remastered 1.0.3 -# BID: DF3766A2BB651A3E - -DECLARATIONS: - - - type: variable - name: fps_target - value_type: double - default_value: 30 - evaluate: FPS_LOCK_TARGET - - - type: variable - name: game_speed - value_type: float - default_value: 0.0333333333 - evaluate: "1/FPS_TARGET" - -MASTER_WRITE: - # Redirect FPS target to MAIN+0x55E9A00 - - - type: asm_a64 - main_offset: 0x706FA4 - instructions: [ - [adrp, x1, $fps_target] - ] - - - type: asm_a64 - main_offset: 0x7070B0 - instructions: [ - [ldr, d0, [x1, $fps_target]] - ] - # Redirect game speed to MAIN+0x55E9A08 - - - type: asm_a64 - main_offset: 0x667900 - instructions: [ - [adrp, x8, $game_speed], - [ldr, s8, [x8, $game_speed]] - ] -ALL_FPS: - - - type: compare - compare_address: [MAIN, 0x4543788, 0x470] - compare_address_unsafe: true - compare_type: "==" - compare_value_type: int32 - compare_value: 1 - address: [VARIABLE, fps_target] - value: 30 - - - type: compare - compare_address: [MAIN, 0x4543788, 0x470] - compare_address_unsafe: true - compare_type: "==" - compare_value_type: int32 - compare_value: 1 - address: [VARIABLE, game_speed] - value: 0.0333333333 - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01004AD014BF0000/D7A05D106FF46FC0.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01004AD014BF0000/D7A05D106FF46FC0.yaml deleted file mode 100644 index 9bc9b91..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01004AD014BF0000/D7A05D106FF46FC0.yaml +++ /dev/null @@ -1,15 +0,0 @@ -# Sonic Frontiers 1.4.1 -# BID: D7A05D106FF46FC0 - -# FPS Lock is used to determine dynamic resolution timing too -# Turn off Window Sync for better performance - -unsafeCheck: true - -ALL_FPS: - # Internal FPS Lock - - - type: evaluate_write - address: [MAIN, 0x4CA3F20, 0x14] - value_type: float - value: FPS_TARGET diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01004B100A5CC000/4E7978E35F9D7490.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01004B100A5CC000/4E7978E35F9D7490.yaml deleted file mode 100644 index d4e3148..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01004B100A5CC000/4E7978E35F9D7490.yaml +++ /dev/null @@ -1,16 +0,0 @@ -# Hob: The Definitive Edition 1.1.3 -# BID: 4E7978E35F9D7490 - -ALL_FPS: - # r_dynamicResGPUTimeDrop - - - type: evaluate_write - address: [MAIN, 0x2F8A248] - value_type: float - value: ["0.96 * FRAMETIME_TARGET", "0.96 * FRAMETIME_TARGET"] - # r_dynamicResGPUTimeRaise - - - type: evaluate_write - address: [MAIN, 0x2F8A268] - value_type: float - value: ["0.84 * FRAMETIME_TARGET", "0.84 * FRAMETIME_TARGET"] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01004B2016E7C000/14C878ECCA9D7CB5.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01004B2016E7C000/14C878ECCA9D7CB5.yaml deleted file mode 100644 index b36ee4a..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01004B2016E7C000/14C878ECCA9D7CB5.yaml +++ /dev/null @@ -1,38 +0,0 @@ -# 귀멸의 칼날 히노카미 혈풍담 1.53 -# BID: 14C878ECCA9D7CB5 - -ALL_FPS: - # Disable bUseFixedFrameRate to unlock framerate - - - type: write - address: [MAIN, 0xB314540, 0x7F8] - address_unsafe: true - value_type: uint32 - # Default is 0x47, bUseFixedFrameRate |= 0x40 - # By writing 7 we are making sure that other flags are maintained: - # bAllowMultiThreadedAnimationUpdate |= 4 - # bOptimizeAnimBlueprintMemberVariableAccess |= 2 - # bCanBlueprintsTickByDefault |= 1 - value: 7 - # Disable CustomTimeStep - - - type: write - address: [MAIN, 0xB314540, 0x810] - value_type: uint8 - value: 0 - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xB314830, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0xAB49110, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01004BA017CD6000/4B86FC4FDF7B1A70.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01004BA017CD6000/4B86FC4FDF7B1A70.yaml deleted file mode 100644 index a80989a..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01004BA017CD6000/4B86FC4FDF7B1A70.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Biomutant 1.0.1 -# BID: 4B86FC4FDF7B1A70 - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x78AF2F0, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x807D008, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x80A2F60, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01004BA017CD6000/5BE02E1373BDE2CC.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01004BA017CD6000/5BE02E1373BDE2CC.yaml deleted file mode 100644 index 8463650..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01004BA017CD6000/5BE02E1373BDE2CC.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Biomutant 1.0.2 -# BID: 5BE02E1373BDE2CC - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x78B4300, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x8082008, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x80A7F60, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01004BC0166CC000/44D207EA6428E3F1.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01004BC0166CC000/44D207EA6428E3F1.yaml deleted file mode 100644 index c31b5af..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01004BC0166CC000/44D207EA6428E3F1.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# CRISIS CORE -FINAL FANTASY VII- REUNION 1.0.4 -# BID: 44D207EA6428E3F1 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) rounded to 1 decimal - - - type: evaluate_write - address: [MAIN, 0x96CFDA8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x96FDCD0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01004D20219E0000/4583D73E326FFE7B.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01004D20219E0000/4583D73E326FFE7B.yaml deleted file mode 100644 index 47df4ea..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01004D20219E0000/4583D73E326FFE7B.yaml +++ /dev/null @@ -1,43 +0,0 @@ -# 空の軌跡 the 1st 1.0.6 -# BID: 4583D73E326FFE7B - -DECLARATIONS: - # Lock Max Handheld Resolution to 720p instead of 900p - - - type: code - name: adjustDrResToNativeInHH - instructions: [ - [cmp, w10, 1280], - [b.le, :goto1], - [adrp, x21, 0x730000], - [ldr, w21, [x21, 0x820]], ## REF: nn::oe::GetOperationMode in nnMain - [cbnz, w21, :goto1], - [mov, w10, 1280], - [mov, w8, 720], - :goto1, [stp, w10, w8, [x19, 0x10]], - [ret] - ] -MASTER_WRITE: - ## REF: 6A 22 02 29, second result - - - type: asm_a64 - main_offset: 0x2CF6E4 - instructions: [ - [bl, _adjustDrResToNativeInHH()] - ] -ALL_FPS: - # Min Delta - ## REF: C1 03 80 52 28 4D 28 9B, first ADRP + ADD below it - - - type: evaluate_write - address: [MAIN, 0x730850, 0x2C] - value_type: uint32 - value: FPS_TARGET - # Dynamic Resolution - ## REF: First function in .init_array section, ADRP + ADD + 0x220 (default float: 2) - ## Adding there 0.95 by myself because game seems to have issues with reaching 60 FPS without it - - - type: write - address: [MAIN, 0x7303D0] - value_type: float - value: 0.95 \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01004D20219E0000/555E8872455F107E.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01004D20219E0000/555E8872455F107E.yaml deleted file mode 100644 index a1b521b..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01004D20219E0000/555E8872455F107E.yaml +++ /dev/null @@ -1,43 +0,0 @@ -# 空の軌跡 the 1st 1.0.5 -# BID: 555E8872455F107E - -DECLARATIONS: - # Lock Max Handheld Resolution to 720p instead of 900p - - - type: code - name: adjustDrResToNativeInHH - instructions: [ - [cmp, w10, 1280], - [b.le, :goto1], - [adrp, x21, 0x72F000], - [ldr, w21, [x21, 0x820]], ## REF: nn::oe::GetOperationMode in nnMain - [cbnz, w21, :goto1], - [mov, w10, 1280], - [mov, w8, 720], - :goto1, [stp, w10, w8, [x19, 0x10]], - [ret] - ] -MASTER_WRITE: - ## REF: 6A 22 02 29 - - - type: asm_a64 - main_offset: 0x2CF374 - instructions: [ - [bl, _adjustDrResToNativeInHH()] - ] -ALL_FPS: - # Min Delta - ## REF: C1 03 80 52 28 4D 28 9B, first ADRP + ADD below it - - - type: evaluate_write - address: [MAIN, 0x72F850, 0x2C] - value_type: uint32 - value: FPS_TARGET - # Dynamic Resolution - ## REF: First function in .init_array section, ADRP + ADD + 0x220 (default float: 2) - ## Adding there 0.95 by myself because game seems to have issues with reaching 60 FPS at 1.0 - - - type: write - address: [MAIN, 0x72F3D0] - value_type: float - value: 0.95 diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01004D20219E0000/6DE3725465A43249.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01004D20219E0000/6DE3725465A43249.yaml deleted file mode 100644 index 2753ec5..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01004D20219E0000/6DE3725465A43249.yaml +++ /dev/null @@ -1,43 +0,0 @@ -# 空の軌跡 the 1st 1.0.4 -# BID: 6DE3725465A43249 - -DECLARATIONS: - # Lock Max Handheld Resolution to 720p instead of 900p - - - type: code - name: adjustDrResToNativeInHH - instructions: [ - [cmp, w9, 1280], - [b.le, :goto1], - [adrp, x21, 0x65E000], - [ldr, w21, [x21, 0x820]], ## REF: nn::oe::GetOperationMode in nnMain - [cbnz, w21, :goto1], - [mov, w9, 1280], - [mov, w8, 720], - :goto1, [stp, w9, w8, [x19, 0x10]], - [ret] - ] -MASTER_WRITE: - ## REF: 69 22 02 29 - - - type: asm_a64 - main_offset: 0x237E54 - instructions: [ - [bl, _adjustDrResToNativeInHH()] - ] -ALL_FPS: - # Min Delta - ## REF: 88 01 80 52 C1 03 80 52 28 4D 28 9B 29 00 80 52, first ADRP + ADD below it - - - type: evaluate_write - address: [MAIN, 0x65E850, 0x2C] - value_type: uint32 - value: FPS_TARGET - # Dynamic Resolution - ## REF: First function in .init_array section, ADRP + ADD + 0x220 (default float: 2) - ## Adding there 0.95 by myself because game seems to have issues with reaching 60 FPS with 1.0 - - - type: write - address: [MAIN, 0x65E368] - value_type: float - value: 0.95 diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01004D300C5AE000/A6CE40DC3AEDB1BE.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01004D300C5AE000/A6CE40DC3AEDB1BE.yaml deleted file mode 100644 index d8bf55e..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01004D300C5AE000/A6CE40DC3AEDB1BE.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Kirby and the Forgotten Land 1.1.0 -# BID: A6CE40DC3AEDB1BE -# Thanks to Hazerou for finding interval offsets - -ALL_FPS: - # Interval (Setting it to 0 unlocks framerate and sets dynamic game speed) - ## REF: 17 6C 90 52 57 01 A0 72 08 7C 01 A9, first STR above it - - - type: write - address: [MAIN, 0xA76728, 0x50] - address_unsafe: true - value_type: int32 - value: 0 - # Dynamic Resolution GPU Frametiming Max / Min (Max = 1.95 * (30/FPS), Min = 1.7 * (30/FPS)) - ## REF: 88 F2 80 B9 F3 03 00 AA 1F 05 00 71, last result, first STR above it - - - type: evaluate_write - address: [MAIN, 0xA767B0, 0x140, 0x1B0, 0x20, 0x34] - address_unsafe: true - value_type: float - value: ["(30 / FPS_TARGET) * 1.95", "(30 / FPS_TARGET) * 1.7"] diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01004D300C5AE000/D9BA7DB72FFAFECD.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01004D300C5AE000/D9BA7DB72FFAFECD.yaml deleted file mode 100644 index f476b0b..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01004D300C5AE000/D9BA7DB72FFAFECD.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# Kirby and the Forgotten Land 1.0.0 -# BID: D9BA7DB72FFAFECD -# Thanks to Hazerou for finding interval offsets - -ALL_FPS: - # Interval (Setting it to 0 unlocks framerate and sets dynamic game speed) - - - type: write - address: [MAIN, 0xA72628, 0x50] - address_unsafe: true - value_type: int32 - value: 0 - # Dynamic Resolution GPU Frametiming Max / Min (Max = 1.95 * (30/FPS), Min = 1.7 * (30/FPS)) - - - type: evaluate_write - address: [MAIN, 0xA726B0, 0x140, 0x1B0, 0x20, 0x34] - address_unsafe: true - value_type: float - value: ["(30 / FPS_TARGET) * 1.95", "(30 / FPS_TARGET) * 1.7"] diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01004D901AFDA000/D334BC060F1FA3AE.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01004D901AFDA000/D334BC060F1FA3AE.yaml deleted file mode 100644 index 9477480..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01004D901AFDA000/D334BC060F1FA3AE.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Disney Epic Mickey: Rebrushed 1.0.4 -# BID: D334BC060F1FA3AE - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x6E35A58, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6E636F8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6666668, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01004DC00D936000/31CDAD67EA25CC16.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01004DC00D936000/31CDAD67EA25CC16.yaml deleted file mode 100644 index 68dc630..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01004DC00D936000/31CDAD67EA25CC16.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# SENRAN KAGURA Peach Ball 1.0.0 -# BID: 31CDAD67EA25CC16 - -unsafeCheck: true - -ALL_FPS: - # CRendSpanMgr:[SpanType_30FPS] = 1, CRendSpanMgr:[SpanType_60FPS] = 0 - - - type: write - address: [MAIN, 0x62D8CC] - value_type: int32 - value: 0 diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01004F401BEBE000/DF2D64FB63F1BD00.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01004F401BEBE000/DF2D64FB63F1BD00.yaml deleted file mode 100644 index d42d0cb..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01004F401BEBE000/DF2D64FB63F1BD00.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Song of Nunu: A League of Legends Story 1.0.2 -# BID: DF2D64FB63F1BD00 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x7BC0278, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7BFA240, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x73FEAE8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01004FF021942000/4EAC4BED64458C8C.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01004FF021942000/4EAC4BED64458C8C.yaml deleted file mode 100644 index 5ca643f..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01004FF021942000/4EAC4BED64458C8C.yaml +++ /dev/null @@ -1,13 +0,0 @@ -# EA SPORTS FC 26 1.80.73bf -# BID: 4EAC4BED64458C8C - -ALL_FPS: - # Internal FPS Lock - - - type: evaluate_write - address: [MAIN, 0xC5D1448, 8] - value_type: double - value: FPS_TARGET - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01004FF021942000/5D738626CE19A40F.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01004FF021942000/5D738626CE19A40F.yaml deleted file mode 100644 index 6506855..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01004FF021942000/5D738626CE19A40F.yaml +++ /dev/null @@ -1,13 +0,0 @@ -# EA SPORTS FC 26 1.80.11a0 -# BID: 5D738626CE19A40F - -ALL_FPS: - # Internal FPS Lock - - - type: evaluate_write - address: [MAIN, 0xC5CC448, 8] - value_type: double - value: FPS_TARGET - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01004FF021942000/DF48D885EB914AC7.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01004FF021942000/DF48D885EB914AC7.yaml deleted file mode 100644 index 4034609..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01004FF021942000/DF48D885EB914AC7.yaml +++ /dev/null @@ -1,13 +0,0 @@ -# EA SPORTS FC 26 1.80.43d0 -# BID: DF48D885EB914AC7 - -ALL_FPS: - # Internal FPS Lock - - - type: evaluate_write - address: [MAIN, 0xC5CB448, 8] - value_type: double - value: FPS_TARGET - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01004FF021942000/EBFF3A6C8EA30490.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01004FF021942000/EBFF3A6C8EA30490.yaml deleted file mode 100644 index 14de975..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01004FF021942000/EBFF3A6C8EA30490.yaml +++ /dev/null @@ -1,13 +0,0 @@ -# EA SPORTS FC 26 1.81.fdc -# BID: EBFF3A6C8EA30490 - -ALL_FPS: - # Internal FPS Lock - - - type: evaluate_write - address: [MAIN, 0xC63C6F8, 8] - value_type: double - value: FPS_TARGET - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100500012AB4000/118AA7B71E824B3B.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100500012AB4000/118AA7B71E824B3B.yaml deleted file mode 100644 index 0810210..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100500012AB4000/118AA7B71E824B3B.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Life is Strange: True Colors 1.0.4 -# BID: 118AA7B71E824B3B - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x7426EF0, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7451B78, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6C85418, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010050F00BC1A000/6BEC9B23B09DF46C.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010050F00BC1A000/6BEC9B23B09DF46C.yaml deleted file mode 100644 index e0a8ca7..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010050F00BC1A000/6BEC9B23B09DF46C.yaml +++ /dev/null @@ -1,56 +0,0 @@ -# Resident Evil 1.0.0 -# BID: 6BEC9B23B09DF46C - -DECLARATIONS: - - - type: variable - name: cutscene_flag - value_type: uint32 - default_value: 0 - - - type: code - name: signalCutscene - instructions: [ - [add, x29, sp, 0x10], - [mov, w1, 1], - [adrp, x19, $cutscene_flag], - [str, w1, [x19, $cutscene_flag]], - [ret] - ] - - - type: code - name: designalCutscene - instructions: [ - [adrp, x1, $cutscene_flag], - [str, wzr, [x1, $cutscene_flag]], - [ret] - ] -MASTER_WRITE: - # Detect prerendered cutscenes - - - type: asm_a64 - main_offset: 0xB1A818 - instructions: [ - [bl, _signalCutscene()] - ] - - - type: asm_a64 - main_offset: 0xB1A9BC - instructions: [ - [b, _designalCutscene()] - ] -ALL_FPS: - # Internal FPS Lock - - - type: evaluate_write - address: [MAIN, 0x1EC6CF0, 0x4C] - value_type: float - value: "FPS_LOCK_TARGET" - - - type: compare - compare_type: "==" - compare_value: 1 - compare_address: [VARIABLE, cutscene_flag] - value_type: refresh_rate - value: 30 - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010050F01DF9C000/11D6D6158B566A74.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010050F01DF9C000/11D6D6158B566A74.yaml deleted file mode 100644 index e76a037..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010050F01DF9C000/11D6D6158B566A74.yaml +++ /dev/null @@ -1,38 +0,0 @@ -# REYNATIS (US/EU) 1.0.8 -# BID: 11D6D6158B566A74 - -unsafeCheck: true - -MASTER_WRITE: - # Redirect reading DR timing in DynamicResolution::LowerResSW() to MAIN + 0x7C0DF00 - # REF: 01 f0 67 1e - - - type: bytes - main_offset: 0x391CEEC - value_type: uint32 - value: # 941702B0 818247FD 1020611E 6922482D CD020054 6A6240BD - - 0xB0021794 # adrp x20, #0x7c0d000 - - 0xFD478281 # ldr d1, [x20, #0xf00] - - 0x1E612010 # fcmpe d0, d1 - - 0x2D482269 # ldp s9, s8, [x19, #0x40] - - 0x540002CD # b.le #0x391cf54 - - 0xBD40626A # ldr s10, [x19, #0x60] - - - type: bytes - main_offset: 0x391CF54 - value_type: uint32 - value: - - 0xFD478681 # ldr d1, [x20, #0xf08] - # Default handheld value - - - type: bytes - main_offset: 0x7C0DF00 - value_type: double - value: [31, 29] -ALL_FPS: - # Dynamic Resolution Timing - - - type: evaluate_write - address: [MAIN, 0x7C0DF00] - value_type: double - value: ["0.93 * FRAMETIME_TARGET", "(0.93 * FRAMETIME_TARGET) - 2"] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010050F01DF9C000/25A4C89527E7A6E6.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010050F01DF9C000/25A4C89527E7A6E6.yaml deleted file mode 100644 index 6914404..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010050F01DF9C000/25A4C89527E7A6E6.yaml +++ /dev/null @@ -1,38 +0,0 @@ -# REYNATIS (US/EU) 1.0.6 -# BID: 25A4C89527E7A6E6 - -unsafeCheck: true - -MASTER_WRITE: - # Redirect reading DR timing in DynamicResolution::LowerResSW() to MAIN + 0x7C0DF00 - # REF: 01 f0 67 1e - - - type: bytes - main_offset: 0x391CEEC - value_type: uint32 - value: # 941702B0 818247FD 1020611E 6922482D CD020054 6A6240BD - - 0xB0021794 # adrp x20, #0x7c0d000 - - 0xFD478281 # ldr d1, [x20, #0xf00] - - 0x1E612010 # fcmpe d0, d1 - - 0x2D482269 # ldp s9, s8, [x19, #0x40] - - 0x540002CD # b.le #0x391cf54 - - 0xBD40626A # ldr s10, [x19, #0x60] - - - type: bytes - main_offset: 0x391CF54 - value_type: uint32 - value: - - 0xFD478681 # ldr d1, [x20, #0xf08] - # Default handheld value - - - type: bytes - main_offset: 0x7C0DF00 - value_type: double - value: [31, 29] -ALL_FPS: - # Dynamic Resolution Timing - - - type: evaluate_write - address: [MAIN, 0x7C0DF00] - value_type: double - value: ["0.93 * FRAMETIME_TARGET", "(0.93 * FRAMETIME_TARGET) - 2"] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010050F01DF9C000/456F89F80D657095.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010050F01DF9C000/456F89F80D657095.yaml deleted file mode 100644 index 8055932..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010050F01DF9C000/456F89F80D657095.yaml +++ /dev/null @@ -1,37 +0,0 @@ -# REYNATIS (US/EU) 1.0.4 -# BID: 456F89F80D657095 - -unsafeCheck: true - -MASTER_WRITE: - # Redirect reading DR timing in DynamicResolution::LowerResSW() to MAIN + 0x7C0DF00 - - - type: bytes - main_offset: 0x391CF8C - value_type: uint32 - value: - - 0xB0021794 # to update with newer updates - - 0xFD478281 # to update if offset 0xF00 is still not enough - - 0x1E612010 - - 0x2D482269 - - 0x540002CD # branch to update with newer updates - - 0xBD40626A - - - type: bytes - main_offset: 0x391CFF4 - value_type: uint32 - value: - - 0xFD478681 # to update if offset 0xF00+8 is still not enough - # Default handheld value - - - type: bytes - main_offset: 0x7C0DF00 - value_type: double - value: [31, 29] -ALL_FPS: - # Dynamic Resolution Timing - - - type: evaluate_write - address: [MAIN, 0x7C0DF00] - value_type: double - value: ["(0.9 * FRAMETIME_TARGET) + 1", "(0.9 * FRAMETIME_TARGET) - 1"] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010050F01DF9C000/5F765D2CC4CDEF1C.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010050F01DF9C000/5F765D2CC4CDEF1C.yaml deleted file mode 100644 index 0ae9387..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010050F01DF9C000/5F765D2CC4CDEF1C.yaml +++ /dev/null @@ -1,36 +0,0 @@ -# REYNATIS (US/EU) 1.0.10 -# BID: 5F765D2CC4CDEF1C - -DECLARATIONS: - - - type: variable - name: dr_target1 - value_type: double - default_value: 31 - evaluate: "0.93 * FRAMETIME_TARGET" - - - type: variable - name: dr_target2 - value_type: double - default_value: 29 - evaluate: "(0.93 * FRAMETIME_TARGET) - 2" -MASTER_WRITE: - # Redirect reading DR timing in DynamicResolution::LowerResSW() - # REF: 01 f0 67 1e - - - type: asm_a64 - main_offset: 0x38E7ECC - instructions: [ - [adrp, x20, $dr_target1], - [ldr, d1, [x20, $dr_target1]], - [fcmpe, d0, d1], - [ldp, s9, s8, [x19, 0x40]], - [b.le, 0x38e7f34], - [ldr, s10, [x19, 0x60]] - ] - - - type: asm_a64 - main_offset: 0x38E7F34 - instructions: [ - [ldr, d1, [x20, $dr_target2]] - ] diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010050F01DF9C000/7C8FE1FD610E1F1F.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010050F01DF9C000/7C8FE1FD610E1F1F.yaml deleted file mode 100644 index 414e038..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010050F01DF9C000/7C8FE1FD610E1F1F.yaml +++ /dev/null @@ -1,38 +0,0 @@ -# REYNATIS (US/EU) 1.0.7 -# BID: 7C8FE1FD610E1F1F - -unsafeCheck: true - -MASTER_WRITE: - # Redirect reading DR timing in DynamicResolution::LowerResSW() to MAIN + 0x7C0DF00 - # REF: 01 f0 67 1e - - - type: bytes - main_offset: 0x391CEEC - value_type: uint32 - value: # 941702B0 818247FD 1020611E 6922482D CD020054 6A6240BD - - 0xB0021794 # adrp x20, #0x7c0d000 - - 0xFD478281 # ldr d1, [x20, #0xf00] - - 0x1E612010 # fcmpe d0, d1 - - 0x2D482269 # ldp s9, s8, [x19, #0x40] - - 0x540002CD # b.le #0x391cf54 - - 0xBD40626A # ldr s10, [x19, #0x60] - - - type: bytes - main_offset: 0x391CF54 - value_type: uint32 - value: - - 0xFD478681 # ldr d1, [x20, #0xf08] - # Default handheld value - - - type: bytes - main_offset: 0x7C0DF00 - value_type: double - value: [31, 29] -ALL_FPS: - # Dynamic Resolution Timing - - - type: evaluate_write - address: [MAIN, 0x7C0DF00] - value_type: double - value: ["0.93 * FRAMETIME_TARGET", "(0.93 * FRAMETIME_TARGET) - 2"] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010050F01DF9C000/C370209AECC8D2FB.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010050F01DF9C000/C370209AECC8D2FB.yaml deleted file mode 100644 index 69daf33..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010050F01DF9C000/C370209AECC8D2FB.yaml +++ /dev/null @@ -1,37 +0,0 @@ -# REYNATIS (US/EU) 1.0.5 -# BID: C370209AECC8D2FB - -unsafeCheck: true - -MASTER_WRITE: - # Redirect reading DR timing in DynamicResolution::LowerResSW() to MAIN + 0x7C0DF00 - - - type: bytes - main_offset: 0x30A752C - value_type: uint32 - value: - - 0xD0025B34 # to update with newer updates - - 0xFD478281 # to update if offset 0xF00 is still not enough - - 0x1E612010 - - 0x2D482269 - - 0x540002CD # branch possible to update with newer updates - - 0xBD40626A - - - type: bytes - main_offset: 0x30A7594 - value_type: uint32 - value: - - 0xFD478681 # to update if offset 0xF00+8 is still not enough - # Default handheld value - - - type: bytes - main_offset: 0x7C0DF00 - value_type: double - value: [31, 29] -ALL_FPS: - # Dynamic Resolution Timing - - - type: evaluate_write - address: [MAIN, 0x7C0DF00] - value_type: double - value: ["(0.9 * FRAMETIME_TARGET) + 1", "(0.9 * FRAMETIME_TARGET) - 1"] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010050F01DF9C000/C59C89CCDF382602.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010050F01DF9C000/C59C89CCDF382602.yaml deleted file mode 100644 index de1d816..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010050F01DF9C000/C59C89CCDF382602.yaml +++ /dev/null @@ -1,38 +0,0 @@ -# REYNATIS (US/EU) 1.0.9 -# BID: C59C89CCDF382602 - -unsafeCheck: true - -MASTER_WRITE: - # Redirect reading DR timing in DynamicResolution::LowerResSW() to MAIN + 0x7C0DF00 - # REF: 01 f0 67 1e - - - type: bytes - main_offset: 0x391CEEC - value_type: uint32 - value: # 941702B0 818247FD 1020611E 6922482D CD020054 6A6240BD - - 0xB0021794 # adrp x20, #0x7c0d000 - - 0xFD478281 # ldr d1, [x20, #0xf00] - - 0x1E612010 # fcmpe d0, d1 - - 0x2D482269 # ldp s9, s8, [x19, #0x40] - - 0x540002CD # b.le #0x391cf54 - - 0xBD40626A # ldr s10, [x19, #0x60] - - - type: bytes - main_offset: 0x391CF54 - value_type: uint32 - value: - - 0xFD478681 # ldr d1, [x20, #0xf08] - # Default handheld value - - - type: bytes - main_offset: 0x7C0DF00 - value_type: double - value: [31, 29] -ALL_FPS: - # Dynamic Resolution Timing - - - type: evaluate_write - address: [MAIN, 0x7C0DF00] - value_type: double - value: ["0.93 * FRAMETIME_TARGET", "(0.93 * FRAMETIME_TARGET) - 2"] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010051B0131F0000/E0E9D0429A2458E1.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010051B0131F0000/E0E9D0429A2458E1.yaml deleted file mode 100644 index 87de4a1..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010051B0131F0000/E0E9D0429A2458E1.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Monster Jam Steel Titans 2 1.0.2 -# BID: E0E9D0429A2458E1 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) rounded to 1 decimal - - - type: evaluate_write - address: [MAIN, 0x6DD50F8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6DF7F90, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010051C0134F8000/20503FA77FA416B7.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010051C0134F8000/20503FA77FA416B7.yaml deleted file mode 100644 index f47a201..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010051C0134F8000/20503FA77FA416B7.yaml +++ /dev/null @@ -1,34 +0,0 @@ -# DRAGON BALL Z: KARAKOT + A NEW POWER AWAKENS SET 1.50 -# BID: 20503FA77FA416B7 - -ALL_FPS: - # Disable bUseFixedFrameRate in cutscenes to unlock framerate - - - type: write - address: [MAIN, 0x9456538, 0x810] - address_unsafe: true - value_type: uint32 - # Default is 0x47 in cutscenes, bUseFixedFrameRate |= 0x40 - # By writing 7 we are making sure that other flags are maintained: - # bAllowMultiThreadedAnimationUpdate |= 4 - # bOptimizeAnimBlueprintMemberVariableAccess |= 2 - # bCanBlueprintsTickByDefault |= 1 - value: 7 - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x9421478, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x9456DE8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x88C2C08, 0] - value_type: int32 - value: [0, 0] diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010051C0134F8000/389E38618E93A5E0.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010051C0134F8000/389E38618E93A5E0.yaml deleted file mode 100644 index 4c58759..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010051C0134F8000/389E38618E93A5E0.yaml +++ /dev/null @@ -1,34 +0,0 @@ -# DRAGON BALL Z: KARAKOT + A NEW POWER AWAKENS SET 1.51 -# BID: 389E38618E93A5E0 - -ALL_FPS: - # Disable bUseFixedFrameRate in cutscenes to unlock framerate - - - type: write - address: [MAIN, 0x9456538, 0x810] - address_unsafe: true - value_type: uint32 - # Default is 0x47 in cutscenes, bUseFixedFrameRate |= 0x40 - # By writing 7 we are making sure that other flags are maintained: - # bAllowMultiThreadedAnimationUpdate |= 4 - # bOptimizeAnimBlueprintMemberVariableAccess |= 2 - # bCanBlueprintsTickByDefault |= 1 - value: 7 - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x9421478, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x9456DE8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x88C2C08, 0] - value_type: int32 - value: [0, 0] diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010051C0134F8000/72F6F8B54276185C.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010051C0134F8000/72F6F8B54276185C.yaml deleted file mode 100644 index 534cf37..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010051C0134F8000/72F6F8B54276185C.yaml +++ /dev/null @@ -1,34 +0,0 @@ -# DRAGON BALL Z: KARAKOT + A NEW POWER AWAKENS SET 1.52 -# BID: 72F6F8B54276185C - -ALL_FPS: - # Disable bUseFixedFrameRate in cutscenes to unlock framerate - - - type: write - address: [MAIN, 0x945A538, 0x810] - address_unsafe: true - value_type: uint32 - # Default is 0x47 in cutscenes, bUseFixedFrameRate |= 0x40 - # By writing 7 we are making sure that other flags are maintained: - # bAllowMultiThreadedAnimationUpdate |= 4 - # bOptimizeAnimBlueprintMemberVariableAccess |= 2 - # bCanBlueprintsTickByDefault |= 1 - value: 7 - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x9425478, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x945ADE8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x88C6FD8, 0] - value_type: int32 - value: [0, 0] diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010051C0134F8000/BC99D4D0A9474360.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010051C0134F8000/BC99D4D0A9474360.yaml deleted file mode 100644 index 416b972..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010051C0134F8000/BC99D4D0A9474360.yaml +++ /dev/null @@ -1,37 +0,0 @@ -# DRAGON BALL Z: KARAKOT + A NEW POWER AWAKENS SET 1.60 -# BID: BC99D4D0A9474360 - -ALL_FPS: - # Disable bUseFixedFrameRate in cutscenes to unlock framerate - - - type: write - address: [MAIN, 0x996A558, 0x810] - address_unsafe: true - value_type: uint32 - # Default is 0x47 in cutscenes, bUseFixedFrameRate |= 0x40 - # By writing 7 we are making sure that other flags are maintained: - # bAllowMultiThreadedAnimationUpdate |= 4 - # bOptimizeAnimBlueprintMemberVariableAccess |= 2 - # bCanBlueprintsTickByDefault |= 1 - value: 7 - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x9935498, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x996AE08, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x8DD7418, 0] - value_type: int32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100521017B2A000/249EAB9BF046C5EA.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100521017B2A000/249EAB9BF046C5EA.yaml deleted file mode 100644 index da543b4..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100521017B2A000/249EAB9BF046C5EA.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# HARVESTELLA 1.0.2 -# BID: 249EAB9BF046C5EA - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x7B279E8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7B555E8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010052701BB0A000/8322528255D2CC63.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010052701BB0A000/8322528255D2CC63.yaml deleted file mode 100644 index a88d877..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010052701BB0A000/8322528255D2CC63.yaml +++ /dev/null @@ -1,55 +0,0 @@ -# トライン5:ぜんまい仕掛けの陰謀(Trine 5: A Clockwork Conspiracy) 1.0.5 -# BID: 8322528255D2CC63 -# To update dynamic resolution offsets look at fb::renderer::ResolutionScaler::update - -DECLARATIONS: - - - type: variable - name: dr_target_max - value_type: double - default_value: 34 - evaluate: "1.02 * FRAMETIME_TARGET" - - - type: variable - name: dr_target_min - value_type: double - default_value: 32 - evaluate: "0.96 * FRAMETIME_TARGET" -MASTER_WRITE: - # Change double buffer to triple buffer - - - type: asm_a64 - main_offset: 0x138A024 - instructions: [ - [mov, w8, 3] - ] - # Allow changing dynamic resolution timings - # Max - - - type: asm_a64 - main_offset: 0x25992CC - instructions: [ - [adrp, x8, $dr_target_max], - [adrp, x22, 0x5ddf000], - [ldr, d2, [x8, $dr_target_max]] - ] - # Min - changed address to MAIN + 0x7D05208 - - - type: asm_a64 - main_offset: 0x2599344 - instructions: [ - [adrp, x10, $dr_target_min], - [ldr, d5, [x10, $dr_target_min]] - ] - - - type: asm_a64 - main_offset: 0x2599380 - instructions: [ - [adrp, x10, $dr_target_min] - ] - - - type: asm_a64 - main_offset: 0x2599390 - instructions: [ - [ldr, d6, [x10, $dr_target_min]] - ] diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005270232F2000/51198224D1A8F16C.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01005270232F2000/51198224D1A8F16C.yaml deleted file mode 100644 index f585ffa..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005270232F2000/51198224D1A8F16C.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# Octopath Traveler 0 1.0.3 -# BID: 51198224D1A8F16C - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x6C4F6E8, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7C718E0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005270232F2000/FEABC8D141EECCA5.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01005270232F2000/FEABC8D141EECCA5.yaml deleted file mode 100644 index d9cebe9..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005270232F2000/FEABC8D141EECCA5.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# Octopath Traveler 0 1.0.2 -# BID: FEABC8D141EECCA5 - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x6C5A6E8, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7C7C8E0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100535014D76000/8CCC67A5A75CB8E5.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100535014D76000/8CCC67A5A75CB8E5.yaml deleted file mode 100644 index b02e9f8..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100535014D76000/8CCC67A5A75CB8E5.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# Little Noah: Scion of Paradise 1.41 -# BID: 8CCC67A5A75CB8E5 - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x3D2E180, 0x48] - value_type: float - value: "1 / FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100538017BAC000/A2DDF741D0E37D15.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100538017BAC000/A2DDF741D0E37D15.yaml deleted file mode 100644 index 3c285eb..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100538017BAC000/A2DDF741D0E37D15.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# VARIOUS DAYLIFE 1.0.1 -# BID: A2DDF741D0E37D15 - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x60D56A0, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x68986B0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010053D014C44000/086367BD573D1899.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010053D014C44000/086367BD573D1899.yaml deleted file mode 100644 index d63a875..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010053D014C44000/086367BD573D1899.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# 英雄伝説 創の軌跡 1.0.6 -# BID: 086367BD573D1899 - -ALL_FPS: - # Set game to 60 FPS mode - - - type: write - address: [MAIN, 0x4FBEA80, 0x20A4] - value_type: uint32 - value: 0 \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010053E002EA2000/76EC789B99A25BA5.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010053E002EA2000/76EC789B99A25BA5.yaml deleted file mode 100644 index 050daa4..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010053E002EA2000/76EC789B99A25BA5.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# FATE/EXTELLA 1.0.0 -# BID: 76EC789B99A25BA5 -# REF: aql::GraphicsContext::initialize - -MASTER_WRITE: - # Remove double buffer - - - type: asm_a64 - main_offset: 0x55DFDC - instructions: [ - [mov, x8, 3] - ] diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005420101DA000/134EC3D8BE75126F.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01005420101DA000/134EC3D8BE75126F.yaml deleted file mode 100644 index 6877141..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005420101DA000/134EC3D8BE75126F.yaml +++ /dev/null @@ -1,53 +0,0 @@ -# The Legend of Heroes: Trails of Cold Steel III 1.0.1 -# BID: 134EC3D8BE75126F -# Button polling is 2x more sensitive to holding any button at 60 FPS -# Fishing timer is decreasing 2x faster at 60 FPS -# Bike is turning 2x faster at 60 FPS - -DECLARATIONS: - - - type: variable - name: fps_lock - value_type: uint32 - default_value: 33333333 - evaluate: "FRAMETIME_TARGET * 930000" - - - type: variable - name: frame_time - value_type: float - default_value: 0.0333333333 - - - type: code - name: dynamicSpeed - instructions: [ - [str, d0, [x8, 0x20]], - [fcvt, s4, d0], - [adrp, x8, $frame_time], - [str, s4, [x8, $frame_time]], - [ret] - ] -MASTER_WRITE: - # Move loading FPS lock time - - - type: asm_a64 - main_offset: 0x511818 - instructions: [ - [adrp, x9, $fps_lock], - [ldr, w9, [x9, $fps_lock]] - ] - # Write game's loop time as float - - - type: asm_a64 - main_offset: 0x511884 - instructions: [ - [bl, _dynamicSpeed()] - ] - - # Read lowest timing float factor - type: asm_a64 - main_offset: 0x5E5EC - instructions: [ - [adrp, x8, $frame_time], - [fminnm, s1, s1, s2], - [ldr, s2, [x8, $frame_time]] - ] - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100544020572000/153DB27728D41305.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100544020572000/153DB27728D41305.yaml deleted file mode 100644 index 4cca718..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100544020572000/153DB27728D41305.yaml +++ /dev/null @@ -1,35 +0,0 @@ -# Atelier Yumia: The Alchemist of Memories & the Envisioned Land 1.1.0 -# BID: 153DB27728D41305 - -MASTER_WRITE: - # Redirect DR to MAIN + 0x2F11FF0 - # REF: A9 24 89 52 49 A2 A7 72 - - - type: bytes - main_offset: 0x10B09B4 - value_type: uint32 - value: - - 0xB000F309 # adrp x9, 0x2f11000 - - 0xBD4FF121 # ldr s1, [x9, 0xff0] - - 0xD503201F # nop - ## Default value - - - type: bytes - main_offset: 0x2F11FF0 - value_type: float - value: 0.035714 -ALL_FPS: - # Disable FPS Lock - # REF: 88 46 40 F9 03 11 40 F9, first ADRP+LDR above it - - - type: write - address: [MAIN, 0x2ED8D10, 0xE0, 0x284] - address_unsafe: true - value_type: uint8 - value: 0 - # DR Target - - - type: evaluate_write - address: [MAIN, 0x2F11FF0] - value_type: float - value: "1.01 / FPS_TARGET" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100544020572000/1CEA83A1E6684665.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100544020572000/1CEA83A1E6684665.yaml deleted file mode 100644 index 33e2f6b..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100544020572000/1CEA83A1E6684665.yaml +++ /dev/null @@ -1,31 +0,0 @@ -# Atelier Yumia: The Alchemist of Memories & the Envisioned Land 1.3.0 -# BID: 1CEA83A1E6684665 - -DECLARATIONS: - - - type: variable - name: dr_target - value_type: float - default_value: 0.035714 - evaluate: "1.01 / FPS_TARGET" - -MASTER_WRITE: - # Redirect DR - # REF: A9 24 89 52 49 A2 A7 72, second REF - - - type: asm_a64 - main_offset: 0x10AAEE4 - instructions: [ - [adrp, x9, $dr_target], - [ldr, s1, [x9, $dr_target]], - [nop] - ] -ALL_FPS: - # Disable FPS Lock - # REF: 88 46 40 F9 03 11 40 F9, first ADRP+LDR above it - - - type: write - address: [MAIN, 0x2F23C00, 0xE0, 0x294] - address_unsafe: true - value_type: uint8 - value: 0 diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100544020572000/29F67D61B0AD1500.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100544020572000/29F67D61B0AD1500.yaml deleted file mode 100644 index b1e45e5..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100544020572000/29F67D61B0AD1500.yaml +++ /dev/null @@ -1,35 +0,0 @@ -# Atelier Yumia: The Alchemist of Memories & the Envisioned Land 1.2.0 -# BID: 29F67D61B0AD1500 - -MASTER_WRITE: - # Redirect DR to MAIN + 0x2F4CFF0 - # REF: A9 24 89 52 49 A2 A7 72, second REF - - - type: bytes - main_offset: 0x10B2424 - value_type: uint32 - value: - - 0xD000F4C9 # adrp x9, 0x2F4C000 - - 0xBD4FF121 # ldr s1, [x9, 0xFF0] - - 0xD503201F # nop - ## Default value - - - type: bytes - main_offset: 0x2F4CFF0 - value_type: float - value: 0.035714 -ALL_FPS: - # Disable FPS Lock - # REF: 88 46 40 F9 03 11 40 F9, first ADRP+LDR above it - - - type: write - address: [MAIN, 0x2F13D80, 0xE0, 0x284] - address_unsafe: true - value_type: uint8 - value: 0 - # DR Target - - - type: evaluate_write - address: [MAIN, 0x2F4CFF0] - value_type: float - value: "1.01 / FPS_TARGET" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100544020572000/3B2CB1C8865E7B1E.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100544020572000/3B2CB1C8865E7B1E.yaml deleted file mode 100644 index a821cd1..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100544020572000/3B2CB1C8865E7B1E.yaml +++ /dev/null @@ -1,35 +0,0 @@ -# Atelier Yumia: The Alchemist of Memories & the Envisioned Land 1.2.1 -# BID: 3B2CB1C8865E7B1E - -MASTER_WRITE: - # Redirect DR to MAIN + 0x2F4CFF0 - # REF: A9 24 89 52 49 A2 A7 72, second REF - - - type: bytes - main_offset: 0x10B2424 - value_type: uint32 - value: - - 0xD000F4C9 # adrp x9, 0x2F4C000 - - 0xBD4FF121 # ldr s1, [x9, 0xFF0] - - 0xD503201F # nop - ## Default value - - - type: bytes - main_offset: 0x2F4CFF0 - value_type: float - value: 0.035714 -ALL_FPS: - # Disable FPS Lock - # REF: 88 46 40 F9 03 11 40 F9, first ADRP+LDR above it - - - type: write - address: [MAIN, 0x2F13D80, 0xE0, 0x284] - address_unsafe: true - value_type: uint8 - value: 0 - # DR Target - - - type: evaluate_write - address: [MAIN, 0x2F4CFF0] - value_type: float - value: "1.01 / FPS_TARGET" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100544020572000/540477886936CDC5.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100544020572000/540477886936CDC5.yaml deleted file mode 100644 index 2ec624e..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100544020572000/540477886936CDC5.yaml +++ /dev/null @@ -1,30 +0,0 @@ -# Atelier Yumia: The Alchemist of Memories & the Envisioned Land 1.5.1 -# BID: 540477886936CDC5 - -DECLARATIONS: - - - type: variable - name: dr_target - value_type: float - default_value: 0.035714287 # Basically = 1/28 - evaluate: "1.01 / FPS_TARGET" -MASTER_WRITE: - # Redirect DR - # REF: A9 24 89 52 49 A2 A7 72, second REF - - - type: asm_a64 - main_offset: 0x10F7B74 - instructions: [ - [adrp, x9, $dr_target], - [ldr, s1, [x9, $dr_target]], - [nop] - ] -ALL_FPS: - # Disable FPS Lock - # REF: 88 46 40 F9 03 11 40 F9, first ADRP+LDR above it - - - type: write - address: [MAIN, 0x2FEACB0, 0xE0, 0x294] - address_unsafe: true - value_type: uint8 - value: 0 \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100544020572000/5E43788065113530.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100544020572000/5E43788065113530.yaml deleted file mode 100644 index 68003a6..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100544020572000/5E43788065113530.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# Atelier Yumia: The Alchemist of Memories & the Envisioned Land 1.0.2 -# BID: 5E43788065113530 - -ALL_FPS: - # Disable FPS Lock - # REF: 88 46 40 F9 03 11 40 F9, first ADRP+LDR above it - - - type: write - address: [MAIN, 0x2E8DCF0, 0xE0, 0x284] - address_unsafe: true - value_type: uint8 - value: 0 \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100544020572000/9B9CCD97EB6EF789.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100544020572000/9B9CCD97EB6EF789.yaml deleted file mode 100644 index 26d42d0..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100544020572000/9B9CCD97EB6EF789.yaml +++ /dev/null @@ -1,30 +0,0 @@ -# Atelier Yumia: The Alchemist of Memories & the Envisioned Land 1.4.2 -# BID: 9B9CCD97EB6EF789 - -DECLARATIONS: - - - type: variable - name: dr_target - value_type: float - default_value: 0.035714 - evaluate: "1.01 / FPS_TARGET" -MASTER_WRITE: - # Redirect DR - # REF: A9 24 89 52 49 A2 A7 72, second REF - - - type: asm_a64 - main_offset: 0x10EC6A4 - instructions: [ - [adrp, x9, $dr_target], - [ldr, s1, [x9, $dr_target]], - [nop] - ] -ALL_FPS: - # Disable FPS Lock - # REF: 88 46 40 F9 03 11 40 F9, first ADRP+LDR above it - - - type: write - address: [MAIN, 0x2FC3CB0, 0xE0, 0x294] - address_unsafe: true - value_type: uint8 - value: 0 \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100544020572000/A947DDE7826A3562.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100544020572000/A947DDE7826A3562.yaml deleted file mode 100644 index b277a8f..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100544020572000/A947DDE7826A3562.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# Atelier Yumia: The Alchemist of Memories & the Envisioned Land 1.0.1 -# BID: A947DDE7826A3562 - -ALL_FPS: - # Disable FPS Lock - # REF: 88 46 40 F9 03 11 40 F9, first ADRP+LDR above it - - - type: write - address: [MAIN, 0x2E8AB00, 0xE0, 0x284] - address_unsafe: true - value_type: uint8 - value: 0 \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054A0085CA000/325E49E94A030B7E.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010054A0085CA000/325E49E94A030B7E.yaml deleted file mode 100644 index 7713963..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054A0085CA000/325E49E94A030B7E.yaml +++ /dev/null @@ -1,43 +0,0 @@ -# ドラゴンクエストXI 過ぎ去りし時を求めて S 1.0.4 -# BID: 325E49E94A030B7E - -ALL_FPS: - # r.DynamicResolution.MaxTimeBudget = 0.99 * (1000/FPS) - - - type: evaluate_write - address: [MAIN, 0x84EBDD8, 0] - value_type: float - value: ["0.99 * FRAMETIME_TARGET", "0.99 * FRAMETIME_TARGET"] - # r.DynamicResolution.MinTimeBudget = 0.9 * (1000/FPS) - - - type: evaluate_write - address: [MAIN, 0x84EBDF0, 0] - value_type: float - value: ["0.9 * FRAMETIME_TARGET", "0.9 * FRAMETIME_TARGET"] - # r.DynamicResolution.HeavyTimeBudget = 1.05 * (1000/FPS) - - - type: evaluate_write - address: [MAIN, 0x84EBE08, 0] - value_type: float - value: ["1.05 * FRAMETIME_TARGET", "1.05 * FRAMETIME_TARGET"] - # r.DynamicResolution.LightTimeBudget = 0.9 * (1000/FPS) - - - type: evaluate_write - address: [MAIN, 0x84EBE20, 0] - value_type: float - value: ["0.9 * FRAMETIME_TARGET", "0.9 * FRAMETIME_TARGET"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8500C48, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x7878500, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054A020574000/6CB3E54C5F648410.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010054A020574000/6CB3E54C5F648410.yaml deleted file mode 100644 index 985d2fb..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054A020574000/6CB3E54C5F648410.yaml +++ /dev/null @@ -1,31 +0,0 @@ -# 유미아의 아틀리에 ~추억의 연금술사와 창환의 땅~ 1.3.0 -# BID: 6CB3E54C5F648410 - -DECLARATIONS: - - - type: variable - name: dr_target - value_type: float - default_value: 0.035714 - evaluate: "1.01 / FPS_TARGET" - -MASTER_WRITE: - # Redirect DR - # REF: A9 24 89 52 49 A2 A7 72, second REF - - - type: asm_a64 - main_offset: 0x10AAEE4 - instructions: [ - [adrp, x9, $dr_target], - [ldr, s1, [x9, $dr_target]], - [nop] - ] -ALL_FPS: - # Disable FPS Lock - # REF: 88 46 40 F9 03 11 40 F9, first ADRP+LDR above it - - - type: write - address: [MAIN, 0x2F23C00, 0xE0, 0x294] - address_unsafe: true - value_type: uint8 - value: 0 diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054A020574000/EF85880A244D33EC.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010054A020574000/EF85880A244D33EC.yaml deleted file mode 100644 index ffa9e70..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054A020574000/EF85880A244D33EC.yaml +++ /dev/null @@ -1,30 +0,0 @@ -# 優米雅的鍊金工房 ~追憶之鍊金術士與幻創之地~ 1.4.2 -# BID: EF85880A244D33EC - -DECLARATIONS: - - - type: variable - name: dr_target - value_type: float - default_value: 0.035714 - evaluate: "1.01 / FPS_TARGET" -MASTER_WRITE: - # Redirect DR - # REF: A9 24 89 52 49 A2 A7 72, second REF - - - type: asm_a64 - main_offset: 0x10EC6A4 - instructions: [ - [adrp, x9, $dr_target], - [ldr, s1, [x9, $dr_target]], - [nop] - ] -ALL_FPS: - # Disable FPS Lock - # REF: 88 46 40 F9 03 11 40 F9, first ADRP+LDR above it - - - type: write - address: [MAIN, 0x2FC3CB0, 0xE0, 0x294] - address_unsafe: true - value_type: uint8 - value: 0 \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054A020574000/FB3497202E5934FB.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010054A020574000/FB3497202E5934FB.yaml deleted file mode 100644 index 1412454..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054A020574000/FB3497202E5934FB.yaml +++ /dev/null @@ -1,30 +0,0 @@ -# 優米雅的鍊金工房 ~追憶之鍊金術士與幻創之地~ 1.5.1 -# BID: FB3497202E5934FB - -DECLARATIONS: - - - type: variable - name: dr_target - value_type: float - default_value: 0.035714287 # Basically = 1/28 - evaluate: "1.01 / FPS_TARGET" -MASTER_WRITE: - # Redirect DR - # REF: A9 24 89 52 49 A2 A7 72, second REF - - - type: asm_a64 - main_offset: 0x10F7B74 - instructions: [ - [adrp, x9, $dr_target], - [ldr, s1, [x9, $dr_target]], - [nop] - ] -ALL_FPS: - # Disable FPS Lock - # REF: 88 46 40 F9 03 11 40 F9, first ADRP+LDR above it - - - type: write - address: [MAIN, 0x2FEACB0, 0xE0, 0x294] - address_unsafe: true - value_type: uint8 - value: 0 diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/0181E008CA25A289.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/0181E008CA25A289.yaml deleted file mode 100644 index 130e438..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/0181E008CA25A289.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# EA SPORTS FC 25 1.74.9f94 -# BID: 0181E008CA25A289 - -unsafeCheck: true - -ALL_FPS: - # Internal FPS Lock - - - type: evaluate_write - address: [MAIN, 0xCDFCA68, 8] - value_type: double - value: FPS_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/2213810D247A7293.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/2213810D247A7293.yaml deleted file mode 100644 index be3eaa9..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/2213810D247A7293.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# EA SPORTS FC 25 1.76.8f16 -# BID: 2213810D247A7293 - -unsafeCheck: true - -ALL_FPS: - # Internal FPS Lock - - - type: evaluate_write - address: [MAIN, 0xCE36A68, 8] - value_type: double - value: FPS_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/25636E9F2595CFFD.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/25636E9F2595CFFD.yaml deleted file mode 100644 index 4ab90f1..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/25636E9F2595CFFD.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# EA SPORTS FC 25 1.75.48c1 -# BID: 25636E9F2595CFFD - -unsafeCheck: true - -ALL_FPS: - # Internal FPS Lock - - - type: evaluate_write - address: [MAIN, 0xCE06A68, 8] - value_type: double - value: FPS_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/27BDC0166D5D5A1B.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/27BDC0166D5D5A1B.yaml deleted file mode 100644 index 73eec89..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/27BDC0166D5D5A1B.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# EA SPORTS FC 25 1.75.9499 -# BID: 27BDC0166D5D5A1B - -unsafeCheck: true - -ALL_FPS: - # Internal FPS Lock - - - type: evaluate_write - address: [MAIN, 0xCE1DA68, 8] - value_type: double - value: FPS_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/39296BB1FD4A3F20.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/39296BB1FD4A3F20.yaml deleted file mode 100644 index 47f751d..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/39296BB1FD4A3F20.yaml +++ /dev/null @@ -1,13 +0,0 @@ -# EA SPORTS FC 25 1.7e.e73a -# BID: 39296BB1FD4A3F20 - -ALL_FPS: - # Internal FPS Lock - - - type: evaluate_write - address: [MAIN, 0xCEEFA88, 8] - value_type: double - value: FPS_TARGET - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/641E15F899C4A057.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/641E15F899C4A057.yaml deleted file mode 100644 index 4220696..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/641E15F899C4A057.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# EA SPORTS FC 25 1.78.24C5 -# BID: 641E15F899C4A057 - -unsafeCheck: true - -ALL_FPS: - # Internal FPS Lock - - - type: evaluate_write - address: [MAIN, 0xCE66A68, 8] - value_type: double - value: FPS_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/668645A62391CDDE.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/668645A62391CDDE.yaml deleted file mode 100644 index bc93a42..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/668645A62391CDDE.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# EA SPORTS FC 25 1.74.122 -# BID: 668645A62391CDDE - -unsafeCheck: true - -ALL_FPS: - # Internal FPS Lock - - - type: evaluate_write - address: [MAIN, 0xCD9BA68, 8] - value_type: double - value: FPS_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/7E587D3ADCFD66BC.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/7E587D3ADCFD66BC.yaml deleted file mode 100644 index 01e8acb..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/7E587D3ADCFD66BC.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# EA SPORTS FC 25 1.78.9aa6 -# BID: 7E587D3ADCFD66BC - -unsafeCheck: true - -ALL_FPS: - # Internal FPS Lock - - - type: evaluate_write - address: [MAIN, 0xCE6FA68, 8] - value_type: double - value: FPS_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/8AB0BBEBB5F628E6.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/8AB0BBEBB5F628E6.yaml deleted file mode 100644 index 07d1b88..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/8AB0BBEBB5F628E6.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# EA SPORTS FC 25 1.7c.d76a -# BID: 8AB0BBEBB5F628E6 - -unsafeCheck: true - -ALL_FPS: - # Internal FPS Lock - - - type: evaluate_write - address: [MAIN, 0xCEEDA68, 8] - value_type: double - value: FPS_TARGET diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/A2932DA7A96EC054.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/A2932DA7A96EC054.yaml deleted file mode 100644 index 7ce0242..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/A2932DA7A96EC054.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# EA SPORTS FC 25 1.74.27d8 -# BID: A2932DA7A96EC054 - -unsafeCheck: true - -ALL_FPS: - # Internal FPS Lock - - - type: evaluate_write - address: [MAIN, 0xCD9CA68, 8] - value_type: double - value: FPS_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/AF76EBEDE6A89F89.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/AF76EBEDE6A89F89.yaml deleted file mode 100644 index 3e1aca6..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/AF76EBEDE6A89F89.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# EA SPORTS FC 25 1.75.dd04 -# BID: AF76EBEDE6A89F89 - -unsafeCheck: true - -ALL_FPS: - # Internal FPS Lock - - - type: evaluate_write - address: [MAIN, 0xCE25A68, 8] - value_type: double - value: FPS_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/B8264CDBC1CBFFCF.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/B8264CDBC1CBFFCF.yaml deleted file mode 100644 index df72c53..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/B8264CDBC1CBFFCF.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# EA SPORTS FC 25 1.77.4815 -# BID: B8264CDBC1CBFFCF - -unsafeCheck: true - -ALL_FPS: - # Internal FPS Lock - - - type: evaluate_write - address: [MAIN, 0xCE3CA68, 8] - value_type: double - value: FPS_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/C3A7D284DA741DBC.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/C3A7D284DA741DBC.yaml deleted file mode 100644 index 13c8577..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/C3A7D284DA741DBC.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# EA SPORTS FC 25 1.73.d079 -# BID: C3A7D284DA741DBC - -unsafeCheck: true - -ALL_FPS: - # Internal FPS Lock - - - type: evaluate_write - address: [MAIN, 0xCD9BA68, 8] - value_type: double - value: FPS_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/C953D6F477604662.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/C953D6F477604662.yaml deleted file mode 100644 index fafb738..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/C953D6F477604662.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# EA SPORTS FC 25 1.76.fc6a -# BID: C953D6F477604662 - -unsafeCheck: true - -ALL_FPS: - # Internal FPS Lock - - - type: evaluate_write - address: [MAIN, 0xCE3BA68, 8] - value_type: double - value: FPS_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/D404E90111F98D16.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/D404E90111F98D16.yaml deleted file mode 100644 index 91a4d94..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/D404E90111F98D16.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# EA SPORTS FC 25 1.74.6a97 -# BID: D404E90111F98D16 - -unsafeCheck: true - -ALL_FPS: - # Internal FPS Lock - - - type: evaluate_write - address: [MAIN, 0xCDD9A68, 8] - value_type: double - value: FPS_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/DF4B53A8F7EA6FB6.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/DF4B53A8F7EA6FB6.yaml deleted file mode 100644 index 1885193..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/DF4B53A8F7EA6FB6.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# EA SPORTS FC 25 1.7c.7841 -# BID: DF4B53A8F7EA6FB6 - -unsafeCheck: true - -ALL_FPS: - # Internal FPS Lock - - - type: evaluate_write - address: [MAIN, 0xCEECA68, 8] - value_type: double - value: FPS_TARGET diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/E60B4F857609BD49.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/E60B4F857609BD49.yaml deleted file mode 100644 index e2fbc9d..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/E60B4F857609BD49.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# EA SPORTS FC 25 1.7d.c638 -# BID: E60B4F857609BD49 - -unsafeCheck: true - -ALL_FPS: - # Internal FPS Lock - - - type: evaluate_write - address: [MAIN, 0xCEEFA88, 8] - value_type: double - value: FPS_TARGET diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/EB8D70AB59D8A4C2.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/EB8D70AB59D8A4C2.yaml deleted file mode 100644 index 10c2d4c..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/EB8D70AB59D8A4C2.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# EA SPORTS FC 25 1.79.b056 -# BID: EB8D70AB59D8A4C2 - -unsafeCheck: true - -ALL_FPS: - # Internal FPS Lock - - - type: evaluate_write - address: [MAIN, 0xCE71A68, 8] - value_type: double - value: FPS_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/EE92CAF016873D08.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/EE92CAF016873D08.yaml deleted file mode 100644 index 94f63b7..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/EE92CAF016873D08.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# EA SPORTS FC 25 1.7b.3ca3 -# BID: EE92CAF016873D08 - -unsafeCheck: true - -ALL_FPS: - # Internal FPS Lock - - - type: evaluate_write - address: [MAIN, 0xCE91A68, 8] - value_type: double - value: FPS_TARGET diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/F51888C0188BFA18.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/F51888C0188BFA18.yaml deleted file mode 100644 index a531ec3..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/F51888C0188BFA18.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# EA SPORTS FC 25 1.78.f2e9 -# BID: F51888C0188BFA18 - -unsafeCheck: true - -ALL_FPS: - # Internal FPS Lock - - - type: evaluate_write - address: [MAIN, 0xCE6FA68, 8] - value_type: double - value: FPS_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/F57C74294E14BDCC.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/F57C74294E14BDCC.yaml deleted file mode 100644 index 8894614..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/F57C74294E14BDCC.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# EA SPORTS FC 25 1.7a.a54b -# BID: F57C74294E14BDCC - -unsafeCheck: true - -ALL_FPS: - # Internal FPS Lock - - - type: evaluate_write - address: [MAIN, 0xCE78A68, 8] - value_type: double - value: FPS_TARGET diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/FF365FA7E744CDDA.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/FF365FA7E744CDDA.yaml deleted file mode 100644 index 01b861b..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010054E01D878000/FF365FA7E744CDDA.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# EA SPORTS FC 25 1.7a.6c14 -# BID: FF365FA7E744CDDA - -unsafeCheck: true - -ALL_FPS: - # Internal FPS Lock - - - type: evaluate_write - address: [MAIN, 0xCE76A68, 8] - value_type: double - value: FPS_TARGET diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010055200E87E000/9F1B5FB4C53E321F.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010055200E87E000/9F1B5FB4C53E321F.yaml deleted file mode 100644 index 5c3d772..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010055200E87E000/9F1B5FB4C53E321F.yaml +++ /dev/null @@ -1,32 +0,0 @@ -# Metamorphosis 1.0.1 -# BID: 9F1B5FB4C53E321F - -ALL_FPS: - # Disable SmoothFrameRate - - - type: write - address: [MAIN, 0x58C2C68, 0x7C0] - address_unsafe: true - value_type: uint32 - value: 7 - # r.DynamicRes.FrameTimeBudget (Default is 42) - - - type: evaluate_write - address: [MAIN, 0x58991A8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # r.VSync - - - type: write - address: [MAIN, 0x4D2EFF8, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x58C33A0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100559011740000/D2FD97779381FB9A.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100559011740000/D2FD97779381FB9A.yaml deleted file mode 100644 index bebf2f8..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100559011740000/D2FD97779381FB9A.yaml +++ /dev/null @@ -1,14 +0,0 @@ -# Monster Hunter Rise JP 16.02 -# BID: D2FD97779381FB9A - -ALL_FPS: - # Internal FPS lock - - - type: evaluate_write - address: [MAIN, 0x12B2E5C8, 0x434] - address_unsafe: true - value_type: float - value: FPS_LOCK_TARGET - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010055B01AA08000/4CBD150A248DA39C.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010055B01AA08000/4CBD150A248DA39C.yaml deleted file mode 100644 index a5293f6..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010055B01AA08000/4CBD150A248DA39C.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# CRYMACHINA 1.0.8 -# BID: 4CBD150A248DA39C - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x7538918, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7D33D38, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010055B01AA08000/E196E389FD9E0364.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010055B01AA08000/E196E389FD9E0364.yaml deleted file mode 100644 index b626718..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010055B01AA08000/E196E389FD9E0364.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# CRYMACHINA 1.2.0 -# BID: E196E389FD9E0364 - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x7538918, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7D33D38, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010055D009F78000/89048449BA238C8C.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010055D009F78000/89048449BA238C8C.yaml deleted file mode 100644 index f7cf338..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010055D009F78000/89048449BA238C8C.yaml +++ /dev/null @@ -1,32 +0,0 @@ -# Fire Emblem: Three Houses 1.2.0 -# BID: 89048449BA238C8C - -DECLARATIONS: - - - type: variable - name: dr_target1 - value_type: float - default_value: 34 - evaluate: "0.99 * FRAMETIME_TARGET" - - - type: variable - name: dr_target2 - value_type: float - default_value: 25 - evaluate: "0.84 * FRAMETIME_TARGET" -MASTER_WRITE: - # Redirect DR timing targets - - - type: asm_a64 - main_offset: 0x4C82D0 - instructions: [ - [adrp, x10, $dr_target1], - [ldr, s2, [x10, $dr_target1]] - ] - - - type: asm_a64 - main_offset: 0x4C8300 - instructions: [ - [adrp, x8, $dr_target2], - [ldr, s2, [x8, $dr_target2]] - ] diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010055D01C8D4000/444303671674DD91.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010055D01C8D4000/444303671674DD91.yaml deleted file mode 100644 index 38169ca..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010055D01C8D4000/444303671674DD91.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Hot Wheels Monster Trucks: Stunt Mayhem 1.0.1 -# BID: 444303671674DD91 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x60B3478, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x60ED880, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x58EEAA8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010055E00CA68000/B70F06EAC87FA2AF.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010055E00CA68000/B70F06EAC87FA2AF.yaml deleted file mode 100644 index 4297665..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010055E00CA68000/B70F06EAC87FA2AF.yaml +++ /dev/null @@ -1,40 +0,0 @@ -# Trine 4: The Nightmare Prince 1.0.3 -# BID: B70F06EAC87FA2AF -# REF: 00 00 00 00 00 00 41 40, its xref - -DECLARATIONS: - - - type: variable - name: dr_target_max - value_type: double - default_value: 34 - evaluate: "1.02 * FRAMETIME_TARGET" - - - type: variable - name: dr_target_min - value_type: double - default_value: 33 - evaluate: "0.99 * FRAMETIME_TARGET" -MASTER_WRITE: - # Allow changing dynamic resolution timings - # Max - - - type: asm_a64 - main_offset: 0x16DC3B8 - instructions: [ - [adrp, x8, $dr_target_max], - [ldr, d2, [x8, $dr_target_max]] - ] - # Min - - - type: asm_a64 - main_offset: 0x16DC404 - instructions: [ - [adrp, x10, $dr_target_min] - ] - - - type: asm_a64 - main_offset: 0x16DC418 - instructions: [ - [ldr, d4, [x10, $dr_target_min]] - ] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100567011972000/97313EA9E2BD0EC1.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100567011972000/97313EA9E2BD0EC1.yaml deleted file mode 100644 index fc7024c..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100567011972000/97313EA9E2BD0EC1.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# WRITHE 1.3.0 -# BID: 97313EA9E2BD0EC1 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x5853008, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x587FAD0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010056B015FE8000/E43525F22282A477.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010056B015FE8000/E43525F22282A477.yaml deleted file mode 100644 index bf2c2f9..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010056B015FE8000/E43525F22282A477.yaml +++ /dev/null @@ -1,54 +0,0 @@ -# NieR:Automata The End of YoRHa Edition US/EU 1.0.2 -# BID: E43525F22282A477 - -DECLARATIONS: - - - type: variable - name: dr_target_bad - value_type: float - default_value: 45 - evaluate: "1.35 * FRAMETIME_TARGET" - - - type: variable - name: dr_target_optimal - value_type: float - default_value: 32.01 - evaluate: "0.9603 * FRAMETIME_TARGET" - - - type: variable - name: dr_target_good - value_type: float - default_value: 30 - evaluate: "0.9 * FRAMETIME_TARGET" -MASTER_WRITE: - # Redirect DR timings - - - type: asm_a64 - main_offset: 0x9BF3E4 - instructions: [ - [adrp, x12, $dr_target_bad], - [ldr, s3, [x12, $dr_target_bad]] - ] - - - type: asm_a64 - main_offset: 0x9BF434 - instructions: [ - [adrp, x12, $dr_target_optimal], - [ldr, w12, [x12, $dr_target_optimal]] - ] - - - type: asm_a64 - main_offset: 0x9BF484 - instructions: [ - [fcsel, s3, s4, s0, gt], - [adrp, x12, $dr_target_optimal], - [ldr, s0, [x12, $dr_target_optimal]], - [adrp, x12, $dr_target_good] - ] - - - type: asm_a64 - main_offset: 0x9BF4A8 - instructions: [ - [ldr, s0, [x12, $dr_target_good]] - ] - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010056E00853A000/746F0D697EEEE2DD.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010056E00853A000/746F0D697EEEE2DD.yaml deleted file mode 100644 index a43844e..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010056E00853A000/746F0D697EEEE2DD.yaml +++ /dev/null @@ -1,11 +0,0 @@ -# A Hat in Time 1.0.4 -# BID: 746F0D697EEEE2DD - -ALL_FPS: - # MaxSmoothedFrameRate - - - type: evaluate_write - address: [MAIN, 0x2265248, 0x71C] - address_unsafe: true - value_type: float - value: FPS_LOCK_TARGET diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010056F00C7B4000/B5B9C7BB8D9716F6.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010056F00C7B4000/B5B9C7BB8D9716F6.yaml deleted file mode 100644 index 8830ab5..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010056F00C7B4000/B5B9C7BB8D9716F6.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Bravely Default II Asia 1.0.0 -# BID: B5B9C7BB8D9716F6 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x72AEE90, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x73050F0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x69AA5C0, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010057D006492000/67DACC049CEEE858.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010057D006492000/67DACC049CEEE858.yaml deleted file mode 100644 index e55e4a5..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010057D006492000/67DACC049CEEE858.yaml +++ /dev/null @@ -1,15 +0,0 @@ -# OCTOPATH TRAVELER 1.0.5 -# BID: 67DACC049CEEE858 - -unsafeCheck: true - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x50B5698, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010057E00AC56000/2D5B93C856CDF009.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010057E00AC56000/2D5B93C856CDF009.yaml deleted file mode 100644 index 9ecf269..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010057E00AC56000/2D5B93C856CDF009.yaml +++ /dev/null @@ -1,16 +0,0 @@ -# Dragon's Dogma: Dark Arisen 1.0.1 -# BID: 2D5B93C856CDF009 - -unsafeCheck: true - -ALL_FPS: - # FPS Lock - - - type: evaluate_write - address: [MAIN, 0x2495500, 0x304C] - value_type: float - value: FPS_TARGET - - - type: block - what: timing - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100582010AE0000/B3967105033ACC08.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100582010AE0000/B3967105033ACC08.yaml deleted file mode 100644 index 21fffcf..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100582010AE0000/B3967105033ACC08.yaml +++ /dev/null @@ -1,120 +0,0 @@ -# Crysis 2 Remastered 1.3.0 -# BID: B3967105033ACC08 - -DECLARATIONS: - - - type: variable - name: dr_target1 - value_type: float - default_value: 31.5 - evaluate: "0.945 * FRAMETIME_TARGET" - - - type: variable - name: dr_target2 - value_type: float - default_value: 32.5 - evaluate: "0.975 * FRAMETIME_TARGET" - # DON'T PUT ANYTHING BETWEEN - START - - - type: variable - name: dr_target3 - value_type: float - default_value: 33 - evaluate: "0.99 * FRAMETIME_TARGET" - - - type: variable - name: dr_target4 - value_type: float - default_value: 35 - evaluate: "0.99 * FRAMETIME_TARGET" - # DON'T PUT ANYTHING BETWEEN - END - # DON'T PUT ANYTHING BETWEEN - START - - - type: variable - name: dr_target5 - value_type: float - default_value: 32 - evaluate: "0.96 * FRAMETIME_TARGET" - - - type: variable - name: dr_target6 - value_type: float - default_value: 33.5 - evaluate: "0.96 * FRAMETIME_TARGET" - # DON'T PUT ANYTHING BETWEEN - END - # DON'T PUT ANYTHING BETWEEN - START - - - type: variable - name: dr_target7 - value_type: float - default_value: 28.75 - evaluate: "0.8625 * FRAMETIME_TARGET" - - - type: variable - name: dr_target8 - value_type: float - default_value: 29.75 - evaluate: "0.8625 * FRAMETIME_TARGET" - # DON'T PUT ANYTHING BETWEEN - END -MASTER_WRITE: - # Redirect Dynamic Resolution Timings to read always not from .text - - - type: asm_a64 - main_offset: 0x2EE9A90 - instructions: [ - [fmov, s0, s1] - ] - - - type: asm_a64 - main_offset: 0x2EE9AA8 - instructions: [ - [fcsel, s2, s2, s2, ne] - ] -# Redirect Dynamic Resolution Timings readings to MAIN+0x453B300 - - - type: asm_a64 - main_offset: 0x2EE9A38 - instructions: [ - [adrp, x11, $dr_target1] - ] - - - type: asm_a64 - main_offset: 0x2EE9A40 - instructions: [ - [adrp, x12, $dr_target2], - [ldr, s1, [x11, $dr_target1]], - [ldr, s2, [x12, $dr_target2]] - ] - - - type: asm_a64 - main_offset: 0x2EE9A50 - instructions: [ - [adrp, x13, $dr_target3], - [add, x13, x13, $dr_target3] - ] - - - type: asm_a64 - main_offset: 0x2EE9A7C - instructions: [ - [adrp, x9, $dr_target5], - [add, x9, x9, $dr_target5], - [adrp, x11, $dr_target7], - [add, x11, x11, $dr_target7] - ] -ALL_FPS: - # sys_MaxFPS - - - type: evaluate_write - address: [MAIN, 0x43E0B14] - value_type: int32 - value: FPS_LOCK_TARGET - # Renderer thread delay - - - type: evaluate_write - address: [MAIN, 0x444A0D8] - value_type: float - value: "0.66 / FPS_TARGET" - - - type: block - what: timing - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010058301BB98000/4779B3A56B655418.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010058301BB98000/4779B3A56B655418.yaml deleted file mode 100644 index 6d4bdfa..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010058301BB98000/4779B3A56B655418.yaml +++ /dev/null @@ -1,75 +0,0 @@ -# テイルズ オブ エクシリア リマスター 1.0.1 -# BID: 4779B3A56B655418 - -DECLARATIONS: - - - type: variable - name: patch_running - value_type: uint8 - default_value: 0 - - - type: code - name: applyCustomSpeed - instructions: [ - [adrp, x4, $patch_running], - [ldrb, w4, [x4, $patch_running]], - [cbnz, w4, :goto1], - [stp, s0, s1, [x8, 0x6C]], - :goto1, [ret] - ] -MASTER_WRITE: - # Block updating game speed - ## REF: 00 85 0d 2d - - - type: asm_a64 - main_offset: 0x244A5F4 - instructions: [ - [bl, _applyCustomSpeed()] - ] - - - type: asm_a64 - main_offset: 0x28EB8FC - instructions: [ - [bl, _applyCustomSpeed()] - ] - - - type: asm_a64 - main_offset: 0x2B26AA4 - instructions: [ - [bl, _applyCustomSpeed()] - ] -ALL_FPS: - # Game Speed - ## REF: Global_TypeInfo - - - type: evaluate_write - address: [MAIN, 0x82C50C0, 0xB8, 0x6C] - value_type: float - value: [FPS_TARGET, "60 / FPS_TARGET"] - # Just in case, dunno if they are used for anything, but all of them were set to target strictly 30 FPS - # UnityEngine.Time::maximumDeltaTime - - - type: write - address: [MAIN, 0x9FCFBF8, 0x100] - value_type: float - value: [0.066666666, 0.066666666] - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x9FCFBF8, 0x48] - value_type: float - value: "1 / FPS_TARGET" - # UnityEngine.Application::targetFrameRate - - - type: evaluate_write - address: [MAIN, 0x84E1EA8] - value_type: uint32 - value: FPS_TARGET - - - type: compare - compare_address: [VARIABLE, patch_running] - compare_type: "==" - compare_value: 0 - address: [VARIABLE, patch_running] - value: 1 - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010058301BB98000/CAEAFFC2CD152394.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010058301BB98000/CAEAFFC2CD152394.yaml deleted file mode 100644 index f05ad51..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010058301BB98000/CAEAFFC2CD152394.yaml +++ /dev/null @@ -1,74 +0,0 @@ -# テイルズ オブ エクシリア リマスター 1.0.2 -# BID: CAEAFFC2CD152394 - -DECLARATIONS: - - - type: variable - name: patch_running - value_type: uint8 - default_value: 0 - - - type: code - name: applyCustomSpeed - instructions: [ - [adrp, x4, $patch_running], - [ldrb, w4, [x4, $patch_running]], - [cbnz, w4, :goto1], - [stp, s0, s1, [x8, 0x6C]], - :goto1, [ret] - ] -MASTER_WRITE: - # Block updating game speed - ## REF: 00 85 0d 2d - - - type: asm_a64 - main_offset: 0x244EF94 - instructions: [ - [bl, _applyCustomSpeed()] - ] - - - type: asm_a64 - main_offset: 0x28F36BC - instructions: [ - [bl, _applyCustomSpeed()] - ] - - - type: asm_a64 - main_offset: 0x2B2E174 - instructions: [ - [bl, _applyCustomSpeed()] - ] -ALL_FPS: - # Game Speed - ## REF: Global_TypeInfo - - - type: evaluate_write - address: [MAIN, 0x82E1310, 0xB8, 0x6C] - value_type: float - value: [FPS_TARGET, "60 / FPS_TARGET"] - # Just in case, dunno if they are used for anything, but all of them were set to target strictly 30 FPS - # UnityEngine.Time::maximumDeltaTime - - - type: write - address: [MAIN, 0x9FEC278, 0x100] - value_type: float - value: [0.066666666, 0.066666666] - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x9FEC278, 0x48] - value_type: float - value: "1 / FPS_TARGET" - # UnityEngine.Application::targetFrameRate - - - type: evaluate_write - address: [MAIN, 0x84FE4E8] - value_type: uint32 - value: FPS_TARGET - - - type: compare - compare_address: [VARIABLE, patch_running] - compare_type: "==" - compare_value: 0 - address: [VARIABLE, patch_running] - value: 1 \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010058600E530000/BD5F1ED30FDBA245.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010058600E530000/BD5F1ED30FDBA245.yaml deleted file mode 100644 index f362bef..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010058600E530000/BD5F1ED30FDBA245.yaml +++ /dev/null @@ -1,36 +0,0 @@ -# Empire of Sin 1.10.0 -# BID: BD5F1ED30FDBA245 - -DECLARATIONS: - - - type: variable - name: dr_target_min - value_type: double - default_value: 28.5714282989502 - evaluate: "999.9996 / (FPS_TARGET + 5)" - - - type: variable - name: dr_target_max - value_type: double - default_value: 33.33333206176758 - evaluate: "0.9999996 * FRAMETIME_TARGET" -MASTER_WRITE: - # REF: RomeroGames.DynamicResolutionService::UpdateService() - - - type: asm_a64 - main_offset: 0x17B8A3C - instructions: [ - [nop], - [nop], - [adrp, x9, $dr_target_max], - [ldr, d0, [x9, $dr_target_max]] - ] - - - type: asm_a64 - main_offset: 0x17B8C00 - instructions: [ - [nop], - [nop], - [adrp, x8, $dr_target_min], - [ldr, d1, [x8, $dr_target_min]] - ] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010058C01F3EE000/301E4A1FB0BA1575.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010058C01F3EE000/301E4A1FB0BA1575.yaml deleted file mode 100644 index f1ea7e9..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010058C01F3EE000/301E4A1FB0BA1575.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Upin & Ipin Universe 1.0.2 -# BID: 301E4A1FB0BA1575 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x9302098, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x933D5C0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x831EEE8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010058C01F3EE000/A15393F630A9767F.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010058C01F3EE000/A15393F630A9767F.yaml deleted file mode 100644 index 788d73c..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010058C01F3EE000/A15393F630A9767F.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Upin & Ipin Universe 1.0.1 -# BID: A15393F630A9767F - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x986C098, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x98A8790, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x8886110, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010058F01DF8C000/1670D126B5E8EE66.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010058F01DF8C000/1670D126B5E8EE66.yaml deleted file mode 100644 index 525660f..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010058F01DF8C000/1670D126B5E8EE66.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Funko Fusion 3.3.0 -# BID: 1670D126B5E8EE66 - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x7C58A68, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x8C34078, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8C61F60, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010058F01DF8C000/4CD22960CFB56AB4.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010058F01DF8C000/4CD22960CFB56AB4.yaml deleted file mode 100644 index c33b4c9..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010058F01DF8C000/4CD22960CFB56AB4.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Funko Fusion 3.4.1 -# BID: 4CD22960CFB56AB4 - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x7C58A68, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x8C34078, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8C61F60, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010058F01DF8C000/BDB53001D5CAD0AE.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010058F01DF8C000/BDB53001D5CAD0AE.yaml deleted file mode 100644 index 5103f4a..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010058F01DF8C000/BDB53001D5CAD0AE.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Funko Fusion 2.6.2 -# BID: BDB53001D5CAD0AE - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x752BA68, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x8507078, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8534F60, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010058F01DF8C000/E6B427227FED8411.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010058F01DF8C000/E6B427227FED8411.yaml deleted file mode 100644 index d5f3bd6..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010058F01DF8C000/E6B427227FED8411.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Funko Fusion 2.3.0 -# BID: E6B427227FED8411 - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x74BEA68, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x849A078, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x84C7F60, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010058F01DF8C000/F0787926C4CFF8F1.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010058F01DF8C000/F0787926C4CFF8F1.yaml deleted file mode 100644 index 6d075ea..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010058F01DF8C000/F0787926C4CFF8F1.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Funko Fusion 2.4.0 -# BID: F0787926C4CFF8F1 - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x74FBA68, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x84D7078, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8504F60, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010058F01DF8C000/F5E599C889DF733A.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010058F01DF8C000/F5E599C889DF733A.yaml deleted file mode 100644 index 871a49e..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010058F01DF8C000/F5E599C889DF733A.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Funko Fusion 3.1.1 -# BID: F5E599C889DF733A - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x7541A68, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x851D078, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x854AF60, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100592005164000/83A6B710A3F3F4F9.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100592005164000/83A6B710A3F3F4F9.yaml deleted file mode 100644 index f87c9c6..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100592005164000/83A6B710A3F3F4F9.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# Unbox: Newbie's Adventure 1.0.3 -# BID: 83A6B710A3F3F4F9 - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x585F3A8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x4FBBEA0, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005A2014362000/F00EFE6846627B4A.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01005A2014362000/F00EFE6846627B4A.yaml deleted file mode 100644 index 98ce9a5..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005A2014362000/F00EFE6846627B4A.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# World's End Club 1.0.6 -# BID: F00EFE6846627B4A - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x6AC31C0, 0x48] - value_type: float - value: "1 / FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005AB01DAD0000/50F47EC19A33A73E.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01005AB01DAD0000/50F47EC19A33A73E.yaml deleted file mode 100644 index 4053e7b..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005AB01DAD0000/50F47EC19A33A73E.yaml +++ /dev/null @@ -1,33 +0,0 @@ -# Detective - Stella Porta Case 1.0.0 -# BID: 50F47EC19A33A73E -# Game has bug that makes it work 2x slower than in other platforms, so with this patch we are also fixing the issue across all FPS ranges - -ALL_FPS: - # Disable bUseFixedFrameRagte - - - type: write - address: [MAIN, 0x73379C8, 0x9DC] - address_unsafe: true - value_type: uint32 - value: 7 - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x7303CF0, 0] - value_type: float - value: ["0.9 * FRAMETIME_TARGET", "0.9 * FRAMETIME_TARGET"] - # r.VSync - - - type: write - address: [MAIN, 0x6B5FCB8, 0] - value_type: uint32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7338158, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005AE0209A8000/293D73083149473E.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01005AE0209A8000/293D73083149473E.yaml deleted file mode 100644 index f674b1f..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005AE0209A8000/293D73083149473E.yaml +++ /dev/null @@ -1,75 +0,0 @@ -# WARRIORS: Abyss 1.2.1 -# BID: 293D73083149473E - -unsafeCheck: true - -MASTER_WRITE: - # REF: 09 49 A8 52 21 01 27 1E 00 20 21 1E - # Use FPS Target instead of vsync value for Dynamic Resolution max delta - - - type: bytes - main_offset: 0x6BD270 - value_type: uint32 - value: - - 0xB0004521 # ADRP X1, 0xF62000 - - 0xBD44D821 # LDR S1, [X1, 0x4D8] - # Redirect DR Targets to MAIN+0x13F3F00 - - - type: bytes - main_offset: 0x6BD314 - value_type: uint32 - value: - - 0xD00069A9 # ADRP X9, 0x13F3000 - - 0xBD4F0121 # LDR S1, [X9, 0xF00] - - - type: bytes - main_offset: 0x6BD324 - value_type: uint32 - value: - - 0xD00069A9 # ADRP X9, 0x13F3000 - - 0xBD4F0521 # LDR S1, [X9, 0xF04] - # Default values - - - type: bytes - main_offset: 0x13F3F00 - value_type: float - value: [50, 40] -ALL_FPS: - # REF: 00 00 F0 42 78 00 00 00 00 00 F0 42 04 00 00 00 - # FPS Lock - - - type: evaluate_write - address: [MAIN, 0xF624E4] - value_type: uint32 - value: "120 / FPS_LOCK_TARGET" - # Prevent from setting it as 0, otherwise game crashes - - - type: evaluate_compare - compare_address: [MAIN, 0xF624E4] - compare_type: "==" - compare_value_type: uint32 - compare_value: 0 - address: [MAIN, 0xF624E4] - value_type: uint32 - value: 1 - # Others - - - type: evaluate_write - address: [MAIN, 0xF624D8] - value_type: float - value: "FPS_TARGET" - - - type: evaluate_write - address: [MAIN, 0xF624DC] - value_type: uint32 - value: "FPS_TARGET" - - - type: evaluate_write - address: [MAIN, 0xF624E0] - value_type: float - value: "FPS_TARGET" - - - type: evaluate_write - address: [MAIN, 0x13F3F00] - value_type: float - value: ["1.5 * FRAMETIME_TARGET", "1.2 * FRAMETIME_TARGET"] diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005AE0209A8000/2D22A87AE49C75AA.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01005AE0209A8000/2D22A87AE49C75AA.yaml deleted file mode 100644 index 0734e25..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005AE0209A8000/2D22A87AE49C75AA.yaml +++ /dev/null @@ -1,75 +0,0 @@ -# WARRIORS: Abyss 1.4.2 -# BID: 2D22A87AE49C75AA - -DECLARATIONS: - - - type: variable - name: dr_target1 - value_type: float - default_value: 50 - evaluate: "1.5 * FRAMETIME_TARGET" - - - type: variable - name: dr_target2 - value_type: float - default_value: 40 - evaluate: "1.2 * FRAMETIME_TARGET" -MASTER_WRITE: - # REF: 09 49 A8 52 21 01 27 1E 00 20 21 1E - # Use FPS Target instead of vsync value for Dynamic Resolution max delta - - - type: asm_a64 - main_offset: 0x6E3B50 - instructions: [ - [adrp, x1, 0x1021000], - [ldr, s1, [x1, 0xe10]] - ] - # Redirect DR Targets - - - type: asm_a64 - main_offset: 0x6E3BF4 - instructions: [ - [adrp, x9, $dr_target1], - [ldr, s1, [x9, $dr_target1]] - ] - - - type: asm_a64 - main_offset: 0x6E3C04 - instructions: [ - [adrp, x9, $dr_target2], - [ldr, s1, [x9, $dr_target2]] - ] -ALL_FPS: - # REF: 00 00 F0 42 78 00 00 00 00 00 F0 42 04 00 00 00 - # FPS Lock - - - type: evaluate_write - address: [MAIN, 0x1021E1C] - value_type: uint32 - value: "120 / FPS_LOCK_TARGET" - # Prevent from setting it as 0, otherwise game crashes - - - type: evaluate_compare - compare_address: [MAIN, 0x1021E1C] - compare_type: "==" - compare_value_type: uint32 - compare_value: 0 - address: [MAIN, 0x1021E1C] - value_type: uint32 - value: 1 - # Others - - - type: evaluate_write - address: [MAIN, 0x1021E10] - value_type: float - value: "FPS_TARGET" - - - type: evaluate_write - address: [MAIN, 0x1021E14] - value_type: uint32 - value: "FPS_TARGET" - - - type: evaluate_write - address: [MAIN, 0x1021E18] - value_type: float - value: "FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005AE0209A8000/36B692C0FA9F6F46.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01005AE0209A8000/36B692C0FA9F6F46.yaml deleted file mode 100644 index cfe1974..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005AE0209A8000/36B692C0FA9F6F46.yaml +++ /dev/null @@ -1,75 +0,0 @@ -# WARRIORS: Abyss 1.4.0 -# BID: 36B692C0FA9F6F46 - -DECLARATIONS: - - - type: variable - name: dr_target1 - value_type: float - default_value: 50 - evaluate: "1.5 * FRAMETIME_TARGET" - - - type: variable - name: dr_target2 - value_type: float - default_value: 40 - evaluate: "1.2 * FRAMETIME_TARGET" -MASTER_WRITE: - # REF: 09 49 A8 52 21 01 27 1E 00 20 21 1E - # Use FPS Target instead of vsync value for Dynamic Resolution max delta - - - type: asm_a64 - main_offset: 0x6E3AF0 - instructions: [ - [adrp, x1, 0x1021000], - [ldr, s1, [x1, 0xe10]] - ] - # Redirect DR Targets - - - type: asm_a64 - main_offset: 0x6E3B94 - instructions: [ - [adrp, x9, $dr_target1], - [ldr, s1, [x9, $dr_target1]] - ] - - - type: asm_a64 - main_offset: 0x6E3BA4 - instructions: [ - [adrp, x9, $dr_target2], - [ldr, s1, [x9, $dr_target2]] - ] -ALL_FPS: - # REF: 00 00 F0 42 78 00 00 00 00 00 F0 42 04 00 00 00 - # FPS Lock - - - type: evaluate_write - address: [MAIN, 0x1021E1C] - value_type: uint32 - value: "120 / FPS_LOCK_TARGET" - # Prevent from setting it as 0, otherwise game crashes - - - type: evaluate_compare - compare_address: [MAIN, 0x1021E1C] - compare_type: "==" - compare_value_type: uint32 - compare_value: 0 - address: [MAIN, 0x1021E1C] - value_type: uint32 - value: 1 - # Others - - - type: evaluate_write - address: [MAIN, 0x1021E10] - value_type: float - value: "FPS_TARGET" - - - type: evaluate_write - address: [MAIN, 0x1021E14] - value_type: uint32 - value: "FPS_TARGET" - - - type: evaluate_write - address: [MAIN, 0x1021E18] - value_type: float - value: "FPS_TARGET" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005AE0209A8000/50C9028B61A0BB7F.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01005AE0209A8000/50C9028B61A0BB7F.yaml deleted file mode 100644 index e56c66a..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005AE0209A8000/50C9028B61A0BB7F.yaml +++ /dev/null @@ -1,75 +0,0 @@ -# WARRIORS: Abyss 1.1.0 -# BID: 50C9028B61A0BB7F - -unsafeCheck: true - -MASTER_WRITE: - # REF: 09 49 A8 52 21 01 27 1E 00 20 21 1E - # Use FPS Target instead of vsync value for Dynamic Resolution max delta - - - type: bytes - main_offset: 0x6400D0 - value_type: uint32 - value: - - 0x90004441 # ADRP X1, 0xEC8000 - - 0xBD44C021 # LDR S1, [X1, 0x4C0] - # Redirect DR Targets to MAIN+0x1359F00 - - - type: bytes - main_offset: 0x640174 - value_type: uint32 - value: - - 0xB00068C9 # ADRP X9, 0x1359000 - - 0xBD4F0121 # LDR S1, [X9, 0xF00] - - - type: bytes - main_offset: 0x640184 - value_type: uint32 - value: - - 0xB00068C9 # ADRP X9, 0x1359000 - - 0xBD4F0521 # LDR S1, [X9, 0xF04] - # Default values - - - type: bytes - main_offset: 0x1359F00 - value_type: float - value: [50, 40] -ALL_FPS: - # REF: 00 00 F0 42 78 00 00 00 00 00 F0 42 04 00 00 00 - # FPS Lock - - - type: evaluate_write - address: [MAIN, 0xEC84CC] - value_type: uint32 - value: "120 / FPS_LOCK_TARGET" - # Prevent from setting it as 0, otherwise game crashes - - - type: evaluate_compare - compare_address: [MAIN, 0xEC84CC] - compare_type: "==" - compare_value_type: uint32 - compare_value: 0 - address: [MAIN, 0xEC84CC] - value_type: uint32 - value: 1 - # Others - - - type: evaluate_write - address: [MAIN, 0xEC84C0] - value_type: float - value: "FPS_TARGET" - - - type: evaluate_write - address: [MAIN, 0xEC84C4] - value_type: uint32 - value: "FPS_TARGET" - - - type: evaluate_write - address: [MAIN, 0xEC84C8] - value_type: float - value: "FPS_TARGET" - - - type: evaluate_write - address: [MAIN, 0x1359F00] - value_type: float - value: ["1.5 * FRAMETIME_TARGET", "1.2 * FRAMETIME_TARGET"] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005AE0209A8000/71C5F3CB333F1542.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01005AE0209A8000/71C5F3CB333F1542.yaml deleted file mode 100644 index 54202bb..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005AE0209A8000/71C5F3CB333F1542.yaml +++ /dev/null @@ -1,75 +0,0 @@ -# WARRIORS: Abyss 1.3.0 -# BID: 71C5F3CB333F1542 - -unsafeCheck: true - -MASTER_WRITE: - # REF: 09 49 A8 52 21 01 27 1E 00 20 21 1E - # Use FPS Target instead of vsync value for Dynamic Resolution max delta - - - type: bytes - main_offset: 0x6D24D0 - value_type: uint32 - value: - - 0xB0004841 # ADRP X1, 0xFDB000 - - 0xBD4E0021 # LDR S1, [X1, 0xE00] - # Redirect DR Targets to MAIN+0x1477F00 - - - type: bytes - main_offset: 0x6D2574 - value_type: uint32 - value: - - 0xB0006D29 # ADRP X9, 0x1477000 - - 0xBD4F0121 # LDR S1, [X9, 0xF00] - - - type: bytes - main_offset: 0x6D2584 - value_type: uint32 - value: - - 0xB0006D29 # ADRP X9, 0x1477000 - - 0xBD4F0521 # LDR S1, [X9, 0xF04] - # Default values - - - type: bytes - main_offset: 0x1477F00 - value_type: float - value: [50, 40] -ALL_FPS: - # REF: 00 00 F0 42 78 00 00 00 00 00 F0 42 04 00 00 00 - # FPS Lock - - - type: evaluate_write - address: [MAIN, 0xFDBE0C] - value_type: uint32 - value: "120 / FPS_LOCK_TARGET" - # Prevent from setting it as 0, otherwise game crashes - - - type: evaluate_compare - compare_address: [MAIN, 0xFDBE0C] - compare_type: "==" - compare_value_type: uint32 - compare_value: 0 - address: [MAIN, 0xFDBE0C] - value_type: uint32 - value: 1 - # Others - - - type: evaluate_write - address: [MAIN, 0xFDBE00] - value_type: float - value: "FPS_TARGET" - - - type: evaluate_write - address: [MAIN, 0xFDBE04] - value_type: uint32 - value: "FPS_TARGET" - - - type: evaluate_write - address: [MAIN, 0xFDBE08] - value_type: float - value: "FPS_TARGET" - - - type: evaluate_write - address: [MAIN, 0x1477F00] - value_type: float - value: ["1.5 * FRAMETIME_TARGET", "1.2 * FRAMETIME_TARGET"] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005AE0209A8000/A9DEA3043D6E0060.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01005AE0209A8000/A9DEA3043D6E0060.yaml deleted file mode 100644 index 14187b9..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005AE0209A8000/A9DEA3043D6E0060.yaml +++ /dev/null @@ -1,75 +0,0 @@ -# WARRIORS: Abyss 1.5.0 -# BID: A9DEA3043D6E0060 - -DECLARATIONS: - - - type: variable - name: dr_target1 - value_type: float - default_value: 50 - evaluate: "1.5 * FRAMETIME_TARGET" - - - type: variable - name: dr_target2 - value_type: float - default_value: 40 - evaluate: "1.2 * FRAMETIME_TARGET" -MASTER_WRITE: - # REF: 09 49 A8 52 21 01 27 1E 00 20 21 1E - # Use FPS Target instead of vsync value for Dynamic Resolution max delta - - - type: asm_a64 - main_offset: 0x8B69C0 - instructions: [ - [adrp, x1, 0x11F3000], - [ldr, s1, [x1, 0xE10]] - ] - # Redirect DR Targets - - - type: asm_a64 - main_offset: 0x8B6A64 - instructions: [ - [adrp, x9, $dr_target1], - [ldr, s1, [x9, $dr_target1]] - ] - - - type: asm_a64 - main_offset: 0x8B6A74 - instructions: [ - [adrp, x9, $dr_target2], - [ldr, s1, [x9, $dr_target2]] - ] -ALL_FPS: - # REF: 00 00 F0 42 78 00 00 00 00 00 F0 42 04 00 00 00 - # FPS Lock - - - type: evaluate_write - address: [MAIN, 0x11F3E1C] - value_type: uint32 - value: "120 / FPS_LOCK_TARGET" - # Prevent from setting it as 0, otherwise game crashes - - - type: evaluate_compare - compare_address: [MAIN, 0x11F3E1C] - compare_type: "==" - compare_value_type: uint32 - compare_value: 0 - address: [MAIN, 0x11F3E1C] - value_type: uint32 - value: 1 - # Others - - - type: evaluate_write - address: [MAIN, 0x11F3E10] - value_type: float - value: "FPS_TARGET" - - - type: evaluate_write - address: [MAIN, 0x11F3E14] - value_type: uint32 - value: "FPS_TARGET" - - - type: evaluate_write - address: [MAIN, 0x11F3E18] - value_type: float - value: "FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005BD010872000/496A2F5A9CE4FBEB.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01005BD010872000/496A2F5A9CE4FBEB.yaml deleted file mode 100644 index b5c1930..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005BD010872000/496A2F5A9CE4FBEB.yaml +++ /dev/null @@ -1,24 +0,0 @@ -# 女神異聞錄5 亂戰:魅影攻手 1.0.1 -# BID: 496A2F5A9CE4FBEB - -unsafeCheck: true - -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x1D11158] - value_type: int32 - value: [FPS_LOCK_TARGET, VSYNC_TARGET] - - - type: evaluate_write - address: [MAIN, 0x1D24BE8] - value_type: float - value: FPS_TARGET - - - type: evaluate_write - address: [MAIN, 0x2A848D0] - value_type: int32 - value: "VSYNC_TARGET - 1" - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005C7015D30000/110D8FB47B55EA19.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01005C7015D30000/110D8FB47B55EA19.yaml deleted file mode 100644 index 237af71..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005C7015D30000/110D8FB47B55EA19.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Tales of Kenzera: TAU 1.4.0 -# BID: 110D8FB47B55EA19 - -unsafeCheck: true - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6914E78, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6117D18, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005C7015D30000/9E7FB72540D748BA.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01005C7015D30000/9E7FB72540D748BA.yaml deleted file mode 100644 index 003e88c..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005C7015D30000/9E7FB72540D748BA.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Tales of Kenzera: TAU 1.5.0 -# BID: 9E7FB72540D748BA - -unsafeCheck: true - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6917E78, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x611ADC8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005D10128D2000/1A876E8881CEFBE3.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01005D10128D2000/1A876E8881CEFBE3.yaml deleted file mode 100644 index 16247ee..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005D10128D2000/1A876E8881CEFBE3.yaml +++ /dev/null @@ -1,26 +0,0 @@ -# 碧藍航線 Crosswave 1.0.1 -# BID: 1A876E8881CEFBE3 - -ALL_FPS: - # Disable bUseFixedFrameRate and bSmoothFrameRate - - - type: write - address: [MAIN, 0x6BE5318, 0x778] - address_unsafe: true - value_type: uint32 - value: 7 - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6BE5DE8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6394958, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005D2016934000/090A100AA49CE00F.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01005D2016934000/090A100AA49CE00F.yaml deleted file mode 100644 index a285896..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005D2016934000/090A100AA49CE00F.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Ghostbusters: Spirits Unleashed Ecto Edition 1.10.0 -# BID: 090A100AA49CE00F - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0xBBFBF70, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xBC21B48, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0xB42B9B8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005D2016934000/49F6F257348A42A1.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01005D2016934000/49F6F257348A42A1.yaml deleted file mode 100644 index a870258..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005D2016934000/49F6F257348A42A1.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Ghostbusters: Spirits Unleashed Ecto Edition 1.11.0 -# BID: 49F6F257348A42A1 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0xBBFBF70, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xBC21B48, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0xB42B9B8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005D2016934000/4D6E50FF58BF7486.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01005D2016934000/4D6E50FF58BF7486.yaml deleted file mode 100644 index 978c602..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005D2016934000/4D6E50FF58BF7486.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Ghostbusters: Spirits Unleashed Ecto Edition 1.9.0 -# BID: 4D6E50FF58BF7486 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0xBBFAF70, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xBC20B48, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0xB42A9B8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005D2016934000/579CCC60D8E3DAF1.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01005D2016934000/579CCC60D8E3DAF1.yaml deleted file mode 100644 index b537408..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005D2016934000/579CCC60D8E3DAF1.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Ghostbusters: Spirits Unleashed Ecto Edition 1.8.0 -# BID: 579CCC60D8E3DAF1 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0xBBF7F70, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xBC1DB48, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0xB4279B8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005DF00DC26000/029C2837B0EEE8A9.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01005DF00DC26000/029C2837B0EEE8A9.yaml deleted file mode 100644 index 86ce5c3..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005DF00DC26000/029C2837B0EEE8A9.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# SWORD ART ONLINE: FATAL BULLET Complete Edition 1.2.0 -# BID: 029C2837B0EEE8A9 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to one decimal - - - type: evaluate_write - address: [MAIN, 0x7D78510, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7D9D178, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005E101122E000/44AA379DE2A71A9F.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01005E101122E000/44AA379DE2A71A9F.yaml deleted file mode 100644 index 902be2d..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005E101122E000/44AA379DE2A71A9F.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Spirit of the North 1.3.1 -# BID: 44AA379DE2A71A9F - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x542D038, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # r.VSync - - - type: write - address: [MAIN, 0x4CF1AB8, 0] - value_type: uint32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x5459A90, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005EA01C0FC000/3AEBA262CC1D26D3.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01005EA01C0FC000/3AEBA262CC1D26D3.yaml deleted file mode 100644 index afaa5e2..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005EA01C0FC000/3AEBA262CC1D26D3.yaml +++ /dev/null @@ -1,28 +0,0 @@ -# SONIC X SHADOW GENERATIONS Launcher / SHADOW GENERATIONS 1.0.1 -# BID: 3AEBA262CC1D26D3 - -# FPS Lock is used to determine dynamic resolution timing too, but it doesn't work properly when setting higher FPS. -# DR Timing Fix is applied for anything above 30 FPS as it seems to fix the most notorious issue - stucking at 360p. -# Turn off Window Sync for better performance - -unsafeCheck: true - -ALL_FPS: - # Internal FPS Lock - # REF: C8 AA 8A 52 A8 30 A8 72 first ADRP above it - - - type: evaluate_write - address: [MAIN, 0x3E4D7B8, 0x14] - value_type: float - value: FPS_TARGET - # DR Timing fix, applied only for handheld - # Ref: 00 01 3F D6 B4 02 00 F9 E0 03 13 AA 01 3E 80 52 first ADRP above it - - - type: evaluate_compare - compare_address: [MAIN, 0x3E4D7E0, 0x18, 0x260, 0x24] - compare_value_type: float - compare_type: "==" - compare_value: -2.8 - address: [MAIN, 0x3E4D7E0, 0x18, 0x260, 0x24] - value_type: float - value: ["-1.4 * VSYNC_TARGET", "-0.6 * VSYNC_TARGET", "0.025 * VSYNC_TARGET", "0.04 * VSYNC_TARGET", "0.05 * VSYNC_TARGET", "0.15 * VSYNC_TARGET"] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005EA01C0FC000/C8CDBFD621A6B29B.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01005EA01C0FC000/C8CDBFD621A6B29B.yaml deleted file mode 100644 index dcb8d83..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005EA01C0FC000/C8CDBFD621A6B29B.yaml +++ /dev/null @@ -1,28 +0,0 @@ -# SONIC X SHADOW GENERATIONS Launcher / SHADOW GENERATIONS 1.1.0 -# BID: C8CDBFD621A6B29B - -# FPS Lock is used to determine dynamic resolution timing too, but it doesn't work properly when setting higher FPS. -# DR Timing Fix is applied for anything above 30 FPS as it seems to fix the most notorious issue - stucking at 360p. -# Turn off Window Sync for better performance - -unsafeCheck: true - -ALL_FPS: - # Internal FPS Lock - # REF: C8 AA 8A 52 A8 30 A8 72 first ADRP above it - - - type: evaluate_write - address: [MAIN, 0x3EAB7B8, 0x14] - value_type: float - value: FPS_TARGET - # DR Timing fix, applied only for handheld - # Ref: 00 01 3F D6 B4 02 00 F9 E0 03 13 AA 01 3E 80 52 first ADRP above it - - - type: evaluate_compare - compare_address: [MAIN, 0x3EAB7E0, 0x18, 0x260, 0x24] - compare_value_type: float - compare_type: "==" - compare_value: -2.8 - address: [MAIN, 0x3EAB7E0, 0x18, 0x260, 0x24] - value_type: float - value: ["-1.4 * VSYNC_TARGET", "-0.6 * VSYNC_TARGET", "0.025 * VSYNC_TARGET", "0.04 * VSYNC_TARGET", "0.05 * VSYNC_TARGET", "0.15 * VSYNC_TARGET"] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005EA01C0FC001/D91C67509C6AED8D.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01005EA01C0FC001/D91C67509C6AED8D.yaml deleted file mode 100644 index 3f24402..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005EA01C0FC001/D91C67509C6AED8D.yaml +++ /dev/null @@ -1,20 +0,0 @@ -# SONIC GENERATIONS 1.0.1/1.1.0 -# BID: D91C67509C6AED8D - -MASTER_WRITE: - # NOP internal FPS Lock - # REF: 00 00 23 1E E1 02 27 1E 00 08 21 1E - - - type: asm_a64 - main_offset: 0x7E4AA4 - instructions: [ - [nop] - ] - # Set window present interval to 2 to get default 30 FPS lock - # REF: 34 14 9F 1A - - - type: asm_a64 - main_offset: 0x22FCB88 - instructions: [ - [mov, w20, 2] - ] diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005FD017E60000/3E961285846C72A5.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01005FD017E60000/3E961285846C72A5.yaml deleted file mode 100644 index 70a14e4..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005FD017E60000/3E961285846C72A5.yaml +++ /dev/null @@ -1,37 +0,0 @@ -# Warhammer 40,000: Boltgun 1.0.0.7 -# BID: 3E961285846C72A5 - -ALL_FPS: - # Disable bUseFixedFrameRate to unlock framerate - - - type: write - address: [MAIN, 0x63A69F8, 0x7A4] - address_unsafe: true - value_type: uint32 - # Default is 0x47, bUseFixedFrameRate |= 0x40 - # By writing 7 we are making sure that other flags are maintained: - # bAllowMultiThreadedAnimationUpdate |= 4 - # bOptimizeAnimBlueprintMemberVariableAccess |= 2 - # bCanBlueprintsTickByDefault |= 1 - value: 7 - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x6379638, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x63A7318, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x5BA9B78, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005FD017E60000/7C992B6A003C599F.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01005FD017E60000/7C992B6A003C599F.yaml deleted file mode 100644 index 0f1a796..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005FD017E60000/7C992B6A003C599F.yaml +++ /dev/null @@ -1,37 +0,0 @@ -# Warhammer 40,000: Boltgun 1.0.0.3 -# BID: 7C992B6A003C599F - -ALL_FPS: - # Disable bUseFixedFrameRate to unlock framerate - - - type: write - address: [MAIN, 0x710C9C8, 0x7A4] - address_unsafe: true - value_type: uint32 - # Default is 0x47, bUseFixedFrameRate |= 0x40 - # By writing 7 we are making sure that other flags are maintained: - # bAllowMultiThreadedAnimationUpdate |= 4 - # bOptimizeAnimBlueprintMemberVariableAccess |= 2 - # bCanBlueprintsTickByDefault |= 1 - value: 7 - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x70DF628, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x710D2E8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6910358, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005FD017E60000/B8630C6EE3A22FE8.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01005FD017E60000/B8630C6EE3A22FE8.yaml deleted file mode 100644 index dfa2f88..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01005FD017E60000/B8630C6EE3A22FE8.yaml +++ /dev/null @@ -1,31 +0,0 @@ -# Warhammer 40,000: Boltgun 1.0.0.6 -# BID: B8630C6EE3A22FE8 - -ALL_FPS: - # Disable bUseFixedFrameRate to unlock framerate - - - type: write - address: [MAIN, 0x63A69F8, 0x7A4] - address_unsafe: true - value_type: uint32 - # Default is 0x47, bUseFixedFrameRate |= 0x40 - # By writing 7 we are making sure that other flags are maintained: - # bAllowMultiThreadedAnimationUpdate |= 4 - # bOptimizeAnimBlueprintMemberVariableAccess |= 2 - # bCanBlueprintsTickByDefault |= 1 - value: 7 - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x6379638, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x63A7318, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010060700AC50000/E853C44FDF18B88F.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010060700AC50000/E853C44FDF18B88F.yaml deleted file mode 100644 index 6080c93..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010060700AC50000/E853C44FDF18B88F.yaml +++ /dev/null @@ -1,33 +0,0 @@ -# Marvel Ultimate Alliance 3: The Black Order 4.0.1 -# BID: E853C44FDF18B88F -# Credits to Hazerou for finding offsets for FPS lock and speed - -DECLARATIONS: - - - type: variable - name: dr_target - value_type: float - default_value: 0.0166666666 - evaluate: "0.5 / FPS_TARGET" -MASTER_WRITE: -# Redirect reading DR GPU time factor to MAIN + 0x4FC0E00 - - - type: asm_a64 - main_offset: 0x470E80 - instructions: [ - [adrp, x9, $dr_target], - [ldr, s2, [x9, $dr_target]] - ] -ALL_FPS: - # Internal Vsync - - - type: evaluate_write - address: [MAIN, 0x45A7410] - value_type: int32 - value: [VSYNC_TARGET, VSYNC_TARGET] - # Game Speed = FPS - - - type: evaluate_write - address: [MAIN, 0x45A71F0] - value_type: float - value: FPS_TARGET diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006080117C2000/DFC7E8979528DE44.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01006080117C2000/DFC7E8979528DE44.yaml deleted file mode 100644 index e4e9140..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006080117C2000/DFC7E8979528DE44.yaml +++ /dev/null @@ -1,32 +0,0 @@ -# Made in Abyss: Binary Star Falling into Darkness 1.0.3 -# BID: DFC7E8979528DE44 - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x657D2C8, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x6D2E330, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # r.DynamicRes.TargetedGPUHeadRoomPercentage - # Because game is using 5.0 while default is 10.0 and with their value reaching target FPS above 30 is hard - - - type: write - address: [MAIN, 0x6D2E348, 0] - value_type: float - value: [10.0, 10.0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6D58E68, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100626011656000/761CD556AB357C87.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100626011656000/761CD556AB357C87.yaml deleted file mode 100644 index 756b3be..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100626011656000/761CD556AB357C87.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# The Outer Worlds 1.0.5 -# BID: 761CD556AB357C87 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x7A4AE48, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7A70080, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100628004BCE000/81DA4F9E1E961CA6.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100628004BCE000/81DA4F9E1E961CA6.yaml deleted file mode 100644 index 20091d9..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100628004BCE000/81DA4F9E1E961CA6.yaml +++ /dev/null @@ -1,20 +0,0 @@ -# Nights Of Azure 2: Bride of the New Moon 1.0.1 -# BID: 81DA4F9E1E961CA6 - -DECLARATIONS: - - - type: code - name: tripleBuffer - instructions: [ - [mov, w22, 3], - [str, w22, [x1, 8]], - [b, 0xa305c0] - ] -MASTER_WRITE: - # Remove double buffer - - - type: asm_a64 - main_offset: 0x7E4ED8 - instructions: [ - [bl, _tripleBuffer()] - ] diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010063B012DC6000/68FED4970010ACF3.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010063B012DC6000/68FED4970010ACF3.yaml deleted file mode 100644 index 4a302eb..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010063B012DC6000/68FED4970010ACF3.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# SHIN MEGAMI TENSEI V `The Americas` 1.0.2 -# BID: 68FED4970010ACF3 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x75F81D0, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7621D70, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010064101356C000/652D04C4BD51AE83.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010064101356C000/652D04C4BD51AE83.yaml deleted file mode 100644 index 8cb1c3d..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010064101356C000/652D04C4BD51AE83.yaml +++ /dev/null @@ -1,54 +0,0 @@ -# 英雄伝説 閃の軌跡Ⅳ 1.0.2 -# BID: 652D04C4BD51AE83 -# Button polling is 2x more sensitive to holding any button - -DECLARATIONS: - - - type: variable - name: fps_lock - value_type: uint32 - default_value: 33333333 - evaluate: "FRAMETIME_TARGET * 930000" - - - type: variable - name: frame_time - value_type: float - default_value: 0.0333333333 - - - type: code - name: dynamicSpeed - instructions: [ - [str, x0, [x19, 8]], - [fcvt, s4, d0], - [adrp, x8, $frame_time], - [str, s4, [x8, $frame_time]], - [ret] - ] -MASTER_WRITE: - # Move loading FPS lock time - ## REF: MOV with 0x1FCA055 - - - type: asm_a64 - main_offset: 0x60A998 - instructions: [ - [adrp, x9, $fps_lock], - [ldr, w9, [x9, $fps_lock]] - ] - # Write game's loop time as float - ## REF: 1F 01 09 EB 00 08 61 1E, replace STR X0, [X19,#8] below it - - - type: asm_a64 - main_offset: 0x60A9E8 - instructions: [ - [bl, _dynamicSpeed()] - ] - # Read lowest timing float factor - ## REF: E8 03 1F 2A 00 20 22 1E 60 5E 1A BD, ADRP + FMINM + LDR above it - - - type: asm_a64 - main_offset: 0x65518 - instructions: [ - [adrp, x8, $frame_time], - [fminnm, s0, s0, s2], - [ldr, s2, [x8, $frame_time]] - ] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010064400B138000/EB8A679B5DDD0060.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010064400B138000/EB8A679B5DDD0060.yaml deleted file mode 100644 index 52c02ef..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010064400B138000/EB8A679B5DDD0060.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# V-Rally 4 1.2.0 -# BID: EB8A679B5DDD0060 - -ALL_FPS: - # OptimalFrameDuration_ms = (1000/FPS) - (0.07 * (1000/30) - - - type: evaluate_write - address: [MAIN, 0x20A0E44] - value_type: float - value: "FRAMETIME_TARGET - (0.07 * (1000/30))" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010064C01A9BA000/1BA8D8FD3897F22F.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010064C01A9BA000/1BA8D8FD3897F22F.yaml deleted file mode 100644 index 39a47df..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010064C01A9BA000/1BA8D8FD3897F22F.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# Tamagotchi Plaza 1.0.4 -# BID: 1BA8D8FD3897F22F - -ALL_FPS: - # UnityEngine.Rendering.OnDemandRendering_TypeInfo - - - type: write - address: [MAIN, 0x683EB68, 0xB8, 0] - value_type: int32 - value: -1 \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010064C01A9BA000/E73AB32BD1B16098.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010064C01A9BA000/E73AB32BD1B16098.yaml deleted file mode 100644 index 9a2d163..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010064C01A9BA000/E73AB32BD1B16098.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# Tamagotchi Plaza 1.0.6 -# BID: E73AB32BD1B16098 - -ALL_FPS: - # UnityEngine.Rendering.OnDemandRendering_TypeInfo - - - type: write - address: [MAIN, 0x68B81F8, 0xB8, 0] - value_type: int32 - value: -1 \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010064C01A9BA000/FB852EECDE7A745D.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010064C01A9BA000/FB852EECDE7A745D.yaml deleted file mode 100644 index a42a34b..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010064C01A9BA000/FB852EECDE7A745D.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# Tamagotchi Plaza 1.0.5 -# BID: FB852EECDE7A745D - -ALL_FPS: - # UnityEngine.Rendering.OnDemandRendering_TypeInfo - - - type: write - address: [MAIN, 0x68B7188, 0xB8, 0] - value_type: int32 - value: -1 \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100650018FE0000/7A450848CFDEC18E.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100650018FE0000/7A450848CFDEC18E.yaml deleted file mode 100644 index 4b63348..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100650018FE0000/7A450848CFDEC18E.yaml +++ /dev/null @@ -1,54 +0,0 @@ -# Kingdom Come: Deliverance - Royal Edition 1.9.6H -# BID: 7A450848CFDEC18E -# Some prerendered cutscenes are still pushed at 30 FPS - -MASTER_WRITE: - # Block updating DR timings, REF: 00 01 27 1E 48 40 A8 52 - - - type: asm_a64 - main_offset: 0x1CA806C - instructions: [ - [nop] - ] - - - type: asm_a64 - main_offset: 0x1CA8074 - instructions: [ - [nop] - ] - - - type: asm_a64 - main_offset: 0x1CA8094 - instructions: [ - [nop], - [nop] - ] - # Write default DR timings - - - type: bytes - main_offset: 0x56FF9C8 - value_type: float - value: [32.5, 30.5, 31.5, 28.5, 33.5] -ALL_FPS: - # sys_MaxFPS - - - type: evaluate_write - address: [MAIN, 0x56FD1C8] - value_type: int32 - value: FPS_LOCK_TARGET - # Renderer thread delay - - - type: evaluate_write - address: [MAIN, 0x5704028] - value_type: float - value: "0.66 / FPS_TARGET" - # DR timings - - - type: evaluate_write - address: [MAIN, 0x56FF9C8] - value_type: float - value: ["FRAMETIME_TARGET * 0.975", "FRAMETIME_TARGET * 0.915", "FRAMETIME_TARGET * 0.945", "FRAMETIME_TARGET * 0.855", "FRAMETIME_TARGET * 1.005"] - - - type: block - what: timing - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100651014DBA000/789C2939A757C0CD.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100651014DBA000/789C2939A757C0CD.yaml deleted file mode 100644 index 861ec96..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100651014DBA000/789C2939A757C0CD.yaml +++ /dev/null @@ -1,43 +0,0 @@ -# Sherlock Holmes: Crimes and Punishments 1.0.0 -# BID: 789C2939A757C0CD - -DECLARATIONS: - - - type: variable - name: dr_target1 - value_type: float - default_value: 38 - evaluate: "1.14 * FRAMETIME_TARGET" - - - type: variable - name: dr_target2 - value_type: float - default_value: 32 - evaluate: "0.96 * FRAMETIME_TARGET" -MASTER_WRITE: - # Redirect Dynamic Resolution timings to MAIN + 0x23774F00 - # 38.0 - - - type: asm_a64 - main_offset: 0xF57294 - instructions: [ - [adrp, x9, $dr_target1], - [fmul, s0, s0, s1], - [ldr, s1, [x9, $dr_target1]] - ] - # 32.0 - - - type: asm_a64 - main_offset: 0xF572B8 - instructions: [ - [adrp, x9, $dr_target2], - [ldr, s1, [x9, $dr_target2]] - ] -ALL_FPS: - # UGameEngine::GetMaxTickRate() - # Bool Lock FPS - - - type: write - address: [MAIN, 0x2E61108] - value_type: uint8 - value: 0 diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010065A014024000/6FB56071CCB321B6.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010065A014024000/6FB56071CCB321B6.yaml deleted file mode 100644 index b8423f3..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010065A014024000/6FB56071CCB321B6.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Grand Theft Auto: San Andreas - Definitive Edition 1.0.7 -# BID: 6FB56071CCB321B6 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 1 decimal - - - type: evaluate_write - address: [MAIN, 0x7952298, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7976FE0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010065A014024000/B898981D361D0201.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010065A014024000/B898981D361D0201.yaml deleted file mode 100644 index 92b4c3c..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010065A014024000/B898981D361D0201.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Grand Theft Auto: San Andreas - Definitive Edition 1.0.8 -# BID: B898981D361D0201 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (Default is 36.5 ms) - - - type: evaluate_write - address: [MAIN, 0x79B5988, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x79DA640, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x7228260, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010065A01CFB6000/0BB69E112916D851.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010065A01CFB6000/0BB69E112916D851.yaml deleted file mode 100644 index 7c2d9ba..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010065A01CFB6000/0BB69E112916D851.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# パックマンワールド2 リ・パック 1.0.4 -# BID: 0BB69E112916D851 - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x87DF838, 0x58] - value_type: uint32 - value: "2352000 * FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010065A01CFB6000/B70D6561B718C8E0.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010065A01CFB6000/B70D6561B718C8E0.yaml deleted file mode 100644 index 74d6f9f..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010065A01CFB6000/B70D6561B718C8E0.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# パックマンワールド2 リ・パック 1.0.3 -# BID: B70D6561B718C8E0 - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x87DE838, 0x58] - value_type: uint32 - value: "2352000 * FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010065D012FA0000/C403B87FCDAD7604.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010065D012FA0000/C403B87FCDAD7604.yaml deleted file mode 100644 index daa322e..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010065D012FA0000/C403B87FCDAD7604.yaml +++ /dev/null @@ -1,26 +0,0 @@ -# Azur Lane: Crosswave 1.0.1 -# BID: C403B87FCDAD7604 - -ALL_FPS: - # Disable bUseFixedFrameRate and bSmoothFrameRate - - - type: write - address: [MAIN, 0x6BE6318, 0x778] - address_unsafe: true - value_type: uint32 - value: 7 - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6BE6DE8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6395A88, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010066101A55A000/338C569A607B7C30.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010066101A55A000/338C569A607B7C30.yaml deleted file mode 100644 index 1fea676..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010066101A55A000/338C569A607B7C30.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# Little Nightmares III 1.0.2 -# BID: 338C569A607B7C30 - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7CACDF8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x74B8210, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010066101A55A000/911284C45A26DD34.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010066101A55A000/911284C45A26DD34.yaml deleted file mode 100644 index 581a2fe..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010066101A55A000/911284C45A26DD34.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# Little Nightmares III 1.0.4 -# BID: 911284C45A26DD34 - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7CB0E48, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x74BC210, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010066101A55A000/F3FFA17B5E56809F.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010066101A55A000/F3FFA17B5E56809F.yaml deleted file mode 100644 index 65df983..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010066101A55A000/F3FFA17B5E56809F.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# Little Nightmares III 1.0.3 -# BID: F3FFA17B5E56809F - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7CADE48, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x74B9210, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100664016D5C000/D45B9332B5742A70.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100664016D5C000/D45B9332B5742A70.yaml deleted file mode 100644 index d14c880..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100664016D5C000/D45B9332B5742A70.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Redout 2 1.0.6 -# BID: D45B9332B5742A70 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget ((1000/FPS) * 0.969) - - - type: evaluate_write - address: [MAIN, 0x8549648, 0] - value_type: float - value: ["0.969 * FRAMETIME_TARGET", "0.969 * FRAMETIME_TARGET"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8577218, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100664016D5C000/E47783ECB944D857.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100664016D5C000/E47783ECB944D857.yaml deleted file mode 100644 index fb8fe05..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100664016D5C000/E47783ECB944D857.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Redout 2 1.0.7 -# BID: E47783ECB944D857 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget ((1000/FPS) * 0.969) - - - type: evaluate_write - address: [MAIN, 0x8556648, 0] - value_type: float - value: ["0.969 * FRAMETIME_TARGET", "0.969 * FRAMETIME_TARGET"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8584218, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x7D89648, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100668022DF4000/DCBCB511177F87F6.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100668022DF4000/DCBCB511177F87F6.yaml deleted file mode 100644 index 419a0d4..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100668022DF4000/DCBCB511177F87F6.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# Nicktoons & The Dice of Destiny 1.3.0 -# BID: DCBCB511177F87F6 - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7EDF380, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6EC0EE8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010066C024AA8000/10F5B0B223490693.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010066C024AA8000/10F5B0B223490693.yaml deleted file mode 100644 index 1fedfb8..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010066C024AA8000/10F5B0B223490693.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# Becastled 1.4 -# BID: 10F5B0B223490693 - -ALL_FPS: - # DynamicResolution_TypeInfo - - - type: evaluate_write - address: [MAIN, 0xA09DB40, 0xB8, 0, 0x58] - value_type: float - value: "0.96 * FRAMETIME_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010066C024AA8000/FBDD7ABB7B1DB6A9.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010066C024AA8000/FBDD7ABB7B1DB6A9.yaml deleted file mode 100644 index 7fb122a..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010066C024AA8000/FBDD7ABB7B1DB6A9.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# Becastled 1.3 -# BID: FBDD7ABB7B1DB6A9 - -ALL_FPS: - # DynamicResolution_TypeInfo - - - type: evaluate_write - address: [MAIN, 0xA04B708, 0xB8, 0, 0x58] - value_type: float - value: "0.96 * FRAMETIME_TARGET" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010066F01A0E0000/153D5A2ABB9C0BA6.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010066F01A0E0000/153D5A2ABB9C0BA6.yaml deleted file mode 100644 index 57c2728..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010066F01A0E0000/153D5A2ABB9C0BA6.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Cassette Beasts 1.7.2 -# BID: 153D5A2ABB9C0BA6 - -unsafeCheck: true - -ALL_FPS: - # physics/common/physics_fps - - - type: evaluate_write - address: [MAIN, 0x30AAAE0, 0x24] - value_type: int32 - value: FPS_TARGET - # debug/settings/fps/force_fps - - - type: evaluate_write - address: [MAIN, 0x30AAAE0, 0x30] - value_type: int32 - value: FPS_LOCK_TARGET - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010066F01A0E0000/2C58E765387F9DDA.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010066F01A0E0000/2C58E765387F9DDA.yaml deleted file mode 100644 index 895d4fb..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010066F01A0E0000/2C58E765387F9DDA.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Cassette Beasts 1.6.4 -# BID: 2C58E765387F9DDA - -unsafeCheck: true - -ALL_FPS: - # physics/common/physics_fps - - - type: evaluate_write - address: [MAIN, 0x33E4B78, 0x24] - value_type: int32 - value: FPS_LOCK_TARGET - # debug/settings/fps/force_fps - - - type: evaluate_write - address: [MAIN, 0x33E4B78, 0x30] - value_type: int32 - value: FPS_LOCK_TARGET - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010066F01A0E0000/58C1B2EA8257D5F1.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010066F01A0E0000/58C1B2EA8257D5F1.yaml deleted file mode 100644 index 548030f..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010066F01A0E0000/58C1B2EA8257D5F1.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Cassette Beasts 1.6.3 -# BID: 58C1B2EA8257D5F1 - -unsafeCheck: true - -ALL_FPS: - # physics/common/physics_fps - - - type: evaluate_write - address: [MAIN, 0x33E4B78, 0x24] - value_type: int32 - value: FPS_LOCK_TARGET - # debug/settings/fps/force_fps - - - type: evaluate_write - address: [MAIN, 0x33E4B78, 0x30] - value_type: int32 - value: FPS_LOCK_TARGET - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010066F01A0E0000/768428355C994280.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010066F01A0E0000/768428355C994280.yaml deleted file mode 100644 index d0e6a83..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010066F01A0E0000/768428355C994280.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Cassette Beasts 1.8.2 -# BID: 768428355C994280 - -unsafeCheck: true - -ALL_FPS: - # physics/common/physics_fps - - - type: evaluate_write - address: [MAIN, 0x30AAAE0, 0x24] - value_type: int32 - value: FPS_TARGET - # debug/settings/fps/force_fps - - - type: evaluate_write - address: [MAIN, 0x30AAAE0, 0x30] - value_type: int32 - value: FPS_LOCK_TARGET - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010066F01A0E0000/B5DCAAA828DA5034.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010066F01A0E0000/B5DCAAA828DA5034.yaml deleted file mode 100644 index 685048e..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010066F01A0E0000/B5DCAAA828DA5034.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Cassette Beasts 1.8.0 -# BID: B5DCAAA828DA5034 - -unsafeCheck: true - -ALL_FPS: - # physics/common/physics_fps - - - type: evaluate_write - address: [MAIN, 0x30AAAE0, 0x24] - value_type: int32 - value: FPS_TARGET - # debug/settings/fps/force_fps - - - type: evaluate_write - address: [MAIN, 0x30AAAE0, 0x30] - value_type: int32 - value: FPS_LOCK_TARGET - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010066F01A0E0000/F09EAE79357E3032.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010066F01A0E0000/F09EAE79357E3032.yaml deleted file mode 100644 index 254af98..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010066F01A0E0000/F09EAE79357E3032.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Cassette Beasts 1.7.1 -# BID: F09EAE79357E3032 - -unsafeCheck: true - -ALL_FPS: - # physics/common/physics_fps - - - type: evaluate_write - address: [MAIN, 0x30AAAE0, 0x24] - value_type: int32 - value: FPS_LOCK_TARGET - # debug/settings/fps/force_fps - - - type: evaluate_write - address: [MAIN, 0x30AAAE0, 0x30] - value_type: int32 - value: FPS_LOCK_TARGET - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100670014482000/824B38A25986B2AB.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100670014482000/824B38A25986B2AB.yaml deleted file mode 100644 index c7e367d..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100670014482000/824B38A25986B2AB.yaml +++ /dev/null @@ -1,24 +0,0 @@ -# Assassin's Creed: The Ezio Collection - Assassin's Creed 2 1.3 -# BID: 824B38A25986B2AB -# Scenes exclusively 2D are tied to framerate, so at 60 FPS they are 2x faster. - -DECLARATIONS: - - - type: variable - name: dr_scale - value_type: float - default_value: 1 - evaluate: "FPS_TARGET / 30" - -MASTER_WRITE: -# Patch code to multiply last frametime by float scale factor -# To match it to Dynamic Resolution calculations - - - type: asm_a64 - main_offset: 0xB40638 - instructions: [ - [adrp, x9, $dr_scale], - [ldr, s0, [x9, $dr_scale]], - [fmul, s9, s8, s0], - [nop] - ] diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100670014482001/2B59D6C677258A2A.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100670014482001/2B59D6C677258A2A.yaml deleted file mode 100644 index 95cc10b..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100670014482001/2B59D6C677258A2A.yaml +++ /dev/null @@ -1,29 +0,0 @@ -# Assassin's Creed: The Ezio Collection - Assassin's Creed Brotherhood 1.3 -# BID: 2B59D6C677258A2A -# Scenes exclusively 2D are tied to framerate, so at 60 FPS they are 2x faster. - -DECLARATIONS: - - - type: variable - name: dr_scale - value_type: float - default_value: 1 - evaluate: "FPS_TARGET / 30" - -MASTER_WRITE: -# Patch code to multiply last frametime by float scale factor -# To match it to Dynamic Resolution calculations - - - type: asm_a64 - main_offset: 0xBDBE44 - instructions: [ - [adrp, x8, $dr_scale], - [ldr, s0, [x8, $dr_scale]] - ] - - - type: asm_a64 - main_offset: 0xBDBE58 - instructions: [ - [fmul, s0, s8, s0], - [nop] - ] diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100670014482002/0AE4D1770B196094.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100670014482002/0AE4D1770B196094.yaml deleted file mode 100644 index 3b5ff26..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100670014482002/0AE4D1770B196094.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Assassin's Creed: The Ezio Collection - Assassin's Creed Revelations 1.3 -# BID: 0AE4D1770B196094 -# Scenes exclusively 2D are tied to framerate, so at 60 FPS they are 2x faster. - -DECLARATIONS: - - - type: variable - name: dr_scale - value_type: float - default_value: 1000 - evaluate: "30000 / FPS_TARGET" -MASTER_WRITE: -# Patch code to divide last frametime by float scale factor -# To match it to Dynamic Resolution calculations - - - type: asm_a64 - main_offset: 0xAD51A0 - instructions: [ - [adrp, x8, $dr_scale], - [ldr, s1, [x8, $dr_scale]] - ] diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100670014B3E000/372AB37327DB2C31.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100670014B3E000/372AB37327DB2C31.yaml deleted file mode 100644 index 3b63221..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100670014B3E000/372AB37327DB2C31.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# ウムランギジェネレーション 1.6.6.0 -# BID: 372AB37327DB2C31 - -DECLARATIONS: - - - type: variable - name: fps_lock - value_type: float - default_value: 0.03333333333 - evaluate: "1 / FPS_TARGET" - -MASTER_WRITE: - # Read FPS Lock from MAIN+0x49FCFF0 - ## REF: 81 1a 40 bd 02 10 2e 1e - ## REF: FPSTarget.<>d__6::MoveNext() - - - type: asm_a64 - main_offset: 0x2DF1E60 - instructions: [ - [adrp, x8, $fps_lock], - [ldr, s1, [x8, $fps_lock]], - [nop] - ] -ALL_FPS: - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010067B017588000/E5EFB5ABA3601B97.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010067B017588000/E5EFB5ABA3601B97.yaml deleted file mode 100644 index ace8241..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010067B017588000/E5EFB5ABA3601B97.yaml +++ /dev/null @@ -1,75 +0,0 @@ -# Endless Ocean Luminous 1.0.1 -# BID: E5EFB5ABA3601B97 -# Some things are still tied to framerate, but nothing game breaking it seems. -# Game is using double buffer, trying to enable triple buffer results in crash. - -DECLARATIONS: - - - type: variable - name: dr_target - value_type: float - default_value: 0.0333333333 - evaluate: "1/FPS_TARGET" -MASTER_WRITE: - # Swap 30 FPS target with 60 - - - type: bytes - main_offset: 0x15C140E - value_type: uint8 - value: 0x33 - - - type: bytes - main_offset: 0x162E1B2 - value_type: uint8 - value: 0x36 - # Allow variable game speed instead of fixed - - - type: asm_a64 - main_offset: 0x36D880 - instructions: [ - [adrp, x8, 0x15d0000], - [add, x8, x8, 0x80c] - ] - - - type: asm_a64 - main_offset: 0x36D88C - instructions: [ - [mov, w9, 0x16] - ] - - - type: asm_a64 - main_offset: 0x36D894 - instructions: [ - [adrp, x8, 0x15cd000], - [add, x8, x8, 0x109] - ] - - - type: asm_a64 - main_offset: 0x36D89C - instructions: [ - [mov, w9, 0x13] - ] - # Force interval to 2 to maintain original 30 FPS lock by default - - - type: asm_a64 - main_offset: 0x92BB84 - instructions: [ - [mov, w21, 2] - ] - # Redirect DR timing target - - - type: asm_a64 - main_offset: 0xA38B18 - instructions: [ - [adrp, x1, $dr_target], - [ldr, s0, [x1, $dr_target]] - ] -ALL_FPS: - # vsync target - - - type: evaluate_write - address: [MAIN, 0x1C49DD0, 0x39E0] - value_type: uint32 - value: "VSYNC_TARGET - 1" - - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100690020FBE000/2735E564A9BD3DA3.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100690020FBE000/2735E564A9BD3DA3.yaml deleted file mode 100644 index 49939f8..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100690020FBE000/2735E564A9BD3DA3.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Formula Legends 1.0.5 -# BID: 2735E564A9BD3DA3 - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x73BDEE8, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x83A1F68, 0] - value_type: float - value: [FRAMETIME_TARGET, FRAMETIME_TARGET] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x83DD780, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100690020FBE000/349E9751D50B3B88.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100690020FBE000/349E9751D50B3B88.yaml deleted file mode 100644 index 8833dbe..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100690020FBE000/349E9751D50B3B88.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Formula Legends 1.0.7 -# BID: 349E9751D50B3B88 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x839AF68, 0] - value_type: float - value: [FRAMETIME_TARGET, FRAMETIME_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x73B6EE8, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x83D6780, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100690020FBE000/3768668BABF5F551.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100690020FBE000/3768668BABF5F551.yaml deleted file mode 100644 index 3f8b23f..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100690020FBE000/3768668BABF5F551.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Formula Legends 1.0.10 -# BID: 3768668BABF5F551 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x83C9F68, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # r.VSync - - - type: write - address: [MAIN, 0x73E5EE8, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8405780, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100690020FBE000/84C1B1AE29550FC8.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100690020FBE000/84C1B1AE29550FC8.yaml deleted file mode 100644 index 53f317b..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100690020FBE000/84C1B1AE29550FC8.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Formula Legends 1.0.6 -# BID: 84C1B1AE29550FC8 - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x73B5EE8, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x8399F68, 0] - value_type: float - value: [FRAMETIME_TARGET, FRAMETIME_TARGET] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x83D5780, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100690020FBE000/8FDB10262446CB3D.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100690020FBE000/8FDB10262446CB3D.yaml deleted file mode 100644 index 363548e..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100690020FBE000/8FDB10262446CB3D.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Formula Legends 1.0.4 -# BID: 8FDB10262446CB3D - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x73BBEE8, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x839FF68, 0] - value_type: float - value: [FRAMETIME_TARGET, FRAMETIME_TARGET] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x83DB780, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100690020FBE000/C26EE97D7ECDE83B.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100690020FBE000/C26EE97D7ECDE83B.yaml deleted file mode 100644 index c19c3c4..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100690020FBE000/C26EE97D7ECDE83B.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Formula Legends 1.0.8 -# BID: C26EE97D7ECDE83B - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x83C8F68, 0] - value_type: float - value: [FRAMETIME_TARGET, FRAMETIME_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x73E4EE8, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8404780, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100690020FBE000/CC93EA5C0A2F96FE.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100690020FBE000/CC93EA5C0A2F96FE.yaml deleted file mode 100644 index 0a32a3a..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100690020FBE000/CC93EA5C0A2F96FE.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Formula Legends 1.0.3 -# BID: CC93EA5C0A2F96FE - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x73ACEE8, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x8390F68, 0] - value_type: float - value: [FRAMETIME_TARGET, FRAMETIME_TARGET] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x83CC780, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010069100B7F0000/A953B35A45BEA33D.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010069100B7F0000/A953B35A45BEA33D.yaml deleted file mode 100644 index 1c40630..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010069100B7F0000/A953B35A45BEA33D.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# The Caligula Effect: Overdose 1.01 -# BID: A953B35A45BEA33D - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to one decimal - - - type: evaluate_write - address: [MAIN, 0x5CF2530, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x5D170A8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010069500DD86000/5AD84EFD9D28FDDE.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010069500DD86000/5AD84EFD9D28FDDE.yaml deleted file mode 100644 index cbca399..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010069500DD86000/5AD84EFD9D28FDDE.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Destiny Connect: Tick-Tock Travelers 1.0.0 -# BID: 5AD84EFD9D28FDDE - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 1 decimal - - - type: evaluate_write - address: [MAIN, 0x5934540, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x59590A8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010069C01AB82000/0A4F14A5C12F470A.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010069C01AB82000/0A4F14A5C12F470A.yaml deleted file mode 100644 index 9d9cba8..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010069C01AB82000/0A4F14A5C12F470A.yaml +++ /dev/null @@ -1,33 +0,0 @@ -# SHIN MEGAMI TENSEI V: Vengeance 1.0.3 US/EUR -# BID: 0A4F14A5C12F470A - -MASTER_WRITE: - # Block from reapplying t.MaxFPS by game, REF: 01 E4 00 2F 00 AC 21 1E 08 00 40 F9 08 75 41 F9, nop BLR X8 after LDR X8, [X8,#0x2E8] - - - type: asm_a64 - main_offset: 0x3780DD0 - instructions: [ - [nop] - ] -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x7AAFBB8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # r.VSync - - - type: write - address: [MAIN, 0x7273AD0, 0] - value_type: uint32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7AD5858, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010069C01AB82000/541F680F325BD5AC.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010069C01AB82000/541F680F325BD5AC.yaml deleted file mode 100644 index 6a22e4b..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010069C01AB82000/541F680F325BD5AC.yaml +++ /dev/null @@ -1,31 +0,0 @@ -# SHIN MEGAMI TENSEI V: Vengeance 1.0.1 US/EUR -# BID: 541F680F325BD5AC - -unsafeCheck: true - -MASTER_WRITE: - # Block from reapplying t.MaxFPS by game, REF: 01 E4 00 2F 00 AC 21 1E 08 00 40 F9 08 75 41 F9 - - - type: bytes - main_offset: 0x377E820 - value_type: uint32 - value: 0xD503201F -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x7AAABB8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # r.VSync - - - type: write - address: [MAIN, 0x726F260, 0] - value_type: uint32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7AD0858, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010069C01AB82000/E1BD1040BFBDDAFF.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010069C01AB82000/E1BD1040BFBDDAFF.yaml deleted file mode 100644 index ee6004e..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010069C01AB82000/E1BD1040BFBDDAFF.yaml +++ /dev/null @@ -1,31 +0,0 @@ -# SHIN MEGAMI TENSEI V: Vengeance 1.0.2 US/EUR -# BID: E1BD1040BFBDDAFF - -unsafeCheck: true - -MASTER_WRITE: - # Block from reapplying t.MaxFPS by game, REF: 01 E4 00 2F 00 AC 21 1E 08 00 40 F9 08 75 41 F9, nop BLR X8 after LDR X8, [X8,#0x2E8] - - - type: bytes - main_offset: 0x377EB30 - value_type: uint32 - value: 0xD503201F -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x7AAABB8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # r.VSync - - - type: write - address: [MAIN, 0x726F260, 0] - value_type: uint32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7AD0858, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006AC01F630000/7C37B073B19F3CCF.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01006AC01F630000/7C37B073B19F3CCF.yaml deleted file mode 100644 index 4de9511..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006AC01F630000/7C37B073B19F3CCF.yaml +++ /dev/null @@ -1,24 +0,0 @@ -# Sword of the Necromancer: Resurrection 1.0.4 -# BID: 7C37B073B19F3CCF - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x7577E00, 0] - value_type: float - value: ["0.9 * FRAMETIME_TARGET", "0.9 * FRAMETIME_TARGET"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x75AC298, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6DD3CB8, 0] - value_type: int32 - value: [0, 0] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006AC01F630000/B70551B5A2D0F15F.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01006AC01F630000/B70551B5A2D0F15F.yaml deleted file mode 100644 index de29121..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006AC01F630000/B70551B5A2D0F15F.yaml +++ /dev/null @@ -1,24 +0,0 @@ -# Sword of the Necromancer: Resurrection 1.0.3 -# BID: B70551B5A2D0F15F - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x7573E00, 0] - value_type: float - value: ["0.9 * FRAMETIME_TARGET", "0.9 * FRAMETIME_TARGET"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x75A8298, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6DCFCB8, 0] - value_type: int32 - value: [0, 0] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006AC01F630000/FFF55266A618D06A.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01006AC01F630000/FFF55266A618D06A.yaml deleted file mode 100644 index 7a1410e..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006AC01F630000/FFF55266A618D06A.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Sword of the Necromancer: Resurrection 1.0.5 -# BID: FFF55266A618D06A - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x758CE00, 0] - value_type: float - value: ["0.9 * FRAMETIME_TARGET", "0.9 * FRAMETIME_TARGET"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x75C1298, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6DE8CB8, 0] - value_type: int32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006AE02236C000/43B775EC81DB2B63.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01006AE02236C000/43B775EC81DB2B63.yaml deleted file mode 100644 index c0a779a..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006AE02236C000/43B775EC81DB2B63.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Double Dragon Revive N1.30 -# BID: 43B775EC81DB2B63 - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x82DBE98, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x92B9D48, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x92E7A58, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006AE02236C000/DBD5C9EC799E65A9.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01006AE02236C000/DBD5C9EC799E65A9.yaml deleted file mode 100644 index 648ec1f..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006AE02236C000/DBD5C9EC799E65A9.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Double Dragon Revive N1.10 -# BID: DBD5C9EC799E65A9 - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x82DAE98, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x92B8D48, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x92E6A58, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006B4018ECA000/B8BE1CFAE53CAEBE.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01006B4018ECA000/B8BE1CFAE53CAEBE.yaml deleted file mode 100644 index e7077d0..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006B4018ECA000/B8BE1CFAE53CAEBE.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# WRCジェネレーションズ 1.2.2 -# BID: B8BE1CFAE53CAEBE - -ALL_FPS: - # OptimalFrameDuration_ms = (1000/FPS) - (0.07 * (1000/30) - - - type: evaluate_write - address: [MAIN, 0x2D5A83C] - value_type: float - value: "FRAMETIME_TARGET - (0.07 * (1000/30))" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006BB0203CA000/F8FA82D6A1BFE328.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01006BB0203CA000/F8FA82D6A1BFE328.yaml deleted file mode 100644 index da6c896..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006BB0203CA000/F8FA82D6A1BFE328.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Wizard of Legend 2 1.1.0b -# BID: F8FA82D6A1BFE328 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x85D8B28, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # r.VSync - - - type: write - address: [MAIN, 0x75EE990, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x86132B8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006BD0095F4000/019FBFE7738EA314.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01006BD0095F4000/019FBFE7738EA314.yaml deleted file mode 100644 index 2054ba1..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006BD0095F4000/019FBFE7738EA314.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# 真・女神転生Ⅴ 1.0.2 -# BID: 019FBFE7738EA314 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x75F81D0, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7621D70, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006BD018B54000/0A1AC10CCFE46061.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01006BD018B54000/0A1AC10CCFE46061.yaml deleted file mode 100644 index 4c1ff70..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006BD018B54000/0A1AC10CCFE46061.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# The Plucky Squire 1.0.5 -# BID: 0A1AC10CCFE46061 - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x63A30F8, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 1 decimal - - - type: evaluate_write - address: [MAIN, 0x6B72668, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6BA0328, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006BD018B54000/892E6C4FE0D850B5.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01006BD018B54000/892E6C4FE0D850B5.yaml deleted file mode 100644 index b6f79a9..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006BD018B54000/892E6C4FE0D850B5.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# The Plucky Squire 1.0.8 -# BID: 892E6C4FE0D850B5 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x6C06668, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6C34348, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6436CE8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006BD018B54000/AFDEB128252898AC.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01006BD018B54000/AFDEB128252898AC.yaml deleted file mode 100644 index d2ad9b4..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006BD018B54000/AFDEB128252898AC.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# The Plucky Squire 1.0.7 -# BID: AFDEB128252898AC - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x6C04668, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6C32348, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6434CE8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006BD018B54000/B771B34505774A8E.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01006BD018B54000/B771B34505774A8E.yaml deleted file mode 100644 index 32dcabd..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006BD018B54000/B771B34505774A8E.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# The Plucky Squire 1.0.3 -# BID: B771B34505774A8E - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x6B4D668, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6B7B328, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x637E0A8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006BD018B54000/D53CF6573CAED4B1.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01006BD018B54000/D53CF6573CAED4B1.yaml deleted file mode 100644 index 33c1685..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006BD018B54000/D53CF6573CAED4B1.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# The Plucky Squire 1.0.4 -# BID: D53CF6573CAED4B1 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x6B57668, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6B85328, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6388098, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006BD018B54000/FD3AC4FFB1B769D5.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01006BD018B54000/FD3AC4FFB1B769D5.yaml deleted file mode 100644 index f34e812..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006BD018B54000/FD3AC4FFB1B769D5.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# The Plucky Squire 1.0.6 -# BID: FD3AC4FFB1B769D5 - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x63A7538, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 1 decimal - - - type: evaluate_write - address: [MAIN, 0x6B76668, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6BA4328, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006BD019A78000/F54FC539CAF24C64.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01006BD019A78000/F54FC539CAF24C64.yaml deleted file mode 100644 index 6929e29..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006BD019A78000/F54FC539CAF24C64.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# The Bridge Curse - Road to Salvation 1.6.0.1 -# BID: F54FC539CAF24C64 - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x6560E98, 0] - value_type: uint32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6D5D3B8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006C10131F6000/0F73F1D52820F90B.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01006C10131F6000/0F73F1D52820F90B.yaml deleted file mode 100644 index 5b7073b..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006C10131F6000/0F73F1D52820F90B.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Pumpkin Jack 1.4.4 -# BID: 0F73F1D52820F90B - -unsafeCheck: true - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x60F3B68, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x592B218, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006C300E9F0000/1719AABFA5EAE42B.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01006C300E9F0000/1719AABFA5EAE42B.yaml deleted file mode 100644 index 8b5c3ca..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006C300E9F0000/1719AABFA5EAE42B.yaml +++ /dev/null @@ -1,45 +0,0 @@ -# DRAGON QUEST XI S: Echoes of an Elusive Age - Definitive Edition 1.0.3/1.0.4 -# BID: 1719AABFA5EAE42B - -unsafeCheck: true - -ALL_FPS: - # r.DynamicResolution.MaxTimeBudget = 0.99 * (1000/FPS) - - - type: evaluate_write - address: [MAIN, 0x84ECDD8, 0] - value_type: float - value: ["0.99 * FRAMETIME_TARGET", "0.99 * FRAMETIME_TARGET"] - # r.DynamicResolution.MinTimeBudget = 0.9 * (1000/FPS) - - - type: evaluate_write - address: [MAIN, 0x84ECDF0, 0] - value_type: float - value: ["0.9 * FRAMETIME_TARGET", "0.9 * FRAMETIME_TARGET"] - # r.DynamicResolution.HeavyTimeBudget = 1.05 * (1000/FPS) - - - type: evaluate_write - address: [MAIN, 0x84ECE08, 0] - value_type: float - value: ["1.05 * FRAMETIME_TARGET", "1.05 * FRAMETIME_TARGET"] - # r.DynamicResolution.LightTimeBudget = 0.9 * (1000/FPS) - - - type: evaluate_write - address: [MAIN, 0x84ECE20, 0] - value_type: float - value: ["0.9 * FRAMETIME_TARGET", "0.9 * FRAMETIME_TARGET"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8501C48, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x7879500, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006C600E46E000/6D5DB3434CCF63F2.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01006C600E46E000/6D5DB3434CCF63F2.yaml deleted file mode 100644 index b86d972..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006C600E46E000/6D5DB3434CCF63F2.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Samurai Jack: Battle Through Time 1.0.3 -# BID: 6D5DB3434CCF63F2 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget = (1000/FPS) cutted to 1 decimal - - - type: evaluate_write - address: [MAIN, 0x6FC5558, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6FEB028, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006C7021024000/03DBE839CAA0632B.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01006C7021024000/03DBE839CAA0632B.yaml deleted file mode 100644 index aadafd0..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006C7021024000/03DBE839CAA0632B.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# MotoGP 25 1.0.3 -# BID: 03DBE839CAA0632B - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0xA058518, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xA093DD0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x9074C00, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006C7021024000/499A85D046C70186.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01006C7021024000/499A85D046C70186.yaml deleted file mode 100644 index 5b6b090..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006C7021024000/499A85D046C70186.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# MotoGP 25 1.0.4 -# BID: 499A85D046C70186 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0xA060518, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xA09BDD0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x907CC00, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006C7021024000/72D353380DD03B52.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01006C7021024000/72D353380DD03B52.yaml deleted file mode 100644 index ba791be..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006C7021024000/72D353380DD03B52.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# MotoGP 25 1.0.1 -# BID: 72D353380DD03B52 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0xA033518, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xA06EDD0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x904FC00, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006C7021024000/BD9B46CAE607D7E8.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01006C7021024000/BD9B46CAE607D7E8.yaml deleted file mode 100644 index c8c4058..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006C7021024000/BD9B46CAE607D7E8.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# MotoGP 25 1.0.2 -# BID: BD9B46CAE607D7E8 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0xA043518, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xA07EDD0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x905FC00, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006CB010840000/9F2F187D1C6E44EC.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01006CB010840000/9F2F187D1C6E44EC.yaml deleted file mode 100644 index 5539d53..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006CB010840000/9F2F187D1C6E44EC.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Oceanhorn 2: Knights of the Lost Realm 1.2 -# BID: 9F2F187D1C6E44EC - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x51E80D8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET * 0.963, 1)", "TruncDec(FRAMETIME_TARGET * 0.963, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x52122E0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x467DE48, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006CC01182C000/C31E59266A218855.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01006CC01182C000/C31E59266A218855.yaml deleted file mode 100644 index c8745a6..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006CC01182C000/C31E59266A218855.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Blair Witch 1.0.3 -# BID: C31E59266A218855 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) with cutted decimals - - - type: evaluate_write - address: [MAIN, 0x5CC7310, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 0)", "TruncDec(FRAMETIME_TARGET, 0)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x5CEB9F8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006D0017F7A000/59874C9B530095AC.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01006D0017F7A000/59874C9B530095AC.yaml deleted file mode 100644 index 4f228c4..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006D0017F7A000/59874C9B530095AC.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Mario & Luigi: Brothership 1.0.0 -# BID: 59874C9B530095AC - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x651F708, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x6CEC8C8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6D1A498, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006D0017F7A000/BF0607AC795B593A.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01006D0017F7A000/BF0607AC795B593A.yaml deleted file mode 100644 index d2e95de..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006D0017F7A000/BF0607AC795B593A.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Mario & Luigi: Brothership 1.0.1 -# BID: BF0607AC795B593A - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x651F708, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6D1A498, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006DC010326000/05DE5A7F20BD1532.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01006DC010326000/05DE5A7F20BD1532.yaml deleted file mode 100644 index 1877738..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006DC010326000/05DE5A7F20BD1532.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Bravely Default II 1.0.0 -# BID: 05DE5A7F20BD1532 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to one decimal - - - type: evaluate_write - address: [MAIN, 0x72AEE90, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x73050F0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x69AA5C0, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006DC012B00000/EAAB46ED1E4989C0.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01006DC012B00000/EAAB46ED1E4989C0.yaml deleted file mode 100644 index ea641e9..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006DC012B00000/EAAB46ED1E4989C0.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Tails Noir 1.0.1 -# BID: EAAB46ED1E4989C0 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x6E018F8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6E2F4C8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6633B08, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006DD00FE16000/CA77083E259D87A2.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01006DD00FE16000/CA77083E259D87A2.yaml deleted file mode 100644 index e61529a..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006DD00FE16000/CA77083E259D87A2.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# ウルトラエージ 2.0.4 -# BID: CA77083E259D87A2 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x7984A48, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x79B22F8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006EC00F2CC000/F199FFD7D83F399E.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01006EC00F2CC000/F199FFD7D83F399E.yaml deleted file mode 100644 index e8b74d0..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006EC00F2CC000/F199FFD7D83F399E.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Ruiner 1.3 -# BID: F199FFD7D83F399E - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) rounded to one decimal - - - type: evaluate_write - address: [MAIN, 0x55B1690, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x55D8100, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006F301AE9C000/6C91A8A476E70C5D.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01006F301AE9C000/6C91A8A476E70C5D.yaml deleted file mode 100644 index 5b8fa7c..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006F301AE9C000/6C91A8A476E70C5D.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Grounded 1.05 -# BID: 6C91A8A476E70C5D - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget = (1000/FPS) cutted to 1 decimal - - - type: evaluate_write - address: [MAIN, 0x8DE73D8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8E0D520, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006F301AE9C000/97D2B53D2C0B35EA.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01006F301AE9C000/97D2B53D2C0B35EA.yaml deleted file mode 100644 index ca23174..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006F301AE9C000/97D2B53D2C0B35EA.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Grounded 1.07 -# BID: 97D2B53D2C0B35EA - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget = (1000/FPS) cutted to 1 decimal - - - type: evaluate_write - address: [MAIN, 0x8E043E8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8E2A530, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006F301AE9C000/B46B22D9AC7E567B.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01006F301AE9C000/B46B22D9AC7E567B.yaml deleted file mode 100644 index a1e12a3..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006F301AE9C000/B46B22D9AC7E567B.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Grounded 1.13 -# BID: B46B22D9AC7E567B - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x8E50418, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8E76560, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006F301AE9C000/E9A887A36762C526.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01006F301AE9C000/E9A887A36762C526.yaml deleted file mode 100644 index fe20faf..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006F301AE9C000/E9A887A36762C526.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Grounded 1.08 -# BID: E9A887A36762C526 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget = (1000/FPS) cutted to 1 decimal - - - type: evaluate_write - address: [MAIN, 0x8E3C418, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8E62560, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006F301AE9C000/F50C38B64DE532F7.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01006F301AE9C000/F50C38B64DE532F7.yaml deleted file mode 100644 index ae9a909..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006F301AE9C000/F50C38B64DE532F7.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Grounded 1.12 -# BID: F50C38B64DE532F7 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x8E50418, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8E76560, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006F301AE9C000/F5ECD5701434461C.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01006F301AE9C000/F5ECD5701434461C.yaml deleted file mode 100644 index 34bae69..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006F301AE9C000/F5ECD5701434461C.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Grounded 1.09 -# BID: F5ECD5701434461C - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget = (1000/FPS) cutted to 1 decimal - - - type: evaluate_write - address: [MAIN, 0x8E3D418, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8E63560, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006F301AE9C000/F89171E031F95ADC.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01006F301AE9C000/F89171E031F95ADC.yaml deleted file mode 100644 index d1428bf..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006F301AE9C000/F89171E031F95ADC.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Grounded 1.11 -# BID: F89171E031F95ADC - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x8E3C418, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8E62560, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006F401D934000/66FCB9B306005BBA.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01006F401D934000/66FCB9B306005BBA.yaml deleted file mode 100644 index 234e290..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006F401D934000/66FCB9B306005BBA.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Twilight Survivors 1.0.9 -# BID: 66FCB9B306005BBA - -unsafeCheck: true - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6570898, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x5D74998, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006F401D934000/8AA7D10343CB3870.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01006F401D934000/8AA7D10343CB3870.yaml deleted file mode 100644 index 7536865..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006F401D934000/8AA7D10343CB3870.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Twilight Survivors 0.22.2 -# BID: 8AA7D10343CB3870 - -unsafeCheck: true - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6495898, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x5C99348, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006F401D934000/D71970AAA5D34DD0.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01006F401D934000/D71970AAA5D34DD0.yaml deleted file mode 100644 index 858d4de..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006F401D934000/D71970AAA5D34DD0.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Twilight Survivors 1.0.8 -# BID: D71970AAA5D34DD0 - -unsafeCheck: true - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6568898, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x5D6C988, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006F401D934000/E3FBEB5A9C7788CD.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01006F401D934000/E3FBEB5A9C7788CD.yaml deleted file mode 100644 index ca0466f..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006F401D934000/E3FBEB5A9C7788CD.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Twilight Survivors 1.0.10 -# BID: E3FBEB5A9C7788CD - -unsafeCheck: true - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6583898, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x5D87128, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006F901C7F2000/406F004D76F961F3.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01006F901C7F2000/406F004D76F961F3.yaml deleted file mode 100644 index aee8bdc..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006F901C7F2000/406F004D76F961F3.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Choo-Choo Charles 1.0.1 -# BID: 406F004D76F961F3 - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x6DC65E8, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x7594F48, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x75C2C08, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006FC01B540000/B91475B2ADE6F74D.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01006FC01B540000/B91475B2ADE6F74D.yaml deleted file mode 100644 index 80ee35c..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006FC01B540000/B91475B2ADE6F74D.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# Hot Blood 1.0.1 -# BID: B91475B2ADE6F74D - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (Default is 36) - - - type: evaluate_write - address: [MAIN, 0x5CB4658, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x5CE23A8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006FE016FB2000/191B397CA0310A18.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01006FE016FB2000/191B397CA0310A18.yaml deleted file mode 100644 index a4e5114..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01006FE016FB2000/191B397CA0310A18.yaml +++ /dev/null @@ -1,13 +0,0 @@ -# Gal*Gun: Double Peace 1.0.2 -# BID: 191B397CA0310A18 - -unsafeCheck: true - -ALL_FPS: - # Bool Lock FPS - # REF: LDR S0, [X0, 0x70C] - - - type: write - address: [MAIN, 0x1E71BD4] - value_type: uint8 - value: 0 diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010070A00E9CE000/4BC4A8A814FD46A4.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010070A00E9CE000/4BC4A8A814FD46A4.yaml deleted file mode 100644 index 4446ecb..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010070A00E9CE000/4BC4A8A814FD46A4.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# The Witcher 3: Wild Hunt - Complete Edition 4.04b -# BID: 4BC4A8A814FD46A4 - -ALL_FPS: - # DRGameTargetFrameTimeInMs - - - type: evaluate_write - address: [MAIN, 0x41312B4] - value_type: float - value: "0.945 * FRAMETIME_TARGET" - # DRCinematicTargetFrameTimeInMs - - - type: evaluate_write - address: [MAIN, 0x41312E4] - value_type: float - value: "0.945 * FRAMETIME_TARGET" - # LimitFPS - - - type: evaluate_write - address: [MAIN, 0x411DCFC] - value_type: int32 - value: FPS_LOCK_TARGET - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100711017B30000/2C7A626BA5F25D5F.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100711017B30000/2C7A626BA5F25D5F.yaml deleted file mode 100644 index 7ceccba..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100711017B30000/2C7A626BA5F25D5F.yaml +++ /dev/null @@ -1,13 +0,0 @@ -# The Dark Pictures Anthology: Man of Medan 1.0.1 -# BID: 2C7A626BA5F25D5F - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xB149FF8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100711022E24000/15AFE82282E0EF30.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100711022E24000/15AFE82282E0EF30.yaml deleted file mode 100644 index fd91bcf..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100711022E24000/15AFE82282E0EF30.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Lynked: Banner of the Spark 1.2.1 -# BID: 15AFE82282E0EF30 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x7EA5348, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7ED3028, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x76D62F8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100711022E24000/9646E1065A7E897B.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100711022E24000/9646E1065A7E897B.yaml deleted file mode 100644 index 29f6566..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100711022E24000/9646E1065A7E897B.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Lynked: Banner of the Spark 1.2.2 -# BID: 9646E1065A7E897B - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x7EAC348, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7EDA028, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x76DD488, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100711022E24000/98C2DD2B041D3CCC.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100711022E24000/98C2DD2B041D3CCC.yaml deleted file mode 100644 index 9d3f489..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100711022E24000/98C2DD2B041D3CCC.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Lynked: Banner of the Spark 1.2.3 -# BID: 98C2DD2B041D3CCC - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x7EB5348, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7EE3028, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x76E6488, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100711022E24000/BCEB97447A39F9FE.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100711022E24000/BCEB97447A39F9FE.yaml deleted file mode 100644 index 52ca29c..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100711022E24000/BCEB97447A39F9FE.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Lynked: Banner of the Spark 1.2.0 -# BID: BCEB97447A39F9FE - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x7EA5348, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7ED3028, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x76D62F8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010071800BA98000/173E2EDEA9E5D940.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010071800BA98000/173E2EDEA9E5D940.yaml deleted file mode 100644 index 7df7048..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010071800BA98000/173E2EDEA9E5D940.yaml +++ /dev/null @@ -1,18 +0,0 @@ -# Darksiders 2 1.0.0 -# BID: 173E2EDEA9E5D940 - -unsafeCheck: true - -ALL_FPS: - # gNXHighThresholdUS_hidden 930*(1000/FPS) - - - type: evaluate_write - address: [MAIN, 0x3293F94] - value_type: int32 - value: "930 * FRAMETIME_TARGET" - # gNXLowThresholdUS_hidden 870*(1000/FPS) - - - type: evaluate_write - address: [MAIN, 0x3293F98] - value_type: int32 - value: "870 * FRAMETIME_TARGET" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010071F0228CA000/9BA2F2849F9D9FDF.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010071F0228CA000/9BA2F2849F9D9FDF.yaml deleted file mode 100644 index 61e3b2f..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010071F0228CA000/9BA2F2849F9D9FDF.yaml +++ /dev/null @@ -1,26 +0,0 @@ -# Labirynth Of The Demon King 5.233.V1SEP3 -# BID: 9BA2F2849F9D9FDF - -ALL_FPS: - # Disable FixedFrameRate - - - type: write - address: [MAIN, 0x582FF08, 0x7A4] - address_unsafe: true - value_type: uint32 - value: 7 - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x5830828, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x5631E58, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010071F0228CA000/DE26B43C3D21B3A3.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010071F0228CA000/DE26B43C3D21B3A3.yaml deleted file mode 100644 index 8bc6d2d..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010071F0228CA000/DE26B43C3D21B3A3.yaml +++ /dev/null @@ -1,26 +0,0 @@ -# Labirynth Of The Demon King 1.81 -# BID: DE26B43C3D21B3A3 - -ALL_FPS: - # Disable FixedFrameRate - - - type: write - address: [MAIN, 0x59ED248, 0x7A4] - address_unsafe: true - value_type: uint32 - value: 7 - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x59EDB68, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x57EEDA8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100727018A10000/2EEE840599DC7021.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100727018A10000/2EEE840599DC7021.yaml deleted file mode 100644 index 47fd196..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100727018A10000/2EEE840599DC7021.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# SWORD ART ONLINE Fractured Daydream EUR 1.5.2.0 -# BID: 2EEE840599DC7021 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x8676768, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x86B12E0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x7EB0F88, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010072900AFF0000/FE757B10B45C3444.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010072900AFF0000/FE757B10B45C3444.yaml deleted file mode 100644 index b3dc005..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010072900AFF0000/FE757B10B45C3444.yaml +++ /dev/null @@ -1,76 +0,0 @@ -# Gear.Club Unlimited 2 1.7.2 -# BID: FE757B10B45C3444 - -DECLARATIONS: - - - type: variable - name: vsync_target - value_type: uint32 - default_value: 2 - evaluate: VSYNC_TARGET - - - type: variable - name: dr_target - value_type: float - default_value: 33 - evaluate: "1.1 * FPS_TARGET" - - - type: code - name: getVsyncTarget - instructions: [ - [adrp, x0, $vsync_target], - [ldr, w0, [x0, $vsync_target]], - [mov, w19, w0], - [ret] - ] - - - type: code - name: getDrTarget - instructions: [ - [adrp, x0, $dr_target], - [ldr, s0, [x0, $dr_target]], - [ret] - ] -MASTER_WRITE: -# Edit Eden.Graphics.IGraphicsQualityProfile::set_VSyncCount -# If not edited, light is flickering at > 30 FPS - - - type: asm_a64 - main_offset: 0x14B4990 - instructions: [ - [adrp, x1, $vsync_target], - [ldr, w1, [x1, $vsync_target]], - [str, w1, [x0, 0x54]], - [ret] - ] -# Edit UnityEngine.QualitySettings::set_vSyncCount -# If not edited, light is flickering at > 30 FPS - - - type: asm_a64 - main_offset: 0x1B46EE4 - instructions: [ - [adrp, x0, $vsync_target], - [ldr, w0, [x0, $vsync_target]], - [ldp, x29, x30, [sp, 0x20]], - [ldp, x20, x19, [sp, 0x10]], - [add, sp, sp, 0x30], - [br, x1] - ] -# Edit Eden.Graphics.GraphicsQualityManager::SetTargetFrameRate -# If not edited, it locks to 30 FPS - - - type: asm_a64 - main_offset: 0x14AB578 - instructions: [ - [bl, _getVsyncTarget()] - ] -# Edit Eden.Graphics.DynamicResolutionScaler::UpdateScaling -# If not edited, performance is much worse at > 30 FPS - - - type: asm_a64 - main_offset: 0x14988BC - instructions: [ - [bl, _getDrTarget()] - ] - - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010072E01CE0E000/1BFD68BCB8481BC9.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010072E01CE0E000/1BFD68BCB8481BC9.yaml deleted file mode 100644 index f2c946e..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010072E01CE0E000/1BFD68BCB8481BC9.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# F1 Manager 2024 1.9 -# BID: 1BFD68BCB8481BC9 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x7FC8A28, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8002AA0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x7805AA8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010072E01CE0E000/42350FCC758887D1.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010072E01CE0E000/42350FCC758887D1.yaml deleted file mode 100644 index 380b9a5..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010072E01CE0E000/42350FCC758887D1.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# F1 Manager 2024 1.4 -# BID: 42350FCC758887D1 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x7FA9A28, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7FE3AA0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x77E6AA8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010072E01CE0E000/53C0F2107412F0E2.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010072E01CE0E000/53C0F2107412F0E2.yaml deleted file mode 100644 index 207c1f0..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010072E01CE0E000/53C0F2107412F0E2.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# F1 Manager 2024 1.8 -# BID: 53C0F2107412F0E2 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x7FB1A28, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7FEBAA0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x77EEAA8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010072E01CE0E000/645C3BE90D4ED3D5.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010072E01CE0E000/645C3BE90D4ED3D5.yaml deleted file mode 100644 index a3ed7fb..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010072E01CE0E000/645C3BE90D4ED3D5.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# F1 Manager 2024 1.3 -# BID: 645C3BE90D4ED3D5 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x7FA8A28, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7FE2AA0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x77E5AA8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010072E01CE0E000/85F60F87D19B5270.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010072E01CE0E000/85F60F87D19B5270.yaml deleted file mode 100644 index 6c7c123..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010072E01CE0E000/85F60F87D19B5270.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# F1 Manager 2024 1.11 -# BID: 85F60F87D19B5270 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x7FE9A28, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8023AA0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x7826AA8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010072E01CE0E000/8A9EBE9FC405A31C.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010072E01CE0E000/8A9EBE9FC405A31C.yaml deleted file mode 100644 index 0ba4a5e..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010072E01CE0E000/8A9EBE9FC405A31C.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# F1 Manager 2024 1.10 -# BID: 8A9EBE9FC405A31C - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x7FC8A28, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8002AA0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x7805AA8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010072E01CE0E000/A245DABD986CBC85.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010072E01CE0E000/A245DABD986CBC85.yaml deleted file mode 100644 index f6a861d..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010072E01CE0E000/A245DABD986CBC85.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# F1 Manager 2024 1.7 -# BID: A245DABD986CBC85 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x7FB1A28, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7FEBAA0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x77EEAA8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010072E01CE0E000/CA23556FE5EF2EB1.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010072E01CE0E000/CA23556FE5EF2EB1.yaml deleted file mode 100644 index 429da06..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010072E01CE0E000/CA23556FE5EF2EB1.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# F1 Manager 2024 1.5 -# BID: CA23556FE5EF2EB1 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x7FAAA28, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7FE4AA0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x77E7AA8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01007300020FA000/4B159F0F7A360669.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01007300020FA000/4B159F0F7A360669.yaml deleted file mode 100644 index 48f64d5..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01007300020FA000/4B159F0F7A360669.yaml +++ /dev/null @@ -1,40 +0,0 @@ -# Astral Chain 1.0.1 -# BID: 4B159F0F7A360669 -# Thanks to MrComputerRevo for figuring out where is minimal game speed - -unsafeCheck: true - -MASTER_WRITE: - # Change minimal game speed to half of default value - - - type: asm_a64 - main_offset: 0x91DC94 - instructions: [ - [fmov, s1, 0.5] - ] - - - type: asm_a64 - main_offset: 0x91DCA0 - instructions: [ - [fmov, s1, 0.5] - ] - - - type: asm_a64 - main_offset: 0x91DCAC - instructions: [ - [mov, w8, 0x3f000000] - ] - # Block cutscenes from having speed fixed to 30 FPS - - - type: asm_a64 - main_offset: 0x91DC10 - instructions: [ - [nop] - ] -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0xCCB7AF0, 0x420] - value_type: uint32 - value: "VSYNC_TARGET - 1" - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010073301E7E4000/55DFB4A664D8B596.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010073301E7E4000/55DFB4A664D8B596.yaml deleted file mode 100644 index f4ce865..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010073301E7E4000/55DFB4A664D8B596.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# 모비드: 분노의 군주 1.02 -# BID: 55DFB4A664D8B596 - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x5DAC3D8, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x657FEE8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x65AD888, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010073401175E000/E8DB38F170B0149D.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010073401175E000/E8DB38F170B0149D.yaml deleted file mode 100644 index c88a090..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010073401175E000/E8DB38F170B0149D.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Crash Bandicoot 4: It's About Time 1.2 -# BID: E8DB38F170B0149D - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x7AE3340, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7B0DEB0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100736019D8E000/72AE4B77322A5B1B.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100736019D8E000/72AE4B77322A5B1B.yaml deleted file mode 100644 index aee08b6..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100736019D8E000/72AE4B77322A5B1B.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# Project Nightmares Case 36: Henrietta Kedward 1.0.3 -# BID: 72AE4B77322A5B1B - -ALL_FPS: - # DynamicResolution_TypeInfo - - - type: evaluate_write - address: [MAIN, 0x475AB98, 0xB8, 0] - value_type: double - value: [FPS_TARGET, FRAMETIME_TARGET] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010073601DF1A000/D36459588F85315D.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010073601DF1A000/D36459588F85315D.yaml deleted file mode 100644 index 3f683ea..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010073601DF1A000/D36459588F85315D.yaml +++ /dev/null @@ -1,48 +0,0 @@ -# Amber Isle 1.0.2 -# BID: D36459588F85315D - -unsafeCheck: true - -MASTER_WRITE: -# Redirect all hardcoded doubles in DynamicResolutionHandler::Update to MAIN+0x9093F00 - - - type: bytes - main_offset: 0x21FE24C - value_type: uint32 - value: - - 0xB00374A8 # adrp x8, #0x9093000 - - 0xFD478100 # ldr d0, [x8, #0xf00] - - - type: bytes - main_offset: 0x21FE1F0 - value_type: uint32 - value: - - 0xB00374A8 # adrp x8, #0x9093000 - - 0xFD478101 # ldr d1, [x8, #0xf00] - - - type: bytes - main_offset: 0x21FE360 - value_type: uint32 - value: - - 0xB00374A8 # adrp x8, #0x9093000 - - 0xFD478100 # ldr d0, [x8, #0xf00] - - 0x1E614000 # fneg d0, d0 - - - type: bytes - main_offset: 0x21FE5E4 - value_type: uint32 - value: - - 0xB00374A8 # adrp x8, #0x9093000 - - 0xFD478100 # ldr d0, [x8, #0xf00] - # default value - - - type: bytes - main_offset: 0x9093F00 - value_type: double - value: 25.333333333333336 -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x9093F00] - value_type: double - value: "FRAMETIME_TARGET * 0.76" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010073601DF1A000/E8BF195297B63BA2.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010073601DF1A000/E8BF195297B63BA2.yaml deleted file mode 100644 index f76a532..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010073601DF1A000/E8BF195297B63BA2.yaml +++ /dev/null @@ -1,52 +0,0 @@ -# Amber Isle 1.0.3 -# BID: E8BF195297B63BA2 - -DECLARATIONS: - - - type: variable - name: dr_target - value_type: double - default_value: 25.333333333333336 - evaluate: "FRAMETIME_TARGET * 0.76" - -MASTER_WRITE: -# Redirect all hardcoded doubles in DynamicResolutionHandler::Update to MAIN+0x909EF00 -## REF: c8 aa 8a f2 28 07 e8 f2 - - - type: asm_a64 - main_offset: 0x21FE1E4 - instructions: [ - [adrp, x8, $dr_target], - [ldr, d0, [x8, $dr_target]] - ] - - - type: asm_a64 - main_offset: 0x21FE3E0 - instructions: [ - [adrp, x8, $dr_target], - [ldr, d1, [x8, $dr_target]] - ] - - - type: asm_a64 - main_offset: 0x21FE43C - instructions: [ - [adrp, x8, $dr_target], - [ldr, d1, [x8, $dr_target]] - ] - - - type: asm_a64 - main_offset: 0x21FE7D4 - instructions: [ - [adrp, x8, $dr_target], - [ldr, d0, [x8, $dr_target]] - ] - ## REF: c8 aa 8a f2 28 07 f8 f2 - - - type: asm_a64 - main_offset: 0x21fE550 - instructions: [ - [adrp, x8, $dr_target], - [ldr, d0, [x8, $dr_target]], - [fneg, d0, d0] - ] - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100739018020000/B75E7D3DB78D69C1.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100739018020000/B75E7D3DB78D69C1.yaml deleted file mode 100644 index f44338f..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100739018020000/B75E7D3DB78D69C1.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# LEGO 2K Drive 1.17 -# BID: B75E7D3DB78D69C1 - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x957FD00, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x9D8BCF8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x9DB1E70, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010073A010430000/2972E95EEFF95144.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010073A010430000/2972E95EEFF95144.yaml deleted file mode 100644 index eb3909a..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010073A010430000/2972E95EEFF95144.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Taxi Driver - The Simulation 1.0.0 -# BID: 2972E95EEFF95144 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x6437618, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x64645B0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x586A018, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010073B010F6E000/2619FF1E39C93BAE.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010073B010F6E000/2619FF1E39C93BAE.yaml deleted file mode 100644 index 2d304b7..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010073B010F6E000/2619FF1E39C93BAE.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# Blue Fire 6.1.0 -# BID: 2619FF1E39C93BAE - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x60E2D38, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x59178E8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010073C01AF34000/2D99FA4793E426C3.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010073C01AF34000/2D99FA4793E426C3.yaml deleted file mode 100644 index 09b3060..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010073C01AF34000/2D99FA4793E426C3.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# LEGO Horizon Adventures 1.1.0 -# BID: 2D99FA4793E426C3 - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x90FC980, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0xA0CA138, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xA104AE0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010073C01AF34000/675538722EE1FACB.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010073C01AF34000/675538722EE1FACB.yaml deleted file mode 100644 index 86f6ec7..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010073C01AF34000/675538722EE1FACB.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# LEGO Horizon Adventures 1.2.0 -# BID: 675538722EE1FACB - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x9134990, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0xA103148, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xA13DAF0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010073C01AF34000/B3DFF885ABB66B5C.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010073C01AF34000/B3DFF885ABB66B5C.yaml deleted file mode 100644 index dc49244..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010073C01AF34000/B3DFF885ABB66B5C.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# LEGO Horizon Adventures 1.3.0 -# BID: B3DFF885ABB66B5C - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x913A990, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0xA109148, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xA143AF0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010073C01AF34000/C6F56735E3837278.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010073C01AF34000/C6F56735E3837278.yaml deleted file mode 100644 index 3aff76c..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010073C01AF34000/C6F56735E3837278.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# LEGO Horizon Adventures 1.4.0 -# BID: C6F56735E3837278 - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x914A990, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0xA119148, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xA153AF0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010073C01B7FE000/F294A4EBE966E8A9.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010073C01B7FE000/F294A4EBE966E8A9.yaml deleted file mode 100644 index 0113de2..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010073C01B7FE000/F294A4EBE966E8A9.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# The Smurfs 2: The Prisoner of the Green Stone 1.03.03/1.04 -# BID: F294A4EBE966E8A9 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x75B2628, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x75E02F8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6DE2CE8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010073F0197DA000/955DF07AA5F4497B.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010073F0197DA000/955DF07AA5F4497B.yaml deleted file mode 100644 index c2ba3f4..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010073F0197DA000/955DF07AA5F4497B.yaml +++ /dev/null @@ -1,32 +0,0 @@ -# Redemption Reapers 1.4.0 -# BID: 955DF07AA5F4497B - -ALL_FPS: - # Disable bUseFixedFrameRate to untie game speed from framerate - - - type: write - address: [MAIN, 0x751C478, 0x7A4] - address_unsafe: true - value_type: uint32 - # Default is 0x47, bUseFixedFrameRate |= 0x40 - # By writing 7 we are making sure that other flags are maintained: - # bAllowMultiThreadedAnimationUpdate |= 4 - # bOptimizeAnimBlueprintMemberVariableAccess |= 2 - # bCanBlueprintsTickByDefault |= 1 - value: 7 - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x74EF1C8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x751CD98, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100742007266000/A03FD278F67CDFD2.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100742007266000/A03FD278F67CDFD2.yaml deleted file mode 100644 index 32e825a..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100742007266000/A03FD278F67CDFD2.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# Monster Energy Supercross - The Official Videogame 1.0.2 -# BID: A03FD278F67CDFD2 - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x67FD408, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6551268, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010074200E910000/8E82D24A9B7504FB.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010074200E910000/8E82D24A9B7504FB.yaml deleted file mode 100644 index 5528c57..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010074200E910000/8E82D24A9B7504FB.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Super Street: Racer 1.0.1 -# BID: 8E82D24A9B7504FB - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x6B6E560, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2", "TruncDec(FRAMETIME_TARGET, 2)"] - # r.VSync - - - type: write - address: [MAIN, 0x632F270, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6B930B8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100748021808000/D1D3FFB94AB458B4.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100748021808000/D1D3FFB94AB458B4.yaml deleted file mode 100644 index 34d5c7e..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100748021808000/D1D3FFB94AB458B4.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# The Hundred Line -Last Defense Academy- US 1.1.2 -# BID: D1D3FFB94AB458B4 -# Last found function with REF: FD 7B BE A9 F3 0B 00 F9 FD 03 00 91 E0 03 01 2A stores some code related to playing above 60 FPS. Look at it if someone will have an issue playing above 60 FPS. - -unsafeCheck: true - -ALL_FPS: - # FPS Lock - # REF: 1B 41 00 00 - - - type: evaluate_write - address: [MAIN, 0xC95D10] - value_type: uint32 - value: FRAMETIME_TARGET * 1000 - # Unknown value, but set in the same function as FPS lock, so it may be important - # REF: 3C 00 00 00 01 00 00 00 00 00 00 00 - - - type: evaluate_write - address: [MAIN, 0xC95CDC] - value_type: uint32 - value: FPS_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010074C021210000/1A371F609F4B6172.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010074C021210000/1A371F609F4B6172.yaml deleted file mode 100644 index 981d57a..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010074C021210000/1A371F609F4B6172.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# Nice Day for Fishing 1.0.7 -# BID: 1A371F609F4B6172 - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x4D2C6C0, 0x48] - value_type: float - value: "1 / FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010074C021210000/1D9F49E321B8C939.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010074C021210000/1D9F49E321B8C939.yaml deleted file mode 100644 index 21c5035..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010074C021210000/1D9F49E321B8C939.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# Nice Day for Fishing 1.0.6 -# BID: 1D9F49E321B8C939 - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x4C273C0, 0x48] - value_type: float - value: "1 / FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010074F013262000/82D187FE9EF9BE92.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010074F013262000/82D187FE9EF9BE92.yaml deleted file mode 100644 index 2f530e9..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010074F013262000/82D187FE9EF9BE92.yaml +++ /dev/null @@ -1,89 +0,0 @@ -# Xenoblade Chronicles 3 2.2.0/2.2.1 -# BID: 82D187FE9EF9BE92 - -DECLARATIONS: - - - type: variable - name: dr_target - value_type: float - default_value: 0.0166666666 - evaluate: "(1 / FPS_TARGET) / VSYNC_TARGET" - - - type: const - name: default_frametime - value: 0x3d088889 - - - type: code - name: etherFix - instructions: [ - [ldr, x21, [x0]], - [mov, w8, $default_frametime], - [movk, w8, $default_frametime, 16], - [str, w8, [x21, 0x214]], - [ret] - ] -MASTER_WRITE: - # Redirect DR frametime target reading - - - type: asm_a64 - main_offset: 0x124F518 - instructions: [ - [adrp, x8, $dr_target], - [ldr, s0, [x8, $dr_target]] - ] - # Fix crash when gathering big amount of ether for > 30 FPS - - - type: asm_a64 - main_offset: 0x67360 - instructions: [ - [bl, _etherFix()] - ] -ALL_FPS: - # vsync - - - type: evaluate_write - address: [MAIN, 0x1B42DB0] - value_type: int32 - value: [VSYNC_TARGET, VSYNC_TARGET] - # UI speed - - - type: evaluate_write - address: [MAIN, 0x1BA1A90, 128] - address_unsafe: true - value_type: float - value: "1 / FPS_TARGET" - - - type: compare - compare_address: [MAIN, 0x1BA1A98] - compare_type: "!=" - compare_value_type: int8 - compare_value: 0 - address: [MAIN, 0x1B42DB0] - value_type: int32 - value: [2, 2] - - - type: compare - compare_address: [MAIN, 0x1BA1A98] - compare_type: "!=" - compare_value_type: int8 - compare_value: 0 - address: [VARIABLE, dr_target] - value: 0.0166666666 - - - type: compare - compare_address: [MAIN, 0x1BA1A98] - compare_type: "!=" - compare_value_type: int8 - compare_value: 0 - address: [MAIN, 0x1BA1A90, 128] - address_unsafe: true - value_type: float - value: 0.0333333333 - - - type: compare - compare_address: [MAIN, 0x1BA1A98] - compare_type: "!=" - compare_value_type: int8 - compare_value: 0 - value_type: refresh_rate - value: 30 diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010075000C608000/F1D71307616AB7E4.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010075000C608000/F1D71307616AB7E4.yaml deleted file mode 100644 index c48220f..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010075000C608000/F1D71307616AB7E4.yaml +++ /dev/null @@ -1,50 +0,0 @@ -# Red Faction Guerrilla Re-Mars-tered 1.0.0 -# BID: F1D71307616AB7E4 -# I am editing DR math to use GPU time instead of CPU time which relies on that we never hit display refresh rate - -DECLARATIONS: - - - type: variable - name: dr_frametime_max - value_type: float - default_value: 0.03448276 - evaluate: "(1 / FPS_TARGET) - 0.0001" - - - type: variable - name: dr_frametime_min - value_type: float - default_value: 0.033333333 - evaluate: "0.9 / FPS_TARGET" -MASTER_WRITE: - - - type: asm_a64 - main_offset: 0x119A20 - instructions: [ - [nop] - ] - - - type: asm_a64 - main_offset: 0x119A30 - instructions: [ - [adrp, x9, $dr_frametime_max], - [ldr, s2, [x22, 0x14]], - [ldr, s3, [x9, $dr_frametime_max]] - ] - - - type: asm_a64 - main_offset: 0x119A7C - instructions: [ - [nop], - [nop], - [nop], - [nop], - [nop] - ] - - - type: asm_a64 - main_offset: 0x119A98 - instructions: [ - [adrp, x9, $dr_frametime_min], - [ldr, s0, [x22, 0x14]], - [ldr, s1, [x9, $dr_frametime_min]] - ] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010075101EF84000/109D974E180A5AA1.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010075101EF84000/109D974E180A5AA1.yaml deleted file mode 100644 index 836c1dc..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010075101EF84000/109D974E180A5AA1.yaml +++ /dev/null @@ -1,32 +0,0 @@ -# Stray 1.6.0 -# BID: 109D974E180A5AA1 - -ALL_FPS: - # Disable bUseFixedFrameRate - - - type: write - address: [MAIN, 0x5DC7368, 0x7A4] - address_unsafe: true - value_type: int32 - value: 7 - # r.VSync - - - type: write - address: [MAIN, 0x55CB068, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x5D99F08, 0] - value_type: float - value: ["0.99 * FRAMETIME_TARGET", "0.99 * FRAMETIME_TARGET"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x5DC7C88, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100755017EE0000/061A7341077C0974.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100755017EE0000/061A7341077C0974.yaml deleted file mode 100644 index 00fad25..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100755017EE0000/061A7341077C0974.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# FANTASY LIFE i: The Girl Who Steals Time 1.4.0 -# BID: 061A7341077C0974 - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xAD71938, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x9D51728, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100755017EE0000/546820C12D88850D.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100755017EE0000/546820C12D88850D.yaml deleted file mode 100644 index 5b6bb9f..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100755017EE0000/546820C12D88850D.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# FANTASY LIFE i: The Girl Who Steals Time 1.3.3 -# BID: 546820C12D88850D - -unsafeCheck: true - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xAD09938, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x9CE9728, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100755017EE0000/66BC954F5323014C.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100755017EE0000/66BC954F5323014C.yaml deleted file mode 100644 index 5ddec29..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100755017EE0000/66BC954F5323014C.yaml +++ /dev/null @@ -1,26 +0,0 @@ -# FANTASY LIFE i: The Girl Who Steals Time 1.2.1 -# BID: 66BC954F5323014C - -ALL_FPS: - # Disable FixedFrameRate - - - type: write - address: [MAIN, 0xACC63E0, 0xAA4] - address_unsafe: true - value_type: uint32 - value: 7 - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xACC7938, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x9CA7728, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100755017EE0000/74BCAC96835DB9AE.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100755017EE0000/74BCAC96835DB9AE.yaml deleted file mode 100644 index cadbd1b..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100755017EE0000/74BCAC96835DB9AE.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# FANTASY LIFE i: The Girl Who Steals Time 1.5.0 -# BID: 74BCAC96835DB9AE - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xAE6F938, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x9E4F728, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100755017EE0000/9DBA6AA32721CAB9.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100755017EE0000/9DBA6AA32721CAB9.yaml deleted file mode 100644 index a50b2b4..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100755017EE0000/9DBA6AA32721CAB9.yaml +++ /dev/null @@ -1,26 +0,0 @@ -# FANTASY LIFE i: The Girl Who Steals Time 1.3.0 -# BID: 9DBA6AA32721CAB9 - -ALL_FPS: - # Disable FixedFrameRate - - - type: write - address: [MAIN, 0xACF23E0, 0xAA4] - address_unsafe: true - value_type: uint32 - value: 7 - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xACF3938, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x9CD3728, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100755017EE0000/A697413E1DA7851A.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100755017EE0000/A697413E1DA7851A.yaml deleted file mode 100644 index 19547d7..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100755017EE0000/A697413E1DA7851A.yaml +++ /dev/null @@ -1,26 +0,0 @@ -# FANTASY LIFE i: The Girl Who Steals Time 1.1.0 -# BID: A697413E1DA7851A - -ALL_FPS: - # Disable FixedFrameRate - - - type: write - address: [MAIN, 0xAB873E0, 0xAA4] - address_unsafe: true - value_type: uint32 - value: 7 - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xAB88938, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x9B68728, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100755017EE0000/C561C6BED2F0B348.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100755017EE0000/C561C6BED2F0B348.yaml deleted file mode 100644 index 3498ab1..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100755017EE0000/C561C6BED2F0B348.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# FANTASY LIFE i: The Girl Who Steals Time 2.0.0 -# BID: C561C6BED2F0B348 - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xB58C938, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0xA56C728, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010075A00BA14000/6888027D61CF603D.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010075A00BA14000/6888027D61CF603D.yaml deleted file mode 100644 index a783abb..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010075A00BA14000/6888027D61CF603D.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# Sniper Elite 3 Ultimate Edition 1.0.1 -# BID: 6888027D61CF603D - -unsafeCheck: true - -ALL_FPS: - # Dynamic Resolution frame time target - - - type: evaluate_write - address: [MAIN, 0xF39748, 4] - value_type: float - value: "0.9 * FRAMETIME_TARGET" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100760020BBA000/734C4A6ED33AE189.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100760020BBA000/734C4A6ED33AE189.yaml deleted file mode 100644 index 015c5f7..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100760020BBA000/734C4A6ED33AE189.yaml +++ /dev/null @@ -1,36 +0,0 @@ -# みんなのGOLF WORLD 1.1.3 -# BID: 734C4A6ED33AE189 -# Changed frametime target value math formula because default one sucks at 60 FPS target - -DECLARATIONS: - - - type: variable - name: dr_frametime_max - value_type: double - default_value: 40 - evaluate: "0.9 * FRAMETIME_TARGET" - - - type: variable - name: dr_frametime_min - value_type: double - default_value: 33.3333333333 - evaluate: "(0.9 * FRAMETIME_TARGET) - 6" -MASTER_WRITE: - # REF: DynamicResolution::Compute() - - - type: asm_a64 - main_offset: 0x3925998 - instructions: [ - [adrp, x10, $dr_frametime_max], - [ldr, d1, [x10, $dr_frametime_max]], - [nop] - ] - - - type: asm_a64 - main_offset: 0x3925A6C - instructions: [ - [adrp, x10, $dr_frametime_min], - [ldr, d1, [x10, $dr_frametime_min]], - [nop], - [nop] - ] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100760020BBA000/8E3D8436FCAA4C78.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100760020BBA000/8E3D8436FCAA4C78.yaml deleted file mode 100644 index 3ee1c90..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100760020BBA000/8E3D8436FCAA4C78.yaml +++ /dev/null @@ -1,37 +0,0 @@ -# みんなのGOLF WORLD 1.1.4 -# BID: 8E3D8436FCAA4C78 -# Changed frametime target value math formula because default one sucks at 60 FPS target - -DECLARATIONS: - - - type: variable - name: dr_frametime_max - value_type: double - default_value: 40 - evaluate: "0.9 * FRAMETIME_TARGET" - - - type: variable - name: dr_frametime_min - value_type: double - default_value: 33.3333333333 - evaluate: "(0.9 * FRAMETIME_TARGET) - 6" -MASTER_WRITE: - # REF: 0a 00 a4 d2 8a 08 e8 f2 41 01 67 9e - - - type: asm_a64 - main_offset: 0x3936328 - instructions: [ - [adrp, x10, $dr_frametime_max], - [ldr, d1, [x10, $dr_frametime_max]], - [nop] - ] - - - # REF: 00 0d 40 fd 0a 00 b8 d2 - type: asm_a64 - main_offset: 0x39363FC - instructions: [ - [adrp, x10, $dr_frametime_min], - [ldr, d1, [x10, $dr_frametime_min]], - [nop], - [nop] - ] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010076F00E9C8000/4BC4A8A814FD46A4.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010076F00E9C8000/4BC4A8A814FD46A4.yaml deleted file mode 100644 index 4446ecb..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010076F00E9C8000/4BC4A8A814FD46A4.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# The Witcher 3: Wild Hunt - Complete Edition 4.04b -# BID: 4BC4A8A814FD46A4 - -ALL_FPS: - # DRGameTargetFrameTimeInMs - - - type: evaluate_write - address: [MAIN, 0x41312B4] - value_type: float - value: "0.945 * FRAMETIME_TARGET" - # DRCinematicTargetFrameTimeInMs - - - type: evaluate_write - address: [MAIN, 0x41312E4] - value_type: float - value: "0.945 * FRAMETIME_TARGET" - # LimitFPS - - - type: evaluate_write - address: [MAIN, 0x411DCFC] - value_type: int32 - value: FPS_LOCK_TARGET - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100770008DD8000/FB08F1D20FD1204F.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100770008DD8000/FB08F1D20FD1204F.yaml deleted file mode 100644 index 1c172f1..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100770008DD8000/FB08F1D20FD1204F.yaml +++ /dev/null @@ -1,11 +0,0 @@ -# Monster Hunter Generations Ultimate 1.4.0 -# BID: FB08F1D20FD1204F - -unsafeCheck: true - -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x18A6210, 0x243C] - value_type: float - value: FPS_LOCK_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010077A012A5C000/F5ECE696120B65B3.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010077A012A5C000/F5ECE696120B65B3.yaml deleted file mode 100644 index 6873ab0..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010077A012A5C000/F5ECE696120B65B3.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Paradise Lost 1.0.0 -# BID: F5ECE696120B65B3 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget ((1000/FPS) * 0.9) - - - type: evaluate_write - address: [MAIN, 0x56A9C78, 0] - value_type: float - value: ["FRAMETIME_TARGET * 0.9", "FRAMETIME_TARGET * 0.9"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x56D3EA0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010077B00E046000/D2775FAFCF4835CB.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010077B00E046000/D2775FAFCF4835CB.yaml deleted file mode 100644 index f3b2868..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010077B00E046000/D2775FAFCF4835CB.yaml +++ /dev/null @@ -1,31 +0,0 @@ -# Spyro Reignited Trilogy 1.01 -# BID: D2775FAFCF4835CB - -ALL_FPS: - # Disable bSmoothFrameRate and bUseFixedFrameRate to untie game speed from framerate - - - type: write - address: [MAIN, 0x69DA1A8, 0x778] - address_unsafe: true - value_type: uint32 - # Default is 0x67, bSmoothFrameRate |= 0x20, bUseFixedFrameRate |= 0x40 - # By writing 7 we are making sure that other flags are maintained: - # bAllowMultiThreadedAnimationUpdate |= 4 - # bOptimizeAnimBlueprintMemberVariableAccess |= 2 - # bCanBlueprintsTickByDefault |= 1 - value: 7 - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 1 decimal - - - type: evaluate_write - address: [MAIN, 0x69B6780, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x69DAC78, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100781020710000/1FF44387A22D39F8.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100781020710000/1FF44387A22D39F8.yaml deleted file mode 100644 index 1b21071..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100781020710000/1FF44387A22D39F8.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# NINJA GAIDEN: Ragebound 1.0.6 -# BID: 1FF44387A22D39F8 - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x6126A40, 0x48] - value_type: float - value: "1 / FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100781020710000/48D35EF3C7EFBF5F.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100781020710000/48D35EF3C7EFBF5F.yaml deleted file mode 100644 index 2054643..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100781020710000/48D35EF3C7EFBF5F.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# NINJA GAIDEN: Ragebound 1.0.4 -# BID: 48D35EF3C7EFBF5F - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x61216C0, 0x48] - value_type: float - value: "1 / FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100781020710000/C7BD9BFC5F202073.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100781020710000/C7BD9BFC5F202073.yaml deleted file mode 100644 index 3861bf9..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100781020710000/C7BD9BFC5F202073.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# NINJA GAIDEN: Ragebound 1.0.3 -# BID: C7BD9BFC5F202073 - -unsafeCheck: true - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x58410E0, 0x48] - value_type: float - value: "1 / FPS_TARGET" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100781020710000/CEDA530B146C0260.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100781020710000/CEDA530B146C0260.yaml deleted file mode 100644 index f00faf0..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100781020710000/CEDA530B146C0260.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# NINJA GAIDEN: Ragebound 1.0.5 -# BID: CEDA530B146C0260 - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x6125900, 0x48] - value_type: float - value: "1 / FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01007820196A6000/37531419DA7654EC.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01007820196A6000/37531419DA7654EC.yaml deleted file mode 100644 index 5eac9cf..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01007820196A6000/37531419DA7654EC.yaml +++ /dev/null @@ -1,35 +0,0 @@ -# Red Dead Redemption 1.0.4-1.0.6 -# BID: 37531419DA7654EC - -DECLARATIONS: - - - type: variable - name: dr_frametime_target - value_type: float - default_value: 31.415926 - evaluate: "0.94247778 * FRAMETIME_TARGET" - - - type: code - name: getDrTarget - instructions: [ - [adrp, x20, $dr_frametime_target], - [ldr, s2, [x20, $dr_frametime_target]], - [ret] - ] -MASTER_WRITE: - # REF: 22 BC 22 1E 21 93 45 BD - # sagRenderer::UpdateDynamicResolutionScaling() - - - type: asm_a64 - main_offset: 0x139647C - instructions: [ - [bl, _getDrTarget()] - ] -ALL_FPS: - # rage::grcDevice::sm_FrameLock - # I guess just in case? - - - type: evaluate_write - address: [MAIN, 0x20DBA20] - value_type: uint32 - value: VSYNC_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010078C01769A000/7BA282E94D34C620.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010078C01769A000/7BA282E94D34C620.yaml deleted file mode 100644 index a9b709b..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010078C01769A000/7BA282E94D34C620.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Kao the Kangaroo US 1.5 -# BID: 7BA282E94D34C620 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget = (1000/FPS) cutted to 1 decimal - - - type: evaluate_write - address: [MAIN, 0x71160E0, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x71C39F0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x696CDD8, 0] - value_type: int32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010078D000F88000/1B58983BDFAE165A.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010078D000F88000/1B58983BDFAE165A.yaml deleted file mode 100644 index f1c48e9..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010078D000F88000/1B58983BDFAE165A.yaml +++ /dev/null @@ -1,47 +0,0 @@ -# DRAGON BALL XENOVERSE 2 FOR NINTENDO SWITCH 1.23.00 -# BID: 1B58983BDFAE165A -# Double buffer is hardcoded in class, getting triple buffer is hard. -# Some graphical effects like aura have wrong speed outside of 15, 20, 30 and 60 FPS - -unsafeCheck: true - -ALL_FPS: - # Search those in Edizon by searching for 1/60 in title menu, then 1/30 when FPS lock is applied. - # FPS Lock - - - type: write - address: [MAIN, 0x4AE9D78, 0x698] - value_type: float - value: 0.0 - # Unknown - - - type: write - address: [MAIN, 0x4AE9D78, 0x6A4] - value_type: float - value: 0.0 - # Game Battle Speed Factor - - - type: evaluate_write - address: [MAIN, 0x4AE9D78, 0x6B0] - value_type: uint32 - value: VSYNC_TARGET - # Cutscenes Speed Factor - - - type: evaluate_write - address: [MAIN, 0x4AE9D78, 0x6B4] - value_type: uint32 - value: VSYNC_TARGET - # Target Speed - # REF: E9 03 00 32 09 01 00 39 C0 03 5F D6, first result, LDR instruction - - - type: evaluate_write - address: [MAIN, 0x24151D0] - value_type: float - value: "(1 / FPS_TARGET) / VSYNC_TARGET" - # Dynamic Resolution FPS Target - # REF: 16 4E A8 52 F7 03 60 B2, LDR above that - - - type: evaluate_write - address: [MAIN, 0x23F53C0, 0x1844] - value_type: float - value: FPS_TARGET diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010078D000F88000/56405C9D6C8C0A6A.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010078D000F88000/56405C9D6C8C0A6A.yaml deleted file mode 100644 index 167c34f..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010078D000F88000/56405C9D6C8C0A6A.yaml +++ /dev/null @@ -1,50 +0,0 @@ -# DRAGON BALL XENOVERSE 2 FOR NINTENDO SWITCH 1.22.02 -# BID: 56405C9D6C8C0A6A -# Double buffer is hardcoded in class, getting triple buffer is hard. -# Some graphical effects like aura have wrong speed outside of 15, 20, 30 and 60 FPS - -ALL_FPS: - # Search those in Edizon by searching for 1/60 in title menu, then 1/30 when FPS lock is applied. - # FPS Lock - - - type: write - address: [MAIN, 0x4AD6D78, 0x698] - address_unsafe: true - value_type: float - value: 0.0 - # Unknown - - - type: write - address: [MAIN, 0x4AD6D78, 0x6A4] - address_unsafe: true - value_type: float - value: 0.0 - # Game Battle Speed Factor - - - type: evaluate_write - address: [MAIN, 0x4AD6D78, 0x6B0] - address_unsafe: true - value_type: uint32 - value: VSYNC_TARGET - # Cutscenes Speed Factor - - - type: evaluate_write - address: [MAIN, 0x4AD6D78, 0x6B4] - address_unsafe: true - value_type: uint32 - value: VSYNC_TARGET - # Target Speed - # REF: E9 03 00 32 09 01 00 39 C0 03 5F D6, first result, LDR instruction - - - type: evaluate_write - address: [MAIN, 0x2402190] - value_type: float - value: "(1 / FPS_TARGET) / VSYNC_TARGET" - # Dynamic Resolution FPS Target - # REF: 62 18 22 1E 61 2A 43 BD 41 08 21 1E 00 20 21 1E, is divided by rodata 60 - - - type: evaluate_write - address: [MAIN, 0x24044B0, 0x754] - address_unsafe: true - value_type: float - value: "FPS_TARGET" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010078D000F88000/60EF5AF2F6E5231F.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010078D000F88000/60EF5AF2F6E5231F.yaml deleted file mode 100644 index 064e0e1..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010078D000F88000/60EF5AF2F6E5231F.yaml +++ /dev/null @@ -1,50 +0,0 @@ -# DRAGON BALL XENOVERSE 2 FOR NINTENDO SWITCH 1.25.02 -# BID: 60EF5AF2F6E5231F -# Double buffer is hardcoded in class, getting triple buffer is hard. -# Some graphical effects like aura have wrong speed outside of 15, 20, 30 and 60 FPS - -ALL_FPS: - # Search those in Edizon by searching for 1/60 in title menu, then 1/30 when FPS lock is applied. - # FPS Lock - - - type: write - address: [MAIN, 0x4B26AD8, 0x698] - address_unsafe: true - value_type: float - value: 0.0 - # Unknown - - - type: write - address: [MAIN, 0x4B26AD8, 0x6A4] - address_unsafe: true - value_type: float - value: 0.0 - # Game Battle Speed Factor - - - type: evaluate_write - address: [MAIN, 0x4B26AD8, 0x6B0] - address_unsafe: true - value_type: uint32 - value: VSYNC_TARGET - # Cutscenes Speed Factor - - - type: evaluate_write - address: [MAIN, 0x4B26AD8, 0x6B4] - address_unsafe: true - value_type: uint32 - value: VSYNC_TARGET - # Target Speed - # REF: E9 03 00 32 09 01 00 39 C0 03 5F D6, first result, LDR instruction - - - type: evaluate_write - address: [MAIN, 0x244E090] - value_type: float - value: "(1 / FPS_TARGET) * VSYNC_TARGET" - # Dynamic Resolution FPS Target - # REF: 16 4E A8 52 F7 03 60 B2, first ADRP + LDR above it - - - type: evaluate_write - address: [MAIN, 0x242A3C8, 0x1844] - address_unsafe: true - value_type: float - value: "FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010078D000F88000/7640CE319C043D56.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010078D000F88000/7640CE319C043D56.yaml deleted file mode 100644 index a1a413e..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010078D000F88000/7640CE319C043D56.yaml +++ /dev/null @@ -1,50 +0,0 @@ -# DRAGON BALL XENOVERSE 2 FOR NINTENDO SWITCH 1.24.00 -# BID: 7640CE319C043D56 -# Double buffer is hardcoded in class, getting triple buffer is hard. -# Some graphical effects like aura have wrong speed outside of 15, 20, 30 and 60 FPS - -ALL_FPS: - # Search those in Edizon by searching for 1/60 in title menu, then 1/30 when FPS lock is applied. - # FPS Lock - - - type: write - address: [MAIN, 0x4AC8AD8, 0x698] - address_unsafe: true - value_type: float - value: 0.0 - # Unknown - - - type: write - address: [MAIN, 0x4AC8AD8, 0x6A4] - address_unsafe: true - value_type: float - value: 0.0 - # Game Battle Speed Factor - - - type: evaluate_write - address: [MAIN, 0x4AC8AD8, 0x6B0] - address_unsafe: true - value_type: uint32 - value: VSYNC_TARGET - # Cutscenes Speed Factor - - - type: evaluate_write - address: [MAIN, 0x4AC8AD8, 0x6B4] - address_unsafe: true - value_type: uint32 - value: VSYNC_TARGET - # Target Speed - # REF: E9 03 00 32 09 01 00 39 C0 03 5F D6, first result, LDR instruction - - - type: evaluate_write - address: [MAIN, 0x23F51C0] - value_type: float - value: "(1 / FPS_TARGET) * VSYNC_TARGET" - # Dynamic Resolution FPS Target - # REF: 16 4E A8 52 F7 03 60 B2, first ADRP + LDR above it - - - type: evaluate_write - address: [MAIN, 0x23D53C8, 0x1844] - address_unsafe: true - value_type: float - value: "FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010078D000F88000/81E15238E2B6AABD.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010078D000F88000/81E15238E2B6AABD.yaml deleted file mode 100644 index 3ad6e78..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010078D000F88000/81E15238E2B6AABD.yaml +++ /dev/null @@ -1,52 +0,0 @@ -# DRAGON BALL XENOVERSE 2 FOR NINTENDO SWITCH 1.25.01 -# BID: 81E15238E2B6AABD -# Double buffer is hardcoded in class, getting triple buffer is hard. -# Some graphical effects like aura have wrong speed outside of 15, 20, 30 and 60 FPS - -ALL_FPS: - # Search those in Edizon by searching for 1/60 in title menu, then 1/30 when FPS lock is applied. - # FPS Lock - - - type: write - address: [MAIN, 0x4B26AD8, 0x698] - address_unsafe: true - value_type: float - value: 0.0 - # Unknown - - - type: write - address: [MAIN, 0x4B26AD8, 0x6A4] - address_unsafe: true - value_type: float - value: 0.0 - # Game Battle Speed Factor - - - type: evaluate_write - address: [MAIN, 0x4B26AD8, 0x6B0] - address_unsafe: true - value_type: uint32 - value: VSYNC_TARGET - # Cutscenes Speed Factor - - - type: evaluate_write - address: [MAIN, 0x4B26AD8, 0x6B4] - address_unsafe: true - value_type: uint32 - value: VSYNC_TARGET - # Target Speed - # REF: E9 03 00 32 09 01 00 39 C0 03 5F D6, first result, LDR instruction - - - type: evaluate_write - address: [MAIN, 0x244E090] - value_type: float - value: "(1 / FPS_TARGET) * VSYNC_TARGET" - # Dynamic Resolution FPS Target - # REF: 16 4E A8 52 F7 03 60 B2, first ADRP + LDR above it - - - type: evaluate_write - address: [MAIN, 0x242A3C8, 0x1844] - address_unsafe: true - value_type: float - - value: "FPS_TARGET" - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010078D000F88000/8263E738648A23E3.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010078D000F88000/8263E738648A23E3.yaml deleted file mode 100644 index e6deda2..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010078D000F88000/8263E738648A23E3.yaml +++ /dev/null @@ -1,50 +0,0 @@ -# DRAGON BALL XENOVERSE 2 FOR NINTENDO SWITCH 1.23.03 -# BID: 8263E738648A23E3 -# Double buffer is hardcoded in class, getting triple buffer is hard. -# Some graphical effects like aura have wrong speed outside of 15, 20, 30 and 60 FPS - -ALL_FPS: - # Search those in Edizon by searching for 1/60 in title menu, then 1/30 when FPS lock is applied. - # FPS Lock - - - type: write - address: [MAIN, 0x4AE9D78, 0x698] - address_unsafe: true - value_type: float - value: 0.0 - # Unknown - - - type: write - address: [MAIN, 0x4AE9D78, 0x6A4] - address_unsafe: true - value_type: float - value: 0.0 - # Game Battle Speed Factor - - - type: evaluate_write - address: [MAIN, 0x4AE9D78, 0x6B0] - address_unsafe: true - value_type: uint32 - value: VSYNC_TARGET - # Cutscenes Speed Factor - - - type: evaluate_write - address: [MAIN, 0x4AE9D78, 0x6B4] - address_unsafe: true - value_type: uint32 - value: VSYNC_TARGET - # Target Speed - # REF: E9 03 00 32 09 01 00 39 C0 03 5F D6, first result, LDR instruction - - - type: evaluate_write - address: [MAIN, 0x24151D0] - value_type: float - value: "(1 / FPS_TARGET) * VSYNC_TARGET" - # Dynamic Resolution FPS Target - # REF: 16 4E A8 52 F7 03 60 B2, first ADRP + LDR above it - - - type: evaluate_write - address: [MAIN, 0x23F53C0, 0x1844] - address_unsafe: true - value_type: float - value: "FPS_TARGET" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010078D000F88000/82C912DDD4663022.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010078D000F88000/82C912DDD4663022.yaml deleted file mode 100644 index 8dcaef3..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010078D000F88000/82C912DDD4663022.yaml +++ /dev/null @@ -1,50 +0,0 @@ -# DRAGON BALL XENOVERSE 2 FOR NINTENDO SWITCH 1.24.03 -# BID: 82C912DDD4663022 -# Double buffer is hardcoded in class, getting triple buffer is hard. -# Some graphical effects like aura have wrong speed outside of 15, 20, 30 and 60 FPS - -ALL_FPS: - # Search those in Edizon by searching for 1/60 in title menu, then 1/30 when FPS lock is applied. - # FPS Lock - - - type: write - address: [MAIN, 0x4AC8AD8, 0x698] - address_unsafe: true - value_type: float - value: 0.0 - # Unknown - - - type: write - address: [MAIN, 0x4AC8AD8, 0x6A4] - address_unsafe: true - value_type: float - value: 0.0 - # Game Battle Speed Factor - - - type: evaluate_write - address: [MAIN, 0x4AC8AD8, 0x6B0] - address_unsafe: true - value_type: uint32 - value: VSYNC_TARGET - # Cutscenes Speed Factor - - - type: evaluate_write - address: [MAIN, 0x4AC8AD8, 0x6B4] - address_unsafe: true - value_type: uint32 - value: VSYNC_TARGET - # Target Speed - # REF: E9 03 00 32 09 01 00 39 C0 03 5F D6, first result, LDR instruction - - - type: evaluate_write - address: [MAIN, 0x23F51C0] - value_type: float - value: "(1 / FPS_TARGET) * VSYNC_TARGET" - # Dynamic Resolution FPS Target - # REF: 16 4E A8 52 F7 03 60 B2, first ADRP + LDR above it - - - type: evaluate_write - address: [MAIN, 0x23D53C8, 0x1844] - address_unsafe: true - value_type: float - value: "FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010078D010BD6000/DFC7E8979528DE44.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010078D010BD6000/DFC7E8979528DE44.yaml deleted file mode 100644 index 9b62a96..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010078D010BD6000/DFC7E8979528DE44.yaml +++ /dev/null @@ -1,32 +0,0 @@ -# メイドインアビス 闇を目指した連星 1.0.3 -# BID: DFC7E8979528DE44 - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x657D2C8, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x6D2E330, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # r.DynamicRes.TargetedGPUHeadRoomPercentage - # Because game is using 5.0 while default is 10.0 and with their value reaching target FPS above 30 is hard - - - type: write - address: [MAIN, 0x6D2E348, 0] - value_type: float - value: [10.0, 10.0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6D58E68, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010079500FD5C000/6B0B26802F0DAAAF.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010079500FD5C000/6B0B26802F0DAAAF.yaml deleted file mode 100644 index 478cee6..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010079500FD5C000/6B0B26802F0DAAAF.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# WRC 8 FIA 월드 랠리 챔피언십 1.4.0 -# BID: 6B0B26802F0DAAAF - -ALL_FPS: - # OptimalFrameDuration_ms = (1000/FPS) - (0.07 * (1000/30) - - - type: evaluate_write - address: [MAIN, 0x22F50FC] - value_type: float - value: "FRAMETIME_TARGET - (0.07 * (1000/30))" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010079C017F5E001/F47C697C2B59443B.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010079C017F5E001/F47C697C2B59443B.yaml deleted file mode 100644 index 3a7f172..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010079C017F5E001/F47C697C2B59443B.yaml +++ /dev/null @@ -1,18 +0,0 @@ -# Lara Croft and the Temple of Osiris 1.1_65791 -# BID: F47C697C2B59443B - -MASTER_WRITE: - # Disable internal FPS lock - # EnableFramerateManager - - - type: bytes - main_offset: 0x1C3A941 - value_type: uint8 - value: 0x30 -ALL_FPS: - # DynamicResolutionScaling\FPSTarget - - - type: evaluate_write - address: [MAIN, 0x41416F0, 0x28] - value_type: float - value: FPS_TARGET diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010079C017F5E002/BD5CD5189BC90093.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010079C017F5E002/BD5CD5189BC90093.yaml deleted file mode 100644 index 595b5ef..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010079C017F5E002/BD5CD5189BC90093.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# Lara Croft and the Guardian of Light 1.1_65791 -# BID: BD5CD5189BC90093 - -ALL_FPS: - # DynamicResolutionScaling\FPSTarget - - - type: evaluate_write - address: [MAIN, 0x1EAE7E8, 0x28] - value_type: float - value: FPS_TARGET diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010079C01CFA6000/D1D3FFB94AB458B4.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010079C01CFA6000/D1D3FFB94AB458B4.yaml deleted file mode 100644 index 4cb8771..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010079C01CFA6000/D1D3FFB94AB458B4.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# HUNDRED LINE -最終防衛学園- 1.1.2 -# BID: D1D3FFB94AB458B4 -# Last found function with REF: FD 7B BE A9 F3 0B 00 F9 FD 03 00 91 E0 03 01 2A stores some code related to playing above 60 FPS. Look at it if someone will have an issue playing above 60 FPS. - -unsafeCheck: true - -ALL_FPS: - # FPS Lock - # REF: 1B 41 00 00 - - - type: evaluate_write - address: [MAIN, 0xC95D10] - value_type: uint32 - value: FRAMETIME_TARGET * 1000 - # Unknown value, but set in the same function as FPS lock, so it may be important - # REF: 3C 00 00 00 01 00 00 00 00 00 00 00 - - - type: evaluate_write - address: [MAIN, 0xC95CDC] - value_type: uint32 - value: FPS_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01007A3009184000/928EFE2954F68055.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01007A3009184000/928EFE2954F68055.yaml deleted file mode 100644 index 6aba755..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01007A3009184000/928EFE2954F68055.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Princess Peach Showtime! 1.0.0 -# BID: 928EFE2954F68055 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 1 decimal - - - type: evaluate_write - address: [MAIN, 0xAE825E8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xAEB02A8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0xA6B2D18, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01007A700A87C000/88C035C2E44076ED.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01007A700A87C000/88C035C2E44076ED.yaml deleted file mode 100644 index 6893d32..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01007A700A87C000/88C035C2E44076ED.yaml +++ /dev/null @@ -1,15 +0,0 @@ -# The Long Dark 2.40.153678 -# BID: 88C035C2E44076ED - -ALL_FPS: - # TLD.Rendering.DynamicResolutionHelper_TypeInfo - - - type: evaluate_write - address: [MAIN, 0x6B71BB8, 0xB8, 0x48] - value_type: uint32 - value: FPS_TARGET - - - type: evaluate_write - address: [MAIN, 0x6B71BB8, 0xB8, 0x50] - value_type: double - value: FRAMETIME_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01007A700A87C001/F7A872504BDA3100.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01007A700A87C001/F7A872504BDA3100.yaml deleted file mode 100644 index b69093e..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01007A700A87C001/F7A872504BDA3100.yaml +++ /dev/null @@ -1,15 +0,0 @@ -# The Long Dark: Tales from the Far Territory 2.40.153678 -# BID: F7A872504BDA3100 - -ALL_FPS: - # TLD.Rendering.DynamicResolutionHelper_TypeInfo - - - type: evaluate_write - address: [MAIN, 0x6495950, 0xB8, 0x48] - value_type: uint32 - value: FPS_TARGET - - - type: evaluate_write - address: [MAIN, 0x6495950, 0xB8, 0x50] - value_type: double - value: FRAMETIME_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01007B0017C90000/55DFB4A664D8B596.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01007B0017C90000/55DFB4A664D8B596.yaml deleted file mode 100644 index 8ce1a86..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01007B0017C90000/55DFB4A664D8B596.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Morbid: The Lords of Ire 1.02 -# BID: 55DFB4A664D8B596 - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x5DAC3D8, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x657FEE8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x65AD888, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01007B301CFBE000/7E20C8548DC38F3A.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01007B301CFBE000/7E20C8548DC38F3A.yaml deleted file mode 100644 index dbad759..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01007B301CFBE000/7E20C8548DC38F3A.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# Warhammer 40,000: Dakka Squadron 1.0.2 -# BID: 7E20C8548DC38F3A - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x4C7D408, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x5810650, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01007B5017A12000/4A5D86DA05A4E7BB.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01007B5017A12000/4A5D86DA05A4E7BB.yaml deleted file mode 100644 index 89909bc..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01007B5017A12000/4A5D86DA05A4E7BB.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Sifu 0.1 (internally: 1.26_6.661) -# BID: 4A5D86DA05A4E7BB - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x9798700, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # r.VSync - - - type: write - address: [MAIN, 0x90055A8, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x97BD5F8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01007BE01FCC2000/BDDD7E8FA07C8C75.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01007BE01FCC2000/BDDD7E8FA07C8C75.yaml deleted file mode 100644 index 944d6b3..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01007BE01FCC2000/BDDD7E8FA07C8C75.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Achilles Legends Untold 1.0.1/1.0.2 -# BID: BDDD7E8FA07C8C75 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x6967B08, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6995508, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6199738, 0] - value_type: int32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01007BF01A86A000/21502D0863ED6F58.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01007BF01A86A000/21502D0863ED6F58.yaml deleted file mode 100644 index 97b3f5d..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01007BF01A86A000/21502D0863ED6F58.yaml +++ /dev/null @@ -1,33 +0,0 @@ -# 真・女神転生Ⅴ Vengeance 1.0.3 -# BID: 21502D0863ED6F58 - -MASTER_WRITE: - # Block from reapplying t.MaxFPS by game, REF: 01 E4 00 2F 00 AC 21 1E 08 00 40 F9 08 75 41 F9, nop BLR X8 after LDR X8, [X8,#0x2E8] - - - type: asm_a64 - main_offset: 0x3780C20 - instructions: [ - [nop] - ] -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x7AAFBB8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # r.VSync - - - type: write - address: [MAIN, 0x7273AD0, 0] - value_type: uint32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7AD5858, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01007D70145F4000/E8418C6B4BDCC1EE.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01007D70145F4000/E8418C6B4BDCC1EE.yaml deleted file mode 100644 index 72a5ae3..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01007D70145F4000/E8418C6B4BDCC1EE.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Maneater `Asia` 1.02 -# BID: E8418C6B4BDCC1EE - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x6FF8FB0, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x70241F0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6858620, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01007DE016E9E000/6348715E851F18EE.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01007DE016E9E000/6348715E851F18EE.yaml deleted file mode 100644 index 03e7ca7..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01007DE016E9E000/6348715E851F18EE.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Hollow 2 1.0.0 -# BID: 6348715E851F18EE - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x5A982E8, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x6664AA8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6691AB0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01007E3006DDA000/D55608916FA56C18.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01007E3006DDA000/D55608916FA56C18.yaml deleted file mode 100644 index e139629..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01007E3006DDA000/D55608916FA56C18.yaml +++ /dev/null @@ -1,109 +0,0 @@ -# Kirby Star Allies 4.0.0/4.0.0a -# BID: D55608916FA56C18 -# Thanks to Kirby567Fan for finding offsets of interval - -unsafeCheck: true - -MASTER_WRITE: - # Remove double buffer - - - type: asm_a64 - main_offset: 0x6DBE0 - instructions: [ - [mov, w8, 3] - ] - # Fix helper functions to not corrupt stack - - - type: asm_a64 - main_offset: 0x6DC88 - instructions: [ - [mov, w2, 3] - ] - - - type: asm_a64 - main_offset: 0x6D85C - instructions: [ - [sub, sp, sp, 0x40], - [stp, x20, x19, [sp, 0x20]], - [stp, x29, x30, [sp, 0x30]], - [add, x29, sp, 0x30] - ] - - - type: asm_a64 - main_offset: 0x6D880 - instructions: [ - [mov, w2, 3] - ] - - - type: asm_a64 - main_offset: 0x6D894 - instructions: [ - [ldp, x29, x30, [sp, 0x30]], - [ldp, x20, x19, [sp, 0x20]], - [add, sp, sp, 0x40] - ] - - - type: asm_a64 - main_offset: 0x6D8A4 - instructions: [ - [sub, sp, sp, 0x50], - [stp, x22, x21, [sp, 0x20]], - [stp, x20, x19, [sp, 0x30]], - [stp, x29, x30, [sp, 0x40]], - [add, x29, sp, 0x40] - ] - - - type: asm_a64 - main_offset: 0x6D8DC - instructions: [ - [mov, w2, 3] - ] - - - type: asm_a64 - main_offset: 0x6D904 - instructions: [ - [ldp, x29, x30, [sp, 0x40]], - [ldp, x20, x19, [sp, 0x30]], - [ldp, x22, x21, [sp, 0x20]], - [add, sp, sp, 0x50] - ] - - - type: asm_a64 - main_offset: 0x6D918 - instructions: [ - [sub, sp, sp, 0x50], - [stp, xzr, x21, [sp, 0x18]], - [stp, x20, x19, [sp, 0x30]], - [stp, x29, x30, [sp, 0x40]], - [add, x29, sp, 0x40] - ] - - - type: asm_a64 - main_offset: 0x6D940 - instructions: [ - [mov, w2, 3] - ] - - - type: asm_a64 - main_offset: 0x6D984 - instructions: [ - [ldp, x29, x30, [sp, 0x40]], - [ldr, x21, [sp, 0x20]], - [ldp, x20, x19, [sp, 0x30]], - [add, sp, sp, 0x50] - ] - # Block updating interval - - - type: asm_a64 - main_offset: 0x5A4C - instructions: [ - [nop] - ] -ALL_FPS: - # Interval - - - type: evaluate_write - address: [MAIN, 0x54C5B0, 0] - value_type: int32 - value: "VSYNC_TARGET - 1" - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01007E700DBF6000/29E1CD0FBB24697E.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01007E700DBF6000/29E1CD0FBB24697E.yaml deleted file mode 100644 index 4a67ffd..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01007E700DBF6000/29E1CD0FBB24697E.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# MY HERO ONE'S JUSTICE 2 1.1.5 -# BID: 29E1CD0FBB24697E - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x7544070, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7568618, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6D0E998, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01007EF00011E000/8E9978D50BDD20B4.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01007EF00011E000/8E9978D50BDD20B4.yaml deleted file mode 100644 index 3938819..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01007EF00011E000/8E9978D50BDD20B4.yaml +++ /dev/null @@ -1,230 +0,0 @@ -# The Legend of Zelda: Breath of the Wild 1.6.0 -# BID: 8E9978D50BDD20B4 -# Time Struct pointer: *(MAIN+0x2D1E170), global speed offset: 0x30 - -unsafeCheck: true - -MASTER_WRITE: - # Remove double buffer - - - type: bytes - main_offset: 0xE557D4 - value_type: uint32 - value: 0x52800029 - - - type: bytes - main_offset: 0xE557E0 - value_type: uint32 - value: - - 0x3902F6A9 - - 0x52800069 - - 0xD503201F - # Block updating time struct when in menus - - - type: bytes - main_offset: 0xF8BA58 - value_type: uint32 - value: 0xD503201F - # Change pointer of GPU time factor for DR calculations to MAIN + 0x2D65C80 - - - type: bytes - main_offset: 0x150AB50 - value_type: uint32 - value: - - 0xF000C2C8 - - 0xBD4C8101 - # Default DR GPU time factor - - - type: bytes - main_offset: 0x2D65C80 - value_type: float - value: 0.001 - # Pass Global Engine Speed to UI speed - - - type: bytes - main_offset: 0x18522EC - value_type: uint32 - value: - - 0xD503201F - - 0xD503201F - - 0xD503201F - - 0xD503201F - - 0xD503201F - - 0xBC5FC100 - # Pass Global Engine Speed to some other speed - - - type: bytes - main_offset: 0x1821568 - value_type: uint32 - value: - - 0xD503201F - - 0xD503201F - - 0xD503201F - - 0xD503201F - - - type: bytes - main_offset: 0x1821588 - value_type: uint32 - value: 0xBC5FC100 - # Fix weird ragdolls physics calculation - - - type: bytes - main_offset: 0x1618480 - value_type: uint32 - value: 0x1E2E1009 - # Fix Thunderblight Ganon positioning (some of its animations got broken, but at least it's now beatable) - - - type: bytes - main_offset: 0x18B8DD4 - value_type: uint32 - value: - - 0x9421C3B4 - - 0xD503201F - - 0xD503201F - # CODE CAVE - - - type: bytes - main_offset: 0x2129BA4 - value_type: uint32 - value: - - 0xF90003E1 - - 0xD63F0100 - - 0x97FFF935 - - 0x97FFF99C - - 0x900061E1 - - 0xF9464422 - - 0xF9064420 - - 0xCB020000 - - 0xD503201F - - 0xB94D0822 - - 0x52881541 - - 0x72A07F21 - - 0xEB01001F - - 0x5400018D - - 0xAA0103E0 - - 0x1E601000 - - 0x1E630001 - - 0x1E630022 - - 0x1E621821 - - 0x1E610800 - - 0xB0005FA0 - - 0xF940B800 - - 0x1E624000 - - 0xBD003000 - - 0x14000015 - - 0xEB02001F - - 0x54FFFEAA - - 0xAA0203E0 - - 0x17FFFFF3 - - 0xBC68D920 - - 0xB0005FA9 - - 0xF940B929 - - 0xBD403121 - - 0x1E210800 - - 0x17B054DA - - 0x97FFF99C - - 0x900061E0 - - 0x52800021 - - 0xB90C9001 - - 0x17BA1888 - - 0x97FFF997 - - 0x900061E0 - - 0x52800041 - - 0xB90C9001 - - 0x17BA1677 - - 0x900061E0 - - 0xB94C9000 - - 0x340000E0 - - 0x370800E0 - - 0xF94003E0 - - 0x12800021 - - 0xD0006028 - - 0xF9406908 - - 0xD63F0100 - - 0x17C494D4 - - 0x900061E1 - - 0xB94C9421 - - 0xF94003E0 - - 0xD0006028 - - 0xF9406908 - - 0xD63F0100 - - 0x900061E0 - - 0xB90C901F - - 0x17C494CB - - 0xF94077E8 - - 0xCB0803C8 - - 0xD28DA100 - - 0xF2A00060 - - 0xEB08001F - - 0x540000A0 - - 0xF0005FA8 - - 0xF9479508 - - 0xBD406501 - - 0xD65F03C0 - - 0x90002728 - - 0xBD478901 - - 0xD65F03C0 - # Connect dynamic speed to game's code - - - type: bytes - main_offset: 0x124EFC8 - value_type: uint32 - value: 0x143B6AF7 - # Connect fixing aiming to game's code - - - type: bytes - main_offset: 0xD3EF90 - value_type: uint32 - value: 0x144FAB22 - # Connect AMV FPS locking - - - type: bytes - main_offset: 0xFAFE5C - value_type: uint32 - value: 0x1445E775 - - - type: bytes - main_offset: 0xFAF62C - value_type: uint32 - value: 0x1445E986 - # Default interval - - - type: bytes - main_offset: 0x2D65C94 - value_type: int32 - value: -2 - # Default min delta - - - type: bytes - main_offset: 0x2D65D08 - value_type: int32 - value: 33333333 -ALL_FPS: - # DR GPU Time Factor - - - type: evaluate_write - address: [MAIN, 0x2D65C80] - value_type: float - value: "(FPS_TARGET / 30) * 0.001" - # Set Min delta - - - type: evaluate_write - address: [MAIN, 0x2D65D08] - value_type: uint32 - value: "FRAMETIME_TARGET * 1000000" - # Default vsync - - - type: evaluate_write - address: [MAIN, 0x2D65C94] - value_type: int32 - value: "VSYNC_TARGET * -1" - # Prerendered cutscenes must be played at 30 FPS - - - type: compare - compare_address: [MAIN, 0x2D65C90] - compare_type: "==" - compare_value_type: uint32 - compare_value: 1 - address: [MAIN] - value_type: refresh_rate - value: 30 diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01007EF00011E000/A12F75F49B36F4B8.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01007EF00011E000/A12F75F49B36F4B8.yaml deleted file mode 100644 index e014e02..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01007EF00011E000/A12F75F49B36F4B8.yaml +++ /dev/null @@ -1,148 +0,0 @@ -# The Legend of Zelda: Breath of the Wild 1.8.1 -# BID: A12F75F49B36F4B8 - -unsafeCheck: true - -MASTER_WRITE: - # Remove double buffer - ## REF: 61 F6 42 39 - - - type: bytes - main_offset: 0xD80748 - value_type: uint32 - value: 0x52800021 - # Change pointer of GPU time factor for DR calculations to MAIN + 0x1D36C80 - ## REF: XREF 0x46823555, replace loading for 0.001 - - - type: bytes - main_offset: 0xE6F140 - value_type: uint32 - value: - - 0xF0007628 - - 0xBD4FF501 - # Dynamic speed - ## Replace nvnQueuePresentTexture call to code cave at MAIN+0x148D964 - - - type: bytes - main_offset: 0xD874FC - value_type: uint32 - value: 0x141C191A - ## Patch game speed function to use speed from MAIN+0x1D36FF0 - - - type: bytes - main_offset: 0x14092A8 - value_type: uint32 - value: 0x14000003 - - - type: bytes - main_offset: 0x14092CC - value_type: uint32 - value: - - 0xB0004969 - - 0xBD4FF121 - ## Patch UI speed function to use speeed from MAIN+0x1D36FF0 - - - type: bytes - main_offset: 0x116D0D8 - value_type: uint32 - value: 0xB0005E47 - - - type: bytes - main_offset: 0x116D0E4 - value_type: uint32 - value: 0xBD4FF0E0 - ## CODE CAVE - - - type: bytes - main_offset: 0x148D964 - value_type: uint32 - value: - - 0xD63F0100 - - 0xD53BE022 - - 0xB0004548 - - 0xF947FD01 - - 0xEB1F003F - - 0x54000061 - - 0xF907FD02 - - 0x17E3E6E0 - - 0xCB010040 - - 0x97FFFBB6 # BL nn::os::ConvertToTimeSpan(nn::os::Tick) - - 0x9E230000 - - 0x52940AA0 - - 0x72A03F80 - - 0x1E230001 - - 0x1E211800 - - 0x1E201001 - - 0x1E212000 - - 0x5400004B - - 0x1E204020 - - 0xB0004548 - - 0xBD4FED01 - - 0x1E212000 - - 0x5400004C - - 0x1E204020 - - 0xBD0FF100 - - 0x17FFFFED - - 0xB0004540 - - 0xB94FF000 - - 0xD65F03C0 - - 0xB0004547 - - 0xB90FE8E1 - - 0x17DDA966 - # Signal Cutscenes playing - - - type: bytes - main_offset: 0xC00680 - value_type: uint32 - value: 0x942234D6 - - - type: bytes - main_offset: 0xC00E40 - value_type: uint32 - value: 0x942232E6 - # Default speed - - - type: bytes - main_offset: 0x1D36FF0 - value_type: float - value: 1.0 - - - type: bytes - main_offset: 0x1D36FEC - value_type: float - value: 1.0 - # Default cutscene state - - - type: bytes - main_offset: 0x1D36FE8 - value_type: uint8 - value: 1 - # Default DR factor - - - type: bytes - main_offset: 0x1D36FF4 - value_type: float - value: 0.001 -ALL_FPS: - # Min Delta - - - type: evaluate_write - address: [MAIN, 0x1D36FEC] - value_type: float - value: "30 / FPS_TARGET" - # DR factor - - - type: evaluate_write - address: [MAIN, 0x1D36FF4] - value_type: float - value: "(FPS_TARGET / 30) * 0.001" - # Prerendered cutscenes must be played at 30 FPS - - - type: compare - compare_address: [MAIN, 0x1D36FE8] - compare_type: "==" - compare_value_type: uint8 - compare_value: 0 - address: [MAIN] - value_type: refresh_rate - value: 30 \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01007EF00011E000/DE0B6AC4EFC1DDA7.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01007EF00011E000/DE0B6AC4EFC1DDA7.yaml deleted file mode 100644 index a36ed16..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01007EF00011E000/DE0B6AC4EFC1DDA7.yaml +++ /dev/null @@ -1,161 +0,0 @@ -# The Legend of Zelda: Breath of the Wild 1.8.2 -# BID: DE0B6AC4EFC1DDA7 - -DECLARATIONS: - - - type: variable - name: game_speed - value_type: float - default_value: 1.0 - - - type: variable - name: min_delta - value_type: float - default_value: 1.0 - evaluate: 30 / FPS_TARGET - - - type: variable - name: dr_factor - value_type: float - default_value: 100.0 - evaluate: (FPS_TARGET / 30) * 100 - - - type: variable - name: frame_tick - value_type: uint64 - default_value: 0 - - - type: const - name: default_frame_nanoseconds - value: 33333333 - - - type: code - name: dynamicSpeed - instructions: [ - [stp, x29, x30, [sp, -16], "!"], - [mov, x29, sp], - [blr, x8], - [mrs, x2, cntpct_el0], - [adrp, x8, $frame_tick], - [ldr, x1, [x8, $frame_tick]], - [cmp, x1, xzr], - [str, x2, [x8, $frame_tick]], - [b.eq, :goto4], - [sub, x0, x2, x1], - [bl, _convertTickToTimeSpan()], - [ucvtf, s0, x0], - [mov, w0, $default_frame_nanoseconds], - [movk, w0, $default_frame_nanoseconds, 16], - [ucvtf, s1, w0], - [fdiv, s0, s0, s1], - [fmov, s1, 2.0], - [fcmp, s0, s1], - [b.lt, :goto2], - [fmov, s0, s1], - :goto2, [adrp, x8, $min_delta], - [ldr, s1, [x8, $min_delta]], - [fcmp, s0, s1], - [b.gt, :goto3], - [fmov, s0, s1], - :goto3, [adrp, x8, $game_speed], - [str, s0, [x8, $game_speed]], - :goto4, [ldp, x29, x30, [sp], 16], - [ret] - ] - - - type: variable - name: cutscene_state - value_type: uint8 - default_value: 1 - - - type: code - name: signalCutscene - instructions: [ - [adrp, x7, $cutscene_state], - [strb, w1, [x7, $cutscene_state]], - [b, 0xbf7f78] - ] -MASTER_WRITE: - # Remove double buffer - ## REF: 61 F6 42 39 - - - type: asm_a64 - main_offset: 0xD80748 - instructions: [ - [mov, w1, 1] - ] - # Change pointer of time factor for DR calculations to $dr_factor - ## REF: 01 01 27 1E 08 59 A8 52 03 08 21 1E, replace hardcoded 100.0 float - - - type: asm_a64 - main_offset: 0x1153314 - instructions: [ - [adrp, x8, $dr_factor], - [fmul, s3, s0, s1], - [ldr, s1, [x8, $dr_factor]] - ] - # Dynamic speed - ## Replace nvnQueuePresentTexture call to code cave _dynamicSpeed() - - - type: asm_a64 - main_offset: 0xD874FC - instructions: [ - [bl, _dynamicSpeed()] - ] - ## Patch game speed function to use speed from $game_speed - - - type: asm_a64 - main_offset: 0x14092A8 - instructions: [ - [b, +12] - ] - - - type: asm_a64 - main_offset: 0x14092CC - instructions: [ - [adrp, x9, $game_speed], - [ldr, s1, [x9, $game_speed]] - ] - ## Patch UI speed function to use speeed from $game_speed - - - type: asm_a64 - main_offset: 0x116D0D8 - instructions: [ - [adrp, x7, $game_speed] - ] - - - type: asm_a64 - main_offset: 0x116D0E4 - instructions: [ - [ldr, s0, [x7, $game_speed]] - ] - # Signal Cutscenes playing - - - type: asm_a64 - main_offset: 0xC00680 - instructions: [ - [bl, _signalCutscene()] - ] - - - type: asm_a64 - main_offset: 0xC00E40 - instructions: [ - [bl, _signalCutscene()] - ] -ALL_FPS: - # Scrolling speed - ## REF: 68 16 41 B9 D8 22 D5 1A - ## ADRP + LDR above it - - - type: evaluate_write - address: [MAIN, 0x1C4BA40] - value_type: float - value: "30 / FPS_TARGET" - # Prerendered cutscenes must be played at 30 FPS - - - type: compare - compare_address: [VARIABLE, cutscene_state] - compare_type: "==" - compare_value: 0 - value_type: refresh_rate - value: 30 diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01007FB010DC8000/3C1DC69847A35C30.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01007FB010DC8000/3C1DC69847A35C30.yaml deleted file mode 100644 index dbd7ce1..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01007FB010DC8000/3C1DC69847A35C30.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Paradise Killer 1.3.0 -# BID: 3C1DC69847A35C30 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x7D1C738, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7D41D80, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x7552E58, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01007FB010DC8000/D3744AF2C376CDC4.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01007FB010DC8000/D3744AF2C376CDC4.yaml deleted file mode 100644 index e3a4ebc..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01007FB010DC8000/D3744AF2C376CDC4.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# Paradise Killer 1.2.1 -# BID: D3744AF2C376CDC4 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x715EDB8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x718C9B8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100801011C3E000/C4DF04F647BDC727.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100801011C3E000/C4DF04F647BDC727.yaml deleted file mode 100644 index 221f1d1..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100801011C3E000/C4DF04F647BDC727.yaml +++ /dev/null @@ -1,91 +0,0 @@ -# Persona 5 Strikers 1.0.0 -# BID: C4DF04F647BDC727 - -unsafeCheck: true - -MASTER_WRITE: - # Block updating values - - - type: asm_a64 - main_offset: 0x4F3D68 - instructions: [ - [nop] - ] - - - type: asm_a64 - main_offset: 0x4F3D7C - instructions: [ - [nop] - ] - - - type: asm_a64 - main_offset: 0x4F3D8C - instructions: [ - [nop] - ] - - - type: asm_a64 - main_offset: 0x4F3D94 - instructions: [ - [nop] - ] - - - type: asm_a64 - main_offset: 0x4D8748 - instructions: [ - [nop] - ] - - - type: asm_a64 - main_offset: 0x4D8754 - instructions: [ - [nop] - ] - - - type: asm_a64 - main_offset: 0x4D8760 - instructions: [ - [nop] - ] - - - type: asm_a64 - main_offset: 0x4D876C - instructions: [ - [nop] - ] - # Default 30 FPS values - - - type: bytes - main_offset: 0x1D584F8 - value_type: int32 - value: [30, 2] - - - type: bytes - main_offset: 0x1D6BFA0 - value_type: float - value: 30 - - - type: bytes - main_offset: 0x2AEFB30 - value_type: uint32 - value: 1 -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x1D584F8] - value_type: int32 - value: [FPS_TARGET, VSYNC_TARGET] - - - type: evaluate_write - address: [MAIN, 0x1D6BFA0] - value_type: float - value: FPS_TARGET - - - type: evaluate_write - address: [MAIN, 0x2AEFB30] - value_type: int32 - value: "VSYNC_TARGET - 1" - - - type: block - what: timing - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100803005D52000/62B7F19804BCB70E.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100803005D52000/62B7F19804BCB70E.yaml deleted file mode 100644 index 141f732..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100803005D52000/62B7F19804BCB70E.yaml +++ /dev/null @@ -1,26 +0,0 @@ -# ぎゃる☆がん2 1.0.4 -# BID: 62B7F19804BCB70E - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x4346990, 0] - value_type: uint32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x44E6DA8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # Disable custom FPS Lock - - - type: write - address: [MAIN, 0x44E6030, 0x764] - address_unsafe: true - value_type: float - value: 0 - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01008120128C2000/3D4E3A9252AA6C63.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01008120128C2000/3D4E3A9252AA6C63.yaml deleted file mode 100644 index 3e998ff..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01008120128C2000/3D4E3A9252AA6C63.yaml +++ /dev/null @@ -1,23 +0,0 @@ -# ジョジョの奇妙な冒険 オールスターバトル R 2.3.3 -# BID: 3D4E3A9252AA6C63 -# There are small issues with animations in cutscenes at higher framerates - -ALL_FPS: - # Internal FPS Lock, pointer ref: 00 01 40 F9 E5 03 04 2A - - - type: evaluate_write - address: [MAIN, 0x2AEDA08, 704] - value_type: uint32 - value: VSYNC_TARGET - # Game Speed, pointer ref: F3 03 00 AA 20 00 80 52 F4 03 01 AA - - - type: evaluate_write - address: [MAIN, 0x2AEF6D0, 1360] - value_type: uint32 - value: VSYNC_TARGET - # UI Speed - - - type: evaluate_write - address: [MAIN, 0x2AEF6D0, 2554] - value_type: uint8 - value: FPS_TARGET diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010081E01A45C000/25D3C2E9040D1A9A.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010081E01A45C000/25D3C2E9040D1A9A.yaml deleted file mode 100644 index 4480f37..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010081E01A45C000/25D3C2E9040D1A9A.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Bang-On Balls: Chronicles 1.0.4 -# BID: 25D3C2E9040D1A9A - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x685AE88, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x702A818, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7058338, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010081E01A45C000/36C7E946E6C11C8E.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010081E01A45C000/36C7E946E6C11C8E.yaml deleted file mode 100644 index 7e82171..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010081E01A45C000/36C7E946E6C11C8E.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Bang-On Balls: Chronicles 1.0.5 -# BID: 36C7E946E6C11C8E - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x6DA4F38, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x7574618, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x75A22D8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100821020BBC000/D45002D206976B20.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100821020BBC000/D45002D206976B20.yaml deleted file mode 100644 index a67960a..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100821020BBC000/D45002D206976B20.yaml +++ /dev/null @@ -1,37 +0,0 @@ -# EVERYBODY'S GOLF: Hot Shots US 1.1.4 -# BID: D45002D206976B20 -# Changed frametime target value math formula because default one sucks at 60 FPS target - -DECLARATIONS: - - - type: variable - name: dr_frametime_max - value_type: double - default_value: 40 - evaluate: "0.9 * FRAMETIME_TARGET" - - - type: variable - name: dr_frametime_min - value_type: double - default_value: 33.3333333333 - evaluate: "(0.9 * FRAMETIME_TARGET) - 6" -MASTER_WRITE: - # REF: 0a 00 a4 d2 8a 08 e8 f2 41 01 67 9e - - - type: asm_a64 - main_offset: 0x3936328 - instructions: [ - [adrp, x10, $dr_frametime_max], - [ldr, d1, [x10, $dr_frametime_max]], - [nop] - ] - # REF: 00 0d 40 fd 0a 00 b8 d2 - - - type: asm_a64 - main_offset: 0x39363FC - instructions: [ - [adrp, x10, $dr_frametime_min], - [ldr, d1, [x10, $dr_frametime_min]], - [nop], - [nop] - ] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010082901D6F2000/FCA830BAE649B898.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010082901D6F2000/FCA830BAE649B898.yaml deleted file mode 100644 index 12382eb..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010082901D6F2000/FCA830BAE649B898.yaml +++ /dev/null @@ -1,32 +0,0 @@ -# Neptunia Game Maker R:Evolution 1.00 -# BID: FCA830BAE649B898 - -DECLARATIONS: - - - type: variable - name: dr_target1 - value_type: float - default_value: 33.33 - evaluate: "TruncDec(FRAMETIME_TARGET, 2)" - - - type: variable - name: dr_target2 - value_type: float - default_value: 28.57 - evaluate: "TruncDec(1000 / (FPS_TARGET + 5), 2)" -MASTER_WRITE: - # Redirect DR timing range to MAIN + 0x878B800 - - - type: asm_a64 - main_offset: 0x4451E88 - instructions: [ - [adrp, x8, $dr_target1], - [ldr, w8, [x8, $dr_target1]] - ] - - - type: asm_a64 - main_offset: 0x4451ED4 - instructions: [ - [adrp, x8, $dr_target2], - [ldr, w8, [x8, $dr_target2]] - ] diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010082F015576000/8BFBF5B8A7098443.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010082F015576000/8BFBF5B8A7098443.yaml deleted file mode 100644 index 61d1c8a..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010082F015576000/8BFBF5B8A7098443.yaml +++ /dev/null @@ -1,41 +0,0 @@ -# 零 ~濡鴉ノ巫女~ 1.0.5 -# BID: 8BFBF5B8A7098443 - -DECLARATIONS: - - - type: variable - name: min_delta - value_type: float - default_value: 0.0333333333 - evaluate: "1 / FPS_TARGET" - - - type: variable - name: fps_lock - value_type: uint32 - default_value: 33333333 - evaluate: "1000000000 / FPS_TARGET" -MASTER_WRITE: - # Redirect min delta - # REF: 00 D9 21 7E 28 19 20 1E - - - type: asm_a64 - main_offset: 0x39ABF8 - instructions: [ - [adrp, x27, $min_delta], - [ldr, s8, [x27, $min_delta]] - ] - # Redirect FPS Lock - # REF: 69 AA 40 B9 0A 40 99 52 - - - type: asm_a64 - main_offset: 0x39B2D8 - instructions: [ - [adrp, x9, $fps_lock], - [ldr, w9, [x9, $fps_lock]], - [nop], - [nop] - ] -ALL_FPS: - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100830004FB6000/40F973CE3B5EC8D7.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100830004FB6000/40F973CE3B5EC8D7.yaml deleted file mode 100644 index 2fbf9e4..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100830004FB6000/40F973CE3B5EC8D7.yaml +++ /dev/null @@ -1,17 +0,0 @@ -# LA Noire 1.2 -# BID: 40F973CE3B5EC8D7 - -ALL_FPS: - # Game speed - - - type: evaluate_write - address: [MAIN, 0x1A32900, 0xA0] - address_unsafe: true - value_type: float - value: "(FPS_TARGET * 2) / 1.001" - # Frameskipping (otherwise you will get slowdowns at framedrops) - - - type: write - address: [MAIN, 0x1A5BE70] - value_type: int8 - value: 1 diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010083201F234000/A6F7BF79EBCBCC70.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010083201F234000/A6F7BF79EBCBCC70.yaml deleted file mode 100644 index 77960cb..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010083201F234000/A6F7BF79EBCBCC70.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# Hollow Coccon 1.0.4 -# BID: A6F7BF79EBCBCC70 - -ALL_FPS: - # REF: OptionData::SetNewScale() - - - type: evaluate_write - address: [MAIN, 0x5E0B0F8, 0, 0xB8, 0] - value_type: double - value: [FPS_TARGET, FRAMETIME_TARGET] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010083501AB36000/0959D87753F9FED4.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010083501AB36000/0959D87753F9FED4.yaml deleted file mode 100644 index fb7e57e..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010083501AB36000/0959D87753F9FED4.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Solar Ash 1.06.0 -# BID: 0959D87753F9FED4 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) rounded to two decimals - - - type: evaluate_write - address: [MAIN, 0x6577290, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x65A2138, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010083602099A000/B174F363C2823CBE.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010083602099A000/B174F363C2823CBE.yaml deleted file mode 100644 index 62e7e6c..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010083602099A000/B174F363C2823CBE.yaml +++ /dev/null @@ -1,11 +0,0 @@ -# 워블리 라이프 1.0.0.3 -# BID: B174F363C2823CBE - -ALL_FPS: - # DynamicResolutionManager_TypeInfo - - - type: evaluate_write - address: [MAIN, 0x84A6F58, 0xB8, 0] - address_unsafe: true - value_type: double - value: [FPS_TARGET, FRAMETIME_TARGET] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010083A018262000/59AF76C13F680B7C.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010083A018262000/59AF76C13F680B7C.yaml deleted file mode 100644 index f183ae3..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010083A018262000/59AF76C13F680B7C.yaml +++ /dev/null @@ -1,36 +0,0 @@ -# Hitman: Blood Money - Reprisal 1.2_71586 -# BID: 59AF76C13F680B7C -# Fix aiming speed by tweaking it in game settings -# Videos / prerendered cutscenes are played at 30 FPS - -unsafeCheck: true - -MASTER_WRITE: - # Block FPS lock being constantly updated - - - type: asm_a64 - main_offset: 0x27CE38 - instructions: [ - [nop] - ] -ALL_FPS: - # Internal FPS Lock - - - type: evaluate_write - address: [MAIN, 0x1D608B8, 0x10] - value_type: uint32 - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: evaluate_write - address: [MAIN, 0x1D608B8, 0x40] - value_type: uint32 - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: evaluate_write - address: [MAIN, 0x1D608B8, 0x70] - value_type: uint32 - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010084F017B32000/2BFF5F7711EE6C9F.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010084F017B32000/2BFF5F7711EE6C9F.yaml deleted file mode 100644 index 11eaf63..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010084F017B32000/2BFF5F7711EE6C9F.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# The Dark Pictures Anthology: Little Hope 1.0.0 -# BID: 2BFF5F7711EE6C9F - -unsafeCheck: true - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xB4E7838, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0xAD15960, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/0C4BD6CA532E589C.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/0C4BD6CA532E589C.yaml deleted file mode 100644 index c452859..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/0C4BD6CA532E589C.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# No Man's Sky 6.17.0 -# BID: 0C4BD6CA532E589C - -DECLARATIONS: - - - type: variable - name: dr_target - value_type: float - default_value: 30 - evaluate: FPS_TARGET -MASTER_WRITE: - # Redirect DR frametime target - # REF: 08 4E A8 52 00 01 27 1E 48 8F A8 52, ADRP + ADD + LDR above that - - - type: asm_a64 - main_offset: 0x1F9BC40 - instructions: [ - [adrp, x9, $dr_target], - [ldr, s0, [x9, $dr_target]], - [nop] - ] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/184D48D1AFF6A941.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/184D48D1AFF6A941.yaml deleted file mode 100644 index 8bd4604..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/184D48D1AFF6A941.yaml +++ /dev/null @@ -1,32 +0,0 @@ -# No Man's Sky 5.2.5 -# BID: 184D48D1AFF6A941 - -unsafeCheck: true - -MASTER_WRITE: -# Redirect DR frametime target to MAIN+0x4963F00 - - - type: bytes - main_offset: 0x1F9BD08 - value_type: uint32 - value: 0xD503201F - - - type: bytes - main_offset: 0x1F9BD14 - value_type: uint32 - value: - - 0x90014E52 - - 0xB9400408 - - 0xBD4F0240 - # default value - - - type: bytes - main_offset: 0x4963F00 - value_type: float - value: 33.3333333333 -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x4963F00] - value_type: float - value: FRAMETIME_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/1FEBABDBBDE0228B.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/1FEBABDBBDE0228B.yaml deleted file mode 100644 index 209a1ee..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/1FEBABDBBDE0228B.yaml +++ /dev/null @@ -1,34 +0,0 @@ -# No Man's Sky 5.2.9 -# BID: 1FEBABDBBDE0228B - -unsafeCheck: true - -MASTER_WRITE: - # REF: A8 AA 8A 52 A8 40 A8 72 - # NOP "CMP W8, #0" before ref - - - type: bytes - main_offset: 0x1F9CEC8 - value_type: uint32 - value: 0xD503201F - # Redirect DR frametime target to MAIN+0x4964F00 - - - type: bytes - main_offset: 0x1F9CED4 - value_type: uint32 - value: # 52 4E 01 90 08 00 40 B9 40 02 4F BD - - 0x90014E52 # adrp x18, #0x4964000 - - 0xB9400008 # ldr w8, [x0] - - 0xBD4F0240 # ldr s0, [x18, #0xf00] - # default value - - - type: bytes - main_offset: 0x4964F00 - value_type: float - value: 33.3333333333 -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x4964F00] - value_type: float - value: FRAMETIME_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/22D0D857A4DAEBBC.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/22D0D857A4DAEBBC.yaml deleted file mode 100644 index e21baa7..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/22D0D857A4DAEBBC.yaml +++ /dev/null @@ -1,28 +0,0 @@ -# No Man's Sky 5.7.1 -# BID: 22D0D857A4DAEBBC - -unsafeCheck: true - -MASTER_WRITE: - # Redirect DR frametime target to MAIN+0x47D7FF0 - # REF: 08 4E A8 52 00 01 27 1E 48 8F A8 52, ADRP + ADD + LDR above that - - - type: bytes - main_offset: 0x1F95A70 - value_type: uint32 - value: - - 0xD0014209 # adrp x9, #0x47D7000 - - 0xBD4FF120 # ldr s0, [x9, #0xff0] - - 0xD503201F # NOP - # default value - - - type: bytes - main_offset: 0x47D7FF0 - value_type: float - value: 30 -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x47D7FF0] - value_type: float - value: FPS_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/252A2FD2AD6A13FE.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/252A2FD2AD6A13FE.yaml deleted file mode 100644 index c2df5ff..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/252A2FD2AD6A13FE.yaml +++ /dev/null @@ -1,28 +0,0 @@ -# No Man's Sky 5.6.0 -# BID: 252A2FD2AD6A13FE - -unsafeCheck: true - -MASTER_WRITE: - # Redirect DR frametime target to MAIN+0x4722FF0 - # REF: 08 4E A8 52 00 01 27 1E 48 8F A8 52, ADRP + ADD + LDR above that - - - type: bytes - main_offset: 0x1F3A018 - value_type: uint32 - value: - - 0x90013F49 # adrp x9, #0x4722000 - - 0xBD4FF120 # ldr s0, [x9, #0xff0] - - 0xD503201F # NOP - # default value - - - type: bytes - main_offset: 0x4722FF0 - value_type: float - value: 30 -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x4722FF0] - value_type: float - value: FPS_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/351B77A43CF31BF4.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/351B77A43CF31BF4.yaml deleted file mode 100644 index 8299c5b..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/351B77A43CF31BF4.yaml +++ /dev/null @@ -1,32 +0,0 @@ -# No Man's Sky 5.0.4 -# BID: 351B77A43CF31BF4 - -unsafeCheck: true - -MASTER_WRITE: -# Redirect DR frametime target to MAIN+0x4864F00 - - - type: bytes - main_offset: 0x1EEAE88 - value_type: uint32 - value: 0xD503201F - - - type: bytes - main_offset: 0x1EEAE94 - value_type: uint32 - value: - - 0xD0014BD2 - - 0xB9400408 - - 0xBD4F0240 - # default value - - - type: bytes - main_offset: 0x4864F00 - value_type: float - value: 33.3333333333 -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x4864F00] - value_type: float - value: FRAMETIME_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/4995675B5380FA50.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/4995675B5380FA50.yaml deleted file mode 100644 index daa7789..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/4995675B5380FA50.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# No Man's Sky 6.0.0 -# BID: 4995675B5380FA50 - -DECLARATIONS: - - - type: variable - name: dr_target - value_type: float - default_value: 30 - evaluate: FPS_TARGET -MASTER_WRITE: - # Redirect DR frametime target - # REF: 08 4E A8 52 00 01 27 1E 48 8F A8 52, ADRP + ADD + LDR above that - - - type: asm_a64 - main_offset: 0x1F9BC40 - instructions: [ - [adrp, x9, $dr_target], - [ldr, s0, [x9, $dr_target]], - [nop] - ] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/538D60FF5A324C92.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/538D60FF5A324C92.yaml deleted file mode 100644 index 7b34c64..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/538D60FF5A324C92.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# No Man's Sky 6.5.0 -# BID: 538D60FF5A324C92 - -DECLARATIONS: - - - type: variable - name: dr_target - value_type: float - default_value: 30 - evaluate: FPS_TARGET -MASTER_WRITE: - # Redirect DR frametime target - # REF: 08 4E A8 52 00 01 27 1E 48 8F A8 52, ADRP + ADD + LDR above that - - - type: asm_a64 - main_offset: 0x1F9BC40 - instructions: [ - [adrp, x9, $dr_target], - [ldr, s0, [x9, $dr_target]], - [nop] - ] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/63C5A645F3E5985A.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/63C5A645F3E5985A.yaml deleted file mode 100644 index 99b12c0..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/63C5A645F3E5985A.yaml +++ /dev/null @@ -1,28 +0,0 @@ -# No Man's Sky 5.5.2 -# BID: 63C5A645F3E5985A - -unsafeCheck: true - -MASTER_WRITE: - # Redirect DR frametime target to MAIN+0x4B90FF0 - # REF: 08 4E A8 52 00 01 27 1E 48 8F A8 52, ADRP + ADD + LDR above that - - - type: bytes - main_offset: 0x2037260 - value_type: uint32 - value: - - 0xB0015AC9 # adrp x9, #0x4b90000 - - 0xBD4FF120 # ldr s0, [x9, #0xff0] - - 0xD503201F # NOP - # default value - - - type: bytes - main_offset: 0x4B90FF0 - value_type: float - value: 30 -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x4B90FF0] - value_type: float - value: FPS_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/6488A67709988BD7.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/6488A67709988BD7.yaml deleted file mode 100644 index 93f1bd0..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/6488A67709988BD7.yaml +++ /dev/null @@ -1,32 +0,0 @@ -# No Man's Sky 5.2.8 -# BID: 6488A67709988BD7 - -unsafeCheck: true - -MASTER_WRITE: -# Redirect DR frametime target to MAIN+0x4963F00 - - - type: bytes - main_offset: 0x1F9D198 - value_type: uint32 - value: 0xD503201F - - - type: bytes - main_offset: 0x1F9D1A4 - value_type: uint32 - value: - - 0xD0014E32 - - 0xB9400408 - - 0xBD4F0240 - # default value - - - type: bytes - main_offset: 0x4963F00 - value_type: float - value: 33.3333333333 -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x4963F00] - value_type: float - value: FRAMETIME_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/8F6376506EA4E8D5.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/8F6376506EA4E8D5.yaml deleted file mode 100644 index 349f6fa..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/8F6376506EA4E8D5.yaml +++ /dev/null @@ -1,32 +0,0 @@ -# No Man's Sky 4.7.0 -# BID: 8F6376506EA4E8D5 - -unsafeCheck: true - -MASTER_WRITE: -# Redirect DR frametime target to MAIN+0x4735400 - - - type: bytes - main_offset: 0x1D4D3AC - value_type: uint32 - value: 0xD503201F - - - type: bytes - main_offset: 0x1D4D3B8 - value_type: uint32 - value: - - 0x90014F52 - - 0xB9400408 - - 0xBD44024B - # default value - - - type: bytes - main_offset: 0x4735400 - value_type: float - value: 33.3333333333 -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x4735400] - value_type: float - value: FRAMETIME_TARGET diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/909C5FD598A092B1.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/909C5FD598A092B1.yaml deleted file mode 100644 index 0284949..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/909C5FD598A092B1.yaml +++ /dev/null @@ -1,28 +0,0 @@ -# No Man's Sky 5.5.0 -# BID: 909C5FD598A092B1 - -unsafeCheck: true - -MASTER_WRITE: - # Redirect DR frametime target to MAIN+0x4B8AFF0 - # REF: 08 4E A8 52 00 01 27 1E 48 8F A8 52, ADRP + ADD + LDR above that - - - type: bytes - main_offset: 0x2032F20 - value_type: uint32 - value: - - 0x90015AC9 # adrp x9, #0x4b8a000 - - 0xBD4FF120 # ldr s0, [x9, #0xff0] - - 0xD503201F # NOP - # default value - - - type: bytes - main_offset: 0x4B8AFF0 - value_type: float - value: 30 -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x4B8AFF0] - value_type: float - value: FPS_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/9761E793CBE5895F.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/9761E793CBE5895F.yaml deleted file mode 100644 index 0567e74..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/9761E793CBE5895F.yaml +++ /dev/null @@ -1,32 +0,0 @@ -# No Man's Sky 5.2.6 -# BID: 9761E793CBE5895F - -unsafeCheck: true - -MASTER_WRITE: -# Redirect DR frametime target to MAIN+0x4962F00 - - - type: bytes - main_offset: 0x1F9C5C8 - value_type: uint32 - value: 0xD503201F - - - type: bytes - main_offset: 0x1F9C5D4 - value_type: uint32 - value: - - 0xD0014E32 - - 0xB9400408 - - 0xBD4F0240 - # default value - - - type: bytes - main_offset: 0x4962F00 - value_type: float - value: 33.3333333333 -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x4962F00] - value_type: float - value: FRAMETIME_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/9AA64F897E1D50BA.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/9AA64F897E1D50BA.yaml deleted file mode 100644 index eb71c1b..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/9AA64F897E1D50BA.yaml +++ /dev/null @@ -1,32 +0,0 @@ -# No Man's Sky 5.2.2 -# BID: 9AA64F897E1D50BA - -unsafeCheck: true - -MASTER_WRITE: -# Redirect DR frametime target to MAIN+0x4962F00 - - - type: bytes - main_offset: 0x1F9B6B8 - value_type: uint32 - value: 0xD503201F - - - type: bytes - main_offset: 0x1F9B6C4 - value_type: uint32 - value: - - 0xF0014E32 - - 0xB9400408 - - 0xBD4F0240 - # default value - - - type: bytes - main_offset: 0x4962F00 - value_type: float - value: 33.3333333333 -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x4962F00] - value_type: float - value: FRAMETIME_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/BC6CA2DEA3306522.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/BC6CA2DEA3306522.yaml deleted file mode 100644 index 1a51a3e..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/BC6CA2DEA3306522.yaml +++ /dev/null @@ -1,28 +0,0 @@ -# No Man's Sky 5.5.5 -# BID: BC6CA2DEA3306522 - -unsafeCheck: true - -MASTER_WRITE: - # Redirect DR frametime target to MAIN+0x4B92FF0 - # REF: 08 4E A8 52 00 01 27 1E 48 8F A8 52, ADRP + ADD + LDR above that - - - type: bytes - main_offset: 0x20391B0 - value_type: uint32 - value: - - 0xB0015AC9 # adrp x9, #0x4b92000 - - 0xBD4FF120 # ldr s0, [x9, #0xff0] - - 0xD503201F # NOP - # default value - - - type: bytes - main_offset: 0x4B92FF0 - value_type: float - value: 30 -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x4B92FF0] - value_type: float - value: FPS_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/C534121E724B33A1.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/C534121E724B33A1.yaml deleted file mode 100644 index 2ee097a..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/C534121E724B33A1.yaml +++ /dev/null @@ -1,32 +0,0 @@ -# No Man's Sky 5.1.0 -# BID: C534121E724B33A1 - -unsafeCheck: true - -MASTER_WRITE: -# Redirect DR frametime target to MAIN+0x48F3F00 - - - type: bytes - main_offset: 0x1F47498 - value_type: uint32 - value: 0xD503201F - - - type: bytes - main_offset: 0x1F474A4 - value_type: uint32 - value: - - 0x90014D72 - - 0xB9400408 - - 0xBD4F0240 - # default value - - - type: bytes - main_offset: 0x48F3F00 - value_type: float - value: 33.3333333333 -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x48F3F00] - value_type: float - value: FRAMETIME_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/C9ABDB1674CBED09.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/C9ABDB1674CBED09.yaml deleted file mode 100644 index b100d34..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/C9ABDB1674CBED09.yaml +++ /dev/null @@ -1,32 +0,0 @@ -# No Man's Sky 4.7.2 -# BID: C9ABDB1674CBED09 - -unsafeCheck: true - -MASTER_WRITE: -# Redirect DR frametime target to MAIN+0x4736400 - - - type: bytes - main_offset: 0x1D4DF5C - value_type: uint32 - value: 0xD503201F - - - type: bytes - main_offset: 0x1D4DF68 - value_type: uint32 - value: - - 0xB0014F52 - - 0xB9400408 - - 0xBD44024B - # default value - - - type: bytes - main_offset: 0x4736400 - value_type: float - value: 33.3333333333 -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x4736400] - value_type: float - value: FRAMETIME_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/CF94B485A949F8D1.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/CF94B485A949F8D1.yaml deleted file mode 100644 index eefba84..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/CF94B485A949F8D1.yaml +++ /dev/null @@ -1,28 +0,0 @@ -# No Man's Sky 5.7.01 -# BID: CF94B485A949F8D1 - -unsafeCheck: true - -MASTER_WRITE: - # Redirect DR frametime target to MAIN+0x47DBFF0 - # REF: 08 4E A8 52 00 01 27 1E 48 8F A8 52, ADRP + ADD + LDR above that - - - type: bytes - main_offset: 0x1F99B90 - value_type: uint32 - value: - - 0xD0014209 # adrp x9, #0x47DB000 - - 0xBD4FF120 # ldr s0, [x9, #0xff0] - - 0xD503201F # NOP - # default value - - - type: bytes - main_offset: 0x47DBFF0 - value_type: float - value: 30 -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x47DBFF0] - value_type: float - value: FPS_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/D5C5F47DFABD0812.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/D5C5F47DFABD0812.yaml deleted file mode 100644 index d575c65..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/D5C5F47DFABD0812.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# No Man's Sky 5.7.5 -# BID: D5C5F47DFABD0812 - -DECLARATIONS: - - - type: variable - name: dr_target - value_type: float - default_value: 30 - evaluate: FPS_TARGET -MASTER_WRITE: - # Redirect DR frametime target - # REF: 08 4E A8 52 00 01 27 1E 48 8F A8 52, ADRP + ADD + LDR above that - - - type: asm_a64 - main_offset: 0x1F9BC40 - instructions: [ - [adrp, x9, $dr_target], - [ldr, s0, [x9, $dr_target]], - [nop] - ] diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/DEA84284F054C693.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/DEA84284F054C693.yaml deleted file mode 100644 index c35a816..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/DEA84284F054C693.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# No Man's Sky 6.10.0 -# BID: DEA84284F054C693 - -DECLARATIONS: - - - type: variable - name: dr_target - value_type: float - default_value: 30 - evaluate: FPS_TARGET -MASTER_WRITE: - # Redirect DR frametime target - # REF: 08 4E A8 52 00 01 27 1E 48 8F A8 52, ADRP + ADD + LDR above that - - - type: asm_a64 - main_offset: 0x1F9BC40 - instructions: [ - [adrp, x9, $dr_target], - [ldr, s0, [x9, $dr_target]], - [nop] - ] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/E152A4B27D349B17.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/E152A4B27D349B17.yaml deleted file mode 100644 index 198a37c..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/E152A4B27D349B17.yaml +++ /dev/null @@ -1,28 +0,0 @@ -# No Man's Sky 5.6.4 -# BID: E152A4B27D349B17 - -unsafeCheck: true - -MASTER_WRITE: - # Redirect DR frametime target to MAIN+0x4728FF0 - # REF: 08 4E A8 52 00 01 27 1E 48 8F A8 52, ADRP + ADD + LDR above that - - - type: bytes - main_offset: 0x1F3FD58 - value_type: uint32 - value: - - 0xB0013F49 # adrp x9, #0x4728000 - - 0xBD4FF120 # ldr s0, [x9, #0xff0] - - 0xD503201F # NOP - # default value - - - type: bytes - main_offset: 0x4728FF0 - value_type: float - value: 30 -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x4728FF0] - value_type: float - value: FPS_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/E9DA1530FB30E130.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/E9DA1530FB30E130.yaml deleted file mode 100644 index fa85576..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/E9DA1530FB30E130.yaml +++ /dev/null @@ -1,32 +0,0 @@ -# No Man's Sky 5.1.2 -# BID: E9DA1530FB30E130 - -unsafeCheck: true - -MASTER_WRITE: -# Redirect DR frametime target to MAIN+0x48FFF00 - - - type: bytes - main_offset: 0x1F52958 - value_type: uint32 - value: 0xD503201F - - - type: bytes - main_offset: 0x1F52964 - value_type: uint32 - value: - - 0xB0014D72 - - 0xB9400408 - - 0xBD4F0240 - # default value - - - type: bytes - main_offset: 0x48FFF00 - value_type: float - value: 33.3333333333 -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x48FFF00] - value_type: float - value: FRAMETIME_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/F9C32ECFD8646E3A.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/F9C32ECFD8646E3A.yaml deleted file mode 100644 index 203ccf7..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/F9C32ECFD8646E3A.yaml +++ /dev/null @@ -1,32 +0,0 @@ -# No Man's Sky 5.0.2 -# BID: F9C32ECFD8646E3A - -unsafeCheck: true - -MASTER_WRITE: -# Redirect DR frametime target to MAIN+0x484FF00 - - - type: bytes - main_offset: 0x1ED9498 - value_type: uint32 - value: 0xD503201F - - - type: bytes - main_offset: 0x1ED94A4 - value_type: uint32 - value: - - 0xD0014BB2 - - 0xB9400408 - - 0xBD4F0240 - # default value - - - type: bytes - main_offset: 0x484FF00 - value_type: float - value: 33.3333333333 -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x484FF00] - value_type: float - value: FRAMETIME_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/FB1995474546F7C0.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/FB1995474546F7C0.yaml deleted file mode 100644 index f793d07..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100853015E86000/FB1995474546F7C0.yaml +++ /dev/null @@ -1,28 +0,0 @@ -# No Man's Sky 5.5.8 -# BID: FB1995474546F7C0 - -unsafeCheck: true - -MASTER_WRITE: - # Redirect DR frametime target to MAIN+0x4B90FF0 - # REF: 08 4E A8 52 00 01 27 1E 48 8F A8 52, ADRP + ADD + LDR above that - - - type: bytes - main_offset: 0x201C7F8 - value_type: uint32 - value: - - 0x90015BA9 # adrp x9, #0x4b90000 - - 0xBD4FF120 # ldr s0, [x9, #0xff0] - - 0xD503201F # NOP - # default value - - - type: bytes - main_offset: 0x4B90FF0 - value_type: float - value: 30 -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x4B90FF0] - value_type: float - value: FPS_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010085401A454000/2E7487767D0CA0EE.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010085401A454000/2E7487767D0CA0EE.yaml deleted file mode 100644 index 609ec02..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010085401A454000/2E7487767D0CA0EE.yaml +++ /dev/null @@ -1,33 +0,0 @@ -# Jujutsu Kaisen Cursed Clash EUR 1.3.0 -# BID: 2E7487767D0CA0EE - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) rounded to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x81A5A48, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x81E8F50, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x752A248, 0] - value_type: uint32 - value: [0, 0] - # Disable bUseFixedFrameRate - - - type: write - address: [MAIN, 0x81E87A8, 0x9C4] - value_type: uint32 - value: 7 - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010085401A454000/2F33996FD9C81253.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010085401A454000/2F33996FD9C81253.yaml deleted file mode 100644 index 354fbbd..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010085401A454000/2F33996FD9C81253.yaml +++ /dev/null @@ -1,33 +0,0 @@ -# Jujutsu Kaisen Cursed Clash EUR 1.2.0 -# BID: 2F33996FD9C81253 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) rounded to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x8069A48, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x80ACF50, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x73EE7C8, 0] - value_type: uint32 - value: [0, 0] - # Disable bUseFixedFrameRate - - - type: write - address: [MAIN, 0x80AC7A8, 0x9C4] - value_type: uint32 - value: 7 - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010085401A454000/7C724F497564C027.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010085401A454000/7C724F497564C027.yaml deleted file mode 100644 index 234ce82..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010085401A454000/7C724F497564C027.yaml +++ /dev/null @@ -1,33 +0,0 @@ -# Jujutsu Kaisen Cursed Clash EUR 1.4.0 -# BID: 7C724F497564C027 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x8458A48, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x849BF50, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x77DD548, 0] - value_type: uint32 - value: [0, 0] - # Disable bUseFixedFrameRate - - - type: write - address: [MAIN, 0x849B7A8, 0x9C4] - address_unsafe: true - value_type: uint32 - value: 7 - - - type: block - what: timing - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010085401A454000/95761555A341B190.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010085401A454000/95761555A341B190.yaml deleted file mode 100644 index fb9d63d..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010085401A454000/95761555A341B190.yaml +++ /dev/null @@ -1,33 +0,0 @@ -# Jujutsu Kaisen Cursed Clash EUR 1.1.0 -# BID: 95761555A341B190 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) rounded to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x8036A48, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8079F50, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x73BB0C8, 0] - value_type: uint32 - value: [0, 0] - # Disable bUseFixedFrameRate - - - type: write - address: [MAIN, 0x80797A8, 0x9C4] - value_type: uint32 - value: 7 - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010085500130A000/32C590B064956546.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010085500130A000/32C590B064956546.yaml deleted file mode 100644 index 309e936..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010085500130A000/32C590B064956546.yaml +++ /dev/null @@ -1,14 +0,0 @@ -# LEGO City Undercover 1.0.3 -# BID: 32C590B064956546 - -ALL_FPS: - # Block to 30 FPS when prerendered cutscene is played - # REF: LegoCutscenes::s_fmvCutsceneAudioInstance - - - type: compare - compare_address: [MAIN, 0x2590998] - compare_type: "!=" - compare_value_type: uint64 - compare_value: 0 - value_type: refresh_rate - value: 30 diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010085500E9D0000/D27FD8A515077F34.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010085500E9D0000/D27FD8A515077F34.yaml deleted file mode 100644 index 5b55894..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010085500E9D0000/D27FD8A515077F34.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# The Witcher 3: Wild Hunt - Complete Edition 4.04b -# BID: D27FD8A515077F34 - -ALL_FPS: - # DRGameTargetFrameTimeInMs - - - type: evaluate_write - address: [MAIN, 0x41312B4] - value_type: float - value: "0.945 * FRAMETIME_TARGET" - # DRCinematicTargetFrameTimeInMs - - - type: evaluate_write - address: [MAIN, 0x41312E4] - value_type: float - value: "0.945 * FRAMETIME_TARGET" - # LimitFPS - - - type: evaluate_write - address: [MAIN, 0x411DCFC] - value_type: int32 - value: FPS_LOCK_TARGET - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010086C00AF7C000/C7DAB27F22ACD2ED.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010086C00AF7C000/C7DAB27F22ACD2ED.yaml deleted file mode 100644 index 907b3ce..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010086C00AF7C000/C7DAB27F22ACD2ED.yaml +++ /dev/null @@ -1,26 +0,0 @@ -# 妖怪ウォッチ4 ぼくらは同じ空を見上げている 2.2.0 -# BID: C7DAB27F22ACD2ED -# Game is using double buffer, nvnWindowBuilderSetTextures has hardcoded values. -# So it's not possible to get stable FPS lock between 30 and 60 without changing refresh rate. - -MASTER_WRITE: - # Change main loop delay from 31.6 ms to 4.2 ms - - - type: asm_a64 - main_offset: 0x950C6C - instructions: [ - [mov, x0, 0x400000] - ] - - - type: asm_a64 - main_offset: 0x950C74 - instructions: [ - [mov, x0, 0x400000] - ] - - - type: asm_a64 - main_offset: 0x950C94 - instructions: [ - [nop], - [nop] - ] diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010087800DCEA000/6B0B26802F0DAAAF.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010087800DCEA000/6B0B26802F0DAAAF.yaml deleted file mode 100644 index a9d37aa..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010087800DCEA000/6B0B26802F0DAAAF.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# WRC8 1.4.0 -# BID: 6B0B26802F0DAAAF - -ALL_FPS: - # OptimalFrameDuration_ms = (1000/FPS) - (0.07 * (1000/30) - - - type: evaluate_write - address: [MAIN, 0x22F50FC] - value_type: float - value: "FRAMETIME_TARGET - (0.07 * (1000/30))" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010087E01FCD6000/ACD959FBAECADE00.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010087E01FCD6000/ACD959FBAECADE00.yaml deleted file mode 100644 index a3ccf40..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010087E01FCD6000/ACD959FBAECADE00.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# Cuisineer 2.0.27 -# BID: ACD959FBAECADE00 - -unsafeCheck: true - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x525D5A0, 0x48] - value_type: float - value: "1 / FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010088801B324000/9B743181AB8A26F9.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010088801B324000/9B743181AB8A26F9.yaml deleted file mode 100644 index ce0f5f1..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010088801B324000/9B743181AB8A26F9.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Gungrave G.O.R.E Ultimate Enhanced Edition 1.0.4 -# BID: 9B743181AB8A26F9 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x756FE78, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x759DB18, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6DA1A88, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010088B01572E000/E5AD28BC6E790692.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010088B01572E000/E5AD28BC6E790692.yaml deleted file mode 100644 index 88da971..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010088B01572E000/E5AD28BC6E790692.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# Commandos 3 - HD Remaster 1.00.053 -# BID: E5AD28BC6E790692 - -ALL_FPS: - # REF: 0x3D042108 hardcoded in assembly - - - type: evaluate_write - address: [MAIN, 0xB282A0] - value_type: float - value: "1 / FPS_LOCK_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010088B017734000/288908CE7F6177CC.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010088B017734000/288908CE7F6177CC.yaml deleted file mode 100644 index 6fee0d1..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010088B017734000/288908CE7F6177CC.yaml +++ /dev/null @@ -1,11 +0,0 @@ -# 閃亂忍忍忍者大戰戰機少女-少女們的響艷- / 섬란 닌닌닌자 대전 넵튠 -소녀들의 향염- 1.0.0 -# BID: 288908CE7F6177CC - -ALL_FPS: - # 30FPS lock bool - ## REF: C8 01 18 37 68 0A 40 BD, check first ADRP + LDR inside first function below result - - - type: write - address: [MAIN, 0x9F1480, 8, 0x6C] - value_type: uint32 - value: 0 \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100890021AE2000/55E2BD1FFCD31993.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100890021AE2000/55E2BD1FFCD31993.yaml deleted file mode 100644 index b47bfbd..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100890021AE2000/55E2BD1FFCD31993.yaml +++ /dev/null @@ -1,11 +0,0 @@ -# 옛날 옛적에 괴혼 / 從前從前有個塊魂 1.0.3 -# BID: 55E2BD1FFCD31993 - -ALL_FPS: - # Dynamic Resolution - ## REF: App.KatamariSin.AppSupport_TypeInfo - - - type: evaluate_write - address: [MAIN, 0x8F858B8, 0xB8, 0x18] - value_type: double - value: "0.9 * FRAMETIME_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010089A0117D4000/9B7A3AC5AF1A3B0D.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010089A0117D4000/9B7A3AC5AF1A3B0D.yaml deleted file mode 100644 index afc2b0d..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010089A0117D4000/9B7A3AC5AF1A3B0D.yaml +++ /dev/null @@ -1,62 +0,0 @@ -# SAMURAI WARRIORS 5 JAP / 戦国無双5 1.03 -# BID: 9B7A3AC5AF1A3B0D - -unsafeCheck: true - -# Block updating FPS Lock -MASTER_WRITE: - - - type: asm_a64 - main_offset: 0x1240DFC - instructions: [ - [nop] - ] - - - type: asm_a64 - main_offset: 0x1240E10 - instructions: [ - [nop] - ] - - - type: asm_a64 - main_offset: 0x1240E1C - instructions: [ - [nop] - ] - - - type: asm_a64 - main_offset: 0x1240E24 - instructions: [ - [nop] - ] - - - type: asm_a64 - main_offset: 0x1240E2C - instructions: [ - [ldr, s0, [x8, 0x1f0]] - ] -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x1E761E0] - value_type: int32 - value: VSYNC_TARGET - - - type: evaluate_write - address: [MAIN, 0x1E761E4] - value_type: float - value: FPS_TARGET - - - type: evaluate_write - address: [MAIN, 0x1E761E8] - value_type: int32 - value: [VSYNC_TARGET, FPS_LOCK_TARGET] - - - type: evaluate_write - address: [MAIN, 0x1E761F0] - value_type: float - value: FPS_TARGET - - - type: block - what: timing - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01008AF016240000/217C9ECF258C0312.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01008AF016240000/217C9ECF258C0312.yaml deleted file mode 100644 index f994684..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01008AF016240000/217C9ECF258C0312.yaml +++ /dev/null @@ -1,32 +0,0 @@ -# Dusk Diver 2 崑崙靈動 1.0.1 -# BID: 217C9ECF258C0312 - -ALL_FPS: - # Disable bUseFixedFrameRate to untie game speed from framerate and unlock FPS - - - type: write - address: [MAIN, 0x77C7098, 0x7A4] - address_unsafe: true - value_type: uint32 - # Default is 0x47, bUseFixedFrameRate |= 0x40 - # By writing 7 we are making sure that other flags are maintained: - # bAllowMultiThreadedAnimationUpdate |= 4 - # bOptimizeAnimBlueprintMemberVariableAccess |= 2 - # bCanBlueprintsTickByDefault |= 1 - value: 7 - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 1 decimal - - - type: evaluate_write - address: [MAIN, 0x779A0E8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x77C79B8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01008AF01AD22000/222C0A2546723943.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01008AF01AD22000/222C0A2546723943.yaml deleted file mode 100644 index d5210e8..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01008AF01AD22000/222C0A2546723943.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# SpongeBob SquarePants: The Patrick Star Game 1.0.2 -# BID: 222C0A2546723943 - -unsafeCheck: true - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x6A54CF8, 0x48] - value_type: float - value: "1 / FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01008AF01AD22000/8F3E77E1322E9F6F.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01008AF01AD22000/8F3E77E1322E9F6F.yaml deleted file mode 100644 index 86c5bda..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01008AF01AD22000/8F3E77E1322E9F6F.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# SpongeBob SquarePants: The Patrick Star Game 1.0.1 -# BID: 8F3E77E1322E9F6F - -unsafeCheck: true - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x6A1F1B8, 0x48] - value_type: float - value: "1 / FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01008C2014340000/F00EFE6846627B4A.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01008C2014340000/F00EFE6846627B4A.yaml deleted file mode 100644 index 10654bc..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01008C2014340000/F00EFE6846627B4A.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# ワールズエンドクラブ 1.0.6 -# BID: F00EFE6846627B4A - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x6AC31C0, 0x48] - value_type: float - value: "1 / FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01008C8012920000/8C93B930348C9787.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01008C8012920000/8C93B930348C9787.yaml deleted file mode 100644 index 2aa3bee..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01008C8012920000/8C93B930348C9787.yaml +++ /dev/null @@ -1,74 +0,0 @@ -# Dying Light: Platinum Edition 1.0.5 -# BID: 8C93B930348C9787 - -DECLARATIONS: - - - type: variable - name: dr_timing1 - value_type: float - default_value: 0.034 - evaluate: "1.02 / FPS_TARGET" - - - type: variable - name: dr_timing2 - value_type: float - default_value: 0.028 - evaluate: "0.84 / FPS_TARGET" - - - type: variable - name: dr_timing3 - value_type: float - default_value: 0.0289855 - evaluate: "0.87 / FPS_TARGET" - - - type: variable - name: dr_timing4 - value_type: float - default_value: 0.0263158 - evaluate: "0.79 / FPS_TARGET" - - - type: variable - name: dr_timing5 - value_type: float - default_value: 0.0324675 - evaluate: "0.974 / FPS_TARGET" -MASTER_WRITE: - # Disable Dynamic GPU Clocks - - - type: asm_a64 - main_offset: 0x1DE89CC - instructions: [ - [nop] - ] - # Redirect Dynamic Resolution Timings - - - type: asm_a64 - main_offset: 0x1DE89A8 - instructions: [ - [adrp, x10, $dr_timing1], - [ldr, w10, [x10, $dr_timing1]] - ] - - - type: asm_a64 - main_offset: 0x1DE8A08 - instructions: [ - [adrp, x10, $dr_timing2], - [ldr, w10, [x10, $dr_timing2]] - ] - - - type: asm_a64 - main_offset: 0x1DE80C8 - instructions: [ - [adrp, x11, $dr_timing3], - [ldr, w12, [x11, $dr_timing3]], - [adrp, x11, $dr_timing4], - [ldr, w11, [x11, $dr_timing4]] - ] - - - type: asm_a64 - main_offset: 0x1DE80F8 - instructions: [ - [adrp, x11, $dr_timing5], - [ldr, w11, [x11, $dr_timing5]] - ] - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01008CB0156BC000/7735C8DD89D145F2.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01008CB0156BC000/7735C8DD89D145F2.yaml deleted file mode 100644 index e0bdef3..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01008CB0156BC000/7735C8DD89D145F2.yaml +++ /dev/null @@ -1,95 +0,0 @@ -# The Legend of Heroes: Trails into Reverie 1.0.4 -# BID: 7735C8DD89D145F2 -# "Beyond the Reverie" dream has broken text fade effects above 30 FPS. - -DECLARATIONS: - - - type: const - name: tick_frequency - value: 19200000 - - - type: variable - name: last_tick - value_type: uint64 - default_value: 0 - - - type: variable - name: actual_frametime - value_type: float - default_value: 0.033333333333 - - - type: variable - name: min_delta - value_type: float - default_value: 0.033333333333 - evaluate: "1/FPS_TARGET" - - - type: code - name: dynamicSpeed - instructions: [ - [adrp, x9, $min_delta], - [ldr, s1, [x9, $min_delta]], - [fmov, s3, 1.0], - [fmov, s2, 15.0], - [fdiv, s2, s3, s2], - [mrs, x8, cntpct_el0], - [adrp, x9, $last_tick], - [ldr, x10, [x9, $last_tick]], - [str, x8, [x9, $last_tick]], - [cmp, x10, xzr], - [b.eq, :goto3], - [sub, x10, x8, x10], - [ucvtf, s3, x10], - [mov, w9, $tick_frequency], - [movk, w9, $tick_frequency, 16], - [ucvtf, s4, w9], - [fdiv, s4, s3, s4], - [fcmp, s4, s1], - [b.hi, :goto1], - [fmov, s4, s1], - [b, :goto2], - :goto1, [fcmp, s4, s2], - [b.lt, :goto2], - [fmov, s4, s2], - :goto2, [adrp, x9, $actual_frametime], - [str, s4, [x9, $actual_frametime]], - :goto3, [mov, w8, 0x1af0], - [ret] - ] -MASTER_WRITE: - # Force FPS lock to 120 - - - type: asm_a64 - main_offset: 0x81AB0 - instructions: [ - [movk, w8, 0x3c08, 16] - ] - # Force refreshing camera to 120 Hz - - - type: asm_a64 - main_offset: 0x81AE4 - instructions: [ - [movk, w9, 0x3c08, 16] - ] - # Properly scale frametime for FPS drops - - - type: asm_a64 - main_offset: 0x81AEC - instructions: [ - [movk, w10, 0xbc08, 16] - ] -# Read actual frametime instead of hardcoded 1/30 - - - type: asm_a64 - main_offset: 0x8192C - instructions: [ - [bl, _dynamicSpeed()] - ] - # Read actual frametime as float in seconds - - - type: asm_a64 - main_offset: 0x81B50 - instructions: [ - [adrp, x11, $actual_frametime], - [ldr, w11, [x11, $actual_frametime]] - ] diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01008CD0172D6000/2B1C8B24F6744644.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01008CD0172D6000/2B1C8B24F6744644.yaml deleted file mode 100644 index 655b1cb..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01008CD0172D6000/2B1C8B24F6744644.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# Dredge 1.5.2 -# BID: 2B1C8B24F6744644 - -unsafeCheck: true - -ALL_FPS: - # fixedDeltaTime = 1/FPS - - - type: evaluate_write - address: [MAIN, 0x625CF60, 0x48] - value_type: float - value: "1 / FPS_TARGET" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01008CD0172D6000/B9CC2F4DE53D4F94.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01008CD0172D6000/B9CC2F4DE53D4F94.yaml deleted file mode 100644 index 01a8f19..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01008CD0172D6000/B9CC2F4DE53D4F94.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# Dredge 1.4.2 -# BID: B9CC2F4DE53D4F94 - -unsafeCheck: true - -ALL_FPS: - # fixedDeltaTime = 1/FPS - - - type: evaluate_write - address: [MAIN, 0x60E4E60, 0x48] - value_type: float - value: "1 / FPS_TARGET" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01008CD0172D6000/E711B99C30E041F7.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01008CD0172D6000/E711B99C30E041F7.yaml deleted file mode 100644 index 879196a..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01008CD0172D6000/E711B99C30E041F7.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# Dredge 1.5.1 -# BID: E711B99C30E041F7 - -unsafeCheck: true - -ALL_FPS: - # fixedDeltaTime = 1/FPS - - - type: evaluate_write - address: [MAIN, 0x6271E60, 0x48] - value_type: float - value: "1 / FPS_TARGET" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01008CD0172D6000/F716D367A6D7F5BA.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01008CD0172D6000/F716D367A6D7F5BA.yaml deleted file mode 100644 index 43f5224..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01008CD0172D6000/F716D367A6D7F5BA.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# Dredge 1.5.3 -# BID: F716D367A6D7F5BA - -unsafeCheck: true - -ALL_FPS: - # fixedDeltaTime = 1/FPS - - - type: evaluate_write - address: [MAIN, 0x625D1A0, 0x48] - value_type: float - value: "1 / FPS_TARGET" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01008D0016AF4000/FB827BF029E0778A.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01008D0016AF4000/FB827BF029E0778A.yaml deleted file mode 100644 index 381d72b..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01008D0016AF4000/FB827BF029E0778A.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# Neptunia x SENRAN KAGURA: Ninja Wars 1.0.0 -# BID: FB827BF029E0778A - -unsafeCheck: true - -ALL_FPS: - # 30FPS lock bool - - - type: write - address: [MAIN, 0x9E8D10, 8, 0x6C] - value_type: int32 - value: 0 diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01008D100D43E000/B6CFBB9BB8F8A2E7.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01008D100D43E000/B6CFBB9BB8F8A2E7.yaml deleted file mode 100644 index c8826e6..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01008D100D43E000/B6CFBB9BB8F8A2E7.yaml +++ /dev/null @@ -1,26 +0,0 @@ -# Saints Row IV: Re-Elected 1.8.0 -# BID: B6CFBB9BB8F8A2E7 - -DECLARATIONS: - - - type: variable - name: frametime_target - value_type: double - default_value: -30.0 - evaluate: "-0.9 * FRAMETIME_TARGET" - - - type: code - name: getFrametimeTarget - instructions: [ - [adrp, x23, $frametime_target], - [ldr, d9, [x23, $frametime_target]], - [ret] - ] -MASTER_WRITE: - # REF: 09 D0 77 1E - - - type: asm_a64 - main_offset: 0x145CA44 - instructions: [ - [bl, _getFrametimeTarget()] - ] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01008D4007A1E000/C3D46BB3C7059DB1.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01008D4007A1E000/C3D46BB3C7059DB1.yaml deleted file mode 100644 index 9998ea5..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01008D4007A1E000/C3D46BB3C7059DB1.yaml +++ /dev/null @@ -1,29 +0,0 @@ -# Outlast 1.0.1 -# BID: C3D46BB3C7059DB1 - -MASTER_WRITE: - # Remove double buffer - - - type: asm_a64 - main_offset: 0xB52C64 - instructions: [ - [cmp, x28, 0x18] - ] - - - type: asm_a64 - main_offset: 0xB52CD0 - instructions: [ - [mov, w1, 3] - ] - - - type: asm_a64 - main_offset: 0xB529A8 - instructions: [ - [cmp, x28, 0x18] - ] - - - type: asm_a64 - main_offset: 0xB52A14 - instructions: [ - [mov, w1, 3] - ] diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01008D4015904000/CA77083E259D87A2.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01008D4015904000/CA77083E259D87A2.yaml deleted file mode 100644 index f412bd2..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01008D4015904000/CA77083E259D87A2.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# Ultra Age 2.0.4 -# BID: CA77083E259D87A2 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x7984A48, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x79B22F8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01008D80148C8000/BC82DB38671F8468.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01008D80148C8000/BC82DB38671F8468.yaml deleted file mode 100644 index c9569b3..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01008D80148C8000/BC82DB38671F8468.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# King of Seas 1.0.4 -# BID: BC82DB38671F8468 - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x5A0F940, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x4E7AA98, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01008E101E868000/42AD50169E847BA2.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01008E101E868000/42AD50169E847BA2.yaml deleted file mode 100644 index 221752d..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01008E101E868000/42AD50169E847BA2.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# Bum Simulator 1.0.2 -# BID: 42AD50169E847BA2 - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x5C858B8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x5489068, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01008E101E868000/CE6953FB28A66265.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01008E101E868000/CE6953FB28A66265.yaml deleted file mode 100644 index 5fe1d33..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01008E101E868000/CE6953FB28A66265.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# Bum Simulator 1.0.3 -# BID: CE6953FB28A66265 - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x5C858B8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x5489408, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01008E401E6D0000/C124FFD193F533B4.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01008E401E6D0000/C124FFD193F533B4.yaml deleted file mode 100644 index a6a0841..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01008E401E6D0000/C124FFD193F533B4.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# The Smurfs - Dreams 1.0.1 -# BID: C124FFD193F533B4 - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x831F958, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x92DCDE8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x9317260, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01008E401E6D0000/E08769D5B56A5A25.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01008E401E6D0000/E08769D5B56A5A25.yaml deleted file mode 100644 index 3b199a7..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01008E401E6D0000/E08769D5B56A5A25.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# The Smurfs - Dreams 1.0.2/1.0.3 -# BID: E08769D5B56A5A25 - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x8321958, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x9319260, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01008F600F2D0000/EB57CF3434044523.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01008F600F2D0000/EB57CF3434044523.yaml deleted file mode 100644 index eeb5ac5..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01008F600F2D0000/EB57CF3434044523.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Remothered Tormented Fathers 1.3.0 -# BID: EB57CF3434044523 -# Game stores textures inside fixed size class, so it's hard to get triple buffer - -ALL_FPS: - # Disable bUseFixedFrameRate and bSmoothFrameRate - - - type: write - address: [MAIN, 0x54C75F0, 0x770] - address_unsafe: true - value_type: uint32 - value: 7 - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x54C7F70, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x4C641D0, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010090100E334000/05D2208140190484.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010090100E334000/05D2208140190484.yaml deleted file mode 100644 index 9dbde66..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010090100E334000/05D2208140190484.yaml +++ /dev/null @@ -1,13 +0,0 @@ -# Don't Starve Together 1.23.0 -# BID: 05D2208140190484 - -ALL_FPS: - # FPS Lock - # REF: find instruction 36 D9 34 F8, set breakpoint in GDB, use X9 to find main offset (ignore addend) - - - type: evaluate_write - address: [MAIN, 0xD692DF0, 0x320] - address_unsafe: true - value_type: float - value: "1 / FPS_TARGET" - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010090100E334000/CBFC09BA9105CD4D.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010090100E334000/CBFC09BA9105CD4D.yaml deleted file mode 100644 index 4b1afad..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010090100E334000/CBFC09BA9105CD4D.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# Don't Starve Together 1.24.0 -# BID: CBFC09BA9105CD4D - -ALL_FPS: - # FPS Lock - # REF: Find instruction 36 D9 34 F8, use X9 to find main offset - - - type: evaluate_write - address: [MAIN, 0x91C448, 0, 0x320] - address_unsafe: true - value_type: float - value: "1 / FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01009040091E0000/F2FE5EF877839F4F.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01009040091E0000/F2FE5EF877839F4F.yaml deleted file mode 100644 index e328970..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01009040091E0000/F2FE5EF877839F4F.yaml +++ /dev/null @@ -1,30 +0,0 @@ -# Wolfenstein 2: The New Colossus 1.2 -# BID: F2FE5EF877839F4F - -unsafeCheck: true - -ALL_FPS: - # rs_force460 (default) - - - type: write - address: [MAIN, 0x60E0170] - value_type: int32 - value: 1 - # rs_raiseMilliseconds (32/(1000/30))*(1000/FPS) - - - type: evaluate_write - address: [MAIN, 0x60E0294] - value_type: float - value: "0.96 * FRAMETIME_TARGET" - # rs_dropMilliseconds (32.8/(1000/30))*(1000/FPS) - - - type: evaluate_write - address: [MAIN, 0x60E0204] - value_type: float - value: "0.984 * FRAMETIME_TARGET" - # com_adaptiveTickMaxHz (default) - - - type: evaluate_write - address: [MAIN, 0x62D0570] - value_type: int32 - value: FPS_LOCK_TARGET diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100906014C3C000/EAB1DC1D53E319F9.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100906014C3C000/EAB1DC1D53E319F9.yaml deleted file mode 100644 index 1f344b5..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100906014C3C000/EAB1DC1D53E319F9.yaml +++ /dev/null @@ -1,15 +0,0 @@ -# The Legend of Heroes: Trails of Cold Steel (Sen on Kiseki) II Kai -THE EREBONIAN CIVIL WAR- -# 英雄伝説 閃の軌跡Ⅱ:改 -THE EREBONIAN CIVIL WAR- -# BID: EAB1DC1D53E319F9 - -unsafeCheck: true - -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0xB05B70] - value_type: float - value: "1 / FPS_TARGET" - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01009060193C4000/B880EEE5B8946289.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01009060193C4000/B880EEE5B8946289.yaml deleted file mode 100644 index 30a88ef..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01009060193C4000/B880EEE5B8946289.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Five Nights at Freddy's: Security Breach 0.5 -# BID: B880EEE5B8946289 - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x60584A8, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x682B5A8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x68596E8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010090F012916000/D3DD5B220DCEB626.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010090F012916000/D3DD5B220DCEB626.yaml deleted file mode 100644 index 458f055..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010090F012916000/D3DD5B220DCEB626.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Ghostrunner 1.8 -# BID: D3DD5B220DCEB626 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget = 0.93 * (1000/FPS) - - - type: evaluate_write - address: [MAIN, 0x6B0C480, 0] - value_type: float - value: ["0.93 * FRAMETIME_TARGET", "0.93 * FRAMETIME_TARGET"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6B35A08, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010091901E440000/8021F22E7A401A3E.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010091901E440000/8021F22E7A401A3E.yaml deleted file mode 100644 index 6f2df0e..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010091901E440000/8021F22E7A401A3E.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Daymare: 1994 Sandcastle 1.0 -# BID: 8021F22E7A401A3E - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x75DCBD8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x760A548, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6E0E228, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010091B01A438000/A735894277FF90F3.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010091B01A438000/A735894277FF90F3.yaml deleted file mode 100644 index 66e9c84..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010091B01A438000/A735894277FF90F3.yaml +++ /dev/null @@ -1,41 +0,0 @@ -# 零 ~月蝕的假面~ 1.0.3 -# BID: A735894277FF90F3 - -DECLARATIONS: - - - type: variable - name: min_delta - value_type: float - default_value: 0.0333333333 - evaluate: "1 / FPS_TARGET" - - - type: variable - name: fps_lock - value_type: uint32 - default_value: 33333333 - evaluate: "1000000000 / FPS_TARGET" -MASTER_WRITE: - # Redirect min delta - # REF: 00 D9 21 7E 28 19 20 1E - - - type: asm_a64 - main_offset: 0x16D9B4 - instructions: [ - [adrp, x27, $min_delta], - [ldr, s8, [x27, $min_delta]] - ] - # Redirect FPS Lock - # REF: 69 B2 40 B9 0A 40 99 52 - - - type: asm_a64 - main_offset: 0x16DDD0 - instructions: [ - [adrp, x9, $fps_lock], - [ldr, w9, [x9, $fps_lock]], - [nop], - [nop] - ] -ALL_FPS: - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100926016012000/30997D8F7566EBB5.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100926016012000/30997D8F7566EBB5.yaml deleted file mode 100644 index 8f5b23b..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100926016012000/30997D8F7566EBB5.yaml +++ /dev/null @@ -1,11 +0,0 @@ -# PowerWash Simulator 1.10.0 -# BID: 30997D8F7566EBB5 - -ALL_FPS: - # FuturLab.SingletonMonoBehaviour_TypeInfo (don't block FPSlocker internal lock because game's lock is kinda shit) - - - type: evaluate_write - address: [MAIN, 0x6043ED0, 0xB8, 0, 0x28] - address_unsafe: true - value_type: int32 - value: FPS_LOCK_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100926016012000/561B0F485E699E4E.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100926016012000/561B0F485E699E4E.yaml deleted file mode 100644 index c906456..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100926016012000/561B0F485E699E4E.yaml +++ /dev/null @@ -1,11 +0,0 @@ -# PowerWash Simulator 1.11.0 -# BID: 561B0F485E699E4E - -ALL_FPS: - # FuturLab.SingletonMonoBehaviour_TypeInfo (don't block FPSlocker internal lock because game's lock is kinda shit) - - - type: evaluate_write - address: [MAIN, 0x606A350, 0xB8, 0, 0x28] - address_unsafe: true - value_type: int32 - value: FPS_LOCK_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100926016012000/7FF42DE6AA57290B.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100926016012000/7FF42DE6AA57290B.yaml deleted file mode 100644 index d255444..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100926016012000/7FF42DE6AA57290B.yaml +++ /dev/null @@ -1,11 +0,0 @@ -# PowerWash Simulator 1.9.1 -# BID: 7FF42DE6AA57290B - -ALL_FPS: - # FuturLab.SingletonMonoBehaviour_TypeInfo (don't block FPSlocker internal lock because game's lock is kinda shit) - - - type: evaluate_write - address: [MAIN, 0x5FA0BD8, 0xB8, 0, 0x28] - address_unsafe: true - value_type: int32 - value: FPS_LOCK_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100926016012000/8EACFE3E9E92B0FE.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100926016012000/8EACFE3E9E92B0FE.yaml deleted file mode 100644 index 538356e..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100926016012000/8EACFE3E9E92B0FE.yaml +++ /dev/null @@ -1,11 +0,0 @@ -# PowerWash Simulator 1.7.0 -# BID: 8EACFE3E9E92B0FE - -ALL_FPS: - # FuturLab.SingletonMonoBehaviour_TypeInfo (don't block FPSlocker internal lock because game's lock is kinda shit) - - - type: evaluate_write - address: [MAIN, 0x5F1DC68, 0xB8, 0, 0x28] - address_unsafe: true - value_type: int32 - value: FPS_LOCK_TARGET diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100926016012000/B2395B882C2BCB24.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100926016012000/B2395B882C2BCB24.yaml deleted file mode 100644 index dcb2c80..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100926016012000/B2395B882C2BCB24.yaml +++ /dev/null @@ -1,11 +0,0 @@ -# PowerWash Simulator 1.9.2 -# BID: B2395B882C2BCB24 - -ALL_FPS: - # FuturLab.SingletonMonoBehaviour_TypeInfo (don't block FPSlocker internal lock because game's lock is kinda shit) - - - type: evaluate_write - address: [MAIN, 0x5FA0BD8, 0xB8, 0, 0x28] - address_unsafe: true - value_type: int32 - value: FPS_LOCK_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010092A0172E4000/C4067E8CB3258656.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010092A0172E4000/C4067E8CB3258656.yaml deleted file mode 100644 index 8332894..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010092A0172E4000/C4067E8CB3258656.yaml +++ /dev/null @@ -1,28 +0,0 @@ -# It Takes Two 1.0.2 -# BID: C4067E8CB3258656 - -unsafeCheck: true - -MASTER_WRITE: - # Set Triple Buffer - - - type: bytes - main_offset: 0x8AA9FBC - value_type: int8 - value: 0x53 -ALL_FPS: - # r.DynamicRes.FrameTimeBudget = 0.87 * (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0xACCB3D8, 0] - value_type: float - value: ["TruncDec(0.87 * FRAMETIME_TARGET, 2)", "TruncDec(0.87 * FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xACF9130, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010093C01F256000/CABB3B5447C2F79F.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010093C01F256000/CABB3B5447C2F79F.yaml deleted file mode 100644 index 0d722f3..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010093C01F256000/CABB3B5447C2F79F.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# MOBILE SUIT GUNDAM SEED BATTLE DESTINY REMASTERED 1.0.1 -# BID: CABB3B5447C2F79F - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x6CA8608, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6CD62D8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x64D97E8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010093C0215B4000/26350BBA224575AE.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010093C0215B4000/26350BBA224575AE.yaml deleted file mode 100644 index 4dc175e..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010093C0215B4000/26350BBA224575AE.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# The Hundred Line -Last Defense Academy- 1.0.4/1.0.5 -# BID: 26350BBA224575AE -# Last found function with REF: FD 7B BE A9 F3 0B 00 F9 FD 03 00 91 E0 03 01 2A stores some code related to playing above 60 FPS. Look at it if someone will have an issue playing above 60 FPS. - -unsafeCheck: true - -ALL_FPS: - # FPS Lock - # REF: 1B 41 00 00 - - - type: evaluate_write - address: [MAIN, 0xC8BC78] - value_type: uint32 - value: FRAMETIME_TARGET * 1000 - # Unknown value, but set in the same function as FPS lock, so it may be important - # REF: 3C 00 00 00 01 00 00 00 00 00 00 00 - - - type: evaluate_write - address: [MAIN, 0xC8BC44] - value_type: uint32 - value: FPS_TARGET diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010093C0215B4000/5AF690F4A8BFCC67.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010093C0215B4000/5AF690F4A8BFCC67.yaml deleted file mode 100644 index 88f90c7..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010093C0215B4000/5AF690F4A8BFCC67.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# The Hundred Line -Last Defense Academy- 1.0.6 -# BID: 5AF690F4A8BFCC67 -# Last found function with REF: FD 7B BE A9 F3 0B 00 F9 FD 03 00 91 E0 03 01 2A stores some code related to playing above 60 FPS. Look at it if someone will have an issue playing above 60 FPS. - -unsafeCheck: true - -ALL_FPS: - # FPS Lock - # REF: 1B 41 00 00 - - - type: evaluate_write - address: [MAIN, 0xC8CC78] - value_type: uint32 - value: FRAMETIME_TARGET * 1000 - # Unknown value, but set in the same function as FPS lock, so it may be important - # REF: 3C 00 00 00 01 00 00 00 00 00 00 00 - - - type: evaluate_write - address: [MAIN, 0xC8CC44] - value_type: uint32 - value: FPS_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010093C0215B4000/7816CA5FECA60315.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010093C0215B4000/7816CA5FECA60315.yaml deleted file mode 100644 index f34e102..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010093C0215B4000/7816CA5FECA60315.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# The Hundred Line -Last Defense Academy- 1.0.3 -# BID: 7816CA5FECA60315 -# Last found function with REF: FD 7B BE A9 F3 0B 00 F9 FD 03 00 91 E0 03 01 2A stores some code related to playing above 60 FPS. Look at it if someone will have an issue playing above 60 FPS. - -unsafeCheck: true - -ALL_FPS: - # FPS Lock - # REF: 1B 41 00 00 - - - type: evaluate_write - address: [MAIN, 0xC8BC78] - value_type: uint32 - value: FRAMETIME_TARGET * 1000 - # Unknown value, but set in the same function as FPS lock, so it may be important - # REF: 3C 00 00 00 01 00 00 00 00 00 00 00 - - - type: evaluate_write - address: [MAIN, 0xC8BC44] - value_type: uint32 - value: FPS_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010093C0215B4000/D1D3FFB94AB458B4.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010093C0215B4000/D1D3FFB94AB458B4.yaml deleted file mode 100644 index 4d18d40..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010093C0215B4000/D1D3FFB94AB458B4.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# The Hundred Line -Last Defense Academy- 1.1.2 -# BID: D1D3FFB94AB458B4 -# Last found function with REF: FD 7B BE A9 F3 0B 00 F9 FD 03 00 91 E0 03 01 2A stores some code related to playing above 60 FPS. Look at it if someone will have an issue playing above 60 FPS. - -unsafeCheck: true - -ALL_FPS: - # FPS Lock - # REF: 1B 41 00 00 - - - type: evaluate_write - address: [MAIN, 0xC95D10] - value_type: uint32 - value: FRAMETIME_TARGET * 1000 - # Unknown value, but set in the same function as FPS lock, so it may be important - # REF: 3C 00 00 00 01 00 00 00 00 00 00 00 - - - type: evaluate_write - address: [MAIN, 0xC95CDC] - value_type: uint32 - value: FPS_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010093C0215B4000/EAADF33F510C5853.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010093C0215B4000/EAADF33F510C5853.yaml deleted file mode 100644 index e308f7b..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010093C0215B4000/EAADF33F510C5853.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# The Hundred Line -Last Defense Academy- 1.1.1 -# BID: EAADF33F510C5853 -# Last found function with REF: FD 7B BE A9 F3 0B 00 F9 FD 03 00 91 E0 03 01 2A stores some code related to playing above 60 FPS. Look at it if someone will have an issue playing above 60 FPS. - -unsafeCheck: true - -ALL_FPS: - # FPS Lock - # REF: 1B 41 00 00 - - - type: evaluate_write - address: [MAIN, 0xC95D10] - value_type: uint32 - value: FRAMETIME_TARGET * 1000 - # Unknown value, but set in the same function as FPS lock, so it may be important - # REF: 3C 00 00 00 01 00 00 00 00 00 00 00 - - - type: evaluate_write - address: [MAIN, 0xC95CDC] - value_type: uint32 - value: FPS_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010093D00CB22000/E8418C6B4BDCC1EE.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010093D00CB22000/E8418C6B4BDCC1EE.yaml deleted file mode 100644 index f91c775..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010093D00CB22000/E8418C6B4BDCC1EE.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Maneater 1.02 -# BID: E8418C6B4BDCC1EE - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x6FF8FB0, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x70241F0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6858620, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100947013122000/9FC46F388F6C684C.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100947013122000/9FC46F388F6C684C.yaml deleted file mode 100644 index 0b1c981..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100947013122000/9FC46F388F6C684C.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# Ruined King: A League of Legends Story 1.7 -# BID: 9FC46F388F6C684C - -unsafeCheck: true - -#TODO: Patch DR FPS targets directly, for now -1 = 30 FPS, 0 = 60 FPS -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x5B18318, 0x944] - value_type: int32 - value: "(VSYNC_TARGET * -1) + 1" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100950012F66000/D1B29E1ABDCD955E.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100950012F66000/D1B29E1ABDCD955E.yaml deleted file mode 100644 index 70e4c73..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100950012F66000/D1B29E1ABDCD955E.yaml +++ /dev/null @@ -1,38 +0,0 @@ -# テニス ワールドツアー 2 1.3.0 -# BID: D1B29E1ABDCD955E - -DECLARATIONS: - - - type: variable - name: dr_target - value_type: float - default_value: 0.03333333333 - evaluate: "1 / FPS_TARGET" - - - type: code - name: tripleBuffer - instructions: [ - [mov, w9, 3], - [str, w9, [x8, 0x1A0]], - [mov, w8, w9], - [ret] - ] -MASTER_WRITE: - # Triple buffer - # REF: 00 40 00 00 00 04 00 00 00 88 00 00 02 00 00 00 - - - type: asm_a64 - main_offset: 0x726338 - instructions: [ - [bl, _tripleBuffer()] - ] - # Redirect Dynamic Resolution target reading to MAIN + 0x30C3F00 - # REF: 28 11 91 52 08 A1 A7 72 03 01 27 1E - - - type: asm_a64 - main_offset: 0x1896448 - instructions: [ - [adrp, x12, $dr_target], - [ldr, s17, [x12, $dr_target]], - [nop] - ] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010095301AAEE000/FE78C7B94C4E791A.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010095301AAEE000/FE78C7B94C4E791A.yaml deleted file mode 100644 index 2781932..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010095301AAEE000/FE78C7B94C4E791A.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# HOT WHEELS UNLEASHED 2 `JPN` 1.0.11 -# BID: FE78C7B94C4E791A - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0xAD73888, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0xB58D090, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xB631E08, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100956016464000/F9C83728910E28A4.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100956016464000/F9C83728910E28A4.yaml deleted file mode 100644 index 2dbee9e..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100956016464000/F9C83728910E28A4.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Kao the Kangaroo EU 1.5 -# BID: F9C83728910E28A4 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget = (1000/FPS) cutted to 1 decimal - - - type: evaluate_write - address: [MAIN, 0x71160E0, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x71C39F0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x696CDD8, 0] - value_type: int32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010095D012E5E000/929D9160BA57A570.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010095D012E5E000/929D9160BA57A570.yaml deleted file mode 100644 index b7874d7..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010095D012E5E000/929D9160BA57A570.yaml +++ /dev/null @@ -1,23 +0,0 @@ -# DYNASTY WARRIORS 9 Empires 1.0.1 -# BID: 929D9160BA57A570 - -ALL_FPS: - ## REF: 02 00 00 00 3C 00 00 00 - - - type: evaluate_write - address: [MAIN, 0x2110728] - value_type: int32 - value: [VSYNC_TARGET, FPS_TARGET] - - - type: evaluate_write - address: [MAIN, 0x2110730] - value_type: float - value: FPS_TARGET - - - type: evaluate_write - address: [MAIN, 0x34DE954] - value_type: float - value: "1 / FPS_TARGET" - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010097000BC10000/FB4239AA962B429B.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010097000BC10000/FB4239AA962B429B.yaml deleted file mode 100644 index 6724958..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010097000BC10000/FB4239AA962B429B.yaml +++ /dev/null @@ -1,56 +0,0 @@ -# resident evil 0 1.0.0 -# BID: FB4239AA962B429B - -DECLARATIONS: - - - type: variable - name: cutscene_flag - value_type: uint32 - default_value: 0 - - - type: code - name: signalCutscene - instructions: [ - [add, x29, sp, 0x10], - [adrp, x8, $cutscene_flag], - [mov, w1, 1], - [str, w1, [x8, $cutscene_flag]], - [ret] - ] - - - type: code - name: designalCutscene - instructions: [ - [adrp, x3, $cutscene_flag], - [str, wzr, [x3, $cutscene_flag]], - [ret] - ] -MASTER_WRITE: - # Detect prerendered cutscenes - - - type: asm_a64 - main_offset: 0x9F2548 - instructions: [ - [bl, _signalCutscene()] - ] - - - type: asm_a64 - main_offset: 0x9F26EC - instructions: [ - [b, _designalCutscene()] - ] -ALL_FPS: - # Internal FPS Lock - - - type: evaluate_write - address: [MAIN, 0x1BAAC60, 0x4C] - value_type: float - value: "FPS_LOCK_TARGET" - - - type: compare - compare_type: "==" - compare_value: 1 - compare_address: [VARIABLE, cutscene_flag] - value_type: refresh_rate - value: 30 - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010097100EDD6000/7F4216B6E784A4B2.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010097100EDD6000/7F4216B6E784A4B2.yaml deleted file mode 100644 index 487c413..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010097100EDD6000/7F4216B6E784A4B2.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Little Nightmares 2 1.4 -# BID: 7F4216B6E784A4B2 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 4 decimals - - - type: evaluate_write - address: [MAIN, 0x74A0370, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 4)", "TruncDec(FRAMETIME_TARGET, 4)"] - # t.MaxFPS (it slows down below 20 FPS) - - - type: evaluate_write - address: [MAIN, 0x74CC710, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/0E7A0A7276477C53.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/0E7A0A7276477C53.yaml deleted file mode 100644 index 2ddd7ed..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/0E7A0A7276477C53.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# DAVE THE DIVER 1.0.4.1039 -# BID: 0E7A0A7276477C53 - -unsafeCheck: true - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x98DE640, 0x48] - value_type: float - value: "1 / FPS_TARGET" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/2E3EAEB4B6834BEF.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/2E3EAEB4B6834BEF.yaml deleted file mode 100644 index 1979a79..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/2E3EAEB4B6834BEF.yaml +++ /dev/null @@ -1,13 +0,0 @@ -# DAVE THE DIVER 1.0.2.812 -# BID: 2E3EAEB4B6834BEF - -unsafeCheck: true - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - # Required for different refresh rates to not jitter - - - type: evaluate_write - address: [MAIN, 0x94E3C00, 0x48] - value_type: float - value: "1 / FPS_TARGET" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/37CBC5751D80E70E.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/37CBC5751D80E70E.yaml deleted file mode 100644 index fa39a82..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/37CBC5751D80E70E.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# DAVE THE DIVER 1.0.2.843 -# BID: 37CBC5751D80E70E - -unsafeCheck: true - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x9510480, 0x48] - value_type: float - value: "1 / FPS_TARGET" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/448820AF8E20D65D.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/448820AF8E20D65D.yaml deleted file mode 100644 index 9cd6e8a..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/448820AF8E20D65D.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# DAVE THE DIVER 1.0.3.972 -# BID: 448820AF8E20D65D - -unsafeCheck: true - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x9735300, 0x48] - value_type: float - value: "1 / FPS_TARGET" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/456BDB6160D317A3.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/456BDB6160D317A3.yaml deleted file mode 100644 index db0a832..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/456BDB6160D317A3.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# DAVE THE DIVER 1.0.4.1034 -# BID: 456BDB6160D317A3 - -unsafeCheck: true - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x98DF500, 0x48] - value_type: float - value: "1 / FPS_TARGET" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/491561854A6DC444.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/491561854A6DC444.yaml deleted file mode 100644 index 74e0f94..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/491561854A6DC444.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# DAVE THE DIVER 1.0.3.957 -# BID: 491561854A6DC444 - -unsafeCheck: true - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x97343C0, 0x48] - value_type: float - value: "1 / FPS_TARGET" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/4983F1C36957B7E5.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/4983F1C36957B7E5.yaml deleted file mode 100644 index 2e59b5c..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/4983F1C36957B7E5.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# DAVE THE DIVER 1.0.2.882 -# BID: 4983F1C36957B7E5 - -unsafeCheck: true - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x95151C0, 0x48] - value_type: float - value: "1 / FPS_TARGET" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/500A59C7C5A7C1E8.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/500A59C7C5A7C1E8.yaml deleted file mode 100644 index a2e5fc5..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/500A59C7C5A7C1E8.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# DAVE THE DIVER 1.0.3.978 -# BID: 500A59C7C5A7C1E8 - -unsafeCheck: true - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x97367C0, 0x48] - value_type: float - value: "1 / FPS_TARGET" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/54300203FF8ABCC6.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/54300203FF8ABCC6.yaml deleted file mode 100644 index e155057..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/54300203FF8ABCC6.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# DAVE THE DIVER 1.0.3.938 -# BID: 54300203FF8ABCC6 - -unsafeCheck: true - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x97BB3C0, 0x48] - value_type: float - value: "1 / FPS_TARGET" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/682B1552A9C571C9.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/682B1552A9C571C9.yaml deleted file mode 100644 index 6c784f2..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/682B1552A9C571C9.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# DAVE THE DIVER 1.0.4.1075 -# BID: 682B1552A9C571C9 - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x98E9540, 0x48] - value_type: float - value: "1 / FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/741C1E11C3A1FD02.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/741C1E11C3A1FD02.yaml deleted file mode 100644 index 7bd5ae1..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/741C1E11C3A1FD02.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# DAVE THE DIVER 1.0.2.894 -# BID: 741C1E11C3A1FD02 - -unsafeCheck: true - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x9517100, 0x48] - value_type: float - value: "1 / FPS_TARGET" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/757760621154BA5A.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/757760621154BA5A.yaml deleted file mode 100644 index f7fd372..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/757760621154BA5A.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# DAVE THE DIVER 1.0.4.1029 -# BID: 757760621154BA5A - -unsafeCheck: true - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x98E8280, 0x48] - value_type: float - value: "1 / FPS_TARGET" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/8ACF8D236ADAB16F.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/8ACF8D236ADAB16F.yaml deleted file mode 100644 index bd1a0e5..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/8ACF8D236ADAB16F.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# DAVE THE DIVER 1.0.4.1040 -# BID: 8ACF8D236ADAB16F - -unsafeCheck: true - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x98E8680, 0x48] - value_type: float - value: "1 / FPS_TARGET" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/AE7422A20BC9C3B0.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/AE7422A20BC9C3B0.yaml deleted file mode 100644 index 925859a..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010097F018538000/AE7422A20BC9C3B0.yaml +++ /dev/null @@ -1,13 +0,0 @@ -# DAVE THE DIVER 1.0.2.828 -# BID: AE7422A20BC9C3B0 - -unsafeCheck: true - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - # Required for different refresh rates to not jitter - - - type: evaluate_write - address: [MAIN, 0x9505680, 0x48] - value_type: float - value: "1 / FPS_TARGET" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010098A0128C6000/3D4E3A9252AA6C63.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010098A0128C6000/3D4E3A9252AA6C63.yaml deleted file mode 100644 index 4b5999d..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010098A0128C6000/3D4E3A9252AA6C63.yaml +++ /dev/null @@ -1,23 +0,0 @@ -# 죠죠의 기묘한 모험 올 스타 배틀 R / JOJO的奇妙冒險 群星之戰 重製版 2.3.3 -# BID: 3D4E3A9252AA6C63 -# There are small issues with animations in cutscenes at higher framerates - -ALL_FPS: - # Internal FPS Lock, pointer ref: 00 01 40 F9 E5 03 04 2A - - - type: evaluate_write - address: [MAIN, 0x2AEDA08, 704] - value_type: uint32 - value: VSYNC_TARGET - # Game Speed, pointer ref: F3 03 00 AA 20 00 80 52 F4 03 01 AA - - - type: evaluate_write - address: [MAIN, 0x2AEF6D0, 1360] - value_type: uint32 - value: VSYNC_TARGET - # UI Speed - - - type: evaluate_write - address: [MAIN, 0x2AEF6D0, 2554] - value_type: uint8 - value: FPS_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010098A02288A000/7E610F688F92412B.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010098A02288A000/7E610F688F92412B.yaml deleted file mode 100644 index 15f50e3..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010098A02288A000/7E610F688F92412B.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Out of Sight 1.0.3 -# BID: 7E610F688F92412B - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x7995058, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x79D1700, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x7E26190, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01009970122E4000/AE2768797E3337EE.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01009970122E4000/AE2768797E3337EE.yaml deleted file mode 100644 index 3d027d6..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01009970122E4000/AE2768797E3337EE.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Borderlands 3 1.0.3 -# BID: AE2768797E3337EE - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0xDD56640, 0] - value_type: float - value: ["0.969 * FRAMETIME_TARGET", "0.969 * FRAMETIME_TARGET"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xDD857C0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0xD0C52B8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010099900CAB2000/F2F739A2F1CAFF72.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010099900CAB2000/F2F739A2F1CAFF72.yaml deleted file mode 100644 index af76323..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010099900CAB2000/F2F739A2F1CAFF72.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# TT Isle of Man 1.1.0 -# BID: F2F739A2F1CAFF72 - -unsafeCheck: true - -ALL_FPS: - # OptimalFrameDuration_ms = (1000/FPS) - (0.07 * (1000/30) - - - type: evaluate_write - address: [MAIN, 0x171DE2C] - value_type: float - value: "FRAMETIME_TARGET - (0.07 * (1000/30))" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/010099C01896C000/60B9AE6094566A23.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/010099C01896C000/60B9AE6094566A23.yaml deleted file mode 100644 index 1396666..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/010099C01896C000/60B9AE6094566A23.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Gripper 1.1.0 -# BID: 60B9AE6094566A23 - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x72ED6D8, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7AE9F08, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01009A5009A9E000/069E3EFC16365FFD.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01009A5009A9E000/069E3EFC16365FFD.yaml deleted file mode 100644 index f5742f6..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01009A5009A9E000/069E3EFC16365FFD.yaml +++ /dev/null @@ -1,29 +0,0 @@ -# Shining Resonance Refrain 1.0.1 -# BID: 069E3EFC16365FFD -# Possible values to tweak if something happens: 0xFC0DE0 = 1.0, 0xFC0DD4 = 1.0, 0xFC0DD0 = 1.0, 0xFC0DCC = 1.0, 0xFC0DD8 - UI speed factor, don't change because it's dynamic - -unsafeCheck: true - -MASTER_WRITE: - # Triple buffer - # REF: 28 60 81 52 E8 37 00 B9 E8 03 1F 32 - - - type: asm_a64 - main_offset: 0x3AE35C - instructions: [ - [mov, w8, 3] - ] -ALL_FPS: - # Disable FPS Lock - # REF: C8 46 90 52 first ADRP + LDR + LDR above it - - - type: write - address: [MAIN, 0xFC0DC8] - value_type: uint32 - value: 0 - # Lipsync fix - - - type: evaluate_write - address: [MAIN, 0xFC0DDC] - value_type: float - value: "30.0 / FPS_TARGET" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01009BC00B872000/53116900DC7BBE11.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01009BC00B872000/53116900DC7BBE11.yaml deleted file mode 100644 index ab56c24..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01009BC00B872000/53116900DC7BBE11.yaml +++ /dev/null @@ -1,28 +0,0 @@ -# City of Brass 1.2.0 -# BID: 53116900DC7BBE11 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x6257960, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 4)", "TruncDec(FRAMETIME_TARGET, 4)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x627BE28, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x5A2B258, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01009D200952E000/028C5AB881F17582.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01009D200952E000/028C5AB881F17582.yaml deleted file mode 100644 index 8d5ea7c..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01009D200952E000/028C5AB881F17582.yaml +++ /dev/null @@ -1,32 +0,0 @@ -# MudRunner - American Wilds Edition 4.5 -# BID: 028C5AB881F17582 - -DECLARATIONS: - - - type: variable - name: dr_gpu_target_max - value_type: float - default_value: 21.5 - evaluate: 0.645 * FRAMETIME_TARGET - - - type: variable - name: dr_gpu_target_min - value_type: float - default_value: 19.5 - evaluate: (0.645 * FRAMETIME_TARGET) - 2 -MASTER_WRITE: - # Redirect DR frametime target - - - type: asm_a64 - main_offset: 0xA30A0 - instructions: [ - [adrp, x9, $dr_gpu_target_max], - [ldr, s1, [x9, $dr_gpu_target_max]] - ] - - - type: asm_a64 - main_offset: 0xA30D8 - instructions: [ - [adrp, x9, $dr_gpu_target_min], - [ldr, s1, [x9, $dr_gpu_target_min]] - ] diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01009E701356A000/72E8F20EBBDBA296.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01009E701356A000/72E8F20EBBDBA296.yaml deleted file mode 100644 index 2a7e2d7..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01009E701356A000/72E8F20EBBDBA296.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Destroy All Humans! 1.0.1 -# BID: 72E8F20EBBDBA296 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) rounded to 1 decimal - - - type: evaluate_write - address: [MAIN, 0x66C53A0, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x66ED320, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01009E702225A000/07E20F126ABEFF78.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01009E702225A000/07E20F126ABEFF78.yaml deleted file mode 100644 index 4fc229d..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01009E702225A000/07E20F126ABEFF78.yaml +++ /dev/null @@ -1,16 +0,0 @@ -# Hannah 1.0.3 -# BID: 07E20F126ABEFF78 - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x60CB978, 0] - value_type: uint32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x70C3140, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01009EB00EBAA000/4BC4A8A814FD46A4.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01009EB00EBAA000/4BC4A8A814FD46A4.yaml deleted file mode 100644 index 2e51cdf..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01009EB00EBAA000/4BC4A8A814FD46A4.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# ウィッチャー3 ワイルドハント コンプリートエディション `Cartridge only` 4.04a-4.04b -# BID: 4BC4A8A814FD46A4 - -ALL_FPS: - # DRGameTargetFrameTimeInMs - - - type: evaluate_write - address: [MAIN, 0x41312B4] - value_type: float - value: "0.945 * FRAMETIME_TARGET" - # DRCinematicTargetFrameTimeInMs - - - type: evaluate_write - address: [MAIN, 0x41312E4] - value_type: float - value: "0.945 * FRAMETIME_TARGET" - # LimitFPS - - - type: evaluate_write - address: [MAIN, 0x411DCFC] - value_type: int32 - value: FPS_LOCK_TARGET - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01009EE0111CC000/E1F0CFC02F449EF3.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01009EE0111CC000/E1F0CFC02F449EF3.yaml deleted file mode 100644 index 11f2928..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01009EE0111CC000/E1F0CFC02F449EF3.yaml +++ /dev/null @@ -1,28 +0,0 @@ -# Ancestors Legacy 1.2.0 -# BID: E1F0CFC02F449EF3 - -unsafeCheck: true - -# Disable setting double buffer -MASTER_WRITE: - - - type: bytes - main_offset: 0x41BBB70 - value_type: int8 - value: 0x53 -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x5076DB0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x47DC3F8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01009EE01EB02000/63A4CF08E30A56B1.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01009EE01EB02000/63A4CF08E30A56B1.yaml deleted file mode 100644 index 8420420..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01009EE01EB02000/63A4CF08E30A56B1.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# 英雄伝説 黎の軌跡II for Nintendo Switch 1.0.1 -# BID: 63A4CF08E30A56B1 - -ALL_FPS: - # REF: 88 01 80 52 C1 03 80 52 28 4D 28 9B 29 00 80 52, first ADRP + ADD below it - - - type: evaluate_write - address: [MAIN, 0x6E7998, 0x34] - value_type: uint32 - value: FPS_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01009F201CFBC000/0BB69E112916D851.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01009F201CFBC000/0BB69E112916D851.yaml deleted file mode 100644 index 7f9ba41..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01009F201CFBC000/0BB69E112916D851.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# 팩맨 월드 2 리팩 / 吃豆人 吃遍世界2 1.0.4 -# BID: 0BB69E112916D851 - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x87DF838, 0x58] - value_type: uint32 - value: "2352000 * FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01009F201CFBC000/B70D6561B718C8E0.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01009F201CFBC000/B70D6561B718C8E0.yaml deleted file mode 100644 index 29f0081..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01009F201CFBC000/B70D6561B718C8E0.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# 팩맨 월드 2 리팩 / 吃豆人 吃遍世界2 1.0.3 -# BID: B70D6561B718C8E0 - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x87DE838, 0x58] - value_type: uint32 - value: "2352000 * FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01009F8017F48000/69EE5F71F187EAA9.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01009F8017F48000/69EE5F71F187EAA9.yaml deleted file mode 100644 index fa10fbd..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01009F8017F48000/69EE5F71F187EAA9.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# F.I.S.T.: Forged in Shadow Torch 1.0.4 -# BID: 69EE5F71F187EAA9 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0xAE271C8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xAE54F58, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01009FA01FF6C000/1218D04A7C77F2DA.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01009FA01FF6C000/1218D04A7C77F2DA.yaml deleted file mode 100644 index a4d7c04..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01009FA01FF6C000/1218D04A7C77F2DA.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Nikoderiko: The Magical World 1.0.3/1.0.4 -# BID: 1218D04A7C77F2DA - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x64F6968, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6524628, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x5D25C08, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01009FA01FF6C000/6CFA2609A2D00FA5.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01009FA01FF6C000/6CFA2609A2D00FA5.yaml deleted file mode 100644 index 81e19ae..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01009FA01FF6C000/6CFA2609A2D00FA5.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Nikoderiko: The Magical World 1.0.2 -# BID: 6CFA2609A2D00FA5 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x64D9928, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x65075E8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x5D08BF8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01009FA01FF6C000/EBDE239CB7780F58.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01009FA01FF6C000/EBDE239CB7780F58.yaml deleted file mode 100644 index 9e22cc7..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01009FA01FF6C000/EBDE239CB7780F58.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Nikoderiko: The Magical World 1.0.0 -# BID: EBDE239CB7780F58 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x648DD48, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x64BBA08, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x5CBCBF8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01009FA01FF6C000/FCCC4FDA392C1C16.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01009FA01FF6C000/FCCC4FDA392C1C16.yaml deleted file mode 100644 index bbaac6b..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01009FA01FF6C000/FCCC4FDA392C1C16.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Nikoderiko: The Magical World 1.0.1 -# BID: FCCC4FDA392C1C16 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x64D1928, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x64FF5E8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x5D00BF8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01009FB0172F4000/F712547C68C66A0A.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01009FB0172F4000/F712547C68C66A0A.yaml deleted file mode 100644 index 7b738ca..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01009FB0172F4000/F712547C68C66A0A.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# SpongeBob SquarePants: The Cosmic Shake 1.0.7 -# BID: F712547C68C66A0A - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 1 decimal - - - type: evaluate_write - address: [MAIN, 0x83D18D8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x83FF4B8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x7C02C68, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/01009FE010876000/407978D722447B25.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/01009FE010876000/407978D722447B25.yaml deleted file mode 100644 index e75b8ee..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/01009FE010876000/407978D722447B25.yaml +++ /dev/null @@ -1,24 +0,0 @@ -# Persona 5 Scramble 1.0.1 -# BID: 407978D722447B25 - -unsafeCheck: true - -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x1D07538] - value_type: int32 - value: [FPS_TARGET, VSYNC_TARGET] - - - type: evaluate_write - address: [MAIN, 0x1D1AFC8] - value_type: float - value: FPS_TARGET - - - type: evaluate_write - address: [MAIN, 0x2A7A8D0] - value_type: int32 - value: "VSYNC_TARGET - 1" - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A0800E9C4000/D27FD8A515077F34.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A0800E9C4000/D27FD8A515077F34.yaml deleted file mode 100644 index 5b55894..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A0800E9C4000/D27FD8A515077F34.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# The Witcher 3: Wild Hunt - Complete Edition 4.04b -# BID: D27FD8A515077F34 - -ALL_FPS: - # DRGameTargetFrameTimeInMs - - - type: evaluate_write - address: [MAIN, 0x41312B4] - value_type: float - value: "0.945 * FRAMETIME_TARGET" - # DRCinematicTargetFrameTimeInMs - - - type: evaluate_write - address: [MAIN, 0x41312E4] - value_type: float - value: "0.945 * FRAMETIME_TARGET" - # LimitFPS - - - type: evaluate_write - address: [MAIN, 0x411DCFC] - value_type: int32 - value: FPS_LOCK_TARGET - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A0B018A72000/5EABF05A814EBB1B.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A0B018A72000/5EABF05A814EBB1B.yaml deleted file mode 100644 index cb403e2..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A0B018A72000/5EABF05A814EBB1B.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Severed Steel `Asia` 1.0.3 -# BID: 5EABF05A814EBB1B - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget = 0.9 * (1000/FPS) - - - type: evaluate_write - address: [MAIN, 0x76998A8, 0] - value_type: float - value: ["0.9 * FRAMETIME_TARGET", "0.9 * FRAMETIME_TARGET"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x76C7478, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6ECC4E8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A0C01BED8000/7E06539B5874B9C4.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A0C01BED8000/7E06539B5874B9C4.yaml deleted file mode 100644 index 229c225..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A0C01BED8000/7E06539B5874B9C4.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# 伊蘇X -北境歷險- 1.0.5 -# BID: 7E06539B5874B9C4 -# Credits to StevensND for finding assembly instruction from which I have derived pointer address - -ALL_FPS: - # Used to set min delta timing for various parts of game + DR target - # REF: 00 10 2C 1E 01 E4 00 2F 09 85 9A 52 29 00 A0 72 E1 03 1F 2A first ADRP above it - - - type: evaluate_write - address: [MAIN, 0xBDA228, 0x34] - value_type: uint32 - value: FPS_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A21017C42000/01CBDFDED43B80F5.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A21017C42000/01CBDFDED43B80F5.yaml deleted file mode 100644 index a566eaf..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A21017C42000/01CBDFDED43B80F5.yaml +++ /dev/null @@ -1,80 +0,0 @@ -# Another Crab's Treasure 1.0.103.9 -# BID: 01CBDFDED43B80F5 - -unsafeCheck: true - -MASTER_WRITE: - # Redirect updating various deltas to read frametime target from UnityEngine.Application::targetFrameRate, REF: 08 10 91 52 08 A1 A7 72 - - - type: bytes - main_offset: 0x18EB7C8 - value_type: uint32 - value: # 08 EA 01 D0 08 39 4B B9 01 01 23 1E 00 10 2e 1e 00 18 21 1e - - 0xD001EA08 # adrp x8, 0x562d000 - - 0xB94B3908 # ldr w8, [x8, #0xb38] - - 0x1E230101 # ucvtf s1, w8 - - 0x1E2E1000 # fmov s0, #1.00000000 - - 0x1E211800 # fdiv s0, s0, s1 - - - type: bytes - main_offset: 0x18EF310 - value_type: uint32 - value: # E8 E9 01 D0 08 39 4B B9 01 01 23 1E 00 10 2e 1e 00 18 21 1e - - 0xD001E9E8 # adrp x8, 0x562d000 - - 0xB94B3908 # ldr w8, [x8, #0xb38] - - 0x1E230101 # ucvtf s1, w8 - - 0x1E2E1000 # fmov s0, #1.00000000 - - 0x1E211800 # fdiv s0, s0, s1 - # Redirect Dynamic Resolution GPU Timing target in DynamicResolutionScaler::Update to MAIN+0x5AA3F08 - - - type: bytes - main_offset: 0x3882694 - value_type: uint32 - value: # 08 11 01 B0 08 85 47 F9 1F 20 03 D5 1F 20 03 D5 - - 0xB0011108 # adrp x8, #0x5aa3000 - - 0xF9478508 # ldr x8, [x8, #0xf08] - - 0xD503201F # nop - - 0xD503201F # nop - - - type: bytes - main_offset: 0x3882714 - value_type: uint32 - value: # 08 11 01 B0 08 85 47 F9 60 2A 40 BD 1F 20 03 D5 1F 20 03 D5 - - 0xB0011108 # adrp x8, #0x5aa3000 - - 0xF9478508 # ldr x8, [x8, #0xf08] - - 0xBD402A60 # ldr s0, [x19, #0x28] - - 0xD503201F # nop - - 0xD503201F # nop - - - type: bytes - main_offset: 0x3882788 - value_type: uint32 - value: # 08 11 01 B0 08 85 47 F9 1F 20 03 D5 1F 20 03 D5 - - 0xB0011108 # adrp x8, #0x5aa3000 - - 0xF9478508 # ldr x8, [x8, #0xf08] - - 0xD503201F # nop - - 0xD503201F # nop - # Default values - - - type: bytes - main_offset: 0x562DB38 - value_type: uint32 - value: 30 - - - type: bytes - main_offset: 0x5AA3F08 - value_type: double - value: 28.57142857142857 -ALL_FPS: - # UnityEngine.Application::targetFrameRate - - - type: evaluate_write - address: [MAIN, 0x562DB38] - value_type: uint32 - value: FPS_TARGET - # GPU Timing Target - - - type: evaluate_write - address: [MAIN, 0x5AA3F08] - value_type: double - value: "1000 / (FPS_TARGET + 5)" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A21017C42000/3980F76403AE4CF2.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A21017C42000/3980F76403AE4CF2.yaml deleted file mode 100644 index 80972a2..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A21017C42000/3980F76403AE4CF2.yaml +++ /dev/null @@ -1,80 +0,0 @@ -# Another Crab's Treasure 1.0.101.1 -# BID: 3980F76403AE4CF2 - -unsafeCheck: true - -MASTER_WRITE: - # Redirect updating various deltas to read frametime target from UnityEngine.Application::targetFrameRate, REF: 08 10 91 52 08 A1 A7 72 - - - type: bytes - main_offset: 0x18A98F0 - value_type: uint32 - value: - - 0xF001EB68 - - 0xB944E908 - - 0x1E230101 - - 0x1E2E1000 - - 0x1E211800 - - - type: bytes - main_offset: 0x18A61B8 - value_type: uint32 - value: - - 0xD001EB88 - - 0xB944E908 - - 0x1E230101 - - 0x1E2E1000 - - 0x1E211800 - # Redirect Dynamic Resolution GPU Timing target in DynamicResolutionScaler::Update to MAIN+0x5A8D908 - - - type: bytes - main_offset: 0x1B06D44 - value_type: uint32 - value: - - 0xF001FC28 - - 0xF9448508 - - 0xD503201F - - 0xD503201F - - - type: bytes - main_offset: 0x1B06DC4 - value_type: uint32 - value: - - 0xF001FC28 - - 0xF9448508 - - 0xBD402A60 - - 0xD503201F - - 0xD503201F - - - type: bytes - main_offset: 0x1B06E38 - value_type: uint32 - value: - - 0xF001FC28 - - 0xF9448508 - - 0xD503201F - - 0xD503201F - # Default values - - - type: bytes - main_offset: 0x56184E8 - value_type: uint32 - value: 30 - - - type: bytes - main_offset: 0x5A8D908 - value_type: double - value: 28.57142857142857 -ALL_FPS: - # UnityEngine.Application::targetFrameRate - - - type: evaluate_write - address: [MAIN, 0x56184E8] - value_type: uint32 - value: FPS_TARGET - # GPU Timing Target - - - type: evaluate_write - address: [MAIN, 0x5A8D908] - value_type: double - value: "1000 / (FPS_TARGET + 5)" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A21017C42000/693314C08EA157F3.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A21017C42000/693314C08EA157F3.yaml deleted file mode 100644 index 74aa71d..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A21017C42000/693314C08EA157F3.yaml +++ /dev/null @@ -1,77 +0,0 @@ -# Another Crab's Treasure 1.1.100.2 -# BID: 693314C08EA157F3 - -unsafeCheck: true - -DECLARATIONS: - - - type: variable - name: dr_target - value_type: double - default_value: 28.57142857142857 - evaluate: "1000 / (FPS_TARGET + 5)" -MASTER_WRITE: - # Redirect updating various deltas to read frametime target from UnityEngine.Application::targetFrameRate, REF: 08 10 91 52 08 A1 A7 72 - - - type: asm_a64 - main_offset: 0x18AE7B8 - instructions: [ - [adrp, x8, 0x5659000], - [ldr, w8, [x8, 0x68]], - [ucvtf, s1, w8], - [fmov, s0, 1.0], - [fdiv, s0, s0, s1] - ] - - - type: asm_a64 - main_offset: 0x18B2570 - instructions: [ - [adrp, x8, 0x5659000], - [ldr, w8, [x8, 0x68]], - [ucvtf, s1, w8], - [fmov, s0, 1.0], - [fdiv, s0, s0, s1] - ] - # Default value - - - type: bytes - main_offset: 0x5659068 - value_type: uint32 - value: 30 - # Redirect Dynamic Resolution GPU Timing target in DynamicResolutionScaler::Update - - - type: asm_a64 - main_offset: 0x389C824 - instructions: [ - [adrp, x8, $dr_target], - [ldr, x8, [x8, $dr_target]], - [nop], - [nop] - ] - - - type: asm_a64 - main_offset: 0x389C8A4 - instructions: [ - [adrp, x8, $dr_target], - [ldr, x8, [x8, $dr_target]], - [ldr, s0, [x19, 0x28]], - [nop], - [nop] - ] - - - type: asm_a64 - main_offset: 0x389C918 - instructions: [ - [adrp, x8, $dr_target], - [ldr, x8, [x8, $dr_target]], - [nop], - [nop] - ] -ALL_FPS: - # UnityEngine.Application::targetFrameRate - - - type: evaluate_write - address: [MAIN, 0x5659068] - value_type: uint32 - value: FPS_TARGET - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A21017C42000/807A2202464D445B.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A21017C42000/807A2202464D445B.yaml deleted file mode 100644 index a696f95..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A21017C42000/807A2202464D445B.yaml +++ /dev/null @@ -1,74 +0,0 @@ -# Another Crab's Treasure 1.1.100.3 -# BID: 807A2202464D445B - -DECLARATIONS: - - - type: variable - name: dr_target - value_type: double - default_value: 28.57142857142857 - evaluate: "1000 / (FPS_TARGET + 5)" -MASTER_WRITE: - # Redirect updating various deltas to read frametime target from UnityEngine.Application::targetFrameRate, REF: 08 10 91 52 08 A1 A7 72 - - - type: asm_a64 - main_offset: 0x18AE7B8 - instructions: [ - [adrp, x8, 0x565A000], - [ldr, w8, [x8, 0x78]], - [ucvtf, s1, w8], - [fmov, s0, 1.0], - [fdiv, s0, s0, s1] - ] - - - type: asm_a64 - main_offset: 0x18B2570 - instructions: [ - [adrp, x8, 0x565A000], - [ldr, w8, [x8, 0x78]], - [ucvtf, s1, w8], - [fmov, s0, 1.0], - [fdiv, s0, s0, s1] - ] - # Default value - - - type: bytes - main_offset: 0x565A078 - value_type: uint32 - value: 30 - # Redirect Dynamic Resolution GPU Timing target in DynamicResolutionScaler::Update - - - type: asm_a64 - main_offset: 0x1A0E404 - instructions: [ - [adrp, x8, $dr_target], - [ldr, x8, [x8, $dr_target]], - [nop], - [nop] - ] - - - type: asm_a64 - main_offset: 0x1A0E484 - instructions: [ - [adrp, x8, $dr_target], - [ldr, x8, [x8, $dr_target]], - [ldr, s0, [x19, 0x28]], - [nop], - [nop] - ] - - - type: asm_a64 - main_offset: 0x1A0E4F8 - instructions: [ - [adrp, x8, $dr_target], - [ldr, x8, [x8, $dr_target]], - [nop], - [nop] - ] -ALL_FPS: - # UnityEngine.Application::targetFrameRate - - - type: evaluate_write - address: [MAIN, 0x565A078] - value_type: uint32 - value: FPS_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A21017C42000/B24C86A2B02DE960.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A21017C42000/B24C86A2B02DE960.yaml deleted file mode 100644 index 01f6ea0..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A21017C42000/B24C86A2B02DE960.yaml +++ /dev/null @@ -1,80 +0,0 @@ -# Another Crab's Treasure 1.1.100.1 -# BID: B24C86A2B02DE960 - -unsafeCheck: true - -MASTER_WRITE: - # Redirect updating various deltas to read frametime target from UnityEngine.Application::targetFrameRate, REF: 08 10 91 52 08 A1 A7 72 - - - type: bytes - main_offset: 0x18B2F18 - value_type: uint32 - value: # 08 EA 01 D0 08 39 4B B9 01 01 23 1E 00 10 2e 1e 00 18 21 1e - - 0xF001EF48 # adrp x8, 0x569d000 - - 0xB94BF908 # ldr w8, [x8, #0xbf8] - - 0x1E230101 # ucvtf s1, w8 - - 0x1E2E1000 # fmov s0, #1.00000000 - - 0x1E211800 # fdiv s0, s0, s1 - - - type: bytes - main_offset: 0x18B6C30 - value_type: uint32 - value: # E8 E9 01 D0 08 39 4B B9 01 01 23 1E 00 10 2e 1e 00 18 21 1e - - 0xF001EF28 # adrp x8, 0x569d000 - - 0xB94BF908 # ldr w8, [x8, #0xbf8] - - 0x1E230101 # ucvtf s1, w8 - - 0x1E2E1000 # fmov s0, #1.00000000 - - 0x1E211800 # fdiv s0, s0, s1 - # Redirect Dynamic Resolution GPU Timing target in DynamicResolutionScaler::Update to MAIN+0x5B14F08 - - - type: bytes - main_offset: 0x1B018E4 - value_type: uint32 - value: # 08 11 01 B0 08 85 47 F9 1F 20 03 D5 1F 20 03 D5 - - 0xF0020088 # adrp x8, #0x5b14000 - - 0xF9478508 # ldr x8, [x8, #0xf08] - - 0xD503201F # nop - - 0xD503201F # nop - - - type: bytes - main_offset: 0x1B01964 - value_type: uint32 - value: # 08 11 01 B0 08 85 47 F9 60 2A 40 BD 1F 20 03 D5 1F 20 03 D5 - - 0xF0020088 # adrp x8, #0x5b14000 - - 0xF9478508 # ldr x8, [x8, #0xf08] - - 0xBD402A60 # ldr s0, [x19, #0x28] - - 0xD503201F # nop - - 0xD503201F # nop - - - type: bytes - main_offset: 0x1B019D8 - value_type: uint32 - value: # 08 11 01 B0 08 85 47 F9 1F 20 03 D5 1F 20 03 D5 - - 0xF0020088 # adrp x8, #0x5b14000 - - 0xF9478508 # ldr x8, [x8, #0xf08] - - 0xD503201F # nop - - 0xD503201F # nop - # Default values - - - type: bytes - main_offset: 0x569DBF8 - value_type: uint32 - value: 30 - - - type: bytes - main_offset: 0x5B14F08 - value_type: double - value: 28.57142857142857 -ALL_FPS: - # UnityEngine.Application::targetFrameRate - - - type: evaluate_write - address: [MAIN, 0x569DBF8] - value_type: uint32 - value: FPS_TARGET - # GPU Timing Target - - - type: evaluate_write - address: [MAIN, 0x5B14F08] - value_type: double - value: "1000 / (FPS_TARGET + 5)" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A2601720A000/DD6F5AF530CC2072.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A2601720A000/DD6F5AF530CC2072.yaml deleted file mode 100644 index f19b8cc..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A2601720A000/DD6F5AF530CC2072.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Gas Station Simulator 1.1.6 -# BID: DD6F5AF530CC2072 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x7332518, 0] - value_type: float - value: ["0.9 * FRAMETIME_TARGET", "0.9 * FRAMETIME_TARGET"] - # r.VSync - - - type: write - address: [MAIN, 0x6B64D48, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x73600E8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A2902051A000/05ADD0D5FD677639.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A2902051A000/05ADD0D5FD677639.yaml deleted file mode 100644 index 8718bb4..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A2902051A000/05ADD0D5FD677639.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Poppy Playtime: Chapter 4 1.1 -# BID: 05ADD0D5FD677639 - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x7F05990, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x8EC1E30, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8EFD150, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A2902051A000/3D6E4BDE905836BC.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A2902051A000/3D6E4BDE905836BC.yaml deleted file mode 100644 index 5c373f0..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A2902051A000/3D6E4BDE905836BC.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Poppy Playtime: Chapter 4 1.2 -# BID: 3D6E4BDE905836BC - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x7F07990, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x8EC3E30, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8EFF150, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A2902051A000/779FC981128BA290.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A2902051A000/779FC981128BA290.yaml deleted file mode 100644 index 9e04ba5..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A2902051A000/779FC981128BA290.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Poppy Playtime: Chapter 4 1.3 -# BID: 779FC981128BA290 - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x7F28990, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x8EE4E30, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8F20150, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A2A01A026000/008F995D1A63B383.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A2A01A026000/008F995D1A63B383.yaml deleted file mode 100644 index a9db015..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A2A01A026000/008F995D1A63B383.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Forgive Me Father 1.5.4.3 -# BID: 008F995D1A63B383 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x6D2CBF8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6D5A568, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x655EC68, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A3501946E000/0D9649011312F62E.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A3501946E000/0D9649011312F62E.yaml deleted file mode 100644 index 1bb7694..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A3501946E000/0D9649011312F62E.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# OCTOPATH TRAVELER II 1.1.1 -# BID: 0D9649011312F62E - -unsafeCheck: true - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x76FEF68, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6F017E8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A3D0199AC000/BCC955FF933FEF2E.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A3D0199AC000/BCC955FF933FEF2E.yaml deleted file mode 100644 index d62095a..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A3D0199AC000/BCC955FF933FEF2E.yaml +++ /dev/null @@ -1,26 +0,0 @@ -# 鬼滅の刃 目指せ!最強隊士! 1.20 -# BID: BCC955FF933FEF2E - -ALL_FPS: - # Disable FixedFrameRate - - - type: write - address: [MAIN, 0x95CD058, 0x804] - address_unsafe: true - value_type: uint32 - value: 7 - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x95CD978, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x8DC3D48, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A55019C38000/B9DB6040F70BE58F.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A55019C38000/B9DB6040F70BE58F.yaml deleted file mode 100644 index 4ba486f..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A55019C38000/B9DB6040F70BE58F.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Fishing: North Atlantic 1.1 -# BID: B9DB6040F70BE58F - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x69973C8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x69C4C68, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A5A020D5E000/16346DDFF65961FF.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A5A020D5E000/16346DDFF65961FF.yaml deleted file mode 100644 index 905725c..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A5A020D5E000/16346DDFF65961FF.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# Dinkum 1.0.2.47 -# BID: 16346DDFF65961FF - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x5C6C220, 0x48] - value_type: float - value: "1 / FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A5A020D5E000/8B3609ECB49DBBED.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A5A020D5E000/8B3609ECB49DBBED.yaml deleted file mode 100644 index 85d5a3f..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A5A020D5E000/8B3609ECB49DBBED.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# Dinkum 1.0.2.44 -# BID: 8B3609ECB49DBBED - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x5C65CA0, 0x48] - value_type: float - value: "1 / FPS_TARGET" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A5A022B14000/2E049E21624484CF.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A5A022B14000/2E049E21624484CF.yaml deleted file mode 100644 index d650c73..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A5A022B14000/2E049E21624484CF.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# Fruitbus 1.0.2 -# BID: 2E049E21624484CF - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x9A7CBF8, 0x48] - value_type: float - value: "1 / FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A5E014196000/0E9D849EF47198D8.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A5E014196000/0E9D849EF47198D8.yaml deleted file mode 100644 index 1193782..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A5E014196000/0E9D849EF47198D8.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Misc. A Tiny Tale 1.0.4 -# BID: 0E9D849EF47198D8 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x4C25100, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x4C4B980, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x43F6548, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A5E014196000/D24A46A2618C9E38.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A5E014196000/D24A46A2618C9E38.yaml deleted file mode 100644 index 5557b90..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A5E014196000/D24A46A2618C9E38.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Misc. A Tiny Tale 1.0.5 -# BID: D24A46A2618C9E38 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x4C25100, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x4C4B980, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x43F6548, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A6301214E000/8C08B9719E085F91.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A6301214E000/8C08B9719E085F91.yaml deleted file mode 100644 index e57aee9..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A6301214E000/8C08B9719E085F91.yaml +++ /dev/null @@ -1,26 +0,0 @@ -# Fire Emblem Engage 2.0.0 -# BID: 8C08B9719E085F91 -# Game has many things hardcoded to vSyncCount, so if game can't remain FPS target that is rounded up to 60/30/20/15, some elements are slowed down. -# Thanks to ~systemdev for figuring out basic of patching this game. - -ALL_FPS: - # UnityEngine.QualitySettings::vSyncCount - - - type: evaluate_write - address: [MAIN, 0x65ABCA0, 0x30, 0x68] - address_unsafe: true - value_type: uint32 - value: VSYNC_TARGET - # Internal vSyncCount - - - type: evaluate_write - address: [MAIN, 0x62035A0] - value_type: uint32 - value: VSYNC_TARGET - # App.HubUtil_TypeInfo - - - type: evaluate_write - address: [MAIN, 0x6157F28, 0xB8, 0, 0x20] - address_unsafe: true - value_type: float - value: "(30 / FPS_TARGET) * 0.14" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A6B01900E000/9E0901B84058B5B4.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A6B01900E000/9E0901B84058B5B4.yaml deleted file mode 100644 index e21a5ba..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A6B01900E000/9E0901B84058B5B4.yaml +++ /dev/null @@ -1,15 +0,0 @@ -# ARK: Dinosaur Discovery 1.5.0 -# BID: 9E0901B84058B5B4 - -unsafeCheck: true - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x74CD708, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A7101B806000/BCC955FF933FEF2E.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A7101B806000/BCC955FF933FEF2E.yaml deleted file mode 100644 index fc9b3ea..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A7101B806000/BCC955FF933FEF2E.yaml +++ /dev/null @@ -1,26 +0,0 @@ -# Demon Slayer -Kimetsu no Yaiba- Sweep the Board! 1.20 -# BID: BCC955FF933FEF2E - -ALL_FPS: - # Disable FixedFrameRate - - - type: write - address: [MAIN, 0x95CD058, 0x804] - address_unsafe: true - value_type: uint32 - value: 7 - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x95CD978, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x8DC3D48, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A73016576000/4E2AA28721AFF2C1.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A73016576000/4E2AA28721AFF2C1.yaml deleted file mode 100644 index e70e71e..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A73016576000/4E2AA28721AFF2C1.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# Tinykin 1.1.1 -# BID: 4E2AA28721AFF2C1 - -unsafeCheck: true - -ALL_FPS: - # Dynamic resolution frametime target in ms = (1000/FPS) minus 2 with cutted decimals - - - type: evaluate_write - address: [MAIN, 0x53C9710, 0x44F8] - value_type: double - value: "TruncDec(FRAMETIME_TARGET - 2, 0)" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A78021ADE000/140809A5980FB2E2.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A78021ADE000/140809A5980FB2E2.yaml deleted file mode 100644 index fccd685..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A78021ADE000/140809A5980FB2E2.yaml +++ /dev/null @@ -1,11 +0,0 @@ -# Once Upon A KATAMARI EUR 1.0.3 -# BID: 140809A5980FB2E2 - -ALL_FPS: - # Dynamic Resolution - ## REF: App.KatamariSin.AppSupport_TypeInfo - - - type: evaluate_write - address: [MAIN, 0x8F858B8, 0xB8, 0x18] - value_type: double - value: "0.9 * FRAMETIME_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A88012504000/0D17FD76B32F3040.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A88012504000/0D17FD76B32F3040.yaml deleted file mode 100644 index eb1b697..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A88012504000/0D17FD76B32F3040.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# art of rally 1.1.8 -# BID: 0D17FD76B32F3040 - -unsafeCheck: true - -ALL_FPS: - # DynamicResolutionManager_TypeInfo - - - type: evaluate_write - address: [MAIN, 0x6A6E2D8, 0xB8, 4] - value_type: float - value: FPS_TARGET diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A88012504000/BCAA04FAF88EEA4A.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A88012504000/BCAA04FAF88EEA4A.yaml deleted file mode 100644 index 2f02720..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A88012504000/BCAA04FAF88EEA4A.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# art of rally 1.1.9 -# BID: BCAA04FAF88EEA4A - -ALL_FPS: - # DynamicResolutionManager_TypeInfo - - - type: evaluate_write - address: [MAIN, 0x63C5AA8, 0xB8, 4] - value_type: float - value: FPS_TARGET diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A8A013AB2000/1EFB6879CFAD7DD3.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A8A013AB2000/1EFB6879CFAD7DD3.yaml deleted file mode 100644 index 2883bbf..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A8A013AB2000/1EFB6879CFAD7DD3.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Hazel Sky 1.0.10f -# BID: 1EFB6879CFAD7DD3 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x70E9148, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7116A18, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x691DB78, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A8B00F0B4000/92511355705EA8C5.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A8B00F0B4000/92511355705EA8C5.yaml deleted file mode 100644 index 99a9fe3..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A8B00F0B4000/92511355705EA8C5.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# HYPERCHARGE: Unboxed 0.1.2341.233 -# BID: 92511355705EA8C5 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x66951B0, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x66BBA30, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A8E016236000/82AF4E16BBC0BEC8.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A8E016236000/82AF4E16BBC0BEC8.yaml deleted file mode 100644 index 0b5bdcc..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A8E016236000/82AF4E16BBC0BEC8.yaml +++ /dev/null @@ -1,148 +0,0 @@ -# Kirby's Dream Buffet 1.0.0/1.0.0a -# BID: 82AF4E16BBC0BEC8 -# Thanks to Hazerou for finding offsets -# Game was patched to use triple buffer, and to avoid flickering with some 2D transparent elements, I have disabled transparency in them. -# Issue with flickering exists because game is hardcoded to only register 2 textures into texturepool and 2 samplers into samplerpool for framebuffers. - -unsafeCheck: true - -MASTER_WRITE: - # Remove double buffer - - - type: asm_a64 - main_offset: 0x861208 - instructions: [ - [mov, w9, 3] - ] - # Fix helper functions to properly copy third buffer address to stack - - - type: asm_a64 - main_offset: 0x8612DC - instructions: [ - [mov, w2, 3] - ] - - - type: asm_a64 - main_offset: 0x8654D8 - instructions: [ - [sub, sp, sp, 0x60], - [stp, x29, x30, [sp, 0x20]], - [add, x29, sp, 0x20], - [str, x23, [sp, 0x30]], - [stp, x22, x21, [sp, 0x40]], - [stp, x20, x19, [sp, 0x50]], - [stp, xzr, xzr, [sp, 0x10]] - ] - - - type: asm_a64 - main_offset: 0x86550C - instructions: [ - [mov, w2, 3] - ] - - - type: asm_a64 - main_offset: 0x8655B8 - instructions: [ - [stp, x8, x10, [sp]], - [bl, 0x85f028], - [ldp, x20, x19, [sp, 0x50]], - [ldr, x23, [sp, 0x30]], - [ldp, x22, x21, [sp, 0x40]], - [ldp, x29, x30, [sp, 0x20]], - [add, sp, sp, 0x60] - ] - - - type: asm_a64 - main_offset: 0x793298 - instructions: [ - [sub, sp, sp, 0x50], - [stp, x29, x30, [sp, 0x20]], - [add, x29, sp, 0x20], - [stp, x22, x21, [sp, 0x30]], - [stp, x20, x19, [sp, 0x40]], - ] - - - type: asm_a64 - main_offset: 0x7932E0 - instructions: [ - [stp, xzr, xzr, [sp, 0x10]] - ] - - - type: asm_a64 - main_offset: 0x7932EC - instructions: [ - [mov, w2, 3] - ] - - - type: asm_a64 - main_offset: 0x793310 - instructions: [ - [ldp, x20, x19, [sp, 0x40]], - [ldp, x22, x21, [sp, 0x30]], - [ldp, x29, x30, [sp, 0x20]], - [add, sp, sp, 0x50] - ] - - - type: asm_a64 - main_offset: 0x876B00 - instructions: [ - [add, x1, sp, 0x10], - [add, x23, sp, 0x10] - ] - - - type: asm_a64 - main_offset: 0x876B14 - instructions: [ - [mov, w2, 3], - [stp, xzr, xzr, [sp, 0x10]] - ] - - - type: asm_a64 - main_offset: 0x8CFC44 - instructions: [ - [mov, x1, sp], - [mov, w2, 3] - ] - - - type: asm_a64 - main_offset: 0x8CFC5C - instructions: [ - [mov, x26, sp] - ] - - - type: asm_a64 - main_offset: 0x876B14 - instructions: [ - [mov, w2, 3] - ] - - - type: asm_a64 - main_offset: 0x8612DC - instructions: [ - [mov, w2, 3] - ] - - - type: asm_a64 - main_offset: 0x876A64 - instructions: [ - [mov, w2, 3] - ] - # Disable transparency for some 2D elements to avoid issues with flickering at triple buffer - - - type: asm_a64 - main_offset: 0x7BFB00 - instructions: [ - [mov, x9, 0x102], - [ldr, w10, [x10, 0x848]], - [lsl, x12, x10, 3], - [add, x20, x8, 0x828], - [str, x9, [x20]] - ] -ALL_FPS: - # Interval - - - type: evaluate_write - address: [MAIN, 0xBEBFD8, 0] - value_type: int32 - value: VSYNC_TARGET - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A9001C042000/3565E26E8827C846.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A9001C042000/3565E26E8827C846.yaml deleted file mode 100644 index 983303e..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A9001C042000/3565E26E8827C846.yaml +++ /dev/null @@ -1,33 +0,0 @@ -# Neptunia: Sisters VS Sisters 1.0.0 -# BID: 3565E26E8827C846 - -DECLARATIONS: - - - type: variable - name: dr_target1 - value_type: float - default_value: 33.33 - evaluate: "TruncDec(FRAMETIME_TARGET, 2)" - - - type: variable - name: dr_target2 - value_type: float - default_value: 28.57 - evaluate: "TruncDec(1000 / (FPS_TARGET + 5), 2)" -MASTER_WRITE: - # Redirect DR timing range - - - type: asm_a64 - main_offset: 0x3DC5E90 - instructions: [ - [adrp, x8, $dr_target1], - [ldr, w8, [x8, $dr_target1]] - ] - - - type: asm_a64 - main_offset: 0x3DC5EFC - instructions: [ - [adrp, x8, $dr_target2], - [ldr, w8, [x8, $dr_target2]] - ] - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A93016BF4000/770A07C35E631CB2.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A93016BF4000/770A07C35E631CB2.yaml deleted file mode 100644 index 3dd27a2..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A93016BF4000/770A07C35E631CB2.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Batora: Lost Haven 1.0.1 -# BID: 770A07C35E631CB2 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 1 decimal - - - type: evaluate_write - address: [MAIN, 0x74F84C8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7526058, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A9400C9C2000/33463E11899166BB.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A9400C9C2000/33463E11899166BB.yaml deleted file mode 100644 index adc882c..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A9400C9C2000/33463E11899166BB.yaml +++ /dev/null @@ -1,76 +0,0 @@ -# Tokyo Mirage Sessions #FE Encore 1.0.0 -# BID: 33463E11899166BB -# What is still not adjusted: movement speed in cutscenes, 2D animations speed (it includes UI and 2D effects on 3D objects), none of them uses 1/30 nor 1/60 float - -MASTER_WRITE: - # Triple buffer - - - type: bytes - main_offset: 0x2F3CD8 - value_type: uint32 - value: 0xE3A01003 - - - type: bytes - main_offset: 0x35C218 - value_type: uint32 - value: 0xE3A00003 - - - type: bytes - main_offset: 0x35C2C0 - value_type: uint32 - value: 0xE3A02003 - - - type: bytes - main_offset: 0x35C2D0 - value_type: uint32 - value: 0xE3A02003 - # Code Cave, read speed from MAIN + 0x1B1CF00 - # Animation speed - # Jump to MAIN + 0x4EFBE0 - - - type: bytes - main_offset: 0x1CE4B4 - value_type: uint32 - value: 0xEA0C85C9 - - - type: bytes - main_offset: 0x4EFBE0 - value_type: uint32 - value: - - 0xE28F0616 - - 0xE30D1318 - - 0xE0800001 - - 0xE3A01802 - - 0xE0800001 - - 0xED909A00 - - 0xEAF37A2E - # Movement speed - # Jump to MAIN + 0x4EFBFC - - - type: bytes - main_offset: 0x20B750 - value_type: uint32 - value: 0xEA0B9129 - - - type: bytes - main_offset: 0x4EFBFC - value_type: uint32 - value: - - 0xE28F0616 - - 0xE30D62FC - - 0xE0800006 - - 0xE3A06802 - - 0xE0800006 - - 0xED901A00 - - 0xEAF46ECE - - - type: bytes - main_offset: 0x1B1CF00 - value_type: float - value: 0.0333333333 -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x1B1CF00] - value_type: float - value: 1 / FPS_TARGET diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A9801180E000/B0ADB498E82BC644.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A9801180E000/B0ADB498E82BC644.yaml deleted file mode 100644 index cd97331..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100A9801180E000/B0ADB498E82BC644.yaml +++ /dev/null @@ -1,26 +0,0 @@ -# KAMEN RIDER memory of heroez Premium Sound Edition 1.0.2 -# BID: B0ADB498E82BC644 - -DECLARATIONS: - - - type: variable - name: dr_target - value_type: double - default_value: 40 - evaluate: "0.96 * FRAMETIME_TARGET" - - - type: code - name: getDrTarget - instructions: [ - [adrp, x0, $dr_target], - [ldr, d1, [x0, $dr_target]], - [ret] - ] -MASTER_WRITE: - # REF: 01 8d 47 fd - - - type: asm_a64 - main_offset: 0xAC6368 - instructions: [ - [bl, _getDrTarget()] - ] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100AA400A238000/14D7D1537BD5A986.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100AA400A238000/14D7D1537BD5A986.yaml deleted file mode 100644 index 4de493a..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100AA400A238000/14D7D1537BD5A986.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# The Stretchers 1.0.0 -# BID: 14D7D1537BD5A986 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to one decimal - - - type: evaluate_write - address: [MAIN, 0x5C63550, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x5C880D8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100AA50138B4000/7E65E5BC3564BE46.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100AA50138B4000/7E65E5BC3564BE46.yaml deleted file mode 100644 index 547bbad..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100AA50138B4000/7E65E5BC3564BE46.yaml +++ /dev/null @@ -1,20 +0,0 @@ -# Gal*Gun Returns 1.0.4 -# BID: 7E65E5BC3564BE46 -# Buffers are hardcoded into fixed size class, so it's hard to get triple buffer - -ALL_FPS: - # FPS Target + FPS Lock - - - type: evaluate_write - address: [MAIN, 0x16CE8A8, 0x20] - value_type: float - value: "60 / FPS_TARGET" - # Lipsync fix - - - type: evaluate_write - address: [MAIN, 0x1BA0A1C] - value_type: uint32 - value: FPS_TARGET - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100AA60136D2000/A7F32A28D882D046.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100AA60136D2000/A7F32A28D882D046.yaml deleted file mode 100644 index b7fe03c..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100AA60136D2000/A7F32A28D882D046.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# HOT WHEELS UNLEASHED 1.0.14 -# BID: A7F32A28D882D046 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x9A10988, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x9A3E4E0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x92726B0, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100AA60136D2000/F73C6504D378C38B.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100AA60136D2000/F73C6504D378C38B.yaml deleted file mode 100644 index 7fb7f6e..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100AA60136D2000/F73C6504D378C38B.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# HOT WHEELS UNLEASHED 1.0.13 -# BID: F73C6504D378C38B - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x978D988, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x97BB4E0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100AA80194B0000/3A8E744D8F65CDEA.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100AA80194B0000/3A8E744D8F65CDEA.yaml deleted file mode 100644 index 32f3ea4..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100AA80194B0000/3A8E744D8F65CDEA.yaml +++ /dev/null @@ -1,20 +0,0 @@ -# Pikmin 1 1.1.0 -# BID: 3A8E744D8F65CDEA -# Credits to Hazerou for discovering offsets - -ALL_FPS: - # Block cutscenes to 30 FPS - - - type: compare - compare_address: [MAIN, 0x749A3C] - compare_type: "!=" - compare_value_type: uint32 - compare_value: 0 - address: [MAIN] - value_type: refresh_rate - value: 30 - - - type: evaluate_write - address: [MAIN, 0x7606A0] - value_type: uint32 - value: VSYNC_TARGET diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100AC601DCA8000/4584432786F462DB.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100AC601DCA8000/4584432786F462DB.yaml deleted file mode 100644 index 1309d30..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100AC601DCA8000/4584432786F462DB.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# GYLT 1.2 -# BID: 4584432786F462DB - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x6EE85F8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6F16298, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6719188, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100AD0014AB4000/AC8C8EC9DB1A8EF4.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100AD0014AB4000/AC8C8EC9DB1A8EF4.yaml deleted file mode 100644 index 2819436..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100AD0014AB4000/AC8C8EC9DB1A8EF4.yaml +++ /dev/null @@ -1,15 +0,0 @@ -# The Legend of Heroes: Trails of Cold Steel (Sen on Kiseki) Kai -THORS MILITARY ACADEMY 1204- -# 英雄伝説 閃の軌跡I:改 -THORS MILITARY ACADEMY 1204- -# BID: AC8C8EC9DB1A8EF4 - -unsafeCheck: true - -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x80C9F0] - value_type: float - value: "1 / FPS_TARGET" - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100AD10102B2000/D89FFAA2062E373D.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100AD10102B2000/D89FFAA2062E373D.yaml deleted file mode 100644 index bb191d2..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100AD10102B2000/D89FFAA2062E373D.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# BioShock Remastered 1.0.2 -# BID: D89FFAA2062E373D - -unsafeCheck: true - -ALL_FPS: - # Dynamic resolution FPS factor - - - type: evaluate_write - address: [MAIN, 0x29B4BA0, 0] - value_type: float - value: FPS_TARGET diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100AE7010434000/5915CDDDC4EEA6CD.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100AE7010434000/5915CDDDC4EEA6CD.yaml deleted file mode 100644 index 470412c..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100AE7010434000/5915CDDDC4EEA6CD.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Beyond Enemy Lines - Remastered Version 1.1.0 -# BID: 5915CDDDC4EEA6CD - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget = 0.9 * (1000/FPS) - - - type: evaluate_write - address: [MAIN, 0x63C5618, 0] - value_type: float - value: ["0.9 * FRAMETIME_TARGET", "0.9 * FRAMETIME_TARGET"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x63F25B0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100AFC01A456000/7C724F497564C027.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100AFC01A456000/7C724F497564C027.yaml deleted file mode 100644 index d8c26df..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100AFC01A456000/7C724F497564C027.yaml +++ /dev/null @@ -1,31 +0,0 @@ -# 주술회전 전화향명 1.4.0 -# BID: 7C724F497564C027 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x8458A48, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x849BF50, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x77DD548, 0] - value_type: uint32 - value: [0, 0] - # Disable bUseFixedFrameRate - - - type: write - address: [MAIN, 0x849B7A8, 0x9C4] - value_type: uint32 - value: 7 - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100AFE01EC6C000/635E7DB24F2BCD32.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100AFE01EC6C000/635E7DB24F2BCD32.yaml deleted file mode 100644 index a675b6c..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100AFE01EC6C000/635E7DB24F2BCD32.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# KIBORG 1.0 -# BID: 635E7DB24F2BCD32 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x7EB55E0, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # r.VSync - - - type: write - address: [MAIN, 0x6EE0290, 0] - value_type: uint32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7EF6AC8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B04011742000/C9A3DD7702075ECD.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B04011742000/C9A3DD7702075ECD.yaml deleted file mode 100644 index b37c2eb..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B04011742000/C9A3DD7702075ECD.yaml +++ /dev/null @@ -1,14 +0,0 @@ -# Monster Hunter Rise 16.0.2 -# BID: C9A3DD7702075ECD - -ALL_FPS: - # Internal FPS lock - - - type: evaluate_write - address: [MAIN, 0x1295B3F0, 0x434] - address_unsafe: true - value_type: float - value: FPS_LOCK_TARGET - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B0500FE4E000/951D09EECE122A47.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B0500FE4E000/951D09EECE122A47.yaml deleted file mode 100644 index fe23bf6..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B0500FE4E000/951D09EECE122A47.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# Good Job! 1.0.0 -# BID: 951D09EECE122A47 - -unsafeCheck: true - -ALL_FPS: - # fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x4D38EF8, 0x48] - value_type: float - value: 1 / FPS_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B0701AA78000/6C46135714ABB870.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B0701AA78000/6C46135714ABB870.yaml deleted file mode 100644 index 6a16522..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B0701AA78000/6C46135714ABB870.yaml +++ /dev/null @@ -1,18 +0,0 @@ -# Fate/Samurai Remnant `Asia` 1.3.2 -# BID: 6C46135714ABB870 - -# Disable setting double buffer, REF: 28 63 A8 9B B8 5F 6E 29 2B F7 01 51 B9 83 57 B8 -MASTER_WRITE: - - - type: asm_a64 - main_offset: 0x5DB12C - instructions: [ - [mov, w25, 3] - ] -ALL_FPS: - # interval, REF: 29 00 80 52 16 00 08 8B 08 A0 8C 52 28 00 A0 72 - - - type: evaluate_write - address: [MAIN, 0x3412388] - value_type: int32 - value: VSYNC_TARGET diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B140178B6000/94EA2A7C7EE32EEF.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B140178B6000/94EA2A7C7EE32EEF.yaml deleted file mode 100644 index b722adc..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B140178B6000/94EA2A7C7EE32EEF.yaml +++ /dev/null @@ -1,11 +0,0 @@ -# Risen 1.0.1 -# BID: 94EA2A7C7EE32EEF - -ALL_FPS: - # Dynamic Resolution factors - # REF: g_GetModuleAdmin(void)::s_pAdmin + 0x610 - - - type: evaluate_write - address: [MAIN, 0x41FDEA0, 0x610] - value_type: double - value: ["5.2 * (FPS_TARGET / 30)", "1.3 * (FPS_TARGET / 30)"] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B16009C10000/490D681909609015.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B16009C10000/490D681909609015.yaml deleted file mode 100644 index a148458..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B16009C10000/490D681909609015.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# SINNER: Sacrifice for Redemption 1.1.0319 -# BID: 490D681909609015 - -ALL_FPS: - # Disable bSmoothFrameRate and bUseFixedFrameRate to untie game speed from framerate - - - type: write - address: [MAIN, 0x5CCE320, 0x750] - address_unsafe: true - value_type: uint32 - # Default is 0x67, bSmoothFrameRate |= 0x20, bUseFixedFrameRate |= 0x40 - # By writing 7 we are making sure that other flags are maintained: - # bAllowMultiThreadedAnimationUpdate |= 4 - # bOptimizeAnimBlueprintMemberVariableAccess |= 2 - # bCanBlueprintsTickByDefault |= 1 - value: 7 - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x5CCEBA8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B1A00D8CE000/3AAA4D3E5A1A0F88.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B1A00D8CE000/3AAA4D3E5A1A0F88.yaml deleted file mode 100644 index 842d6a9..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B1A00D8CE000/3AAA4D3E5A1A0F88.yaml +++ /dev/null @@ -1,42 +0,0 @@ -# DOOM Eternal 1.15 -# BID: 3AAA4D3E5A1A0F88 - -unsafeCheck: true - -ALL_FPS: - # rs_force460 (default) - - - type: write - address: [MAIN, 0x78DAC38, 8] - value_type: int32 - value: 1 - # rs_raiseThreshold = 0.948 * (30/FPS) - - - type: evaluate_write - address: [MAIN, 0x78DA3C8, 0xC] - value_type: float - value: "(30 / FPS_TARGET) * 0.948" - # rs_dropThreshold = 0.97 * (30/FPS) - - - type: evaluate_write - address: [MAIN, 0x78DA350, 0xC] - value_type: float - value: "(30 / FPS_TARGET) * 0.97" - # rs_raiseMilliseconds = 0.96 * (1000/FPS) - - - type: evaluate_write - address: [MAIN, 0x78D9F78, 0xC] - value_type: float - value: "0.96 * FRAMETIME_TARGET" - # rs_dropMilliseconds = 0.99 * (1000/FPS) - - - type: evaluate_write - address: [MAIN, 0x78D9F00, 0xC] - value_type: float - value: "0.99 * FRAMETIME_TARGET" - # com_adaptiveTickMaxHz (default) - - - type: evaluate_write - address: [MAIN, 0x6A12F38, 8] - value_type: int32 - value: FPS_TARGET diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B1A00D8CE000/B059C2C77AD834B8.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B1A00D8CE000/B059C2C77AD834B8.yaml deleted file mode 100644 index 59e061a..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B1A00D8CE000/B059C2C77AD834B8.yaml +++ /dev/null @@ -1,42 +0,0 @@ -# DOOM Eternal 1.14 -# BID: B059C2C77AD834B8 - -unsafeCheck: true - -ALL_FPS: - # rs_force460 (default) - - - type: write - address: [MAIN, 0x78DAC38, 8] - value_type: int32 - value: 1 - # rs_raiseThreshold = 0.948 * (30/FPS) - - - type: evaluate_write - address: [MAIN, 0x78DA3C8, 0xC] - value_type: float - value: "(30 / FPS_TARGET) * 0.948" - # rs_dropThreshold = 0.97 * (30/FPS) - - - type: evaluate_write - address: [MAIN, 0x78DA350, 0xC] - value_type: float - value: "(30 / FPS_TARGET) * 0.97" - # rs_raiseMilliseconds = 0.96 * (1000/FPS) - - - type: evaluate_write - address: [MAIN, 0x78D9F78, 0xC] - value_type: float - value: "0.96 * FRAMETIME_TARGET" - # rs_dropMilliseconds = 0.99 * (1000/FPS) - - - type: evaluate_write - address: [MAIN, 0x78D9F00, 0xC] - value_type: float - value: "0.99 * FRAMETIME_TARGET" - # com_adaptiveTickMaxHz (default) - - - type: write - address: [MAIN, 0x6A12F38, 8] - value_type: int32 - value: 120 diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B2002330E000/637F8C946F7C512D.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B2002330E000/637F8C946F7C512D.yaml deleted file mode 100644 index dfe3d6e..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B2002330E000/637F8C946F7C512D.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Mandragora: Whispers of the Witch Tree JPN 1.5.3.135819 -# BID: 637F8C946F7C512D - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x7CA62C8, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x84723A8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8497A90, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B2002330E000/AF42903B754D4859.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B2002330E000/AF42903B754D4859.yaml deleted file mode 100644 index 516e08a..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B2002330E000/AF42903B754D4859.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Mandragora: Whispers of the Witch Tree JPN 1.5.4.135908 -# BID: AF42903B754D4859 - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x5D56250, 0] - value_type: uint32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x6522698, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6547F28, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B2301F4A8000/BBEA8745A7893750.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B2301F4A8000/BBEA8745A7893750.yaml deleted file mode 100644 index a851d77..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B2301F4A8000/BBEA8745A7893750.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# Life is Strange: Double Exposure 1.0.3 -# BID: BBEA8745A7893750 - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x6948E90, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x79562D8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B2301F4A8000/C4DD7E5256163FF1.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B2301F4A8000/C4DD7E5256163FF1.yaml deleted file mode 100644 index f3b2807..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B2301F4A8000/C4DD7E5256163FF1.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Life is Strange: Double Exposure 1.0.1 -# BID: C4DD7E5256163FF1 - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x68FCE90, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x790A2E8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B2301F4A8000/FF8EFD0E0E71BB03.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B2301F4A8000/FF8EFD0E0E71BB03.yaml deleted file mode 100644 index 11db8fe..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B2301F4A8000/FF8EFD0E0E71BB03.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Life is Strange: Double Exposure 1.0.2 -# BID: FF8EFD0E0E71BB03 - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x6910E90, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x791E2D8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B28014132000/810CBA3D7DB83EC0.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B28014132000/810CBA3D7DB83EC0.yaml deleted file mode 100644 index 0385249..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B28014132000/810CBA3D7DB83EC0.yaml +++ /dev/null @@ -1,62 +0,0 @@ -# SAMURAI WARRIORS 5 1.03 -# BID: 810CBA3D7DB83EC0 - -unsafeCheck: true - -# Block updating FPS Lock -MASTER_WRITE: - - - type: asm_a64 - main_offset: 0x1240DFC - instructions: [ - [nop] - ] - - - type: asm_a64 - main_offset: 0x1240E10 - instructions: [ - [nop] - ] - - - type: asm_a64 - main_offset: 0x1240E1C - instructions: [ - [nop] - ] - - - type: asm_a64 - main_offset: 0x1240E24 - instructions: [ - [nop] - ] - - - type: asm_a64 - main_offset: 0x1240E2C - instructions: [ - [ldr, s0, [x8, 0x1f0]] - ] -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x1E761E0] - value_type: int32 - value: VSYNC_TARGET - - - type: evaluate_write - address: [MAIN, 0x1E761E4] - value_type: float - value: FPS_TARGET - - - type: evaluate_write - address: [MAIN, 0x1E761E8] - value_type: int32 - value: [VSYNC_TARGET, FPS_LOCK_TARGET] - - - type: evaluate_write - address: [MAIN, 0x1E761F0] - value_type: float - value: FPS_TARGET - - - type: block - what: timing - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B2B00E7AA000/FAD1AF4EDC6DB267.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B2B00E7AA000/FAD1AF4EDC6DB267.yaml deleted file mode 100644 index 34f5153..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B2B00E7AA000/FAD1AF4EDC6DB267.yaml +++ /dev/null @@ -1,31 +0,0 @@ -# Dusk Diver 1.0.6 -# BID: FAD1AF4EDC6DB267 - -ALL_FPS: - # Disable bSmoothFrameRate and bUseFixedFrameRate to untie game speed from framerate and unlock FPS - - - type: write - address: [MAIN, 0x5379338, 0x780] - address_unsafe: true - value_type: uint32 - # Default is 0x67, bSmoothFrameRate |= 0x20, bUseFixedFrameRate |= 0x40 - # By writing 7 we are making sure that other flags are maintained: - # bAllowMultiThreadedAnimationUpdate |= 4 - # bOptimizeAnimBlueprintMemberVariableAccess |= 2 - # bCanBlueprintsTickByDefault |= 1 - value: 7 - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 1 decimal - - - type: evaluate_write - address: [MAIN, 0x5354210, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x537A880, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B36008F90000/062189E9CF83BA5D.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B36008F90000/062189E9CF83BA5D.yaml deleted file mode 100644 index 8312639..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B36008F90000/062189E9CF83BA5D.yaml +++ /dev/null @@ -1,28 +0,0 @@ -# INAZUMA ELEVEN: Victory Road 1.4.0 -# BID: 062189E9CF83BA5D - -DECLARATIONS: - - - type: variable - name: fps_target - value_type: float - default_value: 30 - evaluate: FPS_TARGET -MASTER_WRITE: - # Dynamic Resolution FPS Target - ## REF: 62 02 23 1E 21 18 22 1E, ucvtf + fdiv - - - type: asm_a64 - main_offset: 0xC44848 - instructions: [ - [adrp, x9, $fps_target], - [ldr, s1, [x9, $fps_target]] - ] -ALL_FPS: - # Disable FPS Lock - ## REF: 20 01 00 A9 00 01 63 9E, second LDRB below that, IDA will show address after full analyze - - - type: write - address: [MAIN, 0x374CC29] - value_type: uint8 - value: 0 \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B36008F90000/09AD6947189FC6D9.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B36008F90000/09AD6947189FC6D9.yaml deleted file mode 100644 index 7521519..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B36008F90000/09AD6947189FC6D9.yaml +++ /dev/null @@ -1,29 +0,0 @@ -# INAZUMA ELEVEN: Victory Road 1.2.0 -# BID: 09AD6947189FC6D9 -# Thanks to Fl4sh for finding out function responsible for FPS Lock - -DECLARATIONS: - - - type: variable - name: fps_target - value_type: float - default_value: 30 - evaluate: FPS_TARGET -MASTER_WRITE: - # Dynamic Resolution FPS Target - ## REF: 62 02 23 1E 21 18 22 1E - - - type: asm_a64 - main_offset: 0xC35488 - instructions: [ - [adrp, x9, $fps_target], - [ldr, s1, [x9, $fps_target]] - ] -ALL_FPS: - # Disable FPS Lock - ## REF: 20 01 00 A9 00 01 63 9E, second LDRB below that - - - type: write - address: [MAIN, 0x3294F09] - value_type: uint8 - value: 0 diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B36008F90000/2F0040A6AA0866EF.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B36008F90000/2F0040A6AA0866EF.yaml deleted file mode 100644 index 01a8966..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B36008F90000/2F0040A6AA0866EF.yaml +++ /dev/null @@ -1,28 +0,0 @@ -# INAZUMA ELEVEN: Victory Road 1.5.0 -# BID: 2F0040A6AA0866EF - -DECLARATIONS: - - - type: variable - name: fps_target - value_type: float - default_value: 30 - evaluate: FPS_TARGET -MASTER_WRITE: - # Dynamic Resolution FPS Target - ## REF: 62 02 23 1E 21 18 22 1E, ucvtf + fdiv - - - type: asm_a64 - main_offset: 0xC475D8 - instructions: [ - [adrp, x9, $fps_target], - [ldr, s1, [x9, $fps_target]] - ] -ALL_FPS: - # Disable FPS Lock - ## REF: 20 01 00 A9 00 01 63 9E, second LDRB below that, IDA will show address after full analyze - - - type: write - address: [MAIN, 0x37676D9] - value_type: uint8 - value: 0 \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B36008F90000/F9648F3865C8B1AE.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B36008F90000/F9648F3865C8B1AE.yaml deleted file mode 100644 index 48bc7d1..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B36008F90000/F9648F3865C8B1AE.yaml +++ /dev/null @@ -1,28 +0,0 @@ -# INAZUMA ELEVEN: Victory Road 1.3.0 -# BID: F9648F3865C8B1AE - -DECLARATIONS: - - - type: variable - name: fps_target - value_type: float - default_value: 30 - evaluate: FPS_TARGET -MASTER_WRITE: - # Dynamic Resolution FPS Target - ## REF: 62 02 23 1E 21 18 22 1E - - - type: asm_a64 - main_offset: 0xC40878 - instructions: [ - [adrp, x9, $fps_target], - [ldr, s1, [x9, $fps_target]] - ] -ALL_FPS: - # Disable FPS Lock - ## REF: 20 01 00 A9 00 01 63 9E, second LDRB below that - - - type: write - address: [MAIN, 0x3741999] - value_type: uint8 - value: 0 \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B36008F90000/F99F0CE4FC4567ED.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B36008F90000/F99F0CE4FC4567ED.yaml deleted file mode 100644 index 65bb0a5..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B36008F90000/F99F0CE4FC4567ED.yaml +++ /dev/null @@ -1,28 +0,0 @@ -# INAZUMA ELEVEN: Victory Road 2.0.1 -# BID: F99F0CE4FC4567ED - -DECLARATIONS: - - - type: variable - name: fps_target - value_type: float - default_value: 30 - evaluate: FPS_TARGET -MASTER_WRITE: - # Dynamic Resolution FPS Target - ## REF: 62 02 23 1E 21 18 22 1E, ucvtf + fdiv - - - type: asm_a64 - main_offset: 0xC5EAA8 - instructions: [ - [adrp, x9, $fps_target], - [ldr, s1, [x9, $fps_target]] - ] -ALL_FPS: - # Disable FPS Lock - ## REF: 20 01 00 A9 00 01 63 9E, second LDRB below that, IDA will show address after full analyze - - - type: write - address: [MAIN, 0x37850BD] - value_type: uint8 - value: 0 \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B4D00E6B0000/8B40EBBA7244C94A.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B4D00E6B0000/8B40EBBA7244C94A.yaml deleted file mode 100644 index 6bb497e..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B4D00E6B0000/8B40EBBA7244C94A.yaml +++ /dev/null @@ -1,28 +0,0 @@ -# Wolfenstein®: Youngblood™ (Deutsche Version) 1.5 -# BID: 8B40EBBA7244C94A - -ALL_FPS: - # rs_force460 - - - type: write - address: [MAIN, 0x7994DF0] - value_type: int32 - value: 1 - # rs_raiseThreshold = 0.96 * (30/FPS) - - - type: evaluate_write - address: [MAIN, 0x7994F14] - value_type: float - value: "(30 / FPS_TARGET) * 0.96" - # rs_dropThreshold = 0.984 * (30/FPS) - - - type: evaluate_write - address: [MAIN, 0x7994E84] - value_type: float - value: "(30 / FPS_TARGET) * 0.984" - # com_adaptiveTickMaxHz - - - type: evaluate_write - address: [MAIN, 0x85F74E0] - value_type: int32 - value: FPS_LOCK_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B4F0196B8000/B8BE1CFAE53CAEBE.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B4F0196B8000/B8BE1CFAE53CAEBE.yaml deleted file mode 100644 index 2759142..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B4F0196B8000/B8BE1CFAE53CAEBE.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# WRC 제너레이션 - FIA 월드 랠리 챔피언십 1.2.2 -# BID: B8BE1CFAE53CAEBE - -ALL_FPS: - # OptimalFrameDuration_ms = (1000/FPS) - (0.07 * (1000/30) - - - type: evaluate_write - address: [MAIN, 0x2D5A83C] - value_type: float - value: "FRAMETIME_TARGET - (0.07 * (1000/30))" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B6001E6D6000/6895E4F3E01808C4.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B6001E6D6000/6895E4F3E01808C4.yaml deleted file mode 100644 index e022774..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B6001E6D6000/6895E4F3E01808C4.yaml +++ /dev/null @@ -1,16 +0,0 @@ -# Fabledom 1.0.7 -# BID: 6895E4F3E01808C4 - -ALL_FPS: - # DynamicResolution_TypeInfo - - - type: evaluate_write - address: [MAIN, 0x673C9A0, 0xB8, 0] - value_type: double - value: [FPS_TARGET, FRAMETIME_TARGET] - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x6BFF660, 0x48] - value_type: float - value: "1 / FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B69017120000/02D54DEBD40AF215.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B69017120000/02D54DEBD40AF215.yaml deleted file mode 100644 index e764071..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B69017120000/02D54DEBD40AF215.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# Pandemic Shooter 1.0.0 -# BID: 02D54DEBD40AF215 - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x624FF78, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x5A8BE30, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B6C01CDA0000/01660DB6F4D0FA81.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B6C01CDA0000/01660DB6F4D0FA81.yaml deleted file mode 100644 index 59acffe..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B6C01CDA0000/01660DB6F4D0FA81.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Garden Witch Life 1.0.3 -# BID: 01660DB6F4D0FA81 - -unsafeCheck: true - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x863A140, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x7642978, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B6C01CDA0000/13824B290C931FE5.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B6C01CDA0000/13824B290C931FE5.yaml deleted file mode 100644 index c20965f..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B6C01CDA0000/13824B290C931FE5.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Garden Witch Life 1.0.5 -# BID: 13824B290C931FE5 - -unsafeCheck: true - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x863C140, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x7644978, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B6C01CDA0000/CFC1C6A56575F83A.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B6C01CDA0000/CFC1C6A56575F83A.yaml deleted file mode 100644 index 1130d21..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B6C01CDA0000/CFC1C6A56575F83A.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Garden Witch Life 1.0.4 -# BID: CFC1C6A56575F83A - -unsafeCheck: true - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x863C140, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x7644978, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B750198C6000/FF0DDCCB9C3B9375.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B750198C6000/FF0DDCCB9C3B9375.yaml deleted file mode 100644 index 5e2d3c8..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B750198C6000/FF0DDCCB9C3B9375.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# MotoGP 23 1.0.7 -# BID: FF0DDCCB9C3B9375 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0xAD6AFD8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xAD99450, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0xA5962D8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B76011DAA000/C5D73D3EDAADACB2.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B76011DAA000/C5D73D3EDAADACB2.yaml deleted file mode 100644 index f1dfee7..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B76011DAA000/C5D73D3EDAADACB2.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Taxi Chaos 1.0.3 -# BID: C5D73D3EDAADACB2 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget 0.9 * (1000/FPS) - - - type: evaluate_write - address: [MAIN, 0x678E840, 0] - value_type: float - value: ["0.9 * FRAMETIME_TARGET", "0.9 * FRAMETIME_TARGET"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x67C2EC0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B7A01386E000/39F1BCCB912A12DF.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B7A01386E000/39F1BCCB912A12DF.yaml deleted file mode 100644 index e87d38f..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B7A01386E000/39F1BCCB912A12DF.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Soundfall 1.3.17957 -# BID: 39F1BCCB912A12DF - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x75E5BF8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7613BF8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B7A01386E000/3AEEE2266CD84B1E.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B7A01386E000/3AEEE2266CD84B1E.yaml deleted file mode 100644 index 117ddef..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B7A01386E000/3AEEE2266CD84B1E.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Soundfall 1.5.18245 -# BID: 3AEEE2266CD84B1E - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x6B679D8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6B95AD8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6393AA8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B7C01D480000/567A8410AE613885.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B7C01D480000/567A8410AE613885.yaml deleted file mode 100644 index b3bb6ee..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B7C01D480000/567A8410AE613885.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Boti: Byteland Overclocked 1.0.2 -# BID: 567A8410AE613885 - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x72D4718, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x8291E38, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x82CB9E0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B7C01D480000/8A942A9E838E5083.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B7C01D480000/8A942A9E838E5083.yaml deleted file mode 100644 index bb75651..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B7C01D480000/8A942A9E838E5083.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Boti: Byteland Overclocked 1.0.3 -# BID: 8A942A9E838E5083 - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x72D4718, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x8291E38, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x82CB9E0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B7C01D480000/CCBDDB69038F76FC.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B7C01D480000/CCBDDB69038F76FC.yaml deleted file mode 100644 index 8881164..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B7C01D480000/CCBDDB69038F76FC.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Boti: Byteland Overclocked 1.0.0 -# BID: CCBDDB69038F76FC - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x72C6718, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x8283E38, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x82BE2B0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B7C01D480000/E8EA74BE6221F2E4.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B7C01D480000/E8EA74BE6221F2E4.yaml deleted file mode 100644 index 3a9871a..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B7C01D480000/E8EA74BE6221F2E4.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Boti: Byteland Overclocked 1.0.1 -# BID: E8EA74BE6221F2E4 - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x72C9718, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x8286DC8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x82BF6D0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B8401EED6000/D23C95A5A7AB19C9.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B8401EED6000/D23C95A5A7AB19C9.yaml deleted file mode 100644 index a6e9243..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B8401EED6000/D23C95A5A7AB19C9.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Architect's Life: A House Design Simulator 1.3.0 -# BID: D23C95A5A7AB19C9 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x8194210, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # r.VSync - - - type: write - address: [MAIN, 0x71AD6E8, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x81CD920, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B8501771A000/78BF042012CF9EE8.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B8501771A000/78BF042012CF9EE8.yaml deleted file mode 100644 index 792dca2..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B8501771A000/78BF042012CF9EE8.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Bassmaster Fishing 2022: Super Deluxe Edition 1.02 -# BID: 78BF042012CF9EE8 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) rounded to two decimals - - - type: evaluate_write - address: [MAIN, 0x797AA98, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x79A7F48, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B870126CE000/019FBFE7738EA314.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B870126CE000/019FBFE7738EA314.yaml deleted file mode 100644 index 6d34e01..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B870126CE000/019FBFE7738EA314.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# SHIN MEGAMI TENSEI V 1.0.2 -# BID: 019FBFE7738EA314 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x75F81D0, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7621D70, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B8901AE88000/8AF36A929664A94D.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B8901AE88000/8AF36A929664A94D.yaml deleted file mode 100644 index a0b6b3b..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B8901AE88000/8AF36A929664A94D.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Daydream: Forgotten Sorrow 1.0.1 -# BID: 8AF36A929664A94D - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x6E47F38, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6E758C8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6679D08, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B8A0136D4000/0F73F1D52820F90B.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B8A0136D4000/0F73F1D52820F90B.yaml deleted file mode 100644 index 3b40c66..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B8A0136D4000/0F73F1D52820F90B.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# Pumpkin Jack (パンプキン・ジャック) 1.4.4 -# BID: 0F73F1D52820F90B - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x60F3B68, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x592B218, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B8E016F76000/992787E2B5425994.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B8E016F76000/992787E2B5425994.yaml deleted file mode 100644 index 813a40b..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B8E016F76000/992787E2B5425994.yaml +++ /dev/null @@ -1,55 +0,0 @@ -# NieR:Automata The End of YoRHa Edition AS 1.0.2 -# BID: 992787E2B5425994 - -unsafeCheck: true - -DECLARATIONS: - - - type: variable - name: dr_target_bad - value_type: float - default_value: 45 - evaluate: "1.35 * FRAMETIME_TARGET" - - - type: variable - name: dr_target_optimal - value_type: float - default_value: 32.01 - evaluate: "0.9603 * FRAMETIME_TARGET" - - - type: variable - name: dr_target_good - value_type: float - default_value: 30 - evaluate: "0.9 * FRAMETIME_TARGET" -MASTER_WRITE: - # Redirect DR timings to MAIN + 0x2BE8F00, [Bad, Optimal, Good] - - - type: asm_a64 - main_offset: 0x9C07A4 - instructions: [ - [adrp, x12, $dr_target_bad], - [ldr, s3, [x12, $dr_target_bad]] - ] - - - type: asm_a64 - main_offset: 0x9C07F4 - instructions: [ - [adrp, x12, $dr_target_optimal], - [ldr, w12, [x12, $dr_target_optimal]] - ] - - - type: asm_a64 - main_offset: 0x9C0844 - instructions: [ - [fcsel, s3, s4, s0, gt], - [adrp, x12, $dr_target_optimal], - [ldr, s0, [x12, $dr_target_optimal]], - [adrp, x12, $dr_target_good] - ] - - - type: asm_a64 - main_offset: 0x9C0868 - instructions: [ - [ldr, s0, [x12, $dr_target_good]] - ] diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B9801F872000/007EA5E2E2541C6F.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B9801F872000/007EA5E2E2541C6F.yaml deleted file mode 100644 index 6809ff0..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B9801F872000/007EA5E2E2541C6F.yaml +++ /dev/null @@ -1,42 +0,0 @@ -# FAIRY TAIL 2 1.4.2 -# BID: 007EA5E2E2541C6F - -DECLARATIONS: - - - type: variable - name: dr_target1 - value_type: float - default_value: 0.043478 - evaluate: "1 / FPS_TARGET" - - - type: variable - name: dr_target2 - value_type: float - default_value: 0.037037 - evaluate: "1 / (FPS_TARGET + 5)" -MASTER_WRITE: - # Redirect Dynamic Resolution target - # REF: 6A C8 82 52 - - - type: asm_a64 - main_offset: 0x138238C - instructions: [ - [adrp, x10, $dr_target1], - [ldr, w10, [x10, $dr_target1]] - ] - - - type: asm_a64 - main_offset: 0x13823A8 - instructions: [ - [adrp, x10, $dr_target2], - [ldr, w10, [x10, $dr_target2]] - ] -ALL_FPS: - # FPS Lock - # REF: 1F 00 00 71 C8 03 80 52, first ADRP+ADD above it - - - type: evaluate_write - address: [MAIN, 0x2C0B558, 0x170, 0x18C] - address_unsafe: true - value_type: int32 - value: FPS_LOCK_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B9801F872000/A588F7BB864AAD5F.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B9801F872000/A588F7BB864AAD5F.yaml deleted file mode 100644 index 54fc07e..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100B9801F872000/A588F7BB864AAD5F.yaml +++ /dev/null @@ -1,42 +0,0 @@ -# FAIRY TAIL 2 1.4.1 -# BID: A588F7BB864AAD5F - -MASTER_WRITE: - # Redirect Dynamic Resolution target to MAIN+0x2C53F00 - # REF: 6AC88252 - - - type: bytes - main_offset: 0x138238C - value_type: uint32 - value: - - 0xB000C68A # ADRP X10, 0x2c53000 - - 0xB94F014A # LDR W10, [X10, 0xF00] - - - type: bytes - main_offset: 0x13823A8 - value_type: uint32 - value: - - 0xB000C68A # ADRP X10, 0x2c53000 - - 0xB94F054A # LDR W10, [X10, 0xF04] - # Default values - - - type: bytes - main_offset: 0x2C53F00 - value_type: float - value: [0.043478, 0.037037] -ALL_FPS: - # FPS Lock - # REF: 1F 00 00 71 C8 03 80 52, first ADRP+ADD above it - - - type: evaluate_write - address: [MAIN, 0x2C0B558, 0x170, 0x18C] - address_unsafe: true - value_type: int32 - value: FPS_LOCK_TARGET - # Dynamic Resolution Target - # Game proritizes resolution over framerate, I changed it to prefer framerate - - - type: evaluate_write - address: [MAIN, 0x2C53F00] - value_type: float - value: ["1 / FPS_TARGET", "1 / (FPS_TARGET + 5)"] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BA502285A000/6114E040846B8E3D.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BA502285A000/6114E040846B8E3D.yaml deleted file mode 100644 index 2761d86..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BA502285A000/6114E040846B8E3D.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# World At War: Normandy 1.0.0 -# BID: 6114E040846B8E3D - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x604AC78, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6843A78, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BAC01E57E000/C55F6B8AEFA54324.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BAC01E57E000/C55F6B8AEFA54324.yaml deleted file mode 100644 index 27ebdd4..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BAC01E57E000/C55F6B8AEFA54324.yaml +++ /dev/null @@ -1,14 +0,0 @@ -# Ys X: Nordics US/EU 1.0.3 -# BID: C55F6B8AEFA54324 -# Credits to StevensND for finding assembly instruction from which I have derived pointer address - -unsafeCheck: true - -ALL_FPS: - # Used to set min delta timing for various parts of game + DR target - # REF: C9 03 80 52 C1 03 80 52 first ADRP above it - - - type: evaluate_write - address: [MAIN, 0xC50788, 0x34] - value_type: uint32 - value: FPS_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BAC01E57E000/E5816E16CC5D72A5.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BAC01E57E000/E5816E16CC5D72A5.yaml deleted file mode 100644 index af64410..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BAC01E57E000/E5816E16CC5D72A5.yaml +++ /dev/null @@ -1,14 +0,0 @@ -# Ys X: Nordics US/EU 1.0.2 -# BID: E5816E16CC5D72A5 -# Credits to StevensND for finding assembly instruction from which I have derived pointer address - -unsafeCheck: true - -ALL_FPS: - # Used to set min delta timing for various parts of game + DR target - # REF: C9 03 80 52 C1 03 80 52 first ADRP above it - - - type: evaluate_write - address: [MAIN, 0xC4F758, 0x34] - value_type: uint32 - value: FPS_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BB000A3AA000/B61F280560A937D2.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BB000A3AA000/B61F280560A937D2.yaml deleted file mode 100644 index 5b9890b..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BB000A3AA000/B61F280560A937D2.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# Sniper Elite V2 1.0.5 -# BID: B61F280560A937D2 - -unsafeCheck: true - -ALL_FPS: - # Dynamic Resolution frame time target - - - type: evaluate_write - address: [MAIN, 0x155A880, 4] - value_type: float - value: "0.9 * FRAMETIME_TARGET" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BC501355A000/7C9F89C3743F202F.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BC501355A000/7C9F89C3743F202F.yaml deleted file mode 100644 index 300f9ca..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BC501355A000/7C9F89C3743F202F.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# 電車でGO!! はしろう山手線 1.1.2 -# BID: 7C9F89C3743F202F - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x592B098, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x5957B60, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x51EF3A8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BD000CB2C000/1F1363EC8CC83C73.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BD000CB2C000/1F1363EC8CC83C73.yaml deleted file mode 100644 index d405334..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BD000CB2C000/1F1363EC8CC83C73.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# SWORD OF THE VAGRANT 1.1 -# BID: 1F1363EC8CC83C73 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x674CAA0, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6791950, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BD10190C0000/45C15AE4450708FD.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BD10190C0000/45C15AE4450708FD.yaml deleted file mode 100644 index c4fed62..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BD10190C0000/45C15AE4450708FD.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# AEW Fight Forever 1.10.0 -# BID: 45C15AE4450708FD - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x8C307B8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8C5E608, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x8460EF8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BD601EC3E000/3F1843C4FE400063.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BD601EC3E000/3F1843C4FE400063.yaml deleted file mode 100644 index be8e5a9..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BD601EC3E000/3F1843C4FE400063.yaml +++ /dev/null @@ -1,32 +0,0 @@ -# Poppy Playtime: Chapter 3 1.2 -# BID: 3F1843C4FE400063 - -ALL_FPS: - # Disable bUseFixedFrameRate - - - type: write - address: [MAIN, 0x778C438, 0xAA4] - address_unsafe: true - value_type: int32 - value: 6 - # r.VSync - - - type: write - address: [MAIN, 0x676D6E8, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x7754230, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x778D990, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BD601EC3E000/5AF163DEF288F098.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BD601EC3E000/5AF163DEF288F098.yaml deleted file mode 100644 index cbc9121..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BD601EC3E000/5AF163DEF288F098.yaml +++ /dev/null @@ -1,32 +0,0 @@ -# Poppy Playtime: Chapter 3 1.0.0.2 -# BID: 5AF163DEF288F098 - -ALL_FPS: - # Disable bUseFixedFrameRate - - - type: write - address: [MAIN, 0x778C438, 0xAA4] - address_unsafe: true - value_type: int32 - value: 6 - # r.VSync - - - type: write - address: [MAIN, 0x676D6E8, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x7754230, 0] - value_type: float - value: ["0.99 * FRAMETIME_TARGET", "0.99 * FRAMETIME_TARGET"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x778D990, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BDB01A0E6000/217A5C011269C81E.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BDB01A0E6000/217A5C011269C81E.yaml deleted file mode 100644 index 5c30f0b..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BDB01A0E6000/217A5C011269C81E.yaml +++ /dev/null @@ -1,14 +0,0 @@ -# EA SPORTS FC 24 1.5a.9115 -# BID: 217A5C011269C81E - -ALL_FPS: - # Internal FPS Lock - - - type: evaluate_write - address: [MAIN, 0xCDF1E20, 8] - address_unsafe: true - value_type: double - value: FPS_TARGET - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BDB01A0E6000/2600C6B1C5049FAE.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BDB01A0E6000/2600C6B1C5049FAE.yaml deleted file mode 100644 index 8caf45e..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BDB01A0E6000/2600C6B1C5049FAE.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# EA SPORTS FC 24 1.5a.d31 -# BID: 2600C6B1C5049FAE - -unsafeCheck: true - -ALL_FPS: - # Internal FPS Lock - - - type: evaluate_write - address: [MAIN, 0xCDF1E20, 8] - value_type: double - value: FPS_TARGET diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BDB01A0E6000/A5513651324F6B73.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BDB01A0E6000/A5513651324F6B73.yaml deleted file mode 100644 index a530404..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BDB01A0E6000/A5513651324F6B73.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# EA SPORTS FC 24 1.59.4045 -# BID: A5513651324F6B73 - -unsafeCheck: true - -ALL_FPS: - # Internal FPS Lock - - - type: evaluate_write - address: [MAIN, 0xCDEBE20, 8] - value_type: double - value: FPS_TARGET diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BDB01A0E6000/EC2417892C9BCC7E.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BDB01A0E6000/EC2417892C9BCC7E.yaml deleted file mode 100644 index b1713da..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BDB01A0E6000/EC2417892C9BCC7E.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# EA SPORTS FC 24 1.59.1a28 -# BID: EC2417892C9BCC7E - -unsafeCheck: true - -ALL_FPS: - # Internal FPS Lock - - - type: evaluate_write - address: [MAIN, 0xCDEAE20, 8] - value_type: double - value: FPS_LOCK_TARGET diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BDB01A0E6000/F5BE87C9F0715C3D.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BDB01A0E6000/F5BE87C9F0715C3D.yaml deleted file mode 100644 index 806eabe..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BDB01A0E6000/F5BE87C9F0715C3D.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# EA SPORTS FC 24 1.5a.63d1 -# BID: F5BE87C9F0715C3D - -unsafeCheck: true - -ALL_FPS: - # Internal FPS Lock - - - type: evaluate_write - address: [MAIN, 0xCDF1E20, 8] - value_type: double - value: FPS_TARGET diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BDB01A0E6000/F7EA5CACC75067D4.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BDB01A0E6000/F7EA5CACC75067D4.yaml deleted file mode 100644 index 26bb24e..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BDB01A0E6000/F7EA5CACC75067D4.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# EA SPORTS FC 24 1.59.6eaf -# BID: F7EA5CACC75067D4 - -unsafeCheck: true - -ALL_FPS: - # Internal FPS Lock - - - type: evaluate_write - address: [MAIN, 0xCDEFE20, 8] - value_type: double - value: FPS_TARGET diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BDD00EF5A000/B70F06EAC87FA2AF.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BDD00EF5A000/B70F06EAC87FA2AF.yaml deleted file mode 100644 index cafd283..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BDD00EF5A000/B70F06EAC87FA2AF.yaml +++ /dev/null @@ -1,40 +0,0 @@ -# トライン4:ザ・ナイトメア プリンス 1.0.3 -# BID: B70F06EAC87FA2AF -# REF: 00 00 00 00 00 00 41 40, its xref - -DECLARATIONS: - - - type: variable - name: dr_target_max - value_type: double - default_value: 34 - evaluate: "1.02 * FRAMETIME_TARGET" - - - type: variable - name: dr_target_min - value_type: double - default_value: 33 - evaluate: "0.99 * FRAMETIME_TARGET" -MASTER_WRITE: - # Allow changing dynamic resolution timings - # Max - - - type: asm_a64 - main_offset: 0x16DC3B8 - instructions: [ - [adrp, x8, $dr_target_max], - [ldr, d2, [x8, $dr_target_max]] - ] - # Min - - - type: asm_a64 - main_offset: 0x16DC404 - instructions: [ - [adrp, x10, $dr_target_min] - ] - - - type: asm_a64 - main_offset: 0x16DC418 - instructions: [ - [ldr, d4, [x10, $dr_target_min]] - ] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BDF0197C8000/41F236A333370F55.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BDF0197C8000/41F236A333370F55.yaml deleted file mode 100644 index e0b8dfe..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BDF0197C8000/41F236A333370F55.yaml +++ /dev/null @@ -1,11 +0,0 @@ -# Once Upon A KATAMARI 1.0.3 -# BID: 41F236A333370F55 - -ALL_FPS: - # Dynamic Resolution - ## REF: App.KatamariSin.AppSupport_TypeInfo - - - type: evaluate_write - address: [MAIN, 0x8F858B8, 0xB8, 0x18] - value_type: double - value: "0.9 * FRAMETIME_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BDF0197C8000/B7242BF0E5B17B6F.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BDF0197C8000/B7242BF0E5B17B6F.yaml deleted file mode 100644 index 5d0c501..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BDF0197C8000/B7242BF0E5B17B6F.yaml +++ /dev/null @@ -1,11 +0,0 @@ -# ワンス・アポン・ア・塊魂 1.0.4 -# BID: B7242BF0E5B17B6F - -ALL_FPS: - # Dynamic Resolution - ## REF: App.KatamariSin.AppSupport_TypeInfo - - - type: evaluate_write - address: [MAIN, 0x8F86948, 0xB8, 0x18] - value_type: double - value: "0.9 * FRAMETIME_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BDF0197C8000/FF53171B18C7701A.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BDF0197C8000/FF53171B18C7701A.yaml deleted file mode 100644 index 6200cd1..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BDF0197C8000/FF53171B18C7701A.yaml +++ /dev/null @@ -1,11 +0,0 @@ -# Once Upon A KATAMARI 1.0.2 -# BID: FF53171B18C7701A - -ALL_FPS: - # Dynamic Resolution - ## REF: App.KatamariSin.AppSupport_TypeInfo - - - type: evaluate_write - address: [MAIN, 0x8F7C6D8, 0xB8, 0x18] - value_type: double - value: "0.9 * FRAMETIME_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BEA0244FC000/4AC071F9B9540985.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BEA0244FC000/4AC071F9B9540985.yaml deleted file mode 100644 index f42d5e5..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BEA0244FC000/4AC071F9B9540985.yaml +++ /dev/null @@ -1,23 +0,0 @@ -# Majogami 1.1.3 -# BID: 4AC071F9B9540985 -# REF: nnMain - -ALL_FPS: - # Min delta - - - type: evaluate_write - address: [MAIN, 0x2CF1420, 0x50] - value_type: uint32 - value: FPS_TARGET - # FPS Lock - - - type: evaluate_write - address: [MAIN, 0x2CF1420, 0x60] - value_type: uint32 - value: "1 / FPS_TARGET" - # Disable fixed speed - - - type: write - address: [MAIN, 0x2CF1420, 0x5C] - value_type: uint8 - value: 0 \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BEA0244FC000/9FD75204E7C17463.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BEA0244FC000/9FD75204E7C17463.yaml deleted file mode 100644 index 7fdafe1..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BEA0244FC000/9FD75204E7C17463.yaml +++ /dev/null @@ -1,23 +0,0 @@ -# Majogami 1.1.1 -# BID: 9FD75204E7C17463 -# REF: nnMain - -ALL_FPS: - # Min delta - - - type: evaluate_write - address: [MAIN, 0x2CEF420, 0x50] - value_type: uint32 - value: FPS_TARGET - # FPS Lock - - - type: evaluate_write - address: [MAIN, 0x2CEF420, 0x60] - value_type: uint32 - value: "1 / FPS_TARGET" - # Disable fixed speed - - - type: write - address: [MAIN, 0x2CEF420, 0x5C] - value_type: uint8 - value: 0 \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BEB015604000/B38D51E0391187EC.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BEB015604000/B38D51E0391187EC.yaml deleted file mode 100644 index 880c7e7..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BEB015604000/B38D51E0391187EC.yaml +++ /dev/null @@ -1,42 +0,0 @@ -# PROJECT ZERO: MAIDEN OF BLACK WATER 1.0.4 -# FATAL FRAME: MAIDEN OF BLACK WATER 1.0.4 -# BID: B38D51E0391187EC - -DECLARATIONS: - - - type: variable - name: min_delta - value_type: float - default_value: 0.0333333333 - evaluate: "1 / FPS_TARGET" - - - type: variable - name: fps_lock - value_type: uint32 - default_value: 33333333 - evaluate: "1000000000 / FPS_TARGET" -MASTER_WRITE: - # Redirect min delta - # REF: 00 D9 21 7E 28 19 20 1E - - - type: asm_a64 - main_offset: 0x39ABF8 - instructions: [ - [adrp, x27, $min_delta], - [ldr, s8, [x27, $min_delta]] - ] - # Redirect FPS Lock - # REF: 69 AA 40 B9 0A 40 99 52 - - - type: asm_a64 - main_offset: 0x39B2D8 - instructions: [ - [adrp, x9, $fps_lock], - [ldr, w9, [x9, $fps_lock]], - [nop], - [nop] - ] -ALL_FPS: - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BED01E6EE000/87F1CEF6D52392AE.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BED01E6EE000/87F1CEF6D52392AE.yaml deleted file mode 100644 index fb15f78..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BED01E6EE000/87F1CEF6D52392AE.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# Sworn 1.0.2 -# BID: 87F1CEF6D52392AE - -ALL_FPS: - # Dynamic Resolution target - ## REF: DynamicResolution_TypeInfo - - - type: evaluate_write - address: [MAIN, 0x5F98160, 0xB8, 0] - address_unsafe: true - value_type: double - value: [FPS_TARGET, FRAMETIME_TARGET] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BEE01948E000/A3416631954C56C8.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BEE01948E000/A3416631954C56C8.yaml deleted file mode 100644 index 5a61c4d..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BEE01948E000/A3416631954C56C8.yaml +++ /dev/null @@ -1,47 +0,0 @@ -# Beholder 3 1.0.1 -# BID: A3416631954C56C8 - -DECLARATIONS: - # Changed math because frametime peaks at 60 FPS - - - type: variable - name: fps_target - value_type: uint32 - default_value: 30 - evaluate: FPS_TARGET - 5 - - - type: variable - name: fps_target_max - value_type: uint32 - default_value: 40 - evaluate: FPS_TARGET - 1 - - - type: code - name: getFpsTarget - instructions: [ - [adrp, x9, $fps_target], - [ldr, w9, [x9, $fps_target]], - [ret] - ] - - - type: code - name: getFpsTargetMax - instructions: [ - [adrp, x9, $fps_target_max], - [ldr, w9, [x9, $fps_target_max]], - [ret] - ] -MASTER_WRITE: - # DynamicResolutionURP::Update(), offsets 0x30 and 0x34 - - - type: asm_a64 - main_offset: 0x2E765DC - instructions: [ - [bl, _getFpsTarget()] - ] - - - type: asm_a64 - main_offset: 0x2E765F8 - instructions: [ - [bl, _getFpsTargetMax()] - ] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BF500207C000/461B14E505AB9555.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BF500207C000/461B14E505AB9555.yaml deleted file mode 100644 index 4fc1395..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BF500207C000/461B14E505AB9555.yaml +++ /dev/null @@ -1,34 +0,0 @@ -# Bloodstained: Ritual of the Night 1.60 -# BID: 461B14E505AB9555 - -unsafeCheck: true - -MASTER_WRITE: - # Disable double buffer - - - type: bytes - main_offset: 0xB080C02 - value_type: int8 - value: 0x53 -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0xCC20CC8, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0xD450E90, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xD477F10, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BF500207C000/E380EB35262B4F9C.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BF500207C000/E380EB35262B4F9C.yaml deleted file mode 100644 index 262ca28..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BF500207C000/E380EB35262B4F9C.yaml +++ /dev/null @@ -1,34 +0,0 @@ -# Bloodstained: Ritual of the Night 1.50 -# BID: E380EB35262B4F9C - -unsafeCheck: true - -MASTER_WRITE: - # Disable double buffer - - - type: bytes - main_offset: 0xB06BD54 - value_type: int8 - value: 0x53 -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0xCC0BCA8, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0xD43BE90, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xD462F10, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BFE00E9CA000/4BC4A8A814FD46A4.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BFE00E9CA000/4BC4A8A814FD46A4.yaml deleted file mode 100644 index 4446ecb..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100BFE00E9CA000/4BC4A8A814FD46A4.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# The Witcher 3: Wild Hunt - Complete Edition 4.04b -# BID: 4BC4A8A814FD46A4 - -ALL_FPS: - # DRGameTargetFrameTimeInMs - - - type: evaluate_write - address: [MAIN, 0x41312B4] - value_type: float - value: "0.945 * FRAMETIME_TARGET" - # DRCinematicTargetFrameTimeInMs - - - type: evaluate_write - address: [MAIN, 0x41312E4] - value_type: float - value: "0.945 * FRAMETIME_TARGET" - # LimitFPS - - - type: evaluate_write - address: [MAIN, 0x411DCFC] - value_type: int32 - value: FPS_LOCK_TARGET - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C09014530000/D92F465FE9920BB6.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C09014530000/D92F465FE9920BB6.yaml deleted file mode 100644 index 0ccbc29..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C09014530000/D92F465FE9920BB6.yaml +++ /dev/null @@ -1,22 +0,0 @@ -# Boomerang X 1.0.2 -# BID: D92F465FE9920BB6 - -DECLARATIONS: - - - type: variable - name: dr_target - value_type: float - default_value: 28 - evaluate: FPS_TARGET - -MASTER_WRITE: - # Patch `DynamicResolution.Settings$$get_TargetFPS` to redirect reading targetFPS - - - type: asm_a64 - main_offset: 0x3821020 - instructions: [ - [adrp, x0, $dr_target], - [ldr, s0, [x0, $dr_target]], - [ret] - ] - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C0F0020E8000/D0798521F563E6A7.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C0F0020E8000/D0798521F563E6A7.yaml deleted file mode 100644 index 007dd9b..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C0F0020E8000/D0798521F563E6A7.yaml +++ /dev/null @@ -1,15 +0,0 @@ -# Snake Pass 1.4 -# BID: D0798521F563E6A7 - -unsafeCheck: true - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x49012B8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C11012C68000/4EEA2970DF38ECE1.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C11012C68000/4EEA2970DF38ECE1.yaml deleted file mode 100644 index d65c363..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C11012C68000/4EEA2970DF38ECE1.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# Sniper Elite 4 JPN 1.0.3 -# BID: 4EEA2970DF38ECE1 - -ALL_FPS: - # Dynamic Resolution frame time target - - - type: evaluate_write - address: [MAIN, 0x2D7A974] - value_type: float - value: "0.969 * FRAMETIME_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C1101EE5A000/950FB0C3D58D6A7B.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C1101EE5A000/950FB0C3D58D6A7B.yaml deleted file mode 100644 index adf8e7f..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C1101EE5A000/950FB0C3D58D6A7B.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# High On Life 1.0.3-1.0.5 -# BID: 950FB0C3D58D6A7B - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x6BA6D78, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x77560C8, 0] - value_type: float - value: ["0.93 * FRAMETIME_TARGET", "0.93 * FRAMETIME_TARGET"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7784130, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C12017BCA000/F01A4E60035AF15A.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C12017BCA000/F01A4E60035AF15A.yaml deleted file mode 100644 index e2cbe9d..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C12017BCA000/F01A4E60035AF15A.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# TRANSFORMERS: Galactic Trials 1.0.1 -# BID: F01A4E60035AF15A - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) rounded to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x69DC198, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6A16580, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6217AA8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C1300BBC6000/59719CFCD1671B98.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C1300BBC6000/59719CFCD1671B98.yaml deleted file mode 100644 index 8a1d907..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C1300BBC6000/59719CFCD1671B98.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# ABZU 1.0.0/1.0.01 -# BID: 59719CFCD1671B98 - -unsafeCheck: true - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6228EE0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x5996FC0, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C1E01CDEE000/27BB06DD145F39F5.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C1E01CDEE000/27BB06DD145F39F5.yaml deleted file mode 100644 index 30af9c1..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C1E01CDEE000/27BB06DD145F39F5.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Raccoo Venture 1.0.3 -# BID: 27BB06DD145F39F5 - -unsafeCheck: true - -ALL_FPS: - # _UnityEngine.Rendering.OnDemandRendering_TypeInfo - - - type: write - address: [MAIN, 0x3482FB0, 0xB8, 0] - value_type: int32 - value: -1 - # maxFixedDeltaTime, ref: UnityEngine.Time::get_timeScale - - - type: write - address: [MAIN, 0x38D2780, 0x100] - value_type: float - value: 0.0666666666 - # fixedDeltaTime - # Fixes an issue with player character jittering at different refresh rates - - - type: evaluate_write - address: [MAIN, 0x38D2780, 0x48] - value_type: float - value: "1 / FPS_TARGET" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C2801CFB8000/0BB69E112916D851.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C2801CFB8000/0BB69E112916D851.yaml deleted file mode 100644 index f85c92b..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C2801CFB8000/0BB69E112916D851.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# PAC-MAN WORLD 2 Re-PAC 1.0.4 -# BID: 0BB69E112916D851 - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x87DF838, 0x58] - value_type: uint32 - value: "2352000 * FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C2801CFB8000/B70D6561B718C8E0.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C2801CFB8000/B70D6561B718C8E0.yaml deleted file mode 100644 index 337d11a..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C2801CFB8000/B70D6561B718C8E0.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# PAC-MAN WORLD 2 Re-PAC 1.0.3 -# BID: B70D6561B718C8E0 - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x87DE838, 0x58] - value_type: uint32 - value: "2352000 * FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C2A01A730000/9F7C33E21279D3E6.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C2A01A730000/9F7C33E21279D3E6.yaml deleted file mode 100644 index 0e27f53..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C2A01A730000/9F7C33E21279D3E6.yaml +++ /dev/null @@ -1,58 +0,0 @@ -# ROMANCE OF THE THREE KINGDOMS 8 REMAKE 1.0.8 -# BID: 9F7C33E21279D3E6 -# Cursor speed is tied to framerate - -DECLARATIONS: - # DON'T PUT ANYTHING BETWEEN - START - - - type: variable - name: fps_lock - value_type: uint32 - default_value: 30 - evaluate: FPS_LOCK_TARGET - - - type: variable - name: fps_lock2 - value_type: uint32 - default_value: 60 - evaluate: FPS_LOCK_TARGET - - - type: variable - name: game_speed - value_type: float - default_value: 0.0333333333 - evaluate: "1/FPS_TARGET" - - - type: variable - name: game_speed2 - value_type: float - default_value: 0.0166666666 - # DON'T PUT ANYTHING BETWEEN - END - - - type: code - name: fpsLock - instructions: [ - [adrp, x8, $fps_lock], - [ldr, w8, [x8, $fps_lock]], - [ret] - ] -MASTER_WRITE: - # Redirect FPS Lock, REF: A8 EA 00 B9 08 00 40 B9, LDR W8, [X0] - - - type: asm_a64 - main_offset: 0x1F900BC - instructions: [ - [bl, _fpsLock()] - ] - # Redirect game speed, REF: 08 31 9F 9A 20 79 68 BC 68 6E 41 B9 - - - type: asm_a64 - main_offset: 0x88B230 - instructions: [ - [adrp, x8, $game_speed], - [ldr, s0, [x8, $game_speed]] - ] -ALL_FPS: - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C3800049C000/9D4C86E6EF74504A.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C3800049C000/9D4C86E6EF74504A.yaml deleted file mode 100644 index 9f1ca84..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C3800049C000/9D4C86E6EF74504A.yaml +++ /dev/null @@ -1,11 +0,0 @@ -# Monster Hunter XX Nintendo Switch Ver. 1.5.1 -# BID: 9D4C86E6EF74504A - -unsafeCheck: true - -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x214B898, 0x484C] - value_type: float - value: FPS_LOCK_TARGET diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C3C012718000/2CF52C8DA4468946.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C3C012718000/2CF52C8DA4468946.yaml deleted file mode 100644 index d16f324..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C3C012718000/2CF52C8DA4468946.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Grand Theft Auto III - Definitive Edition 1.0.7 -# BID: 2CF52C8DA4468946 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 1 decimal - - - type: evaluate_write - address: [MAIN, 0x74FD298, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7521FE0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C3C012718000/BB2DDA80E83D0B2F.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C3C012718000/BB2DDA80E83D0B2F.yaml deleted file mode 100644 index 542117e..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C3C012718000/BB2DDA80E83D0B2F.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Grand Theft Auto III - Definitive Edition 1.0.8 -# BID: BB2DDA80E83D0B2F - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (Default is 36.5 ms) - - - type: evaluate_write - address: [MAIN, 0x755F988, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7584640, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6DD2210, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C47025F3A000/553262E59A96741B.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C47025F3A000/553262E59A96741B.yaml deleted file mode 100644 index 3a16589..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C47025F3A000/553262E59A96741B.yaml +++ /dev/null @@ -1,33 +0,0 @@ -# Detective - Rainy Night 1.0.1-1.0.2 -# BID: 553262E59A96741B -# Game has bug that makes it work 2x slower than in other platforms, so with this patch we are also fixing the issue across all FPS ranges - -ALL_FPS: - # Disable bUseFixedFrameRate - - - type: write - address: [MAIN, 0x7EEA3E8, 0xC34] - address_unsafe: true - value_type: uint32 - value: 7 - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x7EA95E0, 0] - value_type: float - value: ["0.9 * FRAMETIME_TARGET", "0.9 * FRAMETIME_TARGET"] - # r.VSync - - - type: write - address: [MAIN, 0x6ED4290, 0] - value_type: uint32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7EEAAB8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C56010FD8000/5AD255D6667B6EB5.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C56010FD8000/5AD255D6667B6EB5.yaml deleted file mode 100644 index a8126a7..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C56010FD8000/5AD255D6667B6EB5.yaml +++ /dev/null @@ -1,11 +0,0 @@ -# Plants vs. Zombies Battle for Neighborville 1.0.4 -# BID: 5AD255D6667B6EB5 - -ALL_FPS: - # REF: fb::Settings::s_settings - # Dynamic Resolution frametime target - - - type: evaluate_write - address: [MAIN, 0x9ED3AA0, 0x20] - value_type: float - value: "0.93 * FRAMETIME_TARGET" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C56010FD8000/82051A9C802D0A4C.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C56010FD8000/82051A9C802D0A4C.yaml deleted file mode 100644 index 6d153f3..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C56010FD8000/82051A9C802D0A4C.yaml +++ /dev/null @@ -1,13 +0,0 @@ -# Plants vs. Zombies Battle for Neighborville 1.0.3 -# BID: 82051A9C802D0A4C - -unsafeCheck: true - -ALL_FPS: - # fb::Settings::s_settings + 0x20 - # Dynamic Resolution frametime target - - - type: evaluate_write - address: [MAIN, 0x9ED2AA0, 0x20] - value_type: float - value: "0.93 * FRAMETIME_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C5A013B7A000/1B98D227021142B1.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C5A013B7A000/1B98D227021142B1.yaml deleted file mode 100644 index 313a987..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C5A013B7A000/1B98D227021142B1.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# Unbound: Worlds Apart 1.0.3 -# BID: 1B98D227021142B1 - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x65C4920, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6D886E8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C63021ADC000/C65BE8468BF1EC89.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C63021ADC000/C65BE8468BF1EC89.yaml deleted file mode 100644 index af5804f..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C63021ADC000/C65BE8468BF1EC89.yaml +++ /dev/null @@ -1,11 +0,0 @@ -# Once Upon A KATAMARI US 1.0.3 -# BID: C65BE8468BF1EC89 - -ALL_FPS: - # Dynamic Resolution - ## REF: App.KatamariSin.AppSupport_TypeInfo - - - type: evaluate_write - address: [MAIN, 0x8F858B8, 0xB8, 0x18] - value_type: double - value: "0.9 * FRAMETIME_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C6C010AE4000/FE211DBFAD6EA549.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C6C010AE4000/FE211DBFAD6EA549.yaml deleted file mode 100644 index ff8f170..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C6C010AE4000/FE211DBFAD6EA549.yaml +++ /dev/null @@ -1,14 +0,0 @@ -# Clive 'N' Wrench 1.0.6 -# BID: FE211DBFAD6EA549 - -ALL_FPS: - # Dynamic Resolution GPU Frame Timing target in ms = 0.9 * (1000/FPS) - # It was derived by hooking `PSH.DynamicResolutionManager$$ScaleResolutionToAchieveFrameRate` before its first use - # at instruction `LDR d1, [x8, #0x18]` - # Then Edizon-SE's Pointer Search was used to find reliable offset chain - - - type: evaluate_write - address: [MAIN, 0x3E8B368, 0x20, 0x620, 0x18] - address_unsafe: true - value_type: double - value: "0.9 * FRAMETIME_TARGET" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C7300EEE4000/54211726D36A8D9C.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C7300EEE4000/54211726D36A8D9C.yaml deleted file mode 100644 index 8c65c75..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C7300EEE4000/54211726D36A8D9C.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# Zombie Army Trilogy 1.0.2 -# BID: 54211726D36A8D9C - -unsafeCheck: true - -ALL_FPS: - # Dynamic Resolution frame time target - - - type: evaluate_write - address: [MAIN, 0xDD9A88, 4] - value_type: float - value: "0.9 * FRAMETIME_TARGET" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C75019274000/582ADD6F24A2A6B7.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C75019274000/582ADD6F24A2A6B7.yaml deleted file mode 100644 index b0f14df..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C75019274000/582ADD6F24A2A6B7.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# TEMPUS 1.0.0 -# BID: 582ADD6F24A2A6B7 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x69881C8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # r.VSync - - - type: write - address: [MAIN, 0x61BA938, 0] - value_type: uint32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x69B5D98, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C8E01DD16000/3F2E96A4396944A1.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C8E01DD16000/3F2E96A4396944A1.yaml deleted file mode 100644 index a445c28..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C8E01DD16000/3F2E96A4396944A1.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Europa 1.4.0 -# BID: 3F2E96A4396944A1 - -unsafeCheck: true - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x5FF8408, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x57F8EC8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C9801FEE6000/53F407A2CFBF5202.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C9801FEE6000/53F407A2CFBF5202.yaml deleted file mode 100644 index 31a9088..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C9801FEE6000/53F407A2CFBF5202.yaml +++ /dev/null @@ -1,16 +0,0 @@ -# Yakuza Kiwami 1.00 -# BID: 53F407A2CFBF5202 - -unsafeCheck: true - -ALL_FPS: - # Block cutscenes to 30 FPS to fix glitches, experimental - - - type: compare - compare_type: "!=" - compare_value_type: uint64 - compare_address: [MAIN, 0x2596E00] - compare_value: 0 - address: [MAIN] - value_type: refresh_rate - value: 30 diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C9801FEE6000/AE90FD64E7B2FE1E.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C9801FEE6000/AE90FD64E7B2FE1E.yaml deleted file mode 100644 index 3366e34..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100C9801FEE6000/AE90FD64E7B2FE1E.yaml +++ /dev/null @@ -1,17 +0,0 @@ -# Yakuza Kiwami 1.01 -# BID: AE90FD64E7B2FE1E - -unsafeCheck: true - -ALL_FPS: - # Block cutscenes to 30 FPS to fix glitches - # REF 6B 01 40 F9 2A 29 42 B9 69 B9 40 F9, any result, second LDR above (LDR X9) - - - type: compare - compare_type: "!=" - compare_value_type: uint64 - compare_address: [MAIN, 0x2597E00] - compare_value: 0 - address: [MAIN] - value_type: refresh_rate - value: 30 diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CA3014ADE000/372AB37327DB2C31.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CA3014ADE000/372AB37327DB2C31.yaml deleted file mode 100644 index f23771e..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CA3014ADE000/372AB37327DB2C31.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Umurangi Generation 1.6.6.0 -# BID: 372AB37327DB2C31 - -DECLARATIONS: - - - type: variable - name: fps_lock - value_type: float - default_value: 0.03333333333 - evaluate: "1 / FPS_TARGET" - -MASTER_WRITE: - # Read FPS Lock from MAIN+0x49FCFF0 - ## REF: 81 1a 40 bd 02 10 2e 1e - ## REF: FPSTarget.<>d__6::MoveNext() - - - type: asm_a64 - main_offset: 0x2DF1E60 - instructions: [ - [adrp, x8, $fps_lock], - [ldr, s1, [x8, $fps_lock]], - [nop] - ] -ALL_FPS: - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CA800F9B2000/A1E1EFBA68B846A9.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CA800F9B2000/A1E1EFBA68B846A9.yaml deleted file mode 100644 index 6f5d0c6..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CA800F9B2000/A1E1EFBA68B846A9.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# Sherlock Holmes The Awakened 1.0.1 -# BID: A1E1EFBA68B846A9 - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7D81968, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x75811D8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CAF00B744000/FE77FFB8CBFB3A5C.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CAF00B744000/FE77FFB8CBFB3A5C.yaml deleted file mode 100644 index e2566c8..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CAF00B744000/FE77FFB8CBFB3A5C.yaml +++ /dev/null @@ -1,14 +0,0 @@ -# Valkyria Chronicles 1.0.0/1.0.1 -# BID: FE77FFB8CBFB3A5C -# 2D Animations speed is still tied to framerate -# Buffers info is passed to fixed size class, making triple buffer patch requires effort - -unsafeCheck: true - -ALL_FPS: - # 3D Game Speed - - - type: evaluate_write - address: [MAIN, 0x95CA9C] - value_type: float - value: "60 / FPS_TARGET" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CC00102B4000/8AFCBE6A930CD42E.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CC00102B4000/8AFCBE6A930CD42E.yaml deleted file mode 100644 index 9e100ef..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CC00102B4000/8AFCBE6A930CD42E.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Tony Hawk's Pro Skater 1 + 2 1.0.3 -# BID: 8AFCBE6A930CD42E - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 4 decimals - - - type: evaluate_write - address: [MAIN, 0x7DB2AB0, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 4)", "TruncDec(FRAMETIME_TARGET, 4)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7DDEF90, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CC3014886000/9265FE6C4DE9600E.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CC3014886000/9265FE6C4DE9600E.yaml deleted file mode 100644 index 2972d74..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CC3014886000/9265FE6C4DE9600E.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# The Caligula Effect 2 1.1.0 -# BID: 9265FE6C4DE9600E - -unsafeCheck: true - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x5F9DBA0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x5413CD8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CC401A16C000/ACF8E5931E38EAA0.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CC401A16C000/ACF8E5931E38EAA0.yaml deleted file mode 100644 index 92ed706..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CC401A16C000/ACF8E5931E38EAA0.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# イースX -NORDICS- 1.0.4 -# BID: ACF8E5931E38EAA0 -# Credits to StevensND for finding assembly instruction from which I have derived pointer address - -ALL_FPS: - # Used to set min delta timing for various parts of game + DR target - # REF: C9 03 80 52 C1 03 80 52 first ADRP above it - - - type: evaluate_write - address: [MAIN, 0xD87CB8, 0x34] - value_type: uint32 - value: FPS_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CC80140F8000/9CB4490E8A718BAE.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CC80140F8000/9CB4490E8A718BAE.yaml deleted file mode 100644 index 5ea29ba..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CC80140F8000/9CB4490E8A718BAE.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Triangle Strategy 1.1.0/1.1.1 -# BID: 9CB4490E8A718BAE - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget ((1000/FPS) * 0.945) - - - type: evaluate_write - address: [MAIN, 0x7473838, 0] - value_type: float - value: ["0.945 * FRAMETIME_TARGET", "0.945 * FRAMETIME_TARGET"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x74A1408, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6CA6928, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CD3000BDC000/5C598E5025BF97BC.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CD3000BDC000/5C598E5025BF97BC.yaml deleted file mode 100644 index 7e02a28..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CD3000BDC000/5C598E5025BF97BC.yaml +++ /dev/null @@ -1,52 +0,0 @@ -# ドラゴンクエストヒーローズI・II for Nintendo Switch 1.0.3 -# BID: 5C598E5025BF97BC - -DECLARATIONS: - - - type: code - name: tripleBuffer - instructions: [ - [mov, w8, 3], - [str, w8, [x20, 0x2AB8]], - [ret] - ] -MASTER_WRITE: - # REF: check first function that has nvnWindowBuilderSetTextures, it must read numBuffers from pointer with offset - - - type: asm_a64 - main_offset: 0xBA10A4 - instructions: [ - [bl, _tripleBuffer()] - ] -ALL_FPS: - # REF: 01 00 00 00 01 00 00 00 3C 00 00 00 - - - type: evaluate_write - address: [MAIN, 0x17A1C10] - value_type: uint32 - value: [VSYNC_TARGET, VSYNC_TARGET, FPS_TARGET, FPS_TARGET] - - - type: evaluate_write - address: [MAIN, 0x17A1C20] - value_type: float - value: [FPS_TARGET, FPS_TARGET] - - - type: evaluate_write - address: [MAIN, 0x17B23F0] - value_type: uint32 - value: [VSYNC_TARGET, VSYNC_TARGET, FPS_TARGET, FPS_TARGET] - - - type: evaluate_write - address: [MAIN, 0x17B2400] - value_type: float - value: [FPS_TARGET, FPS_TARGET] - - - type: evaluate_write - address: [MAIN, 0x1806BE0] - value_type: uint32 - value: [VSYNC_TARGET, VSYNC_TARGET, FPS_TARGET, FPS_TARGET] - - - type: evaluate_write - address: [MAIN, 0x1806BF0] - value_type: float - value: [FPS_TARGET, FPS_TARGET] diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CD3010AE2000/53EA0196A4AEB260.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CD3010AE2000/53EA0196A4AEB260.yaml deleted file mode 100644 index 63bb886..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CD3010AE2000/53EA0196A4AEB260.yaml +++ /dev/null @@ -1,92 +0,0 @@ -# Crysis 3 Remastered 1.3.0 -# BID: 53EA0196A4AEB260 - -DECLARATIONS: - - - type: variable - name: dr_target1 - value_type: float - default_value: 28.5 - evaluate: "0.855 * FRAMETIME_TARGET" - - - type: variable - name: dr_target2 - value_type: float - default_value: 33.5 - evaluate: "1.005 * FRAMETIME_TARGET" - - - type: variable - name: dr_target3 - value_type: float - default_value: 30.5 - evaluate: "0.915 * FRAMETIME_TARGET" - # DON'T PUT ANYTHING BETWEEN - START - - - type: variable - name: dr_target4 - value_type: float - default_value: 32.5 - evaluate: "0.975 * FRAMETIME_TARGET" - - - type: variable - name: dr_target5 - value_type: float - default_value: 31.5 - evaluate: "0.945 * FRAMETIME_TARGET" - - - type: variable - name: dr_target6 - value_type: float - default_value: 33.25 - evaluate: "0.945 * FRAMETIME_TARGET" - # DON'T PUT ANYTHING BETWEEN - END -MASTER_WRITE: - # Redirect Dynamic Resolution Timings to read always not from .text - - - type: asm_a64 - main_offset: 0x136A51C - instructions: [ - [nop] - ] - - - type: asm_a64 - main_offset: 0x136A548 - instructions: [ - [nop], - [nop] - ] -# Redirect Dynamic Resolution Timings readings to MAIN+0x3608E00 - - - type: asm_a64 - main_offset: 0x136A520 - instructions: [ - [adrp, x8, $dr_target1], - [ldr, s0, [x8, $dr_target1]], - [adrp, x8, $dr_target2], - [ldr, s1, [x8, $dr_target2]], - [adrp, x8, $dr_target3], - [ldr, s2, [x8, $dr_target3]] - ] - - - type: asm_a64 - main_offset: 0x136A554 - instructions: [ - [adrp, x9, $dr_target4], - [add, x9, x9, $dr_target4] - ] -ALL_FPS: - # sys_MaxFPS - - - type: evaluate_write - address: [MAIN, 0x34382D8] - value_type: int32 - value: FPS_LOCK_TARGET - # Renderer thread delay - - - type: evaluate_write - address: [MAIN, 0x3466BB0] - value_type: float - value: "0.66 / FPS_TARGET" - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CD4012DCA000/B067B077906C6208.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CD4012DCA000/B067B077906C6208.yaml deleted file mode 100644 index d40dbd4..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CD4012DCA000/B067B077906C6208.yaml +++ /dev/null @@ -1,64 +0,0 @@ -# 三國志14 with 威力加強版 1.0.10 -# BID: B067B077906C6208 -# Cursor speed is tied to framerate, main menu animations speed is not adjusted properly in range from 35 to 55 FPS - -unsafeCheck: true - -DECLARATIONS: - # DON'T PUT ANYTHING BETWEEN - START - - - type: variable - name: fps_lock - value_type: uint32 - default_value: 30 - evaluate: FPS_LOCK_TARGET - - - type: variable - name: fps_lock2 - value_type: uint32 - default_value: 60 - evaluate: FPS_LOCK_TARGET - # DON'T PUT ANYTHING BETWEEN - END - - - type: variable - name: game_speed - value_type: float - default_value: 0.0333333333 - evaluate: "1/FPS_TARGET" -MASTER_WRITE: - # Redirect adjusting game speed to FPS Lock stored in MAIN + 0x2B92800, REF: 20 79 68 BC 01 10 2E 1E 00 D8 21 7E - - - type: asm_a64 - main_offset: 0xB8ED98 - instructions: [ - [adrp, x9, $fps_lock], - [add, x9, x9, $fps_lock] - ] - # Redirect FPS Lock to MAIN + 0x2B92800, REF: C8 32 40 B9 E8 C2 00 B9 - - - type: asm_a64 - main_offset: 0x89668C - instructions: [ - [adrp, x8, $fps_lock], - [ldr, w8, [x8, $fps_lock]] - ] - # Redirect game speed to MAIN + 0x2B92808, REF: 00 28 21 1E 00 A0 00 BD C0 03 5F D6 - - - type: asm_a64 - main_offset: 0x11139A0 - instructions: [ - [adrp, x8, $game_speed], - [ldr, s0, [x0, 0xa0]], - [ldr, s1, [x8, $game_speed]] - ] -ALL_FPS: - - # Adjust max delta for menus, 0 - 30 FPS, 1 - 60 FPS, REF: 20 79 68 BC 01 10 2E 1E 00 D8 21 7E - type: evaluate_write - address: [MAIN, 0x254EA80] - value_type: uint32 - value: "FPS_TARGET / 60" - - - type: block - what: timing - - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CD6023C84000/163585C5E3885A04.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CD6023C84000/163585C5E3885A04.yaml deleted file mode 100644 index dfeccb9..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CD6023C84000/163585C5E3885A04.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Achilles: Survivor 1.0 -# BID: 163585C5E3885A04 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x97F2210, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x9835170, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x88192B8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CDC013238000/D626F7A72AF54744.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CDC013238000/D626F7A72AF54744.yaml deleted file mode 100644 index 9db632d..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CDC013238000/D626F7A72AF54744.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# Rune Factory 5 1.0.2 -# BID: D626F7A72AF54744 -# Cutscenes don't use Dynamic Resolution - -unsafeCheck: true - -ALL_FPS: - # Dynamic Resolution Frame Target Max in ms (default is 38, so resolution is a priority over framerate) - - - type: evaluate_write - address: [MAIN, 0x5F5B610, 0x738, 0x70, 0x38] - value_type: float - value: "TruncDec(FRAMETIME_TARGET, 1)" - # Dynamic Resolution Frame Target Min in ms (default is 33) - - - type: evaluate_write - address: [MAIN, 0x5F5B610, 0x738, 0x70, 0x3C] - value_type: float - value: "0.96 * FRAMETIME_TARGET" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CE101B698000/0CE2AE41BCCADC72.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CE101B698000/0CE2AE41BCCADC72.yaml deleted file mode 100644 index 985ca29..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CE101B698000/0CE2AE41BCCADC72.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Monster Jam Showdown 1.0.7 -# BID: 0CE2AE41BCCADC72 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0xAC39688, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xAC74030, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x9C78970, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CE101B698000/1CE1386EAF0C5EF5.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CE101B698000/1CE1386EAF0C5EF5.yaml deleted file mode 100644 index 249c90e..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CE101B698000/1CE1386EAF0C5EF5.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Monster Jam Showdown 1.0.8 -# BID: 1CE1386EAF0C5EF5 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0xAC3B688, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xAC76030, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x9C7A970, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CE101B698000/35FC3A7D13060376.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CE101B698000/35FC3A7D13060376.yaml deleted file mode 100644 index ff62d75..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CE101B698000/35FC3A7D13060376.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Monster Jam Showdown 1.0.6 -# BID: 35FC3A7D13060376 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0xAC39688, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xAC74030, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x9C78970, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CE101B698000/820B3E993D6FE8E1.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CE101B698000/820B3E993D6FE8E1.yaml deleted file mode 100644 index 07e5cb3..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CE101B698000/820B3E993D6FE8E1.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Monster Jam Showdown 1.0.2 -# BID: 820B3E993D6FE8E1 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0xABE7688, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xAC22030, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x9C26970, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CE101B698000/9035B7A14BADF977.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CE101B698000/9035B7A14BADF977.yaml deleted file mode 100644 index 5914723..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CE101B698000/9035B7A14BADF977.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Monster Jam Showdown 1.0.3 -# BID: 9035B7A14BADF977 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0xABE7688, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xAC22030, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x9C26970, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CE101B698000/AFE59FDFAC191EBD.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CE101B698000/AFE59FDFAC191EBD.yaml deleted file mode 100644 index 5ec9b25..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CE101B698000/AFE59FDFAC191EBD.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Monster Jam Showdown 1.0.1 -# BID: AFE59FDFAC191EBD - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0xAB77688, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xABB2030, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x9BB6970, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CE101B698000/C4950585861A47EE.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CE101B698000/C4950585861A47EE.yaml deleted file mode 100644 index fb1808b..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CE101B698000/C4950585861A47EE.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Monster Jam Showdown 1.0.4 -# BID: C4950585861A47EE - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0xAC1C688, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xAC57030, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x9C5B970, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CE101B698000/D07D96A610514C45.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CE101B698000/D07D96A610514C45.yaml deleted file mode 100644 index 4d47e22..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CE101B698000/D07D96A610514C45.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Monster Jam Showdown 1.0.5 -# BID: D07D96A610514C45 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0xAC34688, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xAC6F030, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x9C73970, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CEE01D23C000/76B6E5E830A43D97.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CEE01D23C000/76B6E5E830A43D97.yaml deleted file mode 100644 index d8ec8fc..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CEE01D23C000/76B6E5E830A43D97.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Tchia 1.1 -# BID: 76B6E5E830A43D97 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x7084348, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x70B16B8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x68EABE0, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CF3016BBE000/6A8373EFB7B2BD5D.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CF3016BBE000/6A8373EFB7B2BD5D.yaml deleted file mode 100644 index c95c92d..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CF3016BBE000/6A8373EFB7B2BD5D.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# MotoGP 22 1.0.6 -# BID: 6A8373EFB7B2BD5D - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0xA014D38, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xA0432E0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x9842408, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CF401A98E000/5ECFB8F85105FE3C.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CF401A98E000/5ECFB8F85105FE3C.yaml deleted file mode 100644 index a790434..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CF401A98E000/5ECFB8F85105FE3C.yaml +++ /dev/null @@ -1,28 +0,0 @@ -# Contra: Operation Galuga 1.0.882291 -# BID: 5ECFB8F85105FE3C - -DECLARATIONS: - - - type: variable - name: dr_target - value_type: float - default_value: 33.333333 - evaluate: FRAMETIME_TARGET - - - type: code - name: drAdjust - instructions: [ - [adrp, x8, $dr_target], - [ldr, s0, [x8, $dr_target]], - [str, s0, [x19, 0x3c]], - [ret] - ] - -MASTER_WRITE: - # Redirect DR Timing target to MAIN + 0x6D91A00, REF: 61 36 40 BD 60 3E 40 BD - - - type: asm_a64 - main_offset: 0x3534598 - instructions: [ - [bl, _drAdjust()] - ] diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CF5010FEC000/A1CE2940D813ACAB.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CF5010FEC000/A1CE2940D813ACAB.yaml deleted file mode 100644 index 28153cb..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CF5010FEC000/A1CE2940D813ACAB.yaml +++ /dev/null @@ -1,45 +0,0 @@ -# Bayonetta Origins: Cereza and the Lost Demon 1.0.0 -# BID: A1CE2940D813ACAB -# By blocking writing bit 0x17 and bits 0x1C (some single instructions have both 0x1B and 0x1C) we are forcing game to run at dynamic speed -# Some parts of game may use code I didn't find that write those bits, then I need to update this config -# Game has somewhere hardcoded min delta to be 60 FPS, so settings FPS Target above 60 speeds up the game - -MASTER_WRITE: - ## REF: 08 00 AA 52 1F 01 34 6A - MOV & BICS - - - type: asm_a64 - main_offset: 0xFF9EBC - instructions: [ - [nop], - [nop] - ] - ## REF: 08 00 AA 52 1F 01 34 6A - ORR & STR - - - type: asm_a64 - main_offset: 0xFF9EC8 - instructions: [ - [nop], - [nop] - ] - ## REF: You need to find address that STR above writes to, look at its XREFS for write, find references to nnMain and search for "ORR W8, W8, #0x800000", nop ORR and STR - - - type: asm_a64 - main_offset: 0xFF87F4 - instructions: [ - [nop], - [nop] - ] - ## REF: 2A 01 04 32 29 79 03 12 - - - type: asm_a64 - main_offset: 0x141017C - instructions: [ - [mov, w10, w9] - ] - # Force default interval to 2 - - - type: asm_a64 - main_offset: 0xFFB01C - instructions: [ - [mov, w1, 2] - ] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CFB01CDCE000/F678FD2BB197125B.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CFB01CDCE000/F678FD2BB197125B.yaml deleted file mode 100644 index 2848566..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CFB01CDCE000/F678FD2BB197125B.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Rune Factory: Guardians of Azuma `Cartridge only` 1.1.1 -# BID: F678FD2BB197125B - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x8F68D40, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8FA2470, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x7F816E8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CFD01517A000/2438B00670539268.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CFD01517A000/2438B00670539268.yaml deleted file mode 100644 index f21e87c..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100CFD01517A000/2438B00670539268.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# A Juggler's Tale 1.17 -# BID: 2438B00670539268 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x65F9970, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # r.VSync - - - type: write - address: [MAIN, 0x5E59728, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6624488, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D09016C6A000/4710B51EB3A3C05C.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D09016C6A000/4710B51EB3A3C05C.yaml deleted file mode 100644 index 6a2faf5..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D09016C6A000/4710B51EB3A3C05C.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# CRISIS CORE -FINAL FANTASY VII- REUNION Asia 1.0.4 -# BID: 4710B51EB3A3C05C - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) rounded to 1 decimal - - - type: evaluate_write - address: [MAIN, 0x96CFDA8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x96FDCD0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x8EFC0E8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D1202322A000/89E4C9599C96D7DE.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D1202322A000/89E4C9599C96D7DE.yaml deleted file mode 100644 index 7fc7e7e..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D1202322A000/89E4C9599C96D7DE.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Mandragora: Whispers of the Witch Tree EUR 1.5.3.135819 -# BID: 89E4C9599C96D7DE - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x7CA62C8, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x84723A8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8497A90, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D1202322A000/E04F5D58727DDE13.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D1202322A000/E04F5D58727DDE13.yaml deleted file mode 100644 index 0c5526d..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D1202322A000/E04F5D58727DDE13.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Mandragora: Whispers of the Witch Tree EUR 1.5.4.135908 -# BID: E04F5D58727DDE13 - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x5D56250, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x6522698, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6547F28, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D1501ABAE000/086789EC0FDA4BF1.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D1501ABAE000/086789EC0FDA4BF1.yaml deleted file mode 100644 index 9123968..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D1501ABAE000/086789EC0FDA4BF1.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# SOUTH PARK: SNOW DAY! 1.0.5 -# BID: 086789EC0FDA4BF1 - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x7E3D398, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 1 decimal - - - type: evaluate_write - address: [MAIN, 0x8609488, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x862EEE8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D1501ABAE000/2B7E5D5B9A730F77.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D1501ABAE000/2B7E5D5B9A730F77.yaml deleted file mode 100644 index a459856..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D1501ABAE000/2B7E5D5B9A730F77.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# SOUTH PARK: SNOW DAY! 1.0.6 -# BID: 2B7E5D5B9A730F77 - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x7E44058, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 1 decimal - - - type: evaluate_write - address: [MAIN, 0x8610488, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8635EE8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D1501ABAE000/4B7F793B8355C016.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D1501ABAE000/4B7F793B8355C016.yaml deleted file mode 100644 index cb35b58..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D1501ABAE000/4B7F793B8355C016.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# SOUTH PARK: SNOW DAY! 1.0.11 -# BID: 4B7F793B8355C016 - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x7E97DC8, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 1 decimal - - - type: evaluate_write - address: [MAIN, 0x8663488, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8688EF8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D1501ABAE000/9A2DB2F402A31811.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D1501ABAE000/9A2DB2F402A31811.yaml deleted file mode 100644 index 08b2026..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D1501ABAE000/9A2DB2F402A31811.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# SOUTH PARK: SNOW DAY! 1.0.10 -# BID: 9A2DB2F402A31811 - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x7E96DB8, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 1 decimal - - - type: evaluate_write - address: [MAIN, 0x8662488, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8687EF8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D1501ABAE000/C58AA3A366F82F70.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D1501ABAE000/C58AA3A366F82F70.yaml deleted file mode 100644 index ee13564..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D1501ABAE000/C58AA3A366F82F70.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# SOUTH PARK: SNOW DAY! 1.0.8 -# BID: C58AA3A366F82F70 - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x7E77B58, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 1 decimal - - - type: evaluate_write - address: [MAIN, 0x8643488, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8668EE8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D1501ABAE000/DCBE53FDF98752AF.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D1501ABAE000/DCBE53FDF98752AF.yaml deleted file mode 100644 index b18dbd7..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D1501ABAE000/DCBE53FDF98752AF.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# SOUTH PARK: SNOW DAY! 1.0.7 -# BID: DCBE53FDF98752AF - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x7E6D978, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 1 decimal - - - type: evaluate_write - address: [MAIN, 0x8639488, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x865EEE8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D1F00EB72000/8B40EBBA7244C94A.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D1F00EB72000/8B40EBBA7244C94A.yaml deleted file mode 100644 index cf1dfb7..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D1F00EB72000/8B40EBBA7244C94A.yaml +++ /dev/null @@ -1,28 +0,0 @@ -# Wolfenstein®: Youngblood™ JPN 1.5 -# BID: 8B40EBBA7244C94A - -ALL_FPS: - # rs_force460 - - - type: write - address: [MAIN, 0x7994DF0] - value_type: int32 - value: 1 - # rs_raiseThreshold = 0.96 * (30/FPS) - - - type: evaluate_write - address: [MAIN, 0x7994F14] - value_type: float - value: "(30 / FPS_TARGET) * 0.96" - # rs_dropThreshold = 0.984 * (30/FPS) - - - type: evaluate_write - address: [MAIN, 0x7994E84] - value_type: float - value: "(30 / FPS_TARGET) * 0.984" - # com_adaptiveTickMaxHz - - - type: evaluate_write - address: [MAIN, 0x85F74E0] - value_type: int32 - value: FPS_LOCK_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D210177C6000/9510D677DCCE4447.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D210177C6000/9510D677DCCE4447.yaml deleted file mode 100644 index 4207367..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D210177C6000/9510D677DCCE4447.yaml +++ /dev/null @@ -1,11 +0,0 @@ -# Oddworld Soulstorm 1.1.3 -# BID: 9510D677DCCE4447 - -ALL_FPS: - # Dynamic Resolution frame time target in ms cutted to 1 decimal - - - type: evaluate_write - address: [MAIN, 0x75DA2D0, 0, 0x10, 0x90, 0x28, 0x1C] - address_unsafe: true - value_type: float - value: "TruncDec(FRAMETIME_TARGET, 1)" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D30010C42000/682F4A502035678D.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D30010C42000/682F4A502035678D.yaml deleted file mode 100644 index 02934a1..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D30010C42000/682F4A502035678D.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Monster Truck Championship 1.2.0 -# BID: 682F4A502035678D - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget = 0.97 * (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x6F8C6B0, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET * 0.97, 2)", "TruncDec(FRAMETIME_TARGET * 0.97, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6FB45D8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D3201B808000/BCC955FF933FEF2E.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D3201B808000/BCC955FF933FEF2E.yaml deleted file mode 100644 index e1c2947..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D3201B808000/BCC955FF933FEF2E.yaml +++ /dev/null @@ -1,26 +0,0 @@ -# 귀멸의 칼날: 도전, 최강의 대원! 1.20 -# BID: BCC955FF933FEF2E - -ALL_FPS: - # Disable FixedFrameRate - - - type: write - address: [MAIN, 0x95CD058, 0x804] - address_unsafe: true - value_type: uint32 - value: 7 - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x95CD978, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x8DC3D48, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D3801E6CE000/ACCFF102CED838CE.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D3801E6CE000/ACCFF102CED838CE.yaml deleted file mode 100644 index f3ce7af..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D3801E6CE000/ACCFF102CED838CE.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Poppy Playtime: Chapter 2 1.4 -# BID: ACCFF102CED838CE - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x640D6A8, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x73F3290, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x742D7F0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D3801E6CE000/E3A3FC8EEC76A4FB.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D3801E6CE000/E3A3FC8EEC76A4FB.yaml deleted file mode 100644 index fad35bd..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D3801E6CE000/E3A3FC8EEC76A4FB.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Poppy Playtime: Chapter 2 1.1 -# BID: E3A3FC8EEC76A4FB - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x640E6A8, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x73F4290, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x742E790, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D3C010DE8000/59159483CF88330F.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D3C010DE8000/59159483CF88330F.yaml deleted file mode 100644 index 01a3200..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D3C010DE8000/59159483CF88330F.yaml +++ /dev/null @@ -1,52 +0,0 @@ -# The Legend of Heroes: Trails of Cold Steel IV 1.0.3 -# BID: 59159483CF88330F -# Button polling is 2x more sensitive to holding any button - -DECLARATIONS: - - - type: variable - name: fps_lock - value_type: uint32 - default_value: 33333333 - evaluate: "FRAMETIME_TARGET * 930000" - - - type: variable - name: frame_time - value_type: float - default_value: 0.0333333333 - - - type: code - name: dynamicSpeed - instructions: [ - [str, x0, [x19, 8]], - [fcvt, s4, d0], - [adrp, x8, $frame_time], - [str, s4, [x8, $frame_time]], - [ret] - ] -MASTER_WRITE: - # Move loading FPS lock time - - - type: asm_a64 - main_offset: 0x5F02F8 - instructions: [ - [adrp, x9, $fps_lock], - [ldr, w9, [x9, $fps_lock]] - ] - # Write game's loop time as float - - - type: asm_a64 - main_offset: 0x5F0348 - instructions: [ - [bl, _dynamicSpeed()] - ] - - # Read lowest timing float factor - type: asm_a64 - main_offset: 0x65548 - instructions: [ - [adrp, x8, $frame_time], - [fminnm, s0, s0, s2], - [ldr, s2, [x8, $frame_time]] - ] - - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D4600D0E4000/899B8B12DCD0864F.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D4600D0E4000/899B8B12DCD0864F.yaml deleted file mode 100644 index 5cbff21..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D4600D0E4000/899B8B12DCD0864F.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# Descenders 1.0.7 -# BID: 899B8B12DCD0864F - -DECLARATIONS: - - - type: variable - name: fps_target - value_type: float - default_value: 30 - evaluate: FPS_TARGET -MASTER_WRITE: - # DynamicResolutionCamera::Update - - - type: asm_a64 - main_offset: 0x20420C - instructions: [ - [adrp, x0, $fps_target], - [ldr, s0, [x0, $fps_target]] - ] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D4900E82C000/85C362CC9790F0ED.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D4900E82C000/85C362CC9790F0ED.yaml deleted file mode 100644 index bfd6ca6..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D4900E82C000/85C362CC9790F0ED.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# Metro 2033 Redux -# BID: 85C362CC9790F0ED - -unsafeCheck: true - -ALL_FPS: - # Dynamic resolution FPS factor (0.989 * FPS) - - - type: evaluate_write - address: [MAIN, 0x17321D8] - value_type: float - value: "0.989 * FPS_TARGET" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D4A00B284000/2B70B1A7B478FCA3.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D4A00B284000/2B70B1A7B478FCA3.yaml deleted file mode 100644 index 384bfbc..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D4A00B284000/2B70B1A7B478FCA3.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# ARK: Survival Evolved 2.0.15 -# BID: 2B70B1A7B478FCA3 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) rounded to one decimal - - - type: evaluate_write - address: [MAIN, 0x7ACB1B8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7AF93E8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D4A00B284000/44E0F3E8F4996F55.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D4A00B284000/44E0F3E8F4996F55.yaml deleted file mode 100644 index ab237f7..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D4A00B284000/44E0F3E8F4996F55.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# ARK: Survival Evolved 2.0.14 -# BID: 44E0F3E8F4996F55 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) rounded to one decimal - - - type: evaluate_write - address: [MAIN, 0x7ABB198, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7AE93C8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D4A00B284000/D1E3FFBA414F4929.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D4A00B284000/D1E3FFBA414F4929.yaml deleted file mode 100644 index 97a8138..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D4A00B284000/D1E3FFBA414F4929.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# ARK: Survival Evolved 2.0.11 -# BID: D1E3FFBA414F4929 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) rounded to one decimal - - - type: evaluate_write - address: [MAIN, 0x7947C38, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7975D48, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D4A00B284000/DE62C644228E63CC.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D4A00B284000/DE62C644228E63CC.yaml deleted file mode 100644 index bbeb322..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D4A00B284000/DE62C644228E63CC.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# ARK: Survival Evolved 2.0.12 -# BID: DE62C644228E63CC - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) rounded to one decimal - - - type: evaluate_write - address: [MAIN, 0x7ABA198, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7AE83C8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D5501522C000/54E89AF3414E549A.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D5501522C000/54E89AF3414E549A.yaml deleted file mode 100644 index 1a99590..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D5501522C000/54E89AF3414E549A.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# The Pathless 1.0 -# BID: 54E89AF3414E549A - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x74CC188, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x74FADF8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D560102C8000/48681F1D90704F6C.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D560102C8000/48681F1D90704F6C.yaml deleted file mode 100644 index 8df8b48..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D560102C8000/48681F1D90704F6C.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# BioShock Infinite 1.0.2 -# BID: 48681F1D90704F6C - -unsafeCheck: true - -ALL_FPS: - # Dynamic resolution FPS factor (FPS_Target * 1.05) - - - type: evaluate_write - address: [MAIN, 0x28A8450, 0] - value_type: float - value: "FPS_TARGET * 1.05" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D5801E904000/2079893CE8402E04.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D5801E904000/2079893CE8402E04.yaml deleted file mode 100644 index e8a22be..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D5801E904000/2079893CE8402E04.yaml +++ /dev/null @@ -1,16 +0,0 @@ -# Caravan SandWitch 1.0.8 -# BID: 2079893CE8402E04 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x7A50210, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7A89920, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D5801E904000/89349071D2B0BFF7.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D5801E904000/89349071D2B0BFF7.yaml deleted file mode 100644 index 191cb10..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D5801E904000/89349071D2B0BFF7.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# Caravan SandWitch 1.0.7 -# BID: 89349071D2B0BFF7 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x7A4B210, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7A84920, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D5801E904000/CE493FC8CDD3D7B2.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D5801E904000/CE493FC8CDD3D7B2.yaml deleted file mode 100644 index 0983208..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D5801E904000/CE493FC8CDD3D7B2.yaml +++ /dev/null @@ -1,18 +0,0 @@ -# Caravan SandWitch 1.0.5 -# BID: CE493FC8CDD3D7B2 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x7A4A190, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7A838A0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D680194B2000/9A257FAB83444214.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D680194B2000/9A257FAB83444214.yaml deleted file mode 100644 index 6d3d8f6..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D680194B2000/9A257FAB83444214.yaml +++ /dev/null @@ -1,67 +0,0 @@ -# Pikmin 2 1.1.0 -# BID: 9A257FAB83444214 -# Credits to Hazerou for finding offsets - -unsafeCheck: true - -ALL_FPS: - - - type: write - address: [MAIN, 0xC104B0, 0x28] - value_type: uint32 - value: 1 - # Block cutscenes to 30 FPS - - - type: evaluate_compare - compare_address: [MAIN, 0xC18080] - compare_type: "<=" - compare_value_type: uint32 - compare_value: 0x4B - address: [MAIN, 0xC0C040, 0xE0] - value_type: float - value: "1 / 30" - - - type: compare - compare_address: [MAIN, 0xC18080] - compare_type: "<=" - compare_value_type: uint32 - compare_value: 0x4B - address: [MAIN, 0xC0C040, 0x100] - value_type: float - value: 2 - - - type: compare - compare_address: [MAIN, 0xC18080] - compare_type: "<=" - compare_value_type: uint32 - compare_value: 0x4B - address: [MAIN] - value_type: refresh_rate - value: 30 - - - type: evaluate_compare - compare_address: [MAIN, 0xC18080] - compare_type: "<" - compare_value_type: uint32 - compare_value: 0x49 - address: [MAIN, 0xC0C040, 0xE0] - value_type: float - value: "1 / FPS_TARGET" - - - type: evaluate_compare - compare_address: [MAIN, 0xC18080] - compare_type: "<" - compare_value_type: uint32 - compare_value: 0x49 - address: [MAIN, 0xC0C040, 0x100] - value_type: float - value: "60 / FPS_TARGET" - - - type: compare - compare_address: [MAIN, 0xC18080] - compare_type: "<" - compare_value_type: uint32 - compare_value: 0x49 - address: [MAIN] - value_type: refresh_rate - value: 0 \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D76006EF8000/2847991952B3D7AB.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D76006EF8000/2847991952B3D7AB.yaml deleted file mode 100644 index 5d9537d..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D76006EF8000/2847991952B3D7AB.yaml +++ /dev/null @@ -1,34 +0,0 @@ -# DOOM `JPN` 1.4 -# BID: 2847991952B3D7AB - -ALL_FPS: - # rs_460Threshold (default is 0.285) - - - type: write - address: [MAIN, 0x594152C] - value_type: float - value: 1 - # rs_raiseMilliseconds - - - type: evaluate_write - address: [MAIN, 0x59419EC] - value_type: float - value: "0.966 * FRAMETIME_TARGET" - # rs_dropMilliseconds - - - type: evaluate_write - address: [MAIN, 0x5941954] - value_type: float - value: "0.99 * FRAMETIME_TARGET" - # com_adaptiveTickMaxHz (default is 30) - - - type: evaluate_write - address: [MAIN, 0x66BAF50] - value_type: int32 - value: FPS_TARGET - # com_adaptiveTickMinHz (default is 30) - - - type: write - address: [MAIN, 0x66BAEB8] - value_type: int32 - value: 15 \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D7700AF88000/F5AC009011277359.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D7700AF88000/F5AC009011277359.yaml deleted file mode 100644 index d8e8d70..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D7700AF88000/F5AC009011277359.yaml +++ /dev/null @@ -1,26 +0,0 @@ -# 光明之響 龍奏回音 1.0.0 -# BID: F5AC009011277359 - -MASTER_WRITE: - # Triple buffer - # REF: 28 60 81 52 E8 37 00 B9 E8 03 1F 32 - - - type: asm_a64 - main_offset: 0x3AD308 - instructions: [ - [mov, w8, 3] - ] -ALL_FPS: - # Disable FPS Lock - # REF: C8 46 90 52 first ADRP + LDR + LDR above it - - - type: write - address: [MAIN, 0xFBEDA8] - value_type: uint32 - value: 0 - # Lipsync fix - - - type: evaluate_write - address: [MAIN, 0xFBEDBC] - value_type: float - value: "30.0 / FPS_TARGET" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D77019324000/A52C9938956331C9.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D77019324000/A52C9938956331C9.yaml deleted file mode 100644 index 49531a5..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D77019324000/A52C9938956331C9.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Trek to Yomi 0.4 -# BID: A52C9938956331C9 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x73F93F8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7426A18, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D7800E9E0000/92C25172D38DFEDB.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D7800E9E0000/92C25172D38DFEDB.yaml deleted file mode 100644 index 1c4e579..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D7800E9E0000/92C25172D38DFEDB.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Trials of Mana 1.1.1 -# BID: 92C25172D38DFEDB - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x5708B68, 0] - value_type: int32 - value: [0, 0] - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x5F39E40, 0] - value_type: float - value: [FRAMETIME_TARGET, FRAMETIME_TARGET] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x5F5F8B8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D7C01F254000/94B4FA4F36E01BE3.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D7C01F254000/94B4FA4F36E01BE3.yaml deleted file mode 100644 index 2e9bddf..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D7C01F254000/94B4FA4F36E01BE3.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# DRAGON QUEST I & II HD-2D Remake 1.0.1 -# BID: 94B4FA4F36E01BE3 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x647E5F8, 0] - value_type: float - value: [FRAMETIME_TARGET, FRAMETIME_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x5C913E8, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x64AC358, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D7C021496000/23E85FEDEC96439C.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D7C021496000/23E85FEDEC96439C.yaml deleted file mode 100644 index e1d7f66..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D7C021496000/23E85FEDEC96439C.yaml +++ /dev/null @@ -1,36 +0,0 @@ -# Twilight Monk 1.4.1 -# BID: 23E85FEDEC96439C - -ALL_FPS: - # Disable bUseFixedFrameRate to untie game speed from framerate and unlock FPS - - - type: write - address: [MAIN, 0x5E0A268, 0x7A4] - address_unsafe: true - value_type: uint32 - # Default is 0x46, bUseFixedFrameRate |= 0x40 - # By writing 6 we are making sure that other flags are maintained: - # bAllowMultiThreadedAnimationUpdate |= 4 - # bOptimizeAnimBlueprintMemberVariableAccess |= 2 - value: 6 - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x5DDCEC8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x5E0AB88, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: evaluate_write - address: [MAIN, 0x560EA78, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D7C021496000/5D63D46226DB106F.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D7C021496000/5D63D46226DB106F.yaml deleted file mode 100644 index 97a8ca1..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D7C021496000/5D63D46226DB106F.yaml +++ /dev/null @@ -1,36 +0,0 @@ -# Twilight Monk 1.0.0 -# BID: 5D63D46226DB106F - -ALL_FPS: - # Disable bUseFixedFrameRate to untie game speed from framerate and unlock FPS - - - type: write - address: [MAIN, 0x5DBD688, 0x7A4] - address_unsafe: true - value_type: uint32 - # Default is 0x46, bUseFixedFrameRate |= 0x40 - # By writing 7 we are making sure that other flags are maintained: - # bAllowMultiThreadedAnimationUpdate |= 4 - # bOptimizeAnimBlueprintMemberVariableAccess |= 2 - value: 6 - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x5D902E8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x5DBDFA8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: evaluate_write - address: [MAIN, 0x55C1348, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D7C021496000/6D560144F6B09A98.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D7C021496000/6D560144F6B09A98.yaml deleted file mode 100644 index 41508bb..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D7C021496000/6D560144F6B09A98.yaml +++ /dev/null @@ -1,36 +0,0 @@ -# Twilight Monk 1.4.0 -# BID: 6D560144F6B09A98 - -ALL_FPS: - # Disable bUseFixedFrameRate to untie game speed from framerate and unlock FPS - - - type: write - address: [MAIN, 0x5E09268, 0x7A4] - address_unsafe: true - value_type: uint32 - # Default is 0x46, bUseFixedFrameRate |= 0x40 - # By writing 6 we are making sure that other flags are maintained: - # bAllowMultiThreadedAnimationUpdate |= 4 - # bOptimizeAnimBlueprintMemberVariableAccess |= 2 - value: 6 - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x5DDBEC8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x5E09B88, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: evaluate_write - address: [MAIN, 0x560DA68, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D7C021496000/7926A67119144CFD.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D7C021496000/7926A67119144CFD.yaml deleted file mode 100644 index 42c9284..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D7C021496000/7926A67119144CFD.yaml +++ /dev/null @@ -1,37 +0,0 @@ -# Twilight Monk 1.2.0 -# BID: 7926A67119144CFD - -unsafeCheck: true - -ALL_FPS: - # Disable bUseFixedFrameRate to untie game speed from framerate and unlock FPS - - - type: write - address: [MAIN, 0x5DC2688, 0x7A4] - value_type: uint32 - # Default is 0x46, bUseFixedFrameRate |= 0x40 - # By writing 7 we are making sure that other flags are maintained: - # bAllowMultiThreadedAnimationUpdate |= 4 - # bOptimizeAnimBlueprintMemberVariableAccess |= 2 - value: 6 - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x5D952E8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x5DC2FA8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: evaluate_write - address: [MAIN, 0x55C62F8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D7C021496000/E9A189C0CA87A30C.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D7C021496000/E9A189C0CA87A30C.yaml deleted file mode 100644 index e8e49a2..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D7C021496000/E9A189C0CA87A30C.yaml +++ /dev/null @@ -1,36 +0,0 @@ -# Twilight Monk 1.3.0 -# BID: E9A189C0CA87A30C - -ALL_FPS: - # Disable bUseFixedFrameRate to untie game speed from framerate and unlock FPS - - - type: write - address: [MAIN, 0x5E04268, 0x7A4] - address_unsafe: true - value_type: uint32 - # Default is 0x46, bUseFixedFrameRate |= 0x40 - # By writing 6 we are making sure that other flags are maintained: - # bAllowMultiThreadedAnimationUpdate |= 4 - # bOptimizeAnimBlueprintMemberVariableAccess |= 2 - value: 6 - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x5DD6EC8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x5E04B88, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: evaluate_write - address: [MAIN, 0x5608AB8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D7F00FB1A000/D871B992E95B71C5.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D7F00FB1A000/D871B992E95B71C5.yaml deleted file mode 100644 index 0c5e18c..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D7F00FB1A000/D871B992E95B71C5.yaml +++ /dev/null @@ -1,15 +0,0 @@ -# The Great Ace Attorney Chronicles JP 1.0.0 -# BID: D871B992E95B71C5 - -unsafeCheck: true - -ALL_FPS: - # FPS lock - - - type: evaluate_write - address: [MAIN, 0xCFA0F8, 0x4C] - value_type: float - value: FPS_LOCK_TARGET - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D8700B712000/C56E6F514FADC5C5.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D8700B712000/C56E6F514FADC5C5.yaml deleted file mode 100644 index a0d8c31..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D8700B712000/C56E6F514FADC5C5.yaml +++ /dev/null @@ -1,24 +0,0 @@ -# Modern Combat Blackout 1.1.9 -# BID: C56E6F514FADC5C5 - -unsafeCheck: true - -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x14284E0] - value_type: int32 - value: FPS_LOCK_TARGET - - - type: evaluate_write - address: [MAIN, 0x155C640, 0x7E8, 0x49C] - value_type: int32 - value: [FPS_LOCK_TARGET, FRAMETIME_TARGET] - - - type: evaluate_write - address: [MAIN, 0x14E2320, 0x944] - value_type: float - value: "(5/6) * FPS_TARGET" - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D9601A994000/28ED06F94D767478.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D9601A994000/28ED06F94D767478.yaml deleted file mode 100644 index 9ddde48..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D9601A994000/28ED06F94D767478.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# ONE PIECE ODYSSEY Deluxe Edition US/EU/JP 1.0.0 -# BID: 28ED06F94D767478 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x7F82CC0, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7728420, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x7FA6300, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D9D021782000/D1D3FFB94AB458B4.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D9D021782000/D1D3FFB94AB458B4.yaml deleted file mode 100644 index 35300ce..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100D9D021782000/D1D3FFB94AB458B4.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# 百日戰記 -最終防衛學園- 1.1.2 -# BID: D1D3FFB94AB458B4 -# Last found function with REF: FD 7B BE A9 F3 0B 00 F9 FD 03 00 91 E0 03 01 2A stores some code related to playing above 60 FPS. Look at it if someone will have an issue playing above 60 FPS. - -unsafeCheck: true - -ALL_FPS: - # FPS Lock - # REF: 1B 41 00 00 - - - type: evaluate_write - address: [MAIN, 0xC95D10] - value_type: uint32 - value: FRAMETIME_TARGET * 1000 - # Unknown value, but set in the same function as FPS lock, so it may be important - # REF: 3C 00 00 00 01 00 00 00 00 00 00 00 - - - type: evaluate_write - address: [MAIN, 0xC95CDC] - value_type: uint32 - value: FPS_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DA201EBF8000/10844A7A20C5597E.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DA201EBF8000/10844A7A20C5597E.yaml deleted file mode 100644 index 00c8dd0..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DA201EBF8000/10844A7A20C5597E.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# ディズニー エピックミッキー:Rebrushed 1.0.4 -# BID: 10844A7A20C5597E - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x6E35A58, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6E636F8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6666668, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DA201EBF8000/21F90AA03BED43F0.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DA201EBF8000/21F90AA03BED43F0.yaml deleted file mode 100644 index 7671094..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DA201EBF8000/21F90AA03BED43F0.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# ディズニー エピックミッキー:Rebrushed 1.0.2 -# BID: 21F90AA03BED43F0 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x6E27A58, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6E556F8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x66584B8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DA201EBF8000/EE2CAB96FB6BEDA9.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DA201EBF8000/EE2CAB96FB6BEDA9.yaml deleted file mode 100644 index b186145..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DA201EBF8000/EE2CAB96FB6BEDA9.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# ディズニー エピックミッキー:Rebrushed 1.0.3 -# BID: EE2CAB96FB6BEDA9 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x6E34A58, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6E626F8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6665658, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DA801624E000/0909B4AC280D9D77.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DA801624E000/0909B4AC280D9D77.yaml deleted file mode 100644 index eff19fc..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DA801624E000/0909B4AC280D9D77.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# TUNIC 1.0.3 -# BID: 0909B4AC280D9D77 - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x3886480, 0x48] - value_type: float - value: "1 / FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DAE019110000/0248DC99035AD28A.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DAE019110000/0248DC99035AD28A.yaml deleted file mode 100644 index 0de1a8f..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DAE019110000/0248DC99035AD28A.yaml +++ /dev/null @@ -1,41 +0,0 @@ -# PROJECT ZERO: Mask of the Lunar Eclipse West 1.0.3 -# BID: 0248DC99035AD28A - -DECLARATIONS: - - - type: variable - name: min_delta - value_type: float - default_value: 0.0333333333 - evaluate: "1 / FPS_TARGET" - - - type: variable - name: fps_lock - value_type: uint32 - default_value: 33333333 - evaluate: "1000000000 / FPS_TARGET" -MASTER_WRITE: - # Redirect min delta - # REF: 00 D9 21 7E 28 19 20 1E - - - type: asm_a64 - main_offset: 0x16D9B4 - instructions: [ - [adrp, x27, $min_delta], - [ldr, s8, [x27, $min_delta]] - ] - # Redirect FPS Lock - # REF: 69 B2 40 B9 0A 40 99 52 - - - type: asm_a64 - main_offset: 0x16DDD0 - instructions: [ - [adrp, x9, $fps_lock], - [ldr, w9, [x9, $fps_lock]], - [nop], - [nop] - ] -ALL_FPS: - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DB1017CDC000/2C7A626BA5F25D5F.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DB1017CDC000/2C7A626BA5F25D5F.yaml deleted file mode 100644 index b5750a0..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DB1017CDC000/2C7A626BA5F25D5F.yaml +++ /dev/null @@ -1,13 +0,0 @@ -# THE DARK PICTURES: MAN OF MEDAN(マン・オブ・メダン) 1.0.1 -# BID: 2C7A626BA5F25D5F - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xB149FF8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DB6020CCE000/0A0630C01D7130B7.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DB6020CCE000/0A0630C01D7130B7.yaml deleted file mode 100644 index 63971a3..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DB6020CCE000/0A0630C01D7130B7.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# Little Droid 1.0.4 -# BID: 0A0630C01D7130B7 - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x52BA6B8, 0x50] - value_type: uint32 - value: "141120000 / FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DC2020C50000/4A64A3713EEA60CA.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DC2020C50000/4A64A3713EEA60CA.yaml deleted file mode 100644 index 1ef0bdb..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DC2020C50000/4A64A3713EEA60CA.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# Call of Sentinels 1.0.1.7 -# BID: 4A64A3713EEA60CA - -unsafeCheck: true - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x6CA3940, 0x48] - value_type: float - value: "1 / FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DC301186A000/EE295EAAEA7D31E4.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DC301186A000/EE295EAAEA7D31E4.yaml deleted file mode 100644 index 9e33be4..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DC301186A000/EE295EAAEA7D31E4.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Life is Strange 1.0.1 -# BID: EE295EAAEA7D31E4 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x674AF18, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x67758C0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DC9020B30000/3F6808C5518371F9.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DC9020B30000/3F6808C5518371F9.yaml deleted file mode 100644 index fc6c50e..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DC9020B30000/3F6808C5518371F9.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# Garfield Kart 2 - All You Can Drift 1.0.5 -# BID: 3F6808C5518371F9 - -ALL_FPS: - # Eden.Graphics.DynamicResolutionScaler_TypeInfo - - - type: evaluate_write - address: [MAIN, 0xF648538, 0xB8, 0x18, 0x20] - value_type: float - value: ["0.93 / FPS_TARGET", "(0.93 / FPS_TARGET) - 0.002", "(0.93 / FPS_TARGET) - 0.001"] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DCA0064A6000/79E5950FFA85ACF6.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DCA0064A6000/79E5950FFA85ACF6.yaml deleted file mode 100644 index 2f5ddf1..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DCA0064A6000/79E5950FFA85ACF6.yaml +++ /dev/null @@ -1,29 +0,0 @@ -# Luigi's Mansion 3 1.4.0 -# BID: 79E5950FFA85ACF6 -# Credits for finding FPS Lock goes to theboy181 - -DECLARATIONS: - - - type: variable - name: fps_target - value_type: float - default_value: 33.333333 - evaluate: "1000 / FPS_LOCK_TARGET" -MASTER_WRITE: - # Redirect reading FPS Lock to MAIN+0x1D164DC - - - type: asm_a64 - main_offset: 0x7A3E9C - instructions: [ - [adrp, x12, $fps_target] - ] - - - type: asm_a64 - main_offset: 0x7A3EA8 - instructions: [ - [ldr, s0, [x12, $fps_target]] - ] -ALL_FPS: - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DCF0093EC000/71873FEB4648FA39.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DCF0093EC000/71873FEB4648FA39.yaml deleted file mode 100644 index 5692de3..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DCF0093EC000/71873FEB4648FA39.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Everspace 1.0.5 -# BID: 71873FEB4648FA39 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x5FAB540, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x5FD00A8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DE302439E000/C4E2284BFB7D534C.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DE302439E000/C4E2284BFB7D534C.yaml deleted file mode 100644 index d58cfc0..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DE302439E000/C4E2284BFB7D534C.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# INDIKA 1.0 -# BID: C4E2284BFB7D534C - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x6F73238, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6FA13C8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x679D3D8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DE600BEEE000/A8631EDCC0013045.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DE600BEEE000/A8631EDCC0013045.yaml deleted file mode 100644 index 4cc67fb..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DE600BEEE000/A8631EDCC0013045.yaml +++ /dev/null @@ -1,26 +0,0 @@ -# Saints Row: The Third - The Full Package 1.6.1 -# BID: A8631EDCC0013045 - -DECLARATIONS: - - - type: variable - name: frametime_target - value_type: double - default_value: -30.0 - evaluate: "-0.9 * FRAMETIME_TARGET" - - - type: code - name: getFrametimeTarget - instructions: [ - [adrp, x23, $frametime_target], - [ldr, d9, [x23, $frametime_target]], - [ret] - ] -MASTER_WRITE: - # REF: 09 D0 77 1E - - - type: asm_a64 - main_offset: 0xE80348 - instructions: [ - [bl, _getFrametimeTarget()] - ] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DE70085E8000/F18ACDA7A11CB287.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DE70085E8000/F18ACDA7A11CB287.yaml deleted file mode 100644 index 187d8dd..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DE70085E8000/F18ACDA7A11CB287.yaml +++ /dev/null @@ -1,29 +0,0 @@ -# Outlast 2 1.0.0 -# BID: F18ACDA7A11CB287 - -MASTER_WRITE: - # Remove double buffer - - - type: asm_a64 - main_offset: 0xF45DFC - instructions: [ - [cmp, x26, 3] - ] - - - type: asm_a64 - main_offset: 0xF45E64 - instructions: [ - [mov, w1, 3] - ] - - - type: asm_a64 - main_offset: 0xF461D4 - instructions: [ - [cmp, x26, 3] - ] - - - type: asm_a64 - main_offset: 0xF4623C - instructions: [ - [mov, w1, 3] - ] diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DE90162A0000/0BBD86F62F380844.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DE90162A0000/0BBD86F62F380844.yaml deleted file mode 100644 index eaa71f0..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DE90162A0000/0BBD86F62F380844.yaml +++ /dev/null @@ -1,55 +0,0 @@ -# 영웅전설 섬의 궤적 IV -THE END OF SAGA- 1.0.0 -# BID: 0BBD86F62F380844 -# Button polling is 2x more sensitive to holding any button - -DECLARATIONS: - - - type: variable - name: fps_lock - value_type: uint32 - default_value: 33333333 - evaluate: "FRAMETIME_TARGET * 930000" - - - type: variable - name: frame_time - value_type: float - default_value: 0.0333333333 - - - type: code - name: dynamicSpeed - instructions: [ - [str, x0, [x19, 8]], - [fcvt, s4, d0], - [adrp, x8, $frame_time], - [str, s4, [x8, $frame_time]], - [ret] - ] -MASTER_WRITE: - # Move loading FPS lock time - ## REF: MOV with 0x1FC7945 - - - type: asm_a64 - main_offset: 0x5B22F8 - instructions: [ - [adrp, x20, $fps_lock], - [ldr, w20, [x20, $fps_lock]] - ] - # Write game's loop time as float - ## REF: 1F 01 09 EB 00 08 61 1E, replace STR X0, [X19,#8] below it - - - type: asm_a64 - main_offset: 0x5B2358 - instructions: [ - [bl, _dynamicSpeed()] - ] - # Read lowest timing float factor - ## REF: E8 03 1F 2A 00 20 22 1E 60 5E 1A BD, MOV with 0x3D088889 + FMINM + FMOV above it - - - type: asm_a64 - main_offset: 0x5F8E0 - instructions: [ - [adrp, x8, $frame_time], - [fminnm, s0, s0, s2], - [ldr, s2, [x8, $frame_time]], - [nop] - ] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DF301FA3C000/BBEA8745A7893750.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DF301FA3C000/BBEA8745A7893750.yaml deleted file mode 100644 index 73aa54e..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DF301FA3C000/BBEA8745A7893750.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# ライフ イズ ストレンジ ダブルエクスポージャー 1.0.3 -# BID: BBEA8745A7893750 - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x6948E90, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x79562D8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DFC00E472000/448C08A9533F3CAD.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DFC00E472000/448C08A9533F3CAD.yaml deleted file mode 100644 index 6634f00..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100DFC00E472000/448C08A9533F3CAD.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Earthfall: Alien Horde 1.0.1 -# BID: 448C08A9533F3CAD - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x71A9000, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x71CCE48, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E1C0148F8000/5EABF05A814EBB1B.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E1C0148F8000/5EABF05A814EBB1B.yaml deleted file mode 100644 index 8a04410..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E1C0148F8000/5EABF05A814EBB1B.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Severed Steel 1.0.3 -# BID: 5EABF05A814EBB1B - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget = 0.9 * (1000/FPS) - - - type: evaluate_write - address: [MAIN, 0x76998A8, 0] - value_type: float - value: ["0.9 * FRAMETIME_TARGET", "0.9 * FRAMETIME_TARGET"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x76C7478, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6ECC4E8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E1C0148F8000/77C053D779EE97F6.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E1C0148F8000/77C053D779EE97F6.yaml deleted file mode 100644 index afe3ff7..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E1C0148F8000/77C053D779EE97F6.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Severed Steel 1.0.2 -# BID: 77C053D779EE97F6 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget = 0.9 * (1000/FPS) - - - type: evaluate_write - address: [MAIN, 0x75EE8A8, 0] - value_type: float - value: ["0.9 * FRAMETIME_TARGET", "0.9 * FRAMETIME_TARGET"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x761C478, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E1F013674000/E9B47349177722BE.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E1F013674000/E9B47349177722BE.yaml deleted file mode 100644 index cf6ab96..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E1F013674000/E9B47349177722BE.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# FUSER 1.4.2 -# BID: E9B47349177722BE - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x70728F8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x709F810, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x650F2E8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E2701A888000/8322528255D2CC63.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E2701A888000/8322528255D2CC63.yaml deleted file mode 100644 index 3e80e68..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E2701A888000/8322528255D2CC63.yaml +++ /dev/null @@ -1,56 +0,0 @@ -# Trine 5: A Clockwork Conspiracy 1.0.5 -# BID: 8322528255D2CC63 -# To update dynamic resolution offsets look at fb::renderer::ResolutionScaler::update - -DECLARATIONS: - - - type: variable - name: dr_target_max - value_type: double - default_value: 34 - evaluate: "1.02 * FRAMETIME_TARGET" - - - type: variable - name: dr_target_min - value_type: double - default_value: 32 - evaluate: "0.96 * FRAMETIME_TARGET" -MASTER_WRITE: - # Change double buffer to triple buffer - - - type: asm_a64 - main_offset: 0x138A024 - instructions: [ - [mov, w8, 3] - ] - # Allow changing dynamic resolution timings - # Max - - - type: asm_a64 - main_offset: 0x25992CC - instructions: [ - [adrp, x8, $dr_target_max], - [adrp, x22, 0x5ddf000], - [ldr, d2, [x8, $dr_target_max]] - ] - # Min - changed address to MAIN + 0x7D05208 - - - type: asm_a64 - main_offset: 0x2599344 - instructions: [ - [adrp, x10, $dr_target_min], - [ldr, d5, [x10, $dr_target_min]] - ] - - - type: asm_a64 - main_offset: 0x2599380 - instructions: [ - [adrp, x10, $dr_target_min] - ] - - - type: asm_a64 - main_offset: 0x2599390 - instructions: [ - [ldr, d6, [x10, $dr_target_min]] - ] - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E2E0152E4000/13F322A6161F787C.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E2E0152E4000/13F322A6161F787C.yaml deleted file mode 100644 index 689da20..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E2E0152E4000/13F322A6161F787C.yaml +++ /dev/null @@ -1,28 +0,0 @@ -# ドラゴンクエストX 目覚めし五つの種族 オフライン 2.0.1 -# Dragon Quest X Offline 2.0.1 -# BID: 13F322A6161F787C - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x6E8C028, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6EB9418, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x66F5360, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E3401D660000/FDBEE885A65A2B92.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E3401D660000/FDBEE885A65A2B92.yaml deleted file mode 100644 index ffdf3d3..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E3401D660000/FDBEE885A65A2B92.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# ACE COMBAT™7 SKIES UNKNOWN DELUXE EDITION 1.0.0 US/EU -# BID: FDBEE885A65A2B92 - -unsafeCheck: true - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x70B99A0, 0] - value_type: uint32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7939A30, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E4900D266000/85BF83CDD25CC542.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E4900D266000/85BF83CDD25CC542.yaml deleted file mode 100644 index 74598dc..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E4900D266000/85BF83CDD25CC542.yaml +++ /dev/null @@ -1,30 +0,0 @@ -# Jet Kave Adventure 1.1.0 -# BID: 85BF83CDD25CC542 - -MASTER_WRITE: - # Remove custom FPS lock - # REF: FrameLimiter.d__3::MoveNext() - - - type: asm_a64 - main_offset: 0x16CDC8C - instructions: [ - [mov, w0, wzr] - ] - # Set nvn interval to 2 to lock game back to 30 FPS - - - type: bytes - main_offset: 0x3EEDEC8 - value_type: uint32 - value: 2 - - - type: asm_a64 - main_offset: 0x1A2334C - instructions: [ - [nop] - ] - - - type: asm_a64 - main_offset: 0x1A1554C - instructions: [ - [nop] - ] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E5600D446000/C32B29CB5FBA96D9.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E5600D446000/C32B29CB5FBA96D9.yaml deleted file mode 100644 index 590bb76..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E5600D446000/C32B29CB5FBA96D9.yaml +++ /dev/null @@ -1,26 +0,0 @@ -# Ni no Kuni: Wrath of the White Witch 1.0.2 -# BID: C32B29CB5FBA96D9 - -unsafeCheck: true - -ALL_FPS: - # Game speed value - - - type: evaluate_compare - compare_type: "==" - compare_value_type: uint32 - compare_value: 2 - compare_address: [MAIN, 0x2218B44, 0x10] - address: [MAIN, 0x2218B44, 0x20] - value_type: float - value: "1 / FPS_TARGET" - # Block prerendered cutscenes to 30 FPS - - - type: compare - compare_address: [MAIN, 0x1728B58] - compare_type: "!=" - compare_value_type: uint32 - compare_value: 0 - address: [MAIN] - value_type: refresh_rate - value: 60 \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E57010542000/3FB33205C25D3436.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E57010542000/3FB33205C25D3436.yaml deleted file mode 100644 index 775e76b..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E57010542000/3FB33205C25D3436.yaml +++ /dev/null @@ -1,56 +0,0 @@ -# 英雄伝説 閃の軌跡Ⅲ 1.0.0 -# BID: 3FB33205C25D3436 -# Button polling is 2x more sensitive to holding any button at 60 FPS -# Fishing timer is decreasing 2x faster at 60 FPS -# Bike is turning 2x faster at 60 FPS - -DECLARATIONS: - - - type: variable - name: fps_lock - value_type: uint32 - default_value: 33333333 - evaluate: "FRAMETIME_TARGET * 930000" - - - type: variable - name: frame_time - value_type: float - default_value: 0.0333333333 - - - type: code - name: dynamicSpeed - instructions: [ - [str, d0, [x8, 0x20]], - [fcvt, s4, d0], - [adrp, x8, $frame_time], - [str, s4, [x8, $frame_time]], - [ret] - ] -MASTER_WRITE: - # Move loading FPS lock time - ## REF: MOV with 0x1FCA055 - - - type: asm_a64 - main_offset: 0x4FF478 - instructions: [ - [adrp, x9, $fps_lock], - [ldr, w9, [x9, $fps_lock]] - ] - # Write game's loop time as float - ## Ref: Replace STR D0, [X8,#0x20] below - - - type: asm_a64 - main_offset: 0x4FF4E4 - instructions: [ - [bl, _dynamicSpeed()] - ] - # Read lowest timing float factor - ## REF: 20 20 22 1E EA 03 00 32, replace ADRP + FMINM + LDR - - - type: asm_a64 - main_offset: 0x5E2BC - instructions: [ - [adrp, x8, $frame_time], - [fminnm, s1, s1, s2], - [ldr, s2, [x8, $frame_time]] - ] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E5900F49A000/A8BA2A8F93AAE647.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E5900F49A000/A8BA2A8F93AAE647.yaml deleted file mode 100644 index 0dd4c36..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E5900F49A000/A8BA2A8F93AAE647.yaml +++ /dev/null @@ -1,20 +0,0 @@ -# Othercide 1.3.0.5/1.3.1.0 -# BID: A8BA2A8F93AAE647 - -DECLARATIONS: - - - type: variable - name: dr_target - value_type: float - default_value: 41 - evaluate: "0.97 * FRAMETIME_TARGET" - -MASTER_WRITE: - # Redirect DynamicResolutionManager$$Update Timing - - - type: asm_a64 - main_offset: 0x2B0188C - instructions: [ - [adrp, x8, $dr_target], - [ldr, s1, [x8, $dr_target]] - ] diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E6300AA3A000/AAC6FB02E03062EF.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E6300AA3A000/AAC6FB02E03062EF.yaml deleted file mode 100644 index 6092789..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E6300AA3A000/AAC6FB02E03062EF.yaml +++ /dev/null @@ -1,88 +0,0 @@ -# Batman: The Enemy Within 1.0.3 -# BID: AAC6FB02E03062EF - -DECLARATIONS: - - - type: code - name: tripleBuffer - instructions: [ - [stp, x29, x30, [sp, -16], "!"], - [ldr, x0, [x26, 0x10]], - [cbz, x0, :goto1], - [adrp, x8, 0x1751000], - [ldr, x8, [x8, 0x150]], - [ldr, x8, [x8]], - [blr, x8], - [b, :goto2], - :goto1, [mov, w0, 0xc0], - [bl, 0x72bb40], - [str, x0, [x26, 0x10]], - :goto2, [ldr, x22, [x27]], - [adrp, x27, 0x1750000], - [ldr, x21, [x25]], - [ldr, x27, [x27, 0xff8]], - [adrp, x23, 0x1751000], - [ldr, x8, [x27]], - [ldr, x23, [x23, 0xb30]], - [mov, x0, x23], - [blr, x8], - [mov, x2, x0], - [mov, x0, x21], - [mov, x1, x22], - [bl, 0x1a80], - [mov, x21, x0], - [ldr, x0, [x25]], - [bl, 0x1ac0], - [ldr, x8, [x28]], - [mov, x1, x0], - [mov, x0, x23], - [mov, x2, x21], - [blr, x8], - [ldr, x0, [x26, 0x10]], - [ldr, x8, [x24]], - [mov, x1, x23], - [blr, x8], - [adrp, x22, 0x1751000], - [ldp, x29, x30, [sp], 16], - [ret] - ] - -MASTER_WRITE: -# Remove double buffer - - - type: asm_a64 - main_offset: 0x64A8 - instructions: [ - [mov, w2, 3], - [madd, x1, x8, x2, x9] - ] - - - type: bytes - main_offset: 0xC526D0 - value_type: uint32 - value: 0x1887D70 - - - type: bytes - main_offset: 0x1751C50 - value_type: uint32 - value: 0x1887D70 - - - type: asm_a64 - main_offset: 0x5ED8 - instructions: [ - [bl, _tripleBuffer()] - ] - - - type: asm_a64 - main_offset: 0x5FB0 - instructions: [ - [mov, w1, 3] - ] - - - type: asm_a64 - main_offset: 0x5F7C - instructions: [ - [mov, x2, 0x1950000] - ] - - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E63013E60000/0C8DC9D899379FA5.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E63013E60000/0C8DC9D899379FA5.yaml deleted file mode 100644 index 7eb6e58..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E63013E60000/0C8DC9D899379FA5.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# ASTRONEER 1.34.46.0 -# BID: 0C8DC9D899379FA5 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x7781AD8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x77AC060, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6C14100, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E66006406000/AA4277E6A92FEBE6.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E66006406000/AA4277E6A92FEBE6.yaml deleted file mode 100644 index d1a67ec..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E66006406000/AA4277E6A92FEBE6.yaml +++ /dev/null @@ -1,15 +0,0 @@ -# OCTOPATH TRAVELER 1.0.4 JPN -# BID: AA4277E6A92FEBE6 - -unsafeCheck: true - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x50B5698, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E66010ADE000/45CE2B6625A35771.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E66010ADE000/45CE2B6625A35771.yaml deleted file mode 100644 index 5f092fc..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E66010ADE000/45CE2B6625A35771.yaml +++ /dev/null @@ -1,105 +0,0 @@ -# Crysis Remastered 1.8.0 -# BID: 45CE2B6625A35771 - -DECLARATIONS: - - - type: variable - name: dr_target1 - value_type: float - default_value: 28.5 - evaluate: "0.855 * FRAMETIME_TARGET" - # DON'T PUT ANYTHING BETWEEN - START - - - type: variable - name: dr_target2 - value_type: float - default_value: 32 - evaluate: "0.96 * FRAMETIME_TARGET" - - - type: variable - name: dr_target3 - value_type: float - default_value: 33 - evaluate: "0.96 * FRAMETIME_TARGET" - # DON'T PUT ANYTHING BETWEEN - END - # DON'T PUT ANYTHING BETWEEN - START - - - type: variable - name: dr_target4 - value_type: float - default_value: 29.5 - evaluate: "0.885 * FRAMETIME_TARGET" - - - type: variable - name: dr_target5 - value_type: float - default_value: 32 - evaluate: "0.885 * FRAMETIME_TARGET" - # DON'T PUT ANYTHING BETWEEN - END - # DON'T PUT ANYTHING BETWEEN - START - - - type: variable - name: dr_target6 - value_type: float - default_value: 33.5 - evaluate: "1.005 * FRAMETIME_TARGET" - - - type: variable - name: dr_target7 - value_type: float - default_value: 36 - evaluate: "1.005 * FRAMETIME_TARGET" - # DON'T PUT ANYTHING BETWEEN - END -MASTER_WRITE: - # Redirect Dynamic Resolution Timings to read always not from .text - - - type: asm_a64 - main_offset: 0x27CE4B4 - instructions: [ - [fmov, s0, s1] - ] - # Redirect Dynamic Resolution Timings readings - - - type: asm_a64 - main_offset: 0x27CE450 - instructions: [ - [adrp, x13, $dr_target1], - [ldr, s1, [x13, $dr_target1]] - ] - - - type: asm_a64 - main_offset: 0x27CE484 - instructions: [ - [adrp, x9, $dr_target2], - [add, x9, x9, $dr_target2] - ] - - - type: asm_a64 - main_offset: 0x27CE490 - instructions: [ - [adrp, x10, $dr_target4], - [add, x10, x10, $dr_target4] - ] - - - type: asm_a64 - main_offset: 0x27CE468 - instructions: [ - [adrp, x8, $dr_target6], - [add, x8, x8, $dr_target6] - ] -ALL_FPS: - # sys_MaxFPS - - - type: evaluate_write - address: [MAIN, 0x3CB4204] - value_type: int32 - value: FPS_LOCK_TARGET - # Renderer thread delay - - - type: evaluate_write - address: [MAIN, 0x3CCF6A0] - value_type: float - value: "0.66 * (1/FPS_TARGET)" - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E67012924000/B151A224A429F9A7.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E67012924000/B151A224A429F9A7.yaml deleted file mode 100644 index 26a214f..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E67012924000/B151A224A429F9A7.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# The Witcher 3: Wild Hunt 4.04a-4.04b -# BID: B151A224A429F9A7 - -ALL_FPS: - # DRGameTargetFrameTimeInMs - - - type: evaluate_write - address: [MAIN, 0x41312B4] - value_type: float - value: "0.945 * FRAMETIME_TARGET" - # DRCinematicTargetFrameTimeInMs - - - type: evaluate_write - address: [MAIN, 0x41312E4] - value_type: float - value: "0.945 * FRAMETIME_TARGET" - # LimitFPS - - - type: evaluate_write - address: [MAIN, 0x411DCFC] - value_type: int32 - value: FPS_LOCK_TARGET - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E6900A5A8000/A184B59D5091B68A.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E6900A5A8000/A184B59D5091B68A.yaml deleted file mode 100644 index 027b3e7..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E6900A5A8000/A184B59D5091B68A.yaml +++ /dev/null @@ -1,14 +0,0 @@ -# 戦場のヴァルキュリア for Nintendo Switch 1.0.1 -# BID: A184B59D5091B68A -# Main 2D Animations speed is still tied to framerate -# Thanks to ~Arch for offset - -unsafeCheck: true - -ALL_FPS: - # 3D Game Speed - - - type: evaluate_write - address: [MAIN, 0x957E1C] - value_type: float - value: "60 / FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E6B01BD3A000/0B00B4DFAE47EBA3.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E6B01BD3A000/0B00B4DFAE47EBA3.yaml deleted file mode 100644 index db835f4..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E6B01BD3A000/0B00B4DFAE47EBA3.yaml +++ /dev/null @@ -1,14 +0,0 @@ -# Card-en-Ciel 1.5.1 -# BID: 0B00B4DFAE47EBA3 -# Buffers are hardcoded line by line and put into fixed size heap allocation, so getting triple buffer requires effort - -unsafeCheck: true - -ALL_FPS: - # Internal FPS Lock - # REF: look at nn::os::SleepThread() called in nnMain() - - - type: evaluate_write - address: [MAIN, 0x21C9248, 0x5C] - value_type: float - value: 1 / FPS_LOCK_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E6B01BD3A000/27AB93A086868C70.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E6B01BD3A000/27AB93A086868C70.yaml deleted file mode 100644 index eb49963..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E6B01BD3A000/27AB93A086868C70.yaml +++ /dev/null @@ -1,13 +0,0 @@ -# Card-en-Ciel 1.1.0 -# BID: 27AB93A086868C70 - -unsafeCheck: true - -ALL_FPS: - # Internal FPS Lock - # REF: look at nn::os::SleepThread() called in nnMain() - - - type: evaluate_write - address: [MAIN, 0x207F248, 0x5C] - value_type: float - value: 1 / FPS_LOCK_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E6B01BD3A000/393323C7FBCBD72D.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E6B01BD3A000/393323C7FBCBD72D.yaml deleted file mode 100644 index 9c3cec4..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E6B01BD3A000/393323C7FBCBD72D.yaml +++ /dev/null @@ -1,13 +0,0 @@ -# Card-en-Ciel 1.0.4 -# BID: 393323C7FBCBD72D - -unsafeCheck: true - -ALL_FPS: - # Internal FPS Lock - # REF: look at nn::os::SleepThread() called in nnMain() - - - type: evaluate_write - address: [MAIN, 0x2055248, 0x5C] - value_type: float - value: 1 / FPS_LOCK_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E6B01BD3A000/59C5C45EF17ACADA.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E6B01BD3A000/59C5C45EF17ACADA.yaml deleted file mode 100644 index 48fad3f..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E6B01BD3A000/59C5C45EF17ACADA.yaml +++ /dev/null @@ -1,14 +0,0 @@ -# Card-en-Ciel 1.2.0 -# BID: 59C5C45EF17ACADA -# Buffers are hardcoded line by line and put into fixed size heap allocation, so getting triple buffer requires effort - -unsafeCheck: true - -ALL_FPS: - # Internal FPS Lock - # REF: look at nn::os::SleepThread() called in nnMain() - - - type: evaluate_write - address: [MAIN, 0x20F2248, 0x5C] - value_type: float - value: 1 / FPS_LOCK_TARGET diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E6B01BD3A000/6A2E388EB364D4ED.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E6B01BD3A000/6A2E388EB364D4ED.yaml deleted file mode 100644 index f45105a..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E6B01BD3A000/6A2E388EB364D4ED.yaml +++ /dev/null @@ -1,14 +0,0 @@ -# Card-en-Ciel 1.3.1 -# BID: 6A2E388EB364D4ED -# Buffers are hardcoded line by line and put into fixed size heap allocation, so getting triple buffer requires effort - -unsafeCheck: true - -ALL_FPS: - # Internal FPS Lock - # REF: look at nn::os::SleepThread() called in nnMain() - - - type: evaluate_write - address: [MAIN, 0x2165248, 0x5C] - value_type: float - value: 1 / FPS_LOCK_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E6B01BD3A000/9558FFD5CABC4612.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E6B01BD3A000/9558FFD5CABC4612.yaml deleted file mode 100644 index 76476c8..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E6B01BD3A000/9558FFD5CABC4612.yaml +++ /dev/null @@ -1,18 +0,0 @@ -# Card-en-Ciel 1.6.0 -# BID: 9558FFD5CABC4612 -# Buffers are hardcoded line by line and put into fixed size heap allocation, so getting triple buffer requires effort - -ALL_FPS: - # Min delta FPS Target - - - type: evaluate_write - address: [MAIN, 0x2289610, 0x50] - value_type: uint32 - value: FPS_TARGET - # Internal FPS Lock - # REF: look at nn::os::SleepThread() called in nnMain() - - - type: evaluate_write - address: [MAIN, 0x2289610, 0x60] - value_type: float - value: 1 / FPS_LOCK_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E6B01BD3A000/C9D5E4BE40E7EB66.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E6B01BD3A000/C9D5E4BE40E7EB66.yaml deleted file mode 100644 index b3a6c07..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E6B01BD3A000/C9D5E4BE40E7EB66.yaml +++ /dev/null @@ -1,14 +0,0 @@ -# Card-en-Ciel 1.5.3 -# BID: C9D5E4BE40E7EB66 -# Buffers are hardcoded line by line and put into fixed size heap allocation, so getting triple buffer requires effort - -unsafeCheck: true - -ALL_FPS: - # Internal FPS Lock - # REF: look at nn::os::SleepThread() called in nnMain() - - - type: evaluate_write - address: [MAIN, 0x21D8248, 0x5C] - value_type: float - value: 1 / FPS_LOCK_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E6B01BD3A000/CB3C7EF8E279A22D.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E6B01BD3A000/CB3C7EF8E279A22D.yaml deleted file mode 100644 index 3633091..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E6B01BD3A000/CB3C7EF8E279A22D.yaml +++ /dev/null @@ -1,14 +0,0 @@ -# Card-en-Ciel 1.4.1 -# BID: CB3C7EF8E279A22D -# Buffers are hardcoded line by line and put into fixed size heap allocation, so getting triple buffer requires effort - -unsafeCheck: true - -ALL_FPS: - # Internal FPS Lock - # REF: look at nn::os::SleepThread() called in nnMain() - - - type: evaluate_write - address: [MAIN, 0x219C248, 0x5C] - value_type: float - value: 1 / FPS_LOCK_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E8401FC8A000/A21FFE97D09DCE4E.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E8401FC8A000/A21FFE97D09DCE4E.yaml deleted file mode 100644 index f13f09c..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E8401FC8A000/A21FFE97D09DCE4E.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# ゴリ: カドリー カーネイジ(Gori: Cuddly Carnage) 1.0.7 -# BID: A21FFE97D09DCE4E - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x6A02E68, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x6A3C938, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6245AA8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E8500AD58000/07650FD5E5E2B82C.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E8500AD58000/07650FD5E5E2B82C.yaml deleted file mode 100644 index ab3df39..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E8500AD58000/07650FD5E5E2B82C.yaml +++ /dev/null @@ -1,83 +0,0 @@ -# 無双OROCHI3 1.0.13 -# BID: 07650FD5E5E2B82C -# Credits to Hazerou for figuring out the offset -# Main offset stores address to start of .bss of NRO -## REF: 02 00 00 00 3C 00 00 00 - -unsafeCheck: true - -ALL_FPS: - # Without DLC Ultimate Edition installed - - - type: evaluate_compare - compare_value_type: uint64 - compare_type: "==" - compare_value: 0x379B4590A7C2BC1F - compare_address: [MAIN, 0x3AF80, -0x1B80FC0] - address: [MAIN, 0x3AF80, -0x92BB8] - value_type: uint32 - value: [VSYNC_TARGET, FPS_TARGET] - - - type: evaluate_compare - compare_value_type: uint64 - compare_type: "==" - compare_value: 0x379B4590A7C2BC1F - compare_address: [MAIN, 0x3AF80, -0x1B80FC0] - address: [MAIN, 0x3AF80, -0x92BB0] - value_type: float - value: FPS_TARGET - - - type: evaluate_compare - compare_value_type: uint64 - compare_type: "==" - compare_value: 0x379B4590A7C2BC1F - compare_address: [MAIN, 0x3AF80, -0x1B80FC0] - address: [MAIN, 0x3AF80, -0x92BAC] - value_type: uint32 - value: [VSYNC_TARGET, FPS_TARGET] - - - type: evaluate_compare - compare_value_type: uint64 - compare_type: "==" - compare_value: 0x379B4590A7C2BC1F - compare_address: [MAIN, 0x3AF80, -0x1B80FC0] - address: [MAIN, 0x3AF80, -0x92BA4] - value_type: float - value: FPS_TARGET - # With DLC Ultimate Edition installed - - - type: evaluate_compare - compare_value_type: uint64 - compare_type: "!=" - compare_value: 0x379B4590A7C2BC1F - compare_address: [MAIN, 0x3AF80, -0x1B80FC0] - address: [MAIN, 0x3AF80, -0x93480] - value_type: uint32 - value: [VSYNC_TARGET, FPS_TARGET] - - - type: evaluate_compare - compare_value_type: uint64 - compare_type: "!=" - compare_value: 0x379B4590A7C2BC1F - compare_address: [MAIN, 0x3AF80, -0x1B80FC0] - address: [MAIN, 0x3AF80, -0x93478] - value_type: float - value: FPS_TARGET - - - type: evaluate_compare - compare_value_type: uint64 - compare_type: "!=" - compare_value: 0x379B4590A7C2BC1F - compare_address: [MAIN, 0x3AF80, -0x1B80FC0] - address: [MAIN, 0x3AF80, -0x93474] - value_type: uint32 - value: [VSYNC_TARGET, FPS_TARGET] - - - type: evaluate_compare - compare_value_type: uint64 - compare_type: "!=" - compare_value: 0x379B4590A7C2BC1F - compare_address: [MAIN, 0x3AF80, -0x1B80FC0] - address: [MAIN, 0x3AF80, -0x9346C] - value_type: float - value: FPS_TARGET diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E870163CA000/621EE66A6743D750.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E870163CA000/621EE66A6743D750.yaml deleted file mode 100644 index 6a47166..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E870163CA000/621EE66A6743D750.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# Batman: Arkham Asylum 1.0.1 -# BID: 621EE66A6743D750 - -unsafeCheck: true - -ALL_FPS: - # Bool Lock FPS, ref: LDR S0, [X0,#0x758] - - - type: write - address: [MAIN, 0x1C98DFC] - value_type: uint8 - value: 0 diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E87017D0E000/ACF3FF125C2A3E68.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E87017D0E000/ACF3FF125C2A3E68.yaml deleted file mode 100644 index c18dd0e..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E87017D0E000/ACF3FF125C2A3E68.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Bramble The Mountain King 1.0.7 -# BID: ACF3FF125C2A3E68 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x7241888, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x726F108, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E9001A94C000/57B6B2062EC8C38A.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E9001A94C000/57B6B2062EC8C38A.yaml deleted file mode 100644 index 2992321..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E9001A94C000/57B6B2062EC8C38A.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# TinTin Reporter - Cigars of the Pharaoh 1.3.0 -# BID: 57B6B2062EC8C38A - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (default is 50 ms xD) - - - type: evaluate_write - address: [MAIN, 0x7868B48, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x78964B8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x709A278, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E9001A94C000/ACBD89C999804FD2.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E9001A94C000/ACBD89C999804FD2.yaml deleted file mode 100644 index bf9a6fc..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E9001A94C000/ACBD89C999804FD2.yaml +++ /dev/null @@ -1,26 +0,0 @@ -# TinTin Reporter - Cigars of the Pharaoh 1.4.0/1.4.1 -# BID: ACBD89C999804FD2 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (default is 50 ms xD) - - - type: evaluate_write - address: [MAIN, 0x7868B48, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x78964B8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x709A278, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E9400FE34000/33DBE39C8A83F1E6.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E9400FE34000/33DBE39C8A83F1E6.yaml deleted file mode 100644 index 2b62377..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E9400FE34000/33DBE39C8A83F1E6.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Endling 1.3.0 -# BID: 33DBE39C8A83F1E6 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x7453898, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # r.VSync - - - type: write - address: [MAIN, 0x6C85E08, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7481468, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E95004038000/F77F1559371C0EC6.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E95004038000/F77F1559371C0EC6.yaml deleted file mode 100644 index 193c429..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100E95004038000/F77F1559371C0EC6.yaml +++ /dev/null @@ -1,164 +0,0 @@ -# Xenoblade Chronicles 2 2.1.0 -# BID: F77F1559371C0EC6 - -DECLARATIONS: - - - type: variable - name: last_tick - value_type: uint64 - default_value: 0 - - - type: variable - name: game_speed - value_type: float - default_value: 0.03333333333 - - - type: variable - name: min_delta - value_type: float - default_value: 0.03333333333 - evaluate: "1 / FPS_TARGET" - - - type: variable - name: max_delta - value_type: float - default_value: 30 - evaluate: "FPS_TARGET / 2" - - - type: variable - name: dr_target - value_type: float - default_value: 0.0166666666 - evaluate: "(1 / FPS_TARGET) / VSYNC_TARGET" - - - type: const - name: microseconds_in_sec - value: 1000000 - - - type: const - name: nano_in_micro - value: 1000 - - - type: code - name: dynamicSpeed - instructions: [ - [stp, x29, x30, [sp, -16], "!"], - [mov, x29, sp], - [mrs, x0, cntpct_el0], - [adrp, x2, $last_tick], - [ldr, x1, [x2, $last_tick]], - [str, x0, [x2, $last_tick]], - [cbz, x1, :goto3], - [sub, x0, x0, x1], - [bl, _convertTickToTimeSpan()], - [adrp, x1, $max_delta], - [ldr, s2, [x1, $max_delta]], - [mov, w1, $nano_in_micro], - [udiv, x0, x0, x1], - [ucvtf, s0, x0], - [mov, w1, $microseconds_in_sec], - [movk, w1, $microseconds_in_sec, 16], - [ucvtf, s1, w1], - [b, :goto2], - :goto4, [adrp, x0, 0xb8f000], - [ldr, x0, [x0, 0xd0]], - [cbz, x0, :goto3], - [str, s0, [x0, 0x78]], - [str, s0, [x0, 0x7c]], - [adrp, x0, 0xc22000], - [ldr, x0, [x0, 0x2c8]], - [str, s0, [x0, 0x80]], - [adrp, x0, $game_speed], - [str, s0, [x0, $game_speed]], - [b, :goto3], - :goto5, [fmov, s1, 1.0], - [fdiv, s2, s1, s2], - [fcmp, s0, s2], - [b.lt, :goto6], - [fmov, s0, s2], - [b, :goto4], - :goto6, [adrp, x0, $min_delta], - [ldr, s2, [x0, $min_delta]], - [fcmp, s0, s2], - [b.hi, :goto4], - [fmov, s0, s2], - [b, :goto4], - :goto2, [fdiv, s0, s0, s1], - [b, :goto5], - :goto3, [mov, w8, 0x21a0], - [ldp, x29, x30, [sp], 16], - [ret], - ] -MASTER_WRITE: - # Dynamic speed - # Jump before pushing frame - - - type: asm_a64 - main_offset: 0x700164 - instructions: [ - [bl, _dynamicSpeed()] - ] - # Patch wind speed to take game speed - - - type: asm_a64 - main_offset: 0x747DD8 - instructions: [ - [adrp, x8, $game_speed], - [ldr, s6, [x8, $game_speed]] - ] - # Redirect DR timing - - - type: asm_a64 - main_offset: 0x6AA14C - instructions: [ - [adrp, x8, $dr_target], - [ldr, s0, [x8, $dr_target]] - ] -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0xB74BF0] - value_type: uint32 - value: ["VSYNC_TARGET", "VSYNC_TARGET"] - # Cutscenes in 30 FPS - - - type: compare - compare_type: "==" - compare_value_type: uint8 - compare_value: 1 - compare_address: [MAIN, 0xBD7F40] - value_type: refresh_rate - value: 60 - - - type: compare - compare_type: "==" - compare_value_type: uint8 - compare_value: 1 - compare_address: [MAIN, 0xBD7F40] - address: [VARIABLE, min_delta] - value: 0.0333333333 - - - type: compare - compare_type: "==" - compare_value_type: uint8 - compare_value: 1 - compare_address: [MAIN, 0xBD7F40] - address: [VARIABLE, max_delta] - value: 30 - - - type: compare - compare_type: "==" - compare_value_type: uint8 - compare_value: 1 - compare_address: [MAIN, 0xBD7F40] - address: [MAIN, 0xB74BF0] - value_type: uint32 - value: [2, 2] - - - type: compare - compare_type: "==" - compare_value_type: uint8 - compare_value: 1 - compare_address: [MAIN, 0xBD7F40] - address: [VARIABLE, dr_target] - value: 0.0166666666 diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100EAE00D9EC000/0FE6747D03EBA4E3.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100EAE00D9EC000/0FE6747D03EBA4E3.yaml deleted file mode 100644 index b3c2b31..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100EAE00D9EC000/0FE6747D03EBA4E3.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# Ghostbusters: The Video Game Remastered 1.2 -# BID: 0FE6747D03EBA4E3 -# Main menu still renders 3D objects at 30 FPS (possibly it's prerendered?) - -unsafeCheck: true - -ALL_FPS: - # FPS Lock - - - type: evaluate_write - address: [MAIN, 0x5271FE8, 0x10A0] - value_type: float - value: "TruncDec(1 / FPS_TARGET, 3) - 0.001" - # Dynamic Resolution Timing - - - type: evaluate_write - address: [MAIN, 0x5307044] - value_type: float - value: ["0.975 * FRAMETIME_TARGET", "0.87 * FRAMETIME_TARGET", "0.9225 * FRAMETIME_TARGET"] diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100EAF01527E000/AB75C103EEC0D5FC.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100EAF01527E000/AB75C103EEC0D5FC.yaml deleted file mode 100644 index 5310f2c..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100EAF01527E000/AB75C103EEC0D5FC.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# Hello Neighbor 2 1.1 -# BID: AB75C103EEC0D5FC - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7B70CE8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x73733F8, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100EBE020BC0000/386C265C45562002.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100EBE020BC0000/386C265C45562002.yaml deleted file mode 100644 index e0bbb50..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100EBE020BC0000/386C265C45562002.yaml +++ /dev/null @@ -1,37 +0,0 @@ -# EVERYBODY'S GOLF: Hot Shots EUR 1.1.4 -# BID: 386C265C45562002 -# Changed frametime target value math formula because default one sucks at 60 FPS target - -DECLARATIONS: - - - type: variable - name: dr_frametime_max - value_type: double - default_value: 40 - evaluate: "0.9 * FRAMETIME_TARGET" - - - type: variable - name: dr_frametime_min - value_type: double - default_value: 33.3333333333 - evaluate: "(0.9 * FRAMETIME_TARGET) - 6" -MASTER_WRITE: - # REF: 0a 00 a4 d2 8a 08 e8 f2 41 01 67 9e - - - type: asm_a64 - main_offset: 0x3936338 - instructions: [ - [adrp, x10, $dr_frametime_max], - [ldr, d1, [x10, $dr_frametime_max]], - [nop] - ] - # REF: 00 0d 40 fd 0a 00 b8 d2 - - - type: asm_a64 - main_offset: 0x393640C - instructions: [ - [adrp, x10, $dr_frametime_min], - [ldr, d1, [x10, $dr_frametime_min]], - [nop], - [nop] - ] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100EBE020BC0000/6C434B4568552ADB.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100EBE020BC0000/6C434B4568552ADB.yaml deleted file mode 100644 index 49db77f..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100EBE020BC0000/6C434B4568552ADB.yaml +++ /dev/null @@ -1,37 +0,0 @@ -# EVERYBODY'S GOLF: Hot Shots EUR 1.1.5 -# BID: 6C434B4568552ADB -# Changed frametime target value math formula because default one sucks at 60 FPS target - -DECLARATIONS: - - - type: variable - name: dr_frametime_max - value_type: double - default_value: 40 - evaluate: "0.9 * FRAMETIME_TARGET" - - - type: variable - name: dr_frametime_min - value_type: double - default_value: 33.3333333333 - evaluate: "(0.9 * FRAMETIME_TARGET) - 6" -MASTER_WRITE: - # REF: 0a 00 a4 d2 8a 08 e8 f2 41 01 67 9e - - - type: asm_a64 - main_offset: 0x3977188 - instructions: [ - [adrp, x10, $dr_frametime_max], - [ldr, d1, [x10, $dr_frametime_max]], - [nop] - ] - # REF: 00 0d 40 fd 0a 00 b8 d2 - - - type: asm_a64 - main_offset: 0x397725C - instructions: [ - [adrp, x10, $dr_frametime_min], - [ldr, d1, [x10, $dr_frametime_min]], - [nop], - [nop] - ] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100EBE020BC0000/D3CA3F7A4AE6F9A0.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100EBE020BC0000/D3CA3F7A4AE6F9A0.yaml deleted file mode 100644 index faf4779..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100EBE020BC0000/D3CA3F7A4AE6F9A0.yaml +++ /dev/null @@ -1,35 +0,0 @@ -# EVERYBODY'S GOLF: Hot Shots EUR 1.1.3 -# BID: D3CA3F7A4AE6F9A0 -# Changed frametime target value math formula because default one sucks at 60 FPS target - -DECLARATIONS: - - - type: variable - name: dr_frametime_max - value_type: double - default_value: 40 - evaluate: "0.9 * FRAMETIME_TARGET" - - - type: variable - name: dr_frametime_min - value_type: double - default_value: 33.3333333333 - evaluate: "(0.9 * FRAMETIME_TARGET) - 6" -MASTER_WRITE: - - - type: asm_a64 - main_offset: 0x39259A8 - instructions: [ - [adrp, x10, $dr_frametime_max], - [ldr, d1, [x10, $dr_frametime_max]], - [nop] - ] - - - type: asm_a64 - main_offset: 0x3925A7C - instructions: [ - [adrp, x10, $dr_frametime_min], - [ldr, d1, [x10, $dr_frametime_min]], - [nop], - [nop] - ] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100EC5013ED2000/3C1DC69847A35C30.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100EC5013ED2000/3C1DC69847A35C30.yaml deleted file mode 100644 index a093f1f..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100EC5013ED2000/3C1DC69847A35C30.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# パラダイスキラー 1.3.0 -# BID: 3C1DC69847A35C30 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x7D1C738, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7D41D80, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x7552E58, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100EC5013ED2000/D3744AF2C376CDC4.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100EC5013ED2000/D3744AF2C376CDC4.yaml deleted file mode 100644 index 8043c65..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100EC5013ED2000/D3744AF2C376CDC4.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# パラダイスキラー 1.2.1 -# BID: D3744AF2C376CDC4 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x715EDB8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x718C9B8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100ED7012DB2000/1A971CC40B6D5B3F.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100ED7012DB2000/1A971CC40B6D5B3F.yaml deleted file mode 100644 index 40b3102..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100ED7012DB2000/1A971CC40B6D5B3F.yaml +++ /dev/null @@ -1,60 +0,0 @@ -# ROMANCE OF THE THREE KINGDOMS XIV 1.0.10 -# BID: 1A971CC40B6D5B3F -# Cursor speed is tied to framerate, main menu animations speed is not adjusted properly in range from 35 to 55 FPS - -DECLARATIONS: - # DON'T PUT ANYTHING BETWEEN - START - - - type: variable - name: fps_lock - value_type: uint32 - default_value: 30 - evaluate: FPS_LOCK_TARGET - - - type: variable - name: fps_lock2 - value_type: uint32 - default_value: 60 - evaluate: FPS_LOCK_TARGET - # DON'T PUT ANYTHING BETWEEN - END - - - type: variable - name: game_speed - value_type: float - default_value: 0.0333333333 - evaluate: "1/FPS_TARGET" -MASTER_WRITE: - # Redirect adjusting game speed to FPS Lock, REF: 20 79 68 BC 01 10 2E 1E 00 D8 21 7E - - - type: asm_a64 - main_offset: 0xB8F528 - instructions: [ - [adrp, x9, $fps_lock], - [add, x9, x9, $fps_lock] - ] - # Redirect FPS Lock, REF: C8 32 40 B9 E8 C2 00 B9 - - - type: asm_a64 - main_offset: 0x8966BC - instructions: [ - [adrp, x8, $fps_lock], - [ldr, w8, [x8, $fps_lock]] - ] - # Redirect game speed, REF: 00 28 21 1E 00 A0 00 BD C0 03 5F D6 - - - type: asm_a64 - main_offset: 0x1109040 - instructions: [ - [adrp, x8, $game_speed], - [ldr, s0, [x0, 0xa0]], - [ldr, s1, [x8, $game_speed]] - ] -ALL_FPS: - - # Adjust min delta for menus, 0 - 30 FPS, 1 - 60 FPS, REF: 20 79 68 BC 01 10 2E 1E 00 D8 21 7E - type: evaluate_write - address: [MAIN, 0x254D2A0] - value_type: uint32 - value: "FPS_TARGET / 60" - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100EE00205BA000/135595BF76F46B1B.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100EE00205BA000/135595BF76F46B1B.yaml deleted file mode 100644 index b30f1d7..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100EE00205BA000/135595BF76F46B1B.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# HEAVEN SEEKER ――The Savior of This Cruel World 1.2.0.139 -# BID: 135595BF76F46B1B - -unsafeCheck: true - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime (default is 0.033) - - - type: evaluate_write - address: [MAIN, 0x9888E78, 0x48] - value_type: float - value: "(1 / FPS_TARGET) * 0.99" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100EE00205BA000/21B3E4EA75F16551.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100EE00205BA000/21B3E4EA75F16551.yaml deleted file mode 100644 index a59200f..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100EE00205BA000/21B3E4EA75F16551.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# HEAVEN SEEKER ――The Savior of This Cruel World 1.0.5.130 -# BID: 21B3E4EA75F16551 - -unsafeCheck: true - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime (default is 0.03268) - - - type: evaluate_write - address: [MAIN, 0x97D4478, 0x48] - value_type: float - value: "(1 / FPS_TARGET) / 1.02" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100EE00205BA000/AA3EDDE660D630AD.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100EE00205BA000/AA3EDDE660D630AD.yaml deleted file mode 100644 index 1a33c74..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100EE00205BA000/AA3EDDE660D630AD.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# HEAVEN SEEKER ――The Savior of This Cruel World 1.0.5.134 -# BID: AA3EDDE660D630AD - -unsafeCheck: true - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime (default is 0.03268) - - - type: evaluate_write - address: [MAIN, 0x9826738, 0x48] - value_type: float - value: "(1 / FPS_TARGET) / 1.02" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100EE00205BA000/E7011BF08747297B.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100EE00205BA000/E7011BF08747297B.yaml deleted file mode 100644 index fc869c2..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100EE00205BA000/E7011BF08747297B.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# HEAVEN SEEKER ――The Savior of This Cruel World 1.0.4.126 -# BID: E7011BF08747297B - -unsafeCheck: true - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime (default is 0.03268) - - - type: evaluate_write - address: [MAIN, 0x95672B8, 0x48] - value_type: float - value: "(1 / FPS_TARGET) / 1.02" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100EE00205BA000/F2D03CFFB8DE5E4C.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100EE00205BA000/F2D03CFFB8DE5E4C.yaml deleted file mode 100644 index 62cf39f..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100EE00205BA000/F2D03CFFB8DE5E4C.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# HEAVEN SEEKER ――The Savior of This Cruel World 1.0.4.127 -# BID: F2D03CFFB8DE5E4C - -unsafeCheck: true - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime (default is 0.03268) - - - type: evaluate_write - address: [MAIN, 0x97D2178, 0x48] - value_type: float - value: "(1 / FPS_TARGET) / 1.02" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100EF401D9B2000/2F723E9FD78D184B.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100EF401D9B2000/2F723E9FD78D184B.yaml deleted file mode 100644 index b3f12b2..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100EF401D9B2000/2F723E9FD78D184B.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# HYKE:Northern Light(s) 1.0.1 -# BID: 2F723E9FD78D184B - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x8508958, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x9500260, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100EF401D9B2000/35FAA72E03DDE0D1.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100EF401D9B2000/35FAA72E03DDE0D1.yaml deleted file mode 100644 index 3c47cbc..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100EF401D9B2000/35FAA72E03DDE0D1.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# HYKE:Northern Light(s) 1.0.0 -# BID: 35FAA72E03DDE0D1 - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x84FD958, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x94F5260, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100EF401D9B2000/9BD042D73D2FC2AE.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100EF401D9B2000/9BD042D73D2FC2AE.yaml deleted file mode 100644 index 114b3eb..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100EF401D9B2000/9BD042D73D2FC2AE.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# HYKE:Northern Light(s) 1.0.3 -# BID: 9BD042D73D2FC2AE - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x851B958, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x9513260, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100EF401D9B2000/F9248820D4E4406B.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100EF401D9B2000/F9248820D4E4406B.yaml deleted file mode 100644 index 47ce590..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100EF401D9B2000/F9248820D4E4406B.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# HYKE:Northern Light(s) 1.0.2 -# BID: F9248820D4E4406B - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x8507958, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x94FF260, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F0400E850000/85C362CC9790F0ED.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F0400E850000/85C362CC9790F0ED.yaml deleted file mode 100644 index 69775a0..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F0400E850000/85C362CC9790F0ED.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# Metro: Last Light Redux 1.0.0 -# BID: 85C362CC9790F0ED - -unsafeCheck: true - -ALL_FPS: - # Dynamic resolution FPS factor (0.989 * FPS) - - - type: evaluate_write - address: [MAIN, 0x17321D8] - value_type: float - value: "0.989 * FPS_TARGET" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F0401C2BC000/38730D109E48050C.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F0401C2BC000/38730D109E48050C.yaml deleted file mode 100644 index ba1bcd6..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F0401C2BC000/38730D109E48050C.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# Soul Stalker 1.0.2 -# BID: 38730D109E48050C - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x62BDD40, 0x48] - value_type: float - value: "1 / FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F09024254000/EC30FA360F7BFF02.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F09024254000/EC30FA360F7BFF02.yaml deleted file mode 100644 index 5b62acb..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F09024254000/EC30FA360F7BFF02.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Dollmare 1.0.0 -# BID: EC30FA360F7BFF02 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x7B29078, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7B65770, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6B43110, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F0E01753E000/217C9ECF258C0312.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F0E01753E000/217C9ECF258C0312.yaml deleted file mode 100644 index 24a94d9..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F0E01753E000/217C9ECF258C0312.yaml +++ /dev/null @@ -1,32 +0,0 @@ -# Dusk Diver 2 1.0.1 -# BID: 217C9ECF258C0312 - -ALL_FPS: - # Disable bUseFixedFrameRate to untie game speed from framerate and unlock FPS - - - type: write - address: [MAIN, 0x77C7098, 0x7A4] - address_unsafe: true - value_type: uint32 - # Default is 0x47, bUseFixedFrameRate |= 0x40 - # By writing 7 we are making sure that other flags are maintained: - # bAllowMultiThreadedAnimationUpdate |= 4 - # bOptimizeAnimBlueprintMemberVariableAccess |= 2 - # bCanBlueprintsTickByDefault |= 1 - value: 7 - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 1 decimal - - - type: evaluate_write - address: [MAIN, 0x779A0E8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x77C79B8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F1101BB9E000/171806C35E4152E7.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F1101BB9E000/171806C35E4152E7.yaml deleted file mode 100644 index 465ad96..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F1101BB9E000/171806C35E4152E7.yaml +++ /dev/null @@ -1,74 +0,0 @@ -# Tales of Xillia Remastered 1.0.1 -# BID: 171806C35E4152E7 - -DECLARATIONS: - - - type: variable - name: patch_running - value_type: uint8 - default_value: 0 - - - type: code - name: applyCustomSpeed - instructions: [ - [adrp, x4, $patch_running], - [ldrb, w4, [x4, $patch_running]], - [cbnz, w4, :goto1], - [stp, s0, s1, [x8, 0x6C]], - :goto1, [ret] - ] -MASTER_WRITE: - # Block updating game speed - ## REF: 00 85 0d 2d - - - type: asm_a64 - main_offset: 0x244A5F4 - instructions: [ - [bl, _applyCustomSpeed()] - ] - - - type: asm_a64 - main_offset: 0x28EBC5C - instructions: [ - [bl, _applyCustomSpeed()] - ] - - - type: asm_a64 - main_offset: 0x2B26E04 - instructions: [ - [bl, _applyCustomSpeed()] - ] -ALL_FPS: - # Game Speed - ## REF: Global_TypeInfo - - - type: evaluate_write - address: [MAIN, 0x82C50C0, 0xB8, 0x6C] - value_type: float - value: [FPS_TARGET, "60 / FPS_TARGET"] - # Just in case, dunno if they are used for anything, but all of them were set to target strictly 30 FPS - # UnityEngine.Time::maximumDeltaTime - - - type: write - address: [MAIN, 0x9FCFBF8, 0x100] - value_type: float - value: [0.066666666, 0.066666666] - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x9FCFBF8, 0x48] - value_type: float - value: "1 / FPS_TARGET" - # UnityEngine.Application::targetFrameRate - - - type: evaluate_write - address: [MAIN, 0x84E1EA8] - value_type: uint32 - value: FPS_TARGET - - - type: compare - compare_address: [VARIABLE, patch_running] - compare_type: "==" - compare_value: 0 - address: [VARIABLE, patch_running] - value: 1 \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F1101BB9E000/5A2EE9B7315F91E5.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F1101BB9E000/5A2EE9B7315F91E5.yaml deleted file mode 100644 index 9fff8a5..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F1101BB9E000/5A2EE9B7315F91E5.yaml +++ /dev/null @@ -1,74 +0,0 @@ -# Tales of Xillia Remastered 1.0.2 -# BID: 5A2EE9B7315F91E5 - -DECLARATIONS: - - - type: variable - name: patch_running - value_type: uint8 - default_value: 0 - - - type: code - name: applyCustomSpeed - instructions: [ - [adrp, x4, $patch_running], - [ldrb, w4, [x4, $patch_running]], - [cbnz, w4, :goto1], - [stp, s0, s1, [x8, 0x6C]], - :goto1, [ret] - ] -MASTER_WRITE: - # Block updating game speed - ## REF: 00 85 0d 2d - - - type: asm_a64 - main_offset: 0x244EF94 - instructions: [ - [bl, _applyCustomSpeed()] - ] - - - type: asm_a64 - main_offset: 0x28F3A1C - instructions: [ - [bl, _applyCustomSpeed()] - ] - - - type: asm_a64 - main_offset: 0x2B2E4D4 - instructions: [ - [bl, _applyCustomSpeed()] - ] -ALL_FPS: - # Game Speed - ## REF: Global_TypeInfo - - - type: evaluate_write - address: [MAIN, 0x82E1310, 0xB8, 0x6C] - value_type: float - value: [FPS_TARGET, "60 / FPS_TARGET"] - # Just in case, dunno if they are used for anything, but all of them were set to target strictly 30 FPS - # UnityEngine.Time::maximumDeltaTime - - - type: write - address: [MAIN, 0x9FEC278, 0x100] - value_type: float - value: [0.066666666, 0.066666666] - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x9FEC278, 0x48] - value_type: float - value: "1 / FPS_TARGET" - # UnityEngine.Application::targetFrameRate - - - type: evaluate_write - address: [MAIN, 0x84FE4E8] - value_type: uint32 - value: FPS_TARGET - - - type: compare - compare_address: [VARIABLE, patch_running] - compare_type: "==" - compare_value: 0 - address: [VARIABLE, patch_running] - value: 1 \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F15003E64000/1953770037ACC52A.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F15003E64000/1953770037ACC52A.yaml deleted file mode 100644 index 217f285..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F15003E64000/1953770037ACC52A.yaml +++ /dev/null @@ -1,20 +0,0 @@ -# Fire Emblem Warriors 1.5.0 -# BID: 1953770037ACC52A - -ALL_FPS: - # FPS Lock + Game Speed - - - type: evaluate_write - address: [MAIN, 0x12BBCC4] - value_type: float - value: FPS_TARGET - - - type: evaluate_write - address: [MAIN, 0x12BBCCC] - value_type: uint32 - value: VSYNC_TARGET - - - type: evaluate_write - address: [MAIN, 0x12A0FB0] - value_type: uint32 - value: FPS_TARGET diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F18023E72000/14A66A472139D638.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F18023E72000/14A66A472139D638.yaml deleted file mode 100644 index 1cc9699..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F18023E72000/14A66A472139D638.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# System Shock 2.0.3 -# BID: 14A66A472139D638 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x63C3408, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # r.VSync - - - type: write - address: [MAIN, 0x5BF4108, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x63F10C8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F2300D4BA000/DB17131624D04A9C.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F2300D4BA000/DB17131624D04A9C.yaml deleted file mode 100644 index bfc3c6b..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F2300D4BA000/DB17131624D04A9C.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Darksiders: Genesis 1.0.3 -# BID: DB17131624D04A9C - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget = (1000/FPS) cutted to 1 decimal - - - type: evaluate_write - address: [MAIN, 0x59D7150, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x59FDD30, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x51A7A78, 0] - value_type: int32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F2600D710000/4CCD2F6D331DD104.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F2600D710000/4CCD2F6D331DD104.yaml deleted file mode 100644 index 6c18d91..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F2600D710000/4CCD2F6D331DD104.yaml +++ /dev/null @@ -1,42 +0,0 @@ -# Contra: Rogue Corps 1.3.0 -# BID: 4CCD2F6D331DD104 - -DECLARATIONS: - - - type: variable - name: dr_factor - value_type: float - default_value: 1000000 - evaluate: "30000000 / FPS_TARGET" - - - type: code - name: fpsTarget - instructions: [ - [adrp, x8, 0xd94000], - [ldr, w8, [x8, 0x628]], - [ret] - ] -MASTER_WRITE: - # Read FPS target from code cave - - - type: asm_a64 - main_offset: 0x2004 - instructions: [ - [bl, _fpsTarget()] - ] - # Redirect DR time factor - - - type: asm_a64 - main_offset: 0x2140 - instructions: [ - [adrp, x8, $dr_factor], - [ldr, s9, [x8, $dr_factor]] - ] -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0xD94628] - value_type: uint32 - value: FPS_TARGET - - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F2C0115B6000/5CB42B1CF25469FB.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F2C0115B6000/5CB42B1CF25469FB.yaml deleted file mode 100644 index bd8fc21..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F2C0115B6000/5CB42B1CF25469FB.yaml +++ /dev/null @@ -1,183 +0,0 @@ -# The Legend of Zelda: Tears of The Kingdom 1.4.2 -# BID: 5CB42B1CF25469FB - -Addons: - - atmosphere/contents/0100F2C0115B6000/exefs/main.npdm - -DECLARATIONS: - - - type: variable - name: fps_target - value_type: float - default_value: 30 - evaluate: FPS_TARGET - - - type: variable - name: cutscene_flag - value_type: uint8 - default_value: 0 - - - type: variable - name: dr_factor - value_type: float - default_value: 0.001 - evaluate: "FPS_TARGET / 30000" - - - type: const - name: nanoseconds_in_s - value: 1000000000 - - - type: code - name: cutscene_1 - instructions: [ - [stp, x29, x30, [sp, -16], "!"], - [mov, x29, sp], - [mov, w2, 1], - [adrp, x3, $cutscene_flag], - [strb, w2, [x3, $cutscene_flag]], - [bl, 0x5f888], # Jump to original BL - [ldp, x29, x30, [sp], 16], - [ret] - ] - - - type: code - name: cutscene_2 - instructions: [ - [adrp, x3, $cutscene_flag], - [strb, w0, [x3, $cutscene_flag]], - [b, _setUserInactivityDetectionTimeExtended()], - ] - - - type: code - name: blackBackgroundFix - instructions: [ - [fcmp, s1, 0.0], - [b.ne, :goto1], - [ldurh, w8, [x25, -6]], - [cmp, w8, 5], - [b.ne, :goto1], - [ldurh, w8, [x25, -8]], - [cmp, w8, 5], - [b.ne, :goto1], - [fmov, s8, 1.0], - :goto1, [fmadd, s9, s0, s8, s1], - [ret] - ] -MASTER_WRITE: - # Force default 30 FPS Lock - - - type: asm_a64 - main_offset: 0x104E9D8 - instructions: [ - [mov, w1, 2] - ] - # Remove double buffer - ## REF: A0 2A 40 F9 61 A2 40 39 - - - type: asm_a64 - main_offset: 0xBBF258 - instructions: [ - [mov, w1, 1] - ] - # Code Injected, $x1 + 0xD8 - last frametime without compensation long ticks, $x0 + 0x50 - fps target used for calculation int, - # $x0 + 0x24 - our fps target used for calculation but as float, originally is stored there 30 FPS int that seems to do nothing outside of this function - ## REF: nvnWindowSetPresentInterval - - - type: asm_a64 - main_offset: 0x2D4E68 - instructions: [ - [adrp, x2, $fps_target], - [ldr, s9, [x2, $fps_target]], - [mov, x20, x0], - [mov, x21, x1], - [ldr, x0, [x1, 0xd8]], - [bl, _convertTickToTimeSpan()], - [mov, w2, $nanoseconds_in_s], - [movk, w2, $nanoseconds_in_s, 16], - [ucvtf, s2, w2], - [ucvtf, s1, x0], - [fdiv, s1, s2, s1], - [fcmp, s1, s9], - [fcsel, s1, s9, s1, gt], - [fmov, s9, 15.0], - [fcmp, s1, s9], - [fcsel, s1, s9, s1, lt], - [fcvtzu, w2, s1], - [str, w2, [x20, 0x50]], - [str, s1, [x20, 0x24]], - [b, 0x2d4f60] - ] - ## Use our fps target - ## REF: 60 52 42 BD 08 4E A8 52 - ### Replace LDR S0, [X22,#0x250] - - - type: asm_a64 - main_offset: 0x2D4730 - instructions: [ - [ldr, s0, [x19, 0x224]] - ] - ### Replace SCVTF S0, S0 - - - type: asm_a64 - main_offset: 0x2D4748 - instructions: [ - [nop] - ] - ## REF: 14 01 40 F9 08 4E A8 52 - ### Replace LDR S0, [X22,#0x250] - - - type: asm_a64 - main_offset: 0x37EA5C - instructions: [ - [ldr, s0, [x22, 0x224]] - ] - ### Replace SCVTF S0, S0 - - - type: asm_a64 - main_offset: 0x37EA68 - instructions: [ - [nop] - ] - # When prerendered cutscene is active write flag - ## REF: 68 52 40 79 08 01 19 32 68 52 00 79 - ## BL to Code Cave 1 - - - type: asm_a64 - main_offset: 0x2B238B4 - instructions: [ - [bl, _cutscene_1()] - ] - ## REF: 68 52 40 79 08 79 18 12 68 52 00 79, inside call - ## B to Code Cave 2 - - - type: asm_a64 - main_offset: 0x2B210CC - instructions: [ - [b, _cutscene_2()] - ] - # Adjust DR timing to factor - # REF: 88 02 15 CB 00 01 23 9E - - - type: asm_a64 - main_offset: 0xEED54 - instructions: [ - [adrp, x8, $dr_factor], - [ldr, s1, [x8, $dr_factor]] - ] - # Fix black background for D-pad menu - ## REF: 21 03 5E BC - - - type: asm_a64 - main_offset: 0x387390 - instructions: [ - [bl, _blackBackgroundFix()], # Jump to Code Cave 3 - [fcmp, s0, 0.0] - ] -ALL_FPS: - - - type: compare - compare_address: [VARIABLE, cutscene_flag] - compare_value: 1 - compare_type: "==" - value_type: refresh_rate - value: 30 diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F2C0115B6000/6265F94D606242CE.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F2C0115B6000/6265F94D606242CE.yaml deleted file mode 100644 index 91e9e6c..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F2C0115B6000/6265F94D606242CE.yaml +++ /dev/null @@ -1,170 +0,0 @@ -# The Legend of Zelda: Tears of The Kingdom 1.4.0 -# BID: 6265F94D606242CE - -Addons: - - atmosphere/contents/0100F2C0115B6000/exefs/main.npdm - -unsafeCheck: true - -MASTER_WRITE: - # Remove double buffer - ## REF: A0 2A 40 F9 61 A2 40 39 - - - type: bytes - main_offset: 0xBD1F08 - value_type: uint32 - value: 0x52800021 - # Code Injected, $x1 + 0xD8 - last frametime without compensation long ticks, $x0 + 0x50 - fps target used for calculatuon int, - # $x0 + 0x24 - our fps target used for calculation but as float, originally is stored there 30 FPS int that seems to do nothing outside of this function - ## MAIN + 0x3ACFFFC = FPS target for reference - ## REF: nvnWindowSetPresentInterval - - - type: bytes - main_offset: 0x3E0F64 - value_type: uint32 - value: - - 0xF001B762 - - 0xBD4FFC49 - - 0xAA0003F4 - - 0xAA0103F5 - - 0xF9406C20 - - 0x949F20BE - - 0xF0014902 - - 0xB9480842 - - 0x1E220042 - - 0x9E220001 - - 0x1E211841 - - 0x1E292020 - - 0x1E21CD21 - - 0x1E25D009 - - 0x1E292020 - - 0x1E21BD21 - - 0x1E390022 - - 0xB9005282 - - 0xBD002681 - - 0x1400002B - ## Use our fps target - - - type: bytes - main_offset: 0x3E082C - value_type: uint32 - value: 0xBD422660 - - - type: bytes - main_offset: 0x3E0844 - value_type: uint32 - value: 0xD503201F - - - type: bytes - main_offset: 0x4B4F8C - value_type: uint32 - value: 0xBD4226C0 - - - type: bytes - main_offset: 0x4B4F98 - value_type: uint32 - value: 0xD503201F - # When prerendered cutscene is active write flag to MAIN + 0x3ACFFFB - ## REF: 68 52 40 79 08 01 19 32 68 52 00 79 - - - type: bytes - main_offset: 0x2B2A608 - value_type: uint32 - value: 0x9762DA6E - ## REF: 68 52 40 79 08 79 18 12 68 52 00 79 - - - type: bytes - main_offset: 0x2B27E20 - value_type: uint32 - value: 0x1762E46C - ## CODE CAVE - - - type: bytes - main_offset: 0x3E0FC0 - value_type: uint32 - value: - - 0x52800022 - - 0xF001B763 - - 0x393FEC62 - - 0x14196AF3 - - - type: bytes - main_offset: 0x3E0FD0 - value_type: uint32 - value: - - 0xF001B763 - - 0x393FEC60 - - 0x149F263A - # Adjust DR timing to factor from MAIN + 0x3ACFFF4 - # REF: 0x46823555 - - - type: bytes - main_offset: 0x18CB20 - value_type: uint32 - value: - - 0xF001CA08 - - 0xBD4FF501 - # Fix black background for D-pad menu - - - type: bytes - main_offset: 0x5ECA90 - value_type: uint32 - value: - - 0x17F7D153 - - 0x1E202008 - ## CODE CAVE - - - type: bytes - main_offset: 0x3E0FDC - value_type: uint32 - value: - - 0x1E202028 - - 0x54000101 - - 0x785FA328 - - 0x7100151F - - 0x540000A1 - - 0x785F8328 - - 0x7100151F - - 0x54000041 - - 0x1E2E1008 - - 0x1F080409 - - 0x14082EA4 - # Default values - ## FPS Target - - - type: bytes - main_offset: 0x3ACFFFC - value_type: float - value: 30 - ## Cutscene flag - - - type: bytes - main_offset: 0x3ACFFFB - value_type: uint8 - value: 0 - ## Dynamic Resolution timing factor - - - type: bytes - main_offset: 0x3ACFFF4 - value_type: float - value: 0.001 -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x3ACFFFC] - value_type: float - value: FPS_TARGET - - - type: evaluate_write - address: [MAIN, 0x3ACFFF4] - value_type: float - value: "0.001 * (FPS_TARGET / 30)" - - - type: compare - compare_address: [MAIN, 0x3ACFFFB] - compare_value_type: uint8 - compare_value: 1 - compare_type: "==" - address: [MAIN] - value_type: refresh_rate - value: 30 diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F2C0115B6000/965EAB9CEB8EB867.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F2C0115B6000/965EAB9CEB8EB867.yaml deleted file mode 100644 index c2861d7..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F2C0115B6000/965EAB9CEB8EB867.yaml +++ /dev/null @@ -1,174 +0,0 @@ -# The Legend of Zelda: Tears of The Kingdom 1.4.1 -# BID: 965EAB9CEB8EB867 - -Addons: - - atmosphere/contents/0100F2C0115B6000/exefs/main.npdm - -unsafeCheck: true - -MASTER_WRITE: - # Remove double buffer - ## REF: A0 2A 40 F9 61 A2 40 39 - - - type: bytes - main_offset: 0xBC9088 - value_type: uint32 - value: 0x52800021 - # Code Injected, $x1 + 0xD8 - last frametime without compensation long ticks, $x0 + 0x50 - fps target used for calculatuon int, - # $x0 + 0x24 - our fps target used for calculation but as float, originally is stored there 30 FPS int that seems to do nothing outside of this function - ## MAIN + 0x3ACAFFC = FPS target for reference - ## REF: nvnWindowSetPresentInterval - - - type: bytes - main_offset: 0x38A3C4 - value_type: uint32 - value: - - 0x9001BA02 - - 0xBD4FFC49 - - 0xAA0003F4 - - 0xAA0103F5 - - 0xF9406C20 - - 0x94A066EA # BL nn::os::ConvertToTimeSpan(nn::os::Tick) - - 0x52994002 - - 0x72A77342 - - 0x1E220042 - - 0x9E220001 - - 0x1E211841 - - 0x1E292020 - - 0x1E21CD21 - - 0x1E25D009 - - 0x1E292020 - - 0x1E21BD21 - - 0x1E390022 - - 0xB9005282 - - 0xBD002681 - - 0x1400002B - ## Use our fps target - ## REF: 60 52 42 BD 08 4E A8 52 - - - type: bytes - main_offset: 0x389C8C - value_type: uint32 - value: 0xBD422660 - - - type: bytes - main_offset: 0x389CA4 - value_type: uint32 - value: 0xD503201F - ## REF: 14 01 40 F9 08 4E A8 52 - - - type: bytes - main_offset: 0x4916DC - value_type: uint32 - value: 0xBD4226C0 - - - type: bytes - main_offset: 0x4916E8 - value_type: uint32 - value: 0xD503201F - # When prerendered cutscene is active write flag to MAIN + 0x3ACAFFB - ## REF: 68 52 40 79 08 01 19 32 68 52 00 79 - - - type: bytes - main_offset: 0x2B23988 - value_type: uint32 - value: 0x97619AA3 - ## REF: 68 52 40 79 08 79 18 12 68 52 00 79, inside call - - - type: bytes - main_offset: 0x2B211A0 - value_type: uint32 - value: 0x1761A4A1 - ## CODE CAVE, offset +0x50 relative to start of previous code cave - - - type: bytes - main_offset: 0x38A414 - value_type: uint32 - value: - - 0x52800022 - - 0x9001BA03 - - 0x393FEC62 - - 0x141ADBE3 - ## CODE CAVE, offset +0x10 relative to start of previous code cave - - - type: bytes - main_offset: 0x38A424 - value_type: uint32 - value: - - 0x9001BA03 - - 0x393FEC60 - - 0x14A06C69 # B nn::oe::SetUserInactivityDetectionTimeExtended(bool) - # Adjust DR timing to factor from MAIN + 0x3ACAFF4 - # REF: 88 02 15 CB 00 01 23 9E - - - type: bytes - main_offset: 0x17AC04 - value_type: uint32 - value: - - 0x9001CA88 - - 0xBD4FF501 - # Fix black background for D-pad menu - ## REF: 21 03 5E BC - - - type: bytes - main_offset: 0x48DDD0 - value_type: uint32 - value: - - 0x17FBF198 - - 0x1E202008 - ## CODE CAVE, offset +0xC relative to start of previous code cave - - - type: bytes - main_offset: 0x38A430 - value_type: uint32 - value: - - 0x1E202028 - - 0x54000101 - - 0x785FA328 - - 0x7100151F - - 0x540000A1 - - 0x785F8328 - - 0x7100151F - - 0x54000041 - - 0x1E2E1008 - - 0x1F080409 - - 0x14040E5F - # Default values - ## FPS Target - - - type: bytes - main_offset: 0x3ACAFFC - value_type: float - value: 30 - ## Cutscene flag - - - type: bytes - main_offset: 0x3ACAFFB - value_type: uint8 - value: 0 - ## Dynamic Resolution timing factor - - - type: bytes - main_offset: 0x3ACAFF4 - value_type: float - value: 0.001 -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x3ACAFFC] - value_type: float - value: FPS_TARGET - - - type: evaluate_write - address: [MAIN, 0x3ACAFF4] - value_type: float - value: "0.001 * (FPS_TARGET / 30)" - - - type: compare - compare_address: [MAIN, 0x3ACAFFB] - compare_value_type: uint8 - compare_value: 1 - compare_type: "==" - address: [MAIN] - value_type: refresh_rate - value: 30 \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F2C0115B6000/9B4E43650501A4D4.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F2C0115B6000/9B4E43650501A4D4.yaml deleted file mode 100644 index 417fd10..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F2C0115B6000/9B4E43650501A4D4.yaml +++ /dev/null @@ -1,178 +0,0 @@ -# The Legend of Zelda: Tears of The Kingdom 1.2.1 -# BID: 9B4E43650501A4D4 - -Addons: - - atmosphere/contents/0100F2C0115B6000/exefs/main.npdm - -unsafeCheck: true - -MASTER_WRITE: - # Remove double buffer - - - type: bytes - main_offset: 0x21BE6D0 - value_type: uint32 - value: - - 0x52800021 - - 0x52800068 - - 0x39029661 - # CODE CAVE - - - type: bytes - main_offset: 0x2B19A50 - value_type: uint32 - value: - - 0xD63F0100 - - 0x97FFF72F - - 0xB000E081 - - 0xF9455828 - - 0xF9055820 - - 0xB5000048 - - 0x17E5BF5A - - 0xCB080000 - - 0x97FFF820 - - 0x528502A2 - - 0x72A00FE2 - - 0x52881541 - - 0x72A07F21 - - 0xEB01001F - - 0x9A80C020 - - 0xEB02001F - - 0x9A80B040 - - 0x1E630000 - - 0x52800042 - - 0x1AC20821 - - 0x1E630021 - - 0x1E611800 - - 0xB000E081 - - 0x1E624000 - - 0xBD0AB820 - - 0x14000008 - - 0xB000E081 - - 0xB90ABC22 - - 0x178E31AD - - 0x52800042 - - 0xB000E081 - - 0xB90ABC22 - - 0x17FFFF0C - - 0xB94ABC22 - - 0x34000102 - - 0xF85F0260 - - 0x7100045F - - 0x540000CC - - 0x12800021 - - 0xF000DAA8 - - 0xF9451508 - - 0xD63F0100 - - 0x17E5BF36 - - 0xB000E082 - - 0xB94AC041 - - 0xB90AC05F - - 0xF000DAA8 - - 0xF9451508 - - 0xD63F0100 - - 0x17E5BF2F - - 0x52800022 - - 0x17FFFFE7 - - 0x1E202048 - - 0x54000041 - - 0x1E2E1000 - - 0x1E222808 - - 0x1E202028 - - 0x1770F360 - - 0xB000E081 - - 0xBD4AB821 - - 0xBD4C5400 - - 0x1E210800 - - 0xD65F03C0 - # Connect game speed to code cave's calculation - - - type: bytes - main_offset: 0x24897CC - value_type: uint32 - value: 0x141A40A1 - # Lock prerendered cutscenes to 30 FPS and unlock after while reading expected interval from MAIN + 0x472AAC0 - - - type: bytes - main_offset: 0x2484F30 - value_type: uint32 - value: 0x941A52FA - - - type: bytes - main_offset: 0xEA42E8 - value_type: uint32 - value: 0x1471D5F7 - # Adjust DR timing to FPS target by reading factor from MAIN + 0x472AAC4 - - - type: bytes - main_offset: 0x972C14 - value_type: uint32 - value: - - 0x9001EDC8 - - 0xBD4AC501 - # Read game's speed from bss caved game speed at MAIN + 0x472AAB8 - - - type: bytes - main_offset: 0x7EDE7C - value_type: uint32 - value: - - 0xB001F9E1 - - 0x1E27D001 - - 0xBD4AB820 - - 0xD503201F - - 0xF001F228 - - 0xAA0003F3 - - 0x1E211801 - - 0xD503201F - # Fix black background for D-pad menu - - - type: bytes - main_offset: 0x7568B0 - value_type: uint32 - value: 0x148F0C9C - # Fix vertical aiming speed for Ultrahand (thanks to Last Breath for pointer) - - - type: bytes - main_offset: 0x1D48D40 - value_type: uint32 - value: 0x9437437E - # Default values - - - type: bytes - main_offset: 0x472AAB8 - value_type: float - value: 1.0 - - - type: bytes - main_offset: 0x472AAC0 - value_type: int32 - value: -2 - - - type: bytes - main_offset: 0x472AAC4 - value_type: float - value: 0.001 -ALL_FPS: - # Set default interval to use by patch when exiting prerender cutscene - - - type: evaluate_write - address: [MAIN, 0x472AAC0] - value_type: int32 - value: "VSYNC_TARGET * -1" - # DR GPU Time Factor - - - type: evaluate_write - address: [MAIN, 0x472AAC4] - value_type: float - value: "(FPS_TARGET / 30) * 0.001" - # cutscenes must be played at 30 FPS - - - type: compare - compare_address: [MAIN, 0x472AABC] - compare_type: "==" - compare_value_type: uint32 - compare_value: 1 - address: [MAIN] - value_type: refresh_rate - value: 30 - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F3200E7CA000/EAA0B789264F2A75.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F3200E7CA000/EAA0B789264F2A75.yaml deleted file mode 100644 index bd46e87..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F3200E7CA000/EAA0B789264F2A75.yaml +++ /dev/null @@ -1,43 +0,0 @@ -# The Settlers: New Allies 1.0.7 -# BID: EAA0B789264F2A75 - -DECLARATIONS: - - - type: variable - name: fps_lock - value_type: float - default_value: 30 - evaluate: FPS_LOCK_TARGET - - - type: variable - name: frametime_target - value_type: float - default_value: 0.0333333333 - evaluate: "1 / FPS_TARGET" - - - type: code - name: readVariables - instructions: [ - [adrp, x8, $fps_lock], - [ldr, s0, [x8, $fps_lock]], - [adrp, x8, $frametime_target], - [ldr, s8, [x8, $frametime_target]], - [ret] - ] -MASTER_WRITE: - # Redirect FPS Lock to fps_lock, frametime and DR target to frametime_target - # REF: 08 14 40 BD 00 10 2E 1E 00 18 28 1E - - - type: asm_a64 - main_offset: 0x36A400 - instructions: [ - [bl, _readVariables()] - ] - # REF: 00 14 40 BD 09 10 2E 1E (1 instruction before that) - - - type: asm_a64 - main_offset: 0x34A0EB4 - instructions: [ - [adrp, x0, $frametime_target], - [ldr, s0, [x0, $frametime_target]] - ] diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F3400332C000/E3938FA78579C1CA.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F3400332C000/E3938FA78579C1CA.yaml deleted file mode 100644 index 46ec521..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F3400332C000/E3938FA78579C1CA.yaml +++ /dev/null @@ -1,165 +0,0 @@ -# Xenoblade2 2.0.2 -# BID: E3938FA78579C1CA - -DECLARATIONS: - - - type: variable - name: last_tick - value_type: uint64 - default_value: 0 - - - type: variable - name: game_speed - value_type: float - default_value: 0.03333333333 - - - type: variable - name: min_delta - value_type: float - default_value: 0.03333333333 - evaluate: "1 / FPS_TARGET" - - - type: variable - name: max_delta - value_type: float - default_value: 30 - evaluate: "FPS_TARGET / 2" - - - type: variable - name: dr_target - value_type: float - default_value: 0.0166666666 - evaluate: "(1 / FPS_TARGET) / VSYNC_TARGET" - - - type: const - name: microseconds_in_sec - value: 1000000 - - - type: const - name: nano_in_micro - value: 1000 - - - type: code - name: dynamicSpeed - instructions: [ - [stp, x29, x30, [sp, -16], "!"], - [mov, x29, sp], - [mrs, x0, cntpct_el0], - [adrp, x2, $last_tick], - [ldr, x1, [x2, $last_tick]], - [str, x0, [x2, $last_tick]], - [cbz, x1, :goto3], - [sub, x0, x0, x1], - [bl, _convertTickToTimeSpan()], - [adrp, x1, $max_delta], - [ldr, s2, [x1, $max_delta]], - [mov, w1, $nano_in_micro], - [udiv, x0, x0, x1], - [ucvtf, s0, x0], - [mov, w1, $microseconds_in_sec], - [movk, w1, $microseconds_in_sec, 16], - [ucvtf, s1, w1], - [b, :goto2], - :goto4, [adrp, x0, 0xb8f000], - [ldr, x0, [x0, 0xd0]], - [cbz, x0, :goto3], - [str, s0, [x0, 0x78]], - [str, s0, [x0, 0x7c]], - [adrp, x0, 0xc22000], - [ldr, x0, [x0, 0x2c8]], - [str, s0, [x0, 0x80]], - [adrp, x0, $game_speed], - [str, s0, [x0, $game_speed]], - [b, :goto3], - :goto5, [fmov, s1, 1.0], - [fdiv, s2, s1, s2], - [fcmp, s0, s2], - [b.lt, :goto6], - [fmov, s0, s2], - [b, :goto4], - :goto6, [adrp, x0, $min_delta], - [ldr, s2, [x0, $min_delta]], - [fcmp, s0, s2], - [b.hi, :goto4], - [fmov, s0, s2], - [b, :goto4], - :goto2, [fdiv, s0, s0, s1], - [b, :goto5], - :goto3, [mov, w8, 0x21a0], - [ldp, x29, x30, [sp], 16], - [ret], - ] - -MASTER_WRITE: - # Dynamic speed - # Jump before pushing frame - - - type: asm_a64 - main_offset: 0x700050 - instructions: [ - [bl, _dynamicSpeed()] - ] - # Patch wind speed to take game speed - - - type: asm_a64 - main_offset: 0x747CC4 - instructions: [ - [adrp, x8, $game_speed], - [ldr, s6, [x8, $game_speed]] - ] - # Redirect DR timing - - - type: asm_a64 - main_offset: 0x6AA038 - instructions: [ - [adrp, x8, $dr_target], - [ldr, s0, [x8, $dr_target]] - ] -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0xB74BC0] - value_type: uint32 - value: ["VSYNC_TARGET", "VSYNC_TARGET"] - # Cutscenes in 30 FPS - - - type: compare - compare_type: "==" - compare_value_type: uint8 - compare_value: 1 - compare_address: [MAIN, 0xBD7F40] - value_type: refresh_rate - value: 60 - - - type: compare - compare_type: "==" - compare_value_type: uint8 - compare_value: 1 - compare_address: [MAIN, 0xBD7F40] - address: [VARIABLE, min_delta] - value: 0.0333333333 - - - type: compare - compare_type: "==" - compare_value_type: uint8 - compare_value: 1 - compare_address: [MAIN, 0xBD7F40] - address: [VARIABLE, max_delta] - value: 30 - - - type: compare - compare_type: "==" - compare_value_type: uint8 - compare_value: 1 - compare_address: [MAIN, 0xBD7F40] - address: [MAIN, 0xB74BC0] - value_type: uint32 - value: [2, 2] - - - type: compare - compare_type: "==" - compare_value_type: uint8 - compare_value: 1 - compare_address: [MAIN, 0xBD7F40] - address: [VARIABLE, dr_target] - value: 0.0166666666 diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F4F014108000/2284DFB25F387719.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F4F014108000/2284DFB25F387719.yaml deleted file mode 100644 index 6a38089..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F4F014108000/2284DFB25F387719.yaml +++ /dev/null @@ -1,32 +0,0 @@ -# Mythic Ocean 1.0.1 -# BID: 2284DFB25F387719 - -ALL_FPS: - # Disable bUseFixedFrameRate to untie game speed from framerate and unlock FPS - - - type: write - address: [MAIN, 0x63CEE78, 0x7A4] - address_unsafe: true - value_type: uint32 - # Default is 0x47, bUseFixedFrameRate |= 0x40 - # By writing 7 we are making sure that other flags are maintained: - # bAllowMultiThreadedAnimationUpdate |= 4 - # bOptimizeAnimBlueprintMemberVariableAccess |= 2 - # bCanBlueprintsTickByDefault |= 1 - value: 7 - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x63A23A8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x63CF748, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing - diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F6701FED4000/7CE83658C7B53BB6.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F6701FED4000/7CE83658C7B53BB6.yaml deleted file mode 100644 index 41ab873..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F6701FED4000/7CE83658C7B53BB6.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# The Legend of Heroes: Trails through Daybreak II 1.0.1 -# BID: 7CE83658C7B53BB6 - -unsafeCheck: true - -ALL_FPS: - # REF: 88 01 80 52 C1 03 80 52 28 4D 28 9B 29 00 80 52, first ADRP + ADD below it - - - type: evaluate_write - address: [MAIN, 0x6E2998, 0x34] - value_type: uint32 - value: FPS_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F6701FED4000/EBB5459731354538.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F6701FED4000/EBB5459731354538.yaml deleted file mode 100644 index ed82bd5..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F6701FED4000/EBB5459731354538.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# The Legend of Heroes: Trails through Daybreak II 1.0.2 -# BID: EBB5459731354538 - -ALL_FPS: - # REF: 88 01 80 52 C1 03 80 52 28 4D 28 9B 29 00 80 52, first ADRP + ADD below it - - - type: evaluate_write - address: [MAIN, 0x6E2998, 0x34] - value_type: uint32 - value: FPS_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F7201D1B0000/3BBD72F0EB13C1AE.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F7201D1B0000/3BBD72F0EB13C1AE.yaml deleted file mode 100644 index 8ace135..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F7201D1B0000/3BBD72F0EB13C1AE.yaml +++ /dev/null @@ -1,13 +0,0 @@ -# Ancient Weapon Holly 1.7.1 -# BID: 3BBD72F0EB13C1AE - -unsafeCheck: true - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - # Required for main character to not have jittery movement - - - type: evaluate_write - address: [MAIN, 0x5538BA0, 0x48] - value_type: float - value: "1 / FPS_TARGET" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F7201D1B0000/BF3F18101CBCFB33.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F7201D1B0000/BF3F18101CBCFB33.yaml deleted file mode 100644 index 4b2b30a..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F7201D1B0000/BF3F18101CBCFB33.yaml +++ /dev/null @@ -1,13 +0,0 @@ -# Ancient Weapon Holly 1.7.0 -# BID: BF3F18101CBCFB33 - -unsafeCheck: true - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - # Required for main character to not have jittery movement - - - type: evaluate_write - address: [MAIN, 0x5538B20, 0x48] - value_type: float - value: "1 / FPS_TARGET" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F7901118C000/668FE05AA1AAC5A1.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F7901118C000/668FE05AA1AAC5A1.yaml deleted file mode 100644 index bebbe4e..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F7901118C000/668FE05AA1AAC5A1.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# Five Nights at Freddy's: Help Wanted 1.25 -# BID: 668FE05AA1AAC5A1 - -ALL_FPS: - # r.VSync - - - type: write - address: [MAIN, 0x49A0588, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x5534630, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F7E00C70E000/0C00FC37B0610FBD.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F7E00C70E000/0C00FC37B0610FBD.yaml deleted file mode 100644 index 740dac5..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F7E00C70E000/0C00FC37B0610FBD.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Hogwarts Legacy 1.0.5 -# BID: 0C00FC37B0610FBD - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0xA42C688, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xA4603A0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x9C0EED0, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F7E00C70E000/1C42BC734E792AFB.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F7E00C70E000/1C42BC734E792AFB.yaml deleted file mode 100644 index 1e5d3ea..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F7E00C70E000/1C42BC734E792AFB.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Hogwarts Legacy 1.0.3 -# BID: 1C42BC734E792AFB - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget = 1000/FPS cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0xA427688, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xA45B3A0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x9C09EB0, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F7E00C70E000/2980E59C32A0E147.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F7E00C70E000/2980E59C32A0E147.yaml deleted file mode 100644 index ae469c7..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F7E00C70E000/2980E59C32A0E147.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Hogwarts Legacy 1.0.4 -# BID: 2980E59C32A0E147 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget = 1000/FPS cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0xA42B688, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0xA45F3A0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x9C0DEC0, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F8100B982000/3CAC2B84D43AF415.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F8100B982000/3CAC2B84D43AF415.yaml deleted file mode 100644 index 2df72dc..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F8100B982000/3CAC2B84D43AF415.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Monster Energy Supercross - The Official Videogame 2 1.0.6 -# BID: 3CAC2B84D43AF415 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x8B1ACB0, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8B44E30, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x82D7990, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F85018A14000/2EEE840599DC7021.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F85018A14000/2EEE840599DC7021.yaml deleted file mode 100644 index fe7a8b2..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F85018A14000/2EEE840599DC7021.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# 刀劍神域 碎夢邊境 / 소드 아트 온라인 프랙처드 데이드림 1.5.2.0 -# BID: 2EEE840599DC7021 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x8676768, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x86B12E0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x7EB0F88, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F8D01810E000/33DBE39C8A83F1E6.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F8D01810E000/33DBE39C8A83F1E6.yaml deleted file mode 100644 index e772644..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F8D01810E000/33DBE39C8A83F1E6.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# エンドリング - エクスティンクション イズ フォーエバー 1.3.0 -# BID: 33DBE39C8A83F1E6 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x7453898, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # r.VSync - - - type: write - address: [MAIN, 0x6C85E08, 0] - value_type: int32 - value: [0, 0] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7481468, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F8F00C4F2000/BC714E2D7D32AB41.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F8F00C4F2000/BC714E2D7D32AB41.yaml deleted file mode 100644 index 7d2ba02..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F8F00C4F2000/BC714E2D7D32AB41.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# DC Super Hero Girls: Teen Power 1.0.1 -# BID: BC714E2D7D32AB41 -# Game stores textures inside fixed size class, so it's hard to get triple buffer - -ALL_FPS: - # Max time delta - - - type: evaluate_write - address: [MAIN, 0x1225EC8, 0x1C] - address_unsafe: true - value_type: float - value: ["(1 / FPS_TARGET) - 0.0001"] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F8F014190000/AF7114F019CE6E1D.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F8F014190000/AF7114F019CE6E1D.yaml deleted file mode 100644 index 6980305..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100F8F014190000/AF7114F019CE6E1D.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Darksiders III 1.0.1 -# BID: AF7114F019CE6E1D - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) rounded to 1 decimal - - - type: evaluate_write - address: [MAIN, 0x64F2160, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x64E86B0, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FA2019AC2000/91CE601F6A7174CF.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FA2019AC2000/91CE601F6A7174CF.yaml deleted file mode 100644 index 3f81710..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FA2019AC2000/91CE601F6A7174CF.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# TT Isle of Man: Ride on the Edge 3 1.7.0 -# BID: 91CE601F6A7174CF - -unsafeCheck: true - -ALL_FPS: - # OptimalFrameDuration_ms = (1000/FPS) - (0.07 * (1000/30) - - - type: evaluate_write - address: [MAIN, 0x2CB575C] - value_type: float - value: "FRAMETIME_TARGET - (0.07 * (1000/30))" diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FAD01861C000/D84426C8D6B8D947.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FAD01861C000/D84426C8D6B8D947.yaml deleted file mode 100644 index b2b8bf1..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FAD01861C000/D84426C8D6B8D947.yaml +++ /dev/null @@ -1,11 +0,0 @@ -# Broken Roads 1.2.11059 -# BID: D84426C8D6B8D947 - -ALL_FPS: - # Kittehface.Framework20.ResolutionScaler_TypeInfo - - - type: evaluate_write - address: [MAIN, 0x688C058, 0xB8, 0x10] - address_unsafe: true - value_type: float - value: FRAMETIME_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FB70133C0000/019FBFE7738EA314.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FB70133C0000/019FBFE7738EA314.yaml deleted file mode 100644 index bbf4197..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FB70133C0000/019FBFE7738EA314.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# 진・여신전생5 1.0.2 -# BID: 019FBFE7738EA314 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals - - - type: evaluate_write - address: [MAIN, 0x75F81D0, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7621D70, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FB90103DE000/4BED8F28C0F34C86.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FB90103DE000/4BED8F28C0F34C86.yaml deleted file mode 100644 index 8dc61d5..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FB90103DE000/4BED8F28C0F34C86.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Journey To The Savage Planet 01.02 -# BID: 4BED8F28C0F34C86 - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x7235890, 0] - value_type: float - value: ["FRAMETIME_TARGET * 0.975", "FRAMETIME_TARGET * 0.975"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x7259F98, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x6A04498, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD00F5F6000/5EFAB20F5C1F0F68.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD00F5F6000/5EFAB20F5C1F0F68.yaml deleted file mode 100644 index 8ec9751..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD00F5F6000/5EFAB20F5C1F0F68.yaml +++ /dev/null @@ -1,26 +0,0 @@ -# Remothered: Broken Porcelain 2.0.0 -# BID: 5EFAB20F5C1F0F68 -# Game stores textures inside fixed size class, so it's hard to get triple buffer - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 1 decimals - - - type: evaluate_write - address: [MAIN, 0x58210E8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x584D710, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x4CB8880, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD013AB6000/038858A1EC679156.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD013AB6000/038858A1EC679156.yaml deleted file mode 100644 index 27128a6..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD013AB6000/038858A1EC679156.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# SnowRunner 1.0.36 -# BID: 038858A1EC679156 -# Just search for 0x42055555 - -unsafeCheck: true - -MASTER_WRITE: -# Redirect DR frametime target to MAIN+0x3040F00 - - - type: bytes - main_offset: 0x18F8174 - value_type: uint32 - value: - - 0x9000BA4A # adrp x10, #0x3040000 - - 0xBD4F0142 # ldr s2, [x10, #0xf00] - # default value - - - type: bytes - main_offset: 0x3040F00 - value_type: float - value: 33.3333333333 -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x3040F00] - value_type: float - value: FRAMETIME_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD013AB6000/0D96442AC907A3F8.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD013AB6000/0D96442AC907A3F8.yaml deleted file mode 100644 index ed4e23e..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD013AB6000/0D96442AC907A3F8.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# SnowRunner 1.0.34 -# BID: 0D96442AC907A3F8 -# Just search for 0x42055555 - -unsafeCheck: true - -MASTER_WRITE: -# Redirect DR frametime target to MAIN+0x3040F00 - - - type: bytes - main_offset: 0x18F7E04 - value_type: uint32 - value: - - 0xB000BA4A - - 0xBD4F0142 - # default value - - - type: bytes - main_offset: 0x3040F00 - value_type: float - value: 33.3333333333 -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x3040F00] - value_type: float - value: FRAMETIME_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD013AB6000/1B45F85E3DE5615D.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD013AB6000/1B45F85E3DE5615D.yaml deleted file mode 100644 index 31a0406..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD013AB6000/1B45F85E3DE5615D.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# SnowRunner 1.0.32 -# BID: 1B45F85E3DE5615D -# Just search for 0x42055555 - -unsafeCheck: true - -MASTER_WRITE: -# Redirect DR frametime target to MAIN+0x2FD1F00 - - - type: bytes - main_offset: 0x18A0424 - value_type: uint32 - value: - - 0xB000B98A - - 0xBD4F0142 - # default value - - - type: bytes - main_offset: 0x2FD1F00 - value_type: float - value: 33.3333333333 -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x2FD1F00] - value_type: float - value: FRAMETIME_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD013AB6000/3E9AC9266BB21FC4.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD013AB6000/3E9AC9266BB21FC4.yaml deleted file mode 100644 index 416b77c..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD013AB6000/3E9AC9266BB21FC4.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# SnowRunner 1.0.39 -# BID: 3E9AC9266BB21FC4 -# Just search for 0x42055555 - -unsafeCheck: true - -MASTER_WRITE: -# Redirect DR frametime target to MAIN+0x309AF00 - - - type: bytes - main_offset: 0x1933834 - value_type: uint32 - value: - - 0xF000BB2A # adrp x10, #0x309A000 - - 0xBD4F0142 # ldr s2, [x10, #0xf00] - # default value - - - type: bytes - main_offset: 0x309AF00 - value_type: float - value: 33.3333333333 -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x309AF00] - value_type: float - value: FRAMETIME_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD013AB6000/44C6A5004C499464.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD013AB6000/44C6A5004C499464.yaml deleted file mode 100644 index 8b14ffc..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD013AB6000/44C6A5004C499464.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# SnowRunner 1.0.31 -# BID: 44C6A5004C499464 -# Just search for 0x42055555 - -unsafeCheck: true - -MASTER_WRITE: -# Redirect DR frametime target to MAIN+0x2FB0F00 - - - type: bytes - main_offset: 0x1884F24 - value_type: uint32 - value: - - 0x9000B96A - - 0xBD4F0142 - # default value - - - type: bytes - main_offset: 0x2FB0F00 - value_type: float - value: 33.3333333333 -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x2FB0F00] - value_type: float - value: FRAMETIME_TARGET diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD013AB6000/53531030A4199B74.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD013AB6000/53531030A4199B74.yaml deleted file mode 100644 index eed9309..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD013AB6000/53531030A4199B74.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# SnowRunner 1.0.38 -# BID: 53531030A4199B74 -# Just search for 0x42055555 - -unsafeCheck: true - -MASTER_WRITE: -# Redirect DR frametime target to MAIN+0x309FF00 - - - type: bytes - main_offset: 0x1936124 - value_type: uint32 - value: - - 0xB000BB4A # adrp x10, #0x309F000 - - 0xBD4F0142 # ldr s2, [x10, #0xf00] - # default value - - - type: bytes - main_offset: 0x309FF00 - value_type: float - value: 33.3333333333 -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x309FF00] - value_type: float - value: FRAMETIME_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD013AB6000/54551AEABF6E1F41.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD013AB6000/54551AEABF6E1F41.yaml deleted file mode 100644 index b7a37ae..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD013AB6000/54551AEABF6E1F41.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# SnowRunner 1.0.40 -# BID: 54551AEABF6E1F41 -# Just search for 0x42055555 in case of REF not working - -DECLARATIONS: - - - type: variable - name: dr_target - value_type: float - default_value: 33.333333 - evaluate: FRAMETIME_TARGET -MASTER_WRITE: -# Redirect DR frametime target -## REF: 01 04 0C 5E 00 10 2E 1E - - - type: asm_a64 - main_offset: 0x193CEA8 - instructions: [ - [adrp, x10, $dr_target], - [ldr, s2, [x10, $dr_target]] - ] diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD013AB6000/8C7A99CBD1AEA208.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD013AB6000/8C7A99CBD1AEA208.yaml deleted file mode 100644 index 459319e..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD013AB6000/8C7A99CBD1AEA208.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# SnowRunner 1.0.42 -# BID: 8C7A99CBD1AEA208 -# Just search for 0x42055555 in case of REF not working - -DECLARATIONS: - - - type: variable - name: dr_target - value_type: float - default_value: 33.333333 - evaluate: FRAMETIME_TARGET -MASTER_WRITE: -# Redirect DR frametime target -## REF: 01 04 0C 5E 00 10 2E 1E - - - type: asm_a64 - main_offset: 0x1944154 - instructions: [ - [adrp, x10, $dr_target], - [ldr, s2, [x10, $dr_target]] - ] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD013AB6000/9976A5B49537F7D7.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD013AB6000/9976A5B49537F7D7.yaml deleted file mode 100644 index 67614f8..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD013AB6000/9976A5B49537F7D7.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# SnowRunner 1.0.35 -# BID: 9976A5B49537F7D7 -# Just search for 0x42055555 - -unsafeCheck: true - -MASTER_WRITE: -# Redirect DR frametime target to MAIN+0x3041F00 - - - type: bytes - main_offset: 0x18F82B4 - value_type: uint32 - value: - - 0xB000BA4A - - 0xBD4F0142 - # default value - - - type: bytes - main_offset: 0x3041F00 - value_type: float - value: 33.3333333333 -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x3041F00] - value_type: float - value: FRAMETIME_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD013AB6000/B37F6B200EF31DFC.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD013AB6000/B37F6B200EF31DFC.yaml deleted file mode 100644 index 6c0ae98..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD013AB6000/B37F6B200EF31DFC.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# SnowRunner 1.0.41 -# BID: B37F6B200EF31DFC -# Just search for 0x42055555 in case of REF not working - -DECLARATIONS: - - - type: variable - name: dr_target - value_type: float - default_value: 33.333333 - evaluate: FRAMETIME_TARGET -MASTER_WRITE: -# Redirect DR frametime target -## REF: 01 04 0C 5E 00 10 2E 1E - - - type: asm_a64 - main_offset: 0x1944014 - instructions: [ - [adrp, x10, $dr_target], - [ldr, s2, [x10, $dr_target]] - ] \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD013AB6000/CD9E844E29E8CA80.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD013AB6000/CD9E844E29E8CA80.yaml deleted file mode 100644 index 619a82d..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD013AB6000/CD9E844E29E8CA80.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# SnowRunner 1.0.37 -# BID: CD9E844E29E8CA80 -# Just search for 0x42055555 - -unsafeCheck: true - -MASTER_WRITE: -# Redirect DR frametime target to MAIN+0x3090F00 - - - type: bytes - main_offset: 0x192A254 - value_type: uint32 - value: - - 0xD000BB2A # adrp x10, #0x3090000 - - 0xBD4F0142 # ldr s2, [x10, #0xf00] - # default value - - - type: bytes - main_offset: 0x3090F00 - value_type: float - value: 33.3333333333 -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x3090F00] - value_type: float - value: FRAMETIME_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD013AB6000/EA6728F9AE46C055.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD013AB6000/EA6728F9AE46C055.yaml deleted file mode 100644 index 2b8bef0..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FBD013AB6000/EA6728F9AE46C055.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# SnowRunner 1.0.33 -# BID: EA6728F9AE46C055 -# Just search for 0x42055555 - -unsafeCheck: true - -MASTER_WRITE: -# Redirect DR frametime target to MAIN+0x3041F00 - - - type: bytes - main_offset: 0x18F8A94 - value_type: uint32 - value: - - 0xB000BA4A - - 0xBD4F0142 - # default value - - - type: bytes - main_offset: 0x3041F00 - value_type: float - value: 33.3333333333 -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x3041F00] - value_type: float - value: FRAMETIME_TARGET \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FC10159EC000/0AFE1AE664D9AFA1.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FC10159EC000/0AFE1AE664D9AFA1.yaml deleted file mode 100644 index abef511..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FC10159EC000/0AFE1AE664D9AFA1.yaml +++ /dev/null @@ -1,14 +0,0 @@ -# Space Marshals 3 1.0.0 -# BID: 0AFE1AE664D9AFA1 - -ALL_FPS: - # FPS Lock - ## REF: CAppSWITCH xref, 0x10 above address storing pointer - - - type: evaluate_write - address: [MAIN, 0x5E14D0] - value_type: double - value: "1 / FPS_TARGET" - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FD0014B76000/76EB8E0320472553.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FD0014B76000/76EB8E0320472553.yaml deleted file mode 100644 index 1a80ab3..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FD0014B76000/76EB8E0320472553.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# There Is No Light 1.0.3 -# BID: 76EB8E0320472553 - -ALL_FPS: - # UnityEngine.Time::fixedDeltaTime - - - type: evaluate_write - address: [MAIN, 0x5E6BCA0, 0x48] - value_type: float - value: "1 / FPS_TARGET" \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FD101186C000/BF0088C59D7E97C0.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FD101186C000/BF0088C59D7E97C0.yaml deleted file mode 100644 index bb17c52..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FD101186C000/BF0088C59D7E97C0.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Life is Strange 2 1.1.0 -# BID: BF0088C59D7E97C0 - -unsafeCheck: true - -ALL_FPS: - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x8082C68, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x78412B0, 0] - value_type: uint32 - value: [0, 0] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FD70134FA000/4246AC9E465556D6.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FD70134FA000/4246AC9E465556D6.yaml deleted file mode 100644 index 96d4467..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FD70134FA000/4246AC9E465556D6.yaml +++ /dev/null @@ -1,37 +0,0 @@ -# 드래곤볼 Z 카카로트 + 새로운 각성 편 1.60 -# BID: 4246AC9E465556D6 - -ALL_FPS: - # Disable bUseFixedFrameRate in cutscenes to unlock framerate - - - type: write - address: [MAIN, 0x996A558, 0x810] - address_unsafe: true - value_type: uint32 - # Default is 0x47 in cutscenes, bUseFixedFrameRate |= 0x40 - # By writing 7 we are making sure that other flags are maintained: - # bAllowMultiThreadedAnimationUpdate |= 4 - # bOptimizeAnimBlueprintMemberVariableAccess |= 2 - # bCanBlueprintsTickByDefault |= 1 - value: 7 - # r.DynamicRes.FrameTimeBudget - - - type: evaluate_write - address: [MAIN, 0x9935498, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x996AE08, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - # r.VSync - - - type: write - address: [MAIN, 0x8DD7418, 0] - value_type: int32 - value: [0, 0] - - - type: block - what: timing \ No newline at end of file diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FE201680A000/8F2536786EECCEE5.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FE201680A000/8F2536786EECCEE5.yaml deleted file mode 100644 index f6efc31..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FE201680A000/8F2536786EECCEE5.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# Arise: A Simple Story - Definitive Edition 1.0.5 -# BID: 8F2536786EECCEE5 - -unsafeCheck: true - -ALL_FPS: - # r.DynamicRes.FrameTimeBudget (1000/FPS) rounded to two decimals - - - type: evaluate_write - address: [MAIN, 0x712C4A8, 0] - value_type: float - value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] - # t.MaxFPS - - - type: evaluate_write - address: [MAIN, 0x715A0F8, 0] - value_type: float - value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] - - - type: block - what: timing diff --git a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FF500E34A000/92C78BB3DCBBC3F7.yaml b/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FF500E34A000/92C78BB3DCBBC3F7.yaml deleted file mode 100644 index 962cb69..0000000 --- a/variants/oc/SaltySD/plugins/FPSLocker/patches/0100FF500E34A000/92C78BB3DCBBC3F7.yaml +++ /dev/null @@ -1,16 +0,0 @@ -# Xenoblade Chronicles 1.1.2 -# BID: 92C78BB3DCBBC3F7 - -ALL_FPS: - - - type: evaluate_write - address: [MAIN, 0x13BFDA0] - value_type: int32 - value: [VSYNC_TARGET, VSYNC_TARGET] - # UI Speed (mm::mtl::PtrSingleton::sys(void)::s_instance) - - - type: evaluate_write - address: [MAIN, 0x14016D8, 0x70] - address_unsafe: true - value_type: float - value: "1 / FPS_TARGET" diff --git a/variants/oc/switch/.PatchExtractor.nro.star b/variants/oc/switch/.PatchExtractor.nro.star new file mode 100644 index 0000000..e69de29 diff --git a/variants/oc/switch/PatchExtractor.nro b/variants/oc/switch/PatchExtractor.nro new file mode 100644 index 0000000000000000000000000000000000000000..e1cc5027ff70883e12ba692b73934e76334b3a7c GIT binary patch literal 287172 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%0D-09PqV}DlTJ&Z%| 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 literal 0 HcmV?d00001