Anyland

Anyland

Not enough ratings
Installing and using my Anyland mods
By Sparkette
I've created some unofficial addons for the Anyland client, to add some useful features. This guide will explain how they work.
   
Award
Favorite
Favorited
Unfavorite
Setup
You will need to download:

Extract UnityModManager wherever is convenient, but don't use the Anyland installation directory or it might not work. Copy my UnityModManagerConfig file into the same directory, overwriting the existing file.

Open the UnityModManager application. Where it says "Game", select Anyland. Click the button below it, and navigate to your Anyland installation directory. If you don't know where this is, then it's most likely C:\Program Files (x86)\Steam\SteamApps\common\Anyland. Make sure "DoorstopProxy" is selected.



Finally, select the Mods tab, and drag/drop the AnylandMods.zip file you downloaded into the window, or click "Install Mod" and browse for it that way.

You might only see two mods listed; this is just a display glitch and they should all work fine in-game.

You will know it's installed properly if you see a new "Mods" button on the main menu. You will also see the UnityModManager screen appear (on desktop, not VR) when you start Anyland.
PersonalizedUI
The PersonalizedUI mod allows you to change the appearance of the in-game UI, by using a Thing to replace the default gray background. An example can be seen below.

Besides looking cool, this can potentially be very useful when combined with scripting.

Note that this is a clientside effect only; other players will not be able to see it. That said, things like "Do Creation Part" commands will work as expected.

To customize your dialogs, context laser the Thing you want to use, press the Copy/Paste button on the back, and then copy the thing ID. Then, push the Mods button on the main menu, and select "GUI Appearance".



If you do not want the default gray background to show up on top of (or behind, or wherever) your thing, select "Hide Default Bkgd".

Push "Select Thing", and you will see a preview. If you like the way it looks, select Yes.

If you want scripts to work, you will need to select "Script + Collide". There is a confirmation dialog box before you enable this, and you are encouraged to try pushing the two gray areas in different places to test, to make sure you don't accidentally have a collidable thing that makes buttons unpushable.

If you do end up making your dialogs unusable, you can delete or edit the mod's configuration file manually. It is located in the Mods folder inside your Anyland installation directory, in the "PersonalizedUI" subfolder.

Speaking of the config file, you can also customize the colors of text, buttons, and checkboxes there, though this will sometimes stop working, and the colors don't seem to be exact.
MultiLevelUndo
Nothing much to say here really; this one is pretty self-explanatory. When editing a thing, the Undo button on each part now works to undo multiple steps. When you use it, a new Redo button will appear.

Note that there are two known bugs:
  • Newly-placed thing parts will have a couple entries in the undo history already, changing position and/or size. If you accidentally trigger this, simply push Redo, unless of course you serendipitously want to keep the new position/size.
  • If you change the scale of a part, then undo, then turn on the option to scale parts uniformly, and begin scaling it again, it will revert back to the proportions you undid before. If this happens to you, simply undo the bugged scale, move the part, undo the move (optional), and then try scaling again.
ScriptableControls
This one requires the most explanation, but you can do some pretty cool stuff with it. Essentially, it extends "WHEN TOLD BY BODY" to support a syntax for defining custom body tells by combining multiple conditions to check for.

A side effect of installing this mod is that if your controllers have analog sticks, the teleport laser will not activate unless you do so by moving the stick upwards. This is to free up the other input (pressing trackpad or analog stick) for custom actions. (See 'R' below.) I'll likely add an option in the future to toggle this behavior.

The following conditions are currently supported:
  • A - Hands are far apart (L/R is irrelevant.)
  • B - Hands are close together (L/R is irrelevant.)
  • C - Context laser button is held
  • D - Delete button is held
  • F - Fingers are closed around the controller (requires Valve Index controller)
  • G - Grip is held
  • H - Something is being held (not yet tested thoroughly)
  • L - Currently holding the input to control your "leg" (works even if none is attached)
  • M - Hand is moving
  • N - Same as M, except a higher velocity is required.
  • Q0 - Hand is moving mostly left. (X-)
  • Q1 - Hand is moving mostly right. (X+)
  • Q2 - Hand is moving mostly downward. (Y-)
  • Q3 - Hand is moving mostly upward. (Y+)
  • Q4 - Hand is moving mostly backward. (Z-, toward your back)
  • Q5 - Hand is moving mostly forward. (Z+)
  • R - Teleport button is held.
  • T - Trigger is held.
  • X0-2, Y0-2, Z0-2 - Hand is located in this section of a 2x2x2 grid centered in front of your head.

