Luduvo 45 Sky, widgets, API additions

Many things were added in Luduvo 45

For Creators

  • Drag files and folders from your file manager into Studio to import them
    directly into the active folder. Double-click or press Return on a mesh file
    to insert a part with that mesh into your scene.
    Thanks @Evrayne
    How do I import a model?

  • Insert an empty Model container from the Add menu to organize your scene
    hierarchy. The empty model provides Name and Transform controls without
    attached geometry.
    Thanks @BroDadi
    Empty objects

  • Select the Environment object in the Outliner to edit fog, ambient light, and
    sky in the Properties panel. Fog controls provide color, mode, density, and
    start and end distances.
    Thanks @Kuuttero
    Luduvo should have an inbuilt fog system

  • Open View > Platform to toggle core platform systems like Avatar, Tools, and
    Chat. Add a script under the Platform object in your scene to replace default
    platform behavior.
    Thanks @Wildpaintbrush
    Expose the Default Character Controller as a reusable Core Script

  • Drop selected objects directly onto the surface below with PageDown. Press
    Ctrl+Alt+M or use the Outliner context menu to align objects with your
    viewport camera.

  • The Asset Browser supports Ctrl+C to copy, Ctrl+X to cut, and Ctrl+V to paste
    files. Press Ctrl+D to duplicate files and Ctrl+A to select all items. Press
    F2 to rename any file or folder instead of only prefabs.

  • Right-click empty space in the Asset Browser to open the folder in your file
    manager. Double-click unmanaged files to open them in desktop apps, or
    right-click scripts to copy their path.
    Thanks @Jediweirdo
    "Open in File Explorer" option for Client, Server, and Server (Luduvo) Components

  • Asset Browser toolbar buttons create folders, refresh contents, navigate up,
    and sort files by name, type, or date. Press Ctrl+L to edit the path bar, and
    press Escape to clear search queries.

  • Drag assets from the Asset Browser directly into Properties and Materials
    reference slots. Press Delete or Backspace to clear assigned slots, or use
    Ctrl+C and Ctrl+V to copy and paste asset IDs.

  • Right-click any property row in the Properties panel to copy, paste, or revert
    values across selected parts. Drag horizontally across numeric fields to scrub
    values, hold Shift for fine adjustments, and press Escape to cancel.
    Thanks @radi
    Copy attribute/value/etc to selected

  • Edit two-component vector properties in the Properties panel with expandable
    numeric inputs. Name, DisplayName, and text properties now edit as plain text
    rather than read-only IDs. Collapsible section headers also toggle with Enter
    and Space.

  • Set Materials panel tint, emissive, and absorption colors with visual color
    swatches or the RGB color picker dialog. Click revert buttons beside
    properties to restore individual fields to defaults.
    Thanks @Tepiggo
    Color Conundrum

  • Click Assign in the Materials panel to apply the active material to selected
    parts. Click the use count to select all parts using it. Selecting a part
    opens its material automatically, with a pin toggle to lock editing.

  • Press Ctrl+Shift+N in the Materials panel to create a material, Ctrl+D to
    duplicate, and Delete to remove it. Press Alt+1, Alt+2, or Alt+3 to switch
    preview meshes. Arrow keys now step numeric values and apply them immediately.

  • Type in the Outliner search filter to match object names and expand matching
    groups. Press Ctrl+L to lock selected parts from viewport clicks, and press
    Ctrl+Shift+L to unlock them.

  • Select objects in the Entity Report panel with a single click instead of
    double-clicking. Press Alt+P to cycle filter presets, press Ctrl+F to focus
    search, and click column headers to sort.

  • Creating or inserting scripts now opens them in the Script Editor immediately.
    Editing with multiple cursors is faster.

  • Starting a play session focuses character controls immediately instead of
    leaving focus on prior widgets. Clicking the viewport in play mode restores
    control focus.

  • The Output panel bottom toolbar toggles Info, Warn, and Error filter buttons
    for log output with real-time text search. Consecutive duplicate messages
    collapse into a single line with repeat count badges.
    Thanks @Explorer
    Debug Log QOL

  • Press Ctrl+Alt+K or click the toolbar button to clear the Output panel, and
    right-click to copy all messages. Press Alt+O to toggle dock visibility, and
    press Tab in the command line to complete commands.

  • Press Return or keypad Enter to activate focused items in the Asset Browser
    and Profiler panel. Ribbon tabs accept Tab keyboard focus and navigate with
    arrow keys.

  • The Welcome screen recent projects list displays project details, folder
    icons, and path tooltips. Creators can navigate entries with Tab and remove
    missing projects with Return, Delete, or Clear All.

  • Studio uses Direct3D 12 on Windows, Vulkan on Linux, and Metal on macOS.

  • In the Profiler, click a script table column to sort it. Graphs follow your
    theme, and frame spikes are labeled.

  • Publishing a place no longer saves core scripts or menu objects into it.
    Upgrading an older place now adds default lighting.
    Thanks @Jediweirdo
    Make it harder to accidently edit Core Assets (menus, libraries, etc.)

  • Import six face textures through File > Import to create skybox cubemaps. Add
    the OrthographicLens component to cameras for parallel 2D and isometric
    projection views.

  • The UvTransform component adjusts texture tiling, offset, and rotation on
    parts and decals.

  • Add the SoundCone component to a sound source to point its sound in one
    direction. Set Cone Inner Angle, Cone Outer Angle, and Cone Outer Gain in the
    Properties panel.

  • Add the ClickDetector component to parts and models to detect player clicks.
    Scripts get the clicking player through the MouseClick event on the
    server, and MaxActivationDistance sets how close players need to be.
    Thanks @Sphere
    How to in specific script check if player clicked on model named "one"

  • Add the Climbable component to parts to turn surfaces into climbable ladders.

  • Add Seat and VehicleSeat components to create passenger seats and driver
    stations with throttle and steering inputs.

  • The Trigger component defines non-solid collision zones that detect object
    touches. The Timer component provides countdown timers with configurable
    duration and autostart settings.

  • Rigid bodies include axis freeze checkboxes in the Properties panel to lock X,
    Y, or Z movement and rotation. Welds support a rotational break torque
    threshold, and colliders support capsule shapes.

  • Add RopeConstraint components with integrated winch motors to connect bodies.
    Configure vehicle suspension springs, tire slip curves, and revolute
    HingeJoint limits directly in Studio.

  • Assign six custom body part meshes in the Properties panel to customize
    character appearances. Add AirControl, MultiJump, CharacterGravity, or
    CharacterSurfaceAlign to enable mid-air strafing, extra jumps, custom gravity,
    or wall walking.

  • World-space billboard text labels display custom text above objects with
    distance scaling.

  • Place on-screen virtual thumbsticks with configurable radius and follow modes.
    Insert user interface elements including modal dialogs, tabs, dropdown menus,
    tables, and color pickers.

