Это незавершённая статья. Она содержит неполную и/или неточную информацию. Недостающий контент будет добавлен позже.
Необходимо:Перевести на русский язык все списки изменений для старых версий
Добро пожаловать на страницу списка версий! На этой странице содержится полный перечень всех публичных вышедших или предстоящих обновлений игры. Вниз — по порядку убывания. Текущее публичное обновление можно скачать на официальном сайте. Старые версии можно скачать здесь.
Глобальное Обновление (Alpha 0.6) — крупное публичное обновление, вышедшее 25 января 2019 года. Предыдущая публичная версия игры - Alpha 0.5.8. На момент выпуска, является самым крупным и стабильным когда-либо выпускающимся обновлением. Основные темы обновления — игровой процесс, графика и улучшение производительности игры.
Новое помещение: Газовый контрольно-пропускной пункт Лёгкой зоны содержания
"Rewired" (аддон для Unity) для поддержки контроллеров и лучшего контроля ввода данных
Обновлена система интеракции. Система интеракции заменена той, работа которой более похожа на оригинал, но с улучшенным, более доработанным и настраиваемым контролем. Теперь можно фокусироваться на выживании вместо попыток кликнуть на объекты с предельной аккуратностью.
Тонны оптимизаций и исправлений багов
Alpha 0.4 | Список изменений
10 марта 2017
Alpha 0.4c | Основные изменения
InteractableObject now adds Highlighter component and removes it when done, to avoid tons of Update() calls. Each highlighter component was calling Update() even with no work to do, causing a lot of wasted ms per frame (anywhere from 50-150 highlighter components so far which would have increased with each door and new interactable added)
You can no longer press the sprint button to lose stamina without moving
Decreased sunlight intensity in Store Room from 3 to 2
Slightly decreased warning light intensity in storage room
Added crouch speed parameter, player is now slower while crouching
Upgraded post processing from version 1 to version 1.0.1
Created a new version of the containment light, ContainmentLight_Glass with glass instead of a metal frame
Replaced the starting room containment lights with the new variant as step 1 of the upgraded look
BehaviorTimer is now a MonoBehavior and handles time-keeping internally. Other scripts just need to call CheckTimer() to get whether the timer has expired or not.
Added Enable() and Disable() methods to BehaviorTimers, so that they can be switched off when not in use
TeslaGate is slightly more dangerous now - increased the charge range slightly and decreased the charge timer by 15%
You can no longer lose stamina when holding run button while walking crouched
Changed quality settings names and options to make it more transparent to the player what they are. Only lowest (no shadows) lacks shadows
Tesla gate - kill field is now enabled / disabled independent of attack sound.
Much shorter time kill field is active
Tesla Gate now resets OnDisable(), for instance when swapping dimensions
Elevator now waits for the door to open before registering input from a button again. This fixes a bug that caused the elevator to become unusable if the button to go to a different floor was clicked while the door was opening
Doors are now not 'open' until the open function completes, and 'closed' until the close function completes
Elevator now clears list of entities to teleport before populating them again, to avoid dangling references and the player being teleported even if outside of the elevator
Fixed MouseLook not resetting on a new game, so player would be facing direction when quitting / dying
Player now starts facing the containment chamber
Doubled time in airlock from 5 to 10 seconds, so player feels less rushed
give_item console command now takes only an item_name parameter and returns a single item instance
Tried to create give_items command, realized that the DevConsole executes the give_item command as well since it has a similar string, will need to rewrite the console.
Increased spawn chance for t-shaped lockroom slightly (from 10% to 20%)
BodyText for TextViewer now correctly scales with aspect ratio (instead of being cut off). TextViewer should work better on different resolutions.
World Gen System
Audio – Purchased and implemented Master Audio: AAA
Highlighting System – Purchased and implemented Highlighting System
Started supporting Linux and will do my best to keep that build in sync with the Windows build
Added a text reader to help people read the documents on low-resolution screens and lower resolution settings
Pathfinding grids now initialize in a smarter fashion when returning from SCP-1499’s dimension, so it should take less time for the facility to load back in
New post-processing effect – bloom! Thanks to Unity’s upgraded Post Processing Stack
Started turning room furniture into reusable prefabs to more easily create rooms in the future
Did some lighting work in several rooms
Added a possibility for SCP-173 to despawn for a period of time to give the player some breathing room
Added a music system to track dimension, area, and event music. Event music is prioritized over area music, with dimension music as a fallback. That way the correct music will always be playing and then the audio manager will switch to the next best as the event ends, player exits the area, etc.
All loading screens from the original game are in and working
Alpha 0.3 | Список изменений
Alpha 0.3.1a | Основные изменения
Some fixes / changes to SCP-1499-1 instances to make them scarier / more of a threat
Instances now run when attacking
Instances that pause when the player is within attack range now switch to attacking the player
Increased stopping distance so the instances are no longer pushing their bodies into the player
Added a movement delay to simulate an attack animation; if they attack they will wait to move until the attack delay is expired
Sometimes when colliding with them they will start attacking you. This is a bit wonky because Unity's default
CharacterController doesn't like to play with physics. Will be streamlined when the CharacterController is updated
Player's vision now always goes black upon death
Better handling of vision going black when switching dimensions
Added a very crappy healthbar that responds to 'player health changed' message
Created a new data structure, Mapped2DGrid, to use between classes that need a mapped 2d grid. This class abstracts the grid behavior from 1499's grid loaded and allows it to be used anywhere that a grid is needed with quick two-way lookup (position -> element and element -> position)
New GetOffset() extension method for VectorXZ
Starting dimension now calls its visuals handler at game start
Added PlayerTrigger component to call generic PlayerEnteredTrigger and PlayerLeftTrigger messages
1499 dimension now infinitely spawns terrain chunks in addition to grid chunks
Added Dynamic2DGrid. This generic class translates elements of a given type as the center of a grid moves. This class can be used by any class that needs a quick way to update a infinite grid dynamically. It even takes a Func and Action for createAction and removeAction, specifically, so that any logic that needs to be appled as elements are added and removed can be done.
GridLoader1499 and Dim1499Generator now uses Dynamic2DGrid to generate pathfinding grids and terrain chunks, respectively.
Fixed ItemOptionsPanel button being too big
ResetColor on an item sprite resets to selected color if selected
Scaled 1499 chunks to about 0.35%
Decreased sprint exhaust time from 3 seconds to 2 seconds
Increased sprint time from 5 to 6 seconds
Increased dynamic grid speed generation in SCP-1499 by doubling the number of grids and reducing their size.
Fixed algorithm for generating stat bars. New algorithm will correctly generate and place the number of UI pieces based on specified width.
Changed anchors for UI statbars so that they can be resized by dragging
Fixed camera distance shortening with inventory open - need a better solution for framerate in inventory
World generation now uses GridDirection enum instead of strings to store directions
SCP1499 dimension now regenerates the grid at the center each time so that it is regenerating where the player respawns
AI now use an AIBehavior class with an Action field to define actions, instead of an enum and a switch statement. This will make adding, creating, and sharing behaviors very simple
Changed sliders for mouse input so that the sensitivity and smoothing have much smaller ranges that make more sense
AudioCache now only loads sounds as needed, reducing game memory usage by a lot.
Build 1499-1's basic AI. There are three standard behaviors - attack, wander, and commune. Attack means attack the player. Wander uses a new algorithm to find a random point to travel to, and commune is when they stand still and can be startled into attacking you.
1499 will attack you while standing still, after playing a noise. Moving instances can be interacted with freely
Added sun field to DimensionVisualParams with methods to enable / disable sun on dimension load / unload
Created Timer classes to deal with creating timers: BehaviorTimer, VariableBehaviorTimer, and
RandomVariableBehaviorTimer. These abstract the timer logic away, so instead of three variables and if statements, one if statement and a function call with the passed deltaTime to increment / check the timer.
Added button click sound
Modified light in Store Room to be less yellow
Resized pickup models slightly to make more sense relative to each other's sizes
Increased ambient light in dimension 1499
Fixed sprite for button behind player not showing - RearButtonSprite now responds to events instead of using an update loop
Removed some extraneous code from game loader
Dimensions now use a GridLoader to load / unload grids, instead of doing it from the generator.
Added function to copy a grid config
Built the grid system for SCP1499. There are nine grids so that units can pathfind around the player; grids will be enabled / disabled as the player travels to keep memory usage low.
Removed black lines from skyboxes - set texture wrap mode to clamp
Added unity component that sends messages when a player enters and exits a grid
1499gridloader responds to PlayerEnteredGrid and PlayerLeftGrid and generates new grids as the player travels
Faster grid loading in 1499's dimension. The center grid is loaded quickly and then the others are streamed in at low latency as the player begins to travel.
Some new GameEvents: PlayerEnteredGrid, PlayerLeftGrid, PlayerStanceChanged, PlayerEquippedItem, and PlayerUnequippedItem.
Equipping / unequipping items now sends messages. GameUI responds to these messages. Added functionality to GameUI to add an overlay sprite if the equipped item is a HeadEquippable and has an overlay sprite.
Added SCP-1499 gasmask overlay sprite.
HeadEquippable now mirrors its changes from base pickups to instances
Increased spawn chance for 1499 chunks from 15% to 20%
Gave chunks a slightly randomized position inside their grid cells
Added functionality to apex path to disable grids that are in the process of initializing
Grid loaders now add and remove messages on OnEnable() and OnDisable() so that they aren't incorrectly called
1499 grids are now unloaded as the player travels through the dimension
Save button now closes options menu
Added containment door frame, containment doors finally implemented!
Containment doors placed in room2closets and 173_opt
Both dynamic door portals and static room portals now regenerate when switching back to the facility dimension
Alpha 0.2 | Список изменений
29 ноября 2016
Alpha 0.2.5 | Основные изменения
Updated to Unity 5.5!
Imported new battery model/texture from 1.3.3
Added Action to ModuleDatabaseEditor.ShowStoredAssetList, onEditAction. This allows each type of database editor to call a function on an entity if it's modified in the editor, and do some work on that object. For instance, the pickup database can mirror changes to instances of base items on a base item changing
Fixed pickup database not showing other items when one is null
Built class tree for EquippableItems and updated PickupDatabaseEditor to handle adding new equippables
Refactored PickupDatabaseEditor to use a list of class types to create new items rather than an enum. This removes needing to update the enum list whenever a new pickup type is added.
Installed SECTR core library for use in realtime visibility occlusion
Added functionality to remove null assets when fixing database
Reworked "Fix Database" for pickups. Separated out the unity asset stuff and database list stuff into respective classes.
Ensures that all references are deleted first, including any in any pickup spawners, and then assets themselves are deleted
Wrapper function public void MirrorChangesToInstances(Pickup p) to mirror changes to instances of that item, as long as it isn't an instance
Removed extraneous float from loop inside GetColliderBoundsNoAlloc()
Added new "set_volume" console command
Big update to inventory UI.
Can now drop items outside the PDA to drop them
Fixed item image breaking when dragging, made drag_image a separate object so that it is totally distinct from item images. Item images are now completely static
Renamed and reworked a lot of functions inside InventoryUI. It makes a lot more sense now and should be easier to extend and debug.
Started rework of dimension system. removed DimensionData and reworked Dimension as a ScriptableObject. Removed extraneous fields from Dimension and World, reworked the dimension creation system to be a lot more chill.
Separated generator functionality out of Dimension and put it into DimensionGenerator
Reworked how grids are initialized so that multiple dimensions can initialize grids
Entities and pickups are now children of parent transforms, so that they can be enabled / disabled when the parent dimension is enabled / disabled
Added original game skyboxes
SCP-1499 now teleports the player between dimensions
Equippable items now do their equip and unequip effects correctly! Effects are sent to the Event system for processing so that they can be paused / unpaused correctly.
Added TeleportToDimension action to teleport between dimensions
Added functions to get dimension by name and switch to dimension by name to World.
Reworked EquipmentInventory to call equip and unequip methods only after item is successfully equipped or unequipped.
Generalized a lot of behavior for ModuleDatabaseEditors to cut down on copy-paste code.
Created generic function to Handle new asset creation in an editor
Created class "StoredAssetList" to wrap data for ShowStoredAssetList(), better compartmentalizing data
Rewrote ShowStoredAssetList() and ShowLinkedAssetList() to use the new AssetListEditor class, reducing function params by 2. Removed unused param 'wrapInBox' from both functions.
Added an editor for equippable item
Added messages for dimension load and unload
Game now waits for grid reinitialization before spawning entities / allowing player to move. This is allowed through the use of coroutines
Added 1499 terrain
Added a PlayMusic action
Fixed bug that let the player open PDA when the game's pause menu was open
PDA now closes when you switch dimensions, and input is disabled until dimension switch is complete (to prevent breaking the game by trying to load multiple dimensions at the same time)
Imported a lot more sounds
Changed the audio system to work with dimensions. Now, audio sources are divided into global and dimension-specific audio. They are stored in a new class AudioSourceService, which handles producing audio sources for the AudioManager to consume. AudioSourceServices are mapped to dimensions in a dictionary, with a pointer to the current source service set on dimension switch.
In addition, repeating sounds and sound sequences are stored in a similar fashion. This allows them to be paused and unpaused - so the facility intro can pause when you go to SCP-1499's world, and unpause when you return. Sound sequences need a bit more work in order to remember at what point during the sequence's current clip the sound was stopped. For now, a sound sequence will simply restart the current clip in the sequence.
Added editor for HeadEquippable which extends EquippableItemEditor; this re-uses all equippable item code with the addition of the head equippable's sprite overlay.
20 ноября 2016
Fixed lockroom buttons
Slightly modified 173 to stick to the ground better, and compensated height slightly accordingly
Fixed archive room / armory - extended floor collider, fixed missing wall, and added missing door
Fixed lower grid in scp012 being too tall and trapping 173 downstairs inside the room
19 ноября 2016
Decreased forward interaction distance from 5 units to 3 units
Rewrote the visibility system.
There is a LookObjectController that handles all LookObject MonoBehaviour components. These components add / remove themselves from the controller OnEnable and OnDisable. The controller asks the camera each frame if they are visible or not, and sets a flag on the components. This makes the system MVC and removes that functionality from the AI and camera, keeping it inside the look object system. This will also enable multiple objects to be queried for visibility at the same time. In addition, this allows the look objects to have multiple colliders of different sizes. All memory for the system is allocated on the LookObject scripts at Awake(), so there will not be any extra GC being generated by this system.
Resized 173's controllers to fit the new system.
Rewrote the GetColliderBoundsNoAlloc function to take colliders of various sizes and subdivisions
Added a delay when the camera responds to blinking in order to allow 173 to finish its move before the player can see it
Fixed 173 pathing through the walls around doors. Started by shrinking down portals. This broke 173 in doorways sometimes, as it was not on any grid. I then implemented Apex Path's CallbackPathRequest! This now handles all path requests. If 173 starts off-grid, it finds the nearest cell and moves there, then re-generates the path. This fixes that problem. I can also use this to move 173 back to the grid if it falls of the map.
Vent into all rooms and resized grids. They will now fit standard humanoid NPCs like 173 better.
Lowered chance of t-shaped lockroom spawning from 15% to 10%
Reworked small_testing_room so that objects were separated, added missing colliders. Continued the vent and capped it so that the player can no longer see the skybox
Fixed door in 1123 room going through wall
Fixed missing collider for computer in scp012_room, added portal for stairs
Disable recursive hallway from spawning, as it is breaking maps and isn't done yet
Added vent blocker to lockroom to block skybox until I can model another vent
Fixed elevator room's wall not extended far enough in one area and thus allowing the player to see through the wall. Redid room in blender, separated upstairs mesh from downstairs (downstairs incomplete as there are no elevators yet)
Fixed bug where mustSpawn rooms were not being copied from their prefabs, so room grids were not working correctly
Changed arrival distance for 173 to 0.46 to avoid it overshooting as per Apex Path support's instructions
Rebuilt the RoomCache to be a lot smarter
Utilizes classes for each type of room
String lists for per-zone random and mustSpawn instead of instantiate a lot of copies
Cleaner and easier to read and use
Noticed that 173's attack raycast was starting from the ground. Added an AttackPoint field for an empty transform, so that it can be started from its hands instead. This avoids it being blocked from raycasting the player with its own collider, which broke attack in many cases.
Added a new button type, AirlockButton, for the t-shaped lockroom that should ensure that the doors always end with one open and one closed regardless of starting state.
LookObject system now correctly hits the corners of the colliders when raycasting. Added two more points to check, front and back center.
Increased room grid spacing from 20.2 to 20.5. This fixes some rooms extending into others
Reworked grids in several rooms to ensure that they didn't allow 173 to enter walls near doors
Reworked Doors. Door abstract class now defines only information needed to set up type of door. StandardDoor extends this, and provides all functionality for most Facility doors. Added a new bool, gridConnector, which lets the door know whether it needs to generate portals or not.
Went through all rooms, upgraded their doors to the latest version
Added a new function to Tools/Containment Breach to auto create an empty room
Fixed bug where sometimes grids would not all initialize. This is because the number of grids to initialize is compared to the number of already initialized grids; if all grids are initialized, the loader moves on to the next sequence. Sometimes the current grids would finish initializing before the rooms were all placed and initialized, which meant that there were grids that were not correctly initializing.
Added RaycastBlockBetween function to Utilities
Interaction handler now checks if there is a wall / obstacle between the player and objects behind him.
Fixed bug where dragging an item out of an equipment slot would make the item image black (image darkened incorrectly)
Increased inventory slots to 12 to fill the grid better
Did work with the PDA UI for items and equipment so that it looks better on 5:4 resolutions
Fixed bug where resizing resolutions ingame would break InventorySlots
13 ноября 2016
Upgraded to Unity 5.4.2
Cool "fan light" effect to room2 hallway with fan
Door frame mesh
Door mesh model!
GetLastLocation() function in dimension
Generic function to create hallway for a room in worldgen
Function to open and close doors behind the player
Options menu for mouse acceleration, brightness, and a couple of graphics options
PickupDatabaseEditor now uses generic ModuleDatabaseEditor.ShowStoredAssetList(), and also uses the other generic database methods
Increased 173's max speed from 15 m/s to 45 m/s
Optimized the world loading functions somewhat
Player now accelerates and decelerates
Added percentage indicator to loading screen
Resized loading screen text to be easier to read
Better glass shader
Unity's new post processing stack! Implemented AO and HDR, as well as color correction to allow true brightness changes.
Inventory UI now highlights where to put the item, not where not to
173 can now move diagonally, and faces the player after moving
Fixed 173_opt floor collider being too high
Separated broken tables in 173_opt so that they can be sucked into 106's distortion effect
Modified 173_opt - stairs railing is now a separate mesh with mesh collider to give better visibility detection for 173
Fixed the room grid array not being extended correctly when resized during world generation
Fixed some SCP signs with duplicated UV maps
173 warping through doors. Added a "door blocker" that immediately enables when closing doors, blocking 173 from * traveling through the pathfinding grid
Bug where pausing and restarting the game, then pausing again in a new game would make the game get stuck in an infinite paused state
Decreased grid size and fixed portals in 173_opt
Fixed 173 floating above stairs by clamping it to the ground; may need more work
Pedestal in 1123 and 178 rooms now solid
29 октября 2016
CheckParamValue condition, which can check and compare the values of primitive fields in game event messages. This is huge as any field can be tracked, as long as it is primitive.
DistanceFromPlayerToObject condition, to evaluate a distance between the player and some object, found by name.
Pathing colliders to lockroom to keep 173 from phasing through walls diagonally into inescapable areas
Added pathing colliders and lights to room4_opt
Added pathfinding grid to room4_opt walkway for npc events
Created GameInProgress flag inside the engine, which returns if the game is in any state considered "gameplay".
Added a couple more loading screens
Added flag "disableBackground" to loadingScreenData
Added console commands "enable173" and "disable173"
Added console command "godmode" for super fast sprint
Fixed door collider not being wide enough to block player from "seeing" 173 through doors
Fixed wall colliders in 173_opt blocking the player from clicking the button on the outside!
TriggeredEvent system refactored. Now uses ResultBlocks so that conditions can depend on other conditions without having to write a separate event for each one. Eg, 173 Jumpscare first ensures that the NPC seen is 173. Then, the inner result blocks do different sounds depending on what the distance is.
Changed a lot of scriptable objects to just use the name field instead of a separate field for name
AudioCache now auto-loads music and sounds from a list of folder names inside Resources/Sounds
LookEventHandler destroys look object when player blinks, so that 173 can player super scary noise when the player opens eyes again even if looking at it previously
GameUI now has different input logic depending on the game state
Door now looks much closer to how it should. Just needs normal maps
Rebuilt store room (room2closets) in blender, added flipped normals to ceilings to block lights as well as ensured that objects were correctly separated.
Refactored doors with new methods OnDoorOpen / OnDoorClose. Changed portal generation so that doors only generate portals when the doors are completely open, and destroy the portal immediately upon closing the door. In addition, doors cannot be interacted with while opening or closing.
Engine just resets game services on restart instead of destroying then creating them.
Set time to default time variable instead of magic number
Reduced draw distance for player camera from 1000m to 100m inside of facility. This reduced the render thread, in some cases halving it from 10ms to 5ms / frame.
Rebuilt scp-012 room in blender to assign names to all model parts and make it easier to work with, fixed door being blocked off
Blocked vent off from skybox and added lighting to 173_opt, fixed light bleed from other room due to lights being in ceiling
Fixed bug with inventory / codex breaking on game restart
Player can no longer sprint while crouching
Godmode just continuously sets the sprint timer to max rather than increasing it, fixing sprint UI display bug as well as avoiding sprint not working when exhausted
Fixed errors reloading UI when resetting the game by having Inventory UI controllers check if GameInProgress
Fixed PlayerCamera.CheckObjectBlocked destroying the look object if any rays are blocked. We only want to destroy look object if ALL rays are blocked, otherwise we will constantly be "surprised" by 173 even when it hasn't gone out of view.
Added checks during map generation to see if the current room has placed a door already in addition to that room's neighbor. Seems to fix issues with multiple doors spawning in the same spot
Fixed 173 containment room not having collider under stairs
Fixed floor colliders that were too low in some rooms
Fixed events triggering when the game is paused
ем. Теперь можн — первая публичная версия игры есто поп, которая вышла 13 октября 2016 года.
Alpha 0.1 | Список изменений
13 октября 2016
Alpha 0.1 | Основные изменения
Добавлено освещение в шлюз
Добавлены синхронизированные двери в шлюз
SCP-173 теперь ищет карту игрока. Данная функция пользуется таймером ре-спавна Таймер запускается на X секунд; если SCP-173 повторно появляется достаточное кол-во раз без обнаружения игрока, он понизит таймер ре-спавна на раз в секунду.
Добавлен сигнал тревоги для вступления
Добавлен функционал для аудио-менеджера, чтобы проигрывать секвенции звуков также, как и повторять их, только определённое количество раз.
Добавлен Двухсторонний коридор (room2)
Кнопки для перезагрузки и выхода из игры после проигрыша
Аудио-менеджер теперь хранит проигрывающиеся звуки в очереди, чтобы несколько 2D-звуков могли проигрываться единожды. Менеджер попытается использовать любые свободные аудио-коды до повторного использования текущего кода. Поскольку звуки хранятся в очереди, это гарантирует, что более старые звуки используются первыми, с надеждой что это будет после того, как они будут проиграны через какое-то время (меньше диссонанса для игрока)
Исправлено состояние TimeSinceEvent, использующее два разных чека, timeSinceStartup, затем само событие, которое использует timeSinceLevelLoad. Это означало что смерть и перезагрузка ломает событие, поскольку сценка перезагружается и периоды становятся несовместимыми.
Исправлен баг, при котором "гуляющий" звук проигрывается на скорости бега, держа ключ запуска, но запыхавшись
Реорганизованный RoomCache для использования гораздо меньших линий. Более функционален, куда более лёгок для чтения
Исправлен аудио-менеджер теряющий справки, чтобы проигрывать звуки, во время их повторного использования
Исправлены поломанные сетки
Увеличен дверной коллайдер, чтобы руки SCP-173 больше не были видны через дверь.
Исправлен раздел "Документы", ломающийся при отключении / включении КПК. Список не очищался OnDisable()
Изменены метки документов в разделе "Документы", чтобы отличались от настоящих документов, чтобы их было легче читать.
Дверные кнопки теперь используют перечни действующих лиц мишеней, чтобы они могли быть включены / выключены сразу несколькими объектами
Курсор теперь скрыт и заблокирован во время геймплея
Messenger Cleanup() теперь запускается, когда движок делает перезапуск. Он должен запустить до того, как какой-нибудь игровой компонент сервиса (UI, и.т.д) добавит сообщение или они будут разрушены. Следовательно, переместил функцию создания сообщения прочь от Awake() для игровых сервисов
Исправлены сломанные ссылки на раздел "Документы" и префабы слотов ресурсов