LittleBigRefresh / Refresh

A second-generation custom server for LittleBigPlanet that focuses on quality of life features and improving user experience.
https://lbp.littlebigrefresh.com
GNU Affero General Public License v3.0
67 stars 25 forks source link

[Proposal] Allow the same level to have a different root level hash per game #477

Open Beyley opened 4 months ago

Beyley commented 4 months ago

Motivation

Some modded assets (LBP1 GMATs/scripts) do not load (or do not work correctly) in newer versions of the game, and some level mechanics may not function in newer versions (say, a level is cheesable on LBP3 by just moving back a bunch of layers, or a visual LBP1 effect is broken in LBP2, making the level unplayable).

While a level creator could work around these issues by uploading LBP1/2/3 specific versions and tagging them as such, you could only enforce that for LBP1 (see #401) as lbp2Only does not exist. This also has the issue of stats/scores not being shared, which is not ideal for creators when reviews/comments are split between multiple copies of the level.

Description

I propose that GameVersion and RootResource be removed from GameLevel and instead we store a set of hashes

string? Lbp1RootResource
string? Lbp2RootResource
string? Lbp3RootResource
string? LbpVitaRootResource
string? LbpPspRootResource
string? LbpBetaRootResource

Along with the flags

string? Lbp1Only
string? Lbp2Only

For an example of how this would work, when searching for LBP2 compatible levels, instead of searching for GameVersion == LBP2 or LBP1, we search for "has lbp1 root resource and not lbp1 only, OR has lbp2 root resource", for LBP3 its "has lbp1 root resource and not lbp1 only, or has lbp2 root resource and not lbp2 only, or has lbp3 root resource" for vita its just "has vita root resource", same with PSP, LBP1, and Beta

This would allow people to make the same level for all 6 game versions with different tweaks/fixes depending on the game, and have it work as intended in all of them. This would be especially neat for cross-platform levels, which isnt possible normally, say Vita and LBP2 (its possible to port levels between the games if you are dedicated enough with toolkit), or PSP and LBP1 (its possible to port PSP levels to work on the mainline games, aidan has a tool for it). All while matching ratings/scores between the versions

This doesnt really touch many parts of Refresh's codebase, and still follows KISS. Theres very little logic that would need to be added, since almost all of the work to do this is complete thanks to the universal assets support, and our improved FromOld work.

I'm not sure how this would look in the site API side for merging multiple levels, itd just be some endpoint "you can merge two GameLevel you uploaded together through an API endpoint, and you pick which gamelevel to use the metadata/stats from, and the other one is just deleted".

On the site this can just be displayed like Published for LBP1, LBP2, LBPV.

When it comes to unpublishing a level, i think when you unpublish, it should only unpublish the resource which matches the current game, say removes the vita resource on vita, or the psp resource on psp, or if you have LBP1 and LBP2, unpublishing on LBP2/LBP3 would remove the LBP2 one, while unpublishing on LBP1 would only remove the LBP1 hash. The site unpublish button should remove the level completely though, with extra buttons on the site to remove specific game hashes aswell. This is mainly because when updating a level on PSP, it fully unpublishes the old one first, you dont want an update to your PSP resource to remove every other game aswell

Arcadius2006 commented 4 months ago

the only thing i'm not sure on is the Vita/PSP cross platform stuff, but otherwise this would be a great addition

even LBP1 levels tend to break a bit in LBP2 (because tags suddenly become visible) so it'd be useful to be able to upload a LBP2 specific version

the only question is how would uploading levels like this work - do you just "update" the level in the game you wanna add an additional resource hash to?

Beyley commented 4 months ago

the only thing i'm not sure on is the Vita/PSP cross platform stuff, but otherwise this would be a great addition

If we were to do it for LBP1/2/3, might as well for all of them? it honestly would complicate the code more to disallow it. its not out of the question that someone would port their PSP level to PS3 (aidan has a tool which does it semi-automatically). and same with LBP2/Vita, if someone was dedicated enough, they totally could port an LBP2 level to vita using toolkit and some custom assets.

the only question is how would uploading levels like this work - do you just "update" the level in the game you wanna add an additional resource hash to?

read the third to last paragraph on the issue

Arcadius2006 commented 4 months ago

with the 1st point i was mostly talking about PSP - while it is true that you can port levels between the two games, they run on entirely different engines and thusly play completely differently, so i wouldn't be sure if letting a user merge a PSP level with a vita/PS3 only would be good

as for the latter, you will be only able to merge levels using the website? i think you should be able to do it from within the game itself as i'm not sure if people would be willing to export their levels using toolkit for this

Beyley commented 4 months ago

as for the latter, you will be only able to merge levels using the website? i think you should be able to do it from within the game itself as i'm not sure if people would be willing to export their levels using toolkit for this

i think you misunderstand what i wrote you upload both copies ingame and then merge them on the site