From Neos Wiki
Jump to navigation Jump to search

Prime Time, ProbablePrime's Weekly office hours for Questions, Tutorials and Documentation and anything else that doesn't really fit.

Here are the notes from 15th February 2022

These are rough notes typed by ProbablePrime. If there are errors please edit away!


Please do remember to check our Roadmaps as a lot of questions here are partially covered there. Do continue to ask them but the roadmaps are there for you to read:

Please use our Contacting the Neos Team section to reach out! Please make GitHub issues for your issues!

For security issues please read our Security Policy. For moderation issues please submit a ticket on our Moderation Portal.

Random Note on Rumors

I'm getting a bunch of Rumors heading my way this week, so I'm taking the opportunity to let you know:

  • If you hear a rumor and want to clarify it or check if its true.... ASK US. You can DM me or ask at any of the contacting the neos team options.
  • Please don't take them as fact without fact checking your information. Missinformation and disinformation is rife and its very easy to confirm information with me. Ask and I will answer.

Common Rumors:

  • You need to pay $ or NCR to play Neos - FALSE, Neos is free.
  • NCR would not be given out in the February Patreon Cycle - FALSE, this was given out. NCR changes will be announced.
  • You will be banned for reporting security issues - FALSE, if you breach the security policy you may be though. So make sure you follow it.
    • Examples of breaching this policy include:
      • Testing security issues in public, without the consent of users present.
      • Showing off security issues, or bragging about them in public.
      • Using these security issues to breach other guidelines including but not limited to asset theft, harrassment etc.
    • Follow the security policy please!.
  • Neos is Shutting Down - FALSE, we are not....


Gray: I know this has probably been asked 100 times, but is there any good way to parse an int/float from string in components? Or is logix the only way?

  • FloatTextEditor parser and IntTextEditor parser are the components you should use for these.
  • They require text editors to function but I'm not certain of occurences in Neos where you would need to parse numbers without user input.

Spex: I'd like to know a little bit about service monitoring for Neos. What kind of metrics do the team typically keep an eye on? Any particular monitoring software (or software stacks) that are utilized?

  • I don't currently have access to these metrics but Froox periodically shares them and keeps an eye on them.
  • We're largely Azure based using Azure products that operate in serverless manners such as Web Apps and Cosmos DB rather than real servers and machines floating in the cloud.
  • Due to this metrics are a bit different than you may be used to. Things like execution time, request load, operations etc matter a whole lot more than RAM, CPU etc.

Earthmark: Given the free form nature of wiki formats, have there been any considerations of standardizing the wiki pages so it's easier to consume with ingame tools?

  • The Logix and component pages should be fairly standardized as they use Epsilion's templates.
  • For everything else:
  • One of the problems here is that WikiText is not a form of structured data like JSON,YAML or XML.
  • On our documentation roadmaps are in-game tools and these may involve using a new documentation tool.
  • Do not fear any contributions made to the wiki will be somehow imported or linked across even if I have to stay up till 4am each night doing it.

Duff: Would you say (in your personal opinion) one of neos’s main focal points is giving the player/user as much freedom/individual expressionism as much as possible?

  • Yes.
  • Its very important to remember that Neos is for everyone, no group, identity, race etc has ultimate control or precedence.
  • Everyone in Neos, make sure that your actions reflect those values if you can. We all come from different walks of life.

Gray: Any better way to work on facets without having to build them in world first, then move them into userspace? Don't seem to be able to get logix or dev tips into userspace, only userspace inspector.

  • Not that I'm aware of sorry
  • Userspace inspectors can help

Earthmark: Does neos use cloud functions?

  • Not that i'm currently aware of, and looking through the codebase none that I can find.
  • Its possible we can move certain activities here later as I'm quite fond of them

VoidPaw: Best way to have restore points for a headless world? Incremental saves that can be restored to if there's ever a problem.

  • my recommendations here are instead to avoid the problem all-together.
  • When making a world I create items within the world that I can save separately including the world geometry.
  • These are saved to my inventory separately from the world but then i also save the world.
  • This means I can swap in and out older/new versions of various aspects.
  • You have to link these components together using Dynamic Impulses or Variables etc so they become aware of each other but once you do that, there's less logix, less dependencies in the worlds etc.
  • For example in the MMC voting world, its comprised of 3 separately saved items:
    • The World geometry which is some sort of car showroom Zane gave me
    • The booth, which you stand in
    • The panel which you vote in
  • These parts then just connect together wirelessly. I love it
  • If you've hung out with me sometimes you'll see me tinkering with the voting panel(especially right now) once i'm done I can just import it in
  • I actually learnt this approach from the world browser itself which uses this approach due to its use of facets.

VoidPaw: In the voting world, how do those modular parts know about eachother? Do you just fire dynamic impulses to root?

  • I don't fire impulses to root unless I need to.
  • Generally there's a Dynamic Variable that refers to a Slot. Something like Game/LevelRoot or Map/MainSlot etc that I use and fire impulses to.
  • Beyond that, I answered that in the previous question a little(mixed up the two in notation)

And now for some random ramblings about documentation:

  • A common complaint I get when suggesting to use the above approach with team projects is that team members are unsure where everything is or what to pulse or use.
  • Ever Dynamic Impulse and Variable should have written text somewhere so that someone can use it on your team.
  • Take 5 minutes to remove your headset, open notepad and type. Then import that text file into the game and your team will love you.

Duff: (In your opinion) What is the main goal/achievement/positive contribution your would like to see neos flourish in?

  • I can't remember what I said for this one and my notes are blank so i'll answer from today sorry.
  • We're a metaverse but much like the prior answers here. We're for everyone. That makes it a lot harder but easier in some aspects. Our mission and goals aren't formally defined but once they are you'll see this reflected.
  • Make cool stuff, hang out, be a furry, don't be a furry, be a space deer ;), don't. Neos is for you and you can do whatever you want (provided it follows the user guidelines)

