Major restructuring and bug fixes.

Moved a lot of things around, fixed a lot of bugs, made the animations and sounds public. Special thanks to CuckyDev for helping me track down all the small problems that were lingering, and for fixing a major issue with the simulation rate. There's still some stuff to fix and improve, but now this should be more portable and useable by the wider community! 🎉

Co-Authored-By: Regan Green <cuckydev@gmail.com>
This commit is contained in:
Max 2023-07-07 22:01:02 -05:00
parent 0629c7a645
commit ba0e5364bb
51 changed files with 7377 additions and 2373 deletions

View file

@ -2,7 +2,7 @@
A port of Super Mario 64's movement code into Roblox Luau (in `--!strict` mode), hosted as a [rojo](https://rojo.space) project. Based on the SM64 decompilation project hosted at: https://github.com/n64decomp/sm64
I wanted to make this public as a curiousity for anyone who wanted to know how I pulled it off. It **does not include any animations, sounds, or assets from Nintendo**. I do provide some of the scripts I used when I originally ported animations from the SM64 ROM into R15 Roblox avatars, but any future public version of this project from me will use commissioned assets that I have permission to use.
I wanted to make this public as a curiousity for anyone who wanted to know how I pulled it off. It **does not include any animations, sounds, or assets from Nintendo**. I do provide some of the scripts I used when I originally ported animations from the SM64 ROM into R15 Roblox avatars, but they are no longer in use.
Original game is hosted here:<br/>
https://www.roblox.com/games/10238956318/funny-64-bit-platformer
@ -14,6 +14,4 @@ Any bugs or behavioral quirks of the physics in this are intentional and will no
## Terms of Use
You *may* use this in your game **as long as you provide credit** to me and the SM64 Decompilation Project. I would **NOT** advise using it as a foundation for a platformer since it's very rigidly tied to the 30hz physics simulation code of Super Mario 64. It's weirdly programmed and not very intuitive to build off of.
No animations or sounds are provided by default, so you'll have to substitute those appropriately. It's not a trivial task.
You *may* use this in your game, **but you must provide credit** to this repository and the SM64 Decompilation Project. I would **NOT** advise using it as a foundation for a platformer since it's very rigidly tied to the 30hz physics simulation code of Super Mario 64. It's weirdly programmed and not very intuitive to build off of.

View file

@ -1,2 +1,2 @@
[tools]
rojo = "rojo-rbx/rojo@7.2.1"
rojo = "rojo-rbx/rojo@7.3.0"

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,6 @@
{
"properties": {
"Disabled": true,
"RunContext": "Client"
}
}

View file

