Page MenuHomeSchine - Phabricator

Starmade | Abilty to rotate blocks that should be unrotatable
Confirmed task for development, LowPublic

Description

The rotated texture's problem was already reported around 8 months~1 year ago but with the migration to phab the discussions seems gone or not accessible anymore.

In a nutshell the problem was cause by placing unrotatable block (i. e. power generator/capacitor, hull, armor, etc.) and rotate it by CTRL+mouse wheel. It seems you try solved this by refrain rotation to apply with combinaison when the player use "unrotatable block" (note : Howewer the arrow still continue to turn during a micro-fraction of second. I didn't try yet to put block at the same time, but it's out of topic)

Anyway, you applied an ineffective restriction because, indeed, you prevent players to be able to rotate block but you don't prevent the software to apply this rotation. So I accidentally bypass the restriction (cf. "step to reproduce").

Let's see this :

Below, how the advanced grey hull blocks are when rotate in default/good way (front face = left side). Look the uniform color of the top edge of the front blocks line.

Compare the same edge there. The 3 left blocks have front face below while the rest of block lines face the left. You can clearly see the demarcation between the 3rd & 4th block (starting left). Note also my yellow build mode cursor actually turning below, position it shouldn't suppose be able to reach when I manipulate armor.

Here the left build block is in good default side (frontface backward, toward the planet), the right build block face below. Note my yellow cursor face below due to the gravity block...

...and then I switched to build block and place to the left of the good one. See the result.

It's not proper to the gravity block, I can do that with all rotable block, like wedge. Actually I'm not complaining too much of that because i can put the walking man of the gravity block in all side ← ↑ → ↓ . It's just come really tricky with armor things.

Log 3 :


Log 4 :

Details

Task Type
Bug
Testing Results
Affected Gamemode(s)
Single and Multi
Reproducible
Yes
Last tested (version)
0.19549 (Dev)
Category
Engine
First occurrence (version)
0.1954
Hardware/Software/System
OS-Specific
No
Hardware-Specific
No
Video Card Vendor
NVIDIA
Video Card Model
GeForce GTX 960
Steps to reproduce

How to still get an unrotatable block rotated. :

  1. Mirror cubes + XY-plane
    1. Pick something like a hull cube
    2. Put a blue symmetry wall down (XY-plane)
    3. Enable "mirror cubes"
    4. Place the hull down and check rotations, the block on the other side of the symmetry wall should be rotated and have "BACK" as rotation.
    5. The other 2 symmetry ones are fine
  2. Template rotation
    1. Put a hull cube down
    2. Take a template of it
    3. Load the template, rotate it and place it down
    4. Block should have been rotated.
Tester information (Internal use only)

The unrotatable blocks can still be rotated through 2 methods, there's most likely another one but can't find it at this moment.

  1. Using mirror cubes and the XY-plane symmetry (blue one) will still mirror default FRONT blocks to the BACK rotation at the other side
  2. Loading a template and rotating it, will also rotate the unrotatable blocks.
Detected video (Graphicsinfo.txt)

Running on thread: ClientThread
Adapter: nvd3dumx,nvwgf2umx,nvwgf2umx
Driver Version: 10.18.13.5330
Vendor: NVIDIA Corporation
OpenGL Version: 4.5.0 NVIDIA 353.30
Renderer: GeForce GTX 960/PCIe/SSE2
GLSL Ver: 4.50 NVIDIA

SMC-Report

Starmade System Checker Report
07/01/2016 6:16:44,44

RESULTS:
Windows version: Windows 7 64-bit ....PASS
Processor: AMD FX(tm)-4130 Quad-Core Processor (4 CPUs), ~3.8GHz
Memory: 4096MB RAM
Graphics Card name: NVIDIA GeForce GTX 960 ....PASS
Java version: 64-bit Java 8 ....PASS