To use ScriptableControls, all you need to do is attach or hold something containing a "WHEN TOLD BY BODY tell", where tell uses the following syntax:

XCs#true-false-edge

XC is just a required prefix.

s specifies which hand the condition refers to (L=left, R=right, B=both at once.) It may be omitted, meaning either hand will work.

# determines when to trigger. It is a digit from 0 to 3:
  • 0 - Trigger when condition becomes false. (falling edge)
  • 1 - Trigger when condition becomes true. (rising edge)
  • 2 - Trigger repeatedly as long as condition is false. (use sparingly)
  • 3 - Trigger repeatedly as long as condition is true. (use sparingly)

What follows is the aforementioned condition, which is made up of up to three sets of condition flags as listed at the beginning of this section separated by hyphens. The first set (true) must all be true in order for the condition to be true. If a second set (false) is given, that set must additionally all be false. And if a third set (edge) is given, the trigger will only occur when at least one of those flags changes state. Note that if you use edge, you must use either 2 or 3 for #, or else it won't trigger. (The "use sparingly" warning does not apply in this case.)

Examples

WHEN TOLD BY BODY
  • XCL1T - Same as "HAND TRIGGERED LEFT", except it won't work unless this mod is installed. (I guess it could be useful if you want to make it harder for other people to use your attachments. :P)
  • XC3T - Repeatedly triggers whenever one or both hands has the trigger held. (Think rapid-fire weapons.)
  • XCB1Y2-F - Triggers when you raise both open hands into the air.
  • XC1GN - Triggers when you move your hand at a high speed while holding the grip. (Could be used for, e.g. a punch sound effect.)
  • XC0-DM - Triggers whenever you press either the delete button or the trigger. More specifically, it monitors for when neither are being pressed, and then triggers when that is no longer true—that is, when you begin pressing at least one. (This means it will not trigger again if you press one while the other is still being held.)
  • XCR3DT-M-T - This one should trigger when you hold the delete button and press the trigger on your right hand, while keeping it mostly still. The "-T" at the end means it will not trigger if you instead hold the trigger and press the delete button. Nor will it trigger if you already have both held on a moving hand, and then stop moving your hand—which it would if not for the "-T".
  • XCR2T - Constantly fires as long as you're not holding the trigger on your right hand. This can be useful as a substitute for "HAND TRIGGER LET GO RIGHT" when used as a trigger to change state. If you have something change state when you press the trigger, but then you release the trigger before the state change finishes, normally it will miss the second message and remain stuck in the "on" state. If you use XCR2T instead (or the analogous code for a different body tell) then the message will go out continuously, so it will receive the message as soon as it can. This is not wasteful, as the tell will only trigger once or twice before it changes to a state that doesn't use XC2RT, and thus won't send anything.