@ -0,0 +1,6 @@
{
"properties": {
"Disabled": true,
"RunContext": "Client"
}
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,6 @@
{
"properties": {
"Disabled": true,
"RunContext": "Client"
}
}

View file

@ -7,14 +7,9 @@ local Enums = System.Enums
local Util = System.Util
local Action = Enums.Action
local ActionFlags = Enums.ActionFlags
local ActionGroup = Enums.ActionGroups
local AirStep = Enums.AirStep
local MarioEyes = Enums.MarioEyes
local InputFlags = Enums.InputFlags
local MarioFlags = Enums.MarioFlags
local ParticleFlags = Enums.ParticleFlags
type Mario = System.Mario
@ -545,6 +540,8 @@ DEF_ACTION(Action.SIDE_FLIP_LAND_STOP, function(m: Mario)
end
landingStep(m, Animations.SLIDEFLIP_LAND, Action.IDLE)
--m.GfxAngle += Vector3int16.new(0, 0x8000, 0)
return false
end)
@ -562,7 +559,7 @@ DEF_ACTION(Action.TRIPLE_JUMP_LAND_STOP, function(m: Mario)
return true
end
landingStep(m, Animations.GENERAL_LAND, Action.IDLE)
landingStep(m, Animations.TRIPLE_JUMP_LAND, Action.IDLE)
return false
end)
@ -597,12 +594,9 @@ DEF_ACTION(Action.LONG_JUMP_LAND_STOP, function(m: Mario)
return true
end
-- stylua: ignore
landingStep(m,
if m.LongJumpIsSlow
then Animations.CROUCH_FROM_FAST_LONGJUMP
else Animations.CROUCH_FROM_SLOW_LONGJUMP,
landingStep(
m,
if m.LongJumpIsSlow then Animations.CROUCH_FROM_FAST_LONGJUMP else Animations.CROUCH_FROM_SLOW_LONGJUMP,
Action.CROUCHING
)

View file

@ -0,0 +1,6 @@
{
"properties": {
"Disabled": true,
"RunContext": "Client"
}
}

View file

@ -3,10 +3,14 @@ local Mario = {}
Mario.__index = Mario
local SM64 = script.Parent
local Core = SM64.Parent
local Util = require(SM64.Util)
local Enums = require(SM64.Enums)
local Sounds = require(SM64.Sounds)
local Animations = require(SM64.Animations)
local Shared = require(Core.Shared)
local Sounds = Shared.Sounds
local Animations = Shared.Animations
local Types = require(SM64.Types)
local Flags = Types.Flags
@ -28,7 +32,6 @@ local SurfaceClass = Enums.SurfaceClass
local ParticleFlags = Enums.ParticleFlags
local AirStep = Enums.AirStep
local WaterStep = Enums.WaterStep
local GroundStep = Enums.GroundStep
export type BodyState = Types.BodyState
@ -44,7 +47,7 @@ export type Class = Mario
-- BINDINGS
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
local actions: { [number]: MarioAction } = {}
local actions: { MarioAction } = {}
Mario.Animations = Animations
Mario.Actions = actions
Mario.Sounds = Sounds
@ -86,7 +89,7 @@ function Mario.SetAnimation(m: Mario, anim: Animation): number
m.AnimCurrent = nil
end
local startFrame: number = anim:GetAttribute("StartFrame") or -1
local startFrame: number = anim:GetAttribute("StartFrame") or 0
m.AnimAccelAssist = 0
m.AnimAccel = 0
@ -101,8 +104,10 @@ function Mario.SetAnimationWithAccel(m: Mario, anim: Animation, accel: number)
if m.AnimCurrent ~= anim then
m:SetAnimation(anim)
m.AnimAccelAssist = -accel
m.AnimAccel = accel
end
m.AnimAccel = accel
return m.AnimFrame
end
function Mario.SetAnimToFrame(m: Mario, frame: number)
@ -190,7 +195,7 @@ function Mario.PlayJumpSound(m: Mario)
end
function Mario.AdjustSoundForSpeed(m: Mario)
local absForwardVel = math.abs(m.ForwardVel)
local _absForwardVel = math.abs(m.ForwardVel)
-- TODO: Adjust Moving Speed Pitch
end
@ -234,8 +239,8 @@ function Mario.PlayActionSound(m: Mario, sound: Instance?, wave: number?)
end
end
function Mario.PlayLandingSound(m: Mario, sound: Instance?)
local sound = sound or Sounds.ACTION_TERRAIN_LANDING
function Mario.PlayLandingSound(m: Mario, maybeSound: Instance?)
local sound = maybeSound or Sounds.ACTION_TERRAIN_LANDING
-- stylua: ignore
local landSound = if m.Flags:Has(MarioFlags.METAL_CAP)
@ -312,16 +317,10 @@ function Mario.GetFloorClass(m: Mario): number
local floor = m.Floor
if floor then
local hit: BasePart? = floor.Instance
if hit then
local material = floor.Material
local physics = hit.CustomPhysicalProperties
if not physics then
physics = PhysicalProperties.new(material)
end
local hit = floor.Instance
if hit and hit:IsA("BasePart") then
local physics = hit.CurrentPhysicalProperties
local friction = physics.Friction
if friction <= 0.025 then
@ -372,7 +371,7 @@ function Mario.FloorIsSlippery(m: Mario)
if floor then
local floorClass = m:GetFloorClass()
local deg: number = 90
local deg = 90
if floorClass == SurfaceClass.VERY_SLIPPERY then
deg = 10
@ -394,7 +393,7 @@ function Mario.FloorIsSlope(m: Mario)
if floor then
local floorClass = m:GetFloorClass()
local deg: number = 15
local deg = 15
if floorClass == SurfaceClass.VERY_SLIPPERY then
deg = 5
@ -416,7 +415,7 @@ function Mario.FloorIsSteep(m: Mario)
if floor and not m:FacingDownhill() then
local floorClass = m:GetFloorClass()
local deg: number = 30
local deg = 30
if floorClass == SurfaceClass.VERY_SLIPPERY then
deg = 15
@ -641,9 +640,9 @@ function Mario.SetActionCutscene(m: Mario, action: number, actionArg: number): n
return action
end
function Mario.SetAction(m: Mario, action: number, actionArg: number?): boolean
function Mario.SetAction(m: Mario, action: number, maybeActionArg: number?): boolean
local group = bit32.band(action, ActionGroups.GROUP_MASK)
local actionArg: number = actionArg or 0
local actionArg = maybeActionArg or 0
if group == ActionGroups.MOVING then
action = m:SetActionMoving(action, actionArg)
@ -888,14 +887,14 @@ function Mario.StationaryGroundStep(m: Mario): number
end
function Mario.PerformGroundQuarterStep(m: Mario, nextPos: Vector3): number
local lowerPos, lowerWall = Util.FindWallCollisions(nextPos, 30, 24)
local lowerPos, _lowerWall = Util.FindWallCollisions(nextPos, 30, 24)
nextPos = lowerPos
local upperPos, upperWall = Util.FindWallCollisions(nextPos, 60, 50)
nextPos = upperPos
local floorHeight, floor = Util.FindFloor(nextPos)
local ceilHeight, ceil = Util.FindCeil(nextPos, floorHeight)
local ceilHeight, _ceil = Util.FindCeil(nextPos, floorHeight)
m.Wall = upperWall
@ -923,7 +922,7 @@ function Mario.PerformGroundQuarterStep(m: Mario, nextPos: Vector3): number
m.Position = Vector3.new(nextPos.X, floorHeight, nextPos.Z)
if upperWall then
local wallDYaw = Util.Atan2s(upperWall.Normal.Z, upperWall.Normal.X) - m.FaceAngle.Y
local wallDYaw = Util.SignedShort(Util.Atan2s(upperWall.Normal.Z, upperWall.Normal.X) - m.FaceAngle.Y)
if math.abs(wallDYaw) >= 0x2AAA and math.abs(wallDYaw) <= 0x5555 then
return GroundStep.NONE
@ -1015,7 +1014,7 @@ function Mario.PerformAirQuarterStep(m: Mario, intendedPos: Vector3, stepArg: nu
nextPos = lowerPos
local floorHeight, floor = Util.FindFloor(nextPos)
local ceilHeight, ceil = Util.FindCeil(nextPos)
local ceilHeight, _ceil = Util.FindCeil(nextPos, floorHeight)
m.Wall = nil
@ -1073,7 +1072,7 @@ function Mario.PerformAirQuarterStep(m: Mario, intendedPos: Vector3, stepArg: nu
if upperWall or lowerWall then
local wall = assert(upperWall or lowerWall)
local wallDYaw = Util.Atan2s(wall.Normal.Z, wall.Normal.X) - m.FaceAngle.Y
local wallDYaw = Util.SignedShort(Util.Atan2s(wall.Normal.Z, wall.Normal.X) - m.FaceAngle.Y)
m.Wall = wall
if math.abs(wallDYaw) > 0x6000 then
@ -1166,9 +1165,9 @@ function Mario.ApplyGravity(m: Mario)
end
end
function Mario.PerformAirStep(m: Mario, stepArg: number?)
function Mario.PerformAirStep(m: Mario, maybeStepArg: number?)
local stepArg = maybeStepArg or 0
local stepResult = AirStep.NONE
local stepArg = stepArg or 0
m.Wall = nil
for i = 1, 4 do
@ -1255,7 +1254,11 @@ function Mario.UpdateJoystickInputs(m: Mario)
end
if m.IntendedMag > 0 then
m.IntendedYaw = Util.Atan2s(-controller.StickY, controller.StickX)
local camera = workspace.CurrentCamera
local lookVector = camera.CFrame.LookVector
local cameraYaw = Util.Atan2s(-lookVector.Z, -lookVector.X)
m.IntendedYaw = Util.SignedShort(Util.Atan2s(-controller.StickY, controller.StickX) + cameraYaw)
m.Input:Add(InputFlags.NONZERO_ANALOG)
else
m.IntendedYaw = m.FaceAngle.Y
@ -1332,10 +1335,10 @@ end
function Mario.UpdateCaps(m: Mario): Flags
local flags = m.Flags
local action
local _action
if m.CapTimer > 0 then
action = m.Action
_action = m.Action
if m.CapTimer <= 60 then
m.CapTimer -= 1
@ -1395,9 +1398,15 @@ end
function Mario.CheckKickOrPunchWall(m: Mario)
if m.Flags:Has(MarioFlags.PUNCHING, MarioFlags.KICKING, MarioFlags.TRIPPING) then
local range = Vector3.new(Util.Sins(m.FaceAngle.Y), 0, Util.Coss(m.FaceAngle.Y))
local detector = m.Position + range
local disp, wall = Util.FindWallCollisions(detector, 80, 5)
-- stylua: ignore
local range = Vector3.new(
Util.Sins(m.FaceAngle.Y),
0,
Util.Coss(m.FaceAngle.Y)
)
local detector = m.Position + (range * 50)
local _disp, wall = Util.FindWallCollisions(detector, 80, 5)
if wall then
if m.Action() ~= Action.MOVE_PUNCHING or m.ForwardVel >= 0 then
@ -1464,7 +1473,7 @@ function Mario.ExecuteAction(m: Mario): number
m.GfxAngle *= 0
m.AnimDirty = true
m.ThrowMatrix = nil
m.AnimSkipInterp = false
m.AnimSkipInterp = math.max(0, m.AnimSkipInterp - 1)
m:ResetBodyState()
m:UpdateInputs()
@ -1606,6 +1615,7 @@ function Mario.new(): Mario
AnimReset = false,
AnimFrameCount = 0,
AnimAccelAssist = 0,
AnimSkipInterp = 0,
}
return setmetatable(state, Mario)

View file

@ -105,8 +105,9 @@ export type MarioState = {
AnimDirty: boolean,
AnimReset: boolean,
AnimSetFrame: number,
AnimSkipInterp: boolean?,
AnimSkipInterp: number,
}
local result = { Flags = Flags }
return table.freeze(result)
return table.freeze({
Flags = Flags,
})

View file

@ -1,13 +1,14 @@
--!strict
local Core = script.Parent.Parent
local Util = {
TruncateRaycasts = true,
GlobalTimer = 0,
Scale = 1 / 16,
}
local rayParams = RaycastParams.new()
rayParams.CollisionGroup = "Player"
rayParams.RespectCanCollide = true
rayParams.IgnoreWater = true
local SHORT_TO_RAD = (2 * math.pi) / 0x10000
local VECTOR3_XZ = Vector3.one - Vector3.yAxis
@ -58,17 +59,17 @@ end
function Util.ToRotation(v: Vector3int16): CFrame
local angle = Util.ToEulerAngles(v)
-- stylua: ignore
local matrix = CFrame.fromAxisAngle(Vector3.yAxis, angle.Y)
* CFrame.fromAxisAngle(Vector3.xAxis, -angle.X)
* CFrame.fromAxisAngle(Vector3.zAxis, -angle.Z)
local matrix = CFrame.fromAxisAngle(Vector3.yAxis, angle.Y)
* CFrame.fromAxisAngle(Vector3.xAxis, -angle.X)
* CFrame.fromAxisAngle(Vector3.zAxis, -angle.Z)
return matrix
end
function Util.Raycast(pos: Vector3, dir: Vector3, rayParams: RaycastParams?, worldRoot: WorldRoot?): RaycastResult?
function Util.Raycast(pos: Vector3, dir: Vector3, maybeParams: RaycastParams?, worldRoot: WorldRoot?): RaycastResult?
local root = worldRoot or workspace
local result: RaycastResult? = root:Raycast(pos, dir)
local params = maybeParams or rayParams
local result: RaycastResult? = root:Raycast(pos, dir, params)
if script:GetAttribute("Debug") then
local color = Color3.new(result and 0 or 1, result and 1 or 0, 0)
@ -106,16 +107,17 @@ end
function Util.FindFloor(pos: Vector3): (number, RaycastResult?)
local newPos = pos
local height = -11000
if Util.TruncateRaycasts then
if Core:GetAttribute("EmulateLimits") then
local trunc = Vector3int16.new(pos.X, pos.Y, pos.Z)
if math.abs(trunc.X) >= 0x2000 then
return -11000, nil
return height, nil
end
if math.abs(trunc.Z) >= 0x2000 then
return -11000, nil
return height, nil
end
newPos = Vector3.new(trunc.X, trunc.Y, trunc.Z)
@ -124,7 +126,7 @@ function Util.FindFloor(pos: Vector3): (number, RaycastResult?)
local result = Util.RaycastSM64(newPos + (Vector3.yAxis * 100), -Vector3.yAxis * 10000)
if result then
local height = Util.SignedShort(result.Position.Y)
height = Util.SignedShort(result.Position.Y)
result.Position = Vector3.new(pos.X, height, pos.Z)
return height, result
@ -134,8 +136,8 @@ function Util.FindFloor(pos: Vector3): (number, RaycastResult?)
end
function Util.FindCeil(pos: Vector3, height: number?): (number, RaycastResult?)
local pos = Vector3.new(pos.X, (height or pos.Y) + 80, pos.Z)
local result = Util.RaycastSM64(pos, Vector3.yAxis * 10000)
local head = Vector3.new(pos.X, (height or pos.Y) + 80, pos.Z)
local result = Util.RaycastSM64(head, Vector3.yAxis * 10000)
if result then
return result.Position.Y, result
@ -146,7 +148,6 @@ end
function Util.FindWallCollisions(pos: Vector3, offset: number, radius: number): (Vector3, RaycastResult?)
local origin = pos + Vector3.new(0, offset, 0)
local walls: { RaycastResult } = {}
local lastWall: RaycastResult?
local disp = Vector3.zero
@ -158,8 +159,8 @@ function Util.FindWallCollisions(pos: Vector3, offset: number, radius: number):
if math.abs(normal.Y) < 0.01 then
local surface = contact.Position
local offset = (surface - pos) * VECTOR3_XZ
local dist = offset.Magnitude
local move = (surface - pos) * VECTOR3_XZ
local dist = move.Magnitude
if dist < radius then
disp += (contact.Normal * VECTOR3_XZ) * (radius - dist)
@ -215,17 +216,23 @@ function Util.ApproachInt(current: number, target: number, inc: number, dec: num
end
function Util.Sins(short: number): number
short = Util.SignedShort(short)
return math.sin(short * SHORT_TO_RAD)
local value = Util.SignedShort(short)
value = math.floor(value / 16) * 16
return math.sin(value * SHORT_TO_RAD)
end
function Util.Coss(short: number): number
short = Util.SignedShort(short)
local value = Util.SignedShort(short)
value = math.floor(value / 16) * 16
return math.cos(short * SHORT_TO_RAD)
end
local function atan2_lookup(y: number, x: number)
return math.atan2(y, x) / SHORT_TO_RAD
local value = math.atan2(y, x) / SHORT_TO_RAD
value = math.floor(value / 16) * 16
return Util.SignedShort(value)
end
function Util.Atan2s(y: number, x: number): number
@ -270,4 +277,4 @@ function Util.Atan2s(y: number, x: number): number
return Util.SignedShort(ret)
end
return table.freeze(Util)
return Util

View file

@ -1,4 +1,15 @@
--!strict
local Core = script.Parent
if Core:GetAttribute("HotLoading") then
task.wait(3)
end
for i, desc in script:GetDescendants() do
if desc:IsA("BaseScript") then
desc.Enabled = true
end
end
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
@ -8,7 +19,9 @@ local UserInputService = game:GetService("UserInputService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ContextActionService = game:GetService("ContextActionService")
local Sounds = require(script.Sounds)
local Shared = require(Core.Shared)
local Sounds = Shared.Sounds
local Enums = require(script.Enums)
local Mario = require(script.Mario)
local Types = require(script.Types)
@ -16,7 +29,7 @@ local Util = require(script.Util)
local Action = Enums.Action
local Buttons = Enums.Buttons
local InputFlags = Enums.InputFlags
local MarioFlags = Enums.MarioFlags
local ParticleFlags = Enums.ParticleFlags
type InputType = Enum.UserInputType | Enum.KeyCode
@ -24,7 +37,15 @@ type Controller = Types.Controller
type Mario = Mario.Class
local player: Player = assert(Players.LocalPlayer)
local FLIP = CFrame.Angles(0, math.pi, 0)
local STEP_RATE = 30
local NULL_TEXT = `<font color="#FF0000">NULL</font>`
local debugStats = Instance.new("BoolValue")
debugStats.Name = "DebugStats"
debugStats.Archivable = false
debugStats.Parent = game
local PARTICLE_CLASSES = {
Fire = true,
@ -33,41 +54,63 @@ local PARTICLE_CLASSES = {
ParticleEmitter = true,
}
local FLIP = CFrame.Angles(0, math.pi, 0)
local AUTO_STATS = {
"Position",
"Velocity",
"AnimFrame",
"FaceAngle",
"ActionState",
"ActionTimer",
"ActionArg",
"ForwardVel",
"SlideVelX",
"SlideVelZ",
"CeilHeight",
"FloorHeight",
}
local ControlModule: {
GetMoveVector: (self: any) -> Vector3,
}
while not ControlModule do
local inst = player:FindFirstChild("ControlModule", true)
if inst then
ControlModule = (require :: any)(inst)
end
task.wait(0.1)
end
-------------------------------------------------------------------------------------------------------------------------------------------------
-- Input Driver
-------------------------------------------------------------------------------------------------------------------------------------------------
local MATH_TAU = math.pi * 2
local BUTTON_FEED: { Enum.UserInputState } = {}
local BUTTON_A = "BTN_" .. Buttons.A_BUTTON
-- NOTE: I had to replace the default BindAction via KeyCode and UserInputType
-- BindAction forces some mappings (such as R2 mapping to MouseButton1) which you
-- can't turn off otherwise.
local BUTTON_FEED = {}
local BUTTON_BINDS = {}
local function toStrictNumber(str: string): number
local result = tonumber(str)
return assert(result, "Invalid number!")
end
local function processAction(id: string, state: Enum.UserInputState)
if id == "MarioDebug" then
local function processAction(id: string, state: Enum.UserInputState, input: InputObject)
if id == "MarioDebug" and Core:GetAttribute("DebugToggle") then
if state == Enum.UserInputState.Begin then
local isDebug = not script.Util:GetAttribute("Debug")
local character = player.Character
-- stylua: ignore
local rootPart = if character
then character.PrimaryPart
else nil
if rootPart then
local action = rootPart:FindFirstChild("Action")
if action and action:IsA("BillboardGui") then
action.Enabled = isDebug
end
if character then
local isDebug = not character:GetAttribute("Debug")
character:SetAttribute("Debug", isDebug)
end
script.Util:SetAttribute("Debug", isDebug)
end
else
local button = toStrictNumber(id:sub(5))
@ -75,23 +118,40 @@ local function processAction(id: string, state: Enum.UserInputState)
end
end
local function processInput(input: InputObject, gameProcessedEvent: boolean)
if gameProcessedEvent then
return
end
if BUTTON_BINDS[input.UserInputType] ~= nil then
processAction(BUTTON_BINDS[input.UserInputType], input.UserInputState, input)
end
if BUTTON_BINDS[input.KeyCode] ~= nil then
processAction(BUTTON_BINDS[input.KeyCode], input.UserInputState, input)
end
end
UserInputService.InputBegan:Connect(processInput)
UserInputService.InputChanged:Connect(processInput)
UserInputService.InputEnded:Connect(processInput)
local function bindInput(button: number, label: string, ...: InputType)
local id = "BTN_" .. button
ContextActionService:BindAction(id, processAction, true, ...)
if UserInputService.TouchEnabled then
ContextActionService:BindAction(id, processAction, true)
ContextActionService:SetTitle(id, label)
end
for i, input in { ... } do
BUTTON_BINDS[input] = id
end
end
local function updateCollisions()
for i, player in Players:GetPlayers() do
assert(player:IsA("Player"))
-- stylua: ignore
local rootPart = if player.Character
then player.Character.PrimaryPart
else nil
local character = player.Character
local rootPart = character and character.PrimaryPart
if rootPart then
local parts = rootPart:GetConnectedParts(true)
@ -105,12 +165,24 @@ local function updateCollisions()
end
end
local function updateController(controller: Controller, humanoid: Humanoid)
local moveDir = humanoid.MoveDirection
local pos = Vector2.new(moveDir.X, -moveDir.Z)
local len = math.min(1, pos.Magnitude)
local function updateController(controller: Controller, humanoid: Humanoid?)
if not humanoid then
return
end
controller.StickMag = len * 64
local moveDir = ControlModule:GetMoveVector()
local pos = Vector2.new(moveDir.X, -moveDir.Z)
local mag = 0
if pos.Magnitude > 0 then
if pos.Magnitude > 1 then
pos = pos.Unit
end
mag = pos.Magnitude
end
controller.StickMag = mag * 64
controller.StickX = pos.X * 64
controller.StickY = pos.Y * 64
@ -119,26 +191,47 @@ local function updateController(controller: Controller, humanoid: Humanoid)
if humanoid.Jump then
BUTTON_FEED[Buttons.A_BUTTON] = Enum.UserInputState.Begin
humanoid.Jump = false
elseif controller.ButtonDown:Has(Buttons.A_BUTTON) then
BUTTON_FEED[Buttons.A_BUTTON] = Enum.UserInputState.End
end
local character = humanoid.Parent
local lastButtonValue = controller.ButtonDown()
for button, state in pairs(BUTTON_FEED) do
if state == Enum.UserInputState.Begin then
controller.ButtonDown:Add(button)
controller.ButtonPressed:Add(button)
elseif state == Enum.UserInputState.End then
controller.ButtonDown:Remove(button)
end
end
local buttonValue = controller.ButtonDown()
controller.ButtonPressed:Set(buttonValue)
table.clear(BUTTON_FEED)
if character and character:GetAttribute("TAS") then
return
end
if Core:GetAttribute("ToolAssistedInput") then
return
end
local diff = bit32.bxor(buttonValue, lastButtonValue)
controller.ButtonPressed:Band(diff)
end
ContextActionService:BindAction("MarioDebug", processAction, false, Enum.KeyCode.P)
bindInput(Buttons.B_BUTTON, "B", Enum.UserInputType.MouseButton1, Enum.KeyCode.ButtonX)
bindInput(Buttons.Z_TRIG, "Z", Enum.KeyCode.LeftShift, Enum.KeyCode.RightShift, Enum.KeyCode.ButtonL2)
bindInput(
Buttons.Z_TRIG,
"Z",
Enum.KeyCode.LeftShift,
Enum.KeyCode.RightShift,
Enum.KeyCode.ButtonL2,
Enum.KeyCode.ButtonR2
)
-------------------------------------------------------------------------------------------------------------------------------------------------------------
-- Network Dispatch
@ -152,11 +245,7 @@ assert(lazyNetwork:IsA("RemoteEvent"), "bad lazyNetwork!")
function Commands.PlaySound(player: Player, name: string)
local sound: Sound? = Sounds[name]
local character = player.Character
-- stylua: ignore
local rootPart = if character
then character.PrimaryPart
else nil
local rootPart = character and character.PrimaryPart
if rootPart and sound then
local oldSound: Instance? = rootPart:FindFirstChild(name)
@ -177,19 +266,11 @@ end
function Commands.SetParticle(player: Player, name: string, set: boolean)
local character = player.Character
-- stylua: ignore
local rootPart = if character
then character.PrimaryPart
else nil
local rootPart = character and character.PrimaryPart
if rootPart then
local particles = rootPart:FindFirstChild("Particles")
-- stylua: ignore
local inst = if particles
then particles:FindFirstChild(name)
else nil
local inst = particles and particles:FindFirstChild(name)
if inst and PARTICLE_CLASSES[inst.ClassName] then
local particle = inst :: ParticleEmitter
@ -206,11 +287,7 @@ end
function Commands.SetAngle(player: Player, angle: Vector3int16)
local character = player.Character
-- stylua: ignore
local waist = if character
then character:FindFirstChild("Waist", true)
else nil
local waist = character and character:FindFirstChild("Waist", true)
if waist and waist:IsA("Motor6D") then
local props = { C1 = Util.ToRotation(-angle) + waist.C1.Position }
@ -219,6 +296,17 @@ function Commands.SetAngle(player: Player, angle: Vector3int16)
end
end
function Commands.SetCamera(player: Player, cf: CFrame?)
local camera = workspace.CurrentCamera
if cf ~= nil then
camera.CameraType = Enum.CameraType.Scriptable
camera.CFrame = cf
else
camera.CameraType = Enum.CameraType.Custom
end
end
local function processCommand(player: Player, cmd: string, ...: any)
local command = Commands[cmd]
@ -248,16 +336,15 @@ lazyNetwork.OnClientEvent:Connect(onNetworkReceive)
local lastUpdate = os.clock()
local lastAngle: Vector3int16?
local mario: Mario = Mario.new()
local controller = mario.Controller
local enumMap = {}
local goalCF: CFrame
local activeTrack: AnimationTrack?
local peakSpeed = 0
local subframe = 0 -- 30hz subframe
local emptyId = ""
local goalCF: CFrame
local prevCF: CFrame
local activeTrack: AnimationTrack?
local reset = Instance.new("BindableEvent")
reset.Archivable = false
reset.Parent = script
@ -274,8 +361,23 @@ while not player.Character do
end
local character = assert(player.Character)
local pivot = character:GetPivot().Position
mario.Position = Util.ToSM64(pivot)
local pivot = character:GetPivot()
mario.Position = Util.ToSM64(pivot.Position)
goalCF = pivot
prevCF = pivot
local function setDebugStat(key: string, value: any)
if typeof(value) == "Vector3" then
value = string.format("%.3f, %.3f, %.3f", value.X, value.Y, value.Z)
elseif typeof(value) == "Vector3int16" then
value = string.format("%i, %i, %i", value.X, value.Y, value.Z)
elseif type(value) == "number" then
value = string.format("%.3f", value)
end
debugStats:SetAttribute(key, value)
end
local function onReset()
local roblox = Vector3.yAxis * 100
@ -284,13 +386,16 @@ local function onReset()
if char then
local reset = char:FindFirstChild("Reset")
local cf = CFrame.new(roblox)
char:PivotTo(cf)
goalCF = cf
prevCF = cf
if reset and reset:IsA("RemoteEvent") then
reset:FireServer()
end
char:PivotTo(cf)
end
mario.SlideVelX = 0
@ -316,30 +421,44 @@ local function update()
local gfxRot = CFrame.identity
-- stylua: ignore
local humanoid = if character
then character:FindFirstChildOfClass("Humanoid")
else nil
local scale = character:GetScale()
Util.Scale = scale / 16 -- HACK! Should this be instanced?
local simSpeed = tonumber(script:GetAttribute("TimeScale") or nil) or 1
local frames = math.floor((now - lastUpdate) * (STEP_RATE * simSpeed))
local pos = character:GetPivot().Position
local dist = (Util.ToRoblox(mario.Position) - pos).Magnitude
local humanoid = character:FindFirstChildOfClass("Humanoid")
if frames > 0 and humanoid then
lastUpdate = now
updateCollisions()
for i = 1, math.min(4, frames) do
updateController(mario.Controller, humanoid)
mario:ExecuteAction()
end
local pos = Util.ToRoblox(mario.Position)
local rot = Util.ToRotation(mario.FaceAngle)
gfxRot = Util.ToRotation(mario.GfxAngle)
goalCF = CFrame.new(pos) * FLIP * gfxRot
if dist > (scale * 20) then
mario.Position = Util.ToSM64(pos)
end
local interp = math.min(1, simSpeed / 2)
local simSpeed = tonumber(character:GetAttribute("TimeScale") or nil) or 1
subframe += (now - lastUpdate) * (STEP_RATE * simSpeed)
lastUpdate = now
if character:GetAttribute("WingCap") or Core:GetAttribute("WingCap") then
mario.Flags:Add(MarioFlags.WING_CAP)
mario.Flags:Remove(MarioFlags.NORMAL_CAP)
else
mario.Flags:Add(MarioFlags.NORMAL_CAP)
mario.Flags:Remove(MarioFlags.WING_CAP)
end
subframe = math.min(subframe, 4) -- Prevent execution runoff
while subframe >= 1 do
subframe -= 1
updateCollisions()
updateController(mario.Controller, humanoid)
mario:ExecuteAction()
local gfxPos = Util.ToRoblox(mario.Position)
gfxRot = Util.ToRotation(mario.GfxAngle)
prevCF = goalCF
goalCF = CFrame.new(gfxPos) * FLIP * gfxRot
end
if character and goalCF then
local cf = character:GetPivot()
@ -351,6 +470,13 @@ local function update()
local animSpeed = 0.1 / simSpeed
if activeTrack and (activeTrack.Animation ~= anim or mario.AnimReset) then
if tostring(activeTrack.Animation) == "TURNING_PART1" then
if anim and anim.Name == "TURNING_PART2" then
mario.AnimSkipInterp = 2
animSpeed *= 2
end
end
activeTrack:Stop(animSpeed)
activeTrack = nil
end
@ -389,50 +515,59 @@ local function update()
end
if rootPart then
local action = rootPart:FindFirstChild("Action")
local particles = rootPart:FindFirstChild("Particles")
local alignPos = rootPart:FindFirstChildOfClass("AlignPosition")
local alignCF = rootPart:FindFirstChildOfClass("AlignOrientation")
local actionId = mario.Action()
local throw = mario.ThrowMatrix
if throw then
local pos = Util.ToRoblox(throw.Position)
goalCF = throw.Rotation * FLIP + pos
local throwPos = Util.ToRoblox(throw.Position)
goalCF = throw.Rotation * FLIP + throwPos
end
if alignCF then
cf = cf:Lerp(goalCF, interp)
local nextCF = prevCF:Lerp(goalCF, subframe)
-- stylua: ignore
cf = if mario.AnimSkipInterp > 0
then cf.Rotation + nextCF.Position
else nextCF
alignCF.CFrame = cf.Rotation
end
-- stylua: ignore
local debugLabel = if action
then action:FindFirstChildOfClass("TextLabel")
else nil
local isDebug = character:GetAttribute("Debug")
local limits = character:GetAttribute("EmulateLimits")
if debugLabel then
local actionId = mario.Action()
script.Util:SetAttribute("Debug", isDebug)
debugStats.Value = isDebug
-- stylua: ignore
local anim = if activeTrack
then activeTrack.Animation
else nil
if limits ~= nil then
Core:SetAttribute("TruncateBounds", limits)
end
-- stylua: ignore
local animName = if anim
then anim.Name
else nil
if isDebug then
local animName = activeTrack and tostring(activeTrack.Animation)
setDebugStat("Animation", animName)
local debugText = "Action: "
.. Enums.GetName(Action, actionId)
.. "\n"
.. "Animation: "
.. tostring(animName)
.. "\n"
.. "ForwardVel: "
.. string.format("%.2f", mario.ForwardVel)
local actionName = Enums.GetName(Action, actionId)
setDebugStat("Action", actionName)
debugLabel.Text = debugText
local wall = mario.Wall
setDebugStat("Wall", wall and wall.Instance.Name or NULL_TEXT)
local floor = mario.Floor
setDebugStat("Floor", floor and floor.Instance.Name or NULL_TEXT)
local ceil = mario.Ceil
setDebugStat("Ceiling", ceil and ceil.Instance.Name or NULL_TEXT)
end
for _, name in AUTO_STATS do
local value = rawget(mario :: any, name)
setDebugStat(name, value)
end
if alignPos then
@ -440,14 +575,12 @@ local function update()
end
local bodyState = mario.BodyState
local action = mario.Action()
local ang = bodyState.TorsoAngle
if action ~= Action.BUTT_SLIDE and action ~= Action.WALKING then
if actionId ~= Action.BUTT_SLIDE and actionId ~= Action.WALKING then
bodyState.TorsoAngle *= 0
end
local ang = bodyState.TorsoAngle
if ang ~= lastAngle then
networkDispatch("SetAngle", ang)
lastAngle = ang
@ -458,9 +591,7 @@ local function update()
local inst = particles:FindFirstChild(name)
if inst and PARTICLE_CLASSES[inst.ClassName] then
local name = inst.Name
local particle = inst :: ParticleEmitter
local emit = particle:GetAttribute("Emit")
local hasFlag = mario.ParticleFlags:Has(flag)

5
client/init.meta.json Normal file
View file

@ -0,0 +1,5 @@
{
"properties": {
"RunContext": "Client"
}
}

View file

@ -5,55 +5,32 @@
"$className": "DataModel",
"$ignoreUnknownInstances": true,
"ReplicatedFirst": {
"$className": "ReplicatedFirst",
"Workspace": {
"$className": "Workspace",
"$ignoreUnknownInstances": true,
"SM64": {
"$path": "SM64",
"$ignoreUnknownInstances": true
}
},
"$className": "Folder",
"ServerScriptService": {
"$className": "ServerScriptService",
"$ignoreUnknownInstances": true,
"LazyNetworking": {
"$path": "rbx/LazyNetworking.server.lua"
},
"StarterCharacter": {
"$path": "rbx/StarterCharacter"
}
},
"StarterPlayer": {
"$className": "StarterPlayer",
"$ignoreUnknownInstances": true,
"$properties": {
"EnableMouseLockOption": false
},
"StarterCharacterScripts": {
"$className": "StarterCharacterScripts",
"$ignoreUnknownInstances": true,
"Animate": {
"$className": "Hole"
"$attributes": {
"TimeScale": 1,
"WingCap": false,
"HotLoading": false,
"DebugToggle": true,
"TruncateBounds": true,
"ToolAssistedInput": true
},
"Sound": {
"$className": "Hole"
"Client": {
"$path": "client"
},
"Health": {
"$className": "Hole"
"Server": {
"$path": "server"
},
"Appearance": {
"$path": "rbx/Appearance.server.lua"
"Shared": {
"$path": "shared"
}
}
}

View file

@ -3,13 +3,15 @@ local Validators: { [string]: (Player, ...any) -> boolean } = {}
type Echo = () -> ()
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ReplicatedFirst = game:GetService("ReplicatedFirst")
local PhysicsService = game:GetService("PhysicsService")
local Sounds = require(ReplicatedFirst.SM64.Sounds)
local Core = script.Parent.Parent
local Shared = require(Core.Shared)
local Sounds = Shared.Sounds
local lazy = Instance.new("RemoteEvent")
lazy.Parent = ReplicatedStorage
lazy.Name = "LazyNetwork"
lazy.Archivable = false
function Validators.PlaySound(player: Player, name: string)
local sound: Instance? = Sounds[name]
@ -27,19 +29,11 @@ function Validators.SetParticle(player: Player, name: string, set: boolean?)
end
local character = player.Character
-- stylua: ignore
local rootPart = if character
then character.PrimaryPart
else nil
local rootPart = character and character.PrimaryPart
if rootPart then
local particles = rootPart:FindFirstChild("Particles")
-- stylua: ignore
local particle = if particles
then particles:FindFirstChild(name)
else nil
local particle = particles and particles:FindFirstChild(name)
if particle then
return true

View file

@ -0,0 +1,5 @@
{
"properties": {
"Disabled": true
}
}

View file

@ -12,7 +12,7 @@ local userId = player.UserId
local hDesc: HumanoidDescription?
local function patchCollision(desc: Instance)
if desc:IsA("BasePart") and desc.CollisionGroupId ~= 1 then
if desc:IsA("BasePart") and desc.CollisionGroup ~= "Player" then
local canCollide = desc:GetPropertyChangedSignal("CanCollide")
desc.CollisionGroup = "Player"
desc.CanQuery = false
@ -35,8 +35,18 @@ end
task.spawn(patchAllCollision)
character.DescendantAdded:Connect(patchCollision)
character:SetAttribute("TimeScale", 1)
local function reload()
character:ScaleTo(1)
task.spawn(function()
for i = 1, 5 do
character:PivotTo(CFrame.new(0, 100, 0))
task.wait()
end
end)
for retry = 1, 10 do
local success, result = pcall(function()
return Players:GetHumanoidDescriptionFromUserId(userId)

View file

@ -221,49 +221,5 @@
</Properties>
</Item>
</Item>
<Item class="BillboardGui" referent="RBX13">
<Properties>
<bool name="Active">true</bool>
<bool name="AlwaysOnTop">true</bool>
<float name="Brightness">1</float>
<bool name="ClipsDescendants">true</bool>
<bool name="Enabled">false</bool>
<float name="LightInfluence">1</float>
<string name="Name">Action</string>
<UDim2 name="Size">
<XS>0</XS>
<XO>400</XO>
<YS>0</YS>
<YO>100</YO>
</UDim2>
<Vector3 name="StudsOffsetWorldSpace">
<X>0</X>
<Y>5</Y>
<Z>0</Z>
</Vector3>
<token name="ZIndexBehavior">1</token>
</Properties>
<Item class="TextLabel" referent="RBX14">
<Properties>
<float name="BackgroundTransparency">1</float>
<token name="Font">4</token>
<string name="Name">Label</string>
<UDim2 name="Size">
<XS>1</XS>
<XO>0</XO>
<YS>1</YS>
<YO>0</YO>
</UDim2>
<string name="Text"></string>
<Color3 name="TextColor3">
<R>1</R>
<G>1</G>
<B>1</B>
</Color3>
<bool name="TextScaled">true</bool>
<float name="TextStrokeTransparency">0</float>
</Properties>
</Item>
</Item>
</Item>
</roblox>

View file

@ -1,8 +1,9 @@
--!strict
local PhysicsService = game:GetService("PhysicsService")
local StarterPlayer = game:GetService("StarterPlayer")
local Players = game:GetService("Players")
local StarterPlayer = game:GetService("StarterPlayer")
local PhysicsService = game:GetService("PhysicsService")
local StarterCharacterScripts = StarterPlayer.StarterCharacterScripts
local hDesc = Instance.new("HumanoidDescription")
hDesc.HeightScale = 1.3
@ -27,15 +28,38 @@ if bodyColors then
bodyColors:Destroy()
end
local newRoot = script.HumanoidRootPart:Clone()
local newRoot = script.HumanoidRootPart
newRoot.Parent = character :: any
local humanoid = assert(character:FindFirstChildOfClass("Humanoid"))
humanoid:BuildRigFromAttachments()
local dummyScripts = {
"Animate",
"Health",
"Sound",
}
for _, dummy in dummyScripts do
local stub = Instance.new("Hole", StarterCharacterScripts)
stub.Name = dummy
end
for _, child in script:GetChildren() do
child.Parent = StarterCharacterScripts
if child:IsA("Script") then
child.Disabled = false
end
end
character.Name = "StarterCharacter"
character.PrimaryPart = newRoot
character.Parent = StarterPlayer
PhysicsService:CreateCollisionGroup("Player")
PhysicsService:RegisterCollisionGroup("Player")
PhysicsService:CollisionGroupSetCollidable("Default", "Player", false)
for _, player in Players:GetPlayers() do
task.spawn(player.LoadCharacter, player)
end

3040
shared/Animations.model.json Normal file

File diff suppressed because it is too large Load diff

3
shared/README.md Normal file
View file

@ -0,0 +1,3 @@
# Shared - Cloud Assets
This folder contains cloud asset mapping for custom Roblox assets that I use in funny 64-bit platformer. The content linked in here does not source from any assets or content from Nintendo. Voice acting was done by me, and animation work was done by Stalkalek. I also borrowed some stock sounds from Roblox.

773
shared/Sounds.model.json Normal file
View file

@ -0,0 +1,773 @@
{
"className": "Folder",
"children": [
{
"name": "ACTION_BONK",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxasset://sounds/hit.wav"
}
},
{
"name": "ACTION_FLYING_FAST",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": ""
}
},
{
"name": "ACTION_HEAVY_LANDING",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxasset://sounds/action_jump_land.mp3"
}
},
{
"name": "ACTION_HIT",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxassetid://9117969584"
}
},
{
"name": "ACTION_METAL_BONK",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": ""
}
},
{
"name": "ACTION_METAL_HEAVY_LANDING",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": ""
}
},
{
"name": "ACTION_METAL_LANDING",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": ""
}
},
{
"name": "ACTION_METAL_STEP",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": ""
}
},
{
"name": "ACTION_PAT_BACK",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": ""
}
},
{
"name": "ACTION_SIDE_FLIP",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxassetid://6552141879"
}
},
{
"name": "ACTION_SPIN",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxassetid://6552141879"
}
},
{
"name": "ACTION_TERRAIN_BODY_HIT_GROUND",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxassetid://268933841"
}
},
{
"name": "ACTION_TERRAIN_JUMP",
"className": "Configuration"
},
{
"name": "ACTION_TERRAIN_LANDING",
"className": "Configuration"
},
{
"name": "ACTION_TERRAIN_LANDING_DEFAULT",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxasset://sounds/flashbulb.wav"
}
},
{
"name": "ACTION_TERRAIN_LANDING_GRASS",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxasset://sounds/flashbulb.wav"
}
},
{
"name": "ACTION_TERRAIN_LANDING_ICE",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxasset://sounds/flashbulb.wav"
}
},
{
"name": "ACTION_TERRAIN_LANDING_METAL",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxasset://sounds/flashbulb.wav"
}
},
{
"name": "ACTION_TERRAIN_LANDING_SAND",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxasset://sounds/flashbulb.wav"
}
},
{
"name": "ACTION_TERRAIN_LANDING_SNOW",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxasset://sounds/flashbulb.wav"
}
},
{
"name": "ACTION_TERRAIN_LANDING_SPOOKY",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxasset://sounds/flashbulb.wav"
}
},
{
"name": "ACTION_TERRAIN_LANDING_STONE",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxasset://sounds/flashbulb.wav"
}
},
{
"name": "ACTION_TERRAIN_LANDING_WATER",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxasset://sounds/flashbulb.wav"
}
},
{
"name": "ACTION_TERRAIN_STEP",
"className": "Configuration"
},
{
"name": "ACTION_TERRAIN_STEP_DEFAULT",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxassetid://5761648082"
}
},
{
"name": "ACTION_TERRAIN_STEP_GRASS",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxassetid://7340372339"
}
},
{
"name": "ACTION_TERRAIN_STEP_ICE",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxasset://sounds/flashbulb.wav"
}
},
{
"name": "ACTION_TERRAIN_STEP_METAL",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxasset://sounds/flashbulb.wav"
}
},
{
"name": "ACTION_TERRAIN_STEP_SAND",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxassetid://8453417974"
}
},
{
"name": "ACTION_TERRAIN_STEP_SNOW",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxasset://sounds/flashbulb.wav"
}
},
{
"name": "ACTION_TERRAIN_STEP_SPOOKY",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxassetid://6703174876"
}
},
{
"name": "ACTION_TERRAIN_STEP_STONE",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxassetid://5761648082"
}
},
{
"name": "ACTION_TERRAIN_STEP_WATER",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxasset://sounds/switch.wav"
}
},
{
"name": "ACTION_THROW",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": ""
}
},
{
"name": "ACTION_TWIRL",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": ""
}
},
{
"name": "MARIO_ATTACKED",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": ""
}
},
{
"name": "MARIO_DIE",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": ""
}
},
{
"name": "MARIO_DOH",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxassetid://11276169318"
}
},
{
"name": "MARIO_GROUND_POUND_WAH",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": ""
}
},
{
"name": "MARIO_HAHA",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxassetid://11276161775"
}
},
{
"name": "MARIO_HOO",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxassetid://11277164346"
}
},
{
"name": "MARIO_HOOHOO",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxassetid://11276429582"
}
},
{
"name": "MARIO_IMA_TIRED",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxassetid://11276995011"
}
},
{
"name": "MARIO_JUMP",
"className": "Configuration"
},
{
"name": "MARIO_JUMP_HOO",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxassetid://11276348319"
}
},
{
"name": "MARIO_JUMP_WAH",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxassetid://11276772310"
}
},
{
"name": "MARIO_MAMA_MIA",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxassetid://11276475451"
}
},
{
"name": "MARIO_ON_FIRE",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxassetid://11276465437"
}
},
{
"name": "MARIO_OOOF",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxassetid://11276487760"
}
},
{
"name": "MARIO_PANTING",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": ""
}
},
{
"name": "MARIO_PUNCH_HOO",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxassetid://11276348319"
}
},
{
"name": "MARIO_PUNCH_WAH",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxassetid://11276374733"
}
},
{
"name": "MARIO_PUNCH_YAH",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxassetid://11276361489"
}
},
{
"name": "MARIO_SNORING1",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxassetid://11277042069"
}
},
{
"name": "MARIO_SNORING2",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxassetid://11277042275"
}
},
{
"name": "MARIO_SNORING3",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxassetid://11277042405"
}
},
{
"name": "MARIO_THROW_YAH",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxassetid://11276138169"
}
},
{
"name": "MARIO_UH",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxassetid://11276507663"
}
},
{
"name": "MARIO_UH2",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxassetid://11276529034"
}
},
{
"name": "MARIO_WAAAOOOW",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": ""
}
},
{
"name": "MARIO_WAH",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxassetid://11276772310"
}
},
{
"name": "MARIO_WAHA",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxassetid://11276223526"
}
},
{
"name": "MARIO_WHOA",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxassetid://11276240769"
}
},
{
"name": "MARIO_YAH",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxassetid://11276266154"
}
},
{
"name": "MARIO_YAHOO",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxassetid://11276297854"
}
},
{
"name": "MARIO_YAHOO_WAHA_YIPPEE",
"className": "Configuration",
"attributes": {
"MARIO_WAHA": 1,
"MARIO_YAHOO": 3,
"MARIO_YIPPEE": 1
}
},
{
"name": "MARIO_YAH_WAH_HOO",
"className": "Configuration",
"attributes": {
"MARIO_YAH": 1,
"MARIO_HOO": 1,
"MARIO_WAH": 1
}
},
{
"name": "MARIO_YAWNING",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxassetid://11276996044"
}
},
{
"name": "MARIO_YIPPEE",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": "rbxassetid://11276223467"
}
},
{
"name": "MOVING_FLYING",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": ""
}
},
{
"name": "MOVING_LAVA_BURN",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": ""
}
},
{
"name": "MOVING_TERRAIN_SLIDE",
"className": "Sound",
"properties": {
"RollOffMinDistance": 8,
"RollOffMaxDistance": 128,
"SoundId": ""
}
}
]
}