Serverconfig (server.cfg)
WORLD = world0 //set world to use (set 'old' for using the old world). if no world exists a new one will be set automatically
PROTECT_STARTING_SECTOR = false //Protects the starting sector
ENABLE_SIMULATION = true //Universe AI simulation
CONCURRENT_SIMULATION = 256 //How many simulation groups may be in the universe simultaniously (performance)
ENEMY_SPAWNING = true //Enables enemy spawing
SECTOR_SIZE = 2000 //Sets the size of sectors in the universe **WARNING** scaling the size of an existing universe down may cause issues
BLUEPRINT_DEFAULT_PRIVATE = true //If true, set blueprints private as default (else they are public)
FLOATING_ITEM_LIFETIME_SECS = 240 //How much seconds items floating in space should be alive
SIMULATION_SPAWN_DELAY = 420 //How much seconds between simulation spawn ticks
SIMULATION_TRADING_FILLS_SHOPS = true //Trading guild will deliver stock to shops
SECTOR_INACTIVE_TIMEOUT = 20 //Time in secs after which sectors go inactive (-1 = off)
SECTOR_INACTIVE_CLEANUP_TIMEOUT = 10 //Time in secs after which inactive sectors are completely removed from memory (-1 = off)
USE_STARMADE_AUTHENTICATION = false //allow star-made.org authentication
REQUIRE_STARMADE_AUTHENTICATION = false //require star-made.org authentication (USE_STARMADE_AUTHENTICATION must be true)
PROTECTED_NAMES_BY_ACCOUNT = 10 //How many player names a player may protect with his account (if exceeded, the player name, that was logged in the longest time ago gets unprotected)
DEFAULT_BLUEPRINT_ENEMY_USE = true //Default option for blueprints not in catalog yet
DEFAULT_BLUEPRINT_FACTION_BUY = true //Default option for blueprints not in catalog yet
DEFAULT_BLUEPRINT_OTHERS_BUY = true //Default option for blueprints not in catalog yet
DEFAULT_BLUEPRINT_HOME_BASE_BUY = true //Default option for blueprints not in catalog yet
LOCK_FACTION_SHIPS = true //If true, ships of other factions cant be edited, activated, or entered
DEBUG_FSM_STATE = false //transfer debug FSM state. Turning this on may slow down network
PHYSICS_SHAPE_CASTING_TUNNELING_PREVENTION = false //Makes a convex cast for hight speed object to prevent clipping. High Cost. (Bugged right now, so dont turn it on)
CATALOG_SLOTS_PER_PLAYER = -1 //How many slots per player for saved ships (-1 for unlimited)
UNIVERSE_DAY_IN_MS = 1200000 //how long is a 'day' (stellar system rotation) in milliseconds (-1 to switch off system rotation)
FORCE_DISK_WRITE_COMPLETION = false //forces writing operations of raw data to disk directly after operation. For some OS this prevents raw data corruption
ASTEROIDS_ENABLE_DYNAMIC_PHYSICS = true //enables asteroids to be able to move in space
ENABLE_BREAK_OFF = false //debug (don't activate unless you know what you're doing)
COLLISION_DAMAGE = false //colliding into another object does damage
COLLISION_DAMAGE_THRESHOLD = 2.0 //Threshold of Impulse that does damage (the lower, the less force is needed for damage)
SKIN_ALLOW_UPLOAD = true //if off, skin uploading to server is deactivated
CATALOG_NAME_COLLISION_HANDLING = false //if off, saving with an existing entry is denied, if on the name is automatically changed by adding numbers on the end
SECTOR_AUTOSAVE_SEC = -1 //Time interval in secs the server will autosave (-1 for never)
PHYSICS_SLOWDOWN_THRESHOLD = 40 //Milliseconds a collision test may take before anti-slowdown mode is activated
THRUST_SPEED_LIMIT = 75 //How fast ships, etc. may go in m/s . Too high values may induce physics tunneling effects
MAX_CLIENTS = 32 //Max number of clients allowed on this server
SUPER_ADMIN_PASSWORD_USE = false //Enable super admin for this server
SUPER_ADMIN_PASSWORD = mypassword //Super admin password for this server
SERVER_LISTEN_IP = all //Enter specific ip for the server to listen to. use "all" to listen on every ip
SOCKET_BUFFER_SIZE = 65536 //buffer size of incoming and outgoing data per socket
PHYSICS_LINEAR_DAMPING = 0.05 //how much object slow down naturally (must be between 0 and 1): 0 is no slowdown
PHYSICS_ROTATIONAL_DAMPING = 0.05 //how much object slow down naturally (must be between 0 and 1): 0 is no slowdown
AI_DESTRUCTION_LOOT_COUNT_MULTIPLIER = 0.9 //multiply amount of items in a loot stack. use values smaller 1 for less and 0 for none
AI_DESTRUCTION_LOOT_STACK_MULTIPLIER = 0.9 //multiply amount of items spawned after AI destruction. use values smaller 1 for less and 0 for none
CHEST_LOOT_COUNT_MULTIPLIER = 0.9 //multiply amount of items in a loot stack. use values smaller 1 for less and 0 for none
CHEST_LOOT_STACK_MULTIPLIER = 0.9 //multiply amount of items spawned in chests of generated chests. use values smaller 1 for less and 0 for none
USE_WHITELIST = false //only names/ips from whitelist.txt are allowed
FILTER_CONNECTION_MESSAGES = false //don't display join/disconnect messages
USE_UDP = false //Use 'User Datagram Protocol' (UDP) instead of 'Transmission Control Protocol' (TCP) for connections
AUTO_KICK_MODIFIED_BLUEPRINT_USE = false //Kick players that spawn modified blueprints
AUTO_BAN_ID_MODIFIED_BLUEPRINT_USE = false //Ban player by name that spawn modified blueprints
AUTO_BAN_IP_MODIFIED_BLUEPRINT_USE = false //Ban player by IP that spawn modified blueprints
AUTO_BAN_TIME_IN_MINUTES = 60 //Time to ban in minutes (-1 for permanently)
REMOVE_MODIFIED_BLUEPRINTS = false //Auto-removes a modified blueprint
DEBUG_SEGMENT_WRITING = false //Debugs correctness of writing of segments (costs server performance)
TCP_NODELAY = true //Naggles algorithm (WARNING: only change when you know what you're doing)
PING_FLUSH = false //flushes ping/pong immediately (WARNING: only change when you know what you're doing)
RECIPE_BLOCK_COST = 5000 //How much blocks have to be invested to create a recipe (min 0)
SHOP_SPAWNING_PROBABILITY = 0.1 //(must be between 0 and 1): 0 is no shops spawned in asteroid sectors, 1 is shop spawned in everyone (default: 8% -> 0.08)
RECIPE_REFUND_MULT = 0.5 //how much blocks are refunded from selling a recipe (must be between 0 and 1): 0 no refund, 1 full refund
RECIPE_LEVEL_AMOUNT = 4000 //On how much created blocks will a recipe level up (base value) (min 0)
DEFAULT_SPAWN_SECTOR_X = 2 //DEFAULT Spawn Sector X Coordinate
DEFAULT_SPAWN_SECTOR_Y = 2 //DEFAULT Spawn Sector Y Coordinate
DEFAULT_SPAWN_SECTOR_Z = 2 //DEFAULT Spawn Sector Z Coordinate
MODIFIED_BLUEPRINT_TOLERANCE = 0.1 //Tolerance of modified blueprint trigger (default = 10%)
TURNING_DIMENSION_SCALE = 1.1 //Scaling of tuning speed VS ship dimension (default = 1.1)
DEFAULT_SPAWN_LOCALPOINT_X_1 = 0.0 //First Rotating Spawn: Local Pos X Coordinate
DEFAULT_SPAWN_LOCALPOINT_Y_1 = -6.5 //First Rotating Spawn: Local Pos Y Coordinate
DEFAULT_SPAWN_LOCALPOINT_Z_1 = -8.0 //First Rotating Spawn: Local Pos Z Coordinate
DEFAULT_SPAWN_LOCALPOINT_X_2 = 7.0 //Second Rotating Spawn: Local Pos X Coordinate
DEFAULT_SPAWN_LOCALPOINT_Y_2 = -6.5 //Second Rotating Spawn: Local Pos Y Coordinate
DEFAULT_SPAWN_LOCALPOINT_Z_2 = 0.0 //Second Rotating Spawn: Local Pos Z Coordinate
DEFAULT_SPAWN_LOCALPOINT_X_3 = 0.0 //Third Rotating Spawn: Local Pos X Coordinate
DEFAULT_SPAWN_LOCALPOINT_Y_3 = -6.5 //Third Rotating Spawn: Local Pos Y Coordinate
DEFAULT_SPAWN_LOCALPOINT_Z_3 = 7.0 //Third Rotating Spawn: Local Pos Z Coordinate
DEFAULT_SPAWN_LOCALPOINT_X_4 = -8.0 //Forth Rotating Spawn: Local Pos X Coordinate
DEFAULT_SPAWN_LOCALPOINT_Y_4 = -6.5 //Forth Rotating Spawn: Local Pos Y Coordinate
DEFAULT_SPAWN_LOCALPOINT_Z_4 = 0.0 //Forth Rotating Spawn: Local Pos Z Coordinate
PLAYER_DEATH_CREDIT_PUNISHMENT = 0.0 //players credits lost of total on death (must be between 0 and 1): 1 = lose all, 0 = keep all
PLAYER_DEATH_CREDIT_DROP = false //drop credits lost on death into space instead
PLAYER_DEATH_BLOCK_PUNISHMENT = false //player will drop all his blocks into space on death
PLAYER_DEATH_PUNISHMENT_TIME = 300 //Time interval in seconds after death of a player in which the player is not punished
PLAYER_DEATH_INVULNERABILITY_TIME = 5 //Time the player is invulnerable after death in sec
PLAYER_HISTORY_BACKLOG = 30 //how many login history objects (with name, IP, account-name, and time) should be saved by player state
PROJECTILES_ADDITIVE_VELOCITY = false //initial projectile speed depend on relative linear velocity of object fired from
PROJECTILES_VELOCITY_MULTIPLIER = 1.0 //multiplicator for projectile velocity
IGNORE_DOCKING_AREA = false //ignores docking area size
ALLOW_UPLOAD_FROM_LOCAL_BLUEPRINTS = true //enables clients being able to upload their pre-build-blueprints to the server
SHOP_NPC_STARTING_CREDITS = 10000000 //how much credits do shops start with
SHOP_NPC_RECHARGE_CREDITS = 100000 //how much credits do shops gain about every 10 min
AI_WEAPON_AIMING_ACCURACY = 10 //how accurate the AI aims (the higher the value the more accurate vs distance. 10 = about 99% accuracy at 10m)
BROADCAST_SHIELD_PERCENTAGE = 5 //percent of shields changed for the server to broadcast a shield synch
BROADCAST_POWER_PERCENTAGE = 50 //percent of power changed for the server to broadcast a power synch (not that critical)
ADMINS_CIRCUMVENT_STRUCTURE_CONTROL = true //admins can enter ships of any faction
STAR_DAMAGE = true //suns dealing damage to entities
SQL_NIO_FILE_SIZE = 256 //megabyte limit of .data file when to use NIO (faster) (must be power of 2)
PLANET_SIZE_MEAN = 225.0 //Planet size mean (normal gaussian distribution) (min 50)
PLANET_SIZE_DEVIATION = 85.0 //Planet size standard deviation. Note: normal gaussian distribution graph scaled horizontally by 1/3 (min 0)
PLAYER_MAX_BUILD_AREA = 10 //max area a player may add/remove in adv. build mode
NT_SPAM_PROTECT_TIME_MS = 30000 //period of spam protection
ASTEROID_SECTOR_REPLENISH_TIME_SEC = -1 //seconds until a sector that is mined down to 0 asteroids is replenished (-1 = never)
NT_SPAM_PROTECT_MAX_ATTEMPTS = 30 //max attempts before refusing connections in spam protect period (default is 1/sec for 30 sec)
NT_SPAM_PROTECT_EXCEPTIONS = 127.0.0.1 //ips excepted from spam control (separate multiple with comma) (default is localhost)
NT_SPAM_PROTECT_ACTIVE = true //enables connection spawn protection (flooding servers with login attempts)
USE_PERSONAL_SECTORS = false //will spawn a player in a locked sector sandbox (warning, don't use unless you know what you do)
BATTLE_MODE = false //turn on battlemode (warning, don't use unless you know what you're doing)
BATTLE_MODE_CONFIG = battleSector=0,0,0,Physics.smsec;battleSector=15,15,15,Physics.smsec;countdownRound=300;countdownStart=30;maxMass=-1;maxDim=300;maxMassPerFaction=-1; //General config for battlemode
BATTLE_MODE_FACTIONS = [TeamA, fighters, 500,500,500, 0.5,0.1,0.9];[TeamB, fighters, -500,-500,-500, 0.5,0.9,0.2];[TeamFFA,ffa, 0,0,-500, 0.2,0.9,0.9];[Spectators,spectators, 0,500,0,0.8,0.4,0.8] //Faction config for battlemode
LEADERBOARD_BACKLOG = 24 //time in hours to keep leaderboard backlog (the more time, the more data has to be sent to client)
ANNOUNCE_SERVER_TO_SERVERLIST = false //announces the server to the starmade server list so clients can find it. Hostname must be provided for HOST_NAME_TO_ANNOUNCE_TO_SERVER_LIST!
HOST_NAME_TO_ANNOUNCE_TO_SERVER_LIST =  //this must be a valid hostname (either ip or host, e.g. play.star-made.org)
SERVER_LIST_NAME = NoName //max length 64 characters
SERVER_LIST_DESCRIPTION = NoDescription //max length 128 characters
MISSILE_DEFENSE_FRIENDLY_FIRE = true //can shoot down own or missiles from own faction
USE_DYNAMIC_RECIPE_PRICES = true //use recipe based prices (the price is the price of the parts it is made out of in crafting)
MAKE_HOMBASE_ATTACKABLE_ON_FP_DEFICIT = true //Home bases become attackable if a faction's Faction Points are in the minus and the faction doesn't own any territory
PLANET_SPECIAL_REGION_PROPABILITY = 240 //one out of thisValue chance of a special region spawning per planet plate (cities, pyramids, etc) (changing this value migth change some plates, but won't change any plates that are already modified by a player)
NT_BLOCKUPDATE_QUEUE_SIZE = 127 //how many blocks are sent per update. Huge placements will shot faster, but it will consume more bandwidth and is subject to spamming players
CHUNK_REQUEST_THREAD_POOL_SIZE_TOTAL = 25 //Thead pool size for chunk requests (from disk and generated)
CHUNK_REQUEST_THREAD_POOL_SIZE_CPU = 3 //Available threads of total for CPU generation. WARNING: too high can cause cpu spikes. About the amount of available cores minus one is best
BUY_BLUEPRINTS_WITH_CREDITS = false //buy blueprints directly with credits
SHOP_USE_STATIC_SELL_BUY_PRICES = false //shop buy and sell price change depending on stock (shop prices will always stay the same if true)
SHOP_SELL_BUY_PRICES_UPPER_LIMIT = 1.2 //maximum of base price a shop will want depending on its stock (e.g. max 120 credits if the normal cost is 100)
SHOP_SELL_BUY_PRICES_LOWER_LIMIT = 0.8 //minimum of base price a shop will want depending on its stock (e.g. max 80 credits if the normal cost is 100)
MINING_BONUS = 1 //general multiplier on all mining
MAX_COORDINATE_BOOKMARKS = 20 //coordinate bookmarks per player allowed
ALLOWED_STATIONS_PER_SECTOR = 1 //how many stations are allowed per sector
STATION_CREDIT_COST = 50000 //how much does a station or station blueprint cost
SKIN_SERVER_UPLOAD_BLOCK_SIZE = 256 //how fast should skins be transferred from server to clients (too high might cause lag) [default 256 ~ 16kb/s]
ALLOW_OLD_DOCKING_BEAM = false //enables old docking beam
WEIGHTED_CENTER_OF_MASS = true //if on, the center of mass for each structured will be calculated based on block mass. On 'false', the center of mass is always the core position
SECURE_UPLINK_ENABLED = false //dedicated servers can be registered on the StarMade registry
SECURE_UPLINK_TOKEN =  //uplink token, provided when registering a dedicated server
USE_STRUCTURE_HP = true //ships and other structures use the hitpoint system. if off, a ship will overheat when the core gets taken out (old)
SHOP_REBOOT_COST_PER_SECOND = 100.0 //Cost to reboot a ship at a shop (per second it would take to reboot in space)
SHOP_ARMOR_REPAIR_COST_PER_HITPOINT = 1.0 //Cost to repair a ship's armor at a shop
MAX_SIMULTANIOUS_EXPLOSIONS = 10 //the more the faster explosions at the same time are executed (costs in total about 20MB RAM each and of course CPU because it's all threaded) (10 is default for a medium powered singleplayer)
REMOVE_ENTITIES_WITH_INCONSISTENT_BLOCKS = false //This will remove ships that have blocks that are normally disallowed (e.g. space station blocks on ships)
OVERRIDE_INVALID_BLUEPRINT_TYPE = true //If a loaded blueprint is invalid, it's type will be overridden
FACTION_FOUNDER_KICKABLE_AFTER_DAYS_INACTIVITY = 30 //Days of inactivity after which a founder may kick another founder
DEBUG_BEAM_POWER_CONSUMPTION = false //server will send notifications on power consumed (not counting power given from supply) on server (costs performance, so only use for debugging)
DEBUG_BEAM_TICKS_DONE = false //server will send notifications on ticks done on server (costs performance, so only use for debugging)
DEBUG_BEAM_POWER_PER_TICK = false //server will send notifications on beam power per tick on server (costs performance, so only use for debugging)
DEBUG_MISSILE_POWER_CONSUMPTION = false //server will send notifications on missiles on server (costs performance, so only use for debugging)
BLUEPRINT_SPAWNABLE_SHIPS = true //enables or disables blueprint spawning from item
BLUEPRINT_SPAWNABLE_STATIONS = true //enables or disables blueprint spawning from item
USE_OLD_GENRATED_PIRATE_STATIONS = false //enables spawning of old style pirate stations
CARGO_BLEED_AT_OVER_CAPACITY = false //cargo is ejected every minute if storage is at over capacity
ALLOW_PERSONAL_INVENTORY_OVER_CAPACITY = false //Personal Inventory can go over capacity
Clientconfig (settings.cfg)
C_USE_NEW_PLAYER_MODEL_ = true
CONTROL_HELP = false
C_MOUSE_BUTTOM_SWITCH = false
G_RESOLUTION = 1920 x 1080
G_FULLSCREEN = true
G_VSYNCH = false
G_FOV = 110.0
G_MAX_SEGEMENTSDRAWN = 4000
G_DRAW_SURROUNDING_GALAXIES_IN_MAP = false
HIT_INDICATION_NUMBERS_LIFETIME = 0.6
D_LIFETIME_NORM = 30
G_WINDOWED_BORDERLESS = false
S_SOUND_SYSTEM_ENABLED = true
S_SOUND_ENABLED = true
S_SOUND_VOLUME_GLOBAL = 10
N_TRANSMIT_RAW_DEBUG_POSITIONS = false
C_SELECTED_JOYSTICK = 0
ICON_BAKERY_BLOCKSTYLE_ROTATE_DEG = -90.0
MOUSE_WHEEL_SENSIBILITY = 7.0E-4
BUILD_MODE_SHIFT_SPEED = 25.0
ORBITAL_CAM_SPEED = 0.5
G_DAMAGE_DISPLAY = 600
G_STAR_COUNT = 4096
G_VBO_BULKMODE_SIZE = 4
G_DRAW_FOG = false
G_DRAW_BEAMS = true
G_DRAW_EXHAUST_PLUMS = true
D_INFO_CONTROLMANAGER = false
D_INFO_SHADER = true
T_ENABLE_TEXTURE_BAKER = false
D_INFO_DRAW_TIMES = false
D_INFO_DRAW_SPACE_PARTICLE = false
G_SPACE_PARTICLE = true
G_DRAW_MOUSE_COLLISION = false
G_ATMOSPHERE_SHADER = normal
G_SHADOW_QUALITY = BEST
G_DRAW_SHIELDS = true
G_DRAW_WATER = true
G_DRAW_BACKGOUND = true
G_WATER_USER_MIPMAPS = false
E_NAVIGATION_FILTER = 877
G_DRAW_ENTITIES = true
G_FRUSTUM_CULLTING = true
G_DRAW_EFFECTS = true
G_SHADER_RELOAD = false
G_FRAMRATE_FIXED = -1
G_SHADERS_ACTIVE = true
G_DEBUG_DRAW_GRID = false
G_DEBUG_DRAW_LINES = true
F_FRAME_BUFFER_USE = false
T_TERRAIN_DRAW = true
T_TERRAIN_WIREFRAME_DRAW = false
G_CULLING_ACTIVE = true
G_TEXTURE_ARRAYS = false
G_AUTO_NORMALIZATION = true
G_DRAW_BY_SIDES = true
G_WIREFRAMED = false
G_NORMAL_MAPPING = false
G_TEXTURE_COMPRESSION_BLOCKS = false
G_TEXTURE_ARRAY_COMPRESSION = true
G_TEXTURE_ARRAY_MIPMAP = true
G_TEXTURE_MIPMAP = true
G_SHADOWS = true
G_SHADOWS_VSM = false
S_PAUSED = false
S_SETTINGS_SHOW = false
MINIMAP_MODE = SMALL
SECTOR_INDICATION_MODE = INDICATION_ONLY
S_KEY_ALLOW_DUPLICATES = true
G_PROD_BG = true
G_PROD_BG_QUALITY = 4096
G_TEXTURE_PACK = Default
GIF_WIDTH = 640
GIF_HEIGHT = 640
GIF_FPS = 15
GIF_GUI = false
G_DEBRIS_THRESHOLD_MS = 4
G_TEXTURE_PACK_RESOLUTION = 256
S_INITIAL_SETTING = Single Player
S_GAME_MODE = Sandbox
G_BONE_ANIMATION = true
P_NT_DEBUG_ACTIVE = false
P_PHYSICS_DEBUG_ACTIVE_OCCLUSION = false
P_PHYSICS_DEBUG_ACTIVE = false
P_PHYSICS_DEBUG_MODE = 0
G_DEUBG_LINE_DRAWING_ACTIVATED = false
G_WINDOW_START_POSITION = center
G_DRAW_GUI_ACTIVE = true
G_DRAW_NO_OVERLAYS = false
G_PARTICLE_SORTING = true
P_PHYSICS_ACTIVATED = true
G_SMOKE_QUALITY = false
G_DRAW_STARS = true
G_DRAW_PASTE_PREVIEW = true
G_USE_SPRITE_VBO = true
S_TUTORIAL = false
G_AUTOSELECT_CONTROLLERS = true
S_INFO_DRAW = FPS_AND_PING
G_VBO_FLAG = STATIC
N_LAG_COMPENSATION = true
N_IGNORE_SAVED_UPLINK_CREDENTIALS_IN_SINGLEPLAYER = true
N_SERVER_TIME_UPDATE_FREQUENCE = 2000
M_TEXTURE_PACK_CONFIG_TOOL = ./data/textures/block/Default/64/
G_MULTI_SAMPLE = 0
G_MIPMAP_LEVEL_MAX = 3
M_MOUSE_SENSITIVITY = 0.5
G_HIT_INDICATION_SIZE = 1.0
F_BLOOM = false
F_BLOOM_INTENSITY = 0.4
S_MOUSE_LOCK = true
G_DRAW_ADV_BUILDMODE_BLOCK_PREVIEW = true
G_DRAW_ALL_CONNECTIONS = false
G_SHOW_PURE_NUMBERS_FOR_SHIELD_AND_POWER = false
S_FLIP_HOTBAR_MOUSEWHEEL_WITHOUT_CTRL = true
S_ZOOM_MOUSEWHEEL = SLOTS
S_MOUSE_SHIP_INVERT = false
S_MOUSE_ALL_INVERT = false
S_USE_REGION_SIGNATURE_TEST = false
G_PREVIEW_TO_BUILD_BLOCK_TEST = false
S_EXIT_ON_ESC = false
G_USE_HIGH_QUALITY_ACKGROUND = false
G_DRAW_POPUPS = true
G_USE_VBO_MAP = true
G_DRAW_JUMP_OVERLAY = true
G_MAG_FILTER_LINEAR_BLOCKS = false
G_MAG_FILTER_LINEAR_GUI = false
G_MAX_BEAMS = 1024
SEGMENT_REQUEST_BATCH = 32
CLIENT_BUFFER_SIZE = 65536
ICON_BAKERY_SINGLE_RESOLUTION = 150
G_RAYTRACE_COUNT = 256
ICON_BAKERY_SINGLE_ICONS = false
G_MUST_CONFIRM_DETACHEMENT_AT_SPEED = 50.0
G_USE_SHADER4 = true
O_OCULUS_RENDERING = false
G_USE_VERTEX_LIGHTING_ONLY = false
CLIENT_TRAFFIC_CLASS = true
G_DRAW_SELECTED_BLOCK_WOBBLE = true
G_USE_TWO_COMPENENT_SHADER = false
A_FORCE_AUTHENTICATION_METHOD = -1
MIN_FFA = 2
B_UNDO_REDO_MAX = 30
N_ARTIFICIAL_DELAY = 0
SEGMENT_PIECE_QUEUE_SINGLEPLAYER = 32767
G_MAX_MISSILE_TRAILS = 128
G_USE_OCCLUSION_CULLING = false
C_AUTOASSIGN_WEAPON_SLOTS = true
G_DRAW_NT_STATS_OVERLAY = false
CLIENT_CUSTOM_TEXTURE_PATH = ./customBlockTextures
SECRET = none
USE_OPEN_AL_SOUND = true
LIMIT_FPS_UNFOCUS = true
GUI_USE_DISPLAY_LISTS = false
USE_GL_MULTI_DRAWARRAYS = true
USE_GL_MULTI_DRAWARRAYS_INITIAL_SET = true
CHAT_CLOSE_ON_ENTER = true
A_FORCE_LOCAL_SAVE_ENABLED_IN_SINGLE_PLAYER = false
G_SHIP_INFO_ZOOM = 0
G_SINGLEPLAYER_CREATIVE_MODE = false
G_DRAW_LAG_OBJECTS_IN_HUD = false
G_SHOW_SYMMETRY_PLANES = true
LANGUAGE_PACK = english
Java Version (64bit)

