S&box Wiki

Custom Asset Types

Custom Asset Types

Custom assets are things you can define yourself. They give you a nice inspector window and they're hotloaded in-game, which means you can whip things up pretty quickly if you're using them.

Creating a custom asset type

Let's say you wanted your own custom weapon asset type. Here's how you'd do that.

Creating the FGD

Make a folder in your addon's root directory, call it config. Make a file in there called weapon.asset. The file name you choose here will be the name for the base class and the extension for any files of this type.

Writing the FGD here is similar to how you'd write an FGD normally.

@BaseClass = weapon : "A weapon" [ Name(string) : "Name" : "Weapon Name" Description(string) : "Description" : "This is my weapon." Damage(float) : "Damage" : "5" ]

When writing these, give your fields some sane default values to make it easier on yourself.

You can obviously do a lot more than this - you could define all of the possible parameters here - but we'll keep things simple for now.

Mirroring it in code

You then need to mirror this class in code. Make sure you specify the same defaults that you specify in the FGD.

[Library( "weapon" )] public class WeaponData : Asset { // Data from weapon.asset public string Name { get; set; } = "Weapon Name"; public string Description { get; set; } = "This is my weapon."; public float Damage { get; set; } = 5.0f; }
If you don't specify defaults in code, then they won't be assigned to at all - regardless of whether these are set up in the FGD.

Using the inspector

Now that you have everything set up, you can use the inspector tool to edit your first weapon.

  1. Click the "Inspector" icon in the asset browser.
image.png
  1. Pick your asset type.
image.png
  1. Set up your weapon however you want.
image.png
  1. Save your asset into your addon's config directory - call it "MyWeapon.weapon"

Loading the asset type

Loading an asset type is super easy.

// Property allows for hot-loading public WeaponData WeaponData { get; set; } // ... // Load the weapon data from a path WeaponData = Resource.FromPath<WeaponData>( "config/MyWeapon.weapon" );

Congrats, you can now get your weapon's data using the WeaponData object you just created. For example:

Log.Info( WeaponData.Name ); Log.Info( WeaponData.Description ); Log.Info( WeaponData.Damage ); // Output: // Cool Weapon // This is my cool gun // 69

You can edit these values in the inspector and they'll apply in-game as soon as you hit save with no extra work required.

Special Pages


Wikis

?

Render Time: 23ms

DB GetPage 4
Generate Html 2
SaveChanges (1) 11
Render Body 0
Render Sidebar 1