EntityLoad( filename:string, pos_x:number = 0, pos_y:number = 0 ) entity_id:int
EntityLoadEndGameItem( filename:string, pos_x:number = 0, pos_y:number = 0 ) entity_id:int
EntityLoadCameraBound( filename:string, pos_x:number = 0, pos_y:number = 0 )
EntityLoadToEntity( filename:string, entity:int ) Loads components from 'filename' to 'entity'. Does not load tags and other stuff.
EntitySave( entity_id:int, filename:string ) Note: works only in dev builds.
EntityCreateNew( name:string = "" ) entity_id:int
EntityKill( entity_id:int )
EntityGetIsAlive( entity_id:int ) bool
EntityAddComponent( entity_id:int, component_type_name:string, table_of_component_values:{string} = nil ) component_id:int
EntityRemoveComponent( entity_id:int, component_id:int )
EntityGetAllComponents( entity_id:int ) {int} Returns a table of component ids.
EntityGetComponent( entity_id:int, component_type_name:string, tag:string = "" ) {component_id}|nil
EntityGetFirstComponent( entity_id:int, component_type_name:string, tag:string = "" ) component_id|nil
EntityGetComponentIncludingDisabled( entity_id:int, component_type_name:string, tag:string = "" ) {component_id}|nil
EntityGetFirstComponentIncludingDisabled( entity_id:int, component_type_name:string, tag:string = "" ) component_id|nil
EntitySetTransform( entity_id:int, x:number, y:number = 0, rotation:number = 0, scale_x:number = 1, scale_y:number = 1 )
EntityApplyTransform( entity_id:int, x:number, y:number = 0, rotation:number = 0, scale_x:number = 1, scale_y:number = 1 ) Sets the transform and tries to immediately refresh components that calculate values based on an entity's transform.
EntityGetTransform( entity_id:int ) x:number, y:number, rotation:number, scale_x:number, scale_y:number
EntityAddChild( parent_id:int, child_id:int )
EntityGetAllChildren( entity_id:int, tag:string = "" ) {entity_id:int}|nil If passed the optional 'tag' parameter, will return only child entities that have that tag (If 'tag' isn't a valid tag name, will return no entities). If no entities are returned, might return either an empty table or nil.
EntityGetParent( entity_id:int ) entity_id:int
EntityGetRootEntity( entity_id:int ) entity_id:int Returns the given entity if it has no parent, otherwise walks up the parent hierarchy to the topmost parent and returns it.
EntityRemoveFromParent( entity_id:int )
EntitySetComponentsWithTagEnabled( entity_id:int, tag:string, enabled:bool )
EntitySetComponentIsEnabled( entity_id:int, component_id:int, is_enabled:bool )
EntityGetName( entity_id:int ) name:string
EntitySetName( entity_id:int, name:string )
EntityGetTags( entity_id:int ) string|nil Returns a string where the tags are comma-separated, or nil if 'entity_id' doesn't point to a valid entity.
EntityGetWithTag( tag:string ) {entity_id:int} Returns all entities with 'tag'.
EntityGetInRadius( pos_x:number, pos_y:number, radius:number ) {entity_id:int} Returns all entities in 'radius' distance from 'x','y'.
EntityGetInRadiusWithTag( pos_x:number, pos_y:number, radius:number, entity_tag:string ) {entity_id:int} Returns all entities in 'radius' distance from 'x','y'.
EntityGetClosest( pos_x:number, pos_y:number ) entity_id:int
EntityGetClosestWithTag( pos_x:number, pos_y:number, tag:string ) entity_id:int
EntityGetWithName( name:string ) entity_id:int
EntityAddTag( entity_id:int, tag:string )
EntityRemoveTag( entity_id:int, tag:string )
EntityHasTag( entity_id:int, tag:string ) bool
EntityGetFilename( entity_id:int ) full_path:string Return value example: 'data/entities/items/flute.xml'. Incorrect value is returned if the entity has passed through the world streaming system.
EntitiesGetMaxID() entity_max_id:number Returns the max entity ID currently in use. Entity IDs are increased linearly.
ComponentGetValue( component_id:int, variable_name:string ) string|nil Deprecated, use ComponentGetValue2() instead.
ComponentGetValueBool( component_id:int, variable_name:string ) bool|nil Deprecated, use ComponentGetValue2() instead.
ComponentGetValueInt( component_id:int, variable_name:string ) int|nil Deprecated, use ComponentGetValue2() instead.
ComponentGetValueFloat( component_id:int, variable_name:string ) number|nil Deprecated, use ComponentGetValue2() instead.
ComponentGetValueVector2( component_id:int, variable_name:string ) x:number, y:number|nil Deprecated, use ComponentGetValue2() instead.
ComponentSetValue( component_id:int, variable_name:string, value:string ) Deprecated, use ComponentSetValue2() instead.
ComponentSetValueVector2( component_id:int, variable_name:string, x:number, y:number ) Deprecated, use ComponentSetValue2() instead.
ComponentSetValueValueRange( component_id:int, variable_name:string, min:number, max:number ) Deprecated, use ComponentSetValue2() instead.
ComponentSetValueValueRangeInt( component_id:int, variable_name:string, min:number, max:number ) Deprecated, use ComponentSetValue2() instead.
ComponentSetMetaCustom( component_id:int, variable_name:string, value:string ) Deprecated, use ComponentSetValue2() instead.
ComponentGetMetaCustom( component_id:int, variable_name:string ) string|nil Deprecated, use ComponentGetValue2() instead.
ComponentObjectGetValue( component_id:int, object_name:string, variable_name:string ) string|nil Deprecated, use ComponentObjectGetValue2() instead.
ComponentObjectSetValue( component_id:int, object_name:string, variable_name:string, value:string ) Deprecated, use ComponentObjectSetValue2() instead.
ComponentAddTag( component_id:int, tag:string )
ComponentRemoveTag( component_id:int, tag:string )
ComponentGetTags( component_id:int ) string|nil Returns a string where the tags are comma-separated, or nil if can't find 'component_id' component.
ComponentHasTag( component_id:int, tag:string ) bool
ComponentGetValue2( component_id:int, field_name:string ) multiple_types|nil Returns one or many values matching the type or subtypes of the requested field. Reports error and returns nil if the field type is not supported or field was not found. This is up to 7.5x faster than the old ComponentSetValue functions.
ComponentSetValue2( component_id:int, field_name:string, value_or_values:multiple_types ) Sets the value of a field. Value(s) should have a type matching the field type. Reports error if the values weren't given in correct type, the field type is not supported, or the component does not exist. This is up to 20x faster than the old ComponentSetValue functions.
ComponentObjectGetValue2( component_id:int, object_name:string, field_name:string ) multiple types|nil Returns one or many values matching the type or subtypes of the requested field in a component subobject. Reports error and returns nil if the field type is not supported or 'object_name' is not a metaobject.
ComponentObjectSetValue2( component_id:int, object_name:string, field_name:string, value_or_values:multiple_types ) Sets the value of a field in a component subobject. Value(s) should have a type matching the field type. Reports error if the values weren't given in correct type, the field type is not supported or 'object_name' is not a metaobject.
EntityAddComponent2( entity_id:int, component_type_name, table_of_component_values:{string-multiple_types} = nil ) component_id
ComponentGetVectorSize( component_id:int, array_member_name:string, type_stored_in_vector:string ) int 'type_stored_in_vector' should be "int", "float" or "string".
ComponentGetVectorValue( component_id:int, array_name:string, type_stored_in_vector:string, index:int ) int|number|string|nil 'type_stored_in_vector' should be "int", "float" or "string".
ComponentGetVector( component_id:int, array_name:string, type_stored_in_vector:string ) {int|number|string}|nil 'type_stored_in_vector' should be "int", "float" or "string".
ComponentGetIsEnabled( component_id:int ) bool Returns true if the given component exists and is enabled, else false.
ComponentGetEntity( component_id:int ) entity_id:int Returns the id of the entity that owns a component, or 0.
ComponentGetMembers( component_id:int ) {string-string}|nil Returns a string-indexed table of string.
ComponentObjectGetMembers( component_id:int, object_name:string ) {string-string}|nil Returns a string-indexed table of string or nil.
ComponentGetTypeName( component_id:int ) string
GetUpdatedEntityID() entity_id:int
GetUpdatedComponentID() component_id:int
SetTimeOut( time_to_execute:number, file_to_execute:string, function_to_call:string = nil )
RegisterSpawnFunction( color:int, function_name:string )
SpawnActionItem( x:number, y:number, level:int )
SpawnStash( x:number, y:number, level:int, action_count:int ) entity_id:int
SpawnApparition( x:number, y:number, level:int, spawn_now:bool = false ) spawn_state_id:int, entity_id:int
LoadEntityToStash( entity_file:string, stash_entity_id:int )
AddMaterialInventoryMaterial( entity_id:int, material_name:string, count:int )
RemoveMaterialInventoryMaterial( entity_id:int, material_name:string = "" ) If material_name is empty, all materials will be removed.
GetMaterialInventoryMainMaterial( entity_id:int, ignore_box2d_materials:bool = true ) material_type:int Returns the id of the material taking the largest part of the first MaterialInventoryComponent in 'entity_id', or 0 if nothing is found.
GameScreenshake( strength:number, x:number = camera_x, y:number = camera_y )
GameOnCompleted()
GameGiveAchievement( id:string )
GameDoEnding2()
GetParallelWorldPosition( world_pos_x:number, world_pos_y:number ) x, y x = 0 normal world, -1 is first west world, +1 is first east world, if y < 0 it is sky, if y > 0 it is hell
BiomeMapLoad_KeepPlayer( filename:string, pixel_scenes:string = "data/biome/_pixel_scenes.xml" )
BiomeMapLoad( filename:string ) Deprecated. Might trigger various bugs. Use BiomeMapLoad_KeepPlayer() instead.
BiomeSetValue( filename:string, field_name:string, value:multiple_types ) Can be used to edit biome configs during initialization. See the nightmare mod for an usage example.
BiomeGetValue( filename:string, field_name:string ) multiple types|nil Can be used to read biome configs. Returns one or many values matching the type or subtypes of the requested field. Reports error and returns nil if the field type is not supported or field was not found.
BiomeObjectSetValue( filename:string, meta_object_name:string, field_name:string, value:multiple_types ) Can be used to edit biome configs during initialization. See biome_modifiers.lua for an usage example.
BiomeVegetationSetValue( filename:string, material_name:string, field_name:string, value:multiple_types ) Can be used to edit biome config MaterialComponents during initialization. Sets the given value in all found VegetationComponent with matching tree_material. See biome_modifiers.lua for an usage example.
BiomeMaterialSetValue( filename:string, material_name:string, field_name:string, value:multiple_types ) Can be used to edit biome config MaterialComponents during initialization. Sets the given value in the first found MaterialComponent with matching material_name. See biome_modifiers.lua for an usage example.
BiomeMaterialGetValue( filename:string, material_name:string, field_name:string ) multiple types|nil Can be used to read biome config MaterialComponents during initialization. Returns the given value in the first found MaterialComponent with matching material_name. See biome_modifiers.lua for an usage example.
GameIsIntroPlaying() bool
GameGetIsGamepadConnected() bool
GameGetWorldStateEntity() entity_id:int
GameGetPlayerStatsEntity() entity_id:int
GameGetOrbCountAllTime() int
GameGetOrbCountThisRun() int
GameGetOrbCollectedThisRun( orb_id_zero_based:int ) bool
GameGetOrbCollectedAllTime( orb_id_zero_based:int ) bool
GameClearOrbsFoundThisRun()
GameGetOrbCountTotal() int Returns the number of orbs, picked or not.
CellFactory_GetName( material_id:int ) string Converts a numeric material id to the material's strings id.
CellFactory_GetType( material_name:string ) int Returns the id of a material.
CellFactory_GetUIName( material_id:int ) string Returns the displayed name of a material, or an empty string if 'material_id' is not valid. Might return a text key.
CellFactory_GetAllLiquids( include_statics:bool = true, include_particle_fx_materials:bool = false ) {string}
CellFactory_GetAllSands( include_statics:bool = true, include_particle_fx_materials:bool = false ) {string}
CellFactory_GetAllGases( include_statics:bool = true, include_particle_fx_materials:bool = false ) {string}
CellFactory_GetAllFires( include_statics:bool = true, include_particle_fx_materials:bool = false ) {string}
CellFactory_GetAllSolids( include_statics:bool = true, include_particle_fx_materials:bool = false ) {string}
CellFactory_GetTags( material_id:int ) {string}
CellFactory_HasTag( material_id:int, tag:string ) {bool}
GameGetCameraPos() x:number, y:number
GameSetCameraPos( x:number, y:number )
GameSetCameraFree( is_free:bool )
GameGetCameraBounds() x:number, y:number, w:number, h:number Returns the camera rectangle. This may not be 100% pixel perfect with regards to what you see on the screen. 'x','y' = top left corner of the rectangle.
GameRegenItemAction( entity_id:int )
GameRegenItemActionsInContainer( entity_id:int )
GameRegenItemActionsInPlayer( entity_id:int )
GameKillInventoryItem( inventory_owner_entity_id:int, item_entity_id:int )
GamePickUpInventoryItem( who_picks_up_entity_id:int, item_entity_id:int, do_pick_up_effects:bool = true )
GameGetAllInventoryItems( entity_id:int ) {item_entity_id}|nil Returns all the inventory items that entity_id has.
GameDropAllItems( entity_id:int )
GameDropPlayerInventoryItems( entity_id:int )
GameDestroyInventoryItems( entity_id:int )
GameIsInventoryOpen() bool
GameTriggerGameOver()
LoadPixelScene( materials_filename:string, colors_filename:string, x:number, y:number, background_file:string, skip_biome_checks:bool = false, skip_edge_textures:bool = false, color_to_material_table:{string-string} = {}, background_z_index:int = 50, load_even_if_duplicate:bool = false )
LoadBackgroundSprite( background_file:string, x:number, y:number, background_z_index:number = 40.0, check_biome_corners:bool = false )
RemovePixelSceneBackgroundSprite( background_file:string, x:number, y:number ) bool - NOTE! Removes the pixel scene sprite if the name and position match. Will return true if manages the find and destroy the background sprite
RemovePixelSceneBackgroundSprites( x_min:number, y_min:number, x_max:number, y_max:number ) NOTE! Removes pixel scene background sprites inside the given area.
GameCreateCosmeticParticle( material_name:string, x:number, y:number, how_many:int, xvel:number, yvel:number, color:uint32 = 0, lifetime_min:number = 5.0, lifetime_max:number = 10, force_create:bool = true, draw_front:bool = false, collide_with_grid:bool = true, randomize_velocity:bool = true, gravity_x:float = 0, gravity_y:float = 100.0 )
GameCreateParticle( material_name:string, x:number, y:number, how_many:int, xvel:number, yvel:number, just_visual:bool, draw_as_long:bool = false, randomize_velocity:bool = true )
GameCreateSpriteForXFrames( filename:string, x:number, y:number, centered:bool = true, sprite_offset_x:number = 0, sprite_offset_y:number = 0, frames:int = 1, emissive:bool = false )
GameShootProjectile( shooter_entity:int, x:number, y:number, target_x:number, target_y:number, projectile_entity:int, send_message:bool = true, verlet_parent_entity:int = 0 ) 'shooter_entity' can be 0. Warning: If 'projectile_entity' has PhysicsBodyComponent and ItemComponent, components without the "enabled_in_world" tag will be disabled, as if the entity was thrown by player.
EntityInflictDamage( entity:int, amount:number, damage_type:string, description:string, ragdoll_fx:string, impulse_x:number, impulse_y:number, entity_who_is_responsible:int = 0, world_pos_x:number = entity_x, world_pos_y:number = entity_y, knockback_force:number = 0 )
EntityIngestMaterial( entity:int, material_type:number, amount:number ) Has the same effects that would occur if 'entity' eats 'amount' number of cells of 'material_type' from the game world. Use this instead of directly modifying IngestionComponent values, if possible. Might not work with non-player entities. Use CellFactory_GetType() to convert a material name to material type.
EntityRemoveIngestionStatusEffect( entity:int, status_type_id:string )
EntityRemoveStainStatusEffect( entity:int, status_type_id:string, status_cooldown:int = 0 )
EntityAddRandomStains( entity:int, material_type:number, amount:number ) Adds random visible stains of 'material_type' to entity. 'amount' controls the number of stain cells added. Does nothing if 'entity' doesn't have a SpriteStainsComponent. Use CellFactory_GetType() to convert a material name to material type.
EntitySetDamageFromMaterial( entity:int, material_name:string, damage:number ) Modifies DamageModelComponents materials_that_damage and materials_how_much_damage variables (and their parsed out data structures)
EntityRefreshSprite( entity:int, sprite_component:int ) Immediately refreshes the given SpriteComponent. Might be useful with text sprites if you want them to update more often than once a second.
EntityGetWandCapacity( entity:int ) int Returns the capacity of a wand entity, or 0 if 'entity' doesnt exist.
EntityGetHotspot( entity:int, hotspot_tag:string, transformed:bool, include_disabled_components:bool = false ) x:number, y:number Returns the position of a hot spot defined by a HotspotComponent. If 'transformed' is true, will return the position in world coordinates, transformed using the entity's transform.
GamePlayAnimation( entity_id:int, name:string, priority:int, followup_name:string = "", followup_priority:int = 0 ) Plays animation. Follow up animation ('followup_name') is applied only if 'followup_priority' is given.
GameGetVelocityCompVelocity( entity_id:int ) x:number, y:number
GameGetGameEffect( entity_id:int, game_effect_name:string ) component_id:int
GameGetGameEffectCount( entity_id:int, game_effect_name:string ) int
LoadGameEffectEntityTo( entity_id:int, game_effect_entity_file:string ) effect_entity_id:int
GetGameEffectLoadTo( entity_id:int, game_effect_name:string, always_load_new:bool ) effect_component_id:int, effect_entity_id:int
PolymorphTableAddEntity( entity_xml:string, is_rare:bool = false, add_only_one_copy:bool = true ) Adds the entity to the polymorph random table
PolymorphTableRemoveEntity( entity_xml:string, from_common_table:bool = true, from_rare_table:bool = true ) Removes the entity from the polymorph random table
PolymorphTableGet( bool rare_table = false ) {string} Returns a list of all the entities in the polymorph random table
PolymorphTableSet( {table_of_xml_entities}, bool rare_table = false ) Set a list of all entities sas the polymorph random table
SetPlayerSpawnLocation( x:number, y:number )
UnlockItem( action_id:string )
GameGetPotionColorUint( entity_id:int ) uint
EntityGetFirstHitboxCenter( entity_id:int ) (x:number, y:number)|nil Returns the centroid of first enabled HitboxComponent found in entity, the position of the entity if no hitbox is found, or nil if the entity does not exist. All returned positions are in world coordinates.
Raytrace( x1:number, y1:number, x2:number, y2:number ) did_hit:bool, hit_x:number, hit_y:number Does a raytrace that stops on any cell it hits.
RaytraceSurfaces( x1:number, y1:number, x2:number, y2:number ) did_hit:bool, hit_x:number, hit_y:number Does a raytrace that stops on any cell that is not fluid, gas (yes, technically gas is a fluid), or fire.
RaytraceSurfacesAndLiquiform( x1:number, y1:number, x2:number, y2:number ) did_hit:bool, hit_x:number, hit_y:number Does a raytrace that stops on any cell that is not gas or fire.
RaytracePlatforms( x1:number, y1:number, x2:number, y2:number ) did_hit:bool, hit_x:number, hit_y:number Does a raytrace that stops on any cell a character can stand on.
FindFreePositionForBody( ideal_pos_x:number, idea_pos_y:number, velocity_x:number, velocity_y:number, body_radius:number ) x:number, y:number
GetSurfaceNormal( pos_x:number, pos_y:number, ray_length:number, ray_count:int ) found_normal:bool, normal_x:number, normal_y:number, approximate_distance_from_surface:number
GameGetSkyVisibility( pos_x:number, pos_y:number ) sky:number Returns the approximate sky visibility (sky ambient level) at a point as a number between 0 and 1. The value is not affected by weather or time of day. This value is used by the post fx shader after some temporal and spatial smoothing.
GameGetFogOfWar( pos_x:number, pos_y:number ) fog_of_war:int Returns an integer between 0 and 255. Larger value means more coverage. Returns -1 if query is outside the bounds of the fog of war grid. For performance reasons consider using the components that manipulate fog of war.
GameGetFogOfWarBilinear( pos_x:number, pos_y:number ) fog_of_war:int Returns an integer between 0 and 255. Larger value means more coverage. Returns -1 if query is outside the bounds of the fog of war grid. The value is bilinearly filtered using four samples around 'pos'. For performance reasons consider using the components that manipulate fog of war.
GameSetFogOfWar( pos_x:number, pos_y:number, fog_of_war:int ) pos_valid:bool 'fog_of_war' should be between 0 and 255 (but will be clamped to the correct range with a int32->uint8 cast). Larger value means more coverage. Returns a boolean indicating whether or not the position was inside the bounds of the fog of war grid. For performance reasons consider using the components that manipulate fog of war.
DoesWorldExistAt( min_x:int, min_y:int, max_x:int, max_y:int ) bool
StringToHerdId( herd_name:string ) int
HerdIdToString( herd_id:int ) string
GetHerdRelation( herd_id_a:int, herd_id_b:int ) number
EntityGetHerdRelation( entity_a:int, entity_b:int ) number
EntityGetHerdRelationSafe( entity_a:int, entity_b:int ) number does not spam errors, but returns 0 if anything fails
GenomeSetHerdId( entity_id:int, new_herd_id:string ) Deprecated, use GenomeStringToHerdID() and ComponentSetValue2() instead.
EntityGetClosestWormAttractor( pos_x:number, pos_y:number ) entity_id:int, pos_x:number, pos_y:number NOTE: entity_id might be NULL, but pos_x and pos_y could still be valid.
EntityGetClosestWormDetractor( pos_x:number, pos_y:number ) entity_id:int, pos_x:number, pos_y:number, radius:number NOTE: entity_id might be NULL, but pos_x and pos_y could still be valid
GamePrint( log_line:string )
GamePrintImportant( title:string, description:string = "", ui_custom_decoration_file:string = "" )
DEBUG_GetMouseWorld() x:number, y:number
DEBUG_MARK( x:number, y:number, message:string = "", color_r:number = 1, color_g:number = 0, color_b:number = 0 )
GameGetFrameNum() int
GameGetRealWorldTimeSinceStarted() number
InputIsKeyDown( key_code:int ) bool (Debugish function - returns if a key is down, does not depend on state. E.g. player could be in menus or inputting text. See data/scripts/debug/keycodes.lua for the constants).
InputIsKeyJustDown( key_code:int ) bool (Debugish function - returns if a key is down this frame, does not depend on state. E.g. player could be in menus or inputting text. See data/scripts/debug/keycodes.lua for the constants)
InputIsKeyJustUp( key_code:int ) bool (Debugish function - returns if a key is up this frame, does not depend on state. E.g. player could be in menus or inputting text. See data/scripts/debug/keycodes.lua for the constants)
InputGetMousePosOnScreen() x:number, y:number (Debugish function - returns raw x, y coordinates of the mouse on screen)
InputIsMouseButtonDown( mouse_button:int ) bool (Debugish function - returns if mouse button is down. Does not depend on state. E.g. player could be in menus. See data/scripts/debug/keycodes.lua for the constants)
InputIsMouseButtonJustDown( mouse_button:int ) bool (Debugish function - returns if mouse button is down. Does not depend on state. E.g. player could be in menus. See data/scripts/debug/keycodes.lua for the constants)
InputIsMouseButtonJustUp( mouse_button:int ) bool (Debugish function - returns if mouse button is down. Does not depend on state. E.g. player could be in menus. See data/scripts/debug/keycodes.lua for the constants)
InputIsJoystickButtonDown( joystick_index:int, joystick_button:int ) bool (Debugish function - returns if 'joystick' button is down. Does not depend on state. E.g. player could be in menus. See data/scripts/debug/keycodes.lua for the constants)
InputIsJoystickButtonJustDown( joystick_index:int, joystick_button:int ) bool (Debugish function - returns if 'joystick' button is just down. Does not depend on state. E.g. player could be in menus. See data/scripts/debug/keycodes.lua for the constants)
InputGetJoystickAnalogButton( joystick_index:int, analog_button_index:int ) float (Debugish function - returns analog 'joystick' button value (0-1). analog_button_index 0 = left trigger, 1 = right trigger Does not depend on state. E.g. player could be in menus. See data/scripts/debug/keycodes.lua for the constants)
InputIsJoystickConnected( joystick_index:int ) bool (Debugish function - returns true if 'joystick' at that index is connected. Does not depend on state. E.g. player could be in menus. See data/scripts/debug/keycodes.lua for the constants)
InputGetJoystickAnalogStick( joystick_index:int, stick_id:int = 0 ) float x, float y (Debugish function - returns analog stick positions (-1, +1). stick_id 0 = left, 1 = right, Does not depend on state. E.g. player could be in menus. See data/scripts/debug/keycodes.lua for the constants)
IsPlayer( entity_id:int ) bool
IsInvisible( entity_id:int ) bool
GameIsDailyRun() bool
GameIsDailyRunOrDailyPracticeRun() bool
GameIsModeFullyDeterministic() bool
GlobalsSetValue( key:string, value:string )
GlobalsGetValue( key:string, default_value:string = "" )
MagicNumbersGetValue( key:string ) string
SetWorldSeed( new_seed:int )
SessionNumbersGetValue( key:string ) string
SessionNumbersSetValue( key:string, value:string )
SessionNumbersSave()
AutosaveDisable()
StatsGetValue( key:string ) string|nil
StatsGlobalGetValue( key:string ) string
StatsBiomeGetValue( key:string ) string
StatsBiomeReset()
StatsLogPlayerKill( killed_entity_id:int = 0 )
CreateItemActionEntity( action_id:string, x:number = 0, y:number = 0 ) entity_id:int
GetRandomActionWithType( x:number, y:number, max_level:int, type:int, i:int = 0 ) string
GetRandomAction( x:number, y:number, max_level:number, i:int = 0) string
GameGetDateAndTimeUTC() year:int, month:int, day:int, hour:int, minute:int, second:int
GameGetDateAndTimeLocal() ear:int, month:int, day:int, hour:int, minute:int, second:int
GameEmitRainParticles( num_particles:int, width_outside_camera:number, material_name:string, velocity_min:number, velocity_max:number, gravity:number, droplets_bounce:bool, draw_as_long:bool )
GameCutThroughWorldVertical( x:int, y_min:int, y_max:int, radius:number, edge_darkening_width:number ) Each beam adds a little overhead to things like chunk creation, so please call this sparingly.
BiomeMapSetSize( width:int, height:int ) This is available if BIOME_MAP in magic_numbers.xml points to a lua file, in the context of that file.
BiomeMapGetSize() width:int, height:int if BIOME_MAP in magic_numbers.xml points to a lua file returns that context, if not will return the biome_map size
BiomeMapSetPixel( x:int, y:int, color_int:int ) This is available if BIOME_MAP in magic_numbers.xml points to a lua file, in the context of that file.
BiomeMapGetPixel( x:int, y:int ) color:int This is available if BIOME_MAP in magic_numbers.xml points to a lua file, in the context of that file.
BiomeMapConvertPixelFromUintToInt( color:int ) int Swaps red and blue channels of 'color'. This can be used make sense of the BiomeMapGetPixel() return values. E.g. if( BiomeMapGetPixel( x, y ) == BiomeMapConvertPixelFromUintToInt( 0xFF36D517 ) ) then print('hills') end
BiomeMapLoadImage( x:int, y:int, image_filename:string ) This is available if BIOME_MAP in magic_numbers.xml points to a lua file, in the context of that file.
BiomeMapLoadImageCropped( x:int, y:int, image_filename:string, image_x:int, image_y:int, image_w:int, image_h:int ) This is available if BIOME_MAP in magic_numbers.xml points to a lua file, in the context of that file.
BiomeMapGetVerticalPositionInsideBiome( x:number, y:number ) number
BiomeMapGetName( x:number = camera_x, y:number = camera_y ) name
SetRandomSeed( x:number, y:number )
Random( a:int = optional, b:int = optional ) number|int. This is kinda messy. If given 0 arguments, returns number between 0.0 and 1.0. If given 1 arguments, returns int between 0 and 'a'. If given 2 arguments returns int between 'a' and 'b'.
Randomf( min:number = optional, max:number = optional ) number This is kinda messy. If given 0 arguments, returns number between 0.0 and 1.0. If given 1 arguments, returns number between 0.0 and 'a'. If given 2 arguments returns number between 'a' and 'b'.
RandomDistribution( min:int, max:int, mean:int, sharpness:number = 1, baseline:number = 0.005 ) int
RandomDistributionf( min:number, max:number, mean:number, sharpness:number = 1, baseline:number = 0.005 ) number
ProceduralRandom( x:number, y:number, a:int|number = optional, b:int|number = optional ) int|number This is kinda messy. If given 2 arguments, returns number between 0.0 and 1.0. If given 3 arguments, returns int between 0 and 'a'. If given 4 arguments returns number between 'a' and 'b'.
ProceduralRandomf( x:number, y:number, a:number = optional, b:number = optional ) number This is kinda messy. If given 2 arguments, returns number between 0.0 and 1.0. If given 3 arguments, returns a number between 0 and 'a'. If given 4 arguments returns a number between 'a' and 'b'.
ProceduralRandomi( x:number, y:number, a:int = optional, b:int = optional ) number This is kinda messy. If given 2 arguments, returns 0 or 1. If given 3 arguments, returns an int between 0 and 'a'. If given 4 arguments returns an int between 'a' and 'b'.
PhysicsAddBodyImage( entity_id:int, image_file:string, material:string = "", offset_x:number = 0, offset_y:number = 0, centered:bool = false, is_circle:bool = false, material_image_file:string = "", use_image_as_colors:bool = true ) int_body_id Does not work with PhysicsBody2Component. Returns the id of the created physics body.
PhysicsAddBodyCreateBox( entity_id:int, material:string, offset_x:number, offset_y:number, width:int, height:int, centered:bool = false ) int|nil Does not work with PhysicsBody2Component. Returns the id of the created physics body.
PhysicsAddJoint( entity_id:int, body_id0:int, body_id1:int, offset_x:number, offset_y:number, joint_type:string ) int|nil Does not work with PhysicsBody2Component. Returns the id of the created joint.
PhysicsApplyForce( entity_id:int, force_x:number, force_y:number )
PhysicsApplyTorque( entity_id:int, torque:number )
PhysicsApplyTorqueToComponent( entity_id:int, component_id:int, torque:number )
PhysicsApplyForceOnArea( calculate_force_for_body_fn:function, ignore_this_entity:int, area_min_x:number, area_min_y:number,area_max_x:number, area_max_y:number )
PhysicsRemoveJoints( world_pos_min_x:number, world_pos_min_y:number, world_pos_max_x:number, world_pos_max_y:number )
PhysicsSetStatic( entity_id:int, is_static:bool )
PhysicsGetComponentVelocity( entity_id:int, component_id:int ) vel_x:number, vel_y:number
PhysicsGetComponentAngularVelocity( entity_id:int, component_id:int ) vel:number
PhysicsComponentGetTransform( component_id:int ) x:number, y:number, angle:number, vel_x:number, vel_y:number, angular_vel:number NOTE! results are Box2D units. Velocities need to converted with PhysicsVecToGameVec.
PhysicsComponentSetTransform( component_id:int, x:number, y:number, angle:number, vel_x:number, vel_y:number, angular_vel:number )
PhysicsBodyIDGetFromEntity( entity_id:int, component_id:int = 0 ) {physics_body_id} NOTE! If component_id is given, will return all the bodies linked to that component. If component_id is not given, will return all the bodies linked to the entity (with joints or through components).
PhysicsBodyIDQueryBodies( world_pos_min_x:number, world_pos_min_y:number, world_pos_max_x:number, world_pos_max_y:number, include_static_bodies:boolean = false, are_these_box2d_units:boolean = false ) {physics_body_id} NOTE! returns an array of physics_body_id(s) of all the box2d bodies in the given area. The default coordinates are in game world space. If passing a sixth argument with true, we will assume the coordinates are in box2d units.
PhysicsBodyIDGetTransform( physics_body_id:int ) nil | x:number, y:number, angle:number, vel_x:number, vel_y:number, angular_vel:number NOTE! returns nil, if body was not found. Results are Box2D units. Velocities need to converted with PhysicsVecToGameVec.
PhysicsBodyIDSetTransform( physics_body_id:int, x:number, y:number, angle:number, vel_x:number, vel_y:number, angular_vel:number ) Requires min 3 first parameters.
PhysicsBodyIDApplyForce( physics_body_id:int, force_x:number, force_y:number, world_pos_x:number = nil, world_pos_y:number = nil ) NOTE! force is in box2d units. world_pos_ is game world coordinates. If world_pos is not given will use the objects center as the position of where the force will be applied.
PhysicsBodyIDApplyLinearImpulse( physics_body_id:int, force_x:number, force_y:number, world_pos_x:number = nil, world_pos_y:number = nil ) NOTE! impulse is in box2d units. world_pos_ is game world coordinates. If world_pos is not given will use the objects center as the position of where the force will be applied.
PhysicsBodyIDApplyTorque( physics_body_id:int, torque:number )
PhysicsBodyIDGetWorldCenter( physics_body_id:int ) x:number, y:number NOTE! returns nil, if body was not found. Results are Box2D units.
PhysicsBodyIDGetDamping( physics_body_id:int ) linear_damping:number, angular_damping:number NOTE! returns nil, if body was not found. Results are 0-1.
PhysicsBodyIDSetDamping( physics_body_id:int, linear_damping:number, angular_damping:number = nil ) NOTE! if angular_damping is given will set it as well.
PhysicsBodyIDGetGravityScale( physics_body_id:int ) gravity_scale:number NOTE! returns nil, if body was not found.
PhysicsBodyIDSetGravityScale( physics_body_id:int, gravity_scale:number )
PhysicsBodyIDGetBodyAABB( physics_body_id:int ) nil
PhysicsBody2InitFromComponents( entity_id:int )
PhysicsPosToGamePos( x:number, y:number = 0 ) x:number, y:number
GamePosToPhysicsPos( x:number, y:number = 0 ) x:number, y:number
PhysicsVecToGameVec( x:number, y:number = 0 ) x:number, y:number
GameVecToPhysicsVec( x:number, y:number = 0 ) x:number, y:number
LooseChunk( world_pos_x:number, world_pos_y:number, image_filename:string, max_durability:int = 2147483647 )
VerletApplyCircularForce( world_pos_x:number, world_pos_y:number, radius:number, force:number )
VerletApplyDirectionalForce( world_pos_x:number, world_pos_y:number, radius:number, force_x:number, force_y:number )
AddFlagPersistent( key:string ) bool_is_new
RemoveFlagPersistent( key:string )
HasFlagPersistent( key:string ) bool
GameAddFlagRun( flag:string )
GameRemoveFlagRun( flag:string )
GameHasFlagRun( flag:string ) bool
GameTriggerMusicEvent( event_path:string, can_be_faded:bool, x:number, y:number )
GameTriggerMusicCue( name:string )
GameTriggerMusicFadeOutAndDequeueAll( relative_fade_speed:number = 1 )
GamePlaySound( bank_filename:string, event_path:string, x:number, y:number )
GameEntityPlaySound( entity_id:int, event_name:string ) Plays a sound through all AudioComponents with matching sound in 'entity_id'.
GameEntityPlaySoundLoop( entity:int, component_tag:string, intensity:number, intensity2:number = 0 ) Plays a sound loop through an AudioLoopComponent tagged with 'component_tag' in 'entity'. 'intensity' & 'intensity2' affect the intensity parameters passed to the audio event. Must be called every frame when the sound should play.
GameSetPostFxParameter( parameter_name:string, x:number, y:number, z:number, w:number ) Can be used to pass custom parameters to the post_final shader, or override values set by the game code. The shader uniform called 'parameter_name' will be set to the latest given values on this and following frames.
GameUnsetPostFxParameter( parameter_name:string ) Will remove a post_final shader parameter value binding set via game GameSetPostFxParameter().
GameSetPostFxTextureParameter( parameter_name:string, texture_filename:string, filtering_mode:int, wrapping_mode:int, update_texture:bool = false ) Can be used to pass 2D textures to the post_final shader. The shader uniform called 'parameter_name' will be set to the latest given value on this and following frames. 'texture_filename' can either point to a file, or a virtual file created using the ModImage API.

If 'update_texture' is true, the texture will be re-uploaded to the GPU (could be useful with dynamic textures, but will incur a heavy performance hit with textures that are loaded from the disk).

Accepted values for 'filtering_mode' and 'wrapping_mode' can be found in 'data/libs/utilities.lua'. Each call with a unique 'parameter_name' will create a separate texture while the parameter is in use, so this should be used with some care. While it's possible to change 'texture_filename' on the fly, if texture size changed, this causes destruction of the old texture and allocating a new one, which can be quite slow.
GameUnsetPostFxTextureParameter( name:string ) Will remove a post_final shader parameter value binding set via game GameSetPostFxTextureParameter().
GameTextGetTranslatedOrNot( text_or_key:string ) string
GameTextGet( key:string, param0:string = "", param1:string = "", param2:string = "" ) string
GuiCreate() gui:obj
GuiDestroy( gui:obj )
GuiStartFrame( gui:obj )
GuiOptionsAdd( gui:obj, option:int ) Sets the options that apply to widgets during this frame. For 'option' use the values in the GUI_OPTION table in "data/scripts/lib/utilities.lua". Values from consecutive calls will be combined. For example calling this with the values GUI_OPTION.Align_Left and GUI_OPTION.GamepadDefaultWidget will set both options for the next widget. The options will be cleared on next call to GuiStartFrame().
GuiOptionsRemove( gui:obj, option:int ) Sets the options that apply to widgets during this frame. For 'option' use the values in the GUI_OPTION table in "data/scripts/lib/utilities.lua". Values from consecutive calls will be combined. For example calling this with the values GUI_OPTION.Align_Left and GUI_OPTION.GamepadDefaultWidget will set both options for the next widget. The options will be cleared on next call to GuiStartFrame().
GuiOptionsClear( gui:obj ) Clears the options that apply to widgets during this frame.
GuiOptionsAddForNextWidget( gui:obj, option:int )
GuiColorSetForNextWidget( gui:obj, red:number, green:number, blue:number, alpha:number ) Sets the color of the next widget during this frame. Color components should be in the 0-1 range.
GuiZSet( gui:obj, z:float ) Sets the rendering depth ('z') of the widgets following this call. Larger z = deeper. The z will be set to 0 on the next call to GuiStartFrame().
GuiZSetForNextWidget( gui:obj, z:float )
GuiIdPush( gui:obj, id:int ) Can be used to solve ID conflicts. All ids given to Gui* functions will be hashed with the ids stacked (and hashed together) using GuiIdPush() and GuiIdPop(). The id stack has a max size of 1024, and calls to the function will do nothing if the size is exceeded.
GuiIdPushString( gui:obj, str:string ) Pushes the hash of 'str' as a gui id. See GuiIdPush().
GuiIdPop( gui:obj ) See GuiIdPush().
GuiAnimateBegin( gui:obj ) Starts a scope where animations initiated using GuiAnimateAlphaFadeIn() etc. will be applied to all widgets.
GuiAnimateEnd( gui:obj ) Ends a scope where animations initiated using GuiAnimateAlphaFadeIn() etc. will be applied to all widgets.
GuiAnimateAlphaFadeIn( gui:obj, id:int, speed:number, step:number, reset:bool ) Does an alpha tween animation for all widgets inside a scope set using GuiAnimateBegin() and GuiAnimateEnd().
GuiAnimateScaleIn( gui:obj, id:int, acceleration:number, reset:bool ) Does a scale tween animation for all widgets inside a scope set using GuiAnimateBegin() and GuiAnimateEnd().
GuiText( gui:obj, x:number, y:number, text:string, scale:number = 1, font:string = "", font_is_pixel_font:bool = true )
GuiTextCentered( gui:obj, x:number, y:number, text:string ) Deprecated. Use GuiOptionsAdd() or GuiOptionsAddForNextWidget() with GUI_OPTION.Align_HorizontalCenter and GuiText() instead.
GuiImage( gui:obj, id:int, x:number, y:number, sprite_filename:string, alpha:number = 1, scale:number = 1, scale_y:number = 0, rotation:number = 0, rect_animation_playback_type:int = GUI_RECT_ANIMATION_PLAYBACK.PlayToEndAndHide, rect_animation_name:string = "" ) 'scale' will be used for 'scale_y' if 'scale_y' equals 0.
GuiImageNinePiece( gui:obj, id:int, x:number, y:number, width:number, height:number, alpha:number = 1, sprite_filename:string = "data/ui_gfx/decorations/9piece0_gray.png", sprite_highlight_filename:string = "data/ui_gfx/decorations/9piece0_gray.png" )
GuiButton( gui:obj, id:int, x:number, y:number, text:string, scale:number = 1, font:string = "", font_is_pixel_font:bool = true ) clicked:bool, right_clicked:bool The old parameter order where 'id' is the last parameter is still supported. The function dynamically picks the correct order based on the type of the 4th parameter.
GuiImageButton( gui:obj, id:int, x:number, y:number, text:string, sprite_filename:string ) clicked:bool, right_clicked:bool
GuiSlider( gui:obj, id:int, x:number, y:number, text:string, value:number, value_min:number, value_max:number, value_default:number, value_display_multiplier:number, value_formatting:string, width:number ) new_value:number This is not intended to be outside mod settings menu, and might bug elsewhere.
GuiTextInput( gui:obj, id:int, x:number, y:number, text:string, width:number, max_length:int, allowed_characters:string = "" ) new_text 'allowed_characters' should consist only of ASCII characters. This is not intended to be outside mod settings menu, and might bug elsewhere.
GuiBeginAutoBox( gui:obj )
GuiEndAutoBoxNinePiece( gui:obj, margin:number = 5, size_min_x:number = 0, size_min_y:number = 0, mirrorize_over_x_axis:bool = false, x_axis:number = 0, sprite_filename:string = "data/ui_gfx/decorations/9piece0_gray.png", sprite_highlight_filename:string = "data/ui_gfx/decorations/9piece0_gray.png" )
GuiTooltip( gui:obj, text:string, description:string )
GuiBeginScrollContainer( gui:obj, id:int, x:number, y:number, width:number, height:number, scrollbar_gamepad_focusable:bool = true, margin_x:number = 2, margin_y:number = 2 ) This can be used to create a container with a vertical scroll bar. Widgets between GuiBeginScrollContainer() and GuiEndScrollContainer() will be positioned relative to the container.
GuiEndScrollContainer( gui:obj )
GuiLayoutBeginHorizontal( gui:obj, x:number, y:number, position_in_ui_scale:bool = false, margin_x:number = 2, margin_y:number = 2 ) If 'position_in_ui_scale' is 1, x and y will be in the same scale as other gui positions, otherwise x and y are given as a percentage (0-100) of the gui screen size.
GuiLayoutBeginVertical( gui:obj, x:number, y:number, position_in_ui_scale:bool = false, margin_x:number = 0, margin_y:number = 0 ) If 'position_in_ui_scale' is 1, x and y will be in the same scale as other gui positions, otherwise x and y are given as a percentage (0-100) of the gui screen size.
GuiLayoutAddHorizontalSpacing( gui:obj, amount:number = optional ) Will use the horizontal margin from current layout if amount is not set.
GuiLayoutAddVerticalSpacing( gui:obj, amount:number = optional ) Will use the vertical margin from current layout if amount is not set.
GuiLayoutEnd( gui:obj )
GuiLayoutBeginLayer( gui:obj ) Puts following things to a new layout layer. Can be used to create non-layouted widgets inside a layout.
GuiLayoutEndLayer( gui:obj )
GuiGetScreenDimensions( gui:obj ) width:number, height:number Returns dimensions of viewport in the gui coordinate system (which is equal to the coordinates of the screen bottom right corner in gui coordinates). The values returned may change depending on the game resolution because the UI is scaled for pixel-perfect text rendering.
GuiGetTextDimensions( gui:obj, text:string, scale:number = 1, line_spacing:number = 2, font:string = "", font_is_pixel_font:bool = true ) width:number, height:number Returns size of the given text in the gui coordinate system.
GuiGetImageDimensions( gui:obj, image_filename:string, scale:number = 1 ) width:number, height:number Returns size of the given image in the gui coordinate system.
GuiGetPreviousWidgetInfo( gui:obj ) clicked:bool, right_clicked:bool, hovered:bool, x:number, y:number, width:number, height:number, draw_x:number, draw_y:number, draw_width:number, draw_height:number Returns the final position, size etc calculated for a widget. Some values aren't supported by all widgets.
GameIsBetaBuild() bool
DebugGetIsDevBuild() bool
DebugEnableTrailerMode()
GameGetIsTrailerModeEnabled() bool
Debug_SaveTestPlayer() This doesn't do anything at the moment.
DebugBiomeMapGetFilename( x:number = camera_x, y:number = camera_y ) string
EntityConvertToMaterial( entity_id:int, material:string, use_material_colors:bool = true, replace_existing_cells = false )
ConvertEverythingToGold( material_dynamic:string = "", material_static:string = "" )
ConvertMaterialEverywhere( material_from_type:int, material_to_type:int ) Converts 'material_from' to 'material_to' everwhere in the game world, replaces 'material_from_type' to 'material_to_type' in the material (CellData) global table, and marks 'material_from' as a "Transformed" material. Every call will add a new entry to WorldStateComponent which serializes these changes, so please call sparingly. The material conversion will be spread over multiple frames. 'material_from' will still retain the original name id and wang color. Use CellFactory_GetType() to convert a material name to material type.
ConvertMaterialOnAreaInstantly( area_x:int, area_y:int, area_w:int, area_h:int, material_from_type:int, material_to_type:int, trim_box2d:bool, update_edge_graphics_dummy:bool ) Converts cells of 'material_from_type' to 'material_to_type' in the given area. If 'box2d_trim' is true, will attempt to trim the created cells where they might otherwise cause physics glitching. 'update_edge_graphics_dummy' is not yet supported.
LoadRagdoll( filename:string, pos_x:float, pos_y:float, material:string ="meat", scale_x:float=1, impulse_x:float=0, impulse_y:float=0 ) Loads a given .txt file as a ragdoll into the game, made of the material given in material.
GetDailyPracticeRunSeed() int
ModIsEnabled( mod_id:string ) bool Returns true if a mod with the id 'mod_id' is currently active. For example mod_id = "nightmare".
ModGetActiveModIDs() {string} Returns a table filled with the IDs of currently active mods.
ModGetAPIVersion() int
ModDoesFileExist( filename:string ) boolean Returns true if the file exists.
ModMaterialFilesGet() {string} Returns a list of filenames from which materials were loaded.
ModSettingGet( id:string ) bool|number|string|nil Returns the value of a mod setting. 'id' should normally be in the format 'mod_name.setting_id'. Cache the returned value in your lua context if possible.
ModSettingSet( id:string, value:bool|number|string )
ModSettingGetNextValue( id:string ) bool|number|string|nil Returns the latest value set by the user, which might not be equal to the value that is used in the game (depending on the 'scope' value selected for the setting).
ModSettingSetNextValue( id:string, value:bool|number|string, is_default:bool ) Sets the latest value set by the user, which might not be equal to the value that is displayed to the game (depending on the 'scope' value selected for the setting).
ModSettingRemove( id:string ) was_removed:bool
ModSettingGetCount() int Returns the number of mod settings defined. Use ModSettingGetAtIndex to enumerate the settings.
ModSettingGetAtIndex( index:int ) (name:string, value:bool|number|string|nil, value_next:bool|number|string|nil) | nil 'index' should be 0-based index. Returns nil if 'index' is invalid.
StreamingGetIsConnected() bool
StreamingGetConnectedChannelName() string
StreamingGetVotingCycleDurationFrames() int
StreamingGetRandomViewerName() string
StreamingGetSettingsGhostsNamedAfterViewers() bool
StreamingSetCustomPhaseDurations( time_between_votes_seconds:number, time_voting_seconds:number ) Sets the duration of the next wait and voting phases. Use -1 for default duration.
StreamingForceNewVoting() Cancels whatever is currently going on, and starts a new voting. _streaming_on_vote_start() and _streaming_get_event_for_vote() will be called as usually.
StreamingSetVotingEnabled( enabled:bool ) Turns the voting UI on or off.
ModLuaFileAppend( to_filename:string, from_filename:string ) Basically calls dofile(from_filename) at the end of 'to_filename'. Available only in init.lua. Should not be called after OnMostPostInit(should be avoided after that because changes might not propagate, or could work in non-deterministic manner).
ModLuaFileGetAppends( filename:string ) {string} Returns the paths of files that have been appended to 'filename' using ModLuaFileAppend(). Unlike most Mod* functions, this one is available everywhere.
ModLuaFileSetAppends( filename:string, {string} ) Replaces the appends list (see ModLuaFileAppend) of a file with the given table. Available only in init.lua. Should not be called after OnMostPostInit(should be avoided after that because changes might not propagate, or could work in non-deterministic manner).
ModTextFileGetContent( filename:string ) string Returns the current (modded or not) content of the data file 'filename'. Allows access only to data files and files from enabled mods. "mods/mod/data/file.xml" and "data/file.xml" point to the same file. Unlike most Mod* functions, this one is available everywhere.
ModTextFileSetContent( filename:string, new_content:string ) Sets the content the game sees for the file 'filename'. Allows access only to mod and data files. "mods/mod/data/file.xml" and "data/file.xml" point to the same file. Available only in init.lua. Should not be called after OnMostPostInit (should be avoided after that because changes might not propagate, or could work in non-deterministic manner). ModTextFileWhoSetContent might also return incorrect values if this is used after OnMostPostInit.
ModTextFileWhoSetContent( filename:string ) string Returns the id of the last mod that called ModTextFileSetContent with 'filename', or "". Unlike most Mod* functions, this one is available everywhere.
ModImageMakeEditable( filename:string, width:int, height:int ) id:int, w:int, h:int Makes an image available for in-memory editing through ModImageGetPixel() and ModImageSetPixel().

Returns an id that can be used to access the image, and the dimensions of the image.

If an image file with the name wasn't found, an in-memory image of the given size will be created, filled with empty pixels (0x0), and added to the virtual filesystem under 'filename'.

If an image with the given name has been previously created through ModImageMakeEditable, the id of that image will be returned. In case memory allocation failed, or if this is called outside mod init using a filename that wasn't succesfully used with this function during the init, 0 will be returned as the id.

The game will apply further processing to some images, so the final binary data might end up different. For example, R and B channels are sometimes swapped, and on some textures the colors will be extended by one pixel outside areas where A>0.

If game code has already loaded the image (for example this could be the case with some UI textures), the changes will probably not be applied.

The changes done using the ModImage* API will need to be done again on each game restart/new game. It's possible that some images will be cached over restarts, and changes will not be visible in the game until a full executable restart - you will have to figure out where that applies.

Allows access to data files and files from enabled mods. "mods/mod/data/file.png" and "data/file.png" point to the same file. Available only in init.lua during mod init.
ModImageIdFromFilename( filename:string ) id:int, w:int, h:int Returns an id that can be used with ModImageGetPixel and ModImageSetPixel, and the dimensions of the image.

If a previous successful call to ModImageMakeEditable hasn't been made with the given filename, 0 will be returned as 'id', 'w' and 'h'.

Unlike most Mod* functions, this one is available everywhere.
ModImageGetPixel( id:int, x:int, y:int ) uint Returns the color of a pixel in ABGR format (0xABGR). 'x' and 'y' are zero-based.

Use ModImageMakeEditable to create an id that can be used with this function.

While it's possible to edit images after mod init, it's not guaranteed that game systems will see the changes, as the system might already have loaded the image at that point.

The function will silently fail nad return 0 if 'id' isn't valid.

Unlike most Mod* functions, this one is available everywhere.
ModImageSetPixel( id:int, x:int, y:int, color:uint ) Sets the color of a pixel in ABGR format (0xABGR). 'x' and 'y' are zero-based.

Use ModImageMakeEditable to create an id that can be used with this function.

The function will silently fail if 'id' isn't valid.

Unlike most Mod* functions, this one is available everywhere.
ModImageWhoSetContent( filename:string ) string Returns the id of the last mod that called ModImageMakeEditable with 'filename', or "". Unlike most Mod* functions, this one is available everywhere.
ModImageDoesExist( filename:string ) bool Returns true if a file or virtual image exists for the given filename. Unlike most Mod* functions, this one is available everywhere.
ModMagicNumbersFileAdd( filename:string ) Available only during mod initialization in init.lua.
ModMaterialsFileAdd( filename:string ) Available only during mod initialization in init.lua.
ModRegisterAudioEventMappings( filename:string ) Registers custom fmod events. Needs to be called to make the game find events in mods' audio banks. Event mapping (GUID) files can be generated using FMOD Studio. Available only during mod initialization in init.lua.
ModRegisterMusicBank( filename:string ) Registers a custom bank in the music system. After that the tracks can be configured to play through Biome xml, or using GameTriggerMusicEvent. ModRegisterAudioEventMappings also needs to be called to make the game recognize the events in the bank. Available only during mod initialization in init.lua.
ModDevGenerateSpriteUVsForDirectory( directory_path:string, override_existing:bool = false ) Please supply a path starting with "mods/YOUR_MOD_HERE/" or "data/". If override_existing is true, will always generate new maps, overriding existing files. UV maps are generated when you start or continue a game with your mod enabled. Available only during mod initialization in init.lua via noita_dev.exe
RegisterProjectile( entity_filename:string )
RegisterGunAction()
RegisterGunShotEffects()
BeginProjectile( entity_filename:string )
EndProjectile()
BeginTriggerTimer( timeout_frames:int )
BeginTriggerHitWorld()
BeginTriggerDeath()
EndTrigger()
SetProjectileConfigs()
StartReload( reload_time:int )
ActionUsesRemainingChanged( inventoryitem_id:int, uses_remaining:int ) uses_remaining_reduced:bool
ActionUsed( inventoryitem_id:int )
LogAction( action_name:string )
OnActionPlayed( action_id:string )
OnNotEnoughManaForAction()
BaabInstruction( name:string )
SetValueNumber( key:string, value:number )
GetValueNumber( key:string, default_value:number ) number
SetValueInteger( key:string, value:int )
GetValueInteger( key:string, default_value:int ) int
SetValueBool( key:string, value:number )
GetValueBool( key:string, default_value:number ) bool
dofile( filename:string ) (nil|script_return_type)|(nil, error_string) Returns the script's return value, if any. Returns nil,error_string if the script had errors.
dofile_once( filename:string ) (nil|script_return_type)|(nil, error_string) Runs the script only once per lua context, returns the script's return value, if any. Returns nil,error_string if the script had errors. For performance reasons it is recommended scripts use dofile_once(), unless the standard dofile behaviour is required.