java version "1.8.0_65"
Java<TM> SE Runtime Environment <build 1.8.0_65-b17>
Java HotSpot<TM> 64-Bit Server VM<build 25.65-b01, mixed mode>

Event Timeline

Croquelune updated the task description. (Show Details)Jan 7 2016, 12:05 AM
Croquelune changed Category from none/unspecified to Textures.
Croquelune set Video Card Model to NVIDIA GeForce GTX 960.
Croquelune edited Serverconfig (server.cfg). (Show Details)
Croquelune edited Clientconfig (settings.cfg). (Show Details)
Croquelune changed Affected Gamemode(s) from none/unspecified to Single and Multi.
Croquelune changed Reproducible from uncertain to Yes.
Croquelune set Last tested (version) to v 0.1954 ; build 20151231_111156.
Croquelune edited Steps to reproduce. (Show Details)
Croquelune added a subscriber: Croquelune.
Croquelune created this task.
Restricted Application added a project: Issue Navigation. · View Herald TranscriptJan 7 2016, 12:05 AM
Croquelune set Task Type to Bug.Jan 7 2016, 12:16 AM
Croquelune set OS-Specific to No.
Croquelune set Hardware-Specific to No.
Croquelune set Video Card Vendor to uncertain.
Croquelune renamed this task from BYPASS : Abilty to rotate blocks that should be unrotatable or rotated texture's problem the return to Abilty to rotate blocks that should be unrotatable or rotated texture's problem the return.
Croquelune changed Video Card Vendor from uncertain to NVIDIA.Jan 7 2016, 1:37 AM
Croquelune changed Video Card Model from NVIDIA GeForce GTX 960 to GeForce GTX 960.
Croquelune changed Affected Gamemode(s) from Single and Multi to Singleplayer.Jan 7 2016, 10:10 PM
Croquelune changed Reproducible from Yes to Not on purpose.
Croquelune edited Steps to reproduce. (Show Details)