Play around with this a bit; you might come up with some fun uses! Additional functionality is also planned.
AutoBody
DOCUMENTATION COMING SOON
EDIT 2021-08-22: Hopefully for real this time!
Upcoming Mods
Here are some mods I'm working on that are not released yet, but will be at some point in the future.

  • BetterVertexMover - I'd like to release this one now, but Philipp has asked me to wait. (Here's why.) I'm looking forward to when I can though, as it's an incredibly useful building tool. It's basically the proportional editing feature standard in 3D modeling software, where you can move a vertex and have it drag nearby vertices along with an adjustable radius and falloff pattern. EDIT 2021-08-02: I think it's been plenty long enough, but at the same time, I don't want to put Anyland at risk. So one thing I'm considering doing is releasing it, but having it only work on shapes that don't have too many vertices. I'm generally loath to release something that's deliberately crippled, but it would be open source, so I don't feel too bad about it. And regardless, it's still better than not releasing it at all.
  • DistanceTools - This contains various features related to extending reach. There's a feature to make your leg slots move faster, increasing exponentially in speed as they get farther. I also plan on adding a similar function for placements, when you context laser and drag them from a distance. Finally, there's this, which will allow you to edit background objects by picking them up from far away using your perspective like an optical illusion. This is what inspired me to make it.[i.imgur.com]
  • Improvements - Various quality-of-life features. May merge MultiLevelUndo into this. Currently one feature in development: RGB sliders for the color picker, which will work similar to adjusting texture and particle properties. EDIT 2021-08-02: I'm actually not sure whether or not I'm going to finish this. If anyone else wants to do it though, let me know and I'll send you what I have so far.
15 Comments
Sparkette  [author] 10 Oct, 2021 @ 1:01pm 
@bulbyVR: Someone submitted a pull request that seems like it might fix that. I haven't tested it yet, but I merged it because I didn't see any problems with it. When did you install it?
TheLittleDoctor 7 Oct, 2021 @ 8:52pm 
@flarn2006 it's actually been like this for some time, if I recall correctly. I needed to get an old copy of the game from another player to get the mods to run, and then updating after the first run didn't break compatibility again.
Sparkette  [author] 7 Oct, 2021 @ 7:28pm 
@bulbyVR: It looks like It's failing to load the Harmony API. Under what circumstances did it stop working?
bulbyVR 1 Oct, 2021 @ 2:01pm 
TheLittleDoctor 29 Aug, 2021 @ 12:21pm 
Good to know, thanks!
Sparkette  [author] 29 Aug, 2021 @ 10:01am 
By the way, another thing you might not be aware of: when you edit a Thing that you have saved as an attachment, you won't need to re-save it with the updated version. This is because when you edit a placement with the same name and thing ID as a saved attachment, it will detect this and automatically update the saved attachment to the new thing ID. Pretty convenient!
Sparkette  [author] 29 Aug, 2021 @ 10:00am 
I just had another look at the code to refresh my memory. XA8 and XA9 will simply switch the attachment on the leg slot, but XA6 and XA7 will additionally move the "leg" to where it was when you saved the attachment. If you use the "IN [time]S" function with XA6 or XA7, then the "leg" you currently have attached (if any) will gradually move to its destination over that time period. Finally, you can also specify LOCK or UNLOCK in lieu of a thing name and it will lock it to (or unlock it from) your playspace, so it won't move when you move your body unless you actually move in Anyland. I think it might result in choppy movement for other players though.
TheLittleDoctor 28 Aug, 2021 @ 10:21pm 
How embarrassing, you can't use the [code] formatting in comments... oh well...

And you can't edit comments either... rip
TheLittleDoctor 28 Aug, 2021 @ 10:20pm 
For those curious, Auto Body scripting is pretty simple, I think:

[code]...then tell body [body part ID] [saved thing name] in [time]s[/code]

where body part ID is the number/numbers shown on the button to access the saved parts for that body part. For instance, hat is "XA0" and head is "XA1". A complete list of these IDs can be found below.

Here are some complete example tell that I actually use:

[code]When touched then tell body XA1 afk[/code]
[code]When touched then tell body XA6 build tool[/code]
[code]When triggered then tell body XA5 tux[/code]

Body part IDs:
[code]
XA0 - Hat
XA1 - Head
XA2 - Left arm
XA3 - Upper torso
XA4 - Right arm
XA5 - Lower torso
XA6,8 - Left leg
XA7,9 - Right leg
[/code]

Flarn, I'm not entirely sure what the range of 6-8 and 7-9 exactly means, so your official documentation will certainly clear things up.

Last reminder: Like all other body tells, these need to be from a holdable, body part, or custom menu.

Cheers,
TheLittleDoctor
bulbyVR 13 Feb, 2020 @ 1:58pm 
Cool! Seeing this makes me want to know if an ad blocker can be shoved into the chromium anyland uses.