Namespace GrindFest
Classes
- AutomaticHero
Base class for all bots
- AutomaticIdentifyToolBehaviour
Tool that automatically identifies unidentified items when mousing over them. Attach to any item that should have auto-identify capability when equipped.
- BurnableBehaviour
Component for objects that can burn and act as fuel. Examples: logs, coal, arrows, torches, wooden structures.
- CloseableUIStack
Manages a stack of closeable UI elements so ESC closes the most recently opened item.
- DirectionMarker
Editor-only gizmo to visualize a transform's direction. Useful for projectile attach points, spawn points, aim directions, etc.
- Fireball
Casts a fireball that explodes on impact, dealing 1.2x weapon damage as fire damage to all enemies in a 2m radius
- InvokeOnReloadAttribute
Marks a static method to be automatically called when your bot script is recompiled. This is useful for destroying instantiated classes of your types that will stop being valid (mono behaviours are destroyed automatically) or storing state before your bot code is reloaded.
- ItemExperienceAffix
Adds experience bonus when item is equipped. Follows same pattern as ItemStatAffix for consistency.
- LifeDrainSpell
Channels to continuously drain life from target enemy and converts it to mana or health based on the spell variant
- ModDefinition
Mod manifest deserialized from mod.json. Required in every mod folder for Workshop publishing and mod browser display.
- ModManager
Central mod manager. Handles discovery, deployment, and hot-reload of all mod types.
Currently supports:
- Ink Story mods (.ink files → runtime compilation → world regeneration)
- UI mods (JavaScript/TypeScript → OneJS ScriptEngine eval)
Future:
- Prefab mods (Addressable prefab overrides)
- Script mods (C# bot scripts)
Folder structure: persistentDataPath/Mods/GrindFest/Story/ — base story mod (smart-copied from StreamingAssets) persistentDataPath/Mods/[ModName]/Story/ — additional story mods persistentDataPath/Mods/[ModName]/UI/dist/index.js — UI mod entry point (eval'd after app.js) persistentDataPath/Mods/[ModName]/Prefabs/ — (future) prefab overrides persistentDataPath/Mods/[ModName]/Scripts/ — (future) script mods
In Editor, can optionally use Assets/_GrindFest/Story/ directly (toggle via UseEditorStoryFiles).
- MusicalInstrumentBehaviour
Provides MIDI instrument functionality for playable musical items.
- NamespaceRewriter
A syntax rewriter that transforms all references to GrindFest namespace to GrindFest.Isolated namespace.
- ObservableList<T>
A minimal observable wrapper around List<T>. Fires Changed on every mutation (Add, Remove, Clear, indexer set). Zero-allocation event — uses
Actionwith no args.Designed for OneJS bridge: JS subscribes via
onejs.subscribe(list, 'Changed', cb).Unity-serializable: the inner List is serialized by Unity.
- OverworldMonsterSpawner
Checks the player movement and after few steps spawns a monsterrs
- PersistedAreaBehaviour
Stores all items in this area in save data, and restores them on load. Checks if player has modified/entered area, so it doesn't save unnecessary data.
- PumpkinLeaderboardHUD
Real-time leaderboard HUD display for pumpkin smashing. Shows: Top N entries, and Your Position (if not in top N). Supports both IMGUI (legacy) and TextMeshPro (zero-allocation) rendering. Requires Steam integration - automatically disabled when DISABLESTEAMWORKS is defined.
- RangedAttack
Ranged attack skill for bows and crossbows. Two modes through skill system:
- If no arrow nocked: plays nock animation (allows movement), spawns arrow
- If arrow nocked: shoots the arrow
- ShortScale
Parse a numeric value into a short scale string representation.
- StackExtensions
Extension methods for Stack to support Remove operation
- SteamWorkshopService
Steam Workshop integration for GrindFest mods. Handles publishing, querying, subscribing, and installing Workshop items.
Uses Facepunch.Steamworks UGC API.
Well-known content folders included when publishing: UI/ (full source + dist/), Scripts/, Story/, Assets/, mod.json, preview.*
Excluded directories: node_modules, .git, .vs, .vscode, .idea, obj, bin
- SteamWorkshopService.WorkshopMeta
Auto-generated metadata stored alongside the mod. Keeps mod.json clean (author-edited only).
- TestCharacterReactive
Test component to verify OneJS EventfulProperty works with game properties NOTE: [EventfulProperty] must be on FIELDS, not properties! Source generator creates public properties automatically (Strength, Dexterity, etc.)
- TorchBehaviour
Handles torch-specific behavior when equipped/unequipped. Uses BurnableBehaviour for fire VFX management.
- VBCompiler
Visual Basic compiler that inherits from the base Compiler class. Does not support top-level scripts or isolated execution.
- VSCodeManager
Manages VSCode extraction from StreamingAssets zip file with version checking
Structs
- ShortScaleData
Allows for the value to be separated from the symbol; both can be styled separately.
Interfaces
- ICloseableUI
Interface for UI elements that can be closed with ESC
Enums
- ModContentFlags
Flags indicating which well-known content folders a mod contains.