Suggestion Tabletop Simulator + yaktribe

dabbk

Gang Hero
Yak Comp 2nd Place
Tribe Council
Nov 26, 2016
791
1,710
163
Berlin, Germany
Heyall! Given the current conditions for going places and play games, I have been spending more and more time with tabletop simulator. It isnt the same as getting to play with your own miniatures, but... things have made amazing progress recently! So obviously I'm starting to think about how to integrate yaktools more with the gaming experience in tts, since tts has some potential methinks...

As a matter of fact, I have successfully 3D scanned my Goliath gang, and now am playing with my own minis. Some people have worked hard to create cool tables, nice terrain, etc... but there's a lot more that could be done!

So, I'm just putting this out there: is there any sort of interest in developing that type of things? How open would you be Malo to add experimental features to support things like that?

An unsorted list of things that I currently have in mind:
1/ automatic import of your gang/gang cards from yaktribe into TTS objects.
You could either instantiate cards with actual text from cards (eg "print to TTS" or something like that), or export the current equipment/stats/rules from your yaktribe roster into the comment section of your TTS models (some people use it to keep these at hand during their games).

2/ link of saved TTS models with your gang roster
this might require a bit more work, especially if it is to be integrated properly. What I mean is this: first, you create your gang, select fighters, equipments, etc... and you also browse from a TTS 3D model collection which one you plan to use for each model. Then, when you start a game you can load your gang and get all the proper models already selected.
Obviously, this could be fun to manage your own collection of miniatures... I know I assign numbers on my minis (goliath #1, #2, ... up to #15 to this day), and reference this in my rosters. So you could push this further, and link fighters in your yaktribe roster to 3D assets to use in TTS

3/ pre/post battle automation tools for TTS
some of this might be out of scope for yaktribe, but... using the computer to also play the game might make things easier: directly track serious injuries, XP, rewards, ... from inside TTS, and push the log of it to yaktribe automagically.


.... there are tons of other things one could imagine, buuut I'll leave it at that and see what you guys think :) The endgoal is of course to make playing Necromunda on TTS as pleasant as possible, so that we can enjoy more of it!
 

dabbk

Gang Hero
Yak Comp 2nd Place
Tribe Council
Nov 26, 2016
791
1,710
163
Berlin, Germany
Hmm, not many reactions to this... but that's alright :D I'll use it as an open notepad if you dont mind.

Here are some further thoughts on yaktribe to TTS. The end goal is to have a simple way to generate TTS objects adjusted from a gang description in yaktribe. So before each game, I just have to get my updated objects, and boom, I can play!


TTS uses a very simple way to store custom objects: for each of these, you basically need three things:
- a mesh, which is a description of the volume
- a texture (called diffuser) which is an image mapped onto the surface described by the mesh
- a collider, which is an object that interacts for the physics engine. Most people seem to use the volume of the base.


Then, TTS saves are pretty basic. You can save ALL of your game in its current state, and reload that later with all gaming pieces where they were, etc. This is not so useful to save models/independent game pieces, because when you load such a save, it replaces your whole world (you can do additive load, but...).
The most useful is to save and load objects - which can be groups of objects!
So, for example, if I select all of my gang and save them with "save object", I can later load them into a new game - usually a game is a neat table with all the tools and accessories, and potentially a map (some TTS mods use additive loading of maps. that's a different topic).

Anyway, the end result of saving your gang in TTS, is actually some simple JSON, looking like this:

Code:
{
  "SaveName": "",
  (...)
  "ObjectStates": [
    {
      "Name": "Custom_Model",
      "Transform": {
        "posX": -6.53902626,
        "posY": 0.9600009,
        "posZ": -1.90521634,
        "rotX": -1.40911488E-05,
        "rotY": 15.0327253,
        "rotZ": 7.03521655E-05,
        "scaleX": 1.0,
        "scaleY": 1.0,
        "scaleZ": 1.0
      },
      "Nickname": "#7 ganger",
      "Description": "stub cannon",
      "GMNotes": "",
      "ColorDiffuse": {
        "r": 1.0,
        "g": 1.0,
        "b": 1.0
      },
      "Locked": false,
      "Grid": true,
      "Snap": true,
      "IgnoreFoW": false,
      "MeasureMovement": false,
      "DragSelectable": true,
      "Autoraise": true,
      "Sticky": true,
      "Tooltip": true,
      "GridProjection": false,
      "HideWhenFaceDown": false,
      "Hands": false,
      "CustomMesh": {
        "MeshURL": "https://raw.githubusercontent.com/Mautibusu/TTS-Necromunda/main/raw/Goliaths_7/Goliaths_7.obj",
        "DiffuseURL": "https://raw.githubusercontent.com/Mautibusu/TTS-Necromunda/main/raw/Goliaths_7/Goliaths_7.jpg",
        "NormalURL": "",
        "ColliderURL": "https://raw.githubusercontent.com/Mautibusu/TTS-Necromunda/main/models/bases/DEAAD0D4F5771EC7613627CC0D74E011905986A8_BASE_32_2.obj",
        "Convex": true,
        "MaterialIndex": 3,
        "TypeIndex": 1,
        "CustomShader": {
          "SpecularColor": {
            "r": 1.0,
            "g": 1.0,
            "b": 1.0
          },
          "SpecularIntensity": 0.0,
          "SpecularSharpness": 2.0,
          "FresnelStrength": 0.0
        },
        "CastShadows": true
      },
      "LuaScript": "",
      "LuaScriptState": "",
      "XmlUI": "",
      "GUID": "2adb7f"
    },
    {
      "Name": "Custom_Model",
      (...)
    },
    (...)
    {
    }
  ],
  "LuaScript": "",
  "LuaScriptState": "",
  "XmlUI": "",
  "VersionNumber": ""
}

Of course, you can also modify this OUTSIDE of TTS, and then load the result...

Now, the interesting part is that yaktribe already offers a JSON output with all the info you need (almost) neatly formatted. For example, for my gang here: https://yaktribe.games/underhive/json/gang/156488.json
Code:
{"gang":{"gang_id":"156488","gang_name":"The chainmetal bros","gang_type":"Goliath (HoC)","gang_rating":"1295","campaign":"Taikkuus' Campaign", (...),
"gangers":[
{"ganger_id":"1062007","label_id":"","name":"Leader #1","type":"Forge Tyrant","m":4,"ws":3,"bs":3,"s":4,"t":4,"w":2,"i":3,"a":3,"ld":5,"cl":4,"wil":8,"int":7,"cost":"275","xp":"5","kills":"1","advance_count":"0",
"equipment":[{"name":"Power Hammer","qty":"1"},{"name":"Boltgun","qty":"1"},{"name":"Photo-goggles","qty":"1"},{"name":"Furnace Plates","qty":"1"}],
"skills":["True Grit"],"injuries":[],"image":null,"status":"Alive",
"notes":"MeshURL=https:\/\/raw.githubusercontent.com\/Mautibusu\/TTS-Necromunda\/main\/raw\/Goliaths_1\/Goliaths_1.obj,\nDiffuseURL=https:\/\/raw.githubusercontent.com\/Mautibusu\/TTS-Necromunda\/main\/raw\/Goliaths_1\/Goliaths_1.jpg,\nColliderURL=http:\/\/cloud-3.steamusercontent.com\/ugc\/1660104725646763327\/274B3A7DDF7DE1495626704FF1644A81D055BFB7\/",
"datetime_added":"2020-12-22 1:58:14","datetime_updated":"2021-01-14 00:45:46"},
{"ganger_id":"1061986","label_id":"","name":"Stimmer #15","type":"Stimmer"  (...) ]}}

Note that for my leader, I've put weird stuff in the "Notes" section... compare to the above save... and now imagine what could be done!

So yeah! One crude approach would therefore be to write a simple script that takes yaktribe JSON output for a gang, where you have saved in the notes of each fighter which model you want to use, and crunches it into a TTS save in JSON format. You probably would want to update the name of the TTS model, and maybe in the description of that model, list the equipment, skills, characteristics, ... whatever you like!

It could probably be done the other way around, eg reference the gang ID and json data from inside TTS. As in: a magic button "load gang from yaktribe" as a TTS object, where I could browse existing gangs, and load one with the latest updates from yaktribe, directly into models in TTS.


One smarter approach would be to have yaktribe let you upload 3D models and textures to each fighter, similarly to the currently available gallery/image feature.
Of course, in the future, we could imagine having some pre available low poly models directly selectable from a drop down menu...
I suppose these might be problematic vs GW, since I'm not sure how they would like yak having a catalogue of (even if low poly) 3D scans of models...? So, to save yak the headache, it could be just some code easy to run somewhere, or a separately hosted service..?


As I mentioned, it might be possible to craft some more advanced objects inside TTS, that would self update by fetching data from URLs like https://yaktribe.games/underhive/json/gang/156488.json or https://yaktribe.games/underhive/ganger/leader_#1.1062007/ (note that this second depends on the name you give the ganger... not sure why it isnt instead something like https://yaktribe.games/underhive/json/ganger/1062007.json ...?


Thoughts?
 
Last edited: