diff --git a/bindings/src/index.ts b/bindings/src/index.ts index 441aae3..8c6779b 100644 --- a/bindings/src/index.ts +++ b/bindings/src/index.ts @@ -81,7 +81,13 @@ function main(){ returnType: "void", params: [{type: "Shader *",name:"shader"},{type:"int",name:"shaderConstant"},{type:"int",name:"location"}] }) - + api.functions.push({ + name: "ImageReadPixel", + description: "Read a single pixel from an image", + returnType: "Color", + params: [{type: "Image *",name:"image"},{type:"int",name:"x"},{type:"int",name:"y"}] + }) + // Define a new header const core = new RayLibHeader("raylib_core") core.includes.include("raymath.h") @@ -541,8 +547,8 @@ function main(){ ignore("Vector3ToFloatV") ignore("MatrixToFloatV") ignore("QuaternionToAxisAngle") - core.exportGlobalConstant("DEG2RAD", "(PI/180.0)") - core.exportGlobalConstant("RAD2DEG", "(180.0/PI)") + core.exportGlobalDouble("DEG2RAD", "(PI/180.0)") + core.exportGlobalDouble("RAD2DEG", "(180.0/PI)") const setOutParam = (fun: RayLibFunction, index: number) => { const param = fun!.params![index] @@ -632,8 +638,8 @@ function main(){ core.exportGlobalStruct("Color", x.name, x.values, x.description) }) api.enums.forEach(x => core.addEnum(x)) - core.exportGlobalConstant("MATERIAL_MAP_DIFFUSE", "Albedo material (same as: MATERIAL_MAP_DIFFUSE") - core.exportGlobalConstant("MATERIAL_MAP_SPECULAR", "Metalness material (same as: MATERIAL_MAP_SPECULAR)") + core.exportGlobalInt("MATERIAL_MAP_DIFFUSE", "Albedo material (same as: MATERIAL_MAP_DIFFUSE") + core.exportGlobalInt("MATERIAL_MAP_SPECULAR", "Metalness material (same as: MATERIAL_MAP_SPECULAR)") core.writeTo("src/bindings/js_raylib_core.h") core.typings.writeTo("examples/lib.raylib.d.ts") const ignored = api.functions.filter(x => x.binding?.ignore).length diff --git a/bindings/src/raylib-header.ts b/bindings/src/raylib-header.ts index 6ea9f49..f87b1c8 100644 --- a/bindings/src/raylib-header.ts +++ b/bindings/src/raylib-header.ts @@ -65,7 +65,7 @@ export class RayLibHeader extends QuickJsHeader { addEnum(renum: RayLibEnum){ console.log("Binding enum "+ renum.name) - renum.values.forEach(x => this.exportGlobalConstant(x.name, x.description)) + renum.values.forEach(x => this.exportGlobalInt(x.name, x.description)) } addApiStruct(struct: RayLibStruct){ @@ -118,9 +118,15 @@ export class RayLibHeader extends QuickJsHeader { this.typings.constants.tsDeclareConstant(exportName, structName, description) } - exportGlobalConstant(name: string, description: string){ + exportGlobalInt(name: string, description: string){ this.moduleInit.statement(`JS_SetModuleExport(ctx, m, "${name}", JS_NewInt32(ctx, ${name}))`) this.moduleEntry.statement(`JS_AddModuleExport(ctx, m, "${name}")`) this.typings.constants.tsDeclareConstant(name, "number", description) } + + exportGlobalDouble(name: string, description: string){ + this.moduleInit.statement(`JS_SetModuleExport(ctx, m, "${name}", JS_NewFloat64(ctx, ${name}))`) + this.moduleEntry.statement(`JS_AddModuleExport(ctx, m, "${name}")`) + this.typings.constants.tsDeclareConstant(name, "number", description) + } } \ No newline at end of file diff --git a/examples/lib.raylib.d.ts b/examples/lib.raylib.d.ts index 8eb5ed6..e6f72ec 100644 --- a/examples/lib.raylib.d.ts +++ b/examples/lib.raylib.d.ts @@ -1620,6 +1620,8 @@ declare function easeElasticIn(t: number, b: number, c: number, d: number): numb declare function setModelMaterial(model: Model, materialIndex: number, material: Material): void; /** Set shader constant in shader locations array */ declare function setShaderLocation(shader: Shader, shaderConstant: number, location: number): void; +/** Read a single pixel from an image */ +declare function imageReadPixel(image: Image, x: number, y: number): Color; /** (PI/180.0) */ declare var DEG2RAD: number; /** (180.0/PI) */ diff --git a/examples/models/models_cubicmap.js b/examples/models/models_cubicmap.js index e4aed51..7381b15 100644 --- a/examples/models/models_cubicmap.js +++ b/examples/models/models_cubicmap.js @@ -29,7 +29,7 @@ let image = loadImage("resources/cubicmap.png"); // Load cubicmap image (RA let cubicmap = loadTextureFromImage(image); // Convert image to texture to display (VRAM) const mesh = genMeshCubicmap(image, new Vector3(1.0, 1.0, 1.0)); -const model = loadModelFromMesh(mesh); +const floor = loadModelFromMesh(mesh); // NOTE: By default each cube is mapped to one part of texture atlas let texture = loadTexture("resources/cubicmap_atlas.png"); // Load map texture @@ -37,7 +37,7 @@ let texture = loadTexture("resources/cubicmap_atlas.png"); // Load map textur //model.materials[0].maps[MATERIAL_MAP_DIFFUSE].texture = texture; // Set map diffuse texture const mat = loadMaterialDefault() setMaterialTexture(mat, MATERIAL_MAP_DIFFUSE, texture) -setModelMaterial(model,0,mat) +setModelMaterial(floor,0,mat) const mapPosition = new Vector3(-16.0, 0.0, -8.0); // Set model position @@ -62,7 +62,7 @@ while (!windowShouldClose()) // Detect window close button or ESC key beginMode3D(camera); - drawModel(model, mapPosition, 1.0, WHITE); + drawModel(floor, mapPosition, 1.0, WHITE); endMode3D(); @@ -82,7 +82,7 @@ while (!windowShouldClose()) // Detect window close button or ESC key //-------------------------------------------------------------------------------------- unloadTexture(cubicmap); unloadTexture(texture); -unloadModel(model); +unloadModel(floor); closeWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- diff --git a/examples/models/models_first_person_maze.js b/examples/models/models_first_person_maze.js index 7942d00..34c8427 100644 --- a/examples/models/models_first_person_maze.js +++ b/examples/models/models_first_person_maze.js @@ -31,7 +31,7 @@ const texture = loadTexture("resources/cubicmap_atlas.png"); // Load map text //model.materials[0].maps[MATERIAL_MAP_DIFFUSE].texture = texture; // Set map diffuse texture const mat = loadMaterialDefault() setMaterialTexture(mat, MATERIAL_MAP_DIFFUSE, texture) -setModelMaterial(model,0,mat) +setModelMaterial(floor,0,mat) // Get map image data to be used for collision detection const mapPixels = new Uint8Array(loadImageColors(imMap)); @@ -93,7 +93,7 @@ while (!windowShouldClose()) // Detect window close button or ESC key clearBackground(RAYWHITE); beginMode3D(camera); - drawModel(model, mapPosition, 1.0, WHITE); // Draw maze map + drawModel(floor, mapPosition, 1.0, WHITE); // Draw maze map endMode3D(); drawTextureEx(cubicmap, new Vector2(getScreenWidth() - cubicmap.width*4.0 - 20, 20.0), 0.0, 4.0, WHITE); @@ -112,7 +112,7 @@ while (!windowShouldClose()) // Detect window close button or ESC key //-------------------------------------------------------------------------------------- unloadTexture(cubicmap); // Unload cubicmap texture unloadTexture(texture); // Unload map texture -unloadModel(model); // Unload map model +unloadModel(floor); // Unload map model closeWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- \ No newline at end of file diff --git a/examples/shaders/shaders_basic_lighting.js b/examples/shaders/shaders_basic_lighting.js index 00b5f12..def3445 100644 --- a/examples/shaders/shaders_basic_lighting.js +++ b/examples/shaders/shaders_basic_lighting.js @@ -56,7 +56,7 @@ setShaderValue(shader, ambientLoc, new Vector4(0.1, 0.1, 0.1, 1.0), SHADER_UNIFO // Assign out lighting shader to model const matModel = loadMaterialDefault() matModel.shader = shader -setModelMaterial(model, 0, matModel) +setModelMaterial(floor, 0, matModel) const matCube = loadMaterialDefault() matCube.shader = shader setModelMaterial(cube, 0, matCube) @@ -99,7 +99,7 @@ while (!windowShouldClose()) // Detect window close button or ESC key clearBackground(RAYWHITE); beginMode3D(camera); - drawModel(model, vector3Zero(), 1.0, WHITE); + drawModel(floor, vector3Zero(), 1.0, WHITE); drawModel(cube, vector3Zero(), 1.0, WHITE); // Draw spheres to show where the lights are @@ -123,7 +123,7 @@ while (!windowShouldClose()) // Detect window close button or ESC key // De-Initialization //-------------------------------------------------------------------------------------- -unloadModel(model); // Unload the model +unloadModel(floor); // Unload the model unloadModel(cube); // Unload the model unloadShader(shader); // Unload shader diff --git a/examples/shaders/shaders_basic_lighting2.js b/examples/shaders/shaders_basic_lighting2.js index b852cb0..1ded493 100644 --- a/examples/shaders/shaders_basic_lighting2.js +++ b/examples/shaders/shaders_basic_lighting2.js @@ -68,7 +68,7 @@ setShaderValue(shader, ambientLoc, new Vector4(0.1, 0.1, 0.1, 1.0), SHADER_UNIFO // Assign out lighting shader to model const matModel = loadMaterialDefault() matModel.shader = shader -setModelMaterial(model, 0, matModel) +setModelMaterial(floor, 0, matModel) setMaterialTexture(matModel, MATERIAL_MAP_DIFFUSE, texture) const matCube = loadMaterialDefault() matCube.shader = shader @@ -107,7 +107,7 @@ while (!windowShouldClose()) // Detect window close button or ESC key clearBackground(RAYWHITE); beginMode3D(camera); - drawModel(model, vector3Zero(), 1.0, WHITE); + drawModel(floor, vector3Zero(), 1.0, WHITE); drawModel(cube, new Vector3(0,1,0), 1.0, WHITE); if (light.enabled) drawSphereEx(light.position, 0.2, 8, 8, light.color); @@ -128,7 +128,7 @@ while (!windowShouldClose()) // Detect window close button or ESC key // De-Initialization //-------------------------------------------------------------------------------------- -unloadModel(model); // Unload the model +unloadModel(floor); // Unload the model unloadModel(cube); // Unload the model unloadShader(shader); // Unload shader diff --git a/examples/ts_dungeon/.gitignore b/examples/ts_dungeon/.gitignore new file mode 100644 index 0000000..bdc9544 --- /dev/null +++ b/examples/ts_dungeon/.gitignore @@ -0,0 +1,3 @@ +node_modules/ +main.js +editor.js \ No newline at end of file diff --git a/examples/ts_dungeon/package-lock.json b/examples/ts_dungeon/package-lock.json new file mode 100644 index 0000000..34b0e25 --- /dev/null +++ b/examples/ts_dungeon/package-lock.json @@ -0,0 +1,1721 @@ +{ + "name": "bindings", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "bindings", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "inkjs": "^2.2.1", + "reflect-metadata": "^0.1.13", + "rxjs": "^7.8.1" + }, + "devDependencies": { + "ts-loader": "^9.4.2", + "ts-node": "^10.9.1", + "typescript": "^5.0.4", + "webpack": "^5.82.0", + "webpack-cli": "^5.0.2" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz", + "integrity": "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true + }, + "node_modules/@types/eslint": { + "version": "8.40.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.40.1.tgz", + "integrity": "sha512-vRb792M4mF1FBT+eoLecmkpLXwxsBHvWWRGJjzbYANBM6DtiJc6yETyv4rqDA6QNjF1pkj1U7LMA6dGb3VYlHw==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", + "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.3.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.0.tgz", + "integrity": "sha512-cumHmIAf6On83X7yP+LrsEyUOf/YlociZelmpRYaGFydoaPdxdt80MAbu6vWerQT2COCp2nPvHdsbD7tHn/YlQ==", + "dev": true + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webpack-cli/configtest": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", + "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", + "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", + "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.7.tgz", + "integrity": "sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001489", + "electron-to-chromium": "^1.4.411", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001502", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001502.tgz", + "integrity": "sha512-AZ+9tFXw1sS0o0jcpJQIXvFTOB/xGiQ4OQ2t98QX3NDn2EZTSRBC801gxrsGgViuq2ak/NLkNgSNEPtCr5lfKg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.427", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.427.tgz", + "integrity": "sha512-HK3r9l+Jm8dYAm1ctXEWIC+hV60zfcjS9UA5BDlYvnI5S7PU/yytjpvSrTNrSSRRkuu3tDyZhdkwIczh+0DWaw==", + "dev": true + }, + "node_modules/enhanced-resolve": { + "version": "5.14.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.14.1.tgz", + "integrity": "sha512-Vklwq2vDKtl0y/vtwjSesgJ5MYS7Etuk5txS8VdKL4AOS1aUlD96zqIfsOSLQsdv3xgMRbtkWM8eG9XDfKUPow==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", + "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", + "dev": true + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inkjs": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/inkjs/-/inkjs-2.2.1.tgz", + "integrity": "sha512-Y3M8GsM8J2iL2RT+rtK2e6uTMgP+glGc7V4iJQELhclxdR3rEVQd40x4yopOBkIjIBZ4gpHnFbKWfdZe6GhEMA==" + }, + "node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/is-core-module": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", + "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", + "dev": true + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" + }, + "node_modules/resolve": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "dev": true, + "dependencies": { + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/schema-utils": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.2.0.tgz", + "integrity": "sha512-0zTyLGyDJYd/MBxG1AhJkKa6fpEBds4OQO2ut0w7OYG+ZGhGea09lijvzsqegYSik88zc7cUtIlnnO+/BvD6gQ==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/semver": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.18.0.tgz", + "integrity": "sha512-pdL757Ig5a0I+owA42l6tIuEycRuM7FPY4n62h44mRLRfnOxJkkOHd6i89dOpwZlpF6JXBwaAHF6yWzFrt+QyA==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/terser-webpack-plugin/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-loader": { + "version": "9.4.3", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.3.tgz", + "integrity": "sha512-n3hBnm6ozJYzwiwt5YRiJZkzktftRpMiBApHaJPoWLA+qetQBAXkHqCLM6nwSdRDimqVtA5ocIkcTRLMTt7yzA==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "^5.0.0" + } + }, + "node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/typescript": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", + "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack": { + "version": "5.86.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.86.0.tgz", + "integrity": "sha512-3BOvworZ8SO/D4GVP+GoRC3fVeg5MO4vzmq8TJJEkdmopxyazGDxN8ClqN12uzrZW9Tv8EED8v5VSb6Sqyi0pg==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.14.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.2", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-cli": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", + "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", + "dev": true, + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^2.1.1", + "@webpack-cli/info": "^2.0.2", + "@webpack-cli/serve": "^2.0.5", + "colorette": "^2.0.14", + "commander": "^10.0.1", + "cross-spawn": "^7.0.3", + "envinfo": "^7.7.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-cli/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/webpack-merge": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", + "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + } + } +} diff --git a/examples/ts_dungeon/package.json b/examples/ts_dungeon/package.json new file mode 100644 index 0000000..8667689 --- /dev/null +++ b/examples/ts_dungeon/package.json @@ -0,0 +1,25 @@ +{ + "name": "bindings", + "version": "1.0.0", + "description": "", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "build": "webpack --config webpack.config.js", + "watch": "webpack --watch --config webpack.config.js --mode development" + }, + "keywords": [], + "author": "", + "license": "ISC", + "devDependencies": { + "ts-loader": "^9.4.2", + "ts-node": "^10.9.1", + "typescript": "^5.0.4", + "webpack": "^5.82.0", + "webpack-cli": "^5.0.2" + }, + "dependencies": { + "inkjs": "^2.2.1", + "reflect-metadata": "^0.1.13", + "rxjs": "^7.8.1" + } +} diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/changelog.txt b/examples/ts_dungeon/resources/retro-texture-pack-v9/changelog.txt new file mode 100644 index 0000000..f4d05dd --- /dev/null +++ b/examples/ts_dungeon/resources/retro-texture-pack-v9/changelog.txt @@ -0,0 +1,69 @@ +# Changelog + +## v9 (5th October, 2022) + +- Added a small version of the limestone bricks, to match the red brick version. +- Added more small brick textures (red and limestone) with vines and grass. +- Added an archway cut-out version of the hedge texture. +- Added 3 dirt textures: one bare, one with stones, and one with a puddle. +- Added 3 sand textures: small pebbles, larger stones, and footsteps! +- Adjusted the colors of the grass texture. + +## v8 (31st August, 2022) + +- Updated the brick textures, increasing the spread of the bullet holes. +- Added 2 large sandstone brick textures. +- Added 2 steps textures to match the sandstone and red bricks. +- Renamed the existing step texture to ledge. +- Added 2 chain-link fence textures. +- Added 6 stucco textures, 3 of which have exposed red bricks. +- Added 3 hedge textures: sparse and dense variants, and a flowering variant. +- Added a grass texture. +- Adjusted the color of the BSOD terminal. + +## v7 (26th August, 2022) + +- Added 4 new brick textures, in 2 variants: large bricks and small bricks. + +## v6 (8th July, 2022) + +- Added 6 grid textures, with transparent versions. +- Added a brown slime textures. +- Added 6 new concrete textures, in two color variants. +- Added 2 new floor variants for both the tech lab and toxic lab themes. +- Added 2 new tech lab wall textures with air vents. +- The various support pillar textures have been split up into separate textures, rather then four compressed into each 64x64 texture. +- All of the textures have been lightened slightly. + +## v5 (5th July, 2022) + +- Added 30 new textures in a toxic waste lab theme: floors, ceiling lights, wall panels, support pillars and lights, doors, pipes, and slime. +- Added 6 new tech lab door textures for vertically opening doors. +- Added 6 new door trim textures. + +## v4 (25th June, 2022) + +- Added 4 computer panel textures, including one with a bullet hole, and one with the iconic BSOD!!! +- Added 6 door textures, in three trim variants: metal, yellow and red; with and without damage. +- Added versions of crates without pickup truck holes. +- Recolored the dark crate versions and gave them a unique design. +- Added crate tops for 64x64, 32x32, and 16x16. +- Added simplified pipes texture. +- Added 7 new tech walls, with no panel edges, ideal for making long corridors feel less repetitive. + +## v3 (23rd June, 2022) + +- Added 19 new stone tile ground textures, in three different variants: stone, mossy, and sandstone. For each variant there are two different layout patterns (square block and parquet), with various amounts of damage. The mossy version also has grass tuffs and water pools. +- Added 4 new crate textures, in smaller sizes: 32x16 and 16x16. +- Added 2 new rivets textures, for vertical strips of riveted metal, such as around doorways. +- Updated some of the crate textures to add in more details. +- Tweaked the lighting of most of the tech wall textures to soften them slightly. +- Improved the overview file, with labels to make it easier to find textures. + +## v2 (21st June, 2022) + +- Added 10 new textures, consisting of 5 different crates, in two color variants, in three different sizes: 64x64, 64x32, and 32x32. + +## v1 (28th October, 2021) + +- An initial collection of 58 textures, mostly tech facility themed. diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/license.txt b/examples/ts_dungeon/resources/retro-texture-pack-v9/license.txt new file mode 100644 index 0000000..bbe18ed --- /dev/null +++ b/examples/ts_dungeon/resources/retro-texture-pack-v9/license.txt @@ -0,0 +1,20 @@ +Retro Texture Pack + + Created/distributed by Craig Smith (little-martian.dev) + Creation date: 05-10-2022 + + ------------------------------ + + License: (Creative Commons Zero, CC0) + http://creativecommons.org/publicdomain/zero/1.0/ + + This content is free to use in personal, educational and commercial projects. + + Support us by crediting Little Martian or little-martian.dev (this is not mandatory) + + ------------------------------ + + Donate: https://little-martian.itch.io/ + + Follow on Twitter for updates: + https://twitter.com/MartiansGame \ No newline at end of file diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/BRICK_1A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/BRICK_1A.png new file mode 100644 index 0000000..c319a01 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/BRICK_1A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/BRICK_1B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/BRICK_1B.png new file mode 100644 index 0000000..e654171 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/BRICK_1B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/BRICK_2A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/BRICK_2A.png new file mode 100644 index 0000000..33ced86 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/BRICK_2A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/BRICK_2B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/BRICK_2B.png new file mode 100644 index 0000000..0082fff Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/BRICK_2B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/BRICK_3A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/BRICK_3A.png new file mode 100644 index 0000000..7fb176a Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/BRICK_3A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/BRICK_3B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/BRICK_3B.png new file mode 100644 index 0000000..75551b4 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/BRICK_3B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/BRICK_3C.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/BRICK_3C.png new file mode 100644 index 0000000..f195269 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/BRICK_3C.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/BRICK_3D.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/BRICK_3D.png new file mode 100644 index 0000000..dbaf6d3 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/BRICK_3D.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/BRICK_3E.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/BRICK_3E.png new file mode 100644 index 0000000..149f4e2 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/BRICK_3E.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/BRICK_4A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/BRICK_4A.png new file mode 100644 index 0000000..020accc Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/BRICK_4A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/BRICK_4B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/BRICK_4B.png new file mode 100644 index 0000000..0a35775 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/BRICK_4B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/BRICK_4C.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/BRICK_4C.png new file mode 100644 index 0000000..2946485 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/BRICK_4C.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/BRICK_4D.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/BRICK_4D.png new file mode 100644 index 0000000..19050ba Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/BRICK_4D.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/BRICK_4E.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/BRICK_4E.png new file mode 100644 index 0000000..893e211 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/BRICK_4E.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CONCRETE_1A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CONCRETE_1A.png new file mode 100644 index 0000000..837bed7 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CONCRETE_1A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CONCRETE_1B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CONCRETE_1B.png new file mode 100644 index 0000000..ed3ec86 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CONCRETE_1B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CONCRETE_2A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CONCRETE_2A.png new file mode 100644 index 0000000..58e7508 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CONCRETE_2A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CONCRETE_2B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CONCRETE_2B.png new file mode 100644 index 0000000..c2b91b7 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CONCRETE_2B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CONCRETE_2C.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CONCRETE_2C.png new file mode 100644 index 0000000..9dcaeef Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CONCRETE_2C.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CONCRETE_3A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CONCRETE_3A.png new file mode 100644 index 0000000..06d0794 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CONCRETE_3A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CONCRETE_3B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CONCRETE_3B.png new file mode 100644 index 0000000..68c0987 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CONCRETE_3B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CONCRETE_3C.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CONCRETE_3C.png new file mode 100644 index 0000000..6b3f136 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CONCRETE_3C.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CONSOLE_1A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CONSOLE_1A.png new file mode 100644 index 0000000..3e55e74 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CONSOLE_1A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CONSOLE_1B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CONSOLE_1B.png new file mode 100644 index 0000000..4234218 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CONSOLE_1B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CONSOLE_1C.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CONSOLE_1C.png new file mode 100644 index 0000000..f555396 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CONSOLE_1C.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CONSOLE_1D.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CONSOLE_1D.png new file mode 100644 index 0000000..c6d3f1e Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CONSOLE_1D.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_1A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_1A.png new file mode 100644 index 0000000..99886e8 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_1A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_1B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_1B.png new file mode 100644 index 0000000..544d5eb Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_1B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_1C.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_1C.png new file mode 100644 index 0000000..60285f3 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_1C.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_1D.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_1D.png new file mode 100644 index 0000000..839bd62 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_1D.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_1E.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_1E.png new file mode 100644 index 0000000..2047f33 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_1E.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_1F.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_1F.png new file mode 100644 index 0000000..4299164 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_1F.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_1G.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_1G.png new file mode 100644 index 0000000..85ce9d6 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_1G.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_1H.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_1H.png new file mode 100644 index 0000000..beba5f6 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_1H.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_1I.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_1I.png new file mode 100644 index 0000000..01c8310 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_1I.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_1J.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_1J.png new file mode 100644 index 0000000..597d774 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_1J.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_1K.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_1K.png new file mode 100644 index 0000000..1f9b848 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_1K.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_1L.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_1L.png new file mode 100644 index 0000000..4b10f10 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_1L.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_1M.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_1M.png new file mode 100644 index 0000000..8277279 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_1M.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_1N.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_1N.png new file mode 100644 index 0000000..c083bb0 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_1N.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_2A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_2A.png new file mode 100644 index 0000000..eed72a4 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_2A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_2B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_2B.png new file mode 100644 index 0000000..ccd75a9 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_2B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_2C.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_2C.png new file mode 100644 index 0000000..9161395 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_2C.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_2D.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_2D.png new file mode 100644 index 0000000..3f8366a Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_2D.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_2E.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_2E.png new file mode 100644 index 0000000..dada890 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_2E.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_2F.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_2F.png new file mode 100644 index 0000000..3e89644 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_2F.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_2G.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_2G.png new file mode 100644 index 0000000..5a42094 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_2G.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_2H.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_2H.png new file mode 100644 index 0000000..b5ed21a Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_2H.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_2I.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_2I.png new file mode 100644 index 0000000..531ccac Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_2I.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_2J.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_2J.png new file mode 100644 index 0000000..c5b5159 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_2J.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_2K.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_2K.png new file mode 100644 index 0000000..e375863 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_2K.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_2L.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_2L.png new file mode 100644 index 0000000..48d2f17 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_2L.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_2M.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_2M.png new file mode 100644 index 0000000..fd3cd99 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_2M.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_2N.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_2N.png new file mode 100644 index 0000000..3de5cb0 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/CRATE_2N.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DIRT_1A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DIRT_1A.png new file mode 100644 index 0000000..7f093a2 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DIRT_1A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DIRT_1B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DIRT_1B.png new file mode 100644 index 0000000..e9fa4ec Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DIRT_1B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DIRT_1C.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DIRT_1C.png new file mode 100644 index 0000000..2bb0e84 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DIRT_1C.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOORTRIM_1A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOORTRIM_1A.png new file mode 100644 index 0000000..3db97a6 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOORTRIM_1A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOORTRIM_1B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOORTRIM_1B.png new file mode 100644 index 0000000..7eef12e Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOORTRIM_1B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOORTRIM_1C.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOORTRIM_1C.png new file mode 100644 index 0000000..d4ae9eb Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOORTRIM_1C.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOOR_1A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOOR_1A.png new file mode 100644 index 0000000..07069e8 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOOR_1A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOOR_1B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOOR_1B.png new file mode 100644 index 0000000..da2d102 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOOR_1B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOOR_1C.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOOR_1C.png new file mode 100644 index 0000000..c057df2 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOOR_1C.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOOR_1D.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOOR_1D.png new file mode 100644 index 0000000..68df89c Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOOR_1D.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOOR_1E.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOOR_1E.png new file mode 100644 index 0000000..97bc3f5 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOOR_1E.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOOR_1F.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOOR_1F.png new file mode 100644 index 0000000..78229c8 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOOR_1F.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOOR_2A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOOR_2A.png new file mode 100644 index 0000000..1a23ec7 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOOR_2A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOOR_2B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOOR_2B.png new file mode 100644 index 0000000..16a88b7 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOOR_2B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOOR_2C.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOOR_2C.png new file mode 100644 index 0000000..29fbf1c Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOOR_2C.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOOR_2D.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOOR_2D.png new file mode 100644 index 0000000..1e76d75 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOOR_2D.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOOR_2E.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOOR_2E.png new file mode 100644 index 0000000..a0e134c Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOOR_2E.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOOR_2F.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOOR_2F.png new file mode 100644 index 0000000..538d3d7 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOOR_2F.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOOR_3A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOOR_3A.png new file mode 100644 index 0000000..d995eda Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOOR_3A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOOR_3B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOOR_3B.png new file mode 100644 index 0000000..4e75704 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOOR_3B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOOR_4A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOOR_4A.png new file mode 100644 index 0000000..9f93c3c Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOOR_4A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOOR_4B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOOR_4B.png new file mode 100644 index 0000000..d1f3165 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/DOOR_4B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/FENCE_1A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/FENCE_1A.png new file mode 100644 index 0000000..c5426d9 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/FENCE_1A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/FENCE_1B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/FENCE_1B.png new file mode 100644 index 0000000..db264da Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/FENCE_1B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/FLOOR_1A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/FLOOR_1A.png new file mode 100644 index 0000000..d954cb2 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/FLOOR_1A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/FLOOR_1B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/FLOOR_1B.png new file mode 100644 index 0000000..89f360a Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/FLOOR_1B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/FLOOR_1C.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/FLOOR_1C.png new file mode 100644 index 0000000..704de7e Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/FLOOR_1C.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/FLOOR_1D.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/FLOOR_1D.png new file mode 100644 index 0000000..fd2bbfb Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/FLOOR_1D.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/FLOOR_2A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/FLOOR_2A.png new file mode 100644 index 0000000..095c3fc Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/FLOOR_2A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/FLOOR_2B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/FLOOR_2B.png new file mode 100644 index 0000000..04e7ffa Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/FLOOR_2B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/FLOOR_2C.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/FLOOR_2C.png new file mode 100644 index 0000000..6ddc042 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/FLOOR_2C.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/FLOOR_2D.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/FLOOR_2D.png new file mode 100644 index 0000000..98f72b1 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/FLOOR_2D.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/FLOOR_2E.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/FLOOR_2E.png new file mode 100644 index 0000000..f3ef68c Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/FLOOR_2E.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/FLOOR_2F.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/FLOOR_2F.png new file mode 100644 index 0000000..d25a5ac Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/FLOOR_2F.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/FLOOR_2G.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/FLOOR_2G.png new file mode 100644 index 0000000..96302fa Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/FLOOR_2G.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/FLOOR_3A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/FLOOR_3A.png new file mode 100644 index 0000000..b2048a1 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/FLOOR_3A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/FLOOR_3B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/FLOOR_3B.png new file mode 100644 index 0000000..4c7a24f Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/FLOOR_3B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/FLOOR_3C.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/FLOOR_3C.png new file mode 100644 index 0000000..9a2967a Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/FLOOR_3C.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/GRASS_1A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/GRASS_1A.png new file mode 100644 index 0000000..ed4a36b Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/GRASS_1A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/GRID_1A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/GRID_1A.png new file mode 100644 index 0000000..a5bb26f Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/GRID_1A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/GRID_1B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/GRID_1B.png new file mode 100644 index 0000000..7bef1eb Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/GRID_1B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/GRID_1C.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/GRID_1C.png new file mode 100644 index 0000000..3e67b0d Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/GRID_1C.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/GRID_2A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/GRID_2A.png new file mode 100644 index 0000000..8becda6 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/GRID_2A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/GRID_2B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/GRID_2B.png new file mode 100644 index 0000000..91b5ac1 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/GRID_2B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/GRID_2C.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/GRID_2C.png new file mode 100644 index 0000000..666d048 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/GRID_2C.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/HEDGE_1A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/HEDGE_1A.png new file mode 100644 index 0000000..ae456a5 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/HEDGE_1A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/HEDGE_1B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/HEDGE_1B.png new file mode 100644 index 0000000..e436ce9 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/HEDGE_1B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/HEDGE_1C.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/HEDGE_1C.png new file mode 100644 index 0000000..ed8637e Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/HEDGE_1C.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/HEDGE_2A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/HEDGE_2A.png new file mode 100644 index 0000000..6fb42c0 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/HEDGE_2A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LAB_1A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LAB_1A.png new file mode 100644 index 0000000..c77b280 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LAB_1A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LAB_1B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LAB_1B.png new file mode 100644 index 0000000..589f949 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LAB_1B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LAB_1C.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LAB_1C.png new file mode 100644 index 0000000..8454059 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LAB_1C.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LAB_2A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LAB_2A.png new file mode 100644 index 0000000..e841b5d Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LAB_2A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LAB_2B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LAB_2B.png new file mode 100644 index 0000000..a7c24ba Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LAB_2B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LAB_2C.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LAB_2C.png new file mode 100644 index 0000000..f4345a7 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LAB_2C.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LAB_3A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LAB_3A.png new file mode 100644 index 0000000..8d8745c Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LAB_3A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LAB_3B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LAB_3B.png new file mode 100644 index 0000000..d92d444 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LAB_3B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LAB_4A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LAB_4A.png new file mode 100644 index 0000000..bb74660 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LAB_4A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LAB_4B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LAB_4B.png new file mode 100644 index 0000000..a1fd2b8 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LAB_4B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LAB_5A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LAB_5A.png new file mode 100644 index 0000000..d18c5ac Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LAB_5A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LAB_5B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LAB_5B.png new file mode 100644 index 0000000..7728953 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LAB_5B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LEDGE_1A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LEDGE_1A.png new file mode 100644 index 0000000..9e7798b Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LEDGE_1A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LIGHT_1A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LIGHT_1A.png new file mode 100644 index 0000000..c109ac2 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LIGHT_1A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LIGHT_1B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LIGHT_1B.png new file mode 100644 index 0000000..b9da6de Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LIGHT_1B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LIGHT_1C.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LIGHT_1C.png new file mode 100644 index 0000000..3f90a4d Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LIGHT_1C.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LIGHT_2A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LIGHT_2A.png new file mode 100644 index 0000000..eef1a71 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LIGHT_2A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LIGHT_2B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LIGHT_2B.png new file mode 100644 index 0000000..44abcbc Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/LIGHT_2B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/PIPES_1A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/PIPES_1A.png new file mode 100644 index 0000000..d940618 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/PIPES_1A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/PIPES_1B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/PIPES_1B.png new file mode 100644 index 0000000..0f3f492 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/PIPES_1B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/PIPES_2A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/PIPES_2A.png new file mode 100644 index 0000000..b3ffb25 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/PIPES_2A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/RIVET_1A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/RIVET_1A.png new file mode 100644 index 0000000..a0199c3 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/RIVET_1A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/RIVET_1B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/RIVET_1B.png new file mode 100644 index 0000000..d0f709f Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/RIVET_1B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/RIVET_1C.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/RIVET_1C.png new file mode 100644 index 0000000..f4e4d47 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/RIVET_1C.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/RIVET_2A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/RIVET_2A.png new file mode 100644 index 0000000..239c9b7 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/RIVET_2A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/RIVET_2B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/RIVET_2B.png new file mode 100644 index 0000000..2b07e65 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/RIVET_2B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/RIVET_2C.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/RIVET_2C.png new file mode 100644 index 0000000..e992f31 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/RIVET_2C.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/RIVET_3A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/RIVET_3A.png new file mode 100644 index 0000000..45b9334 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/RIVET_3A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/RIVET_3B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/RIVET_3B.png new file mode 100644 index 0000000..1134fe8 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/RIVET_3B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SAND_1A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SAND_1A.png new file mode 100644 index 0000000..64d2dcf Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SAND_1A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SAND_1B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SAND_1B.png new file mode 100644 index 0000000..98cb84a Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SAND_1B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SAND_1C.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SAND_1C.png new file mode 100644 index 0000000..d54c6de Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SAND_1C.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SLIME_1A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SLIME_1A.png new file mode 100644 index 0000000..d7e3c3d Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SLIME_1A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SLIME_1B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SLIME_1B.png new file mode 100644 index 0000000..03b5f9c Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SLIME_1B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/STEEL_1A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/STEEL_1A.png new file mode 100644 index 0000000..7027749 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/STEEL_1A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/STEEL_1B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/STEEL_1B.png new file mode 100644 index 0000000..947ed79 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/STEEL_1B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/STEEL_2A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/STEEL_2A.png new file mode 100644 index 0000000..db6bc57 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/STEEL_2A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/STEEL_2B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/STEEL_2B.png new file mode 100644 index 0000000..01c9226 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/STEEL_2B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/STEEL_3A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/STEEL_3A.png new file mode 100644 index 0000000..b65a486 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/STEEL_3A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/STEP_1A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/STEP_1A.png new file mode 100644 index 0000000..06051fd Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/STEP_1A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/STEP_2A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/STEP_2A.png new file mode 100644 index 0000000..86f4cdf Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/STEP_2A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/STUCCO_1A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/STUCCO_1A.png new file mode 100644 index 0000000..2a9b285 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/STUCCO_1A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/STUCCO_1B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/STUCCO_1B.png new file mode 100644 index 0000000..de6097a Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/STUCCO_1B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/STUCCO_1C.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/STUCCO_1C.png new file mode 100644 index 0000000..2171f32 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/STUCCO_1C.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/STUCCO_1D.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/STUCCO_1D.png new file mode 100644 index 0000000..c2dd6cd Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/STUCCO_1D.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/STUCCO_2A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/STUCCO_2A.png new file mode 100644 index 0000000..d55d245 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/STUCCO_2A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/STUCCO_2B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/STUCCO_2B.png new file mode 100644 index 0000000..4496865 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/STUCCO_2B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_1A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_1A.png new file mode 100644 index 0000000..5a2eedd Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_1A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_1B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_1B.png new file mode 100644 index 0000000..d60ab7f Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_1B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_1C.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_1C.png new file mode 100644 index 0000000..78df59c Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_1C.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_1D.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_1D.png new file mode 100644 index 0000000..3431425 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_1D.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_2A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_2A.png new file mode 100644 index 0000000..734f841 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_2A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_2B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_2B.png new file mode 100644 index 0000000..70fd50c Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_2B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_2C.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_2C.png new file mode 100644 index 0000000..fc17144 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_2C.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_2D.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_2D.png new file mode 100644 index 0000000..17dfb6a Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_2D.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_3A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_3A.png new file mode 100644 index 0000000..febbca2 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_3A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_3B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_3B.png new file mode 100644 index 0000000..487790a Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_3B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_3C.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_3C.png new file mode 100644 index 0000000..0013b13 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_3C.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_3D.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_3D.png new file mode 100644 index 0000000..eee63e8 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_3D.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_4A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_4A.png new file mode 100644 index 0000000..091859f Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_4A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_4B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_4B.png new file mode 100644 index 0000000..8f0f1a5 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_4B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_4C.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_4C.png new file mode 100644 index 0000000..b0a0177 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_4C.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_4D.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_4D.png new file mode 100644 index 0000000..5ebcb9a Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_4D.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_5A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_5A.png new file mode 100644 index 0000000..ac619f1 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_5A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_5B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_5B.png new file mode 100644 index 0000000..02aeba3 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_5B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_5C.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_5C.png new file mode 100644 index 0000000..454100e Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_5C.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_5D.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_5D.png new file mode 100644 index 0000000..da0a85c Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_5D.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_6A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_6A.png new file mode 100644 index 0000000..9d883e9 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_6A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_6B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_6B.png new file mode 100644 index 0000000..57a9da9 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_6B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_6C.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_6C.png new file mode 100644 index 0000000..a261ebe Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_6C.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_6D.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_6D.png new file mode 100644 index 0000000..769fc02 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_6D.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_7A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_7A.png new file mode 100644 index 0000000..2f65552 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_7A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_7B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_7B.png new file mode 100644 index 0000000..1d6d19c Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_7B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_7C.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_7C.png new file mode 100644 index 0000000..5cb1faa Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_7C.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_7D.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_7D.png new file mode 100644 index 0000000..5b6acc8 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/SUPPORT_7D.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_0A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_0A.png new file mode 100644 index 0000000..3dbc39c Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_0A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_0B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_0B.png new file mode 100644 index 0000000..43a31bf Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_0B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_0C.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_0C.png new file mode 100644 index 0000000..ef797a1 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_0C.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_0D.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_0D.png new file mode 100644 index 0000000..e5fb88f Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_0D.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_0E.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_0E.png new file mode 100644 index 0000000..104ed2f Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_0E.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_0F.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_0F.png new file mode 100644 index 0000000..3b04081 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_0F.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_0G.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_0G.png new file mode 100644 index 0000000..382ea47 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_0G.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_1A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_1A.png new file mode 100644 index 0000000..3cf146c Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_1A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_1B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_1B.png new file mode 100644 index 0000000..424175b Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_1B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_1C.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_1C.png new file mode 100644 index 0000000..03964c3 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_1C.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_1D.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_1D.png new file mode 100644 index 0000000..ea69e7e Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_1D.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_1E.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_1E.png new file mode 100644 index 0000000..97c7aa7 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_1E.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_1F.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_1F.png new file mode 100644 index 0000000..cc88a67 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_1F.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_2A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_2A.png new file mode 100644 index 0000000..9b4ffef Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_2A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_2B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_2B.png new file mode 100644 index 0000000..a7f466a Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_2B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_3A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_3A.png new file mode 100644 index 0000000..922a548 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_3A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_3B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_3B.png new file mode 100644 index 0000000..555aaa6 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_3B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_3C.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_3C.png new file mode 100644 index 0000000..6458fde Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_3C.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_3D.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_3D.png new file mode 100644 index 0000000..86518c1 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_3D.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_3E.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_3E.png new file mode 100644 index 0000000..b5c944e Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_3E.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_3F.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_3F.png new file mode 100644 index 0000000..8b1a1c0 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_3F.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_3G.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_3G.png new file mode 100644 index 0000000..d6700ad Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_3G.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_3H.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_3H.png new file mode 100644 index 0000000..98f6578 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_3H.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_3I.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_3I.png new file mode 100644 index 0000000..63e41a9 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_3I.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_3J.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_3J.png new file mode 100644 index 0000000..501ec77 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_3J.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_3K.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_3K.png new file mode 100644 index 0000000..de32c55 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_3K.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_4A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_4A.png new file mode 100644 index 0000000..4de1c5a Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_4A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_4B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_4B.png new file mode 100644 index 0000000..b9c4094 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_4B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_4C.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_4C.png new file mode 100644 index 0000000..66ee237 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_4C.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_4D.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_4D.png new file mode 100644 index 0000000..4449050 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_4D.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_4E.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_4E.png new file mode 100644 index 0000000..73af8d3 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_4E.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_4F.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_4F.png new file mode 100644 index 0000000..c67f737 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_4F.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_5A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_5A.png new file mode 100644 index 0000000..c3d7b29 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_5A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_5B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_5B.png new file mode 100644 index 0000000..a2c433b Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TECH_5B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_1A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_1A.png new file mode 100644 index 0000000..9859303 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_1A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_1B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_1B.png new file mode 100644 index 0000000..f68da99 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_1B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_1C.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_1C.png new file mode 100644 index 0000000..d40ed1c Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_1C.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_1D.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_1D.png new file mode 100644 index 0000000..dc7c305 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_1D.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_1E.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_1E.png new file mode 100644 index 0000000..56790fc Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_1E.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_1F.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_1F.png new file mode 100644 index 0000000..159b3c3 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_1F.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_1G.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_1G.png new file mode 100644 index 0000000..3e1468d Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_1G.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_2A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_2A.png new file mode 100644 index 0000000..b723bc9 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_2A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_2B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_2B.png new file mode 100644 index 0000000..9da4296 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_2B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_2C.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_2C.png new file mode 100644 index 0000000..a731fb5 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_2C.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_2D.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_2D.png new file mode 100644 index 0000000..3fe2c39 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_2D.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_2E.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_2E.png new file mode 100644 index 0000000..37d5c37 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_2E.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_2F.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_2F.png new file mode 100644 index 0000000..2078459 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_2F.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_3A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_3A.png new file mode 100644 index 0000000..eceed7c Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_3A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_3B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_3B.png new file mode 100644 index 0000000..2f8bffb Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_3B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_3C.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_3C.png new file mode 100644 index 0000000..8da2a04 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_3C.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_3D.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_3D.png new file mode 100644 index 0000000..a44193b Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_3D.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_3E.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_3E.png new file mode 100644 index 0000000..24cc3eb Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_3E.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_3F.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_3F.png new file mode 100644 index 0000000..7ce18d3 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/TILE_3F.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/VENT_1A.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/VENT_1A.png new file mode 100644 index 0000000..9cea12d Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/VENT_1A.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/VENT_1B.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/VENT_1B.png new file mode 100644 index 0000000..54e1f29 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/VENT_1B.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/WARN_1.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/WARN_1.png new file mode 100644 index 0000000..fd82484 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/WARN_1.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/png/WARN_2.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/WARN_2.png new file mode 100644 index 0000000..32efd3f Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/png/WARN_2.png differ diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/readme.txt b/examples/ts_dungeon/resources/retro-texture-pack-v9/readme.txt new file mode 100644 index 0000000..2707dc8 --- /dev/null +++ b/examples/ts_dungeon/resources/retro-texture-pack-v9/readme.txt @@ -0,0 +1,29 @@ +# Retro Texture Pack + +Hey, thanks so much for trying out my retro-style texture pack. I started +creating these to make a retro styled FPS, inspired by games like DOOM and Quake, +but it was taking too much time away from my main project, so I decided to +release them as a free texture pack instead. + +## Contents + +There is currently a total of *235* unique textures, though there are a lot of +variants, so some of the textures are similar. + +## License + +See the LICENSE.txt file included in this asset pack for full details, but in +short you're welcome to use the texture in any non-commercial and commercial +works. You may not, however, distribute the texture pack in any format. + +## Contact + +If you encounter any problems, have any questions or have some feedback, +you can reach me here: + +- Twitter: https://twitter.com/MartiansGame +- Discord: https://discord.gg/bmwsKU6dqP +- Website: https://little-martian.dev +- Mail: craig@craigsmith.info + +Thank you! \ No newline at end of file diff --git a/examples/ts_dungeon/resources/retro-texture-pack-v9/retro-texture-pack.png b/examples/ts_dungeon/resources/retro-texture-pack-v9/retro-texture-pack.png new file mode 100644 index 0000000..9cbd5c3 Binary files /dev/null and b/examples/ts_dungeon/resources/retro-texture-pack-v9/retro-texture-pack.png differ diff --git a/examples/ts_dungeon/resources/shaders/glsl100/lighting.fs b/examples/ts_dungeon/resources/shaders/glsl100/lighting.fs new file mode 100644 index 0000000..7367161 --- /dev/null +++ b/examples/ts_dungeon/resources/shaders/glsl100/lighting.fs @@ -0,0 +1,81 @@ +#version 100 + +precision mediump float; + +// Input vertex attributes (from vertex shader) +varying vec3 fragPosition; +varying vec2 fragTexCoord; +varying vec4 fragColor; +varying vec3 fragNormal; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables + +#define MAX_LIGHTS 4 +#define LIGHT_DIRECTIONAL 0 +#define LIGHT_POINT 1 + +struct MaterialProperty { + vec3 color; + int useSampler; + sampler2D sampler; +}; + +struct Light { + int enabled; + int type; + vec3 position; + vec3 target; + vec4 color; +}; + +// Input lighting values +uniform Light lights[MAX_LIGHTS]; +uniform vec4 ambient; +uniform vec3 viewPos; + +void main() +{ + // Texel color fetching from texture sampler + vec4 texelColor = texture2D(texture0, fragTexCoord); + vec3 lightDot = vec3(0.0); + vec3 normal = normalize(fragNormal); + vec3 viewD = normalize(viewPos - fragPosition); + vec3 specular = vec3(0.0); + + // NOTE: Implement here your fragment shader code + + for (int i = 0; i < MAX_LIGHTS; i++) + { + if (lights[i].enabled == 1) + { + vec3 light = vec3(0.0); + + if (lights[i].type == LIGHT_DIRECTIONAL) + { + light = -normalize(lights[i].target - lights[i].position); + } + + if (lights[i].type == LIGHT_POINT) + { + light = normalize(lights[i].position - fragPosition); + } + + float NdotL = max(dot(normal, light), 0.0); + lightDot += lights[i].color.rgb*NdotL; + + float specCo = 0.0; + if (NdotL > 0.0) specCo = pow(max(0.0, dot(viewD, reflect(-(light), normal))), 16.0); // 16 refers to shine + specular += specCo; + } + } + + vec4 finalColor = (texelColor*((colDiffuse + vec4(specular, 1.0))*vec4(lightDot, 1.0))); + finalColor += texelColor*(ambient/10.0); + + // Gamma correction + gl_FragColor = pow(finalColor, vec4(1.0/2.2)); +} diff --git a/examples/ts_dungeon/resources/shaders/glsl100/lighting.vs b/examples/ts_dungeon/resources/shaders/glsl100/lighting.vs new file mode 100644 index 0000000..5245c61 --- /dev/null +++ b/examples/ts_dungeon/resources/shaders/glsl100/lighting.vs @@ -0,0 +1,59 @@ +#version 100 + +// Input vertex attributes +attribute vec3 vertexPosition; +attribute vec2 vertexTexCoord; +attribute vec3 vertexNormal; +attribute vec4 vertexColor; + +// Input uniform values +uniform mat4 mvp; +uniform mat4 matModel; + +// Output vertex attributes (to fragment shader) +varying vec3 fragPosition; +varying vec2 fragTexCoord; +varying vec4 fragColor; +varying vec3 fragNormal; + +// NOTE: Add here your custom variables + +// https://github.com/glslify/glsl-inverse +mat3 inverse(mat3 m) +{ + float a00 = m[0][0], a01 = m[0][1], a02 = m[0][2]; + float a10 = m[1][0], a11 = m[1][1], a12 = m[1][2]; + float a20 = m[2][0], a21 = m[2][1], a22 = m[2][2]; + + float b01 = a22*a11 - a12*a21; + float b11 = -a22*a10 + a12*a20; + float b21 = a21*a10 - a11*a20; + + float det = a00*b01 + a01*b11 + a02*b21; + + return mat3(b01, (-a22*a01 + a02*a21), (a12*a01 - a02*a11), + b11, (a22*a00 - a02*a20), (-a12*a00 + a02*a10), + b21, (-a21*a00 + a01*a20), (a11*a00 - a01*a10))/det; +} + +// https://github.com/glslify/glsl-transpose +mat3 transpose(mat3 m) +{ + return mat3(m[0][0], m[1][0], m[2][0], + m[0][1], m[1][1], m[2][1], + m[0][2], m[1][2], m[2][2]); +} + +void main() +{ + // Send vertex attributes to fragment shader + fragPosition = vec3(matModel*vec4(vertexPosition, 1.0)); + fragTexCoord = vertexTexCoord; + fragColor = vertexColor; + + mat3 normalMatrix = transpose(inverse(mat3(matModel))); + fragNormal = normalize(normalMatrix*vertexNormal); + + // Calculate final vertex position + gl_Position = mvp*vec4(vertexPosition, 1.0); +} diff --git a/examples/ts_dungeon/resources/shaders/glsl120/lighting.fs b/examples/ts_dungeon/resources/shaders/glsl120/lighting.fs new file mode 100644 index 0000000..d9cfb44 --- /dev/null +++ b/examples/ts_dungeon/resources/shaders/glsl120/lighting.fs @@ -0,0 +1,79 @@ +#version 120 + +// Input vertex attributes (from vertex shader) +varying vec3 fragPosition; +varying vec2 fragTexCoord; +varying vec4 fragColor; +varying vec3 fragNormal; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables + +#define MAX_LIGHTS 4 +#define LIGHT_DIRECTIONAL 0 +#define LIGHT_POINT 1 + +struct MaterialProperty { + vec3 color; + int useSampler; + sampler2D sampler; +}; + +struct Light { + int enabled; + int type; + vec3 position; + vec3 target; + vec4 color; +}; + +// Input lighting values +uniform Light lights[MAX_LIGHTS]; +uniform vec4 ambient; +uniform vec3 viewPos; + +void main() +{ + // Texel color fetching from texture sampler + vec4 texelColor = texture2D(texture0, fragTexCoord); + vec3 lightDot = vec3(0.0); + vec3 normal = normalize(fragNormal); + vec3 viewD = normalize(viewPos - fragPosition); + vec3 specular = vec3(0.0); + + // NOTE: Implement here your fragment shader code + + for (int i = 0; i < MAX_LIGHTS; i++) + { + if (lights[i].enabled == 1) + { + vec3 light = vec3(0.0); + + if (lights[i].type == LIGHT_DIRECTIONAL) + { + light = -normalize(lights[i].target - lights[i].position); + } + + if (lights[i].type == LIGHT_POINT) + { + light = normalize(lights[i].position - fragPosition); + } + + float NdotL = max(dot(normal, light), 0.0); + lightDot += lights[i].color.rgb*NdotL; + + float specCo = 0.0; + if (NdotL > 0.0) specCo = pow(max(0.0, dot(viewD, reflect(-(light), normal))), 16.0); // 16 refers to shine + specular += specCo; + } + } + + vec4 finalColor = (texelColor*((colDiffuse + vec4(specular, 1.0))*vec4(lightDot, 1.0))); + finalColor += texelColor*(ambient/10.0); + + // Gamma correction + gl_FragColor = pow(finalColor, vec4(1.0/2.2)); +} \ No newline at end of file diff --git a/examples/ts_dungeon/resources/shaders/glsl120/lighting.vs b/examples/ts_dungeon/resources/shaders/glsl120/lighting.vs new file mode 100644 index 0000000..b114093 --- /dev/null +++ b/examples/ts_dungeon/resources/shaders/glsl120/lighting.vs @@ -0,0 +1,59 @@ +#version 120 + +// Input vertex attributes +attribute vec3 vertexPosition; +attribute vec2 vertexTexCoord; +attribute vec3 vertexNormal; +attribute vec4 vertexColor; + +// Input uniform values +uniform mat4 mvp; +uniform mat4 matModel; + +// Output vertex attributes (to fragment shader) +varying vec3 fragPosition; +varying vec2 fragTexCoord; +varying vec4 fragColor; +varying vec3 fragNormal; + +// NOTE: Add here your custom variables + +// https://github.com/glslify/glsl-inverse +mat3 inverse(mat3 m) +{ + float a00 = m[0][0], a01 = m[0][1], a02 = m[0][2]; + float a10 = m[1][0], a11 = m[1][1], a12 = m[1][2]; + float a20 = m[2][0], a21 = m[2][1], a22 = m[2][2]; + + float b01 = a22*a11 - a12*a21; + float b11 = -a22*a10 + a12*a20; + float b21 = a21*a10 - a11*a20; + + float det = a00*b01 + a01*b11 + a02*b21; + + return mat3(b01, (-a22*a01 + a02*a21), (a12*a01 - a02*a11), + b11, (a22*a00 - a02*a20), (-a12*a00 + a02*a10), + b21, (-a21*a00 + a01*a20), (a11*a00 - a01*a10))/det; +} + +// https://github.com/glslify/glsl-transpose +mat3 transpose(mat3 m) +{ + return mat3(m[0][0], m[1][0], m[2][0], + m[0][1], m[1][1], m[2][1], + m[0][2], m[1][2], m[2][2]); +} + +void main() +{ + // Send vertex attributes to fragment shader + fragPosition = vec3(matModel*vec4(vertexPosition, 1.0)); + fragTexCoord = vertexTexCoord; + fragColor = vertexColor; + + mat3 normalMatrix = transpose(inverse(mat3(matModel))); + fragNormal = normalize(normalMatrix*vertexNormal); + + // Calculate final vertex position + gl_Position = mvp*vec4(vertexPosition, 1.0); +} diff --git a/examples/ts_dungeon/resources/shaders/glsl330/lighting.fs b/examples/ts_dungeon/resources/shaders/glsl330/lighting.fs new file mode 100644 index 0000000..a76c13a --- /dev/null +++ b/examples/ts_dungeon/resources/shaders/glsl330/lighting.fs @@ -0,0 +1,87 @@ +#version 330 + +// Input vertex attributes (from vertex shader) +in vec3 fragPosition; +in vec2 fragTexCoord; +//in vec4 fragColor; +in vec3 fragNormal; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// Output fragment color +out vec4 finalColor; + +// NOTE: Add here your custom variables + +#define MAX_LIGHTS 4 +#define LIGHT_DIRECTIONAL 0 +#define LIGHT_POINT 1 + +struct MaterialProperty { + vec3 color; + int useSampler; + sampler2D sampler; +}; + +struct Light { + int enabled; + int type; + vec3 position; + vec3 target; + vec4 color; +}; + +// Input lighting values +uniform Light lights[MAX_LIGHTS]; +uniform vec4 ambient; +uniform vec3 viewPos; + +void main() +{ + // Texel color fetching from texture sampler + vec4 texelColor = texture(texture0, fragTexCoord); + vec3 lightDot = vec3(0.0); + vec3 normal = normalize(fragNormal); + vec3 viewD = normalize(viewPos - fragPosition); + vec3 specular = vec3(0.0); + + // NOTE: Implement here your fragment shader code + + + for (int i = 0; i < MAX_LIGHTS; i++) + { + if (lights[i].enabled == 1) + { + vec3 light = vec3(0.0); + + if (lights[i].type == LIGHT_DIRECTIONAL) + { + light = -normalize(lights[i].target - lights[i].position); + } + + if (lights[i].type == LIGHT_POINT) + { + float dist = distance(fragPosition, lights[i].position); + light = normalize(lights[i].position - fragPosition); + + float att = clamp(1.0 - dist*dist/(8*8), 0.0, 1.0); + light *= att; + } + + float NdotL = max(dot(normal, light), 0.0); + lightDot += lights[i].color.rgb*NdotL; + + float specCo = 0.0; + if (NdotL > 0.0) specCo = pow(max(0.0, dot(viewD, reflect(-(light), normal))), 16.0); // 16 refers to shine + specular += specCo; + } + } + + finalColor = (texelColor*((colDiffuse + vec4(specular, 1.0))*vec4(lightDot, 1.0))); + finalColor += texelColor*(ambient/10.0)*colDiffuse; + + // Gamma correction + finalColor = pow(finalColor, vec4(1.0/2.2)); +} diff --git a/examples/ts_dungeon/resources/shaders/glsl330/lighting.vs b/examples/ts_dungeon/resources/shaders/glsl330/lighting.vs new file mode 100644 index 0000000..f8ec45f --- /dev/null +++ b/examples/ts_dungeon/resources/shaders/glsl330/lighting.vs @@ -0,0 +1,32 @@ +#version 330 + +// Input vertex attributes +in vec3 vertexPosition; +in vec2 vertexTexCoord; +in vec3 vertexNormal; +in vec4 vertexColor; + +// Input uniform values +uniform mat4 mvp; +uniform mat4 matModel; +uniform mat4 matNormal; + +// Output vertex attributes (to fragment shader) +out vec3 fragPosition; +out vec2 fragTexCoord; +out vec4 fragColor; +out vec3 fragNormal; + +// NOTE: Add here your custom variables + +void main() +{ + // Send vertex attributes to fragment shader + fragPosition = vec3(matModel*vec4(vertexPosition, 1.0)); + fragTexCoord = vertexTexCoord; + fragColor = vertexColor; + fragNormal = normalize(vec3(matNormal*vec4(vertexNormal, 1.0))); + + // Calculate final vertex position + gl_Position = mvp*vec4(vertexPosition, 1.0); +} diff --git a/examples/ts_dungeon/src/index.ts b/examples/ts_dungeon/src/index.ts new file mode 100644 index 0000000..de0de80 --- /dev/null +++ b/examples/ts_dungeon/src/index.ts @@ -0,0 +1,219 @@ +/******************************************************************************************* +* +* raylib [shaders] example - basic lighting +* +* NOTE: This example requires raylib OpenGL 3.3 or ES2 versions for shaders support, +* OpenGL 1.1 does not support shaders, recompile raylib to OpenGL 3.3 version. +* +* NOTE: Shaders used in this example are #version 330 (OpenGL 3.3). +* +* Example originally created with raylib 3.0, last time updated with raylib 4.2 +* +* Example contributed by Chris Camacho (@codifies) and reviewed by Ramon Santamaria (@raysan5) +* +* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, +* BSD-like license that allows static linking with closed source software +* +* Copyright (c) 2019-2023 Chris Camacho (@codifies) and Ramon Santamaria (@raysan5) +* +********************************************************************************************/ + +import { dispatchPromises } from "./promise-extensions"; +import { interpolate, interpolateVec3, wait } from "./timing"; + +const GLSL_VERSION = "330" + +// Initialization +//-------------------------------------------------------------------------------------- +const screenWidth = 800; +const screenHeight = 450; + +setConfigFlags(FLAG_MSAA_4X_HINT); // Enable Multi Sampling Anti Aliasing 4x (if available) +initWindow(screenWidth, screenHeight, "raylib [shaders] example - basic lighting"); + +// Define the camera to look into our 3d world +const position = new Vector3(0.0,1.0,0.0); // Camera position +const target = new Vector3(0.0,1.0,1.0); // Camera looking at point +const up = new Vector3(0.0,1.0,0.0); // Camera up vector (rotation towards target) +const fovy = 90.0; // Camera field-of-view Y +const projection = CAMERA_PERSPECTIVE; // Camera projection type +const camera = new Camera3D(position,target,up,fovy,projection) + +// Load plane model from a generated mesh +const floor = loadModelFromMesh(genMeshPlane(2.0, 2.0, 1, 1)); +const cube = loadModelFromMesh(genMeshCube(2.0, 2.0, 2.0)); + +// Load basic lighting shader +const shader = loadShader(`resources/shaders/glsl${GLSL_VERSION}/lighting.vs`, + `resources/shaders/glsl${GLSL_VERSION}/lighting.fs`); +// Get some required shader locations +const viewLoc = getShaderLocation(shader, "viewPos") +// NOTE: "matModel" location name is automatically assigned on shader loading, +// no need to get the location again if using that uniform name +//shader.locs[SHADER_LOC_MATRIX_MODEL] = getShaderLocation(shader, "matModel"); + +// Ambient light level (some basic lighting) +const ambientLoc = getShaderLocation(shader, "ambient"); +setShaderValue(shader, ambientLoc, new Vector4(0.1, 0.1, 0.1, 1.0), SHADER_UNIFORM_VEC4); + +const textureWall = loadTexture("resources/retro-texture-pack-v9/png/BRICK_1A.png") +const textureFloor = loadTexture("resources/retro-texture-pack-v9/png/TILE_2C.png") + +// Assign out lighting shader to model +const matModel = loadMaterialDefault() +matModel.shader = shader +setMaterialTexture(matModel, MATERIAL_MAP_DIFFUSE, textureFloor) +setModelMaterial(floor, 0, matModel) +const matCube = loadMaterialDefault() +setMaterialTexture(matCube, MATERIAL_MAP_DIFFUSE, textureWall) + +matCube.shader = shader +setModelMaterial(cube, 0, matCube) + +// Create lights +const lights: Light[] = new Array(4) +lights[0] = createLight(LIGHT_POINT, new Vector3(4,1,4), vector3Zero(), WHITE, shader); +lights[1] = createLight(LIGHT_POINT, new Vector3(4,1,8), vector3Zero(), RED, shader); +lights[2] = createLight(LIGHT_POINT, new Vector3(12,1,12), vector3Zero(), GREEN, shader); +lights[3] = createLight(LIGHT_POINT, new Vector3(8,1,4), vector3Zero(), BLUE, shader); + +setTargetFPS(60); // Set our game to run at 60 frames-per-second +//-------------------------------------------------------------------------------------- + +//disableCursor() + +class Map { + private _image: Image; + private _texture?: Texture + get texture() { return (this._texture = this._texture ?? loadTextureFromImage(this._image)) } + private _data?: number[] + get data() { return (this._data = this._data ?? this.loadData()) } + + constructor(public readonly width: number, public readonly height: number){ + this._image = genImageColor(width,height,BLACK) + } + + public iterateData(fn: (x: number, y: number, item: number) => void){ + this.foreachXY((x,y) => fn(x,y,this.data[y*this.width+x])) + } + + private foreachXY(fn: (x: number, y: number) => void){ + for (let y = 0; y < this.height; y++) { + for (let x = 0; x < this.width; x++) { + fn(x,y) + } + } + } + + private loadData(){ + const data: number[] = [] + this.foreachXY((x,y) => data[y*this.width+x] = getImageColor(this._image,x,y).r) + return data + } + + makeWall(x: number, y: number){ + imageDrawPixel(this._image, x,y,WHITE) + if(this._texture) unloadTexture(this._texture) + this._texture = undefined + this._data = undefined + } +} + +const map = new Map(16,16) + +let playerPos = new Vector3(2,1,2); +let playerDir = 0 + +const forward = new Vector3(0,0,2) +const backward = new Vector3(0,0,-2) + +async function main(){ + while(true){ + if(isKeyDown(KEY_UP)){ + await interpolateVec3(playerPos, vector3Add(playerPos, forward), 1, v => playerPos = v, easeCubicInOut) + } else if(isKeyDown(KEY_DOWN)){ + await interpolateVec3(playerPos, vector3Add(playerPos, backward), 1, v => playerPos = v, easeCubicInOut) + } else if(isKeyDown(KEY_LEFT)){ + await interpolate(playerDir, playerDir-90, 1, v => playerDir = v, easeCubicInOut) + } else if(isKeyDown(KEY_RIGHT)){ + await interpolate(playerDir, playerDir+90, 1, v => playerDir = v, easeCubicInOut) + } + await wait(0.0) + } +} + +main() + +const MAP_SCALE = 8 +// Main game loop +while (!windowShouldClose()) // Detect window close button or ESC key +{ + dispatchPromises() + // Update + //---------------------------------------------------------------------------------- + //updateCamera(camera, CAMERA_FIRST_PERSON); + camera.position = playerPos + const dir = vector2Rotate(new Vector2(0,1), playerDir*DEG2RAD) + camera.target = vector3Add(new Vector3(dir.x,0,dir.y), playerPos) + + const mousePos = getMousePosition() + const mouseTile = new Vector2(Math.floor(mousePos.x/8),Math.floor(mousePos.y/8)) + if(isMouseButtonPressed(MOUSE_BUTTON_LEFT) && mouseTile.x < map.width && mouseTile.y < map.height){ + map.makeWall(mouseTile.x, mouseTile.y) + } + + // Update the shader with the camera view vector (points towards { 0.0, 0.0, 0.0 }) + const cameraPos = new Vector3(camera.position.x, camera.position.y, camera.position.z); + setShaderValue(shader, viewLoc, cameraPos, SHADER_UNIFORM_VEC3); + + // Check key inputs to enable/disable lights + if (isKeyPressed(KEY_Y)) { lights[0].enabled = !lights[0].enabled; } + if (isKeyPressed(KEY_R)) { lights[1].enabled = !lights[1].enabled; } + if (isKeyPressed(KEY_G)) { lights[2].enabled = !lights[2].enabled; } + if (isKeyPressed(KEY_B)) { lights[3].enabled = !lights[3].enabled; } + + lights[0].position = playerPos + // Update light values (actually, only enable/disable them) + for (let i = 0; i < 4; i++) updateLightValues(shader, lights[i]); + //---------------------------------------------------------------------------------- + + // Draw + //---------------------------------------------------------------------------------- + beginDrawing(); + + clearBackground(RAYWHITE); + beginMode3D(camera); + + map.iterateData((x,y,e) => { + if(e === 0) drawModel(floor, new Vector3(x*2,0,y*2), 1.0, WHITE) + else drawModel(cube, new Vector3(x*2,1,y*2), 1.0, WHITE) + }) + + // Draw spheres to show where the lights are + for (let i = 0; i < 4; i++) + { + if (lights[i].enabled) drawSphereEx(lights[i].position, 0.2, 8, 8, lights[i].color); + else drawSphereWires(lights[i].position, 0.2, 8, 8, colorAlpha(lights[i].color, 0.3)); + } + + drawGrid(10, 1.0); + + endMode3D(); + + drawTextureEx(map.texture, new Vector2(0,0), 0, MAP_SCALE, WHITE) + + endDrawing(); + //---------------------------------------------------------------------------------- +} + +// De-Initialization +//-------------------------------------------------------------------------------------- +unloadModel(floor); // Unload the model +unloadModel(cube); // Unload the model +unloadShader(shader); // Unload shader +unloadTexture(textureWall); + +closeWindow(); // Close window and OpenGL context +//-------------------------------------------------------------------------------------- + + diff --git a/examples/ts_dungeon/src/promise-extensions.ts b/examples/ts_dungeon/src/promise-extensions.ts new file mode 100644 index 0000000..1ca86fd --- /dev/null +++ b/examples/ts_dungeon/src/promise-extensions.ts @@ -0,0 +1,71 @@ +const promiseUpdateList: PromiseContext[] = [] + +export const dispatchPromises = () => { + for (var i = promiseUpdateList.length - 1; i >= 0; i--) { + const p = promiseUpdateList[i] + p.update() + if (p.isFinished) { + promiseUpdateList.splice(i, 1); + } + } + return promiseUpdateList.length +} + +class PromiseContext { + + private _result: T | null = null; + public get result(): T | null { + return this._result; + } + private _error: any | null = null; + public get error(): any | null { + return this._error; + } + private _isFinished = false; + public get isFinished() { + return this._isFinished; + } + private _isCancellationRequested = false; + public get isCancellationRequested() { + return this._isCancellationRequested; + } + + constructor(private readonly resolveFn: (val: T | PromiseLike) => void, + private readonly rejectFn: (err: any) => void, + private readonly updateFn: (p: PromiseContext) => void){} + + update(){ + if(!this.isFinished){ + this.updateFn(this) + } + } + + resolve(val: T){ + this._result = val + this._isFinished = true + this.resolveFn(val) + } + + reject(reason: any){ + this._error = reason + this._isFinished = true + this.rejectFn(reason) + } + + cancel(){ + this._isCancellationRequested = true + } +} +export interface ExtendedPromise extends Promise { + context: PromiseContext +} + +export const makeUpdateablePromise = (update: (ctx: PromiseContext) => void) => { + let context: PromiseContext + const promise = >new Promise((resolve, reject) => { + context = new PromiseContext(resolve,reject,update) + }); + promise.context = context! + promiseUpdateList.unshift(context!) + return promise +} \ No newline at end of file diff --git a/examples/ts_dungeon/src/timing.ts b/examples/ts_dungeon/src/timing.ts new file mode 100644 index 0000000..37ca480 --- /dev/null +++ b/examples/ts_dungeon/src/timing.ts @@ -0,0 +1,67 @@ +import { makeUpdateablePromise } from "./promise-extensions" + +export type easeFunc = (t: number, a: number, b: number, d: number) => number + +export const interpolate = (a: number, b: number, d: number, setter: (v: number) => void, fn: easeFunc) => { + const start = getTime() + const delta = b - a + return makeUpdateablePromise(ctx => { + const cur = getTime()-start + if(cur < d && !ctx.isCancellationRequested){ + setter(fn(cur, a, delta, d)) + } else { + setter(b) + ctx.resolve() + } + }) +} +export const interpolateVec2 = (a: Vector2, b: Vector2, d: number, setter: (v: Vector2) => void, fn: easeFunc) => { + const start = getTime() + const delta = vector2Subtract(b, a) + return makeUpdateablePromise(ctx => { + const cur = getTime()-start + if(cur < d && !ctx.isCancellationRequested){ + const x = fn(cur, a.x, delta.x, d) + const y = fn(cur, a.y, delta.y, d) + setter(new Vector2(x,y)) + } else { + setter(b) + ctx.resolve() + } + }) +} +export const interpolateVec3 = (a: Vector3, b: Vector3, d: number, setter: (v: Vector3) => void, fn: easeFunc) => { + const start = getTime() + const delta = vector3Subtract(b, a) + return makeUpdateablePromise(ctx => { + const cur = getTime()-start + if(cur < d && !ctx.isCancellationRequested){ + const x = fn(cur, a.x, delta.x, d) + const y = fn(cur, a.y, delta.y, d) + const z = fn(cur, a.z, delta.z, d) + setter(new Vector3(x,y,z)) + } else { + setter(b) + ctx.resolve() + } + }) +} + +export const waitCondition = (predicate: () => boolean) => makeUpdateablePromise(ctx => { + if(predicate() || ctx.isCancellationRequested){ + ctx.resolve() + } +}) +export const waitFirst = (list: T[], predicate: (item: T) => boolean) => makeUpdateablePromise(ctx => { + let idx = list.findIndex(x => predicate(x)) + if(idx !== -1 || ctx.isCancellationRequested) ctx.resolve(idx) +}) + + +export const wait = (time: number) => { + const start = getTime() + return waitCondition(() => (getTime()-start) >= time) +} + +export const waitKeyPressed = (key: number) => waitCondition(() => isKeyPressed(key)) +export const waitClick = (button: number = MOUSE_BUTTON_LEFT) => waitCondition(() => isMouseButtonDown(button)) \ No newline at end of file diff --git a/examples/ts_dungeon/tsconfig.json b/examples/ts_dungeon/tsconfig.json new file mode 100644 index 0000000..9734b59 --- /dev/null +++ b/examples/ts_dungeon/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "target": "es2020", + "module": "commonjs", + "esModuleInterop": true, + "resolveJsonModule": true, + "strict": true, + "lib": ["ES2020"], + "types": [ + "../lib.raylib" + ], + "experimentalDecorators": true + } + } + \ No newline at end of file diff --git a/examples/ts_dungeon/webpack.config.js b/examples/ts_dungeon/webpack.config.js new file mode 100644 index 0000000..08e3d72 --- /dev/null +++ b/examples/ts_dungeon/webpack.config.js @@ -0,0 +1,26 @@ +const path = require('path'); + +module.exports = { + entry: { + main: './src/index.ts' + }, + devtool: false, + target: "node", + mode: 'production', + module: { + rules: [ + { + test: /\.tsx?$/, + use: 'ts-loader', + exclude: /node_modules/, + }, + ], + }, + resolve: { + extensions: ['.tsx', '.ts', '.js'], + }, + output: { + filename: '[name].js', + path: path.resolve(__dirname, '.'), + }, +}; diff --git a/examples/ts_game/src/timing.ts b/examples/ts_game/src/timing.ts index ee917fd..91c31ef 100644 --- a/examples/ts_game/src/timing.ts +++ b/examples/ts_game/src/timing.ts @@ -31,6 +31,22 @@ export const interpolateVec2 = (a: Vector2, b: Vector2, d: number, setter: (v: V } }) } +export const interpolateVec3 = (a: Vector3, b: Vector3, d: number, setter: (v: Vector3) => void, fn: easeFunc) => { + const start = getTime() + const delta = vector3Subtract(b, a) + return makeUpdateablePromise(ctx => { + const cur = getTime()-start + if(cur < d && !ctx.isCancellationRequested){ + const x = fn(cur, a.x, delta.x, d) + const y = fn(cur, a.y, delta.y, d) + const z = fn(cur, a.z, delta.z, d) + setter(new Vector3(x,y,z)) + } else { + setter(b) + ctx.resolve() + } + }) +} export const waitCondition = (predicate: () => boolean) => makeUpdateablePromise(ctx => { if(predicate() || ctx.isCancellationRequested){ diff --git a/generate-bindings.js b/generate-bindings.js index 805c7dc..d741079 100644 --- a/generate-bindings.js +++ b/generate-bindings.js @@ -727,7 +727,7 @@ class RayLibHeader extends quickjs_1.QuickJsHeader { } addEnum(renum) { console.log("Binding enum " + renum.name); - renum.values.forEach(x => this.exportGlobalConstant(x.name, x.description)); + renum.values.forEach(x => this.exportGlobalInt(x.name, x.description)); } addApiStruct(struct) { const options = struct.binding || {}; @@ -775,11 +775,16 @@ class RayLibHeader extends quickjs_1.QuickJsHeader { this.moduleEntry.call("JS_AddModuleExport", ["ctx", "m", `"${exportName}"`]); this.typings.constants.tsDeclareConstant(exportName, structName, description); } - exportGlobalConstant(name, description) { + exportGlobalInt(name, description) { this.moduleInit.statement(`JS_SetModuleExport(ctx, m, "${name}", JS_NewInt32(ctx, ${name}))`); this.moduleEntry.statement(`JS_AddModuleExport(ctx, m, "${name}")`); this.typings.constants.tsDeclareConstant(name, "number", description); } + exportGlobalDouble(name, description) { + this.moduleInit.statement(`JS_SetModuleExport(ctx, m, "${name}", JS_NewFloat64(ctx, ${name}))`); + this.moduleEntry.statement(`JS_AddModuleExport(ctx, m, "${name}")`); + this.typings.constants.tsDeclareConstant(name, "number", description); + } } exports.RayLibHeader = RayLibHeader; @@ -1017,6 +1022,12 @@ function main() { returnType: "void", params: [{ type: "Shader *", name: "shader" }, { type: "int", name: "shaderConstant" }, { type: "int", name: "location" }] }); + api.functions.push({ + name: "ImageReadPixel", + description: "Read a single pixel from an image", + returnType: "Color", + params: [{ type: "Image *", name: "image" }, { type: "int", name: "x" }, { type: "int", name: "y" }] + }); // Define a new header const core = new raylib_header_1.RayLibHeader("raylib_core"); core.includes.include("raymath.h"); @@ -1454,8 +1465,8 @@ function main() { ignore("Vector3ToFloatV"); ignore("MatrixToFloatV"); ignore("QuaternionToAxisAngle"); - core.exportGlobalConstant("DEG2RAD", "(PI/180.0)"); - core.exportGlobalConstant("RAD2DEG", "(180.0/PI)"); + core.exportGlobalDouble("DEG2RAD", "(PI/180.0)"); + core.exportGlobalDouble("RAD2DEG", "(180.0/PI)"); const setOutParam = (fun, index) => { const param = fun.params[index]; param.binding = { @@ -1534,8 +1545,8 @@ function main() { core.exportGlobalStruct("Color", x.name, x.values, x.description); }); api.enums.forEach(x => core.addEnum(x)); - core.exportGlobalConstant("MATERIAL_MAP_DIFFUSE", "Albedo material (same as: MATERIAL_MAP_DIFFUSE"); - core.exportGlobalConstant("MATERIAL_MAP_SPECULAR", "Metalness material (same as: MATERIAL_MAP_SPECULAR)"); + core.exportGlobalInt("MATERIAL_MAP_DIFFUSE", "Albedo material (same as: MATERIAL_MAP_DIFFUSE"); + core.exportGlobalInt("MATERIAL_MAP_SPECULAR", "Metalness material (same as: MATERIAL_MAP_SPECULAR)"); core.writeTo("src/bindings/js_raylib_core.h"); core.typings.writeTo("examples/lib.raylib.d.ts"); const ignored = api.functions.filter(x => x.binding?.ignore).length; diff --git a/src/bindings/js_raylib_core.h b/src/bindings/js_raylib_core.h index 3c9a758..2b414ac 100644 --- a/src/bindings/js_raylib_core.h +++ b/src/bindings/js_raylib_core.h @@ -10080,6 +10080,21 @@ static JSValue js_setShaderLocation(JSContext * ctx, JSValueConst this_val, int return JS_UNDEFINED; } +static JSValue js_imageReadPixel(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + Image* image = (Image*)JS_GetOpaque2(ctx, argv[0], js_Image_class_id); + if(image == NULL) return JS_EXCEPTION; + int x; + JS_ToInt32(ctx, &x, argv[1]); + int y; + JS_ToInt32(ctx, &y, argv[2]); + Color returnVal = ImageReadPixel(image, x, y); + Color* ret_ptr = (Color*)js_malloc(ctx, sizeof(Color)); + *ret_ptr = returnVal; + JSValue ret = JS_NewObjectClass(ctx, js_Color_class_id); + JS_SetOpaque(ret, ret_ptr); + return ret; +} + static const JSCFunctionListEntry js_raylib_core_funcs[] = { JS_CFUNC_DEF("initWindow",3,js_initWindow), JS_CFUNC_DEF("windowShouldClose",0,js_windowShouldClose), @@ -10698,12 +10713,13 @@ static const JSCFunctionListEntry js_raylib_core_funcs[] = { JS_CFUNC_DEF("easeElasticIn",4,js_easeElasticIn), JS_CFUNC_DEF("setModelMaterial",3,js_setModelMaterial), JS_CFUNC_DEF("setShaderLocation",3,js_setShaderLocation), + JS_CFUNC_DEF("imageReadPixel",3,js_imageReadPixel), }; static int js_raylib_core_init(JSContext * ctx, JSModuleDef * m) { JS_SetModuleExportList(ctx, m,js_raylib_core_funcs,countof(js_raylib_core_funcs)); - JS_SetModuleExport(ctx, m, "DEG2RAD", JS_NewInt32(ctx, DEG2RAD)); - JS_SetModuleExport(ctx, m, "RAD2DEG", JS_NewInt32(ctx, RAD2DEG)); + JS_SetModuleExport(ctx, m, "DEG2RAD", JS_NewFloat64(ctx, DEG2RAD)); + JS_SetModuleExport(ctx, m, "RAD2DEG", JS_NewFloat64(ctx, RAD2DEG)); js_declare_Vector2(ctx, m); JSValue Vector2_constr = JS_NewCFunction2(ctx, js_Vector2_constructor,"Vector2)", 2, JS_CFUNC_constructor_or_func, 0); JS_SetModuleExport(ctx, m, "Vector2", Vector2_constr); diff --git a/src/quickjs.c b/src/quickjs.c index 3f15f7c..825db8e 100644 --- a/src/quickjs.c +++ b/src/quickjs.c @@ -216,6 +216,11 @@ void SetShaderLocation(Shader *shader, int constant, int location){ shader->locs[constant] = location; } +Color ImageReadPixel(Image *image, int x, int y){ + int sizeOfPixel = GetPixelDataSize(image->width, image->height, image->format) / (image->width*image->height); + return GetPixelColor((void *)((unsigned char *)image->data) + (sizeOfPixel*(image->width*y+x)),image->format); +} + #include "bindings/js_raylib_core.h" JSModuleDef *js_module_loader(JSContext *ctx,