Breaking Changes

  • Places saved offline with Luduvo 44 open dark in Luduvo 45 because they don’t have
    Sun and Environment objects. Worlds stored on Luduvo servers were converted.
    A fix for local files is in progress.

  • The Materials panel removed hierarchical sub-page navigation, Back buttons,
    and the Escape key shortcut. Click the vertical side tabs to switch between
    material sections.

  • Reading or writing game.Lighting.Sky raises a runtime error because the
    engine removed the sky table. Read or write game.Lighting.Background for
    sky colors and game.Lighting.Ambient.Contribution for ambient light.

  • Calling Instance:GetIdentity on player character objects raises a runtime
    error. Call game.Players:Get with a user identifier or
    game.Players:FromCharacter to inspect player properties.

  • Mouse button query functions now use standard 0-based indices where 0 is
    Left and 1 is Right. Calling game.Input.ButtonDown(1) or
    game.Input.ButtonPressed(1) now tests the Right mouse button instead of
    Left. Pass game.Input.Button.Left, game.Input.Button.Right, or updated
    numeric indices to mouse queries.

  • KeyCode enum values changed from sequential numbers to Windows Virtual-Key
    codes. Scripts passing old numeric constants to game.Input.KeyDown query
    incorrect keys or trigger range errors. Pass named constants from
    game.Input.Key or updated Windows Virtual-Key codes to key queries.

  • Character limbs contacting static or anchored parts now fire Touched and
    TouchEnded events. Update touch event handlers on floors and character limbs
    to handle contact from walking on anchored parts.

  • Reading Instance.UserId returns an integer number instead of a decimal
    string. Scripts comparing Instance.UserId against strings now evaluate to
    false. Compare Instance.UserId against numbers or wrap it in tostring
    for string comparisons.

  • Client scripts can no longer change, move, or destroy objects that the server
    owns. These calls now raise an error. Make such changes in server scripts, or
    ask the server through a remote event.

  • Core scripts saved directly in place files no longer persist across saves.
    Create a root object named Platform and place replacement scripts with
    matching names under it to override defaults.

  • Studio renamed the File menu action “Export Model…” to “Export
    Selection…”. Choose File > “Export Selection…” or run the command
    file.exportselection to export selected objects.

  • Scripts are now limited to 256 MiB of memory. Going over the limit triggers
    garbage collection first, then an out-of-memory error. Release tables and
    assets you no longer need.

  • Server calls to Sound.PlayAt replicate audio only to clients within 200
    studs of the sound position. Play audio locally in client scripts for sounds
    that all players must hear regardless of distance.

  • Dedicated servers refuse a second user account from the same computer. Use
    Studio local playtesting or separate computers to test multiplayer game
    sessions.

  • Client-local objects sent across remote events now arrive on the server as
    nil instead of dropping the packet. Check remote event arguments for nil in
    server handlers before reading object properties.

  • Reading Instance.NameId or Instance.DisplayNameId returns nil. Read
    Instance.Name or Instance.DisplayName directly as strings instead of
    reading numeric identifiers.