320
shared/init.lua Normal file
View file

@ -0,0 +1,320 @@
--!strict
local Animations = script.Animations
local Sounds = script.Sounds
local AnimTable = {
SLOW_LEDGE_GRAB = Animations.SLOW_LEDGE_GRAB,
FALL_OVER_BACKWARDS = Animations.FALL_OVER_BACKWARDS,
BACKWARD_AIR_KB = Animations.BACKWARD_AIR_KB,
DYING_ON_BACK = Animations.DYING_ON_BACK,
BACKFLIP = Animations.BACKFLIP,
CLIMB_UP_POLE = Animations.CLIMB_UP_POLE,
GRAB_POLE_SHORT = Animations.GRAB_POLE_SHORT,
GRAB_POLE_SWING_PART1 = Animations.GRAB_POLE_SWING_PART1,
GRAB_POLE_SWING_PART2 = Animations.GRAB_POLE_SWING_PART2,
HANDSTAND_IDLE = Animations.HANDSTAND_IDLE,
HANDSTAND_JUMP = Animations.HANDSTAND_JUMP,
START_HANDSTAND = Animations.START_HANDSTAND,
RETURN_FROM_HANDSTAND = Animations.RETURN_FROM_HANDSTAND,
IDLE_ON_POLE = Animations.IDLE_ON_POLE,
A_POSE = Animations.A_POSE,
SKID_ON_GROUND = Animations.SKID_ON_GROUND,
STOP_SKID = Animations.STOP_SKID,
CROUCH_FROM_FAST_LONGJUMP = Animations.CROUCH_FROM_FAST_LONGJUMP,
CROUCH_FROM_SLOW_LONGJUMP = Animations.CROUCH_FROM_SLOW_LONGJUMP,
FAST_LONGJUMP = Animations.FAST_LONGJUMP,
SLOW_LONGJUMP = Animations.SLOW_LONGJUMP,
AIRBORNE_ON_STOMACH = Animations.AIRBORNE_ON_STOMACH,
WALK_WITH_LIGHT_OBJ = Animations.WALK_WITH_LIGHT_OBJ,
RUN_WITH_LIGHT_OBJ = Animations.RUN_WITH_LIGHT_OBJ,
SLOW_WALK_WITH_LIGHT_OBJ = Animations.SLOW_WALK_WITH_LIGHT_OBJ,
SHIVERING_WARMING_HAND = Animations.SHIVERING_WARMING_HAND,
SHIVERING_RETURN_TO_IDLE = Animations.SHIVERING_RETURN_TO_IDLE,
SHIVERING = Animations.SHIVERING,
CLIMB_DOWN_LEDGE = Animations.CLIMB_DOWN_LEDGE,
CREDITS_WAVING = Animations.CREDITS_WAVING,
CREDITS_LOOK_UP = Animations.CREDITS_LOOK_UP,
CREDITS_RETURN_FROM_LOOK_UP = Animations.CREDITS_RETURN_FROM_LOOK_UP,
CREDITS_RAISE_HAND = Animations.CREDITS_RAISE_HAND,
CREDITS_LOWER_HAND = Animations.CREDITS_LOWER_HAND,
CREDITS_TAKE_OFF_CAP = Animations.CREDITS_TAKE_OFF_CAP,
CREDITS_START_WALK_LOOK_UP = Animations.CREDITS_START_WALK_LOOK_UP,
CREDITS_LOOK_BACK_THEN_RUN = Animations.CREDITS_LOOK_BACK_THEN_RUN,
-- FINAL_BOWSER_RAISE_HAND_SPIN = Animations.FINAL_BOWSER_RAISE_HAND_SPIN;
-- FINAL_BOWSER_WING_CAP_TAKE_OFF = Animations.FINAL_BOWSER_WING_CAP_TAKE_OFF;
CREDITS_PEACE_SIGN = Animations.CREDITS_PEACE_SIGN,
STAND_UP_FROM_LAVA_BOOST = Animations.STAND_UP_FROM_LAVA_BOOST,
FIRE_LAVA_BURN = Animations.FIRE_LAVA_BURN,
WING_CAP_FLY = Animations.WING_CAP_FLY,
HANG_ON_OWL = Animations.HANG_ON_OWL,
LAND_ON_STOMACH = Animations.LAND_ON_STOMACH,
FORWARD_AIR_KB = Animations.FORWARD_AIR_KB,
DYING_ON_STOMACH = Animations.DYING_ON_STOMACH,
SUFFOCATING = Animations.SUFFOCATING,
COUGHING = Animations.COUGHING,
THROW_CATCH_KEY = Animations.THROW_CATCH_KEY,
DYING_FALL_OVER = Animations.DYING_FALL_OVER,
IDLE_ON_LEDGE = Animations.IDLE_ON_LEDGE,
FAST_LEDGE_GRAB = Animations.FAST_LEDGE_GRAB,
HANG_ON_CEILING = Animations.HANG_ON_CEILING,
PUT_CAP_ON = Animations.PUT_CAP_ON,
TAKE_CAP_OFF_THEN_ON = Animations.TAKE_CAP_OFF_THEN_ON,
QUICKLY_PUT_CAP_ON = Animations.QUICKLY_PUT_CAP_ON, -- unused
HEAD_STUCK_IN_GROUND = Animations.HEAD_STUCK_IN_GROUND,
GROUND_POUND_LANDING = Animations.GROUND_POUND_LANDING,
TRIPLE_JUMP_GROUND_POUND = Animations.TRIPLE_JUMP_GROUND_POUND,
START_GROUND_POUND = Animations.START_GROUND_POUND,
GROUND_POUND = Animations.GROUND_POUND,
BOTTOM_STUCK_IN_GROUND = Animations.BOTTOM_STUCK_IN_GROUND,
IDLE_WITH_LIGHT_OBJ = Animations.IDLE_WITH_LIGHT_OBJ,
JUMP_LAND_WITH_LIGHT_OBJ = Animations.JUMP_LAND_WITH_LIGHT_OBJ,
JUMP_WITH_LIGHT_OBJ = Animations.JUMP_WITH_LIGHT_OBJ,
FALL_LAND_WITH_LIGHT_OBJ = Animations.FALL_LAND_WITH_LIGHT_OBJ,
FALL_WITH_LIGHT_OBJ = Animations.FALL_WITH_LIGHT_OBJ,
FALL_FROM_SLIDING_WITH_LIGHT_OBJ = Animations.FALL_FROM_SLIDING_WITH_LIGHT_OBJ,
SLIDING_ON_BOTTOM_WITH_LIGHT_OBJ = Animations.SLIDING_ON_BOTTOM_WITH_LIGHT_OBJ,
STAND_UP_FROM_SLIDING_WITH_LIGHT_OBJ = Animations.STAND_UP_FROM_SLIDING_WITH_LIGHT_OBJ,
RIDING_SHELL = Animations.RIDING_SHELL,
WALKING = Animations.WALKING,
FORWARD_FLIP = Animations.FORWARD_FLIP, -- unused
JUMP_RIDING_SHELL = Animations.JUMP_RIDING_SHELL,
LAND_FROM_DOUBLE_JUMP = Animations.LAND_FROM_DOUBLE_JUMP,
DOUBLE_JUMP_FALL = Animations.DOUBLE_JUMP_FALL,
SINGLE_JUMP = Animations.SINGLE_JUMP,
LAND_FROM_SINGLE_JUMP = Animations.LAND_FROM_SINGLE_JUMP,
AIR_KICK = Animations.AIR_KICK,
DOUBLE_JUMP_RISE = Animations.DOUBLE_JUMP_RISE,
START_FORWARD_SPINNING = Animations.START_FORWARD_SPINNING, -- unused
THROW_LIGHT_OBJECT = Animations.THROW_LIGHT_OBJECT,
FALL_FROM_SLIDE_KICK = Animations.FALL_FROM_SLIDE_KICK,
BEND_KNESS_RIDING_SHELL = Animations.BEND_KNESS_RIDING_SHELL, -- unused
LEGS_STUCK_IN_GROUND = Animations.LEGS_STUCK_IN_GROUND,
GENERAL_FALL = Animations.GENERAL_FALL,
GENERAL_LAND = Animations.GENERAL_LAND,
BEING_GRABBED = Animations.BEING_GRABBED,
GRAB_HEAVY_OBJECT = Animations.GRAB_HEAVY_OBJECT,
SLOW_LAND_FROM_DIVE = Animations.SLOW_LAND_FROM_DIVE,
FLY_FROM_CANNON = Animations.FLY_FROM_CANNON,
MOVE_ON_WIRE_NET_RIGHT = Animations.MOVE_ON_WIRE_NET_RIGHT,
MOVE_ON_WIRE_NET_LEFT = Animations.MOVE_ON_WIRE_NET_LEFT,
MISSING_CAP = Animations.MISSING_CAP,
PULL_DOOR_WALK_IN = Animations.PULL_DOOR_WALK_IN,
PUSH_DOOR_WALK_IN = Animations.PUSH_DOOR_WALK_IN,
UNLOCK_DOOR = Animations.UNLOCK_DOOR,
START_REACH_POCKET = Animations.START_REACH_POCKET, -- unused, reaching keys maybe?
REACH_POCKET = Animations.REACH_POCKET, -- unused
STOP_REACH_POCKET = Animations.STOP_REACH_POCKET, -- unused
GROUND_THROW = Animations.GROUND_THROW,
GROUND_KICK = Animations.GROUND_KICK,
FIRST_PUNCH = Animations.FIRST_PUNCH,
SECOND_PUNCH = Animations.SECOND_PUNCH,
FIRST_PUNCH_FAST = Animations.FIRST_PUNCH_FAST,
SECOND_PUNCH_FAST = Animations.SECOND_PUNCH_FAST,
PICK_UP_LIGHT_OBJ = Animations.PICK_UP_LIGHT_OBJ,
PUSHING = Animations.PUSHING,
START_RIDING_SHELL = Animations.START_RIDING_SHELL,
PLACE_LIGHT_OBJ = Animations.PLACE_LIGHT_OBJ,
FORWARD_SPINNING = Animations.FORWARD_SPINNING,
BACKWARD_SPINNING = Animations.BACKWARD_SPINNING,
BREAKDANCE = Animations.BREAKDANCE,
RUNNING = Animations.RUNNING,
RUNNING_UNUSED = Animations.RUNNING_UNUSED, -- unused duplicate, originally part 2?
SOFT_BACK_KB = Animations.SOFT_BACK_KB,
SOFT_FRONT_KB = Animations.SOFT_FRONT_KB,
DYING_IN_QUICKSAND = Animations.DYING_IN_QUICKSAND,
IDLE_IN_QUICKSAND = Animations.IDLE_IN_QUICKSAND,
MOVE_IN_QUICKSAND = Animations.MOVE_IN_QUICKSAND,
ELECTROCUTION = Animations.ELECTROCUTION,
SHOCKED = Animations.SHOCKED,
BACKWARD_KB = Animations.BACKWARD_KB,
FORWARD_KB = Animations.FORWARD_KB,
IDLE_HEAVY_OBJ = Animations.IDLE_HEAVY_OBJ,
-- STAND_AGAINST_WALL = Animations.STAND_AGAINST_WALL;
SIDESTEP_LEFT = Animations.SIDESTEP_LEFT,
SIDESTEP_RIGHT = Animations.SIDESTEP_RIGHT,
START_SLEEP_IDLE = Animations.START_SLEEP_IDLE,
START_SLEEP_SCRATCH = Animations.START_SLEEP_SCRATCH,
START_SLEEP_YAWN = Animations.START_SLEEP_YAWN,
START_SLEEP_SITTING = Animations.START_SLEEP_SITTING,
SLEEP_IDLE = Animations.SLEEP_IDLE,
SLEEP_START_LYING = Animations.SLEEP_START_LYING,
SLEEP_LYING = Animations.SLEEP_LYING,
DIVE = Animations.DIVE,
SLIDE_DIVE = Animations.SLIDE_DIVE,
GROUND_BONK = Animations.GROUND_BONK,
STOP_SLIDE_LIGHT_OBJ = Animations.STOP_SLIDE_LIGHT_OBJ,
SLIDE_KICK = Animations.SLIDE_KICK,
CROUCH_FROM_SLIDE_KICK = Animations.CROUCH_FROM_SLIDE_KICK,
SLIDE_MOTIONLESS = Animations.SLIDE_MOTIONLESS, -- unused
STOP_SLIDE = Animations.STOP_SLIDE,
FALL_FROM_SLIDE = Animations.FALL_FROM_SLIDE,
SLIDE = Animations.SLIDE,
TIPTOE = Animations.TIPTOE,
TWIRL_LAND = Animations.TWIRL_LAND,
TWIRL = Animations.TWIRL,
START_TWIRL = Animations.START_TWIRL,
STOP_CROUCHING = Animations.STOP_CROUCHING,
START_CROUCHING = Animations.START_CROUCHING,
CROUCHING = Animations.CROUCHING,
CRAWLING = Animations.CRAWLING,
STOP_CRAWLING = Animations.STOP_CRAWLING,
START_CRAWLING = Animations.START_CRAWLING,
SUMMON_STAR = Animations.SUMMON_STAR,
RETURN_STAR_APPROACH_DOOR = Animations.RETURN_STAR_APPROACH_DOOR,
BACKWARDS_WATER_KB = Animations.BACKWARDS_WATER_KB,
SWIM_WITH_OBJ_PART1 = Animations.SWIM_WITH_OBJ_PART1,
SWIM_WITH_OBJ_PART2 = Animations.SWIM_WITH_OBJ_PART2,
FLUTTERKICK_WITH_OBJ = Animations.FLUTTERKICK_WITH_OBJ,
WATER_ACTION_END_WITH_OBJ = Animations.WATER_ACTION_END_WITH_OBJ, -- either swimming or flutterkicking
STOP_GRAB_OBJ_WATER = Animations.STOP_GRAB_OBJ_WATER,
WATER_IDLE_WITH_OBJ = Animations.WATER_IDLE_WITH_OBJ,
DROWNING_PART1 = Animations.DROWNING_PART1,
DROWNING_PART2 = Animations.DROWNING_PART2,
WATER_DYING = Animations.WATER_DYING,
WATER_FORWARD_KB = Animations.WATER_FORWARD_KB,
FALL_FROM_WATER = Animations.FALL_FROM_WATER,
SWIM_PART1 = Animations.SWIM_PART1,
SWIM_PART2 = Animations.SWIM_PART2,
FLUTTERKICK = Animations.FLUTTERKICK,
WATER_ACTION_END = Animations.WATER_ACTION_END, -- either swimming or flutterkicking
WATER_PICK_UP_OBJ = Animations.WATER_PICK_UP_OBJ,
WATER_GRAB_OBJ_PART2 = Animations.WATER_GRAB_OBJ_PART2,
WATER_GRAB_OBJ_PART1 = Animations.WATER_GRAB_OBJ_PART1,
WATER_THROW_OBJ = Animations.WATER_THROW_OBJ,
WATER_IDLE = Animations.WATER_IDLE,
WATER_STAR_DANCE = Animations.WATER_STAR_DANCE,
RETURN_FROM_WATER_STAR_DANCE = Animations.RETURN_FROM_WATER_STAR_DANCE,
-- GRAB_BOWSER = Animations.GRAB_BOWSER;
-- SWINGING_BOWSER = Animations.SWINGING_BOWSER;
-- RELEASE_BOWSER = Animations.RELEASE_BOWSER;
-- HOLDING_BOWSER = Animations.HOLDING_BOWSER;
HEAVY_THROW = Animations.HEAVY_THROW,
WALK_PANTING = Animations.WALK_PANTING,
WALK_WITH_HEAVY_OBJ = Animations.WALK_WITH_HEAVY_OBJ,
TURNING_PART1 = Animations.TURNING_PART1,
TURNING_PART2 = Animations.TURNING_PART2,
SLIDEFLIP_LAND = Animations.SLIDEFLIP_LAND,
SLIDEFLIP = Animations.SLIDEFLIP,
TRIPLE_JUMP_LAND = Animations.TRIPLE_JUMP_LAND,
TRIPLE_JUMP = Animations.TRIPLE_JUMP,
FIRST_PERSON = Animations.FIRST_PERSON,
IDLE_HEAD_LEFT = Animations.IDLE_HEAD_LEFT,
IDLE_HEAD_RIGHT = Animations.IDLE_HEAD_RIGHT,
IDLE_HEAD_CENTER = Animations.IDLE_HEAD_CENTER,
HANDSTAND_LEFT = Animations.HANDSTAND_LEFT,
HANDSTAND_RIGHT = Animations.HANDSTAND_RIGHT,
WAKE_FROM_SLEEP = Animations.WAKE_FROM_SLEEP,
WAKE_FROM_LYING = Animations.WAKE_FROM_LYING,
START_TIPTOE = Animations.START_TIPTOE,
SLIDEJUMP = Animations.SLIDEJUMP, -- pole jump and wall kick
START_WALLKICK = Animations.START_WALLKICK,
STAR_DANCE = Animations.STAR_DANCE,
RETURN_FROM_STAR_DANCE = Animations.RETURN_FROM_STAR_DANCE,
FORWARD_SPINNING_FLIP = Animations.FORWARD_SPINNING_FLIP,
TRIPLE_JUMP_FLY = Animations.TRIPLE_JUMP_FLY,
}
local SoundTable = {
ACTION_BONK = Sounds.ACTION_BONK,
ACTION_FLYING_FAST = Sounds.ACTION_FLYING_FAST,
ACTION_HIT = Sounds.ACTION_HIT,
ACTION_METAL_BONK = Sounds.ACTION_METAL_BONK,
ACTION_METAL_HEAVY_LANDING = Sounds.ACTION_METAL_HEAVY_LANDING,
ACTION_METAL_LANDING = Sounds.ACTION_METAL_LANDING,
ACTION_METAL_STEP = Sounds.ACTION_METAL_STEP,
ACTION_PAT_BACK = Sounds.ACTION_PAT_BACK,
ACTION_SIDE_FLIP = Sounds.ACTION_SIDE_FLIP,
ACTION_SPIN = Sounds.ACTION_SPIN,
ACTION_HEAVY_LANDING = Sounds.ACTION_HEAVY_LANDING,
ACTION_TERRAIN_BODY_HIT_GROUND = Sounds.ACTION_TERRAIN_BODY_HIT_GROUND,
ACTION_TERRAIN_JUMP = Sounds.ACTION_TERRAIN_JUMP,
ACTION_TERRAIN_LANDING = Sounds.ACTION_TERRAIN_LANDING,
ACTION_TERRAIN_STEP = Sounds.ACTION_TERRAIN_STEP,
ACTION_THROW = Sounds.ACTION_THROW,
ACTION_TWIRL = Sounds.ACTION_TWIRL,
MARIO_ATTACKED = Sounds.MARIO_ATTACKED,
MARIO_DOH = Sounds.MARIO_DOH,
MARIO_GROUND_POUND_WAH = Sounds.MARIO_GROUND_POUND_WAH,
MARIO_HAHA = Sounds.MARIO_HAHA,
MARIO_HOO = Sounds.MARIO_HOO,
MARIO_HOOHOO = Sounds.MARIO_HOOHOO,
MARIO_IMA_TIRED = Sounds.MARIO_IMA_TIRED,
MARIO_MAMA_MIA = Sounds.MARIO_MAMA_MIA,
MARIO_ON_FIRE = Sounds.MARIO_ON_FIRE,
MARIO_OOOF = Sounds.MARIO_OOOF,
MARIO_PANTING = Sounds.MARIO_PANTING,
MARIO_PUNCH_YAH = Sounds.MARIO_PUNCH_YAH,
MARIO_PUNCH_WAH = Sounds.MARIO_PUNCH_WAH,
MARIO_PUNCH_HOO = Sounds.MARIO_PUNCH_HOO,
MARIO_SNORING1 = Sounds.MARIO_SNORING1,
MARIO_SNORING2 = Sounds.MARIO_SNORING2,
MARIO_SNORING3 = Sounds.MARIO_SNORING3,
MARIO_UH = Sounds.MARIO_UH,
MARIO_UH2 = Sounds.MARIO_UH2,
MARIO_WAAAOOOW = Sounds.MARIO_WAAAOOOW,
MARIO_WAH = Sounds.MARIO_WAH,
MARIO_WAHA = Sounds.MARIO_WAHA,
MARIO_WHOA = Sounds.MARIO_WHOA,
MARIO_YAH = Sounds.MARIO_YAH,
MARIO_YAHOO = Sounds.MARIO_YAHOO,
MARIO_YAWNING = Sounds.MARIO_YAWNING,
MARIO_YIPPEE = Sounds.MARIO_YIPPEE,
MOVING_FLYING = Sounds.MOVING_FLYING,
MOVING_LAVA_BURN = Sounds.MOVING_LAVA_BURN,
MOVING_TERRAIN_SLIDE = Sounds.MOVING_TERRAIN_SLIDE,
MARIO_JUMP = Sounds.MARIO_JUMP,
MARIO_YAH_WAH_HOO = Sounds.MARIO_YAH_WAH_HOO,
MARIO_YAHOO_WAHA_YIPPEE = Sounds.MARIO_YAHOO_WAHA_YIPPEE,
ACTION_TERRAIN_STEP_DEFAULT = Sounds.ACTION_TERRAIN_STEP_DEFAULT,
ACTION_TERRAIN_STEP_GRASS = Sounds.ACTION_TERRAIN_STEP_GRASS,
ACTION_TERRAIN_STEP_ICE = Sounds.ACTION_TERRAIN_STEP_ICE,
ACTION_TERRAIN_STEP_METAL = Sounds.ACTION_TERRAIN_STEP_METAL,
ACTION_TERRAIN_STEP_SAND = Sounds.ACTION_TERRAIN_STEP_SAND,
ACTION_TERRAIN_STEP_SNOW = Sounds.ACTION_TERRAIN_STEP_SNOW,
ACTION_TERRAIN_STEP_SPOOKY = Sounds.ACTION_TERRAIN_STEP_SPOOKY,
ACTION_TERRAIN_STEP_STONE = Sounds.ACTION_TERRAIN_STEP_STONE,
ACTION_TERRAIN_LANDING_DEFAULT = Sounds.ACTION_TERRAIN_LANDING_DEFAULT,
ACTION_TERRAIN_LANDING_GRASS = Sounds.ACTION_TERRAIN_LANDING_GRASS,
ACTION_TERRAIN_LANDING_ICE = Sounds.ACTION_TERRAIN_LANDING_ICE,
ACTION_TERRAIN_LANDING_METAL = Sounds.ACTION_TERRAIN_LANDING_METAL,
ACTION_TERRAIN_LANDING_SAND = Sounds.ACTION_TERRAIN_LANDING_SAND,
ACTION_TERRAIN_LANDING_SNOW = Sounds.ACTION_TERRAIN_LANDING_SNOW,
ACTION_TERRAIN_LANDING_SPOOKY = Sounds.ACTION_TERRAIN_LANDING_SPOOKY,
ACTION_TERRAIN_LANDING_STONE = Sounds.ACTION_TERRAIN_LANDING_STONE,
ACTION_TERRAIN_JUMP_DEFAULT = Sounds.ACTION_TERRAIN_LANDING_DEFAULT,
ACTION_TERRAIN_JUMP_GRASS = Sounds.ACTION_TERRAIN_LANDING_GRASS,
ACTION_TERRAIN_JUMP_ICE = Sounds.ACTION_TERRAIN_LANDING_ICE,
ACTION_TERRAIN_JUMP_METAL = Sounds.ACTION_TERRAIN_LANDING_METAL,
ACTION_TERRAIN_JUMP_SAND = Sounds.ACTION_TERRAIN_LANDING_SAND,
ACTION_TERRAIN_JUMP_SNOW = Sounds.ACTION_TERRAIN_LANDING_SNOW,
ACTION_TERRAIN_JUMP_SPOOKY = Sounds.ACTION_TERRAIN_LANDING_SPOOKY,
ACTION_TERRAIN_JUMP_STONE = Sounds.ACTION_TERRAIN_LANDING_STONE,
}
task.spawn(function()
local ContentProvider = game:GetService("ContentProvider")
local preload = {}
for _, anim in pairs(AnimTable) do
table.insert(preload, anim)
end
ContentProvider:PreloadAsync(preload)
end)
setmetatable(SoundTable, {
__index = function(_, k)
warn("UNKNOWN SOUND:", k)
end,
})
return {
Animations = AnimTable,
Sounds = SoundTable,
}

