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 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/> Original game is hosted here:<br/>
https://www.roblox.com/games/10238956318/funny-64-bit-platformer 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 ## 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. 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.
No animations or sounds are provided by default, so you'll have to substitute those appropriately. It's not a trivial task.

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -1,4 +1,15 @@
--!strict --!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 Players = game:GetService("Players")
local RunService = game:GetService("RunService") local RunService = game:GetService("RunService")
@ -8,7 +19,9 @@ local UserInputService = game:GetService("UserInputService")
local ReplicatedStorage = game:GetService("ReplicatedStorage") local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ContextActionService = game:GetService("ContextActionService") 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 Enums = require(script.Enums)
local Mario = require(script.Mario) local Mario = require(script.Mario)
local Types = require(script.Types) local Types = require(script.Types)
@ -16,7 +29,7 @@ local Util = require(script.Util)
local Action = Enums.Action local Action = Enums.Action
local Buttons = Enums.Buttons local Buttons = Enums.Buttons
local InputFlags = Enums.InputFlags local MarioFlags = Enums.MarioFlags
local ParticleFlags = Enums.ParticleFlags local ParticleFlags = Enums.ParticleFlags
type InputType = Enum.UserInputType | Enum.KeyCode type InputType = Enum.UserInputType | Enum.KeyCode
@ -24,7 +37,15 @@ type Controller = Types.Controller
type Mario = Mario.Class type Mario = Mario.Class
local player: Player = assert(Players.LocalPlayer) local player: Player = assert(Players.LocalPlayer)
local FLIP = CFrame.Angles(0, math.pi, 0)
local STEP_RATE = 30 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 = { local PARTICLE_CLASSES = {
Fire = true, Fire = true,
@ -33,65 +54,104 @@ local PARTICLE_CLASSES = {
ParticleEmitter = true, 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 -- Input Driver
------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------
local MATH_TAU = math.pi * 2 -- NOTE: I had to replace the default BindAction via KeyCode and UserInputType
local BUTTON_FEED: { Enum.UserInputState } = {} -- BindAction forces some mappings (such as R2 mapping to MouseButton1) which you
local BUTTON_A = "BTN_" .. Buttons.A_BUTTON -- can't turn off otherwise.
local BUTTON_FEED = {}
local BUTTON_BINDS = {}
local function toStrictNumber(str: string): number local function toStrictNumber(str: string): number
local result = tonumber(str) local result = tonumber(str)
return assert(result, "Invalid number!") return assert(result, "Invalid number!")
end end
local function processAction(id: string, state: Enum.UserInputState) local function processAction(id: string, state: Enum.UserInputState, input: InputObject)
if id == "MarioDebug" then if id == "MarioDebug" and Core:GetAttribute("DebugToggle") then
if state == Enum.UserInputState.Begin then if state == Enum.UserInputState.Begin then
local isDebug = not script.Util:GetAttribute("Debug")
local character = player.Character local character = player.Character
-- stylua: ignore if character then
local rootPart = if character local isDebug = not character:GetAttribute("Debug")
then character.PrimaryPart character:SetAttribute("Debug", isDebug)
else nil
if rootPart then
local action = rootPart:FindFirstChild("Action")
if action and action:IsA("BillboardGui") then
action.Enabled = isDebug
end end
end end
script.Util:SetAttribute("Debug", isDebug)
end
else else
local button = toStrictNumber(id:sub(5)) local button = toStrictNumber(id:sub(5))
BUTTON_FEED[button] = state BUTTON_FEED[button] = state
end end
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 function bindInput(button: number, label: string, ...: InputType)
local id = "BTN_" .. button local id = "BTN_" .. button
ContextActionService:BindAction(id, processAction, true, ...)
if UserInputService.TouchEnabled then if UserInputService.TouchEnabled then
ContextActionService:BindAction(id, processAction, true)
ContextActionService:SetTitle(id, label) ContextActionService:SetTitle(id, label)
end end
for i, input in { ... } do
BUTTON_BINDS[input] = id
end
end end
local function updateCollisions() local function updateCollisions()
for i, player in Players:GetPlayers() do for i, player in Players:GetPlayers() do
assert(player:IsA("Player"))
-- stylua: ignore -- stylua: ignore
local rootPart = if player.Character local character = player.Character
then player.Character.PrimaryPart local rootPart = character and character.PrimaryPart
else nil
if rootPart then if rootPart then
local parts = rootPart:GetConnectedParts(true) local parts = rootPart:GetConnectedParts(true)
@ -105,12 +165,24 @@ local function updateCollisions()
end end
end end
local function updateController(controller: Controller, humanoid: Humanoid) local function updateController(controller: Controller, humanoid: Humanoid?)
local moveDir = humanoid.MoveDirection if not humanoid then
local pos = Vector2.new(moveDir.X, -moveDir.Z) return
local len = math.min(1, pos.Magnitude) 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.StickX = pos.X * 64
controller.StickY = pos.Y * 64 controller.StickY = pos.Y * 64
@ -119,26 +191,47 @@ local function updateController(controller: Controller, humanoid: Humanoid)
if humanoid.Jump then if humanoid.Jump then
BUTTON_FEED[Buttons.A_BUTTON] = Enum.UserInputState.Begin BUTTON_FEED[Buttons.A_BUTTON] = Enum.UserInputState.Begin
humanoid.Jump = false
elseif controller.ButtonDown:Has(Buttons.A_BUTTON) then elseif controller.ButtonDown:Has(Buttons.A_BUTTON) then
BUTTON_FEED[Buttons.A_BUTTON] = Enum.UserInputState.End BUTTON_FEED[Buttons.A_BUTTON] = Enum.UserInputState.End
end end
local character = humanoid.Parent
local lastButtonValue = controller.ButtonDown()
for button, state in pairs(BUTTON_FEED) do for button, state in pairs(BUTTON_FEED) do
if state == Enum.UserInputState.Begin then if state == Enum.UserInputState.Begin then
controller.ButtonDown:Add(button) controller.ButtonDown:Add(button)
controller.ButtonPressed:Add(button)
elseif state == Enum.UserInputState.End then elseif state == Enum.UserInputState.End then
controller.ButtonDown:Remove(button) controller.ButtonDown:Remove(button)
end end
end end
local buttonValue = controller.ButtonDown()
controller.ButtonPressed:Set(buttonValue)
table.clear(BUTTON_FEED) 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 end
ContextActionService:BindAction("MarioDebug", processAction, false, Enum.KeyCode.P) ContextActionService:BindAction("MarioDebug", processAction, false, Enum.KeyCode.P)
bindInput(Buttons.B_BUTTON, "B", Enum.UserInputType.MouseButton1, Enum.KeyCode.ButtonX) 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 -- Network Dispatch
@ -152,11 +245,7 @@ assert(lazyNetwork:IsA("RemoteEvent"), "bad lazyNetwork!")
function Commands.PlaySound(player: Player, name: string) function Commands.PlaySound(player: Player, name: string)
local sound: Sound? = Sounds[name] local sound: Sound? = Sounds[name]
local character = player.Character local character = player.Character
local rootPart = character and character.PrimaryPart
-- stylua: ignore
local rootPart = if character
then character.PrimaryPart
else nil
if rootPart and sound then if rootPart and sound then
local oldSound: Instance? = rootPart:FindFirstChild(name) local oldSound: Instance? = rootPart:FindFirstChild(name)
@ -177,19 +266,11 @@ end
function Commands.SetParticle(player: Player, name: string, set: boolean) function Commands.SetParticle(player: Player, name: string, set: boolean)
local character = player.Character local character = player.Character
local rootPart = character and character.PrimaryPart
-- stylua: ignore
local rootPart = if character
then character.PrimaryPart
else nil
if rootPart then if rootPart then
local particles = rootPart:FindFirstChild("Particles") local particles = rootPart:FindFirstChild("Particles")
local inst = particles and particles:FindFirstChild(name)
-- stylua: ignore
local inst = if particles
then particles:FindFirstChild(name)
else nil
if inst and PARTICLE_CLASSES[inst.ClassName] then if inst and PARTICLE_CLASSES[inst.ClassName] then
local particle = inst :: ParticleEmitter local particle = inst :: ParticleEmitter
@ -206,11 +287,7 @@ end
function Commands.SetAngle(player: Player, angle: Vector3int16) function Commands.SetAngle(player: Player, angle: Vector3int16)
local character = player.Character local character = player.Character
local waist = character and character:FindFirstChild("Waist", true)
-- stylua: ignore
local waist = if character
then character:FindFirstChild("Waist", true)
else nil
if waist and waist:IsA("Motor6D") then if waist and waist:IsA("Motor6D") then
local props = { C1 = Util.ToRotation(-angle) + waist.C1.Position } local props = { C1 = Util.ToRotation(-angle) + waist.C1.Position }
@ -219,6 +296,17 @@ function Commands.SetAngle(player: Player, angle: Vector3int16)
end end
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 function processCommand(player: Player, cmd: string, ...: any)
local command = Commands[cmd] local command = Commands[cmd]
@ -248,16 +336,15 @@ lazyNetwork.OnClientEvent:Connect(onNetworkReceive)
local lastUpdate = os.clock() local lastUpdate = os.clock()
local lastAngle: Vector3int16? local lastAngle: Vector3int16?
local mario: Mario = Mario.new() local mario: Mario = Mario.new()
local controller = mario.Controller
local enumMap = {} local subframe = 0 -- 30hz subframe
local goalCF: CFrame
local activeTrack: AnimationTrack?
local peakSpeed = 0
local emptyId = "" local emptyId = ""
local goalCF: CFrame
local prevCF: CFrame
local activeTrack: AnimationTrack?
local reset = Instance.new("BindableEvent") local reset = Instance.new("BindableEvent")
reset.Archivable = false reset.Archivable = false
reset.Parent = script reset.Parent = script
@ -274,8 +361,23 @@ while not player.Character do
end end
local character = assert(player.Character) local character = assert(player.Character)
local pivot = character:GetPivot().Position local pivot = character:GetPivot()
mario.Position = Util.ToSM64(pivot) 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 function onReset()
local roblox = Vector3.yAxis * 100 local roblox = Vector3.yAxis * 100
@ -284,13 +386,16 @@ local function onReset()
if char then if char then
local reset = char:FindFirstChild("Reset") local reset = char:FindFirstChild("Reset")
local cf = CFrame.new(roblox) local cf = CFrame.new(roblox)
char:PivotTo(cf)
goalCF = cf
prevCF = cf
if reset and reset:IsA("RemoteEvent") then if reset and reset:IsA("RemoteEvent") then
reset:FireServer() reset:FireServer()
end end
char:PivotTo(cf)
end end
mario.SlideVelX = 0 mario.SlideVelX = 0
@ -316,30 +421,44 @@ local function update()
local gfxRot = CFrame.identity local gfxRot = CFrame.identity
-- stylua: ignore -- stylua: ignore
local humanoid = if character local scale = character:GetScale()
then character:FindFirstChildOfClass("Humanoid") Util.Scale = scale / 16 -- HACK! Should this be instanced?
else nil
local simSpeed = tonumber(script:GetAttribute("TimeScale") or nil) or 1 local pos = character:GetPivot().Position
local frames = math.floor((now - lastUpdate) * (STEP_RATE * simSpeed)) local dist = (Util.ToRoblox(mario.Position) - pos).Magnitude
local humanoid = character:FindFirstChildOfClass("Humanoid")
if frames > 0 and humanoid then if dist > (scale * 20) then
mario.Position = Util.ToSM64(pos)
end
local simSpeed = tonumber(character:GetAttribute("TimeScale") or nil) or 1
subframe += (now - lastUpdate) * (STEP_RATE * simSpeed)
lastUpdate = now 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() updateCollisions()
for i = 1, math.min(4, frames) do
updateController(mario.Controller, humanoid) updateController(mario.Controller, humanoid)
mario:ExecuteAction() mario:ExecuteAction()
end
local pos = Util.ToRoblox(mario.Position)
local rot = Util.ToRotation(mario.FaceAngle)
local gfxPos = Util.ToRoblox(mario.Position)
gfxRot = Util.ToRotation(mario.GfxAngle) gfxRot = Util.ToRotation(mario.GfxAngle)
goalCF = CFrame.new(pos) * FLIP * gfxRot
end
local interp = math.min(1, simSpeed / 2) prevCF = goalCF
goalCF = CFrame.new(gfxPos) * FLIP * gfxRot
end
if character and goalCF then if character and goalCF then
local cf = character:GetPivot() local cf = character:GetPivot()
@ -351,6 +470,13 @@ local function update()
local animSpeed = 0.1 / simSpeed local animSpeed = 0.1 / simSpeed
if activeTrack and (activeTrack.Animation ~= anim or mario.AnimReset) then 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:Stop(animSpeed)
activeTrack = nil activeTrack = nil
end end
@ -389,50 +515,59 @@ local function update()
end end
if rootPart then if rootPart then
local action = rootPart:FindFirstChild("Action")
local particles = rootPart:FindFirstChild("Particles") local particles = rootPart:FindFirstChild("Particles")
local alignPos = rootPart:FindFirstChildOfClass("AlignPosition") local alignPos = rootPart:FindFirstChildOfClass("AlignPosition")
local alignCF = rootPart:FindFirstChildOfClass("AlignOrientation") local alignCF = rootPart:FindFirstChildOfClass("AlignOrientation")
local actionId = mario.Action()
local throw = mario.ThrowMatrix local throw = mario.ThrowMatrix
if throw then if throw then
local pos = Util.ToRoblox(throw.Position) local throwPos = Util.ToRoblox(throw.Position)
goalCF = throw.Rotation * FLIP + pos goalCF = throw.Rotation * FLIP + throwPos
end end
if alignCF then 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 alignCF.CFrame = cf.Rotation
end end
-- stylua: ignore local isDebug = character:GetAttribute("Debug")
local debugLabel = if action local limits = character:GetAttribute("EmulateLimits")
then action:FindFirstChildOfClass("TextLabel")
else nil
if debugLabel then script.Util:SetAttribute("Debug", isDebug)
local actionId = mario.Action() debugStats.Value = isDebug
-- stylua: ignore if limits ~= nil then
local anim = if activeTrack Core:SetAttribute("TruncateBounds", limits)
then activeTrack.Animation end
else nil
-- stylua: ignore if isDebug then
local animName = if anim local animName = activeTrack and tostring(activeTrack.Animation)
then anim.Name setDebugStat("Animation", animName)
else nil
local debugText = "Action: " local actionName = Enums.GetName(Action, actionId)
.. Enums.GetName(Action, actionId) setDebugStat("Action", actionName)
.. "\n"
.. "Animation: "
.. tostring(animName)
.. "\n"
.. "ForwardVel: "
.. string.format("%.2f", mario.ForwardVel)
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 end
if alignPos then if alignPos then
@ -440,14 +575,12 @@ local function update()
end end
local bodyState = mario.BodyState 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 bodyState.TorsoAngle *= 0
end end
local ang = bodyState.TorsoAngle
if ang ~= lastAngle then if ang ~= lastAngle then
networkDispatch("SetAngle", ang) networkDispatch("SetAngle", ang)
lastAngle = ang lastAngle = ang
@ -458,9 +591,7 @@ local function update()
local inst = particles:FindFirstChild(name) local inst = particles:FindFirstChild(name)
if inst and PARTICLE_CLASSES[inst.ClassName] then if inst and PARTICLE_CLASSES[inst.ClassName] then
local name = inst.Name
local particle = inst :: ParticleEmitter local particle = inst :: ParticleEmitter
local emit = particle:GetAttribute("Emit") local emit = particle:GetAttribute("Emit")
local hasFlag = mario.ParticleFlags:Has(flag) 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", "$className": "DataModel",
"$ignoreUnknownInstances": true, "$ignoreUnknownInstances": true,
"ReplicatedFirst": { "Workspace": {
"$className": "ReplicatedFirst", "$className": "Workspace",
"$ignoreUnknownInstances": true, "$ignoreUnknownInstances": true,
"SM64": { "SM64": {
"$path": "SM64", "$className": "Folder",
"$ignoreUnknownInstances": true
} "$attributes": {
"TimeScale": 1,
"WingCap": false,
"HotLoading": false,
"DebugToggle": true,
"TruncateBounds": true,
"ToolAssistedInput": true
}, },
"ServerScriptService": { "Client": {
"$className": "ServerScriptService", "$path": "client"
"$ignoreUnknownInstances": true,
"LazyNetworking": {
"$path": "rbx/LazyNetworking.server.lua"
}, },
"StarterCharacter": { "Server": {
"$path": "rbx/StarterCharacter" "$path": "server"
}
}, },
"StarterPlayer": { "Shared": {
"$className": "StarterPlayer", "$path": "shared"
"$ignoreUnknownInstances": true,
"$properties": {
"EnableMouseLockOption": false
},
"StarterCharacterScripts": {
"$className": "StarterCharacterScripts",
"$ignoreUnknownInstances": true,
"Animate": {
"$className": "Hole"
},
"Sound": {
"$className": "Hole"
},
"Health": {
"$className": "Hole"
},
"Appearance": {
"$path": "rbx/Appearance.server.lua"
} }
} }
} }

View file

@ -3,13 +3,15 @@ local Validators: { [string]: (Player, ...any) -> boolean } = {}
type Echo = () -> () type Echo = () -> ()
local ReplicatedStorage = game:GetService("ReplicatedStorage") local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ReplicatedFirst = game:GetService("ReplicatedFirst") local Core = script.Parent.Parent
local PhysicsService = game:GetService("PhysicsService")
local Sounds = require(ReplicatedFirst.SM64.Sounds) local Shared = require(Core.Shared)
local Sounds = Shared.Sounds
local lazy = Instance.new("RemoteEvent") local lazy = Instance.new("RemoteEvent")
lazy.Parent = ReplicatedStorage lazy.Parent = ReplicatedStorage
lazy.Name = "LazyNetwork" lazy.Name = "LazyNetwork"
lazy.Archivable = false
function Validators.PlaySound(player: Player, name: string) function Validators.PlaySound(player: Player, name: string)
local sound: Instance? = Sounds[name] local sound: Instance? = Sounds[name]
@ -27,19 +29,11 @@ function Validators.SetParticle(player: Player, name: string, set: boolean?)
end end
local character = player.Character local character = player.Character
local rootPart = character and character.PrimaryPart
-- stylua: ignore
local rootPart = if character
then character.PrimaryPart
else nil
if rootPart then if rootPart then
local particles = rootPart:FindFirstChild("Particles") local particles = rootPart:FindFirstChild("Particles")
local particle = particles and particles:FindFirstChild(name)
-- stylua: ignore
local particle = if particles
then particles:FindFirstChild(name)
else nil
if particle then if particle then
return true 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 hDesc: HumanoidDescription?
local function patchCollision(desc: Instance) 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") local canCollide = desc:GetPropertyChangedSignal("CanCollide")
desc.CollisionGroup = "Player" desc.CollisionGroup = "Player"
desc.CanQuery = false desc.CanQuery = false
@ -35,8 +35,18 @@ end
task.spawn(patchAllCollision) task.spawn(patchAllCollision)
character.DescendantAdded:Connect(patchCollision) character.DescendantAdded:Connect(patchCollision)
character:SetAttribute("TimeScale", 1)
local function reload() 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 for retry = 1, 10 do
local success, result = pcall(function() local success, result = pcall(function()
return Players:GetHumanoidDescriptionFromUserId(userId) return Players:GetHumanoidDescriptionFromUserId(userId)

View file

@ -221,49 +221,5 @@
</Properties> </Properties>
</Item> </Item>
</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> </Item>
</roblox> </roblox>

View file

@ -1,8 +1,9 @@
--!strict --!strict
local PhysicsService = game:GetService("PhysicsService")
local StarterPlayer = game:GetService("StarterPlayer")
local Players = game:GetService("Players") local Players = game:GetService("Players")
local StarterPlayer = game:GetService("StarterPlayer")
local PhysicsService = game:GetService("PhysicsService")
local StarterCharacterScripts = StarterPlayer.StarterCharacterScripts
local hDesc = Instance.new("HumanoidDescription") local hDesc = Instance.new("HumanoidDescription")
hDesc.HeightScale = 1.3 hDesc.HeightScale = 1.3
@ -27,15 +28,38 @@ if bodyColors then
bodyColors:Destroy() bodyColors:Destroy()
end end
local newRoot = script.HumanoidRootPart:Clone() local newRoot = script.HumanoidRootPart
newRoot.Parent = character :: any newRoot.Parent = character :: any
local humanoid = assert(character:FindFirstChildOfClass("Humanoid")) local humanoid = assert(character:FindFirstChildOfClass("Humanoid"))
humanoid:BuildRigFromAttachments() 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.Name = "StarterCharacter"
character.PrimaryPart = newRoot character.PrimaryPart = newRoot
character.Parent = StarterPlayer character.Parent = StarterPlayer
PhysicsService:CreateCollisionGroup("Player") PhysicsService:RegisterCollisionGroup("Player")
PhysicsService:CollisionGroupSetCollidable("Default", "Player", false) 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)