Scripting

  • Characters can hold unlimited tools in their backpack instead of ten. Parent a
    tool to a character and set tool.BackpackSlot to any slot number.

  • The task library provides task.defer, task.delay, and task.wait to
    schedule functions without counting elapsed frames. The task.wait function
    pauses the running thread and returns the actual elapsed time.
    Thanks @Vadimosolo
    Alternative to while wait(1)

  • game.Tween.TweenProperty(target, property, final, duration) animates values
    over time. The function transitions numbers, vectors, and colors.

  • game.CloudStore.open_ordered(name) manages sorted records for game
    leaderboards. The returned store provides :set(), :get(), and
    :get_sorted() for ascending or descending queries.

More changes for scripters (33)
  • Sound objects control playback with :Play(), :Pause(), :Resume(), and
    :Stop().

  • DynamicMesh.new() creates procedural meshes from Luau buffers.
    :SetCounts() sets vertex and index counts. :WriteVertices() copies buffer
    data, and :Apply() assigns geometry.

  • Instance.new(name?) creates a blank Instance directly from scripts without
    cloning existing objects.

  • Relationship queries find all objects linked to a target by passing
    World.Pair(relation, target) into World.Query filters.

  • game.Players provides access to connected players. The service includes
    All(), Get(), FromCharacter(), CharacterOf(), BindCharacter(), and
    Kick() methods alongside connection signals.

  • Client scripts send chat messages with game.Players:Chat(message). Scripts
    listen for player messages with game.Players.PlayerChatted and
    player.Chatted.
    Thanks @empire
    Add Chat API

  • UIDialog displays modal confirmation boxes. Set button labels with
    DialogTitle, ConfirmText, and CancelText, and listen to Confirmed and
    Canceled signals.

  • Custom component fields support iteration with standard for field, value in instance.ComponentName do loops.

  • Tags.GetInstanceAddedSignal(tag) and Tags.GetInstanceRemovedSignal(tag)
    track tagged objects without polling.

  • signal:Disconnect(fn) removes a registered callback and stops receiving
    dispatches on that connection.

  • The remote content service downloads and instantiates remote asset bundles
    with game.Content.Fetch(id, sha256?, cb) and game.Content.Spawn(asset).
    game.Content.Avatar(player, cb) fetches player avatar manifests.

  • instance:TransformPoint(pos) and instance:InverseTransformPoint(pos)
    transform 3D coordinates. instance:LookAt() rotates instances toward target
    points.
    Thanks @yeno
    Add "CFrame Lib*"

  • Timer objects run timed events with :StartTimer() and :StopTimer(). Read
    remaining time with TimeLeft and connect to the Timeout signal.

  • instance:AddAccessory(accessory) attaches accessory models to character rigs
    and non-player characters.

  • Setting part.Trigger = true allows objects to pass through collision shapes
    while firing Touched and TouchEnded events.

  • Perception systems configure character sight and hearing with SetVisionCone
    and SetHearingSense. Query perceived objects with
    GetNearestPerceivedTarget and GetLastHeardStimulus.

  • UIJoystick adds virtual thumbsticks to interfaces to read stick directions.
    Configure StickRadius, StickDeadzone, and StickMode, and read direction
    from StickDirection.

  • Interactive interface elements fire Pressed and Released signals to detect
    pointer down and pointer up edges.

  • textBox:CaptureFocus() focuses text fields programmatically. Read live
    keystrokes through Text and Changed('Text'), and receive typing completion
    via FocusLost(enterPressed).

  • UISlider now supports vertical orientation via TrackAxis = 1. Connect to
    DragEnded(edited) on release, and format numbers using
    slider.SliderFormat.

  • UIListClipper recycles row elements across large lists. Set ItemCount and
    ItemHeight, and populate rows when the ItemShown signal fires.

  • UITableHeader and UIHeaderCell add sortable headers to grid views. Read
    SortColumn and SortDescending properties to sort tabular records.

  • UIPlot graphs stream dynamic data with instance:PushSample(value). Configure
    SampleCount, PlotColor3, ScaleMin, and ScaleMax.

  • AdornmentHandles attach translation arrows and rotation rings to parts.
    Connect to Pressed, DragMoved, and Released to handle player drag
    actions.

  • VehicleSeat parts report driver movement keys through seat.Throttle and
    seat.Steer. Seat parts provide the seated character instance through
    seat.Occupant.

  • World.System now schedules callbacks across PreUpdate, PrePhysics, and
    PostPhysics stages and runs systems in dependency order.

  • instance:FindAncestorWithComponent(name) searches ancestor trees,
    instance:GetDescendants() retrieves descendants, and instance:SetParent()
    reparents while preserving world pose.

  • The Visible property now works on parts, meshes, and lights, driving
    RenderDisabled to hide geometry without losing collisions.

  • instance:ApplyTorqueImpulse(impulse) applies angular impulses to bodies, and
    Physics.Raycast now accepts an optional collision mask.

  • game.Prefabs.RevertAddedComponent(instance, name) removes added components.
    game.Prefabs.RevertObjectOverride(instance) restores authored template
    properties.

  • Custom attributes on objects now have no per-entity cap, and script handles
    support unlimited target links and slot names.

  • Client scripts can now edit client-local parts without rejection, and
    Session lifecycle signals fire on clients.

  • game.Players:FriendStatus(player) queries player relationship status, and
    game.Players:IsAdmin(player) provides a dedicated admin check.

