init
This commit is contained in:
@@ -0,0 +1,148 @@
|
||||
{
|
||||
"menu.savingSubLevels": "Saving sub-levels",
|
||||
|
||||
"commands.sable.helper.missing_sub_level_container": "Couldn't find sub-level container for this level!",
|
||||
"commands.sable.helper.missing_physics_system": "Couldn't find sub-level physics system for this level!",
|
||||
|
||||
"commands.sable.sub_level": "sub-level",
|
||||
"commands.sable.sub_levels": "%s sub-levels",
|
||||
|
||||
"commands.sable.physics.global": "global",
|
||||
"commands.sable.physics.local": "local",
|
||||
|
||||
"commands.sable.spawn.success": "Spawned %s",
|
||||
"commands.sable.spawn.clone.success": "Cloned sublevel",
|
||||
|
||||
"commands.sable.physics.impulse.angular.success": "Applied %s angular impulse to %s of %s",
|
||||
"commands.sable.physics.impulse.linear.success": "Applied %s linear impulse to %s of %s",
|
||||
"commands.sable.physics.rotation.add.success": "Added %s rotation to %s of %s",
|
||||
"commands.sable.physics.rotation.set.success": "Set rotation of %s to %s",
|
||||
"commands.sable.physics.translation.add.success": "Added %s translation to %s of %s",
|
||||
"commands.sable.physics.translation.set.success": "Set translation of %s to %s",
|
||||
|
||||
"commands.sable.joint.missing_sublevel_target": "Failed to find sub-level for joint",
|
||||
"commands.sable.joint.success": "Successfully created joint",
|
||||
|
||||
"commands.sable.sub_level.set_name.success_singular": "Set name of sub-level to %s",
|
||||
"commands.sable.sub_level.set_name.success_multiple": "Set name of %s sub-levels to %s",
|
||||
|
||||
"commands.sable.sub_level.get_name.success": "Name of sub-level is %s",
|
||||
"commands.sable.sub_level.get_name.failure_unnamed": "Sub-level has no name",
|
||||
|
||||
"commands.sable.sub_level.clear_name.success_singular": "Cleared name of sub-level",
|
||||
"commands.sable.sub_level.clear_name.success_multiple": "Cleared name of %s sub-levels",
|
||||
|
||||
"commands.sable.sub_level.teleport_with_orientation.success": "Teleported %s to %.2f, %.2f, %.2f facing %.2f, %.2f",
|
||||
"commands.sable.sub_level.teleport.success": "Teleported %s to %.2f, %.2f, %.2f",
|
||||
"commands.sable.sub_level.remove.success": "Removed %s",
|
||||
"commands.sable.sub_level.assemble.no_blocks": "Couldn't assemble sub-level, no valid blocks found",
|
||||
"commands.sable.sub_level.assemble.connected.too_many_blocks": "Couldn't assemble sub-level, too many blocks (maximum %s)",
|
||||
"commands.sable.sub_level.shatter.no_blocks": "Couldn't shatter into sub-levels, no valid blocks found",
|
||||
"commands.sable.sub_level.shatter.connected.too_many_blocks": "Couldn't shatter into sub-levels, too many blocks (maximum %s)",
|
||||
"commands.sable.sub_level.shatter.region.success": "Shattered a region with %s blocks into new sub-levels",
|
||||
"commands.sable.sub_level.shatter.connected.success": "Shattered %s connected blocks into new sub-levels",
|
||||
"commands.sable.sub_level.shatter.range.success": "Shattered a range with %s blocks into new sub-levels",
|
||||
"commands.sable.sub_level.shatter.radius.success": "Shattered a radius with %s blocks into new sub-levels",
|
||||
"commands.sable.sub_level.shatter.sub_level.success": "Shattered %s into %s new sub-levels",
|
||||
"commands.sable.sub_level.shatter.sub_level.only_single_block": "Can't shatter single-block sub-levels",
|
||||
"commands.sable.sub_level.assemble.region.success": "Assembled a region %s blocks to a new sub-level",
|
||||
"commands.sable.sub_level.assemble.connected.success": "Assembled %s connected blocks to a new sub-level",
|
||||
"commands.sable.sub_level.assemble.radius.success": "Assembled a radius with %s blocks to a new sub-level",
|
||||
"commands.sable.sub_level.assemble.range.success": "Assembled a range with %s blocks to a new sub-level",
|
||||
|
||||
"commands.sable.physics.paused.success": "Set physics paused to be %s",
|
||||
"commands.sable.physics.paused_toggled.success": "Toggled physics paused to be %s",
|
||||
|
||||
"commands.sable.place_schematic.failure": "Couldn't find schematic!",
|
||||
"commands.sable.place_schematic.success": "Placed schematic!",
|
||||
|
||||
"commands.sable.fail.not_inside_sub_level": "Position outside of sub-level plot",
|
||||
"commands.sable.fail.no_sub_levels": "No sub-levels found",
|
||||
"commands.sable.fail.unmodified": "No sub-levels were modified",
|
||||
"commands.sable.fail.no_axis_for_rotation": "No axis for rotation",
|
||||
|
||||
"commands.sable.info.count": "Found %s sub-levels:",
|
||||
"commands.sable.info.name": "%s:",
|
||||
"commands.sable.info.name.tooltip": "Serialization Pointer: %s",
|
||||
"commands.sable.info.position": " Position: %.2f %.2f %.2f",
|
||||
"commands.sable.info.orientation": " Orientation: %.2f %.2f %.2f %.2f",
|
||||
"commands.sable.info.linear_velocity": " Linear Velocity: %.2f %.2f %.2f",
|
||||
"commands.sable.info.angular_velocity": " Angular Velocity: %.2f %.2f %.2f",
|
||||
"commands.sable.info.mass": " Mass: %.2f",
|
||||
"commands.sable.info.world_bounds": " World Bounds: %.2f x %.2f x %.2f",
|
||||
|
||||
"commands.data.sub_level.get": "%s on sub-level %s after scale factor of %s is %s",
|
||||
"commands.data.sub_level.modified": "Modified sub-level auxiliary data of %s",
|
||||
"commands.data.sub_level.query": "%s has the following auxiliary sub-level data: %s",
|
||||
|
||||
"argument.sable.body.selector.all": "All sub-levels",
|
||||
"argument.sable.body.selector.nearest": "Nearest sub-level",
|
||||
"argument.sable.body.selector.random": "Random sub-level",
|
||||
"argument.sable.body.selector.viewed": "Viewed sub-level",
|
||||
"argument.sable.body.selector.latest": "Latest sub-level",
|
||||
"argument.sable.body.selector.tracking": "Tracking sub-level",
|
||||
"argument.sable.body.selector.inside": "Inside sub-level",
|
||||
"argument.sable.body.static_world": "The static world",
|
||||
|
||||
"argument.sable.sub_level.modifier.distance": "Distance to sub-level",
|
||||
"argument.sable.sub_level.modifier.x": "x position",
|
||||
"argument.sable.sub_level.modifier.y": "y position",
|
||||
"argument.sable.sub_level.modifier.z": "z position",
|
||||
"argument.sable.sub_level.modifier.dx": "Sub-levels between x and x + dx",
|
||||
"argument.sable.sub_level.modifier.dy": "Sub-levels between y and y + dy",
|
||||
"argument.sable.sub_level.modifier.dz": "Sub-levels between z and z + dz",
|
||||
"argument.sable.sub_level.modifier.vx": "x velocity",
|
||||
"argument.sable.sub_level.modifier.vy": "y velocity",
|
||||
"argument.sable.sub_level.modifier.vz": "z velocity",
|
||||
"argument.sable.sub_level.modifier.speed": "Sub-level speed",
|
||||
"argument.sable.sub_level.modifier.mass": "Sub-level weight",
|
||||
"argument.sable.sub_level.modifier.volume": "Volume of sub-level bounding box",
|
||||
"argument.sable.sub_level.modifier.width": "X axis size of sub-level bounding box",
|
||||
"argument.sable.sub_level.modifier.height": "Y axis size of sub-level bounding box",
|
||||
"argument.sable.sub_level.modifier.length": "Z axis size of sub-level bounding box",
|
||||
"argument.sable.sub_level.modifier.limit": "Maximum number of sub-levels to return",
|
||||
"argument.sable.sub_level.modifier.name": "Sub-level name",
|
||||
"argument.sable.sub_level.modifier.sort": "Sort the sub-levels by distance",
|
||||
"argument.sable.unexpected_end_of_input": "Unexpected end of input",
|
||||
"argument.sable.single_sub_level_required": "Only one sub-level is allowed, but the provided selector allows more than one",
|
||||
"argument.sable.sub_level.invalid": "Invalid sub-level selector",
|
||||
"argument.sable.sub_level.expected_end_of_modifier": "Expected end of modifier",
|
||||
"argument.sable.sub_level.expected_positive_integer": "Expected a positive integer",
|
||||
"argument.sable.sub_level.expected_positive_decimal": "Expected a positive decimal",
|
||||
"argument.sable.sub_level.expected_positive_range": "Expected a positive range",
|
||||
"argument.sable.sub_level.expected_sorting": "Expected sorting type of either nearest or furthest",
|
||||
|
||||
"inspector.sable.sub_level_container.title": "Sub-level Container",
|
||||
|
||||
"attribute.name.player.sub_level_punch_strength": "Push Strength",
|
||||
"attribute.name.player.sub_level_punch_cooldown": "Push Cooldown",
|
||||
|
||||
"options.sable_menu": "Sub-Level Settings... ",
|
||||
"options.physics_steps": "Physics Steps",
|
||||
"options.physics_steps_template": "%s steps / second",
|
||||
"options.physics_steps.tooltip": "How many times the physics simulation is stepped in every second. Higher values will be significantly more performance intensive, but will have higher accuracy.",
|
||||
|
||||
"sub_level.toast.checkLog": "See log for more details",
|
||||
"sub_level.toast.loadFailure": "Failed to load sub-level at %s",
|
||||
"sub_level.toast.saveFailure": "Failed to save sub-level at %s",
|
||||
"sub_level.toast.physicsFailure": "Physics failure for sub-level at %s",
|
||||
"sub_level.toast.attemptingRecovery": "Attempting recovery",
|
||||
|
||||
"camera_type.sub_level_view": "Entering Contraption Camera",
|
||||
"camera_type.sub_level_view_unlocked": "Entering Unlocked Contraption Camera",
|
||||
|
||||
"force_group.sable.gravity": "Gravity",
|
||||
"force_group.sable.drag": "Drag",
|
||||
"force_group.sable.levitation": "Levitation",
|
||||
"force_group.sable.balloon_lift": "Balloon Lift",
|
||||
"force_group.sable.propulsion": "Propulsion",
|
||||
"force_group.sable.lift": "Lift",
|
||||
"force_group.sable.magnetic_force": "Magnetic",
|
||||
|
||||
"schematic.sable.mirror_not_supported": "Cannot mirror schematics containing sub-levels!",
|
||||
|
||||
"death.attack.fall.from_sublevel": "%1$s fell from %2$s",
|
||||
|
||||
"sable.create.mechanical_arm.points_removed_sublevel_and_range": "%1$s selected interaction point(s) removed due to range limitations or not being anchored.",
|
||||
"sable.create.remove.points_removed_sublevel" : "%1$s selected interaction point(s) removed due to not being anchored"
|
||||
}
|
||||
+61
@@ -0,0 +1,61 @@
|
||||
layout(location = 0) in vec3 QuadPosition;
|
||||
layout(location = 1) in vec3 SableNormal;
|
||||
layout(location = 2) in uvec2 SableData;
|
||||
|
||||
layout(std140) uniform SableSprites {
|
||||
vec4 sableSprites[2 * SABLE_TEXTURE_CACHE_SIZE];
|
||||
};
|
||||
|
||||
uniform mat4 SableTransform;
|
||||
|
||||
vec3 Position;
|
||||
vec3 Normal;
|
||||
vec4 Color;
|
||||
vec2 UV0;
|
||||
ivec2 UV2;
|
||||
|
||||
void _sable_unpack() {
|
||||
uint vertexIndex = uint(gl_VertexID) & 0x3u;
|
||||
|
||||
// Packed data format:
|
||||
// TTTTTTTTTTTTLLLLLLLLZZZZYYYYXXXX
|
||||
// T = Texture ID
|
||||
// L = Packed Light
|
||||
// Z = Relative Z position
|
||||
// Y = Relative Y position
|
||||
// X = Relative X position
|
||||
uint posX = SableData.x & 15u;
|
||||
uint posY = (SableData.x >> 4) & 15u;
|
||||
uint posZ = (SableData.x >> 8) & 15u;
|
||||
uint packedLight = (SableData.x >> 12) & 255u;
|
||||
uint textureId = SableData.x >> 20u;
|
||||
|
||||
// Packed data format:
|
||||
// AAAAAAAAYYYYYYYYZZZZZZZZXXXXXXXX
|
||||
// A = Ambient Occlusion
|
||||
// Y = Section Y
|
||||
// Z = Section Z
|
||||
// X = Section X
|
||||
uint xOffset = (SableData.y) & 0xFFu;
|
||||
uint yOffset = (SableData.y >> 8) & 0xFFu;
|
||||
uint zOffset = (SableData.y >> 16) & 0xFFu;
|
||||
uint ambientOcclusion = (SableData.y >> (24u + (vertexIndex << 1u))) & 0x3u;
|
||||
|
||||
// 0,0 == 0b00
|
||||
// 0,1 == 0b01
|
||||
// 1,1 == 0b10
|
||||
// 1,0 == 0b11
|
||||
uint lower = uint(gl_VertexID) & 1u;
|
||||
uint upper = (uint(gl_VertexID) >> 1) & 1u;
|
||||
vec2 uv = vec2(float(upper), float(lower ^ upper));
|
||||
uint textureOffset = vertexIndex << 3u;
|
||||
|
||||
vec4 textureU = sableSprites[(textureId << 1u)];
|
||||
vec4 textureV = sableSprites[(textureId << 1u) + 1u];
|
||||
|
||||
Position = (SableTransform * vec4(QuadPosition + vec3(float((xOffset << 4u) + posX), float((yOffset << 4u) + posY), float((zOffset << 4u) + posZ)), 1.0)).xyz;
|
||||
Normal = (SableTransform * vec4(SableNormal, 0.0)).xyz;
|
||||
Color = vec4(1.0, 1.0, 1.0, 1.0) * vec4(vec3(1.0 - 0.2 * float(ambientOcclusion)), 1.0);
|
||||
UV0 = vec2(textureU[vertexIndex], textureV[vertexIndex]);
|
||||
UV2 = ivec2(packedLight & 0xF0u, (packedLight << 4) & 0xF0u);
|
||||
}
|
||||
Reference in New Issue
Block a user