View file

@ -1,229 +0,0 @@
--!strict
local System = script.Parent
local Assets = System.Assets
local Anims = Assets.Animations
local Data = table.freeze({
SLOW_LEDGE_GRAB = Anims.SLOW_LEDGE_GRAB,
FALL_OVER_BACKWARDS = Anims.FALL_OVER_BACKWARDS,
BACKWARD_AIR_KB = Anims.BACKWARD_AIR_KB,
DYING_ON_BACK = Anims.DYING_ON_BACK,
BACKFLIP = Anims.BACKFLIP,
CLIMB_UP_POLE = Anims.CLIMB_UP_POLE,
GRAB_POLE_SHORT = Anims.GRAB_POLE_SHORT,
GRAB_POLE_SWING_PART1 = Anims.GRAB_POLE_SWING_PART1,
GRAB_POLE_SWING_PART2 = Anims.GRAB_POLE_SWING_PART2,
HANDSTAND_IDLE = Anims.HANDSTAND_IDLE,
HANDSTAND_JUMP = Anims.HANDSTAND_JUMP,
START_HANDSTAND = Anims.START_HANDSTAND,
RETURN_FROM_HANDSTAND = Anims.RETURN_FROM_HANDSTAND,
IDLE_ON_POLE = Anims.IDLE_ON_POLE,
A_POSE = Anims.A_POSE,
SKID_ON_GROUND = Anims.SKID_ON_GROUND,
STOP_SKID = Anims.STOP_SKID,
CROUCH_FROM_FAST_LONGJUMP = Anims.CROUCH_FROM_FAST_LONGJUMP,
CROUCH_FROM_SLOW_LONGJUMP = Anims.CROUCH_FROM_SLOW_LONGJUMP,
FAST_LONGJUMP = Anims.FAST_LONGJUMP,
SLOW_LONGJUMP = Anims.SLOW_LONGJUMP,
AIRBORNE_ON_STOMACH = Anims.AIRBORNE_ON_STOMACH,
WALK_WITH_LIGHT_OBJ = Anims.WALK_WITH_LIGHT_OBJ,
RUN_WITH_LIGHT_OBJ = Anims.RUN_WITH_LIGHT_OBJ,
SLOW_WALK_WITH_LIGHT_OBJ = Anims.SLOW_WALK_WITH_LIGHT_OBJ,
SHIVERING_WARMING_HAND = Anims.SHIVERING_WARMING_HAND,
SHIVERING_RETURN_TO_IDLE = Anims.SHIVERING_RETURN_TO_IDLE,
SHIVERING = Anims.SHIVERING,
CLIMB_DOWN_LEDGE = Anims.CLIMB_DOWN_LEDGE,
CREDITS_WAVING = Anims.CREDITS_WAVING,
CREDITS_LOOK_UP = Anims.CREDITS_LOOK_UP,
CREDITS_RETURN_FROM_LOOK_UP = Anims.CREDITS_RETURN_FROM_LOOK_UP,
CREDITS_RAISE_HAND = Anims.CREDITS_RAISE_HAND,
CREDITS_LOWER_HAND = Anims.CREDITS_LOWER_HAND,
CREDITS_TAKE_OFF_CAP = Anims.CREDITS_TAKE_OFF_CAP,
CREDITS_START_WALK_LOOK_UP = Anims.CREDITS_START_WALK_LOOK_UP,
CREDITS_LOOK_BACK_THEN_RUN = Anims.CREDITS_LOOK_BACK_THEN_RUN,
-- FINAL_BOWSER_RAISE_HAND_SPIN = Anims.FINAL_BOWSER_RAISE_HAND_SPIN;
-- FINAL_BOWSER_WING_CAP_TAKE_OFF = Anims.FINAL_BOWSER_WING_CAP_TAKE_OFF;
CREDITS_PEACE_SIGN = Anims.CREDITS_PEACE_SIGN,
STAND_UP_FROM_LAVA_BOOST = Anims.STAND_UP_FROM_LAVA_BOOST,
FIRE_LAVA_BURN = Anims.FIRE_LAVA_BURN,
WING_CAP_FLY = Anims.WING_CAP_FLY,
HANG_ON_OWL = Anims.HANG_ON_OWL,
LAND_ON_STOMACH = Anims.LAND_ON_STOMACH,
FORWARD_AIR_KB = Anims.FORWARD_AIR_KB,
DYING_ON_STOMACH = Anims.DYING_ON_STOMACH,
SUFFOCATING = Anims.SUFFOCATING,
COUGHING = Anims.COUGHING,
THROW_CATCH_KEY = Anims.THROW_CATCH_KEY,
DYING_FALL_OVER = Anims.DYING_FALL_OVER,
IDLE_ON_LEDGE = Anims.IDLE_ON_LEDGE,
FAST_LEDGE_GRAB = Anims.FAST_LEDGE_GRAB,
HANG_ON_CEILING = Anims.HANG_ON_CEILING,
PUT_CAP_ON = Anims.PUT_CAP_ON,
TAKE_CAP_OFF_THEN_ON = Anims.TAKE_CAP_OFF_THEN_ON,
QUICKLY_PUT_CAP_ON = Anims.QUICKLY_PUT_CAP_ON, -- unused
HEAD_STUCK_IN_GROUND = Anims.HEAD_STUCK_IN_GROUND,
GROUND_POUND_LANDING = Anims.GROUND_POUND_LANDING,
TRIPLE_JUMP_GROUND_POUND = Anims.TRIPLE_JUMP_GROUND_POUND,
START_GROUND_POUND = Anims.START_GROUND_POUND,
GROUND_POUND = Anims.GROUND_POUND,
BOTTOM_STUCK_IN_GROUND = Anims.BOTTOM_STUCK_IN_GROUND,
IDLE_WITH_LIGHT_OBJ = Anims.IDLE_WITH_LIGHT_OBJ,
JUMP_LAND_WITH_LIGHT_OBJ = Anims.JUMP_LAND_WITH_LIGHT_OBJ,
JUMP_WITH_LIGHT_OBJ = Anims.JUMP_WITH_LIGHT_OBJ,
FALL_LAND_WITH_LIGHT_OBJ = Anims.FALL_LAND_WITH_LIGHT_OBJ,
FALL_WITH_LIGHT_OBJ = Anims.FALL_WITH_LIGHT_OBJ,
FALL_FROM_SLIDING_WITH_LIGHT_OBJ = Anims.FALL_FROM_SLIDING_WITH_LIGHT_OBJ,
SLIDING_ON_BOTTOM_WITH_LIGHT_OBJ = Anims.SLIDING_ON_BOTTOM_WITH_LIGHT_OBJ,
STAND_UP_FROM_SLIDING_WITH_LIGHT_OBJ = Anims.STAND_UP_FROM_SLIDING_WITH_LIGHT_OBJ,
RIDING_SHELL = Anims.RIDING_SHELL,
WALKING = Anims.WALKING,
FORWARD_FLIP = Anims.FORWARD_FLIP, -- unused
JUMP_RIDING_SHELL = Anims.JUMP_RIDING_SHELL,
LAND_FROM_DOUBLE_JUMP = Anims.LAND_FROM_DOUBLE_JUMP,
DOUBLE_JUMP_FALL = Anims.DOUBLE_JUMP_FALL,
SINGLE_JUMP = Anims.SINGLE_JUMP,
LAND_FROM_SINGLE_JUMP = Anims.LAND_FROM_SINGLE_JUMP,
AIR_KICK = Anims.AIR_KICK,
DOUBLE_JUMP_RISE = Anims.DOUBLE_JUMP_RISE,
START_FORWARD_SPINNING = Anims.START_FORWARD_SPINNING, -- unused
THROW_LIGHT_OBJECT = Anims.THROW_LIGHT_OBJECT,
FALL_FROM_SLIDE_KICK = Anims.FALL_FROM_SLIDE_KICK,
BEND_KNESS_RIDING_SHELL = Anims.BEND_KNESS_RIDING_SHELL, -- unused
LEGS_STUCK_IN_GROUND = Anims.LEGS_STUCK_IN_GROUND,
GENERAL_FALL = Anims.GENERAL_FALL,
GENERAL_LAND = Anims.GENERAL_LAND,
BEING_GRABBED = Anims.BEING_GRABBED,
GRAB_HEAVY_OBJECT = Anims.GRAB_HEAVY_OBJECT,
SLOW_LAND_FROM_DIVE = Anims.SLOW_LAND_FROM_DIVE,
FLY_FROM_CANNON = Anims.FLY_FROM_CANNON,
MOVE_ON_WIRE_NET_RIGHT = Anims.MOVE_ON_WIRE_NET_RIGHT,
MOVE_ON_WIRE_NET_LEFT = Anims.MOVE_ON_WIRE_NET_LEFT,
MISSING_CAP = Anims.MISSING_CAP,
PULL_DOOR_WALK_IN = Anims.PULL_DOOR_WALK_IN,
PUSH_DOOR_WALK_IN = Anims.PUSH_DOOR_WALK_IN,
UNLOCK_DOOR = Anims.UNLOCK_DOOR,
START_REACH_POCKET = Anims.START_REACH_POCKET, -- unused, reaching keys maybe?
REACH_POCKET = Anims.REACH_POCKET, -- unused
STOP_REACH_POCKET = Anims.STOP_REACH_POCKET, -- unused
GROUND_THROW = Anims.GROUND_THROW,
GROUND_KICK = Anims.GROUND_KICK,
FIRST_PUNCH = Anims.FIRST_PUNCH,
SECOND_PUNCH = Anims.SECOND_PUNCH,
FIRST_PUNCH_FAST = Anims.FIRST_PUNCH_FAST,
SECOND_PUNCH_FAST = Anims.SECOND_PUNCH_FAST,
PICK_UP_LIGHT_OBJ = Anims.PICK_UP_LIGHT_OBJ,
PUSHING = Anims.PUSHING,
START_RIDING_SHELL = Anims.START_RIDING_SHELL,
PLACE_LIGHT_OBJ = Anims.PLACE_LIGHT_OBJ,
FORWARD_SPINNING = Anims.FORWARD_SPINNING,
BACKWARD_SPINNING = Anims.BACKWARD_SPINNING,
BREAKDANCE = Anims.BREAKDANCE,
RUNNING = Anims.RUNNING,
RUNNING_UNUSED = Anims.RUNNING_UNUSED, -- unused duplicate, originally part 2?
SOFT_BACK_KB = Anims.SOFT_BACK_KB,
SOFT_FRONT_KB = Anims.SOFT_FRONT_KB,
DYING_IN_QUICKSAND = Anims.DYING_IN_QUICKSAND,
IDLE_IN_QUICKSAND = Anims.IDLE_IN_QUICKSAND,
MOVE_IN_QUICKSAND = Anims.MOVE_IN_QUICKSAND,
ELECTROCUTION = Anims.ELECTROCUTION,
SHOCKED = Anims.SHOCKED,
BACKWARD_KB = Anims.BACKWARD_KB,
FORWARD_KB = Anims.FORWARD_KB,
IDLE_HEAVY_OBJ = Anims.IDLE_HEAVY_OBJ,
-- STAND_AGAINST_WALL = Anims.STAND_AGAINST_WALL;
SIDESTEP_LEFT = Anims.SIDESTEP_LEFT,
SIDESTEP_RIGHT = Anims.SIDESTEP_RIGHT,
START_SLEEP_IDLE = Anims.START_SLEEP_IDLE,
START_SLEEP_SCRATCH = Anims.START_SLEEP_SCRATCH,
START_SLEEP_YAWN = Anims.START_SLEEP_YAWN,
START_SLEEP_SITTING = Anims.START_SLEEP_SITTING,
SLEEP_IDLE = Anims.SLEEP_IDLE,
SLEEP_START_LYING = Anims.SLEEP_START_LYING,
SLEEP_LYING = Anims.SLEEP_LYING,
DIVE = Anims.DIVE,
SLIDE_DIVE = Anims.SLIDE_DIVE,
GROUND_BONK = Anims.GROUND_BONK,
STOP_SLIDE_LIGHT_OBJ = Anims.STOP_SLIDE_LIGHT_OBJ,
SLIDE_KICK = Anims.SLIDE_KICK,
CROUCH_FROM_SLIDE_KICK = Anims.CROUCH_FROM_SLIDE_KICK,
SLIDE_MOTIONLESS = Anims.SLIDE_MOTIONLESS, -- unused
STOP_SLIDE = Anims.STOP_SLIDE,
FALL_FROM_SLIDE = Anims.FALL_FROM_SLIDE,
SLIDE = Anims.SLIDE,
TIPTOE = Anims.TIPTOE,
TWIRL_LAND = Anims.TWIRL_LAND,
TWIRL = Anims.TWIRL,
START_TWIRL = Anims.START_TWIRL,
STOP_CROUCHING = Anims.STOP_CROUCHING,
START_CROUCHING = Anims.START_CROUCHING,
CROUCHING = Anims.CROUCHING,
CRAWLING = Anims.CRAWLING,
STOP_CRAWLING = Anims.STOP_CRAWLING,
START_CRAWLING = Anims.START_CRAWLING,
SUMMON_STAR = Anims.SUMMON_STAR,
RETURN_STAR_APPROACH_DOOR = Anims.RETURN_STAR_APPROACH_DOOR,
BACKWARDS_WATER_KB = Anims.BACKWARDS_WATER_KB,
SWIM_WITH_OBJ_PART1 = Anims.SWIM_WITH_OBJ_PART1,
SWIM_WITH_OBJ_PART2 = Anims.SWIM_WITH_OBJ_PART2,
FLUTTERKICK_WITH_OBJ = Anims.FLUTTERKICK_WITH_OBJ,
WATER_ACTION_END_WITH_OBJ = Anims.WATER_ACTION_END_WITH_OBJ, -- either swimming or flutterkicking
STOP_GRAB_OBJ_WATER = Anims.STOP_GRAB_OBJ_WATER,
WATER_IDLE_WITH_OBJ = Anims.WATER_IDLE_WITH_OBJ,
DROWNING_PART1 = Anims.DROWNING_PART1,
DROWNING_PART2 = Anims.DROWNING_PART2,
WATER_DYING = Anims.WATER_DYING,
WATER_FORWARD_KB = Anims.WATER_FORWARD_KB,
FALL_FROM_WATER = Anims.FALL_FROM_WATER,
SWIM_PART1 = Anims.SWIM_PART1,
SWIM_PART2 = Anims.SWIM_PART2,
FLUTTERKICK = Anims.FLUTTERKICK,
WATER_ACTION_END = Anims.WATER_ACTION_END, -- either swimming or flutterkicking
WATER_PICK_UP_OBJ = Anims.WATER_PICK_UP_OBJ,
WATER_GRAB_OBJ_PART2 = Anims.WATER_GRAB_OBJ_PART2,
WATER_GRAB_OBJ_PART1 = Anims.WATER_GRAB_OBJ_PART1,
WATER_THROW_OBJ = Anims.WATER_THROW_OBJ,
WATER_IDLE = Anims.WATER_IDLE,
WATER_STAR_DANCE = Anims.WATER_STAR_DANCE,
RETURN_FROM_WATER_STAR_DANCE = Anims.RETURN_FROM_WATER_STAR_DANCE,
-- GRAB_BOWSER = Anims.GRAB_BOWSER;
-- SWINGING_BOWSER = Anims.SWINGING_BOWSER;
-- RELEASE_BOWSER = Anims.RELEASE_BOWSER;
-- HOLDING_BOWSER = Anims.HOLDING_BOWSER;
HEAVY_THROW = Anims.HEAVY_THROW,
WALK_PANTING = Anims.WALK_PANTING,
WALK_WITH_HEAVY_OBJ = Anims.WALK_WITH_HEAVY_OBJ,
TURNING_PART1 = Anims.TURNING_PART1,
TURNING_PART2 = Anims.TURNING_PART2,
SLIDEFLIP_LAND = Anims.SLIDEFLIP_LAND,
SLIDEFLIP = Anims.SLIDEFLIP,
TRIPLE_JUMP_LAND = Anims.TRIPLE_JUMP_LAND,
TRIPLE_JUMP = Anims.TRIPLE_JUMP,
FIRST_PERSON = Anims.FIRST_PERSON,
IDLE_HEAD_LEFT = Anims.IDLE_HEAD_LEFT,
IDLE_HEAD_RIGHT = Anims.IDLE_HEAD_RIGHT,
IDLE_HEAD_CENTER = Anims.IDLE_HEAD_CENTER,
HANDSTAND_LEFT = Anims.HANDSTAND_LEFT,
HANDSTAND_RIGHT = Anims.HANDSTAND_RIGHT,
WAKE_FROM_SLEEP = Anims.WAKE_FROM_SLEEP,
WAKE_FROM_LYING = Anims.WAKE_FROM_LYING,
START_TIPTOE = Anims.START_TIPTOE,
SLIDEJUMP = Anims.SLIDEJUMP, -- pole jump and wall kick
START_WALLKICK = Anims.START_WALLKICK,
STAR_DANCE = Anims.STAR_DANCE,
RETURN_FROM_STAR_DANCE = Anims.RETURN_FROM_STAR_DANCE,
FORWARD_SPINNING_FLIP = Anims.FORWARD_SPINNING_FLIP,
TRIPLE_JUMP_FLY = Anims.TRIPLE_JUMP_FLY,
})
task.spawn(function()
local ContentProvider = game:GetService("ContentProvider")
local preload = {}
for name, anim in pairs(Data) do
table.insert(preload, anim)
end
ContentProvider:PreloadAsync(preload)
end)
return Data