ToniKat: Is there a way to disable My hand haptics for others? So my hands won't trigger other people's bhaptics suit.

  • I'm not sure what's going on here but take a look at the vibration related components on your hand. They're usually on the actual hand bone or sometimes the proxies.
  • There's also a weird bug with Zandario where they have a haptic sphere around them that no one can find but only when they wear their haptic suit. I'm trying to figure this one out.

Jam10o: kinda followup to Grey's question above: is there any kind of documentation/tutorial/guide on working on userspace? it seems like there are only community produced tools for working on this stuff and very little public knowledge (only "secret knowledge" that you get by asking people directly in Neos lol)

  • Not that I know of.
  • One of the reasons is that we didn't really expect people to do this yet. Its not like we don't want you to.. its just we didn't really expect it.
  • Some improvements in this area might occur on our roadmap but until they do its just a sorta weird thing people do.

Zyro: What would be a good way to manage asset loading, like making progress bars for full interactive experiences, and managing a way to automatically trigger a LogiX script after everything is fully loaded?

  • You're limited here by our features atm.
  • We have some GH issues open for various items to improve things here but until they're implemented there are some items you can use
  • On the open world logix node there's functionality for detecting when a world is loaded
  • There's also the asset loader component but I forget if it works in a way that makes sense. You'll have to search through the discord. I'm sure i have a memory of someone trying to use it.

Jaeven: Cloud services on Azure, are they easy to migrate to annother cloud platform (if azure terms/prices go bad) or are a lot of azure-only stuff used?

  • That would be hard right now, but there are ways to make it easier.
  • I don't like vendor lock in but I also hate running boxes and things like Docker/K8s.
  • There are some products which claim to provide Cloud provider agnostic tooling but then just lock you into that product so you cant use anything else.
  • But there are some other products which provide guarenteed freedom from vendor lockin. Its an interesting problem but not something we feel like we'll face immediately.

Spex: Do you have any in-world tools that assist in your notetaking and documentation?

  • No, my memory is very good(scarily good sometimes)
  • I also have what I call "Quick Lists" inside my digital notebook which make little sense sometimes but are used when i need to remember something.

Pyronix: What software are you using for your notebook?

Gray: Sometimes when working with dynamic canvas layouts (horizontal layout, etc) major slot changes when building the canvas like duplicating slots, rearranging slots, etc can just break canvas rendering. Seem the solution is to save the canvas, and spawn it back out for it to render it properly. Potential neos bug (which I can create github if so)? or is there a way to force a canvas to redraw?

  • Yeah this is a bug, i think this is the one:
  • Its on the list to look at, in the meantime you can respawn the canvas, duplicate its slot, duplicate the entire object or there's a mod you can use if you're into using mods.

And now a random spiel about problem solving:

  • With problems there are a few ways to fix it:
    • Ignore it
    • Delete it
    • Fix it
    • Workaround it

When you do something like respawn the object(from above), reboot your computer etc. You're just deleting the problem, you don't learn anything. When i fix Neos bugs i want to FIX FIX them and this is why you probably won't see a native "refresh canvas" button like the mods have. We want to fix the bug at the source.

Btw restarting Neos just clears the RAM and CPU etc out of all data and re-loads it so any bad data just gets deleted. I aggressively avoid rebooting for problem solutions and know a lot more about windows with that approach.

VoidPaw: But if you want to build a modular world where you can just drop something in that can start talking with another piece that might be in there. Wouldn't you need to send on root? Is there a performance problem for this?

  • A good rule of thumb is to never pulse on root for sure, but feel free to do this if its your own world.
  • If its a creation in someone elses world its kinda rude sometimes.
  • For large scale worlds split your world hierarchy into units that make sense for the setup.
  • Then give each split section a dynamic variable space
  • Then in each space create *space*/root as a variable so that items can find the root.
  • The example i gave in the session was a Team based shooter. In the list below imagine each is both a Slot and a variable space with the variable space named in brackets:
    • World (World)
      • Game (Game)
        • Teams (Teams)
            • Team Red (Team)
              • Player 1 (User)
            • Team Blue (Team)
              • Player 2 (User)
  • Now Items parented under Team Red, can then use
  • Team/Root to impulse their team, Game/Root to impulse the game and World/Root to impulse the root slot.
  • If the player in red switches to blue, Team/Root will update to the new Team root value for the TeamBlue space
  • You can use this for things like team names, team colors, team scoring all sorts.
  • I got a little confused here in explaining it because its complex, so i'll just do a video when I can.

ohzee: Is there any limitations with dynamic impulse naming? As in characters that we should not use? A friend likes using "somethingsomething()" for function sorta logix blocks and just wondering if that will cause any issues at all

  • I wasn't sure at the session but I checked for you
  • There is not!

VoidPaw: Different question, best way to monetize a world for steam users? i.e. any logix or systems that I should know about for world monetization?

  • I don't currently advise doing this as its not exactly secure but you can mess around with the HTTP nodes or the tip jar if you'd like.
  • Hard permissions and content licensing/ids are where this will take off :)

jaerven: Any plans on tutorial (component-wise) about references, reference proxies and asset slot stuff to replace texture/models in a world for a normal user? (I got it working, but good to know the best way/pitfalls)

In some areas its important to remember that Neos has plans/ideas on how to make problems easier. If you find yourself experiencing issues in this area maybe open some GH issues to double check there is not a better way. A good example here is the "falling through the world" problem a lot of people face when making worlds. I see many users stuff a procedual box under the map to catch players but instead they should be using the world collider settings to ensure that you dont even fall in the first place. See my very first tutorial for that: