Skip to content

Instantly share code, notes, and snippets.

menduz /
Created Nov 24, 2020
How to implement your own Decentraland, quick and dirty


Decentraland run scenes inside a WebWorker, in an ES5 context including Fetch + WebSockets + dcl object.

Every generated scene should run by itself. That is, a piece of code that can be evaluated by an eval in a proper context. You can compile scenes using Webpack, esbuild, or the Decentraland CLI.

The scenes will interact with the renderer using the dcl object.

dcl object

# install dependencies
brew install pam_yubico
if sc_auth identities | grep PIV --quiet
# run lock with sudo
sudo bash ./
menduz / dataview-polyfill.js
Created Oct 6, 2020 — forked from tjmehta/dataview-polyfill.js
DataView (and ArrayBuffer) polyfill that works in any engine (including old IE).
View dataview-polyfill.js
void function(global){
if ('DataView' in global && 'ArrayBuffer' in global) {
var hide = (function(){
// check if we're in ES5
if (typeof Object.getOwnPropertyNames === 'function' && !('prototype' in Object.getOwnPropertyNames)) {
var hidden = { enumerable: false };
View scriptsystem.cpp
#include <eternity.hpp>
ScriptSystem::ScriptSystem() {
m_platform = 0;
m_isolate = 0;
m_scriptableCount = 0;
m_scriptablePoolSize = 0;
m_scriptables = 0;
View script.cpp
Script::Script() {
Script::~Script() {
void Script::Initialize(char* src) {
v8::Isolate* isolate = v8::Isolate::GetCurrent();
  • Confirmation bias: a pattern that causes one to notice or look for things that confirm one's beliefs rather that counter-evidence.

  • Loss aversion: Loss aversion refers to people's tendency to prefer avoiding losses to acquiring equivalent gains: it is better to not lose $5 than to find $5. The principle is very prominent in the domain of economics. What distinguishes loss aversion from risk aversion is that the utility of a monetary payoff depends on what was previously experienced or was expected to happen. Some studies have suggested that losses are twice as powerful, psychologically, as gains.

  • Intuition:  Personal experience coded into your personal neural network, which means your

menduz / attenuation.glsl
Created May 31, 2020
Cheap attenuation
View attenuation.glsl
float dist = length(lightVector);
float lightR = (lightPosRadius.w / uViewSize.y);
if(dist < lightR){
float attenuation = dist/(1.0 - (dist/lightR) * (dist/lightR));
attenuation = attenuation / lightR + 1.0;
attenuation = 1.0 / (attenuation * attenuation);
if (attenuation > 0.0) {
menduz / sphere-normals.hlsl
Created May 30, 2020
Spherical normal encoding
View sphere-normals.hlsl
// Encoding:
// Decoding:
normal.z=length2(normalOut.xy)*2- 1;
normal.xy=normalize(normalOut.xy)*sqrt(1- normal.z*normal.z);
menduz / normals.hlsl
Last active May 30, 2020
Normal encoding/decoding in float2
View normals.hlsl
float2 atanYX = atan2(normalIn.y,normalIn.x);
float2 normalOut = float2(atanYX/PI,normalIn.z);
normalOut = (normalOut+1.0)+0.5;
float2 angles = normalOut*2.0- 1.0;
float2 theta = sincos(angles.x*PI,theta.x,theta.y);
float2 phi = float2(sqrt(1.0- angles.y*angles.y),angles.y);
float3 normal = float3(theta.y*phi.x,theta.x*phi.x,phi.y);
View colors.yaml
background: '0x333333'
foreground: '0xd3d0c8'
text: '0x000000'
cursor: '0xffffff'
black: '0x000000'
red: '0xf2777a'
You can’t perform that action at this time.