Fixed

More fixes (52)
20 Likes

W igor

1 Like

I knew Luduvo 45 was huge but man, not this big

2 Likes

Super awesome! Thank you for your work!!!

3 Likes

Does this mean that game.Session is deprecated? Looks like game.Players has everything that session has and then some

1 Like

Yes, game.Session is deprecated. Move to game.Players as game.Session will be removed in a future release.

5 Likes

Igor being goated as always. Though, I’m not actually able to access the player core scripts, still ;v;

1 Like

THANK YOU!!!

1 Like

Very nice updates, so many fixes, igor you the goat

1 Like

i was mentioned!!! i was mentioned!! :O

1 Like

is the index and newindex in there?

like

instance.CFrame
and
instance.CFrame = ?

if so is there a way to create a CFrame?

1 Like

Woah!! That’s awesome thanks buddy!!

1 Like

Good Luduvo Studios is getting better and better, and this will open more doors for other studio creators to see this and become interested.

1 Like

can we just fix luduvo stuck on loading on gtx 1660 ti ryzen 7

1 Like

do share logs
client.log specifically

1 Like

Bro they got terminated :sob:

1 Like

i didnt notice :/

1 Like

Don’t sweat it much. I think they got banned for being a laucs alt (their name used to be quite literally “TotallyNotLaucs” lol)

2 Likes