SafetyFirst 3D
SafetyFirst 3D, gameplay walkthrough
About
Construction accidents in Malaysia are still a huge problem, and a lot of it comes down to workers never really internalising their safety training. We built SafetyFirst 3D to fix that: a browser game where you play a site safety officer across three levels, picking the right PPE, hunting for hidden hazards in a 3D construction scene, and racing an obstacle course while answering DOSH safety questions. Every rule in the game is pulled straight from real Malaysian regulations (OSHA 1994, the Factories and Machinery Act, DOSH's HIRARC guidelines), so it lines up with what TVET students are actually meant to learn.
What I Did
Lead programmer and game designer in a team of 4. Designed the three-level progression and scoring systems, built the Three.js hazard-identification and obstacle-runner levels, and led the performance pass that cut Level 3's load time from 8 to 15 seconds down to under 2 seconds.
Results
3
Levels
<2s
Load Time
30+ FPS
Frame Rate
Highlights
- Three progressive levels: PPE Selection, Hazard Identification, Obstacle Course Runner
- 3D hazard-hunting scene built with Three.js
- Content aligned to OSHA 1994, DOSH HIRARC and the Factories and Machinery Act 1967
- Load time optimised from 8 to 15 seconds down to under 2 seconds
- Runs at 30+ FPS with no install, straight in the browser
- Responsive layout with touch controls for tablets
Technical Details
Level 3 was originally taking 8 to 15 seconds to load with an inconsistent frame rate, caused by over 150 objects in the scene graph, expensive shadow calculations, and heavy MeshStandardMaterial lighting. I led the optimisation pass that disabled shadows entirely, switched materials to flat-shaded MeshBasicMaterial, and trimmed the scene down to about 30 essential objects, bringing load time under 2 seconds while keeping full gameplay intact. We also replaced emoji-based icons with CSS-drawn shapes after testing showed they rendered inconsistently across browsers and operating systems.
More projects