File diff suppressed because it is too large Load diff

View file

@ -1,11 +0,0 @@
# Assets
These are empty asset definitions for the animations and sounds used by the SM64 script.<br/>
The animations define some metadata such as:
* How many frames the animation is
* Whether an animation should loop or freeze at the end
* The address of the animation data in the SM64 (USA) ROM.
* What the upload hash of the asset is (empty)
Sounds can be configuration objects with named sound attributes defining their weight of being rolled.

View file

@ -1,501 +0,0 @@
<roblox version="4">
<Item class="Folder">
<Properties>
<string name="Name">Sounds</string>
</Properties>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">ACTION_BONK</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">ACTION_FLYING_FAST</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">ACTION_HEAVY_LANDING</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">ACTION_HIT</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">ACTION_METAL_BONK</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">ACTION_METAL_HEAVY_LANDING</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">ACTION_METAL_LANDING</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">ACTION_METAL_STEP</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">ACTION_PAT_BACK</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">ACTION_SIDE_FLIP</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">ACTION_SPIN</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">ACTION_TERRAIN_BODY_HIT_GROUND</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">ACTION_TERRAIN_LANDING_DEFAULT</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">ACTION_TERRAIN_LANDING_GRASS</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">ACTION_TERRAIN_LANDING_ICE</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">ACTION_TERRAIN_LANDING_METAL</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">ACTION_TERRAIN_LANDING_SAND</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">ACTION_TERRAIN_LANDING_SNOW</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">ACTION_TERRAIN_LANDING_SPOOKY</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">ACTION_TERRAIN_LANDING_STONE</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">ACTION_TERRAIN_LANDING_WATER</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">ACTION_TERRAIN_STEP_DEFAULT</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">ACTION_TERRAIN_STEP_GRASS</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">ACTION_TERRAIN_STEP_ICE</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">ACTION_TERRAIN_STEP_METAL</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">ACTION_TERRAIN_STEP_SAND</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">ACTION_TERRAIN_STEP_SNOW</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">ACTION_TERRAIN_STEP_SPOOKY</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">ACTION_TERRAIN_STEP_STONE</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">ACTION_TERRAIN_STEP_WATER</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">ACTION_THROW</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">ACTION_TWIRL</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">MARIO_ATTACKED</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">MARIO_DIE</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">MARIO_DOH</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">MARIO_GROUND_POUND_WAH</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">MARIO_HAHA</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">MARIO_HOO</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">MARIO_HOOHOO</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">MARIO_IMA_TIRED</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">MARIO_JUMP_HOO</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">MARIO_JUMP_WAH</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">MARIO_MAMA_MIA</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">MARIO_ON_FIRE</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">MARIO_OOOF</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">MARIO_PANTING</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">MARIO_PUNCH_HOO</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">MARIO_PUNCH_WAH</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">MARIO_PUNCH_YAH</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">MARIO_SNORING1</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">MARIO_SNORING2</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">MARIO_SNORING3</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">MARIO_THROW_YAH</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">MARIO_UH</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">MARIO_UH2</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">MARIO_WAAAOOOW</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">MARIO_WAH</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">MARIO_WAHA</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">MARIO_WHOA</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">MARIO_YAH</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">MARIO_YAHOO</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">MARIO_YAWNING</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">MARIO_YIPPEE</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">MOVING_FLYING</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">MOVING_LAVA_BURN</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Sound">
<Properties>
<float name="EmitterSize">8</float>
<string name="Name">MOVING_TERRAIN_SLIDE</string>
<float name="xmlRead_MaxDistance_3">128</float>
</Properties>
</Item>
<Item class="Configuration">
<Properties>
<string name="Name">ACTION_TERRAIN_JUMP</string>
</Properties>
</Item>
<Item class="Configuration">
<Properties>
<string name="Name">ACTION_TERRAIN_LANDING</string>
</Properties>
</Item>
<Item class="Configuration">
<Properties>
<string name="Name">ACTION_TERRAIN_STEP</string>
</Properties>
</Item>
<Item class="Configuration">
<Properties>
<string name="Name">MARIO_JUMP</string>
</Properties>
</Item>
<Item class="Configuration">
<Properties>
<BinaryString name="AttributesSerialize"><![CDATA[AwAAAAoAAABNQVJJT19XQUhBBgAAAAAAAPA/CwAAAE1BUklPX1lBSE9PBgAAAAAAAAhADAAAAE1BUklPX1lJUFBFRQYAAAAAAADwPw==]]></BinaryString>
<string name="Name">MARIO_YAHOO_WAHA_YIPPEE</string>
</Properties>
</Item>
<Item class="Configuration">
<Properties>
<BinaryString name="AttributesSerialize"><![CDATA[AwAAAAkAAABNQVJJT19IT08GAAAAAAAA8D8JAAAATUFSSU9fV0FIBgAAAAAAAPA/CQAAAE1BUklPX1lBSAYAAAAAAADwPw==]]></BinaryString>
<string name="Name">MARIO_YAH_WAH_HOO</string>
</Properties>
</Item>
</Item>
</roblox>

