M.R.D.A.
Six-player online shotgun deathmatch. Requires a running multiplayer server.
Powered by
Gallery.
Explore the enemies and weapons of M.R.D.A.
Enemy gallery.
Select an enemy to view its movement animation.
Imperial Vozenilek
Weapons gallery.
Select a weapon to view its in-game pickup animation.
Shotgun
Settings.
Graphics / controls
Changes are saved automatically. Antialiasing applies after a page reload or entering a new game; other changes apply immediately.
Dvorek Engine.
A browser-based first-person engine and brush-based level editor built for M.R.D.A., using TypeScript, three.js, and WebGL. The same authored JSON map drives editor geometry, runtime collision, lighting, pickups, enemy path hints and interactive brush functions. Current functionality includes complete single-player mission resets, remote door buttons, imported enemy and weapon models, and server-authoritative multiplayer combat. Developed by GitHub Copilot under the direction of Kamil Janda.
- BuildFour-view editing, textured geometry, terrain, entities and JSON maps.
- MoveGround/air acceleration, sprinting, jumping, ramps and stairs.
- FightFive weapons, finite ammo, charged plasma, overheating and pickups.
- PopulateOffline soldiers and Suiciders with paths, perception and no-go zones.
- PresentLighting, fog, positional sound, particles, HUD and mission-camera feeds.
- ConnectSix-player deathmatch: 40 Hz server, 20 Hz snapshots and lag compensation.
Recent combat & navigation features
- Right-click plasma charging spends ammo while held, increases bolt power and supports a timed ricochet window indicated by smoke from the top of the gun. Charge sound, rising light and accelerating weapon movement provide feedback; overcharging is dangerous.
- The sprite-only selector groups owned shotguns, machine guns, then plasma/Thundergun across the top of the screen. Scrolling switches immediately and plays a quiet local click, also used once for successful door-button activation.
- Placeable path_never spheres keep enemy paths, movement and crowd-yield nudges away from forbidden areas. Their default radius is 128 units; they do not block players, bullets or sight.
- The multiplayer kill feed uses fully opaque weapon sprites. Self-inflicted deaths omit the weapon and show that the player killed himself; the victim sees You died.
Level building
- Brush primitives, editable geometry, and terrain tools.
- Per-face texture scale, rotation, and offsets.
- Reusable prefabs, undo/redo, and JSON maps.
- func_button brushes with configurable use range, floating PRESS labels and E-key activation of named door groups.
- Placeable path points with optional links to guide soldier patrols and pursuit.
- Camera-facing sprites with rotation, rise, and grow/fade animation.
- Ambient sound emitters with visual range guides.
Brush functions & remote door buttons
- Rotate and func_move animate architecture using an authored axis, speed and travel distance. func_door supports proximity opening and remote activation.
- To create a remote button, give a func_door brush a Name, then assign that name to a func_button brush's Target name. Set the door's Activation range to zero if it should open only remotely.
- The nearest usable button shows a camera-facing PRESS label above its bounds. Press E once to open the referenced door group; holding the key does not repeatedly activate it.
- Use range defaults to 128 world units and is measured from the player's eye to the button's bounds. Solid walls block use, and missing or non-door targets produce console warnings instead of a broken prompt.
- Activated door groups remain open until the mission reloads. Their buttons then hide the PRESS label. Buttons themselves remain stationary and retain their configured collision.
- func_trigger volumes activate named doors or mission-camera views when entered. func_fog can toggle, enable or disable the map's configured fog, while func_wall supplies an invisible collision boundary.
Rendering & movement
- Optional realtime shadows, structural light blocking (now including rotated and thin walls), fog, and animated effects.
- Static geometry batching and visibility culling.
- First-person collision, ramps, stairs, jumping, and sprinting.
- Render scale, antialiasing, texture and particle quality, FOV, mouse sensitivity, master volume, and frame-rate settings.
Weapons & effects
- Five test weapons: shotgun, double-barrel shotgun, plasma gun, Thundergun and machine gun, with imported models and animated pickup previews.
- Finite ammunition, weapon-unlocking pickups, ammo boxes and medkits.
- Pellets and machine-gun rounds pass through trans* surfaces and wood (at 30% damage); plasma bolts and the Thundergun stop at them.
- Player shots cast brief dynamic muzzle-flash light around the shooter, also for other players online; soldiers use sprite-only flashes.
- Textured viewmodels with recoil and movement bob.
- Muzzle flash and smoke, surface-colored impact debris, and impact smoke.
- Reusable, bounded sprite-effect emitters.
- Blood splashes, gore bursts and replicated wall impacts online.
- The multiplayer death screen names your killer and the weapon used.
Pickups, inventory & ammunition
- Players begin with the standard shotgun and 12 shells. Weapon pickups unlock the remaining slots and grant ammunition; number keys and the mouse wheel select only owned weapons.
- Both shotguns share shells, the plasma gun and Thundergun share plasma ammunition, and the machine gun has its own rounds. Carrying limits are 46 shells, 80 plasma ammunition and 90 machine-gun rounds.
- Ammo boxes supply 26 shells, 30 plasma ammunition or 30 machine-gun rounds. Medkits heal 75 HP up to the player's 100 HP maximum. Full ammo pools and full health prevent unnecessary collection of the corresponding refill.
- Pickups rotate, float and pulse using shared model animation. Weapon pickups add a cheap orange floor-glow sprite rather than a realtime light, and newly unlocked weapons equip automatically.
- Collection respects distance, player health and solid-wall occlusion. Single-player items stay collected until the mission restarts; multiplayer items return after 15 seconds under server control.
- Multiplayer deaths drop a bouncing ammo box for the equipped weapon: 13 shells, 15 plasma ammunition or 30 machine-gun rounds. These drops stay until collected, never respawn and do not unlock weapons.
Soldier enemies
- Opt-in single-player enemies with 75 HP. Unalerted soldiers slowly patrol nearby reachable path points from map start, walking at up to 70 units/sec with matching animation speed and brief pauses.
- Soldiers spot players in a forward 120-degree view within 800 units, hear player gunfire within 400 units, and turn toward attackers when hit from behind.
- An alerted soldier warns unaware soldiers within 400 units after 0.4 seconds. Each recipient then has its own reaction delay.
- Paths are hints, not mandatory routes: soldiers approach the player directly where possible, use nearby points around obstacles, turn naturally and try to backtrack when stuck.
- Soldiers stop to aim and fire two-shot shotgun volleys, with a 50% chance of a short sideways strafe between shots. Long approaches can include a stop-and-fire interruption; very close encounters use two weapon shoves.
- Full shotgun hits deal 16 damage below 150 units, 12 from 150 through 450, and 8 farther away; missed pellets and penetration reduce damage. Each weapon shove deals 10 damage.
- After losing sight, soldiers cautiously walk toward the last known position and scan for the player, then return to patrol when their four-second memory expires.
- Grounded footsteps, positional shotgun audio, recoil, large sprite muzzle flashes and soft contact shadows bring soldiers to life. Defeated soldiers stay dead until the map reloads.
Suicider enemies
- Mad Keith uses the imported Suicider model with 75 HP. The Inspector's Enemy AI (offline) checkbox enables pursuit or leaves a stationary, breathing target; Suicider AI defaults to enabled when the map does not specify it.
- AI-enabled Suiciders patrol reachable path hints while unalerted and follow the player once aware. At close range they start a final rush with a 0.8-second fuse before exploding.
- The blast reaches 180 world units and deals 60 damage to unobstructed players and nearby NPCs. Solid world geometry blocks blast damage. Killing a Suicider also triggers its explosion, including when its AI is disabled.
- Nearby attacking Suiciders steer apart to reduce overlapping blast positions. This extra spacing is disabled during idle and ambient patrol, preserving stable path waits and walking/idle transitions; normal body collision remains active.
- Idle poses keep both boots planted while the torso breathes. Follow and final-rush states use their corresponding movement animations, and defeated Suiciders stay removed until the map reloads.
Enemy perception & animation
- Sight checks classify each face by texture filename: names beginning with trans, case-insensitively, allow enemies to see through glass or cutout surfaces. Wood and other opaque faces still block sight.
- A see-through face does not make an object's other faces transparent. Sight uses face triangles on static brushes, rotated shapes, editable meshes and moving brushes, independently of movement and bullet collision.
- Stronger additive idle breathing moves the upper torso without moving the root or legs. The underlying pose is restored before animation updates so breathing does not accumulate or distort later movement.
- Breathing is limited to idle NPC presentation and removed during locomotion or attacks. Ordinary player and multiplayer model animation retains its existing behavior.
- Enemy physics shares the player's collision system. Path reachability, ramps, walls and physical body contact remain in effect even when a texture allows visual detection.
Single-player missions & pause
- Escape opens the same Resume, Settings and Main Menu dialog as multiplayer. Single-player pause freezes movement, enemy AI, door motion, sprite and pickup animation, health recovery and death timers, while silencing gameplay audio.
- The paused scene can still render graphics-setting changes. Resuming preserves the mission clock rather than restarting rotating brushes or advancing timers by the time spent in the menu. Antialiasing changes require a page reload.
- Death displays You Died. After three active seconds, the original mission map reloads instead of only respawning the player.
- A restart restores the authored player start, full health and starting inventory, all pickups, fresh enemies, original door positions, trigger state and mission-camera definitions. Activated buttons and door groups reset too.
- Continue-checkpoint positions are not reapplied after death. If mouse capture is released during loading, the rebuilt mission waits in the pause menu rather than advancing without player control.
- Living players below 30 HP recover 3 HP/sec up to 30 HP after five active seconds without damage; taking damage restarts the delay. Medkits can heal beyond that recovery ceiling up to 100 HP.
Environmental hazards
- Brushes using fluid_toxic* textures define damaging contact volumes, including rotated brush bounds. Contact deals 8 HP immediately and every 0.5 seconds while the player remains in the hazard.
- Stepping out and back in does not bypass the damage interval. Noclip ignores toxic contact, and damage never revives or repeatedly kills an already dead player.
- Toxic damage is local in single player and server-authoritative in multiplayer. A lethal single-player dose follows the full mission-restart flow; multiplayer deaths retain the server's respawn rules.
Audio & mission views
- Looping positional ambience with distance-based volume.
- Movement-driven footsteps, sprint cadence, and shotgun firing audio, and positional sounds of other players online.
- Trigger-activated mission cameras show timed live feeds in the Mission Goals monitor without interrupting player controls.
Menu presentation & model galleries
- The cinematic menu plays only menu music. Background ambience, player, enemy, pickup and weapon sounds are disabled without changing gameplay or multiplayer lobby audio.
- AI-enabled NPCs can patrol reachable paths in the menu map without a player target. They do not perceive or attack the viewer, and hidden pages pause their patrol.
- The Gallery submenu separates Enemy gallery and Weapons gallery. Imperial Vozenilek runs in place and Mad Keith walks in their enemy previews, using the existing rigged assets rather than a pre-explosion pose.
- Weapon previews cover shotgun, double-barrel shotgun, plasma gun, Thundergun and machine gun, reusing the actual pickup models and their rotation, floating and emissive pulse.
- Both galleries use enlarged, unboxed previews. Loading and error states remain visible; Back or Escape stops the preview and releases its resources before returning to the gallery navigation.
Multiplayer boundaries
- Six-player online matches use authoritative movement and combat rules with client prediction, reconciliation, remote-player interpolation and lag-compensated shooting.
- The server owns health, inventory, pickup availability and respawn timing. Opening the multiplayer pause menu does not stop the match, and realtime shadows remain disabled online.
- Scoreboards show frags, deaths and ping; player chat, kill-feed events and death messages accompany replicated impacts and positional action sounds.
- NPC enemy AI and moving brush-function gameplay remain single-player features. The engine does not yet provide a general-purpose navigation mesh or server-owned moving map functions.
Early prototypeImported weapon and enemy models, finite ammunition, pickups, toxic-surface damage, door buttons and full single-player mission restarts are supported. A general-purpose model pipeline and full navigation mesh remain future work. Soldiers currently reuse player shotgun and death sounds, and procedural recoil and weapon shoves stand in for dedicated animation clips. Multiplayer supports six-player online deathmatch with server-authoritative combat, pickups, lag compensation, respawns and a scoreboard, using a temporary imported armed character with uniform-only player colors; NPC enemies and server-owned moving map functions remain offline-only. All weapon models are placeholders for testing only and will be replaced. This is a working foundation, not a finished general-purpose engine.
Credits.
- Created by · Game design & level design
- Kamil Janda
- Contact
- kamiljanda00@gmail.com
- Music
- Tomáš Faltys
- Head Tester
- Jan Voženílek
- Testers
- Tomáš Faltys, Radek Hochmal, David Zindulka, Martin Bartoška, Matěj Hájek, Filip "Flupio" Hájek
- Special thanks to
- Filip Hanš, Jiří Skácel
- Sound effects
- Pixabay sound effects. See the Sound effects & sources subpage for references.
- Game
- Engine
- Dvorek Engine development
- Developed by GitHub Copilot under the direction of Kamil Janda.
Sound effects & sources.
Gameplay sound effects are sourced from Pixabay and used under the Pixabay Content License. Each reference links to its original recording and, when available, its contributor.
Weapons & impacts
- 080902_Shotgun — by freesound_community via Pixabay. Shotgun.
- Light machine gun (M249) gunfire sound effect — via Pixabay. Machine-gun fire.
- 18 Rolling Ball F7 (asset 96956) — via Pixabay. Machine-gun casing bounce.
- Shotgun 03 — by freesound_community via Pixabay. Double-barrel shotgun.
- 062708 Laser Charging (asset 81968) — via Pixabay. Plasma-gun charging.
- Computer Processing Sound Effects - Short Click Select 02 (asset 122133) — via Pixabay. Weapon-selector scrolling and door-button activation.
- Shotgun Shell Ejection — via Pixabay. Shotgun shell ejection sound.
- Bullet gunshot impact — via Pixabay. Bullet impact sound.
- RPG Sword Attack Combo 2 — via Pixabay.
- Explosion Effect (asset 494317) — by DRAGON-STUDIO via Pixabay.
Creatures & enemies
- Zombie Sound 2 (asset 357976) — via Pixabay.
- Zombie idle sound search (page 3) — Pixabay discovery reference, not an individual recording credit.
Interface & alerts
- Notification Sound — via Pixabay.
Ambience & movement
- Wind ambience — by freesound_community via Pixabay. Wind background.
- Industrial machine loop — by dbsound via Pixabay. Machinery background.
- Concrete footsteps — by freesound_community via Pixabay. Continuous walking.
- St1 - Footstep sfx — by yarzur_ofc via Pixabay. Single footsteps.
- Fire Crackling Sound — by SoundReality via Pixabay. Fire ambience.
Tech credits & sources.
Technology credits and acknowledgements
- Particle Pack — particle and effect sprites by Kenney. CC0 1.0 Universal (public domain dedication).
- Vozenilek character (
public/models/vozenilek) — rigged GLB with walking and running animations, used for multiplayer players, lobby previews,npc_testandnpc_vozenilek. Source/export license terms still need recording before distribution. Earlier retro soldier assets were exported using Meshy.ai and are no longer loaded. - three.js — 3D rendering. © 2010–2024 three.js authors. MIT License.
- three-bvh-csg — editor geometry operations. © 2022 Garrett Johnson. MIT License.
- three-mesh-bvh — spatial acceleration used by three-bvh-csg. © 2018 Garrett Johnson. MIT License.
- Barlow & Barlow Condensed — fonts by Jeremy Tribby and the Barlow Project Authors. © 2017 The Barlow Project Authors. SIL Open Font License 1.1. Served by Google Fonts.
- Built with TypeScript (Apache-2.0) and Vite (MIT).