diff --git a/build.zig b/build.zig index 85a82af..5c6ee94 100644 --- a/build.zig +++ b/build.zig @@ -141,6 +141,8 @@ pub fn addProgram(self: *BuildSystem, opts: AddProgramOptions) *std.Build.Module b.getInstallStep().dependOn(self.nw_builder.getInstallStep()); + run_exe.dependOn(b.getInstallStep()); + return mod; } diff --git a/engine/core/src/core.zig b/engine/core/src/core.zig index 73ef94b..a501e80 100644 --- a/engine/core/src/core.zig +++ b/engine/core/src/core.zig @@ -213,6 +213,7 @@ pub fn setupFromModule(__args: ModuleLoaderArgs) !void { // walk through and patch all ecs containers ecs.patchComponentList(ComponentList); + debug_draw.gDebugDrawInterface = __args.debugDrawInterface; if (getEngineObject(SceneSystem)) |system| { scene.Scene.SceneObjectContainer = system.sceneObjectContainer; diff --git a/engine/core/src/debug_draw.zig b/engine/core/src/debug_draw.zig index 0155f17..24bd972 100644 --- a/engine/core/src/debug_draw.zig +++ b/engine/core/src/debug_draw.zig @@ -7,13 +7,13 @@ pub const DebugDrawParams = struct { rotation: core.Quat = .{ 0, 0, 0, 1 }, }; -const DebugDrawInterface = struct { +pub const DebugDrawInterface = struct { debugSphereFn: *const fn (pos: core.Vectorf, radius: f32, DebugDrawParams) void, debugBoxFn: *const fn (pos: core.Vectorf, extents: core.Vectorf, DebugDrawParams) void, debugLineFn: *const fn (start: core.Vectorf, end: core.Vectorf, DebugDrawParams) void, }; -var gDebugDrawInterface: ?*DebugDrawInterface = null; +pub var gDebugDrawInterface: ?*DebugDrawInterface = null; var gDebugDrawAllocator: ?std.mem.Allocator = null; pub fn debugSphereTransform(t: core.Mat, radius: f32, params: DebugDrawParams) void { diff --git a/engine/core/src/extern/externModule.zig b/engine/core/src/extern/externModule.zig index 66099cd..e23e776 100644 --- a/engine/core/src/extern/externModule.zig +++ b/engine/core/src/extern/externModule.zig @@ -13,6 +13,7 @@ pub const ModuleLoaderArgs = extern struct { packerFS: *core.PackerFS, luaState: *anyopaque, luaAllocator: *anyopaque, + debugDrawInterface: *debug.DebugDrawInterface, }; pub const LoadedModule = struct { @@ -180,6 +181,7 @@ pub const ModuleLoader = struct { .packerFS = core.fs(), .luaState = @ptrCast(core.script.gLuaState.l), .luaAllocator = &core.script.gLuaAllocator, + .debugDrawInterface = debug.gDebugDrawInterface.?, }; if (interface.startup(&a, &args)) { core.engine_log("[ModuleLoader] module startup done", .{}); @@ -201,3 +203,4 @@ pub const ModuleLoader = struct { const std = @import("std"); const core = @import("../core.zig"); const p2 = @import("p2"); +const debug = @import("../debug_draw.zig"); diff --git a/engine/core/src/math.zig b/engine/core/src/math.zig index 0df548a..e9770f2 100644 --- a/engine/core/src/math.zig +++ b/engine/core/src/math.zig @@ -9,7 +9,7 @@ const lua = @import("lua"); const pod = lua.pod; // LUA END -pub const Rayf = RayType(f32); +pub const Rayf = RayType(Vectorf); pub fn matToScalef(mat: anytype) Vectorf { const x = Vectorf.new(mat[0][0], mat[0][1], mat[0][2]).length(); @@ -21,8 +21,8 @@ pub fn matToScalef(mat: anytype) Vectorf { pub fn RayType(comptime T: type) type { return struct { - start: Vector3Type(T), - dir: Vector3Type(T), + start: T, + dir: T, }; } diff --git a/engine/imgui/src/utils/TopBar.zig b/engine/imgui/src/utils/TopBar.zig index 983f998..9127851 100644 --- a/engine/imgui/src/utils/TopBar.zig +++ b/engine/imgui/src/utils/TopBar.zig @@ -66,6 +66,23 @@ pub fn tick(self: *@This(), dt: f64) void { } ig.endMenu(); } + + if (ig.beginMenu("Operations", true)) { + if (ig.menuItem_Bool("Recompile", null, false, true)) { + core.engine_log("recompiling in DEBUG mode", .{}); + + var success = true; + _ = core.shell.runCmd(self.allocator, &.{ "zig", "build", "install" }, ".") catch { + core.graphics_logs("compile failed!"); + success = false; + }; + + if (success) + core.graphics_logs("compile completed"); + } + ig.endMenu(); + } + ig.endMainMenuBar(); for (self.windowsMenu.items) |entry| { diff --git a/engine/physics/src/physics.zig b/engine/physics/src/physics.zig index 2f0456d..a939858 100644 --- a/engine/physics/src/physics.zig +++ b/engine/physics/src/physics.zig @@ -117,6 +117,7 @@ pub const RayCastSettings = struct { pub const RayCastResult = struct { body: BodyId, point: core.Vectorf, + normal: ?core.Vectorf = null, // how to get this? entity: ?core.Entity = null, }; diff --git a/engine/physics/src/physicsCollider.zig b/engine/physics/src/physicsCollider.zig index 6db4a03..84d7ec7 100644 --- a/engine/physics/src/physicsCollider.zig +++ b/engine/physics/src/physicsCollider.zig @@ -24,7 +24,7 @@ pub const PhysicsCollider = struct { pub fn setupByShapeName(self: *@This(), shapeName: core.Name, bodySettings: zphysics.BodyCreationSettings) !void { var n = shapeName; - const system = physics.gPhysicsRuntime; + const system = physics.context(); const interface = system.system.getBodyInterfaceMut(); const shape = system.shapes.get(n.handle()).?; var settings = bodySettings; @@ -53,10 +53,18 @@ pub const PhysicsCollider = struct { physics.setRotation(self.bodyId, scene.getRotation()); } + pub fn deinitECS(self: *@This(), handle: core.SetHandle) void { + _ = handle; + core.engine_log("destroy body id {any}", .{self.bodyId.?}); + physics.context().pushDestroyBodyId(self.bodyId.?); + } + pub fn deinit(self: *@This()) void { + _ = self; // todo. // try system.bodyIdToEntityMap.remove(self.bodyId); - _ = self; + // system.destroy entity + //try physics.context().idToEntity.remove(self.bodyId.?); } pub var BaseContainer: *core.SparseMap(PhysicsCollider) = undefined; diff --git a/engine/physics/src/physicsSystem.zig b/engine/physics/src/physicsSystem.zig index 41f54b5..4282b0d 100644 --- a/engine/physics/src/physicsSystem.zig +++ b/engine/physics/src/physicsSystem.zig @@ -144,6 +144,8 @@ pub const PhysicsRuntime = struct { timeSinceUpdate: f64 = 0.0, idToEntity: std.AutoHashMapUnmanaged(zphysics.BodyId, core.Entity) = .{}, + bodyIdsToDestroy: std.ArrayListUnmanaged(BodyId) = .{}, + pub var NeonObjectTable: core.EngineObjectVTable = core.EngineObjectVTable.from(@This(), "physics.Runtime"); pub fn registerBodyEntity(self: *@This(), bodyId: zphysics.BodyId, entity: core.Entity) !void { @@ -193,6 +195,12 @@ pub const PhysicsRuntime = struct { fn updateScenes(self: *@This(), dt: f64) void { const lockInterface = self.system.getBodyLockInterface(); + const interface = self.system.getBodyInterfaceMut(); + + for (self.bodyIdsToDestroy.items) |toDestroy| { + interface.removeAndDestroyBody(toDestroy); + } + self.bodyIdsToDestroy.clearRetainingCapacity(); // update character controllers @@ -220,6 +228,10 @@ pub const PhysicsRuntime = struct { } } + pub fn pushDestroyBodyId(self: *@This(), bodyId: BodyId) void { + self.bodyIdsToDestroy.append(self.allocator, bodyId) catch unreachable; + } + pub fn deinit(self: *@This()) void { const allocator = self.allocator; diff --git a/engine/platform/src/platform.zig b/engine/platform/src/platform.zig index 6506288..ab98fde 100644 --- a/engine/platform/src/platform.zig +++ b/engine/platform/src/platform.zig @@ -42,6 +42,10 @@ pub fn setImguiVisible(visible: bool) void { gPlatformInstance.imguiVisible = visible; } +pub fn getMouseVisible() bool { + gPlatformInstance.isCursorEnabled(); +} + pub fn start_module(spec: *core.SpecVariantMap, args: anytype, allocator: std.mem.Allocator) !void { _ = args; _ = spec; diff --git a/engine/platform/src/windowing.zig b/engine/platform/src/windowing.zig index 57b68e6..22f13ae 100644 --- a/engine/platform/src/windowing.zig +++ b/engine/platform/src/windowing.zig @@ -137,6 +137,8 @@ pub const PlatformInstance = struct { _ = sdl3.c.SDL_SetWindowRelativeMouseMode(self.window, relativeMode); _ = sdl3.c.SDL_SetWindowMouseRect(self.window, null); + self.cursorEnabled = !relativeMode; + self.enableImguiEvents = !relativeMode; } @@ -213,16 +215,12 @@ pub const PlatformInstance = struct { return self.cursorPos; } - pub fn setCursorEnabled(self: *@This(), cursorEnabled: bool) void { - self.newCursorEnabled = cursorEnabled; - } - pub fn isCursorEnabled(self: @This()) bool { return self.cursorEnabled; } pub fn setCursorVisible(self: @This(), visible: bool) void { - _ = self; + self.cursorEnabled = visible; if (visible) { sdl3.showCursor(); } else { diff --git a/engine/rend/src/camera/CameraComponent.zig b/engine/rend/src/camera/CameraComponent.zig index 3358551..0cef385 100644 --- a/engine/rend/src/camera/CameraComponent.zig +++ b/engine/rend/src/camera/CameraComponent.zig @@ -27,6 +27,8 @@ finalPos: core.Vectorf = .{}, final: Mat = zm.identity(), finalAlt: Mat = zm.identity(), noTranslate: Mat = zm.identity(), +worldRotation: Mat = zm.identity(), +rotation: core.Rotation = .{}, entity: core.Entity = undefined, @@ -46,6 +48,54 @@ pub fn updateProjections(self: *@This()) void { self.projectionAlt[1][1] *= -1; } +pub fn getNormalRayFromScreen( + camera: @This(), + screenPos: core.Vector2f, +) core.Rayf { + + // this is completely wrong right now. + var ray = core.Rayf{ + .start = core.Vectorf.new(0, 0, 0), + .dir = core.Vectorf.new(0, 0, 0), + }; + + const s = core.Vector2f{ + .x = @as(f32, @floatCast(platform.context().extent.x - screenPos.x)), + .y = @as(f32, @floatCast(screenPos.y)), + }; + + if (platform.context().extent.x == 0 or platform.context().extent.y == 0) { + return ray; + } + + const i = core.zm.inverse(camera.projection); + // const iview = core.zm.inverse(camera.transform); + const width = platform.context().extent.x; + const height = platform.context().extent.y; + + const sx = core.clamp(s.x, 0, width); + const sy = core.clamp(s.y, 0, height); + + const vec = core.Vectorf{ + .x = ((2.0 / width) * sx) - 1.0, + .y = ((2.0 / height) * sy) - 1.0, + .z = 1.0, + }; + + var eye = core.Vectorf.fromZm(core.zm.mul(i, vec.toZm())); + eye.z = -1; + const iworld = core.zm.mul(camera.worldTransform, eye.toZm()); + // const iworld = core.zm.mul(core.zm.inverse(camera.noTranslate), eye.toZm()); + // iworld = core.zm.normalize4(iworld); + + // iworld = core.zm.mul(, iworld); + + ray.dir = core.Vectorf.fromZm(iworld).normalize().fmul(-1.0); + ray.start = camera.finalPos; + + return ray; +} + pub fn resolve(self: *@This()) void { const scene = self.entity.fetch(core.Scene).?; @@ -77,7 +127,12 @@ pub fn resolve(self: *@This()) void { posRot.rotation.quat[1] *= -1; self.worldTransform = mul(posRot.toTransform(), base); + + posRot.position = .{}; + + self.worldRotation = mul(posRot.toTransform(), base); } + self.rotation = rotation; // calculate viewProjections { @@ -120,6 +175,7 @@ pub const ScriptExports: []const []const u8 = &.{}; pub const EcsComponentDefinition = ecs.DefineComponent(@This(), .set); const core = @import("core"); +const platform = @import("platform"); const ecs = core.ecs; const zm = core.zm; const mul = zm.mul; diff --git a/engine/rend/src/sgpu/TextureList.zig b/engine/rend/src/sgpu/TextureList.zig index 0f29ad7..e4b43c4 100644 --- a/engine/rend/src/sgpu/TextureList.zig +++ b/engine/rend/src/sgpu/TextureList.zig @@ -162,20 +162,34 @@ pub fn uploadCubeFromPaths(self: *@This(), name: core.Name, paths: []const []con return tex; } +inline fn isPowerOfTwo(n: anytype) bool { + return n != 0 and (n & (n - 1)) == 0; +} + +pub fn getMiplevelFromSize(size: core.Vector2u) u32 { + if (size.x != size.y) + return 1; + if (!isPowerOfTwo(size.x)) + return 1; + return std.math.log2(@as(u32, @intCast(@max(size.x, size.y)))) + 1; +} + pub fn uploadTextureFromPath(self: *@This(), name: core.Name, path: []const u8) !*Texture { var png = try core.png.PngContents.initFromFS(core.fs(), self.allocator, path); defer png.deinit(); const cmd = self.device.acquireGPUCommandBuffer(); + const mipLevelCount = getMiplevelFromSize(png.size); + core.engine_log("creating mipmap level {d}", .{mipLevelCount}); const gpuTexture = self.device.createGPUTexture(&std.mem.zeroInit(gpu.GPUTextureCreateInfo, .{ .type = .texturetype2d, .format = .textureformatR8g8b8a8UnormSrgb, - .usage = .{ .textureusageSampler = true }, + .usage = .{ .textureusageSampler = true, .textureusageColorTarget = true }, .width = png.size.x, .height = png.size.y, .layer_count_or_depth = 1, - .num_levels = 1, + .num_levels = mipLevelCount, })); const transferBuffer = self.device.createGPUTransferBuffer(&.{ @@ -212,6 +226,10 @@ pub fn uploadTextureFromPath(self: *@This(), name: core.Name, path: []const u8) ); copyPass.endGPUCopyPass(); + + if (mipLevelCount > 1) + cmd.generateMipmapsForGPUTexture(gpuTexture); + if (!cmd.submitGPUCommandBuffer()) { return error.CopyFailed; } diff --git a/engine/rend/src/sgpu/renderer.zig b/engine/rend/src/sgpu/renderer.zig index f030977..37db816 100644 --- a/engine/rend/src/sgpu/renderer.zig +++ b/engine/rend/src/sgpu/renderer.zig @@ -269,15 +269,20 @@ pub const Renderer = struct { .min_filter = .filterLinear, .mag_filter = .filterLinear, .mipmap_mode = .samplermipmapmodeNearest, + .compare_op = .compareopNever, // .address_mode_u = .sampleraddressmodeMirroredRepeat, // .address_mode_v = .sampleraddressmodeMirroredRepeat, // .address_mode_w = .sampleraddressmodeMirroredRepeat, // .address_mode_u = .sampleraddressmodeRepeat, // .address_mode_v = .sampleraddressmodeRepeat, // .address_mode_w = .sampleraddressmodeRepeat, - .address_mode_u = .sampleraddressmodeClampToEdge, - .address_mode_v = .sampleraddressmodeClampToEdge, - .address_mode_w = .sampleraddressmodeClampToEdge, + // + .mip_lod_bias = -1.0, + .min_lod = 0, // Clamps the minimum of the computed LOD value. + .max_lod = 10, // Clamps the maximum of the computed LOD value. + .address_mode_u = .sampleraddressmodeRepeat, + .address_mode_v = .sampleraddressmodeRepeat, + .address_mode_w = .sampleraddressmodeRepeat, })); } @@ -814,7 +819,8 @@ pub const Renderer = struct { } if (component.mesh) |mesh| { - renderpass.bindGPUFragmentSamplers(0, &.{ .texture = t.?.texture, .sampler = self.blockySampler }, 1); + // TODO put the sampler onto the texture itself + renderpass.bindGPUFragmentSamplers(0, &.{ .texture = t.?.texture, .sampler = self.linearSampler }, 1); if (component.cmrf) |cmrf| { cmrf(component.cmrf_ctx); diff --git a/extras/bsp/src/maploader.zig b/extras/bsp/src/maploader.zig index fdb533a..34e5ed6 100644 --- a/extras/bsp/src/maploader.zig +++ b/extras/bsp/src/maploader.zig @@ -127,9 +127,8 @@ pub const TBMap = struct { self.colliders.deinit(self.allocator); for (self.colliderSpecs.items) |spec| { - _ = spec; - // var name = spec.name; - // physics.gPhysicsRuntime.shapes.get(name.handle()).?.shape.release(); + var name = spec.name; + physics.context().shapes.get(name.handle()).?.shape.release(); } self.colliderSpecs.deinit(self.allocator); @@ -196,7 +195,6 @@ pub const MeshBuilder = struct { if (normal.dot(.{ .y = 1.0 }) < 0.5) { // return; } - core.engine_log("{any}", .{normal}); // append all vertices to the vertex list for (face.vertices) |vert| { @@ -294,9 +292,9 @@ pub fn LoadTrenchbroomMap(baseAllocator: std.mem.Allocator, settings: Settings) } // - //for (map.worldspawn.solids.items) |solid| { - //try tbMap.addPhysicsShape(solid, settings); - // } + for (map.worldspawn.solids.items) |solid| { + try tbMap.addPhysicsShape(solid, settings); + } // loop over all point entities look for info_player_start return tbMap; diff --git a/extras/gameExtras/src/PhysicsObjectList.zig b/extras/gameExtras/src/PhysicsObjectList.zig new file mode 100644 index 0000000..5a7d6f8 --- /dev/null +++ b/extras/gameExtras/src/PhysicsObjectList.zig @@ -0,0 +1,51 @@ +allocator: std.mem.Allocator, + +lastUpdateFrame: u64 = 0, +arena: std.heap.ArenaAllocator, +bodyIds: std.ArrayList(physics.BodyId), + +pub fn create(allocator: std.mem.Allocator) !*@This() { + const self = try allocator.create(@This()); + + self.* = .{ + .allocator = allocator, + .arena = std.heap.ArenaAllocator.init(allocator), + .bodyIds = std.ArrayList(physics.BodyId).init(allocator), + }; + + if (core.getEngineObject(igutils.TopBar)) |topbar| { + topbar.addMenuObject(self, "Physis Objects") catch {}; + } + + return self; +} + +pub fn windowOpen(entry: *igutils.MenuEntry, dt: f64) void { + _ = dt; + const self: *@This() = @ptrCast(@alignCast(entry.ctx)); + self.bodyIds.clearRetainingCapacity(); + + physics.context().system.getBodyIds(&self.bodyIds) catch return; + + if (ig.begin("Physics Objects", &entry.open, .{})) { + ig.textf("total Physics Objects count: {d}", .{self.bodyIds.items.len}); + for (self.bodyIds.items) |bodyId| { + ig.textf("body Id: {any}", .{bodyId}); + } + } + ig.end(); +} + +pub fn destroy(self: *@This()) void { + self.arena.deinit(); + self.bodyIds.deinit(); + self.allocator.destroy(self); +} + +const std = @import("std"); +const backlog = @import("Backlog"); +const core = backlog.core; +const rend = backlog.rend; +const ig = backlog.imgui.api; +const igutils = backlog.imgui.utils; +const physics = backlog.physics; diff --git a/extras/gameExtras/src/gameExtras.zig b/extras/gameExtras/src/gameExtras.zig index 14ec68b..f3a803d 100644 --- a/extras/gameExtras/src/gameExtras.zig +++ b/extras/gameExtras/src/gameExtras.zig @@ -3,3 +3,5 @@ pub const inputDebugger = @import("inputDebugger.zig"); pub const ObjectSpawner = @import("objectSpawner.zig"); pub const RendererDebug = @import("RendererDebug.zig"); pub const EngineTool = @import("EngineTool.zig"); + +pub const PhysicsObjectList = @import("PhysicsObjectList.zig"); diff --git a/lib/p2/src/structures/sparse-set.zig b/lib/p2/src/structures/sparse-set.zig index 77ba79e..0fba59e 100644 --- a/lib/p2/src/structures/sparse-set.zig +++ b/lib/p2/src/structures/sparse-set.zig @@ -627,9 +627,13 @@ pub fn SparseMap(comptime T: type) type { _ = self.map.remove(handle); _ = self.listEntriesByHandle.remove(handle); - _ = self.list.swapRemove(index); + _ = self.list.swapRemove(index); // oops. + const swappedHandle = self.handles.getLastOrNull(); _ = self.handles.swapRemove(index); + if (swappedHandle) |swapped| + self.listEntriesByHandle.put(alloc, swapped, index) catch unreachable; + self.opCount +%= 1; if (self.containerListener) |l| { diff --git a/lib/p2/src/utils/shell.zig b/lib/p2/src/utils/shell.zig index c4cc1cc..96fcbd5 100644 --- a/lib/p2/src/utils/shell.zig +++ b/lib/p2/src/utils/shell.zig @@ -87,6 +87,7 @@ pub const ShellProcess = struct { } }; +// TODO this is really bad pub fn runCmd(allocator: std.mem.Allocator, cmd: []const []const u8, cwd: []const u8) ![]u8 { var proc: ChildProcess = ChildProcess.init(cmd, allocator); proc.cwd = cwd; diff --git a/lib/zphysics/libs/JoltC/JoltPhysicsC_Extensions.cpp b/lib/zphysics/libs/JoltC/JoltPhysicsC_Extensions.cpp index 2fd30c0..5fc755c 100644 --- a/lib/zphysics/libs/JoltC/JoltPhysicsC_Extensions.cpp +++ b/lib/zphysics/libs/JoltC/JoltPhysicsC_Extensions.cpp @@ -1,4 +1,5 @@ //-------------------------------------------------------------------------------------------------- +#define __JPC_API_IMPL 1 #include "JoltPhysicsC.h" #include @@ -48,6 +49,7 @@ JPC_PhysicsSystem_GetBodyIDs(const JPC_PhysicsSystem *in_physics_system, uint32_t *out_num_body_ids, JPC_BodyID *out_body_ids) { + int i = 32; assert(in_physics_system != nullptr && out_body_ids != nullptr); assert(in_max_body_ids > 0); diff --git a/projects/build.zig b/projects/build.zig index 6ede83e..0258f94 100644 --- a/projects/build.zig +++ b/projects/build.zig @@ -22,6 +22,7 @@ pub fn build(b: *std.Build) void { blbuild.addExtraModule(sampleGame, "doomplayer"); blbuild.addExtraModule(sampleGame, "bsp"); + // external reload modules const sampleGameExtern = b.addSharedLibrary(.{ .root_source_file = b.path("sampleGame/externGame/externGame.zig"), .link_libc = true, diff --git a/projects/content/bsp/testmap.map b/projects/content/bsp/testmap.map index 516f82f..76a64e6 100644 --- a/projects/content/bsp/testmap.map +++ b/projects/content/bsp/testmap.map @@ -365,21 +365,21 @@ } // brush 40 { -( -1184 -408 240 ) ( -1184 -280 248 ) ( -1184 -408 248 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 -( -1368 -408 192 ) ( -1368 -408 193 ) ( -1367 -408 192 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -1368 -408 192 ) ( -1367 -408 192 ) ( -1368 -407 192 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -920 -400 304 ) ( -920 -399 304 ) ( -919 -400 304 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -920 -400 200 ) ( -919 -400 200 ) ( -920 -400 201 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -920 -400 200 ) ( -920 -400 201 ) ( -920 -399 200 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 +( -1184 -408 240 ) ( -1184 -280 248 ) ( -1184 -408 248 ) mapping_defaults/ProtoOrange 16 -128 0 1 1 +( -1368 -408 192 ) ( -1368 -408 193 ) ( -1367 -408 192 ) mapping_defaults/ProtoOrange 64 -128 0 1 1 +( -1368 -408 192 ) ( -1367 -408 192 ) ( -1368 -407 192 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -920 -400 304 ) ( -920 -399 304 ) ( -919 -400 304 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -920 -400 200 ) ( -919 -400 200 ) ( -920 -400 201 ) mapping_defaults/ProtoOrange 64 -128 0 1 1 +( -920 -400 200 ) ( -920 -400 201 ) ( -920 -399 200 ) mapping_defaults/ProtoOrange 16 -128 0 1 1 } // brush 41 { -( -928 -616 192 ) ( -928 -615 192 ) ( -928 -616 193 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 -( -928 -624 192 ) ( -928 -624 193 ) ( -927 -624 192 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -928 -616 192 ) ( -927 -616 192 ) ( -928 -615 192 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -920 -408 448 ) ( -920 -407 448 ) ( -919 -408 448 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -920 -400 200 ) ( -919 -400 200 ) ( -920 -400 201 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -920 -408 200 ) ( -920 -408 201 ) ( -920 -407 200 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 +( -928 -616 192 ) ( -928 -615 192 ) ( -928 -616 193 ) mapping_defaults/ProtoOrange 16 -128 0 1 1 +( -928 -624 192 ) ( -928 -624 193 ) ( -927 -624 192 ) mapping_defaults/ProtoOrange 64 -128 0 1 1 +( -928 -616 192 ) ( -927 -616 192 ) ( -928 -615 192 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -920 -408 448 ) ( -920 -407 448 ) ( -919 -408 448 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -920 -400 200 ) ( -919 -400 200 ) ( -920 -400 201 ) mapping_defaults/ProtoOrange 64 -128 0 1 1 +( -920 -408 200 ) ( -920 -408 201 ) ( -920 -407 200 ) mapping_defaults/ProtoOrange 16 -128 0 1 1 } // brush 42 { @@ -392,183 +392,183 @@ } // brush 43 { -( -1248 -512 400 ) ( -1248 -511 400 ) ( -1248 -512 401 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 -( -1240 -512 400 ) ( -1240 -512 401 ) ( -1239 -512 400 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -1240 -512 400 ) ( -1239 -512 400 ) ( -1240 -511 400 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -928 -432 448 ) ( -928 -431 448 ) ( -927 -432 448 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -928 -404 408 ) ( -927 -404 408 ) ( -928 -404 409 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -928 -432 408 ) ( -928 -432 409 ) ( -928 -431 408 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 +( -1248 -512 400 ) ( -1248 -511 400 ) ( -1248 -512 401 ) mapping_defaults/ProtoOrange 16 -128 0 1 1 +( -1240 -512 400 ) ( -1240 -512 401 ) ( -1239 -512 400 ) mapping_defaults/ProtoOrange 64 -128 0 1 1 +( -1240 -512 400 ) ( -1239 -512 400 ) ( -1240 -511 400 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -928 -432 448 ) ( -928 -431 448 ) ( -927 -432 448 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -928 -404 408 ) ( -927 -404 408 ) ( -928 -404 409 ) mapping_defaults/ProtoOrange 64 -128 0 1 1 +( -928 -432 408 ) ( -928 -432 409 ) ( -928 -431 408 ) mapping_defaults/ProtoOrange 16 -128 0 1 1 } // brush 44 { -( -1256 -464 192 ) ( -1256 -463 192 ) ( -1256 -464 193 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 -( -1256 -824 192 ) ( -1256 -824 193 ) ( -1255 -824 192 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -1248 -608 424 ) ( -1120 -584 424 ) ( -1248 -584 424 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -1248 -408 448 ) ( -1248 -407 448 ) ( -1247 -408 448 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -1248 -404 200 ) ( -1247 -404 200 ) ( -1248 -404 201 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -1248 -408 200 ) ( -1248 -408 201 ) ( -1248 -407 200 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 +( -1256 -464 192 ) ( -1256 -463 192 ) ( -1256 -464 193 ) mapping_defaults/ProtoOrange 16 -128 0 1 1 +( -1256 -824 192 ) ( -1256 -824 193 ) ( -1255 -824 192 ) mapping_defaults/ProtoOrange 64 -128 0 1 1 +( -1248 -608 424 ) ( -1120 -584 424 ) ( -1248 -584 424 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -1248 -408 448 ) ( -1248 -407 448 ) ( -1247 -408 448 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -1248 -404 200 ) ( -1247 -404 200 ) ( -1248 -404 201 ) mapping_defaults/ProtoOrange 64 -128 0 1 1 +( -1248 -408 200 ) ( -1248 -408 201 ) ( -1248 -407 200 ) mapping_defaults/ProtoOrange 16 -128 0 1 1 } // brush 45 { -( -1256 -464 192 ) ( -1256 -463 192 ) ( -1256 -464 193 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 -( -1248 -568 392 ) ( -1248 -568 408 ) ( -1120 -568 408 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -1248 -608 384 ) ( -1120 -584 384 ) ( -1248 -584 384 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -1248 -608 424 ) ( -1248 -584 424 ) ( -1120 -584 424 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -1248 -404 200 ) ( -1247 -404 200 ) ( -1248 -404 201 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -1248 -408 200 ) ( -1248 -408 201 ) ( -1248 -407 200 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 +( -1256 -464 192 ) ( -1256 -463 192 ) ( -1256 -464 193 ) mapping_defaults/ProtoOrange 16 -128 0 1 1 +( -1248 -568 392 ) ( -1248 -568 408 ) ( -1120 -568 408 ) mapping_defaults/ProtoOrange 64 -128 0 1 1 +( -1248 -608 384 ) ( -1120 -584 384 ) ( -1248 -584 384 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -1248 -608 424 ) ( -1248 -584 424 ) ( -1120 -584 424 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -1248 -404 200 ) ( -1247 -404 200 ) ( -1248 -404 201 ) mapping_defaults/ProtoOrange 64 -128 0 1 1 +( -1248 -408 200 ) ( -1248 -408 201 ) ( -1248 -407 200 ) mapping_defaults/ProtoOrange 16 -128 0 1 1 } // brush 46 { -( -1256 -464 192 ) ( -1256 -463 192 ) ( -1256 -464 193 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 -( -1248 -648 392 ) ( -1248 -648 400 ) ( -1120 -648 400 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -1248 -608 384 ) ( -1120 -584 384 ) ( -1248 -584 384 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -1248 -608 424 ) ( -1248 -584 424 ) ( -1120 -584 424 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -1248 -608 392 ) ( -1120 -608 400 ) ( -1248 -608 400 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -1248 -408 200 ) ( -1248 -408 201 ) ( -1248 -407 200 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 +( -1256 -464 192 ) ( -1256 -463 192 ) ( -1256 -464 193 ) mapping_defaults/ProtoOrange 16 -128 0 1 1 +( -1248 -648 392 ) ( -1248 -648 400 ) ( -1120 -648 400 ) mapping_defaults/ProtoOrange 64 -128 0 1 1 +( -1248 -608 384 ) ( -1120 -584 384 ) ( -1248 -584 384 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -1248 -608 424 ) ( -1248 -584 424 ) ( -1120 -584 424 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -1248 -608 392 ) ( -1120 -608 400 ) ( -1248 -608 400 ) mapping_defaults/ProtoOrange 64 -128 0 1 1 +( -1248 -408 200 ) ( -1248 -408 201 ) ( -1248 -407 200 ) mapping_defaults/ProtoOrange 16 -128 0 1 1 } // brush 47 { -( -1256 -464 192 ) ( -1256 -463 192 ) ( -1256 -464 193 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 -( -1248 -736 392 ) ( -1248 -736 400 ) ( -1120 -736 400 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -1248 -608 384 ) ( -1120 -584 384 ) ( -1248 -584 384 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -1248 -608 424 ) ( -1248 -584 424 ) ( -1120 -584 424 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -1248 -688 392 ) ( -1120 -688 408 ) ( -1248 -688 408 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -1248 -408 200 ) ( -1248 -408 201 ) ( -1248 -407 200 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 +( -1256 -464 192 ) ( -1256 -463 192 ) ( -1256 -464 193 ) mapping_defaults/ProtoOrange 16 -128 0 1 1 +( -1248 -736 392 ) ( -1248 -736 400 ) ( -1120 -736 400 ) mapping_defaults/ProtoOrange 64 -128 0 1 1 +( -1248 -608 384 ) ( -1120 -584 384 ) ( -1248 -584 384 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -1248 -608 424 ) ( -1248 -584 424 ) ( -1120 -584 424 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -1248 -688 392 ) ( -1120 -688 408 ) ( -1248 -688 408 ) mapping_defaults/ProtoOrange 64 -128 0 1 1 +( -1248 -408 200 ) ( -1248 -408 201 ) ( -1248 -407 200 ) mapping_defaults/ProtoOrange 16 -128 0 1 1 } // brush 48 { -( -1256 -464 192 ) ( -1256 -463 192 ) ( -1256 -464 193 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 -( -1256 -824 192 ) ( -1256 -824 193 ) ( -1255 -824 192 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -1248 -608 384 ) ( -1120 -584 384 ) ( -1248 -584 384 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -1248 -608 424 ) ( -1248 -584 424 ) ( -1120 -584 424 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -1248 -776 400 ) ( -1120 -776 408 ) ( -1248 -776 408 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -1248 -408 200 ) ( -1248 -408 201 ) ( -1248 -407 200 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 +( -1256 -464 192 ) ( -1256 -463 192 ) ( -1256 -464 193 ) mapping_defaults/ProtoOrange 16 -128 0 1 1 +( -1256 -824 192 ) ( -1256 -824 193 ) ( -1255 -824 192 ) mapping_defaults/ProtoOrange 64 -128 0 1 1 +( -1248 -608 384 ) ( -1120 -584 384 ) ( -1248 -584 384 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -1248 -608 424 ) ( -1248 -584 424 ) ( -1120 -584 424 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -1248 -776 400 ) ( -1120 -776 408 ) ( -1248 -776 408 ) mapping_defaults/ProtoOrange 64 -128 0 1 1 +( -1248 -408 200 ) ( -1248 -408 201 ) ( -1248 -407 200 ) mapping_defaults/ProtoOrange 16 -128 0 1 1 } // brush 49 { -( -1248 -608 440 ) ( -1248 -607 440 ) ( -1248 -608 441 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 -( -1248 -864 440 ) ( -1248 -864 441 ) ( -1247 -864 440 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -1248 -608 440 ) ( -1247 -608 440 ) ( -1248 -607 440 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -928 -512 448 ) ( -928 -511 448 ) ( -927 -512 448 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -928 -512 448 ) ( -927 -512 448 ) ( -928 -512 449 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -1056 -512 448 ) ( -1056 -512 449 ) ( -1056 -511 448 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 +( -1248 -608 440 ) ( -1248 -607 440 ) ( -1248 -608 441 ) mapping_defaults/ProtoOrange 16 -128 0 1 1 +( -1248 -864 440 ) ( -1248 -864 441 ) ( -1247 -864 440 ) mapping_defaults/ProtoOrange 64 -128 0 1 1 +( -1248 -608 440 ) ( -1247 -608 440 ) ( -1248 -607 440 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -928 -512 448 ) ( -928 -511 448 ) ( -927 -512 448 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -928 -512 448 ) ( -927 -512 448 ) ( -928 -512 449 ) mapping_defaults/ProtoOrange 64 -128 0 1 1 +( -1056 -512 448 ) ( -1056 -512 449 ) ( -1056 -511 448 ) mapping_defaults/ProtoOrange 16 -128 0 1 1 } // brush 50 { -( -1256 -464 192 ) ( -1256 -463 192 ) ( -1256 -464 193 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 -( -1256 -824 192 ) ( -1256 -824 193 ) ( -1255 -824 192 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -1248 -800 288 ) ( -1120 -736 288 ) ( -1248 -736 288 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -1248 -608 384 ) ( -1248 -584 384 ) ( -1120 -584 384 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -1248 -404 200 ) ( -1247 -404 200 ) ( -1248 -404 201 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -1248 -408 200 ) ( -1248 -408 201 ) ( -1248 -407 200 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 +( -1256 -464 192 ) ( -1256 -463 192 ) ( -1256 -464 193 ) mapping_defaults/ProtoOrange 16 -128 0 1 1 +( -1256 -824 192 ) ( -1256 -824 193 ) ( -1255 -824 192 ) mapping_defaults/ProtoOrange 64 -128 0 1 1 +( -1248 -800 288 ) ( -1120 -736 288 ) ( -1248 -736 288 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -1248 -608 384 ) ( -1248 -584 384 ) ( -1120 -584 384 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -1248 -404 200 ) ( -1247 -404 200 ) ( -1248 -404 201 ) mapping_defaults/ProtoOrange 64 -128 0 1 1 +( -1248 -408 200 ) ( -1248 -408 201 ) ( -1248 -407 200 ) mapping_defaults/ProtoOrange 16 -128 0 1 1 } // brush 51 { -( -1256 -464 192 ) ( -1256 -463 192 ) ( -1256 -464 193 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 -( -1256 -824 192 ) ( -1256 -824 193 ) ( -1255 -824 192 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -1256 -464 192 ) ( -1255 -464 192 ) ( -1256 -463 192 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -1248 -800 288 ) ( -1248 -736 288 ) ( -1120 -736 288 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -1248 -792 208 ) ( -1120 -792 216 ) ( -1248 -792 216 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -1248 -408 200 ) ( -1248 -408 201 ) ( -1248 -407 200 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 +( -1256 -464 192 ) ( -1256 -463 192 ) ( -1256 -464 193 ) mapping_defaults/ProtoOrange 16 -128 0 1 1 +( -1256 -824 192 ) ( -1256 -824 193 ) ( -1255 -824 192 ) mapping_defaults/ProtoOrange 64 -128 0 1 1 +( -1256 -464 192 ) ( -1255 -464 192 ) ( -1256 -463 192 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -1248 -800 288 ) ( -1248 -736 288 ) ( -1120 -736 288 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -1248 -792 208 ) ( -1120 -792 216 ) ( -1248 -792 216 ) mapping_defaults/ProtoOrange 64 -128 0 1 1 +( -1248 -408 200 ) ( -1248 -408 201 ) ( -1248 -407 200 ) mapping_defaults/ProtoOrange 16 -128 0 1 1 } // brush 52 { -( -1256 -464 192 ) ( -1256 -463 192 ) ( -1256 -464 193 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 -( -1248 -704 216 ) ( -1248 -704 232 ) ( -1120 -704 232 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -1256 -464 192 ) ( -1255 -464 192 ) ( -1256 -463 192 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -1248 -800 288 ) ( -1248 -736 288 ) ( -1120 -736 288 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -1248 -408 200 ) ( -1247 -408 200 ) ( -1248 -408 201 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -1248 -408 200 ) ( -1248 -408 201 ) ( -1248 -407 200 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 +( -1256 -464 192 ) ( -1256 -463 192 ) ( -1256 -464 193 ) mapping_defaults/ProtoOrange 16 -128 0 1 1 +( -1248 -704 216 ) ( -1248 -704 232 ) ( -1120 -704 232 ) mapping_defaults/ProtoOrange 64 -128 0 1 1 +( -1256 -464 192 ) ( -1255 -464 192 ) ( -1256 -463 192 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -1248 -800 288 ) ( -1248 -736 288 ) ( -1120 -736 288 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -1248 -408 200 ) ( -1247 -408 200 ) ( -1248 -408 201 ) mapping_defaults/ProtoOrange 64 -128 0 1 1 +( -1248 -408 200 ) ( -1248 -408 201 ) ( -1248 -407 200 ) mapping_defaults/ProtoOrange 16 -128 0 1 1 } // brush 53 { -( -1256 -864 192 ) ( -1256 -863 192 ) ( -1256 -864 193 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 -( -1256 -864 192 ) ( -1256 -864 193 ) ( -1255 -864 192 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -1256 -864 192 ) ( -1255 -864 192 ) ( -1256 -863 192 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -1248 -824 448 ) ( -1248 -823 448 ) ( -1247 -824 448 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -1248 -824 200 ) ( -1247 -824 200 ) ( -1248 -824 201 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -1248 -824 200 ) ( -1248 -824 201 ) ( -1248 -823 200 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 +( -1256 -864 192 ) ( -1256 -863 192 ) ( -1256 -864 193 ) mapping_defaults/ProtoOrange 16 -128 0 1 1 +( -1256 -864 192 ) ( -1256 -864 193 ) ( -1255 -864 192 ) mapping_defaults/ProtoOrange 64 -128 0 1 1 +( -1256 -864 192 ) ( -1255 -864 192 ) ( -1256 -863 192 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -1248 -824 448 ) ( -1248 -823 448 ) ( -1247 -824 448 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -1248 -824 200 ) ( -1247 -824 200 ) ( -1248 -824 201 ) mapping_defaults/ProtoOrange 64 -128 0 1 1 +( -1248 -824 200 ) ( -1248 -824 201 ) ( -1248 -823 200 ) mapping_defaults/ProtoOrange 16 -128 0 1 1 } // brush 54 { -( -928 -864 440 ) ( -928 -863 440 ) ( -928 -864 441 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 -( -928 -864 440 ) ( -928 -864 441 ) ( -927 -864 440 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -928 -864 360 ) ( -927 -864 360 ) ( -928 -863 360 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -920 -624 448 ) ( -920 -623 448 ) ( -919 -624 448 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -920 -624 448 ) ( -919 -624 448 ) ( -920 -624 449 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -920 -624 448 ) ( -920 -624 449 ) ( -920 -623 448 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 +( -928 -864 440 ) ( -928 -863 440 ) ( -928 -864 441 ) mapping_defaults/ProtoOrange 16 -128 0 1 1 +( -928 -864 440 ) ( -928 -864 441 ) ( -927 -864 440 ) mapping_defaults/ProtoOrange 64 -128 0 1 1 +( -928 -864 360 ) ( -927 -864 360 ) ( -928 -863 360 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -920 -624 448 ) ( -920 -623 448 ) ( -919 -624 448 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -920 -624 448 ) ( -919 -624 448 ) ( -920 -624 449 ) mapping_defaults/ProtoOrange 64 -128 0 1 1 +( -920 -624 448 ) ( -920 -624 449 ) ( -920 -623 448 ) mapping_defaults/ProtoOrange 16 -128 0 1 1 } // brush 55 { -( -928 -864 352 ) ( -928 -863 352 ) ( -928 -864 353 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 -( -928 -864 352 ) ( -928 -864 353 ) ( -927 -864 352 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -928 -864 192 ) ( -927 -864 192 ) ( -928 -863 192 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -920 -856 360 ) ( -920 -855 360 ) ( -919 -856 360 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -920 -792 360 ) ( -919 -792 360 ) ( -920 -792 361 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -920 -856 360 ) ( -920 -856 361 ) ( -920 -855 360 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 +( -928 -864 352 ) ( -928 -863 352 ) ( -928 -864 353 ) mapping_defaults/ProtoOrange 16 -128 0 1 1 +( -928 -864 352 ) ( -928 -864 353 ) ( -927 -864 352 ) mapping_defaults/ProtoOrange 64 -128 0 1 1 +( -928 -864 192 ) ( -927 -864 192 ) ( -928 -863 192 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -920 -856 360 ) ( -920 -855 360 ) ( -919 -856 360 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -920 -792 360 ) ( -919 -792 360 ) ( -920 -792 361 ) mapping_defaults/ProtoOrange 64 -128 0 1 1 +( -920 -856 360 ) ( -920 -856 361 ) ( -920 -855 360 ) mapping_defaults/ProtoOrange 16 -128 0 1 1 } // brush 56 { -( -1248 -832 304 ) ( -1248 -831 304 ) ( -1248 -832 305 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 -( -1248 -864 304 ) ( -1248 -864 305 ) ( -1247 -864 304 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -1248 -832 304 ) ( -1247 -832 304 ) ( -1248 -831 304 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -1184 -648 312 ) ( -1184 -647 312 ) ( -1183 -648 312 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -1184 -576 312 ) ( -1183 -576 312 ) ( -1184 -576 313 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -1160 -648 312 ) ( -1160 -648 313 ) ( -1160 -647 312 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 +( -1248 -832 304 ) ( -1248 -831 304 ) ( -1248 -832 305 ) mapping_defaults/ProtoGrey 16 -128 0 1 1 +( -1248 -864 304 ) ( -1248 -864 305 ) ( -1247 -864 304 ) mapping_defaults/ProtoGrey 64 -128 0 1 1 +( -1248 -832 304 ) ( -1247 -832 304 ) ( -1248 -831 304 ) mapping_defaults/ProtoGrey 64 -16 0 1 1 +( -1184 -648 312 ) ( -1184 -647 312 ) ( -1183 -648 312 ) mapping_defaults/ProtoGrey 64 -16 0 1 1 +( -1184 -576 312 ) ( -1183 -576 312 ) ( -1184 -576 313 ) mapping_defaults/ProtoGrey 64 -128 0 1 1 +( -1160 -648 312 ) ( -1160 -648 313 ) ( -1160 -647 312 ) mapping_defaults/ProtoGrey 16 -128 0 1 1 } // brush 57 { -( -1164 -660 312 ) ( -1164 -659 312 ) ( -1164 -660 313 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 -( -1164 -816 312 ) ( -1164 -816 313 ) ( -1163 -816 312 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -1164 -660 312 ) ( -1163 -660 312 ) ( -1164 -659 312 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -1160 -528 340 ) ( -1160 -527 340 ) ( -1159 -528 340 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -1160 -576 316 ) ( -1159 -576 316 ) ( -1160 -576 317 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -1160 -528 316 ) ( -1160 -528 317 ) ( -1160 -527 316 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 +( -1164 -660 312 ) ( -1164 -659 312 ) ( -1164 -660 313 ) mapping_defaults/ProtoGrey 16 -128 0 1 1 +( -1164 -816 312 ) ( -1164 -816 313 ) ( -1163 -816 312 ) mapping_defaults/ProtoGrey 64 -128 0 1 1 +( -1164 -660 312 ) ( -1163 -660 312 ) ( -1164 -659 312 ) mapping_defaults/ProtoGrey 64 -16 0 1 1 +( -1160 -528 340 ) ( -1160 -527 340 ) ( -1159 -528 340 ) mapping_defaults/ProtoGrey 64 -16 0 1 1 +( -1160 -576 316 ) ( -1159 -576 316 ) ( -1160 -576 317 ) mapping_defaults/ProtoGrey 64 -128 0 1 1 +( -1160 -528 316 ) ( -1160 -528 317 ) ( -1160 -527 316 ) mapping_defaults/ProtoGrey 16 -128 0 1 1 } // brush 58 { -( -1184 -480 368 ) ( -1184 -472 360 ) ( -1184 -472 488 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 -( -1224 -492 380 ) ( -1220 -492 508 ) ( -1220 -492 380 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -1256 -432 320 ) ( -1256 -440 328 ) ( -1128 -440 328 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -1128 -400 400 ) ( -1128 -399 400 ) ( -1127 -400 400 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -1232 -460 348 ) ( -1212 -460 348 ) ( -1212 -460 476 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -928 -400 312 ) ( -928 -400 313 ) ( -928 -399 312 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 +( -1184 -480 368 ) ( -1184 -472 360 ) ( -1184 -472 488 ) mapping_defaults/ProtoOrange 16 -128 0 1 1 +( -1224 -492 380 ) ( -1220 -492 508 ) ( -1220 -492 380 ) mapping_defaults/ProtoOrange 64 -128 0 1 1 +( -1256 -432 320 ) ( -1256 -440 328 ) ( -1128 -440 328 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -1128 -400 400 ) ( -1128 -399 400 ) ( -1127 -400 400 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -1232 -460 348 ) ( -1212 -460 348 ) ( -1212 -460 476 ) mapping_defaults/ProtoOrange 64 -128 0 1 1 +( -928 -400 312 ) ( -928 -400 313 ) ( -928 -399 312 ) mapping_defaults/ProtoOrange 16 -128 0 1 1 } // brush 59 { -( -1248 -560 304 ) ( -1248 -559 304 ) ( -1248 -560 305 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 -( -1232 -460 348 ) ( -1212 -460 476 ) ( -1212 -460 348 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -1256 -432 320 ) ( -1256 -440 328 ) ( -1128 -440 328 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -1248 -560 304 ) ( -1247 -560 304 ) ( -1248 -559 304 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -1128 -400 352 ) ( -1128 -399 352 ) ( -1127 -400 352 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -1128 -400 312 ) ( -1127 -400 312 ) ( -1128 -400 313 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -1188 -460 348 ) ( -1188 -460 352 ) ( -1188 -332 352 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 +( -1248 -560 304 ) ( -1248 -559 304 ) ( -1248 -560 305 ) mapping_defaults/ProtoOrange 16 -128 0 1 1 +( -1232 -460 348 ) ( -1212 -460 476 ) ( -1212 -460 348 ) mapping_defaults/ProtoOrange 64 -128 0 1 1 +( -1256 -432 320 ) ( -1256 -440 328 ) ( -1128 -440 328 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -1248 -560 304 ) ( -1247 -560 304 ) ( -1248 -559 304 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -1128 -400 352 ) ( -1128 -399 352 ) ( -1127 -400 352 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -1128 -400 312 ) ( -1127 -400 312 ) ( -1128 -400 313 ) mapping_defaults/ProtoOrange 64 -128 0 1 1 +( -1188 -460 348 ) ( -1188 -460 352 ) ( -1188 -332 352 ) mapping_defaults/ProtoOrange 16 -128 0 1 1 } // brush 60 { -( -1184 -496 384 ) ( -1184 -500 516 ) ( -1184 -500 388 ) mapping_defaults/ProtoWhite 16 -127.99997 0 1 1 -( -1256 -432 320 ) ( -1256 -440 328 ) ( -1128 -440 328 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -1128 -400 400 ) ( -1128 -399 400 ) ( -1127 -400 400 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -1224 -492 380 ) ( -1220 -492 380 ) ( -1220 -492 508 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -928 -400 312 ) ( -928 -400 313 ) ( -928 -399 312 ) mapping_defaults/ProtoWhite 16 -127.99997 0 1 1 +( -1184 -496 384 ) ( -1184 -500 516 ) ( -1184 -500 388 ) mapping_defaults/ProtoOrange 16 -127.99997 0 1 1 +( -1256 -432 320 ) ( -1256 -440 328 ) ( -1128 -440 328 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -1128 -400 400 ) ( -1128 -399 400 ) ( -1127 -400 400 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -1224 -492 380 ) ( -1220 -492 380 ) ( -1220 -492 508 ) mapping_defaults/ProtoOrange 64 -128 0 1 1 +( -928 -400 312 ) ( -928 -400 313 ) ( -928 -399 312 ) mapping_defaults/ProtoOrange 16 -127.99997 0 1 1 } // brush 61 { -( -1248 -560 304 ) ( -1248 -559 304 ) ( -1248 -560 305 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 -( -1256 -432 320 ) ( -1256 -440 328 ) ( -1128 -440 328 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -1128 -400 400 ) ( -1128 -399 400 ) ( -1127 -400 400 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -1248 -500 388 ) ( -1240 -500 388 ) ( -1240 -500 516 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -1184 -496 384 ) ( -1184 -500 388 ) ( -1184 -500 516 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 +( -1248 -560 304 ) ( -1248 -559 304 ) ( -1248 -560 305 ) mapping_defaults/ProtoOrange 16 -128 0 1 1 +( -1256 -432 320 ) ( -1256 -440 328 ) ( -1128 -440 328 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -1128 -400 400 ) ( -1128 -399 400 ) ( -1127 -400 400 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -1248 -500 388 ) ( -1240 -500 388 ) ( -1240 -500 516 ) mapping_defaults/ProtoOrange 64 -128 0 1 1 +( -1184 -496 384 ) ( -1184 -500 388 ) ( -1184 -500 516 ) mapping_defaults/ProtoOrange 16 -128 0 1 1 } // brush 62 { -( -1188 -460 348 ) ( -1188 -332 352 ) ( -1188 -460 352 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 -( -1232 -460 348 ) ( -1212 -460 476 ) ( -1212 -460 348 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -1256 -432 320 ) ( -1256 -440 328 ) ( -1128 -440 328 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -1248 -560 304 ) ( -1247 -560 304 ) ( -1248 -559 304 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -1184 -400 352 ) ( -1176 -272 352 ) ( -1176 -400 352 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -1128 -396 312 ) ( -1127 -396 312 ) ( -1128 -396 313 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -928 -400 312 ) ( -928 -400 313 ) ( -928 -399 312 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 +( -1188 -460 348 ) ( -1188 -332 352 ) ( -1188 -460 352 ) mapping_defaults/ProtoOrange 16 -128 0 1 1 +( -1232 -460 348 ) ( -1212 -460 476 ) ( -1212 -460 348 ) mapping_defaults/ProtoOrange 64 -128 0 1 1 +( -1256 -432 320 ) ( -1256 -440 328 ) ( -1128 -440 328 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -1248 -560 304 ) ( -1247 -560 304 ) ( -1248 -559 304 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -1184 -400 352 ) ( -1176 -272 352 ) ( -1176 -400 352 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -1128 -396 312 ) ( -1127 -396 312 ) ( -1128 -396 313 ) mapping_defaults/ProtoOrange 64 -128 0 1 1 +( -928 -400 312 ) ( -928 -400 313 ) ( -928 -399 312 ) mapping_defaults/ProtoOrange 16 -128 0 1 1 } // brush 63 { @@ -626,21 +626,21 @@ } // brush 69 { -( -1536 -868 80 ) ( -1536 -867 80 ) ( -1536 -868 81 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 -( -1536 -868 80 ) ( -1536 -868 81 ) ( -1535 -868 80 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -1536 -868 4 ) ( -1535 -868 4 ) ( -1536 -867 4 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -1248 -864 180 ) ( -1248 -863 180 ) ( -1247 -864 180 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -1248 -864 84 ) ( -1247 -864 84 ) ( -1248 -864 85 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -1104 -864 84 ) ( -1104 -864 85 ) ( -1104 -863 84 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 +( -1536 -868 80 ) ( -1536 -867 80 ) ( -1536 -868 81 ) mapping_defaults/ProtoDark 16 -128 0 1 1 +( -1536 -868 80 ) ( -1536 -868 81 ) ( -1535 -868 80 ) mapping_defaults/ProtoDark 64 -128 0 1 1 +( -1536 -868 4 ) ( -1535 -868 4 ) ( -1536 -867 4 ) mapping_defaults/ProtoDark 64 -16 0 1 1 +( -1248 -864 180 ) ( -1248 -863 180 ) ( -1247 -864 180 ) mapping_defaults/ProtoDark 64 -16 0 1 1 +( -1248 -864 84 ) ( -1247 -864 84 ) ( -1248 -864 85 ) mapping_defaults/ProtoDark 64 -128 0 1 1 +( -1104 -864 84 ) ( -1104 -864 85 ) ( -1104 -863 84 ) mapping_defaults/ProtoDark 16 -128 0 1 1 } // brush 70 { -( -1160 -864 192 ) ( -1160 -863 192 ) ( -1160 -864 193 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 -( -1148 -816 296 ) ( -1136 -816 288 ) ( -1136 -688 288 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -1064 -864 192 ) ( -1064 -864 193 ) ( -1063 -864 192 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -1064 -864 192 ) ( -1063 -864 192 ) ( -1064 -863 192 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -936 -816 196 ) ( -935 -816 196 ) ( -936 -816 197 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -1160 -844 312 ) ( -1148 -716 304 ) ( -1148 -844 304 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 +( -1160 -864 192 ) ( -1160 -863 192 ) ( -1160 -864 193 ) mapping_defaults/ProtoGrey 16 -128 0 1 1 +( -1148 -816 296 ) ( -1136 -816 288 ) ( -1136 -688 288 ) mapping_defaults/ProtoGrey 64 -16 0 1 1 +( -1064 -864 192 ) ( -1064 -864 193 ) ( -1063 -864 192 ) mapping_defaults/ProtoGrey 64 -128 0 1 1 +( -1064 -864 192 ) ( -1063 -864 192 ) ( -1064 -863 192 ) mapping_defaults/ProtoGrey 64 -16 0 1 1 +( -936 -816 196 ) ( -935 -816 196 ) ( -936 -816 197 ) mapping_defaults/ProtoGrey 64 -128 0 1 1 +( -1160 -844 312 ) ( -1148 -716 304 ) ( -1148 -844 304 ) mapping_defaults/ProtoGrey 64 -16 0 1 1 } // brush 71 { @@ -805,48 +805,48 @@ } // brush 89 { -( -1256 -880 192 ) ( -1256 -879 192 ) ( -1256 -880 193 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 -( -1256 -872 192 ) ( -1256 -872 193 ) ( -1255 -872 192 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -1256 -880 192 ) ( -1255 -880 192 ) ( -1256 -879 192 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -888 -864 448 ) ( -888 -863 448 ) ( -887 -864 448 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -888 -864 200 ) ( -887 -864 200 ) ( -888 -864 201 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -1104 -872 240 ) ( -1104 -872 272 ) ( -1104 -744 272 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 +( -1256 -880 192 ) ( -1256 -879 192 ) ( -1256 -880 193 ) mapping_defaults/ProtoOrange 16 -128 0 1 1 +( -1256 -872 192 ) ( -1256 -872 193 ) ( -1255 -872 192 ) mapping_defaults/ProtoOrange 64 -128 0 1 1 +( -1256 -880 192 ) ( -1255 -880 192 ) ( -1256 -879 192 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -888 -864 448 ) ( -888 -863 448 ) ( -887 -864 448 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -888 -864 200 ) ( -887 -864 200 ) ( -888 -864 201 ) mapping_defaults/ProtoOrange 64 -128 0 1 1 +( -1104 -872 240 ) ( -1104 -872 272 ) ( -1104 -744 272 ) mapping_defaults/ProtoOrange 16 -128 0 1 1 } // brush 90 { -( -1056 -872 240 ) ( -1056 -744 272 ) ( -1056 -872 272 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 -( -1256 -872 192 ) ( -1256 -872 193 ) ( -1255 -872 192 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -1256 -880 192 ) ( -1255 -880 192 ) ( -1256 -879 192 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -888 -864 448 ) ( -888 -863 448 ) ( -887 -864 448 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -888 -864 200 ) ( -887 -864 200 ) ( -888 -864 201 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -888 -864 200 ) ( -888 -864 201 ) ( -888 -863 200 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 +( -1056 -872 240 ) ( -1056 -744 272 ) ( -1056 -872 272 ) mapping_defaults/ProtoOrange 16 -128 0 1 1 +( -1256 -872 192 ) ( -1256 -872 193 ) ( -1255 -872 192 ) mapping_defaults/ProtoOrange 64 -128 0 1 1 +( -1256 -880 192 ) ( -1255 -880 192 ) ( -1256 -879 192 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -888 -864 448 ) ( -888 -863 448 ) ( -887 -864 448 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -888 -864 200 ) ( -887 -864 200 ) ( -888 -864 201 ) mapping_defaults/ProtoOrange 64 -128 0 1 1 +( -888 -864 200 ) ( -888 -864 201 ) ( -888 -863 200 ) mapping_defaults/ProtoOrange 16 -128 0 1 1 } // brush 91 { -( -1104 -872 240 ) ( -1104 -744 272 ) ( -1104 -872 272 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 -( -1256 -872 192 ) ( -1256 -872 193 ) ( -1255 -872 192 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -1072 -872 192 ) ( -1088 -744 192 ) ( -1088 -872 192 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -888 -864 448 ) ( -888 -863 448 ) ( -887 -864 448 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -888 -864 200 ) ( -887 -864 200 ) ( -888 -864 201 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -1056 -872 240 ) ( -1056 -872 272 ) ( -1056 -744 272 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 +( -1104 -872 240 ) ( -1104 -744 272 ) ( -1104 -872 272 ) mapping_defaults/ProtoOrange 16 -128 0 1 1 +( -1256 -872 192 ) ( -1256 -872 193 ) ( -1255 -872 192 ) mapping_defaults/ProtoOrange 64 -128 0 1 1 +( -1072 -872 192 ) ( -1088 -744 192 ) ( -1088 -872 192 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -888 -864 448 ) ( -888 -863 448 ) ( -887 -864 448 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -888 -864 200 ) ( -887 -864 200 ) ( -888 -864 201 ) mapping_defaults/ProtoOrange 64 -128 0 1 1 +( -1056 -872 240 ) ( -1056 -872 272 ) ( -1056 -744 272 ) mapping_defaults/ProtoOrange 16 -128 0 1 1 } // brush 92 { -( -720 -1600 192 ) ( -720 -1568 192 ) ( -720 -1568 320 ) mapping_defaults/ProtoWhite 0 -64 0 0.25 0.25 -( -320 -1024 192 ) ( -352 -1024 192 ) ( -352 -1024 320 ) mapping_defaults/ProtoWhite 64 -64 0 0.25 0.25 -( -1552 -1664 160 ) ( -1551 -1664 160 ) ( -1552 -1663 160 ) mapping_defaults/ProtoWhite 64 0 0 0.25 0.25 -( -1424 -1536 192 ) ( -1424 -1535 192 ) ( -1423 -1536 192 ) mapping_defaults/ProtoWhite 64 0 0 0.25 0.25 -( -1424 -64 192 ) ( -1423 -64 192 ) ( -1424 -64 193 ) mapping_defaults/ProtoWhite 64 -64 0 0.25 0.25 -( -96 -1536 192 ) ( -96 -1536 193 ) ( -96 -1535 192 ) mapping_defaults/ProtoWhite 0 -64 0 0.25 0.25 +( -720 -1600 192 ) ( -720 -1568 192 ) ( -720 -1568 320 ) mapping_defaults/ProtoDark 0 -64 0 0.25 0.25 +( -320 -1024 192 ) ( -352 -1024 192 ) ( -352 -1024 320 ) mapping_defaults/ProtoDark 64 -64 0 0.25 0.25 +( -1552 -1664 160 ) ( -1551 -1664 160 ) ( -1552 -1663 160 ) mapping_defaults/ProtoDark 64 0 0 0.25 0.25 +( -1424 -1536 192 ) ( -1424 -1535 192 ) ( -1423 -1536 192 ) mapping_defaults/ProtoDark 64 0 0 0.25 0.25 +( -1424 -64 192 ) ( -1423 -64 192 ) ( -1424 -64 193 ) mapping_defaults/ProtoDark 64 -64 0 0.25 0.25 +( -96 -1536 192 ) ( -96 -1536 193 ) ( -96 -1535 192 ) mapping_defaults/ProtoDark 0 -64 0 0.25 0.25 } // brush 93 { -( -1712 -1664 160 ) ( -1712 -1663 160 ) ( -1712 -1664 161 ) mapping_defaults/ProtoWhite 0 -64 0 0.25 0.25 -( -1552 -1760 160 ) ( -1552 -1760 161 ) ( -1551 -1760 160 ) mapping_defaults/ProtoWhite 64 -64 0 0.25 0.25 -( -1552 -1664 160 ) ( -1551 -1664 160 ) ( -1552 -1663 160 ) mapping_defaults/ProtoWhite 64 0 0 0.25 0.25 -( -1424 -1536 192 ) ( -1424 -1535 192 ) ( -1423 -1536 192 ) mapping_defaults/ProtoWhite 64 0 0 0.25 0.25 -( -320 -1024 192 ) ( -352 -1024 320 ) ( -352 -1024 192 ) mapping_defaults/ProtoWhite 64 -64 0 0.25 0.25 -( -720 -1600 192 ) ( -720 -1568 320 ) ( -720 -1568 192 ) mapping_defaults/ProtoWhite 0 -64 0 0.25 0.25 +( -1712 -1664 160 ) ( -1712 -1663 160 ) ( -1712 -1664 161 ) mapping_defaults/ProtoDark 0 -64 0 0.25 0.25 +( -1552 -1760 160 ) ( -1552 -1760 161 ) ( -1551 -1760 160 ) mapping_defaults/ProtoDark 64 -64 0 0.25 0.25 +( -1552 -1664 160 ) ( -1551 -1664 160 ) ( -1552 -1663 160 ) mapping_defaults/ProtoDark 64 0 0 0.25 0.25 +( -1424 -1536 192 ) ( -1424 -1535 192 ) ( -1423 -1536 192 ) mapping_defaults/ProtoDark 64 0 0 0.25 0.25 +( -320 -1024 192 ) ( -352 -1024 320 ) ( -352 -1024 192 ) mapping_defaults/ProtoDark 64 -64 0 0.25 0.25 +( -720 -1600 192 ) ( -720 -1568 320 ) ( -720 -1568 192 ) mapping_defaults/ProtoDark 0 -64 0 0.25 0.25 } // brush 94 { @@ -895,21 +895,21 @@ } // brush 99 { -( -1256 -400 352 ) ( -1256 -399 352 ) ( -1256 -400 353 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 -( -1180 -404 352 ) ( -1180 -404 353 ) ( -1179 -404 352 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -1180 -400 352 ) ( -1179 -400 352 ) ( -1180 -399 352 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -1076 -396 448 ) ( -1076 -395 448 ) ( -1075 -396 448 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -1076 -396 356 ) ( -1075 -396 356 ) ( -1076 -396 357 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -976 -404 368 ) ( -976 -404 384 ) ( -976 -276 384 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 +( -1256 -400 352 ) ( -1256 -399 352 ) ( -1256 -400 353 ) mapping_defaults/ProtoOrange 16 -128 0 1 1 +( -1180 -404 352 ) ( -1180 -404 353 ) ( -1179 -404 352 ) mapping_defaults/ProtoOrange 64 -128 0 1 1 +( -1180 -400 352 ) ( -1179 -400 352 ) ( -1180 -399 352 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -1076 -396 448 ) ( -1076 -395 448 ) ( -1075 -396 448 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -1076 -396 356 ) ( -1075 -396 356 ) ( -1076 -396 357 ) mapping_defaults/ProtoOrange 64 -128 0 1 1 +( -976 -404 368 ) ( -976 -404 384 ) ( -976 -276 384 ) mapping_defaults/ProtoOrange 16 -128 0 1 1 } // brush 100 { -( -976 -404 368 ) ( -976 -276 384 ) ( -976 -404 384 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 -( -1180 -404 352 ) ( -1180 -404 353 ) ( -1179 -404 352 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -1180 -400 400 ) ( -1179 -400 400 ) ( -1180 -399 400 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -1076 -396 448 ) ( -1076 -395 448 ) ( -1075 -396 448 ) mapping_defaults/ProtoWhite 64 -16 0 1 1 -( -1076 -396 356 ) ( -1075 -396 356 ) ( -1076 -396 357 ) mapping_defaults/ProtoWhite 64 -128 0 1 1 -( -928 -396 356 ) ( -928 -396 357 ) ( -928 -395 356 ) mapping_defaults/ProtoWhite 16 -128 0 1 1 +( -976 -404 368 ) ( -976 -276 384 ) ( -976 -404 384 ) mapping_defaults/ProtoOrange 16 -128 0 1 1 +( -1180 -404 352 ) ( -1180 -404 353 ) ( -1179 -404 352 ) mapping_defaults/ProtoOrange 64 -128 0 1 1 +( -1180 -400 400 ) ( -1179 -400 400 ) ( -1180 -399 400 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -1076 -396 448 ) ( -1076 -395 448 ) ( -1075 -396 448 ) mapping_defaults/ProtoOrange 64 -16 0 1 1 +( -1076 -396 356 ) ( -1075 -396 356 ) ( -1076 -396 357 ) mapping_defaults/ProtoOrange 64 -128 0 1 1 +( -928 -396 356 ) ( -928 -396 357 ) ( -928 -395 356 ) mapping_defaults/ProtoOrange 16 -128 0 1 1 } // brush 101 { @@ -1003,30 +1003,30 @@ } // brush 111 { -( -1712 -1664 160 ) ( -1712 -1663 160 ) ( -1712 -1664 161 ) mapping_defaults/ProtoWhite 0 -64 0 0.25 0.25 -( -1120 -816 192 ) ( -1136 -816 192 ) ( -1136 -816 320 ) mapping_defaults/ProtoWhite 64 -64 0 0.25 0.25 -( -1552 -1664 160 ) ( -1551 -1664 160 ) ( -1552 -1663 160 ) mapping_defaults/ProtoWhite 64 0 0 0.25 0.25 -( -1424 -1536 192 ) ( -1424 -1535 192 ) ( -1423 -1536 192 ) mapping_defaults/ProtoWhite 64 0 0 0.25 0.25 -( -1424 -64 192 ) ( -1423 -64 192 ) ( -1424 -64 193 ) mapping_defaults/ProtoWhite 64 -64 0 0.25 0.25 -( -720 -1600 192 ) ( -720 -1568 320 ) ( -720 -1568 192 ) mapping_defaults/ProtoWhite 0 -64 0 0.25 0.25 +( -1712 -1664 160 ) ( -1712 -1663 160 ) ( -1712 -1664 161 ) mapping_defaults/ProtoDark 0 -64 0 0.25 0.25 +( -1120 -816 192 ) ( -1136 -816 192 ) ( -1136 -816 320 ) mapping_defaults/ProtoDark 64 -64 0 0.25 0.25 +( -1552 -1664 160 ) ( -1551 -1664 160 ) ( -1552 -1663 160 ) mapping_defaults/ProtoDark 64 0 0 0.25 0.25 +( -1424 -1536 192 ) ( -1424 -1535 192 ) ( -1423 -1536 192 ) mapping_defaults/ProtoDark 64 0 0 0.25 0.25 +( -1424 -64 192 ) ( -1423 -64 192 ) ( -1424 -64 193 ) mapping_defaults/ProtoDark 64 -64 0 0.25 0.25 +( -720 -1600 192 ) ( -720 -1568 320 ) ( -720 -1568 192 ) mapping_defaults/ProtoDark 0 -64 0 0.25 0.25 } // brush 112 { -( -1088 -832 192 ) ( -1088 -848 320 ) ( -1088 -848 192 ) mapping_defaults/ProtoWhite 0 -64 0 0.25 0.25 -( -320 -1024 192 ) ( -352 -1024 192 ) ( -352 -1024 320 ) mapping_defaults/ProtoWhite 64 -64 0 0.25 0.25 -( -1552 -1664 160 ) ( -1551 -1664 160 ) ( -1552 -1663 160 ) mapping_defaults/ProtoWhite 64 0 0 0.25 0.25 -( -1424 -1536 192 ) ( -1424 -1535 192 ) ( -1423 -1536 192 ) mapping_defaults/ProtoWhite 64 0 0 0.25 0.25 -( -1120 -816 192 ) ( -1136 -816 320 ) ( -1136 -816 192 ) mapping_defaults/ProtoWhite 64 -64 0 0.25 0.25 -( -720 -1600 192 ) ( -720 -1568 320 ) ( -720 -1568 192 ) mapping_defaults/ProtoWhite 0 -64 0 0.25 0.25 +( -1088 -832 192 ) ( -1088 -848 320 ) ( -1088 -848 192 ) mapping_defaults/ProtoDark 0 -64 0 0.25 0.25 +( -320 -1024 192 ) ( -352 -1024 192 ) ( -352 -1024 320 ) mapping_defaults/ProtoDark 64 -64 0 0.25 0.25 +( -1552 -1664 160 ) ( -1551 -1664 160 ) ( -1552 -1663 160 ) mapping_defaults/ProtoDark 64 0 0 0.25 0.25 +( -1424 -1536 192 ) ( -1424 -1535 192 ) ( -1423 -1536 192 ) mapping_defaults/ProtoDark 64 0 0 0.25 0.25 +( -1120 -816 192 ) ( -1136 -816 320 ) ( -1136 -816 192 ) mapping_defaults/ProtoDark 64 -64 0 0.25 0.25 +( -720 -1600 192 ) ( -720 -1568 320 ) ( -720 -1568 192 ) mapping_defaults/ProtoDark 0 -64 0 0.25 0.25 } // brush 113 { -( -1712 -1664 160 ) ( -1712 -1663 160 ) ( -1712 -1664 161 ) mapping_defaults/ProtoWhite 0 -64 0 0.25 0.25 -( -320 -1024 192 ) ( -352 -1024 192 ) ( -352 -1024 320 ) mapping_defaults/ProtoWhite 64 -64 0 0.25 0.25 -( -1552 -1664 160 ) ( -1551 -1664 160 ) ( -1552 -1663 160 ) mapping_defaults/ProtoWhite 64 0 0 0.25 0.25 -( -1424 -1536 192 ) ( -1424 -1535 192 ) ( -1423 -1536 192 ) mapping_defaults/ProtoWhite 64 0 0 0.25 0.25 -( -1104 -864 192 ) ( -1120 -864 320 ) ( -1120 -864 192 ) mapping_defaults/ProtoWhite 64 -64 0 0.25 0.25 -( -1088 -832 192 ) ( -1088 -848 192 ) ( -1088 -848 320 ) mapping_defaults/ProtoWhite 0 -64 0 0.25 0.25 +( -1712 -1664 160 ) ( -1712 -1663 160 ) ( -1712 -1664 161 ) mapping_defaults/ProtoDark 0 -64 0 0.25 0.25 +( -320 -1024 192 ) ( -352 -1024 192 ) ( -352 -1024 320 ) mapping_defaults/ProtoDark 64 -64 0 0.25 0.25 +( -1552 -1664 160 ) ( -1551 -1664 160 ) ( -1552 -1663 160 ) mapping_defaults/ProtoDark 64 0 0 0.25 0.25 +( -1424 -1536 192 ) ( -1424 -1535 192 ) ( -1423 -1536 192 ) mapping_defaults/ProtoDark 64 0 0 0.25 0.25 +( -1104 -864 192 ) ( -1120 -864 320 ) ( -1120 -864 192 ) mapping_defaults/ProtoDark 64 -64 0 0.25 0.25 +( -1088 -832 192 ) ( -1088 -848 192 ) ( -1088 -848 320 ) mapping_defaults/ProtoDark 0 -64 0 0.25 0.25 } // brush 114 { @@ -1039,12 +1039,12 @@ } // brush 115 { -( -31040 -160 16 ) ( -31040 -159 16 ) ( -31040 -160 17 ) mapping_defaults/ProtoWhite 0 128 0 0.25 0.25 -( 16 -14416 16 ) ( 16 -14416 17 ) ( 17 -14416 16 ) mapping_defaults/ProtoWhite 0 128 0 0.25 0.25 -( 16 -160 -192 ) ( 17 -160 -192 ) ( 16 -159 -192 ) mapping_defaults/ProtoWhite 0 0 0 0.25 0.25 -( 96 16 32 ) ( 96 17 32 ) ( 97 16 32 ) mapping_defaults/ProtoWhite 0 0 0 0.25 0.25 -( 96 31312 32 ) ( 97 31312 32 ) ( 96 31312 33 ) mapping_defaults/ProtoWhite 0 128 0 0.25 0.25 -( 18048 16 32 ) ( 18048 16 33 ) ( 18048 17 32 ) mapping_defaults/ProtoWhite 0 128 0 0.25 0.25 +( -31040 -160 16 ) ( -31040 -159 16 ) ( -31040 -160 17 ) mapping_defaults/ProtoOrange 0 128 0 0.25 0.25 +( 16 -14416 16 ) ( 16 -14416 17 ) ( 17 -14416 16 ) mapping_defaults/ProtoOrange 0 128 0 0.25 0.25 +( 16 -160 -192 ) ( 17 -160 -192 ) ( 16 -159 -192 ) mapping_defaults/ProtoOrange 0 0 0 0.25 0.25 +( 96 16 32 ) ( 96 17 32 ) ( 97 16 32 ) mapping_defaults/ProtoOrange 0 0 0 0.25 0.25 +( 96 31312 32 ) ( 97 31312 32 ) ( 96 31312 33 ) mapping_defaults/ProtoOrange 0 128 0 0.25 0.25 +( 18048 16 32 ) ( 18048 16 33 ) ( 18048 17 32 ) mapping_defaults/ProtoOrange 0 128 0 0.25 0.25 } // brush 116 { diff --git a/projects/sampleGame/externGame/externGame.zig b/projects/sampleGame/externGame/externGame.zig index 8a62d57..7650660 100644 --- a/projects/sampleGame/externGame/externGame.zig +++ b/projects/sampleGame/externGame/externGame.zig @@ -47,6 +47,8 @@ pub const ExternGameObject = struct { allocator: std.mem.Allocator = undefined, consoleWindow: imgui.utils.ConsoleWindow = undefined, tbMap: ?*bsp.maploader.TBMap = null, + physicsObjectsWindow: *extras.PhysicsObjectList = undefined, + fireTraceFilter: physics.IgnoreFixedBodiesFilter = .{}, //lmao: bool = false, //lmao2: bool = true, @@ -76,11 +78,34 @@ pub const ExternGameObject = struct { }; imgui.utils.addMenuFunc(self, "Input Stack Viewer", extras.inputDebugger.windowOpen); + + self.physicsObjectsWindow = try extras.PhysicsObjectList.create(self.allocator); self.consoleWindow.setup(); + const fireInput = try core.ActionBinding.create(core.MakeName("fire")); + fireInput.addKey(.Mouse1, .keyDown); + _ = fireInput.data.addListener(self, onFire); + fireInput.activate(); + return self; } + fn onFire(ctx: ?*anyopaque, _: core.ActionEvent) void { + const self: *@This() = @ptrCast(@alignCast(ctx)); + + if (platform.context().isCursorEnabled()) { + core.engine_logs("moving light "); + const ray = rend.context().activeCamera.?.getNormalRayFromScreen(platform.getCursorPosition()); + + if (physics.traceLine(ray.start, ray.dir.fmul(10000), .{ .bodyFilter = &self.fireTraceFilter })) |r| { + core.debugSphere(r.point, 0.2, .{ .color = .{ .y = 1.0 }, .duration = 10.0 }); + // core.debugLine(ray.start, ray.start.add(ray.dir.fmul(1000)), .{ .duration = 2.5 }); + // physics.applyForce(r.body, ray.dir.fmul(400), r.point); + rend.context().lightPosition = r.point.add(.{ .y = 0.1 }); + } + } + } + pub fn tick(self: *@This(), dt: f64) void { const rctx = rend.context(); _ = dt; @@ -108,6 +133,22 @@ pub const ExternGameObject = struct { } ig.end(); + if (platform.context().isCursorEnabled()) { + if (ig.begin("cursor", null, .{})) { + if (rend.context().activeCamera) |cam| { + const ray = cam.getNormalRayFromScreen(platform.getCursorPosition()); + + if (physics.traceLine(ray.start, ray.dir.fmul(10000), .{ .bodyFilter = &self.fireTraceFilter })) |r| { + core.debugSphere(r.point, 0.2, .{ .color = .{ .x = 1.0 }, .duration = 0 }); + // core.debugLine(ray.start, ray.start.add(ray.dir.fmul(1000)), .{ .duration = 2.5 }); + // physics.applyForce(r.body, ray.dir.fmul(400), r.point); + ig.textf("{d} {d} {d}", .{ r.point.x, r.point.y, r.point.z }); + } + } + } + ig.end(); + } + //_ = self; // imgui.utils.structHexView(self); // imgui.utils.structHexView(rctx.activeCamera.?); @@ -152,6 +193,7 @@ const std = @import("std"); const backlog = @import("backlog"); const core = backlog.core; const imgui = backlog.imgui; +const physics = backlog.physics; const rend = backlog.rend; const ig = imgui.api; const platform = backlog.platform; diff --git a/projects/sampleGame/main.zig b/projects/sampleGame/main.zig index b5a2309..a4d13c8 100644 --- a/projects/sampleGame/main.zig +++ b/projects/sampleGame/main.zig @@ -22,7 +22,7 @@ objectSpawner: *extras.ObjectSpawner = undefined, inputEnabled: bool = true, videoFullbright: bool = false, -moveLight: bool = true, +//moveLight: bool = true, tbMap: ?*bsp.maploader.TBMap = null, @@ -420,11 +420,11 @@ pub fn tick(self: *@This(), dt: f64) void { self.objectSpawner.spawnPosition = debugCenter; self.objectSpawner.spawnRotation = core.Rotation.eulerY(core.radians(self.fpcamera.yaw)); - if (self.moveLight) { - core.debugSphere(debugCenter, 0.3, .{}); - core.debugSphere(debugCenter, 0.1, .{ .color = .{ .x = 1.0 } }); - rend.context().lightPosition = debugCenter; - } + //if (self.moveLight) { + // core.debugSphere(debugCenter, 0.3, .{}); + // core.debugSphere(debugCenter, 0.1, .{ .color = .{ .x = 1.0 } }); + // rend.context().lightPosition = debugCenter; + //} // self.loadMap2() catch unreachable; // show a window with the current camera's position @@ -432,6 +432,10 @@ pub fn tick(self: *@This(), dt: f64) void { if (!self.mouseLook) { // self.engineTool.tick(); self.objectSpawner.windowOpen = !self.mouseLook; + //if (ig.begin("meh", null, .{})) { + //if (ig.checkbox("move lights ", &self.moveLight)) {} + //} + //ig.end(); // self.objectSpawner.tick(dt); // self.rendererDebugger.tick(dt); // if (ig.begin("meh", null, .{})) { @@ -442,8 +446,6 @@ pub fn tick(self: *@This(), dt: f64) void { // // //} // // } - // if (ig.checkbox("move lights ", &self.moveLight)) {} - // ig.textFmt("info: - WASD to move, mouse to look,\n- Q and E to go up and down", .{}) catch return; // ig.textFmt("- shift to slow down camera speed", .{}) catch return; // ig.textFmt("- T to enable/disable mouse cursor", .{}) catch return;