physics objects and mouse picking

This commit is contained in:
peterino2 2025-05-26 14:31:44 -07:00
parent 6cd0dcb89e
commit 3478524fec
24 changed files with 473 additions and 244 deletions

View File

@ -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;
}

View File

@ -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;

View File

@ -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 {

View File

@ -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");

View File

@ -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,
};
}

View File

@ -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| {

View File

@ -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,
};

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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 {

View File

@ -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;

View File

@ -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;
}

View File

@ -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);

View File

@ -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;

View File

@ -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;

View File

@ -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");

View File

@ -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| {

View File

@ -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;

View File

@ -1,4 +1,5 @@
//--------------------------------------------------------------------------------------------------
#define __JPC_API_IMPL 1
#include "JoltPhysicsC.h"
#include <assert.h>
@ -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);

View File

@ -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,

View File

@ -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
{

View File

@ -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;

View File

@ -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;