Voxel Game Maker

Docs Quick code

Changelog

What changed in each version of Quick code.

1.0 — 2026-10-13 — a real language

  • New engine: code is compiled once to bytecode and run by its own virtual machine (shared/map/qc/). It can stop at a wait() anywhere — inside functions, in the middle of an expression — and carry on later. Conditions are compiled once too.
  • Functions: function name(a, b) … end, return, local function, anonymous functions, functions as values, closures (Lua-style upvalues: a closure made in a loop keeps that round's values), recursion, methods (function t:m()), functions written at the top usable from anywhere in the code and from the script's other Code nodes.
  • Tables: {hp = 10}, t.x, t["k"], t.x = nil; {1, 2, 3} is a list. Assigning into lists, tables and objects: list[i] = v, t.f = v, self.hp = 5, with += and friends.
  • Language: continue, a, b = b, a, several names from a list (local ok, msg = pcall(f)), for k, v in table, for i, v in list, //, ^, ..=, && / || / !, --[[ ]], hex numbers. / makes fractions (7 / 2 is 3.5).
  • Built-ins: maths (degrees), vectors (vec, length, normalize, dot, cross, distance…), noise, random, random_pick, seed; text (upper, split, format, replace…); lists and tables (push, sort with a compare function, map, filter, keys, range, copy…) as functions and as methods; type, num; pcall, error, assert, warn.
  • Objects: their own values (self.opened = true, saved), starting values in Properties ▸ Values for code, teleport, look_at, face, tween with easing (also on move), set_scale, tint, follow, flee, stop, hurt, heal, has_tag, say; fields position, hp, max_hp, model, tags, hidden, turn; setting x / y / z / position moves them.
  • Timing & tasks: dt(), time(), frame(), wait_until(fn, timeout), run_async, every, after, cancel, task_running; loops pause for a frame by themselves after 500 rounds without a wait.
  • Events & messages: on("touched" / "bumped" / "used" / "hurt" / "destroyed", fn), send(message, data), on_message, the Event A message is sent, event_data(), run_script(id, data).
  • The world: nearest, objects_near, line_of_sight, raycast, tile_at, set_tile, clear_tile, path_to.
  • Input: key_pressed, key_released, mouse_x / mouse_y, mouse_tile, gamepad (pad_down, pad_pressed, pad_axis), named controls (action_down, action_pressed).
  • Sound & screen: play(sound, volume), play_at, stop_sound, volume, music_fade, choice(question, options), hud_bar.
  • Libraries & data: require("Script"); the Data tab and data("Table").
  • Debugging: more checks (unused locals, lines after return, too many values, waits in dialogues, = in conditions); errors name the function and the calling line; click an error in Output to open its Code node; watch() (Output's Watch line and F3); breakpoint() with F5 / F10 stepping; the F3 panel lists the busiest scripts.
  • Editor: Insert ▾ groups every function (Game ▸ …, Language ▸ …, Objects); autocomplete prefers names the code already uses.
  • Code World sample (Welcome ▸ Sample worlds): nine stations that show the language off — a light show, easing gallery, data-table monsters, a sin / cos spiral builder, a message-driven vault, a choice() quiz, shared-script chests, a seeing sentry and a watch() / breakpoint() bot.

0.12 — 2026-10-11

  • Variables are edited in the Explorer (the Scripts tab's Variables panel is gone). New world variables belong to one world. Switches have a list with on / off at the start.

0.11 — 2026-10-08

  • Objects: obj.show_hud() / obj.hide_hud() show or hide the object's Attached HUD.

0.10 — 2026-10-08

  • HUDs: show_hud(name), hide_hud(name), toggle_hud(name), hud_shown(name).

0.9 — 2026-10-08

  • Skillbar: held(), select_slot(n), put_on_bar(item, n).

0.8 — 2026-10-08

  • day(): the day counter. On-screen texts can show {day} and {time}.

0.7 — 2026-10-08

  • Game systems from code: spawn(), use_item(), equipped(), money_count(), save_game(), checkpoint(), hud_text() / hud_clear(), start_timer() / stop_timer() / time_left(), lose(), lives_left(), best_score(), shake(), camera_look().

0.6 — 2026-10-07

  • Particle effects: particles(effect, size = 1), obj.particles(effect).

0.5 — 2026-10-07

  • Time of day: hour(), set_hour(h), is_night().

0.4 — 2026-10-07

  • Collisions: the It bumps into something event, other, obj.touching(what), obj.can_move(dx, dy, dz); building without code with Loop and object action nodes.

0.3 — 2026-10-07

  • Loops (while, for, repeat … until, break), loop safety, wait(seconds), objects (self, player, object(), objects() and their commands), real local variables.

0.2 — 2026-10-07

  • Lua style: if … then … end blocks, -- comments, .., ~=, nil, local, popup().

0.1 — 2026-10-07

  • First version: assignments, one-line ifs, game functions, Check button, Code is true.