Well I wasn't able to do it again during my yesterday session on the same single server, so it's not totally reproductible on purpose. But if it's occur during a session, you can reproduce it without restriction during the whole session by following the steps.

Not also I had already did it 1-2 weeks ago on my other single mode server, where it happened during 2 differents sessions by placing power capacitor. At that moment I didn't understood how and why they were in wrong turn.

I post the log, focus on gravity unit, build block, advanced armor and power capacitor block. They were the one I tried and turned successfully.

(I hope it's the good one, but by flying it I found a suspicious build block look bottom so I suppose it's this one, the time match too ; anyway if it's not him it should be the 4)

Croquelune updated the task description. (Show Details)Jan 7 2016, 10:41 PM
Croquelune edited Detected video (Graphicsinfo.txt). (Show Details)
Croquelune edited Serverconfig (server.cfg). (Show Details)
Croquelune edited Clientconfig (settings.cfg). (Show Details)
Croquelune edited Java Version (64bit). (Show Details)Jan 7 2016, 10:50 PM
Croquelune edited SMC-Report. (Show Details)
Croquelune updated the task description. (Show Details)Jan 7 2016, 11:21 PM
lancake added a subscriber: lancake.Jan 8 2016, 5:04 PM

-Feedback-

We had this issue indeed reported on redmine, but we also had it on phabricator. However it was considered fixed: T258

Usually I would re-open the old one and reject this but since your steps to reproduce don't work for me, and you can't get it again, it's probably better to keep it open especially since this task contains a lot of information.

Got some questions though, might help us to figure what caused it for you:

  • The original issue, when you were placing those power capacitors:
    • Were you in build mode or astronaut mode?
    • Did you do that on a ship or a station?
    • Were you in creative mode?
    • Was that grey wedge in a multi-slot or as a single item slot?

"Mirror cubes" used to mirror unrotatable bocks, which changed their rotation but that was fixed.
What I found is that rotating templates, also rotates the unrotatable block but I'm not sure if that's the only issue remaining, considering your "Steps to reproduce" doesn't involve templates at all.

lancake shifted this object from the S1 Public space to the S3 Starmade space.Jan 8 2016, 5:04 PM
lancake changed the visibility from "Custom Policy" to "Public (No Login Required)".
lancake changed the edit policy from "Task Author" to "Starmade (Project)".
lancake changed Category from Textures to Engine.
lancake set First occurrence (version) to 0.1954.
lancake changed Last tested (version) from v 0.1954 ; build 20151231_111156 to 0.19541 (Dev).
lancake claimed this task.

A tool to help you see the rotation, is to hold Right shift when looking at a block. It will show you the rotation between brackets like [FRONT]

lancake triaged this task as Low priority.
Croquelune added a comment.EditedJan 8 2016, 8:30 PM

Thanks for the right shift tips. Let me add I play on 2 single mode server. Epsilon, the one where I play hardcore so I never play creative mode over there ; and Test, the one where I go to play creative mode and switch to crafting just in order to test things and split multislot (easier way to work & abiltiy to read block info). Note also I use MusicMade mod on both server.

So to answers your questions.
I notice that bug first in Epsilon when I was building a station on a Terra planet segment (planet), [using build block mainly and crafting mode only] but not right away. I notice it few sessions later that some power capacitors were in wrong side and I didn't identified the way to reproduce it yet. At that moment I didn't understood how that could happen and I suspected 1st the screw view because i work a lot from the top of structures, then try to CTRL+mousewheel but nothing.
They were differents game sessions and completing my power structure took me severals one that why I guess it happened at least 2 times on that server but no certitude on that.

I clairly identified on Test in buildblock and creative mode modify my station where again by placing power capacitor I saw a switch of orientation between 2 building waves. I tried to find out how that happen and found the gravity step.
For the wedge it were multi-slot (cause of creative mode) grey armored wedge. but fact is I tried only the same orientation than the gravity block (looking bottom) so may if switch to an other orientation proper to the wedge it would not reproduce.
So you might focus on the gravity block because it was the one were I use to reproduce it with power capacitor, build block, and grey armored block on pictures.

I really hope it's this log, cause i clean the others. But anyway, since it's already happen twice, I'm quite confident to be confront to it again and now I'm more organized with logs & all. i archive each sessions in case of.

Croquelune added a comment.EditedJan 11 2016, 11:21 AM

Here again. As you can see I succeed to unpurposely rotate the orange armor block. Don't know how.

When I saw that I tried to do the gravity block trick but nothing this time. But I remember I used the advanced build mode for the 3 cases reported and also the copy paste option ; it may involved.

Unluckily I kept the 19 logs + 3 serverlogs + threaddump of this game session but it's seem that the interested ones were overwrited around 11h43 during my lightspeed travel (I began to play at ~7h). Any way to allow to keep more logs ?

I found out that mirror symmetry still mirrors unrotable blocks, but only on the blue symmetry. It's fine for red or green.
my "FRONT" blocks get mirror to "BACK" on the opposite blue side with mirror cubes enabled.

Not sure if you encountered the same issue.

I found out that mirror symmetry still mirrors unrotable blocks, but only on the blue symmetry. It's fine for red or green.
my "FRONT" blocks get mirror to "BACK" on the opposite blue side with mirror cubes enabled.

Not sure if you encountered the same issue.

For now it's probably enough, let's take a look at it again once both of them are fixed.

lancake changed Affected Gamemode(s) from Singleplayer to Single and Multi.Jan 22 2016, 8:55 PM
lancake changed Reproducible from Not on purpose to Yes.
lancake changed Last tested (version) from 0.19541 (Dev) to 0.19549 (Dev).
lancake edited Steps to reproduce. (Show Details)
lancake edited Tester information (Internal use only). (Show Details)
lancake moved this task from Feedback to Open / Validated on the Issue Navigation board.
lancake renamed this task from Abilty to rotate blocks that should be unrotatable or rotated texture's problem the return to Abilty to rotate blocks that should be unrotatable.
lancake changed the task status from Open to In Queue (Game).

-Confirmed-

Restricted Application edited projects, added Starmade, Game Development; removed Issue Navigation. · View Herald TranscriptJan 22 2016, 8:55 PM
lancake edited Steps to reproduce. (Show Details)Jan 22 2016, 8:56 PM
lancake edited Steps to reproduce. (Show Details)

Oh really ? It's weird because in contrast to you the blue plan is the only one which I'm 100% sure to haven't use in the 3 cases described above (nor for mirroring or alignment) ; in opposite to the red (the one I use most for alignment) and the green (sometimes too but less often.

I can assure you to 100% that I used sometime the red one to check alignment and sometime the green one to check extremity alignment but almost never applied the mirrored block.

Other things I'm quite sure is I used the copy-paste (with some rotations sometimes) in the session of the 3 cases above so might some commons mechanics from copy-paste option and mirror plan are involved.

But last few days it didn't happen to me.

Sorry, my bad I made confusion between the blue symmetry and the green one. So yes I used very often the blue one and never the green one.
I confirm template method rotation too still occure at 0.19556.

In contrast, the initial step describe with gravity block never happened again ; it might be unintentionally fixed since the cursor changed a lot since the first occurrence of that bug.

Croquelune added a comment.EditedFeb 26 2016, 9:17 AM

Last test version 0.19563 / Single player / Creative mode

Look likes fixed for the XY-plane (blue plane) method.

But still be able to rotate with the copy/paste + rotation one.

EDIT : But strangely the prerender cubes from the copy seems respect the good side, even when rotated.

Multiplayer
v 0.19609



  1. Mirror cubes + XY-plane
  2. Template rotation
  3. The 3rd unknown method

Some fresh news about that one, do you remember that unidentified method ? (The one where I suspected the gravity block and that implied neither the XY-plan nor the copy-paste rotation). Well it still has just occurred again.

Yet again I have really no idea how, when and why that rotation apply.

Few things I can assume about that 3rd method :

  • It's a real new born server, where I play mainly in crafting mode. I just launch 3 sessions in all : the 1st one = creation+exploration /save+log out/ the 2nd one = planet colonisation+salvation+start a baby base /save+log out/ the 3rd one = salvation+base.
  • I have never use plane on that one (so it's not method 1)
  • I have never use neither copy-paste NOR block's rotation (so it's not method 2)
  • If you ever see by any chance in the logs one of these three things (plane or copy-paste or block rotation) applied, be aware that they were applied without my knowledge and will. So it will a 1st element to investigate because I am adamant I did not use any of these three things since I started the server.
  • At the moment it's already happen 3 times in 3 different server.
  • The pre-rendering is always in good side even when it put block in wrong side.
  • I tried to build as astronaut & build block and both applied the wrong side.
  • It happen single (past experience) & multiplayer mode (this one)

Few correlations :

  • 1st occurrence was on planet sector / 2nd occurrence (gravity block's one) was on station / 3rd occurrence (this one) was on planet sector (might it be specific to station only and not ship ?)
  • It always impacted power generator and power capacitor on the 3 occurrence at 100% but not necessary the other unrotable blocks (i.e Thruster block stayed on good side [front]).
  • I have used both method : build block build and astronaut build in this 3 occurrence.


The two power capacitor blocks on the background + pre-rendering face to the FRONT (good side) but the 3 others on the foreground face TOP (wrong side)


It occurred just after I had crafted and put that factory enhancer which face TOP too. The factory enhancer are bounded to a basic factory


Power capacitor face TOP too after that.


But when I select the Thruster block in hotbar the orientation arrow go back to FRONT (good side).


But when I select again Power capacitor or...


... Power generator, the orientation arrow go back to TOP (wrong side)


Power generator TOP orientation too.

Timeline :

  • Some power capacitors FRONT were already present on the embryo of base
  • Spent lot of time to salvage (craft mode)
  • Craft some factory enhancer
  • C on Basic factory and put the factory enhancer TOP
  • Then switch on creative mode
  • Put some Power capacitor, they were put TOP too.

I always enjoyed the ability to rotate the blocks.
This a bug?

I always enjoyed the ability to rotate the blocks.
This a bug?

I enjoy it too. But since that rotation isn't handle by a regular and clear way, it could be produced unwwillingly and unawarely by players when building and then mess their works. So yes it is.

Croquelune added a comment.EditedJun 7 2016, 11:54 AM

Hey, about the 3rd mistery method, it should be hide somewhere there :

[2016-06-06 17:16:54] [SEGCONTROLLER][ELEMENT][REMOVE] PICKING UP: (9, 7, 7)[Water]o[FRONT][inactive][25hp][BLOCK]; orientation: 0; FRONT
[2016-06-06 17:16:54] [SEGDRAWER] not Disposed LEFT: 4/5
[2016-06-06 17:16:54] [DRAWER][WARNING] update took 18 ms
[2016-06-06 17:16:54] [SEGDRAWER] not Disposed LEFT: 4/5
[2016-06-06 17:16:55] [CLIENT][BLOCKORIENTATION] BLOCK ORIENTATION FOR Water: FRONT
[2016-06-06 17:16:56] DRAWING DEBUG: 86; ; 0; 0; 86; 
[2016-06-06 17:16:56] [SINGLE_BLOCK_DRAWER] CHECKING FOR ERROR
[2016-06-06 17:16:56] [GETNEXTTONEAREST] SIDE: BOTTOM: (2.0791626, -0.5, -1.0654297); (2, 0, -1)
[2016-06-06 17:16:56] [CLIENT][EDIT] PLACING AT (10, 7, 7)[NONE]o[FRONT][active][0hp]; size: (1, 1, 1) --> (1, -1, 1); orient 2(TOP) -map-> 2 PHY: {RigBExOrig@2095788421([CCS|CLI Ship[Dropship WIP 2](8)])}
[2016-06-06 17:16:56] adding new element to Sz at (10, 7, 7)[NONE]o[FRONT][active][0hp], type 86
[2016-06-06 17:16:57] [CLIENTPROVIDER] Request for Planet(44)[s34]Planet  (r217)[10000000hp] took 12ms
[2016-06-06 17:16:58] [SEGDRAWER] not Disposed LEFT: 1/3
[2016-06-06 17:16:58] [ENTITIES] removed object from loaded state [CLIENT ReSector(149)true; (1, 2, 3); ]; 149
[2016-06-06 17:16:58] [DELETE][Client(1)] Sendable 149([CLIENT ReSector(149)true; (1, 2, 3); ]) Physically DELETING DONE and Notified!
[2016-06-06 17:17:04] [GETNEAREST] SIDE: BACK(1): (2.1404114, -0.77404785, -1.5000305); (2, -1, -1)
[2016-06-06 17:17:04] [SEGCONTROLLER][ELEMENT][REMOVE] PICKING UP: (10, 7, 7)[Water]o[TOP][inactive][25hp][BLOCK]; orientation: 2; TOP

^^^ It started precisely there, When I put that water block ^^^

Look, log state water block was place at 10,7,7 as FRONT but when I just remove it few seconds later it remove a water block placed as TOP.

I was in Multiplayer, build mode in ship, creative mode, with red plan activated.
I just remember had remove a block and then put that water block through the red plan surface
I manipulated thruster block right before and when I switched to water block the orientation was kept to TOP, I placed the block and it was placed as TOP, then just removed it. Then TOP was the default orientation for all unrotatable block. It's like if the front default switched as top default. I tested it with some others unrotatable blocks and then closed SM.

, ,

After reboot it solve again the problem, no idea why it occures sometime. But when it's appear during a session it's there for the whole session.

logic blocks still get rotated in copy/paste mode. Don't need to do anything special besides rotating it.

I just got a button with orientation BOTTOM out of nowhere. No copy/paste or template and no symmetries (Although I did some copy/paste afterwards). It just happened. I think I was rotating display modules before I placed it. Not sure if that's related. Anyway, here's the related part of my log:

[2017-01-13 20:03:32] [CLIENT] PLACING MULTISLOT: 0 -> 666
[2017-01-13 20:03:32] [GETNEXTTONEAREST] SIDE: LEFT: (-117.5, 6.6468754, -1.9495478); (-117, 7, -2)
[2017-01-13 20:03:32] [CLIENT][EDIT] PLACING AT (-102, 23, 14)[NONE]o[FRONT][inactive][100hp]; size: (1, 1, 1) --> (-1, 1, 1); orient 3(BOTTOM) -map-> 3 PHY: {RigBExOrig@107774495([CCS|CLI SpaceStation[ENTITY_SPACESTATION_gamesaucer_1484315764151(8)]])}
[2017-01-13 20:03:32] adding new element to Yt at (-102, 23, 14)[NONE]o[FRONT][inactive][100hp], type 666
[2017-01-13 20:03:35] [SERVER][AI] WARNING: ship has been too long in this sector while wanting to move (stuck?). warping towards goal
[2017-01-13 20:03:35] [GETNEAREST] SIDE: FRONT(0): (-117.96974, 6.758194, -1.499999); (-118, 7, -2)
[2017-01-13 20:03:35] [SEGCONTROLLER][ELEMENT][REMOVE] PICKING UP: (-102, 23, 14)[Button]o[BOTTOM][inactive][15hp][BLOCK]; orientation: 3; BOTTOM
[2017-01-13 20:03:36] [SERVER][UNIVERSE] LOADING SECTOR... (11, 3, 1)
[2017-01-13 20:03:36] POPULATE EMPTY (11, 3, 1)
[2017-01-13 20:03:36] [SERVER] sector change is a jump. not normalizing object position
[2017-01-13 20:03:36] [SERVER] SET DESIRED JUMP POS TO (-525.0, 342.0, -108.0)
[2017-01-13 20:03:36] [REMOTETRANFORM][WARP] Server(0) SETTING WARP POSITION from (-525.0, 342.0, -44.0) TO (-525.0, 342.0, -44.0) for Ship[[SysFleet] MINING 7 Member #34 - Mining C140-9](243)
[2017-01-13 20:03:36] [SERVER][SECTORSWITCH] Requested gravity removal: Ship[[SysFleet] MINING 7 Member #34 - Mining C140-9](243)
[2017-01-13 20:03:36] [SERVER][SECTORSWITCH] ENTITY Ship[[SysFleet] MINING 7 Member #34 - Mining C140-9](243) changed sector from Sector[23](12, 3, 1) -> Sector[251](11, 3, 1); Trans: (-525.0, 342.0, -108.0) -> (-525.0, 342.0, -44.0); Physical: (-525.0, 342.0, -44.0)
[2017-01-13 20:03:36] [CLIENT] UPDATING SECTOR FOR Ship[[SysFleet] MINING 7 Member #34 - Mining C140-9](243) FROM 23 TO 251
[2017-01-13 20:03:36] WARNING while checking neighbor: null; [CLIENT ReSector(5)true; (13, 2, 2); ];    251; 5
[2017-01-13 20:03:36] [CLIENT] PLACING MULTISLOT: 0 -> 666
[2017-01-13 20:03:36] [GETNEXTTONEAREST] SIDE: LEFT: (-117.5, 6.5081215, -2.4136915); (-117, 7, -2)
[2017-01-13 20:03:36] [CLIENT][EDIT] PLACING AT (-102, 23, 14)[NONE]o[FRONT][inactive][15hp]; size: (1, 1, 1) --> (-1, 1, 1); orient 3(BOTTOM) -map-> 3 PHY: {RigBExOrig@107774495([CCS|CLI SpaceStation[ENTITY_SPACESTATION_gamesaucer_1484315764151(8)]])}
[2017-01-13 20:03:36] adding new element to Yt at (-102, 23, 14)[NONE]o[FRONT][inactive][15hp], type 666

AndyP changed the task status from In Queue (Game) to In Queue.Mar 10 2017, 5:08 PM
Restricted Application added a project: Engine. · View Herald TranscriptMar 10 2017, 5:08 PM
AndyP moved this task from Backlog / Unclassed to General on the Engine board.Mar 15 2017, 6:43 PM
AndyP edited projects, added Engine (General); removed Engine.
AndyP moved this task from General to Building on the Engine board.Mar 16 2017, 2:17 PM
AndyP edited projects, added Engine (Building); removed Engine (General).