View file

@ -1,96 +0,0 @@
--!strict
local System = script.Parent
local Assets = System.Assets
local Sounds = Assets.Sounds
local Data = {
ACTION_BONK = Sounds.ACTION_BONK,
ACTION_FLYING_FAST = Sounds.ACTION_FLYING_FAST,
ACTION_HIT = Sounds.ACTION_HIT,
ACTION_METAL_BONK = Sounds.ACTION_METAL_BONK,
ACTION_METAL_HEAVY_LANDING = Sounds.ACTION_METAL_HEAVY_LANDING,
ACTION_METAL_LANDING = Sounds.ACTION_METAL_LANDING,
ACTION_METAL_STEP = Sounds.ACTION_METAL_STEP,
ACTION_PAT_BACK = Sounds.ACTION_PAT_BACK,
ACTION_SIDE_FLIP = Sounds.ACTION_SIDE_FLIP,
ACTION_SPIN = Sounds.ACTION_SPIN,
ACTION_HEAVY_LANDING = Sounds.ACTION_HEAVY_LANDING,
ACTION_TERRAIN_BODY_HIT_GROUND = Sounds.ACTION_TERRAIN_BODY_HIT_GROUND,
ACTION_TERRAIN_JUMP = Sounds.ACTION_TERRAIN_JUMP,
ACTION_TERRAIN_LANDING = Sounds.ACTION_TERRAIN_LANDING,
ACTION_TERRAIN_STEP = Sounds.ACTION_TERRAIN_STEP,
ACTION_THROW = Sounds.ACTION_THROW,
ACTION_TWIRL = Sounds.ACTION_TWIRL,
MARIO_ATTACKED = Sounds.MARIO_ATTACKED,
MARIO_DOH = Sounds.MARIO_DOH,
MARIO_GROUND_POUND_WAH = Sounds.MARIO_GROUND_POUND_WAH,
MARIO_HAHA = Sounds.MARIO_HAHA,
MARIO_HOO = Sounds.MARIO_HOO,
MARIO_HOOHOO = Sounds.MARIO_HOOHOO,
MARIO_IMA_TIRED = Sounds.MARIO_IMA_TIRED,
MARIO_MAMA_MIA = Sounds.MARIO_MAMA_MIA,
MARIO_ON_FIRE = Sounds.MARIO_ON_FIRE,
MARIO_OOOF = Sounds.MARIO_OOOF,
MARIO_PANTING = Sounds.MARIO_PANTING,
MARIO_PUNCH_YAH = Sounds.MARIO_PUNCH_YAH,
MARIO_PUNCH_WAH = Sounds.MARIO_PUNCH_WAH,
MARIO_PUNCH_HOO = Sounds.MARIO_PUNCH_HOO,
MARIO_SNORING1 = Sounds.MARIO_SNORING1,
MARIO_SNORING2 = Sounds.MARIO_SNORING2,
MARIO_SNORING3 = Sounds.MARIO_SNORING3,
MARIO_UH = Sounds.MARIO_UH,
MARIO_UH2 = Sounds.MARIO_UH2,
MARIO_WAAAOOOW = Sounds.MARIO_WAAAOOOW,
MARIO_WAH = Sounds.MARIO_WAH,
MARIO_WAHA = Sounds.MARIO_WAHA,
MARIO_WHOA = Sounds.MARIO_WHOA,
MARIO_YAH = Sounds.MARIO_YAH,
MARIO_YAHOO = Sounds.MARIO_YAHOO,
MARIO_YAWNING = Sounds.MARIO_YAWNING,
MARIO_YIPPEE = Sounds.MARIO_YIPPEE,
MOVING_FLYING = Sounds.MOVING_FLYING,
MOVING_LAVA_BURN = Sounds.MOVING_LAVA_BURN,
MOVING_TERRAIN_SLIDE = Sounds.MOVING_TERRAIN_SLIDE,
MARIO_JUMP = Sounds.MARIO_JUMP,
MARIO_YAH_WAH_HOO = Sounds.MARIO_YAH_WAH_HOO,
MARIO_YAHOO_WAHA_YIPPEE = Sounds.MARIO_YAHOO_WAHA_YIPPEE,
ACTION_TERRAIN_STEP_DEFAULT = Sounds.ACTION_TERRAIN_STEP_DEFAULT,
ACTION_TERRAIN_STEP_GRASS = Sounds.ACTION_TERRAIN_STEP_GRASS,
ACTION_TERRAIN_STEP_ICE = Sounds.ACTION_TERRAIN_STEP_ICE,
ACTION_TERRAIN_STEP_METAL = Sounds.ACTION_TERRAIN_STEP_METAL,
ACTION_TERRAIN_STEP_SAND = Sounds.ACTION_TERRAIN_STEP_SAND,
ACTION_TERRAIN_STEP_SNOW = Sounds.ACTION_TERRAIN_STEP_SNOW,
ACTION_TERRAIN_STEP_SPOOKY = Sounds.ACTION_TERRAIN_STEP_SPOOKY,
ACTION_TERRAIN_STEP_STONE = Sounds.ACTION_TERRAIN_STEP_STONE,
ACTION_TERRAIN_LANDING_DEFAULT = Sounds.ACTION_TERRAIN_LANDING_DEFAULT,
ACTION_TERRAIN_LANDING_GRASS = Sounds.ACTION_TERRAIN_LANDING_GRASS,
ACTION_TERRAIN_LANDING_ICE = Sounds.ACTION_TERRAIN_LANDING_ICE,
ACTION_TERRAIN_LANDING_METAL = Sounds.ACTION_TERRAIN_LANDING_METAL,
ACTION_TERRAIN_LANDING_SAND = Sounds.ACTION_TERRAIN_LANDING_SAND,
ACTION_TERRAIN_LANDING_SNOW = Sounds.ACTION_TERRAIN_LANDING_SNOW,
ACTION_TERRAIN_LANDING_SPOOKY = Sounds.ACTION_TERRAIN_LANDING_SPOOKY,
ACTION_TERRAIN_LANDING_STONE = Sounds.ACTION_TERRAIN_LANDING_STONE,
ACTION_TERRAIN_JUMP_DEFAULT = Sounds.ACTION_TERRAIN_LANDING_DEFAULT,
ACTION_TERRAIN_JUMP_GRASS = Sounds.ACTION_TERRAIN_LANDING_GRASS,
ACTION_TERRAIN_JUMP_ICE = Sounds.ACTION_TERRAIN_LANDING_ICE,
ACTION_TERRAIN_JUMP_METAL = Sounds.ACTION_TERRAIN_LANDING_METAL,
ACTION_TERRAIN_JUMP_SAND = Sounds.ACTION_TERRAIN_LANDING_SAND,
ACTION_TERRAIN_JUMP_SNOW = Sounds.ACTION_TERRAIN_LANDING_SNOW,
ACTION_TERRAIN_JUMP_SPOOKY = Sounds.ACTION_TERRAIN_LANDING_SPOOKY,
ACTION_TERRAIN_JUMP_STONE = Sounds.ACTION_TERRAIN_LANDING_STONE,
}
setmetatable(Data, {
__index = function(t, k)
warn("UNKNOWN SOUND:", k)
end,
})
return table.freeze(Data)