UPlasma development - Play Plasma from the Unity engine

General debates and discussion about the Guild of Writers and Age creation

Re: Idea: Play Plasma from another engine

Postby Emor D'ni Lap » Tue Jun 05, 2018 12:33 pm

Respect is important, but legally the big deal is whether we (or anyone) is distributing Cyan's assets without their explicit permission. As long as you avoid that, you avoid the largest concern.

Setting aside any questions of modifying Cyan's assets, I get your point.
But it seems this whole model is reliant upon Cyan continuing to provide those assets, which are currently offered with the intent that users will follow the MO:ULa download-and-install-and-play-in-Plasma pipeline. If that pipeline is disrupted by another, better engine, will this model's pipeline hold?

(Yeah, I'm probably over-thinking this, jumping too far ahead. Fuggedaboudit.)
Emor D'ni Lap
 
Posts: 87
Joined: Sun Jan 30, 2011 12:12 pm

Re: Idea: Play Plasma from another engine

Postby Sirius » Tue Jun 05, 2018 12:49 pm

Thank you all for your kind words ! :D

Emor, you raised a few questions that I find rather interesting !

However, I'm going to go into really theoretical stuff here. The importer isn't nearly as complete as I'm going to make it sound, and a lot of the issues and features I'm going to discuss are theoretical too. So here we come to Theoretical land. What ifs.

Emor wrote:Your adaptation of Relto to the Unity renderer really seems close enough to the Plasma "look" that seasoned explorers would feel at home there. And that's what it would take for players to migrate to another engine: it would have to look as-good-or-better-than the Plasma version, without being a jarring transition.

I'm really glad you think so, because even now I still have doubts about the usefulness of switching engines without changing graphics. At first it will be Uru with more bugs and less features (probably barely playable without tons of patches :? ), so I'm not even sure people will want to bother with it... Like Deledrius said, it's old content on a new engine, not new content on a new engine. Remaking the old Ages with new graphics would be cool, but it's an equally complex topic and completely impossible without proving Cyan that it's a good idea.

However, if people ARE interested, it will open up a lot of possibilities... The GoW isn't a big community so it's hard to be sure of those things. I might ask for people's opinions on Reddit at some point, since there are more people there.

Emor wrote:One reason - among many - for moving to a different engine: our Age projects are essentially self-contained games unto themselves, but if you want to offer an Age to the public, they currently would have to download and install all of URU in order to play your one project. But with Unity, the engine can be packaged with your Age independently if you like; much more self-contained.

It's just the tip of the iceberg. Since the engine loads its content straight from Plasma games, you end up with a LOT of flexibility...
You can play all Plasma games without switching engines. ALL OF THEM. You could very well go into Todelmer with friends, then agree to meet up with them in Rowan Green, then go to a Fan-Age.
You can mod existing Cyan Ages, by loading your own content on top of it and replacing some objects via scripting. Create new areas, patch up some models, replace textures... Or even add new graphic effects.
You can download Fan-Ages (Unity or Plasma ones) from within the game, like DI does.
You can expand or override Uru gameplay at anytime. Add a player inventory, add racing cars to Minkata, go battle with spaceships in fan-Ages... you get the picture.
And the usual: VR, play on Mac, Linux, Android, etc.


Now I'm not going to lie: it also comes with several downsides. Most of it due to technical differences between Plasma and Unity.
The biggest problem is that a number of elements must be patched manually, which is why I'm only showing the Relto for now. Materials must almost always be re-coded by hand, and alpha blending isn't working as it did in Plasma. Animations break if they use more than 1 rotation. Some lights are enabled when they shouldn't. Fortunately, all of these can be community-made, and packaged in a single "patch" file. Fan-Ages are less prone to these issues since they are simpler.
The second biggest problem, is that content made for a version of Unity might not work in a later version, which would be very annoying as upgrading the version of Unity the engine uses might break Unity-made Fan-Ages... There are several workaround to this, but all are pretty annoying.


Deledrius wrote:This feels like two different ideas. If we're talking about standalone Ages that are part of an independent Uru story, you can make that in Unity without needing the baggage of converting an entire game. The only reason for encasing it in a Unity-ready Uru is because you want to integrate your ideas into that game, right?

It just makes things more convenient for everyone, IMHO... New players who have never heard of Uru but want to play Myst content can play without Uru. Uru players can play the new content without switching engines. Modders can reuse some parts of the engine instead of coding everything themselves (avatar, KI, savegames, multiplayers, scripting prefabs...).
Uru's community still exists for two main reasons: multiplayer, and fan content. Might as well make both accessible at all time.


Emor wrote:At some point, the gorilla in the room needs to be acknowledged:
would releasing URU content in another engine, with the necessary manual intervention and perhaps optional modification mentioned above, raise any I.P. issues?

The whole point of writing a complex PRP loader is to avoid such IP issues. Otherwise I'd convert those Ages by hand instead of going the long way around :lol:
But to be completely fair:
- The Unity PRP loader is completely legal, as I wrote it myself.
- the PRP reader library I'm using (HSPlasma) is definitely legal when used on MOUL content, because MOUL's engine is open source. The parts of it that can load Ages from other games (EoA) was written by analysing decompiled code from those engines, kinda like copying from memory someone else's painting, and adding your own touch. That sounds very messy for common folks like us, but AFAIK it's legal and is what Residual/ScummVM does.
- The patches required to fix materials and some logic are original content, so legal too. Fixing animations will require to copy Cyan's keyframe timing, but at worse those can be remade by hand.

So yeah, it still fares a lot better than the Offline-KI. Pretty sure we could come to an agreement with Cyan if need be.

Deledrius wrote:Respect is important, but legally the big deal is whether we (or anyone) is distributing Cyan's assets without their explicit permission.

Yeah. In truth I could make all the Ages pink with bunnies running everywhere, it wouldn't be Cyan's business what I or anyone executes on their PC. It's exclusively a matter of your own (bad) tastes, since it's not official. This is a random legit program which just accidentally happens to be able to play those games. Like ScummVM does with Riven.
With that said, I've always strived for respect for the original material even when I was experimenting with changing the lighting and materials a while ago.

And to finish, a small clarification:
Deledrius wrote:provide an installer that would automatically convert the Cyan-provided files

It doesn't need to be installed, nor does it need to process or download anything prior to running the engine (unlike Drizzle). Most likely, as soon as you launch it, it will auto-detect install paths, ask you if that's okay with you, and link you to the Cleft/Relto. "Converting" the Ages is done each time as you link to them, and doesn't need to write anything to the disk. It's closer in behavior to the Blender PRP importer.
User avatar
Sirius
 
Posts: 1506
Joined: Mon Jul 26, 2010 4:46 am
Location: France

Re: Idea: Play Plasma from another engine

Postby Deledrius » Tue Jun 05, 2018 1:05 pm

Sirius wrote:
Deledrius wrote:provide an installer that would automatically convert the Cyan-provided files

It doesn't need to be installed, nor does it need to process or download anything prior to running the engine (unlike Drizzle). Most likely, as soon as you launch it, it will auto-detect install paths, ask you if that's okay with you, and link you to the Cleft/Relto. "Converting" the Ages is done each time as you link to them, and doesn't need to write anything to the disk. It's closer in behavior to the Blender PRP importer.

Right, I was responding to Emor's suggestion of something less on-the-fly, as I was assuming it would make more sense for the large number of after-the-fact modifications he has in mind. But, from reading your other responses here it sounds like you're already doing that too, so perhaps I underestimated the necessity!
User avatar
Deledrius
Gehn Shard Admin
 
Posts: 1377
Joined: Mon Oct 01, 2007 1:21 pm

Re: Idea: Play Plasma from another engine

Postby Sirius » Tue Jun 05, 2018 1:46 pm

Deledrius wrote:Right, I was responding to Emor's suggestion of something less on-the-fly

Yeah, I was pretty sure you were responding to the suggestion, just wanted to make sure the thread didn't get too confusing... ;)

Indeed, post-import modifications was something I thought would be cool to provide to people, but in the end I'll probably use it myself to fix the nastier bugs :) I like the idea of having many hooks and customization options available... People are bound to do something fun and unexpected with it.

Oh, and while I'm at it, here is a nice picture.
Show Spoiler

I completely broke armature weighting after that while trying to improve it. Oh well, I'll find a fix, eventually...
User avatar
Sirius
 
Posts: 1506
Joined: Mon Jul 26, 2010 4:46 am
Location: France

Re: Idea: Play Plasma from another engine

Postby Emor D'ni Lap » Tue Jun 05, 2018 10:16 pm

Sirius, thanks for the clarification.
You're right, the structure of this converter was not clear to me.

If I understand it correctly now, as a player loads or links to any given Age, that data will be called up (from a complete MO:ULa installation on the player's machine?) and processed in the Unity engine.
In order to perform this on-the-fly conversion and make this Unity application behave correctly, I'm imagining it'll need to know an enormous amount of info on not only each and every light and texture setting on every object in a given Age, but (as you've already mentioned) all the various responders, detectors, animations, physics, subworlds, etc. etc. that are unique to each Age, and possibly some that cannot be converted but have to be completely rewritten for Unity...all of which would be built into this Unity app, ready for the player whenever they decide to link here or there.

Is this the correct picture of what you're envisioning and coding?
Emor D'ni Lap
 
Posts: 87
Joined: Sun Jan 30, 2011 12:12 pm

Re: Idea: Play Plasma from another engine

Postby Sirius » Tue Jun 05, 2018 11:50 pm

Exactly. I'm teaching Unity how to convert PRP objects to Unity equivalents on-the-fly, and how these objects should behave with the avatar. Which means most of the time Unity will figure out how to play these Ages on its own.
For a few tasks that are too complex to import correctly, I'm making patches specific to each Age to give it a nudge in the right direction.
User avatar
Sirius
 
Posts: 1506
Joined: Mon Jul 26, 2010 4:46 am
Location: France

Re: Idea: Play Plasma from another engine

Postby Sirius » Mon Jun 11, 2018 11:40 am

Smallish update.

Bone rigging is repaired (Kemo trees sway correctly yay ! 8-) no picture as I haven't fixed the materials in this Age.)
Now that I've got visuals figured out (kindof), I'm focusing on bringing back logic.

Up until now, moving around in the scene was impossible, since there was absolutely no logic for the avatar. Those screenshots I took were from the debug view, not the game itself.

Well, that changed. I can now explore (in first person for now), run, walk, jump, sprint, look around, toggle flymode, and even have a cursor that can click on objects ! (although clickable don't work 100% yet).

Next step was setting up all Plasma-on-Unity components (Logic Modifiers, Picking detectors, Object In Volume Detectors, etc). That required some time, but was not really challenging.
After that came detecting clicks on objects and when the avatar entered a region. A real piece of cake, since Unity handles it for you.

And now, I have to make those "click" and "region" events move through all Plasma components... which is the real challenge.

Oh boy, Plamza is seriously convoluted ! It's hard to even begin describing it. Theoretically it's not that complex: a Logic Modifier checks several conditions (avatar in region, clicking object, etc - most of them consist of two sub-objects), and when all of them are satisfied, it triggers a networked Responder, which is essentially a list of animations and sounds to play.
Problem is, communication between objects is a clusterfuck of messages with no direct receiver, with objects interception messages for random reasons. And networking hacked-in everywhere.

Ugh... Okay, I probably need to stop mimicking Plasma 1:1, and instead hack a (hopefully) sane system.


Anyway... I'm doing all my tests in Ahnonay's Cathedral, which means I fixed the materials for this Age.
Show Spoiler
User avatar
Sirius
 
Posts: 1506
Joined: Mon Jul 26, 2010 4:46 am
Location: France

Re: Idea: Play Plasma from another engine

Postby Aloys » Fri Jun 15, 2018 8:18 am

I like where your Plasma ScummVM idea is going. :p I've been thinking about this a bit lately and I really think it's a good idea. That might just be the best way to make Uru more flexible, and easier to create content for.
As an artist, and not a Max user, I look at the current Cyan tools, and I'm not enticed to move forward with those. :( As for Korman/PyPRP, it's a great set of tools, but still using Unity would be *so* much simpler and more flexible... And in turn it would just make Age creation accessible for many more people. That might just succeed in making this little community grow again.

It would be a lot of work to properly do that though.. You're doing great so far from what I can see, but I guess it wouldn't hurt if you could get more developpers on board... >_> Like, coders who know a bit about Age making and who read this forum.. >_>

changing graphics. (...) Remaking the old Ages with new graphics

I would strongly advise against 'upgrading' the visuals. Making a 'modern' game with realistic graphics is a *lot* of work. Way too much. Making Ages is hard enough, and the number of people making them is small enough. It would only raise the entry barrier even more. I know many people would love that and think it might make Uru new again and more appealing. And that might be correct. But it's just too much work.
Now, obviously in Unity nothing actually stops anyone from adding in complicated custom shaders, but then that's the individual responsability of the author.

I might ask for people's opinions on Reddit at some point, since there are more people there.

That's a good idea. I'm on Reddit under the name GregLittlefield.

Plamza is seriously convoluted ! It's hard to even begin describing it.

I was always under the impression that it started as a single player off line game and then was turned into a online game; which is not a good idea.
User avatar
Aloys
 
Posts: 1968
Joined: Sun Oct 21, 2007 7:57 pm
Location: France (GMT +1)

Re: Idea: Play Plasma from another engine

Postby Sirius » Sat Jun 16, 2018 4:01 am

Update: clickables can now be clicked, detector regions work, and they send messages when triggered. However receiver objects are a bit dumb and don't know yet what to do with said messages. I'm working on it.
I also reworked physics importing to support convex hull and fix a few issues with colliders I didn't mention. Kickables mostly work.


Aloys wrote:As an artist, and not a Max user, I look at the current Cyan tools, and I'm not enticed to move forward with those. :( As for Korman/PyPRP, it's a great set of tools, but still using Unity would be *so* much simpler and more flexible...

That's for sure. Korman does a great job (I'm really fond of the NodeTree system it uses), but Unity really wins when it comes to simplicity and flexibility. You can easily make a clickable in Unity with 1 script versus the 10 or so nodes required in Plasma/Korman. And being able to drag'n'drop objects everywhere is pretty cool too.

Aloys wrote:It would be a lot of work to properly do that though.. You're doing great so far from what I can see, but I guess it wouldn't hurt if you could get more developpers on board... >_> Like, coders who know a bit about Age making and who read this forum.. >_>

Dunno how many of them have time to spare besides Gehn and Korman. But I'm fine with working on it alone for now, as that's less pressure for me. And as you can see, when I'm working on it, I'm working fast.
I will open source it when it works well enough, though.

Aloys wrote:I would strongly advise against 'upgrading' the visuals. Making a 'modern' game with realistic graphics is a *lot* of work. Way too much.

I've already tried that for some Ages, and while it was fun, I have to admit it's too tedious to do for the whole game and often results in inconsistent quality. Plasma visuals will do just fine for a while longer. Builders will be free to use the whole range of Unity features if they desire.

Aloys wrote:I was always under the impression that it started as a single player off line game and then was turned into a online game; which is not a good idea.

Oh, definitely. Well, Uru was multiplayer from the start, but Plasma itself was used for realMyst before being repurposed for Uru. And it was even called HeadSpin before Cyan bought it, so it's been around for a long time.
I often speak ill of Plasma, but to be perfectly honest given its history I'm impressed how well it works, even on modern PCs.
User avatar
Sirius
 
Posts: 1506
Joined: Mon Jul 26, 2010 4:46 am
Location: France

Re: Idea: Play Plasma from another engine

Postby Sirius » Mon Jul 02, 2018 10:25 am

Heya everyone. Today we got some basic interaction working !
[VIDEO!]
(Youtube kinda ruined the already-poor image quality, will try to do better next time)

I really coded the bare minimum for this to work (that's still more work than it sounds). It might actually be the only interaction out of the whole game that actually works :P But support for the rest will come as I restore more Ages... The book I'm clicking in the video registers the click, but since it's Python controlled it doesn't do anything yet.

Speaking of which. Most interactions in Uru are Python-driven. So it's time to integrate Python scripting into the project !
python_works.jpg
python_works.jpg (11.29 KiB) Viewed 4682 times

See this message ? It means the Python script for the book was successfully loaded ! (it's extracted at runtime from the game's PAK archives).
Okay, so the script is running, but it's completely cut off from the rest of the game. Now I have to integrate the Plasma Python API into Unity... The API itself has over 2000 functions - I think I'll just implement the bare minimum there too :shock:
User avatar
Sirius
 
Posts: 1506
Joined: Mon Jul 26, 2010 4:46 am
Location: France

PreviousNext

Return to General Discussion

Who is online

Users browsing this forum: Google [Bot] and 0 guests

cron