From df41dc768613b1294f4b4062563098be074e3493 Mon Sep 17 00:00:00 2001 From: Holly Date: Thu, 6 Mar 2025 01:15:53 +0000 Subject: [PATCH] implement event loading, load all sounds, add step sounds --- scenes/screens/LoadingScreen.tscn | 12 + scenes/world/DynamicMap.tscn | 6 +- src/Constants.gd | 13 + src/DynamicMap.gd | 155 +- src/EventSystem.gd | 10409 ++++++++++++++++++++++++++++ src/EventSystem.gd.uid | 1 + src/GameStartup.gd | 6 +- src/Global.gd | 125 +- src/Launcher.gd | 4 +- src/LoadAllSounds.gd | 198 + src/LoadAllSounds.gd.uid | 1 + src/LoadInit.gd | 5 +- src/LoadWorld.gd | 81 +- src/LoadingScreen.gd | 2 +- src/Main.gd | 2 - src/MainMenu.gd | 20 +- src/MusicSystem.gd | 44 + src/MusicSystem.gd.uid | 1 + src/Player.gd | 96 +- src/UpdateEvents.gd | 42 + src/UpdateEvents.gd.uid | 1 + src/Utils.gd | 20 +- src/file_parsers/INI.gd | 5 +- src/file_parsers/RMesh.gd | 1 + src/objects/Difficulty.gd | 14 + src/objects/Difficulty.gd.uid | 1 + src/objects/Event.gd | 16 + src/objects/Event.gd.uid | 1 + 28 files changed, 11149 insertions(+), 133 deletions(-) create mode 100644 src/EventSystem.gd create mode 100644 src/EventSystem.gd.uid create mode 100644 src/LoadAllSounds.gd create mode 100644 src/LoadAllSounds.gd.uid create mode 100644 src/MusicSystem.gd create mode 100644 src/MusicSystem.gd.uid create mode 100644 src/UpdateEvents.gd create mode 100644 src/UpdateEvents.gd.uid create mode 100644 src/objects/Difficulty.gd create mode 100644 src/objects/Difficulty.gd.uid create mode 100644 src/objects/Event.gd create mode 100644 src/objects/Event.gd.uid diff --git a/scenes/screens/LoadingScreen.tscn b/scenes/screens/LoadingScreen.tscn index e2ec6a6..0e739e9 100644 --- a/scenes/screens/LoadingScreen.tscn +++ b/scenes/screens/LoadingScreen.tscn @@ -3,6 +3,8 @@ [ext_resource type="Script" uid="uid://c4vf0qbhcfk1p" path="res://src/LoadingScreen.gd" id="1_grr4e"] [node name="LoadingScreen" type="Control"] +z_index = 4096 +z_as_relative = false layout_mode = 3 anchors_preset = 15 anchor_right = 1.0 @@ -11,6 +13,16 @@ grow_horizontal = 2 grow_vertical = 2 script = ExtResource("1_grr4e") +[node name="ColorRect" type="ColorRect" parent="."] +z_index = -4 +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +color = Color(0, 0, 0, 1) + [node name="Background" type="TextureRect" parent="."] visible = false z_index = -1 diff --git a/scenes/world/DynamicMap.tscn b/scenes/world/DynamicMap.tscn index 71a0bb9..9bf8aa6 100644 --- a/scenes/world/DynamicMap.tscn +++ b/scenes/world/DynamicMap.tscn @@ -1,6 +1,7 @@ -[gd_scene load_steps=3 format=3 uid="uid://bc46lc1tdvrio"] +[gd_scene load_steps=4 format=3 uid="uid://bc46lc1tdvrio"] [ext_resource type="Script" uid="uid://b08xfsygxqj6a" path="res://src/DynamicMap.gd" id="1_mytgt"] +[ext_resource type="Script" uid="uid://pga6iqmmq4w0" path="res://src/EventSystem.gd" id="2_vb526"] [sub_resource type="Environment" id="Environment_d5g72"] background_mode = 1 @@ -11,5 +12,8 @@ sdfgi_use_occlusion = true [node name="DynamicMap" type="Node3D"] script = ExtResource("1_mytgt") +[node name="EventSystem" type="Node" parent="."] +script = ExtResource("2_vb526") + [node name="WorldEnvironment" type="WorldEnvironment" parent="."] environment = SubResource("Environment_d5g72") diff --git a/src/Constants.gd b/src/Constants.gd index 23648f0..504c61e 100644 --- a/src/Constants.gd +++ b/src/Constants.gd @@ -17,3 +17,16 @@ const gridsz = 19 # Same size as the main map itself (better for the map creator const RoomScale = 8.0 / 2048.0 const HideDistance = 15 + +const SAFE = 0 +const EUCLID = 1 +const KETER = 2 +const CUSTOM = 3 + +const SAVEANYWHERE = 0 +const SAVEONQUIT = 1 +const SAVEONSCREENS = 2 + +const EASY = 0 +const NORMAL = 1 +const HARD = 2 diff --git a/src/DynamicMap.gd b/src/DynamicMap.gd index fadc97c..d58f302 100644 --- a/src/DynamicMap.gd +++ b/src/DynamicMap.gd @@ -31,6 +31,9 @@ func EntityParent(obj: Node, parent: Node): else: obj.reparent(parent, true) +func EntityDistance(ent1: Node3D, ent2: Node3D): + return ent1.global_position.distance_to(ent2.global_position) + func ScaleEntity(obj: Node3D, x: float, y: float, z: float): if obj == null: pass @@ -224,7 +227,7 @@ func UpdateDoors(): var temp = Node3D.new() add_child(temp) #PositionEntity(temp, EntityX(Camera), EntityY(Camera), EntityZ(Camera)) - PointEntity(temp, d.buttons[i]) + #TODO: UNCOMMENT!!! PointEntity(temp, d.buttons[i]) #if EntityPick(temp, 0.6) == d.buttons[i]: #If ClosestButton = 0 Then @@ -403,19 +406,7 @@ func UpdateParticles(): p.pvt.queue_free() particles.erase(p) -# TODO: Remove when real loader is in!! -var ParticleTextures = [ - load(Utils.GetCaseiFileName("GFX/smoke.png")), - load(Utils.GetCaseiFileName("GFX/flash.jpg")), - load(Utils.GetCaseiFileName("GFX/dust.jpg")), - load(Utils.GetCaseiFileName("GFX/npcs/hg.pt")), - load(Utils.GetCaseiFileName("GFX/map/sun.jpg")), - load(Utils.GetCaseiFileName("GFX/bloodsprite.png")), - load(Utils.GetCaseiFileName("GFX/smoke2.png")), - load(Utils.GetCaseiFileName("GFX/spark.jpg")), - load(Utils.GetCaseiFileName("GFX/particle.png")) -] - +var ParticleTextures = [] var DecalTextures = [] var MenuOpen = false @@ -429,6 +420,8 @@ var CanSave = false var SelectedScreen = null var SelectedDoor: Door = null var UpdateDoorsTimer: float = 0.0 +var QuickLoadPercent: int = -1 +var RemoteDoorOn: bool = false func _process(delta: float) -> void: if not MenuOpen and not InvOpen and OtherOpen == null and SelectedDoor == null and not ConsoleOpen and not Using294 and SelectedScreen == null and EndingTimer >= 0: @@ -467,9 +460,8 @@ func _process(delta: float) -> void: #UpdateRoomLights(Camera) #Else UpdateDoors() - #If QuickLoadPercent = -1 Or QuickLoadPercent = 100 - #UpdateEvents() - #EndIf + if QuickLoadPercent == -1 or QuickLoadPercent == 100: + eventSystem.UpdateEvents() #UpdateScreens() #TimeCheckpointMonitors() #Update294() @@ -578,7 +570,123 @@ func CreateEmitter(x: float, y: float, z: float, emittertype: int) -> Emitter: emitters.push_back(e) return e +var OpenDoorSFX: Array = Utils.Init2DArray(3, 3) +var CloseDoorSFX: Array = Utils.Init2DArray(3, 3) + +var KeyCardSFX1: AudioStream +var KeyCardSFX2: AudioStream +var ButtonSFX2: AudioStream +var ScannerSFX1: AudioStream +var ScannerSFX2: AudioStream + +var OpenDoorFastSFX: AudioStream +var CautionSFX: AudioStream + +var NuclearSirenSFX: AudioStream + +var CameraSFX: AudioStream + +var StoneDragSFX: AudioStream + +var GunshotSFX: AudioStream +var Gunshot2SFX: AudioStream +var Gunshot3SFX: AudioStream +var BullethitSFX: AudioStream + +var TeslaIdleSFX: AudioStream +var TeslaActivateSFX: AudioStream +var TeslaPowerUpSFX: AudioStream + +var MagnetUpSFX: AudioStream +var MagnetDownSFX: AudioStream +var FemurBreakerSFX: AudioStream +var EndBreathCHN: AudioStream +var EndBreathSFX: AudioStream + +var DecaySFX = Utils.Init1DArray(5) + +var BurstSFX: AudioStream + +var RustleSFX = Utils.Init1DArray(3) + +var Use914SFX: AudioStream +var Death914SFX: AudioStream + +var DripSFX = Utils.Init1DArray(4) + +var LeverSFX: AudioStream +var LightSFX: AudioStream +var ButtGhostSFX: AudioStream + +var RadioSFX = Utils.Init2DArray(5, 10) + +var RadioSquelch: AudioStream +var RadioStatic: AudioStream +var RadioBuzz: AudioStream + +var ElevatorBeepSFX: AudioStream +var ElevatorMoveSFX: AudioStream + +var PickSFX = Utils.Init1DArray(10) + +var AmbientSFXCHN: AudioStream +var CurrAmbientSFX: AudioStream +var AmbientSFXAmount = Utils.Init1DArray(6) + +var AmbientSFX = Utils.Init2DArray(6, 15) + +var OldManSFX = Utils.Init1DArray(8) + +var Scp173SFX = Utils.Init1DArray(3) + +var HorrorSFX = Utils.Init1DArray(20) + +var IntroSFX = Utils.Init1DArray(20) + +# IntroSFX(13) = LoadSound_Strict("SFX\intro\shoot1.ogg") +# IntroSFX(14) = LoadSound_Strict("SFX\intro\shoot2.ogg") + + +var AlarmSFX = Utils.Init1DArray(5) + +var CommotionState = Utils.Init1DArray(25) + +var HeartBeatSFX: AudioStream + +var VomitSFX: AudioStream + +var BreathSFX = Utils.Init2DArray(2, 5) + +var NeckSnapSFX = Utils.Init1DArray(3) + +var DamageSFX = Utils.Init1DArray(9) + +var MTFSFX = Utils.Init1DArray(8) + +var CoughSFX = Utils.Init1DArray(3) +#Global CoughCHN%, VomitCHN% + +var MachineSFX: AudioStream +var ApacheSFX: AudioStream +#var CurrStepSFX +var StepSFX = Utils.Init3DArray(5, 2, 8) # (normal/metal, walk/run, id) + +var Step2SFX = Utils.Init1DArray(6) + +var eventSystem: EventSystem + func _ready() -> void: + # 0 = light containment, 1 = heavy containment, 2 = entrance + AmbientSFXAmount[0] = 8 + AmbientSFXAmount[1] = 11 + AmbientSFXAmount[2] = 12 + # 3 = general, 4 = pre-breach + AmbientSFXAmount[3] = 15 + AmbientSFXAmount[4] = 5 + # 5 = forest + AmbientSFXAmount[5] = 10 + + eventSystem = $EventSystem OtherOpen = load("res://scenes/screens/LoadWorld.tscn").instantiate() add_child(OtherOpen) #add_child(RMesh.LoadRMesh("GFX\\map\\gatea_opt.rmesh", RoomTemplate.new())) @@ -606,13 +714,13 @@ var I_Zone: MapZones = MapZones.new() var RandomSeed: String = "" var SelectedEnding: String = "" -var MapWidth = Main.options.get("options").get("map size").to_int() -var MapHeight = Main.options.get("options").get("map size").to_int() +@onready var MapWidth = Global.options.get("options").get("map size").to_int() +@onready var MapHeight = Global.options.get("options").get("map size").to_int() const HideDistance = 15.0 -var MapTemp = Utils.Init2DArray(MapWidth + 1, MapHeight + 1, 0) -var MapFound = Utils.Init2DArray(MapWidth + 1, MapHeight + 1, 0) +@onready var MapTemp = Utils.Init2DArray(MapWidth + 1, MapHeight + 1, 0) +@onready var MapFound = Utils.Init2DArray(MapWidth + 1, MapHeight + 1, 0) var RoomTempID = 0 var RoomAmbience = Utils.Init1DArray(20) @@ -4467,7 +4575,7 @@ func LoadRoomTemplates(file: String): i += 1 var MapRoom: Array -var MapName = Utils.Init2DArray(MapWidth, MapHeight, "") +@onready var MapName = Utils.Init2DArray(MapWidth, MapHeight, "") var MapRoomID = Utils.Init1DArray(Constants.ROOM4 + 1, 0) func GetZone(y): @@ -4554,6 +4662,8 @@ func CalculateRoomExtents(r: Room): print("roomextents: ", r.MinX, ", ", r.MinY, ", ", r.MinZ, ", ", r.MaxX, ", ", r.MaxY, ", ", r.MaxZ) +var mapMade: bool = false + var loadedRoomMeshes: int = 0 func LoadRoomMesh(rt: RoomTemplate): var path = Utils.GetCaseiFileName(str("res://", rt.objPath.replace("\\", "/"))).replace("res://", "") @@ -5317,3 +5427,4 @@ func CreateMap(): r1.AdjDoor[3] = r2.AdjDoor[1] if (r1.Adjacent[0] != null) and (r1.Adjacent[1] != null) and (r1.Adjacent[2] != null) and (r1.Adjacent[3] != null): break + mapMade = true diff --git a/src/EventSystem.gd b/src/EventSystem.gd new file mode 100644 index 0000000..8c9159d --- /dev/null +++ b/src/EventSystem.gd @@ -0,0 +1,10409 @@ +extends Node +class_name EventSystem + +var events: Array[Event] = [] +@onready var map: DynamicMap = get_parent() + +func EntityX(obj: Node3D, global: bool = false): + return obj.global_position.x if global else obj.position.x + +func EntityY(obj: Node3D, global: bool = false): + return obj.global_position.y if global else obj.position.y + +func EntityZ(obj: Node3D, global: bool = false): + return obj.global_position.z if global else obj.position.z + +func PositionEntity(obj: Node3D, x: float, y: float, z: float, global: bool = false): + if obj == null: + pass + + if global: + obj.global_position.x = x + obj.global_position.y = y + obj.global_position.z = z + else: + obj.position.x = x + obj.position.y = y + obj.position.z = z + +func RotateEntity(obj: Node3D, x: float, y: float, z: float, global: bool = false): + if obj == null: + pass + + if global: + obj.global_rotation.x = deg_to_rad(x) + obj.global_rotation.y = deg_to_rad(y) + obj.global_rotation.z = deg_to_rad(z) + else: + obj.rotation.x = deg_to_rad(x) + obj.rotation.y = deg_to_rad(y) + obj.rotation.z = deg_to_rad(z) + +func CreateEvent(eventname: String, roomname: String, id: int, prob: float = 0.0) -> Event: + # roomname = the name of the room(s) you want the event to be assigned to + + # the id-variable determines which of the rooms the event is assigned to, + # 0 will assign it to the first generated room, 1 to the second, etc + + # the prob-variable can be used to randomly assign events into some rooms + # 0.5 means that there's a 50% chance that event is assigned to the rooms + # 1.0 means that the event is assigned to every room + # the id-variable is ignored if prob <> 0.0 + + #Local i% = 0, temp%, e.Events, e2.Events, r.Rooms + var temp: bool = false + var i = 0 + + if prob == 0.0: + for r: Room in map.rooms: + if (roomname == "" or roomname == r.RoomTemplate.Name): + temp = false + for e2: Event in events: + if e2.room == r: + temp = true + break + + i += 1 + + if i >= id and not temp: + var e: Event = Event.new() + events.push_back(e) + e.EventName = eventname + e.room = r + return e + else: + for r: Room in map.rooms: + if (roomname == "" or roomname == r.RoomTemplate.Name): + temp = false + for e2: Event in events: + if e2.room == r: + temp = true + break + + if randf_range(0.0, 1.0) < prob and not temp: + var e: Event = Event.new() + events.push_back(e) + e.EventName = eventname + e.room = r + return null + +func InitEvents(): + #Local e.Events + + CreateEvent("173", "173", 0) + CreateEvent("alarm", "start", 0) + + CreateEvent("pocketdimension", "pocketdimension", 0) + + # there's a 7% chance that 106 appears in the rooms named "tunnel" + CreateEvent("tunnel106", "tunnel", 0, 0.07 + (0.1 * Global.SelectedDifficulty.aggressiveNPCs)) + + # the chance for 173 appearing in the first lockroom is about 66% + # there's a 30% chance that it appears in the later lockrooms + if randi_range(0, 3) < 3: + CreateEvent("lockroom173", "lockroom", 0) + CreateEvent("lockroom173", "lockroom", 0, 0.3 + (0.5 * Global.SelectedDifficulty.aggressiveNPCs)) + + CreateEvent("room2trick", "room2", 0, 0.15) + + CreateEvent("1048a", "room2", 0, 1.0) + + CreateEvent("room2storage", "room2storage", 0) + + # 096 spawns in the first (and last) lockroom2 + CreateEvent("lockroom096", "lockroom2", 0) + + CreateEvent("endroom106", "endroom", randi_range(0, 1)) + + CreateEvent("room2poffices2", "room2poffices2", 0) + + CreateEvent("room2fan", "room2_2", 0, 1.0) + + CreateEvent("room2elevator2", "room2elevator", 0) + CreateEvent("room2elevator", "room2elevator", randi_range(1, 2)) + + CreateEvent("room3storage", "room3storage", 0, 0) + + CreateEvent("tunnel2smoke", "tunnel2", 0, 0.2) + CreateEvent("tunnel2", "tunnel2", randi_range(0, 2), 0) + CreateEvent("tunnel2", "tunnel2", 0, (0.2 * Global.SelectedDifficulty.aggressiveNPCs)) + + # 173 appears in half of the "room2doors" -rooms + CreateEvent("room2doors173", "room2doors", 0, 0.5 + (0.4 * Global.SelectedDifficulty.aggressiveNPCs)) + + # the anomalous duck in room2offices2-rooms + CreateEvent("room2offices2", "room2offices2", 0, 0.7) + + CreateEvent("room2closets", "room2closets", 0) + + CreateEvent("room2cafeteria", "room2cafeteria", 0) + + CreateEvent("room3pitduck", "room3pit", 0) + CreateEvent("room3pit1048", "room3pit", 1) + + # the event that causes the door to open by itself in room2offices3 + CreateEvent("room2offices3", "room2offices3", 0, 1.0) + + CreateEvent("room2servers", "room2servers", 0) + + CreateEvent("room3servers", "room3servers", 0) + CreateEvent("room3servers", "room3servers2", 0) + + # the dead guard + CreateEvent("room3tunnel","room3tunnel", 0, 0.08) + + CreateEvent("room4","room4", 0) + + if randi_range(0, 5) < 5: + var result = randi_range(0, 3) + if result == 1: + CreateEvent("682roar", "tunnel", randi_range(0, 2), 0) + elif result == 2: + CreateEvent("682roar", "room3pit", randi_range(0, 2), 0) + elif result == 3: + #CreateEvent("682roar", "room2offices", 0, 0) + CreateEvent("682roar", "room2z3", 0, 0) + + CreateEvent("testroom173", "room2testroom2", 0, 1.0) + + CreateEvent("room2tesla", "room2tesla", 0, 0.9) + + CreateEvent("room2nuke", "room2nuke", 0, 0) + + if randi_range(0, 5) < 5: + CreateEvent("coffin106", "coffin", 0, 0) + else: + CreateEvent("coffin", "coffin", 0, 0) + + CreateEvent("checkpoint", "checkpoint1", 0, 1.0) + CreateEvent("checkpoint", "checkpoint2", 0, 1.0) + + CreateEvent("room3door", "room3", 0, 0.1) + CreateEvent("room3door", "room3tunnel", 0, 0.1) + + if randi_range(0, 2) == 1: + CreateEvent("106victim", "room3", randi_range(1, 2)) + CreateEvent("106sinkhole", "room3_2", randi_range(2, 3)) + else: + CreateEvent("106victim", "room3_2", randi_range(1, 2)) + CreateEvent("106sinkhole", "room3", randi_range(2, 3)) + + CreateEvent("106sinkhole", "room4", randi_range(1, 2)) + + CreateEvent("room079", "room079", 0, 0) + + CreateEvent("room049", "room049", 0, 0) + + CreateEvent("room012", "room012", 0, 0) + + CreateEvent("room035", "room035", 0, 0) + + CreateEvent("008", "008", 0, 0) + + CreateEvent("room106", "room106", 0, 0) + + CreateEvent("pj", "roompj", 0, 0) + + CreateEvent("914", "914", 0, 0) + + CreateEvent("buttghost", "room2toilets", 0, 0) + CreateEvent("toiletguard", "room2toilets", 1, 0) + + CreateEvent("room2pipes106", "room2pipes", randi_range(0, 3)) + + CreateEvent("room2pit", "room2pit", 0, 0.4 + (0.4 * Global.SelectedDifficulty.aggressiveNPCs)) + + CreateEvent("testroom", "testroom", 0) + + CreateEvent("room2tunnel", "room2tunnel", 0) + + CreateEvent("room2ccont", "room2ccont", 0) + + CreateEvent("gateaentrance", "gateaentrance", 0) + CreateEvent("gatea", "gatea", 0) + CreateEvent("exit1", "exit1", 0) + + CreateEvent("room205", "room205", 0) + + CreateEvent("room860","room860", 0) + + CreateEvent("room966","room966", 0) + + CreateEvent("room1123", "room1123", 0, 0) + ;CreateEvent("room2test1074","room2test1074",0) + ;CreateEvent("room038","room038",0,0) + ;CreateEvent("room009","room009",0,0) + ;CreateEvent("medibay", "medibay", 0) + ;CreateEvent("room409", "room409", 0) + ;CreateEvent("room178", "room178", 0) + ;CreateEvent("room020", "room020", 0) + CreateEvent("room2tesla", "room2tesla_lcz", 0, 0.9) + CreateEvent("room2tesla", "room2tesla_hcz", 0, 0.9) + + # New Events in SCP:CB Version 1.3 - ENDSHN + CreateEvent("room4tunnels","room4tunnels",0) + CreateEvent("room_gw","room2gw",0,1.0) + CreateEvent("dimension1499","dimension1499",0) + CreateEvent("room1162","room1162",0) + CreateEvent("room2scps2","room2scps2",0) + CreateEvent("room_gw","room3gw",0,1.0) + CreateEvent("room2sl","room2sl",0) + CreateEvent("medibay","medibay",0) + CreateEvent("room2shaft","room2shaft",0) + CreateEvent("room1lifts","room1lifts",0) + + CreateEvent("room2gw_b","room2gw_b", randi_range(0,1)) + + CreateEvent("096spawn", "room4pit", 0, 0.6 + (0.2 * Global.SelectedDifficulty.aggressiveNPCs)) + CreateEvent("096spawn", "room3pit", 0, 0.6 + (0.2 * Global.SelectedDifficulty.aggressiveNPCs)) + CreateEvent("096spawn", "room2pipes", 0, 0.4 + (0.2 * Global.SelectedDifficulty.aggressiveNPCs)) + CreateEvent("096spawn", "room2pit", 0, 0.5 + (0.2 * Global.SelectedDifficulty.aggressiveNPCs)) + CreateEvent("096spawn", "room3tunnel", 0, 0.6 + (0.2 * Global.SelectedDifficulty.aggressiveNPCs)) + CreateEvent("096spawn", "room4tunnels", 0, 0.7 + (0.2 * Global.SelectedDifficulty.aggressiveNPCs)) + CreateEvent("096spawn", "tunnel", 0, 0.6 + (0.2 * Global.SelectedDifficulty.aggressiveNPCs)) + CreateEvent("096spawn", "tunnel2", 0, 0.4 + (0.2 * Global.SelectedDifficulty.aggressiveNPCs)) + CreateEvent("096spawn", "room3z2", 0, 0.7 + (0.2 * Global.SelectedDifficulty.aggressiveNPCs)) + + CreateEvent("room2pit", "room2_4", 0, 0.4 + (0.4 * Global.SelectedDifficulty.aggressiveNPCs)) + + CreateEvent("room2offices035", "room2offices", 0) + + CreateEvent("room2pit106", "room2pit", 0, 0.07 + (0.1 * Global.SelectedDifficulty.aggressiveNPCs)) + + CreateEvent("room1archive", "room1archive", 0, 1.0) + +func RemoveEvent(e: Event): + #if e.Sound != null Then FreeSound_Strict e\Sound + #If e\Sound2 != null Then FreeSound_Strict e\Sound2 + #If e\img != null: + #FreeImage e\img + events.erase(e) + +func UpdateEvents(): + #CatchErrors("Uncaught (UpdateEvents)") + #Local dist#, i%, temp%, pvt%, strtemp$, j%, k% + + #Local p.Particles, n.NPCs, r.Rooms, e.Events, e2.Events, it.Items, it2.Items, em.Emitters, sc.SecurityCams, sc2.SecurityCams + + var CurrTrigger: String = "" + + var x: float + var y: float + var z: float + + var angle: float = 0 + + Global.player.CurrStepSFX = 0 + + #UpdateRooms() + + for e: Event in events: + if e.EventName == "exit1": + continue + #if not map.RemoteDoorOn: + #e.room.RoomDoors[4].locked = true + #elif map.RemoteDoorOn and e.EventState3 == 0: + #e.room.RoomDoors[4].locked = false + #if e.room.RoomDoors[4].open: + #if e.room.RoomDoors[4].openstate > 50 or map.EntityDistance(Global.player, e.room.RoomDoors[4].frameobj) < 0.5: + #e.room.RoomDoors[4].openstate = min(e.room.RoomDoors[4].openstate, 50) + #e.room.RoomDoors[4].open = false + #Global.PlaySound2("SFX/Door/DoorError.ogg", Global.player.camera, e.room.RoomDoors[4].frameobj) + #else: + #e.room.RoomDoors[4].locked = false + #if map.Curr096 != null: + #if Curr096.State == 0 or Curr096.State == 5: + #e.EventState2 = UpdateElevators(e.EventState2, e.room.RoomDoors[0], e.room.RoomDoors[1], e.room.Objects[8], e.room.Objects[9], e) + #Else + #e\EventState2 = Update096ElevatorEvent(e,e\EventState2,e\room\RoomDoors[0],e\room\Objects[8]) + #EndIf + #Else + #e\EventState2 = UpdateElevators(e\EventState2, e\room\RoomDoors[0], e\room\RoomDoors[1], e\room\Objects[8], e\room\Objects[9], e) + #EndIf + # + #EntityAlpha Fog, 1.0 + #EndIf + #;[End Block] + #Case "alarm" ;the alarm in the starting room + #;[Block] + # + #If e\room\RoomDoors[5]=Null Then + #For i=0 To 3 + #If e\room\AdjDoor[i]<>Null Then + #e\room\RoomDoors[5] = e\room\AdjDoor[i] + #e\room\RoomDoors[5]\open = True + #Exit + #EndIf + #Next + #EndIf + #If e\EventState = 0 Then + #If PlayerRoom = e\room Then + # + #e\room\RoomDoors[2]\open=True + # + #ShowEntity Fog + #AmbientLight Brightness, Brightness, Brightness + #CameraFogRange(Camera, CameraFogNear, CameraFogFar) + #CameraFogMode(Camera, 1) + #If SelectedDifficulty\saveType = SAVEANYWHERE Then + #Msg = "Press "+KeyName(KEY_SAVE)+" to save." + #MsgTimer = 70*4 + #;SetSaveMSG("Press "+KeyName(KEY_SAVE)+" to save.") + #ElseIf SelectedDifficulty\saveType = SAVEONSCREENS Then + #Msg = "Saving is only permitted on clickable monitors scattered throughout the facility." + #MsgTimer = 70 * 8 + #;SetSaveMSG("Saving is only permitted on clickable monitors scattered throughout the facility.") + #EndIf + # + #Curr173\Idle=False + # + #While e\room\RoomDoors[1]\openstate < 180 + #e\room\RoomDoors[1]\openstate = Min(180, e\room\RoomDoors[1]\openstate + 0.8) + #MoveEntity(e\room\RoomDoors[1]\obj, Sin(e\room\RoomDoors[1]\openstate) / 180.0, 0, 0) + #MoveEntity(e\room\RoomDoors[1]\obj2, -Sin(e\room\RoomDoors[1]\openstate) / 180.0, 0, 0) + #Wend + # + #If e\room\NPC[0] <> Null Then SetNPCFrame(e\room\NPC[0], 74) : e\room\NPC[0]\State = 8 + # + #If e\room\NPC[1] = Null Then + #e\room\NPC[1] = CreateNPC(NPCtypeD, 0,0,0) + #ChangeNPCTextureID(e\room\NPC[1],3) + #;tex = LoadTexture_Strict("GFX\npcs\scientist2.jpg") + #e\room\NPC[1]\texture = "GFX\npcs\scientist2.jpg" + #;EntityTexture e\room\NPC[1]\obj, tex + #;FreeTexture tex + #ChangeNPCTextureID(e\room\NPC[1],3) + #EndIf + #PositionEntity e\room\NPC[1]\Collider, e\room\x, 0.5, e\room\z-1.0, True + #ResetEntity e\room\NPC[1]\Collider + #SetNPCFrame(e\room\NPC[1], 210) + # + #If e\room\NPC[2] = Null Then + #e\room\NPC[2] = CreateNPC(NPCtypeGuard, 0,0,0) + #EndIf + #;x-240 + #PositionEntity e\room\NPC[2]\Collider, e\room\x, 0.5, e\room\z+528*RoomScale, True + #ResetEntity e\room\NPC[2]\Collider + #e\room\NPC[2]\State = 7 + #PointEntity e\room\NPC[2]\Collider,e\room\NPC[1]\Collider + # + #If e\room\NPC[0]=Null + #e\room\NPC[3] = CreateNPC(NPCtypeGuard, EntityX(e\room\Objects[2], True), EntityY(e\room\Objects[2], True), EntityZ(e\room\Objects[2], True)) + #;e\room\NPC[3]\Angle = 180 + #RotateEntity e\room\NPC[3]\Collider,0,90,0 + #SetNPCFrame(e\room\NPC[3], 286) : e\room\NPC[3]\State = 8 + #MoveEntity e\room\NPC[3]\Collider,1,0,0 + # + #e\room\NPC[4] = CreateNPC(NPCtypeD, EntityX(e\room\Objects[3], True), 0.5, EntityZ(e\room\Objects[3], True)) + #;PointEntity(e\room\NPC[4]\Collider, e\room\Objects[7]) + #SetNPCFrame(e\room\NPC[4], 19) : e\room\NPC[4]\State = 3 + #RotateEntity e\room\NPC[4]\Collider,0,270,0 + #MoveEntity e\room\NPC[4]\Collider,0,0,2.65 + # + #e\room\NPC[5] = CreateNPC(NPCtypeD, EntityX(e\room\Objects[4], True), 0.5, EntityZ(e\room\Objects[4], True)) + #ChangeNPCTextureID(e\room\NPC[5],6) + #;PointEntity(e\room\NPC[5]\Collider, e\room\Objects[7]) + #SetNPCFrame(e\room\NPC[5], 19) : e\room\NPC[5]\State = 3 + #RotateEntity e\room\NPC[5]\Collider,0,270,0 + #;tex = LoadTexture_Strict("GFX\npcs\classd2.jpg") + # + #; e\room\NPC[5]\texture = "GFX\npcs\classd2.jpg" + #;EntityTexture e\room\NPC[5]\obj, tex + #;FreeTexture tex + # + #MoveEntity e\room\NPC[5]\Collider,0.25,0,3.0 + #RotateEntity e\room\NPC[5]\Collider,0,0,0 + # + #x# = EntityX(e\room\obj, True)+3712*RoomScale + #y# = 384.0*RoomScale + #z# = EntityZ(e\room\obj, True)+1312*RoomScale + # + #For i = 3 To 5 + #PositionEntity(e\room\NPC[i]\Collider, x + (EntityX(e\room\NPC[i]\Collider) - EntityX(e\room\obj)), y+EntityY(e\room\NPC[i]\Collider)+0.4, z + (EntityZ(e\room\NPC[i]\Collider) - EntityZ(e\room\obj))) + #ResetEntity(e\room\NPC[i]\Collider) + #Next + #EndIf + # + #e\EventState = 1 + #EndIf + #Else + # + #If e\room\NPC[0] <> Null Then AnimateNPC(e\room\NPC[0], 249, 286, 0.4, False) + # + #CurrTrigger = CheckTriggers() + # + #If (CurrTrigger = "173scene_timer") Then + #e\EventState = e\EventState+FPSfactor + #Else If (CurrTrigger = "173scene_activated") + #e\EventState = Max(e\EventState, 500) + #EndIf + # + #If e\EventState < 850 + #PositionEntity Curr173\Collider, e\room\x+32*RoomScale, 0.31, e\room\z+1072*RoomScale, True + #HideEntity Curr173\obj + #EndIf + # + #If e\EventState >= 500 Then + #e\EventState = e\EventState+FPSfactor + # + #If e\EventState2 = 0 Then + #;CanSave = False + #ShowEntity Curr173\obj + #If e\EventState > 900 And e\room\RoomDoors[5]\open Then + #If e\EventState - FPSfactor <= 900 Then + #e\room\NPC[1]\Sound = LoadSound_Strict("SFX\Room\Intro\WhatThe.ogg") + #e\room\NPC[1]\SoundChn = PlaySound2(e\room\NPC[1]\Sound, Camera, e\room\NPC[1]\Collider) + #EndIf + #e\room\NPC[1]\State = 3 + #e\room\NPC[1]\CurrSpeed = CurveValue(-0.008, e\room\NPC[1]\CurrSpeed, 5.0) + #AnimateNPC(e\room\NPC[1], 260, 236, e\room\NPC[1]\CurrSpeed * 18) + #RotateEntity e\room\NPC[1]\Collider, 0, 0, 0 + # + #If e\EventState > 900+2.5*70 Then + #If e\room\NPC[2]\State <> 1 + #e\room\NPC[2]\CurrSpeed = CurveValue(-0.012, e\room\NPC[2]\CurrSpeed, 5.0) + #AnimateNPC(e\room\NPC[2], 39, 76, e\room\NPC[2]\CurrSpeed*40) + #MoveEntity e\room\NPC[2]\Collider, 0,0,e\room\NPC[2]\CurrSpeed*FPSfactor + #e\room\NPC[2]\State = 8 + # + #;z-512 + #If EntityZ(e\room\NPC[2]\Collider) < e\room\z Then + #PointEntity(e\room\NPC[2]\obj, e\room\NPC[1]\Collider) + #RotateEntity e\room\NPC[2]\Collider, 0, CurveAngle(EntityYaw(e\room\NPC[2]\obj)-180,EntityYaw(e\room\NPC[2]\Collider),15.0), 0 + #Else + #RotateEntity e\room\NPC[2]\Collider, 0, 0, 0 + #EndIf + #EndIf + #EndIf + # + #If e\EventState < 900+4*70 Then + #PositionEntity Curr173\Collider, e\room\x+32*RoomScale, 0.31, e\room\z+1072*RoomScale, True + #RotateEntity Curr173\Collider,0,190,0 + # + #If e\EventState > 900+70 And e\EventState < 900+2.5*70 Then + #AnimateNPC(e\room\NPC[2], 1539, 1553, 0.2, False) + #PointEntity(e\room\NPC[2]\obj, Curr173\Collider) + #RotateEntity e\room\NPC[2]\Collider, 0, CurveAngle(EntityYaw(e\room\NPC[2]\obj),EntityYaw(e\room\NPC[2]\Collider),15.0), 0 + #EndIf + # + #Else + #If e\EventState-FPSfactor < 900+4*70 Then + #PlaySound_Strict(IntroSFX(11)) : LightBlink = 3.0 + #PlaySound2 (StoneDragSFX, Camera, Curr173\Collider) + #PointEntity Curr173\Collider, e\room\NPC[2]\Collider + #If EntityY(Collider)<320*RoomScale Then BlinkTimer = -10 + #EndIf + # + #PositionEntity Curr173\Collider, e\room\x-96*RoomScale, 0.31, e\room\z+592*RoomScale, True + #RotateEntity Curr173\Collider,0,190,0 + # + #If e\room\NPC[2]\State <> 1 And KillTimer >= 0 + #If EntityZ(e\room\NPC[2]\Collider) < e\room\z-1150*RoomScale Then + #e\room\RoomDoors[5]\open = False + #LightBlink = 3.0 + #PlaySound_Strict(IntroSFX(11)) + #BlinkTimer = -10 + #PlaySound2 (StoneDragSFX, Camera, Curr173\Collider) + #If EntityDistance(Curr173\Collider,Collider)<2.5 And Abs(EntityY(Collider)-EntityY(Curr173\Collider))<1.0 Then + #PositionEntity Curr173\Collider, EntityX(Collider),EntityY(Collider),EntityZ(Collider) + #Else + #PositionEntity Curr173\Collider, 0,0,0 + #EndIf + #ResetEntity Curr173\Collider + #Msg = "Hold "+KeyName(KEY_SPRINT)+" to run." + #MsgTimer = 70*8 + #EndIf + #EndIf + #EndIf + # + #;If Ulgrin can see the player then start shooting at them. + #If (CurrTrigger = "173scene_end") And EntityVisible(e\room\NPC[2]\Collider, Collider) And (Not NoTarget) Then + #e\room\NPC[2]\State = 1 + #e\room\NPC[2]\State3 = 1 + #ElseIf e\room\NPC[2]\State = 1 And (Not EntityVisible(e\room\NPC[2]\Collider, Collider)) + #e\room\NPC[2]\State = 0 + #e\room\NPC[2]\State3 = 0 + #EndIf + # + #If e\room\NPC[2]\State = 1 Then e\room\RoomDoors[5]\open = True + #Else + #CanSave = True + #If e\room\NPC[2]\State <> 1 + #If EntityX(Collider)<(e\room\x+1384*RoomScale) Then e\EventState = Max(e\EventState,900) + # + #If e\room\RoomDoors[5]\openstate = 0 Then + #;HideEntity e\room\NPC[1]\obj + #;HideEntity e\room\NPC[1]\Collider + #; + #;HideEntity e\room\NPC[2]\obj + #;HideEntity e\room\NPC[2]\Collider + # + #If e\room\NPC[1] <> Null Then RemoveNPC(e\room\NPC[1]) + #If e\room\NPC[2] <> Null Then RemoveNPC(e\room\NPC[2]) + # + #e\EventState2=1 + #EndIf + #EndIf + #EndIf + #EndIf + # + # + #; If e\EventState > 900+3*70 And e\EventState < 900+4*70 Then + #; CameraShake = 0.2 + #; ElseIf e\EventState > 900+32.3*70 And e\EventState < 900+34*70 + #; CameraShake = 0.4 + #; ElseIf e\EventState > 900+51*70 And e\EventState < 900+53.5*70 + #; CameraShake = 1.0 + #; ElseIf e\EventState > 900+57.5*70 And e\EventState < 900+58.5*70 + #; CameraShake = 0.4 + #; EndIf + # + #PositionEntity e\room\Objects[0], EntityX(e\room\Objects[0],True), -Max(e\EventState-1300,0)/4500, EntityZ(e\room\Objects[0],True), True + #RotateEntity e\room\Objects[0], -Max(e\EventState-1320,0)/130, 0, -Max(e\EventState-1300,0)/40, True + # + #PositionEntity e\room\Objects[1], EntityX(e\room\Objects[1],True), -Max(e\EventState-1800,0)/5000, EntityZ(e\room\Objects[1],True), True + #RotateEntity e\room\Objects[1], -Max(e\EventState-2040,0)/135, 0, -Max(e\EventState-2040,0)/43, True + # + #If EntityDistance(e\room\Objects[0],Collider)<2.5 Then + #If Rand(300)=2 Then PlaySound2(DecaySFX(Rand(1,3)),Camera,e\room\Objects[0], 3.0) + #EndIf + #EndIf + # + #If (e\EventState < 2000) Then + #If e\SoundCHN = 0 Then + #e\SoundCHN = PlaySound_Strict(AlarmSFX(0)) + #Else + #If Not ChannelPlaying(e\SoundCHN) Then e\SoundCHN = PlaySound_Strict(AlarmSFX(0)) + #End If + #EndIf + # + #If (e\EventState3<11) Then + #If (Not ChannelPlaying(e\SoundCHN2)) Then + #e\EventState3 = e\EventState3+1 + # + #If (e\Sound2 <> 0) Then + #FreeSound_Strict(e\Sound2) + #e\Sound2 = 0 + #EndIf + # + #e\Sound2 = LoadSound_Strict("SFX\Alarm\Alarm2_"+Int(e\EventState3)+".ogg") + #e\SoundCHN2 = PlaySound_Strict(e\Sound2) + #Else + #If Int(e\EventState3) = 8 Then CameraShake = 1.0 + #EndIf + #EndIf + # + #If ((e\EventState Mod 600 > 300) And ((e\EventState+FPSfactor) Mod 600 < 300)) Then + #i = Floor((e\EventState-5000)/600)+1 + # + #If i = 0 Then PlaySound_Strict(LoadTempSound("SFX\Room\Intro\PA\scripted\scripted6.ogg")) + # + #If (i>0 And i<26) Then + #If Not CommotionState(i) Then ;Prevents the same commotion file from playing more then once. + #PlaySound_Strict(LoadTempSound("SFX\Room\Intro\Commotion\Commotion"+i+".ogg")) + #CommotionState(i) = True + #EndIf + #EndIf + # + #If (i>26) Then + #If e\room\NPC[0] <> Null Then RemoveNPC(e\room\NPC[0]) + #;If e\room\NPC[1] <> Null Then RemoveNPC(e\room\NPC[1]) + #;If e\room\NPC[2] <> Null Then RemoveNPC(e\room\NPC[2]) + # + #FreeEntity e\room\Objects[0] + #FreeEntity e\room\Objects[1] + #e\room\Objects[0]=0 + #e\room\Objects[1]=0 + # + #DebugLog "delete alarm" + # + #RemoveEvent(e) + #EndIf + #EndIf + #End If + #;[End Block] + elif e.EventName == "173": # the intro sequence + if Global.player.KillTimer >= 0 and e.EventState2 == 0: + map.PlayerZone = 0 + if e.EventState3 > 0: + map.ShouldPlay = 13 + # slow the player down to match his speed to the guards + #Global.player.CurrSpeed = min(Global.player.CurrSpeed - (Global.player.CurrSpeed * (0.008 / EntityDistance(e.room.NPC[3].Collider, Collider)) * FPSfactor), CurrSpeed) + + if e.EventState3 < 170: + if e.EventState3 == 1.0: + PositionEntity(Global.player.camera, x, y, z) + #HideEntity Collider + PositionEntity(Global.player, x, 0.302, z) + RotateEntity(Global.player.camera, -70, 0, 0) + + MusicSystem.CurrMusicVolume = Global.MusicVolume + + Global.MusicCHN.stop() + Global.MusicCHN.stream = Global.LoadAudio(str("SFX/Music/", Global.Music[13], ".ogg")) + MusicSystem.NowPlaying = MusicSystem.ShouldPlay + + Global.PlayTempSound(map.IntroSFX[11]) + Global.player.BlurTimer = 500 + #ShowEntity Light + #EntityAlpha(Light, 0.5) + + if e.EventState3 < 3: + e.EventState3 = e.EventState3 + Global.FPSfactor / 100.0 + elif e.EventState3 < 15 or e.EventState3 >= 50: + e.EventState3 = e.EventState3 + Global.FPSfactor / 30.0 + + if e.EventState3 < 15: + x = EntityX(e.room.obj) - (3224.0 + 1024.0) * Constants.RoomScale + y = 136.0 * Constants.RoomScale + z = EntityZ(e.room.obj) + 8.0 * Constants.RoomScale + + if e.EventState3 < 14: + #mouse_x_speed_1#=0 + #mouse_y_speed_1#=0 + # + if e.EventState3 - Global.FPSfactor / 30.0 < 12 and e.EventState3 > 12: + Global.PlaySound2(map.StepSFX[0][0][0], Global.player.camera, Global.player, 8, 0.3) + + #ShowEntity Light + #EntityAlpha(Light, 0.9-(e\EventState3/2.0)) + + x = x + (EntityX(e.room.obj) - (3048.0 + 1024.0) * Constants.RoomScale - x) * max((e.EventState3 - 10.0) / 4.0, 0.0) + + if e.EventState3 < 10: + y = y + (0.2) * min(max((e.EventState3 - 3.0) / 5.0, 0.0), 1.0) + else: + y = (y + 0.2) + (0.302 + 0.6 - (y + 0.2)) * max((e.EventState3 - 10) / 4.0, 0.0) + + z = z + (EntityZ(e.room.obj) + 104.0 * Constants.RoomScale - z) * min(max((e.EventState3 - 3) / 5.0, 0), 1.0) + + # I'm sorry you have to see this + RotateEntity(Global.player.camera, -70.0 + 70.0 * min(max((e.EventState3 - 3.0) / 5.0, 0.0), 1.0) + sin(e.EventState3 * 12.857) * 5.0, -60.0 * max((e.EventState3 - 10.0) / 4.0, 0.0), sin(e.EventState3 * 25.7) * 8.0) + + PositionEntity(Global.player.camera, x, y, z) + #HideEntity Collider + PositionEntity(Global.player.camera, x, 0.302, z) + Global.player.DropSpeed = 0 + else: + #HideEntity Light + + PositionEntity(Global.player, EntityX(Global.player), 0.302, EntityZ(Global.player)) + #ResetEntity Collider + #ShowEntity Collider + Global.player.DropSpeed = 0 + e.EventState3 = 15 + map.Msg = "Pick up the paper on the desk." + map.MsgTimer = 70 * 7 + + #user_camera_pitch = 0 + #RotateEntity Global.player, 0, EntityYaw(Camera), 0 + # + #ElseIf e\EventState3 < 40 + #If Inventory(0)<>Null Then + #Msg = "Press "+KeyName(KEY_INV)+" to open the inventory." + #MsgTimer=70*7 + #e\EventState3 = 40 + #Exit + #EndIf + #EndIf + # + #If SelectedItem <> Null Then + #e\EventState3 = e\EventState3+FPSfactor/5.0 + #EndIf + # + #ElseIf e\EventState3 => 150.0 And e\EventState3 < 700 + #If e\room\NPC[3]\State = 7 Then + #If e\room\NPC[3]\Sound2 = 0 + #e\room\NPC[3]\Sound2 = LoadSound_Strict("SFX\Room\Intro\Guard\Ulgrin\BeforeDoorOpen.ogg") + #e\room\NPC[3]\SoundChn2 = PlaySound2(e\room\NPC[3]\Sound2,Camera,e\room\NPC[3]\Collider) + #DebugLog "Playing guard sound before cell opening" + #EndIf + # + #UpdateSoundOrigin(e\room\NPC[3]\SoundChn2,Camera,e\room\NPC[3]\Collider) + # + #If (Not ChannelPlaying(e\room\NPC[3]\SoundChn2)) + #;BlinkTimer = -10 + # + #e\room\NPC[3]\Sound = LoadSound_Strict("SFX\Room\Intro\Guard\Ulgrin\ExitCell.ogg") + #e\room\NPC[3]\SoundChn = PlaySound2(e\room\NPC[3]\Sound, Camera, e\room\NPC[3]\Collider) + # + #;e\room\NPC[3]\State = 7 + #;e\room\NPC[4]\State = 7 + #;e\room\NPC[5]\State = 7 + #e\room\NPC[3]\State = 9 + #e\room\NPC[4]\State = 9 + #e\room\NPC[5]\State = 9 + # + #e\room\RoomDoors[6]\locked = False + #UseDoor(e\room\RoomDoors[6], False) + #e\room\RoomDoors[6]\locked = True + #EndIf + #Else + #FreeSound_Strict e\room\NPC[3]\Sound2 + # + #;PointEntity e\room\NPC[3]\obj, Collider + #;RotateEntity e\room\NPC[3]\Collider, 0, EntityYaw(e\room\NPC[3]\obj), 0 + # + #;PointEntity e\room\NPC[4]\obj, Collider + #;RotateEntity e\room\NPC[4]\Collider, 0, EntityYaw(e\room\NPC[4]\obj), 0 + # + #e\EventState3 = Min(e\EventState3+FPSfactor/4,699) + # + #;outside the cell + #If Distance(EntityX(Collider),EntityZ(Collider),PlayerRoom\x-(3072+1024)*RoomScale, PlayerRoom\z+192.0*RoomScale)>1.5 Then + #;e\room\NPC[3]\State = 5 + #;e\room\NPC[3]\EnemyX = EntityX(Collider) + #;e\room\NPC[3]\EnemyY = EntityY(Collider) + #;e\room\NPC[3]\EnemyZ = EntityZ(Collider) + # + #If e\EventState3 > 250 Then + #If e\room\NPC[3]\SoundChn<>0 Then + #If ChannelPlaying(e\room\NPC[3]\SoundChn) Then StopChannel e\room\NPC[3]\SoundChn + #EndIf + #FreeSound_Strict e\room\NPC[3]\Sound + #e\room\NPC[3]\Sound = LoadSound_Strict("SFX\Room\Intro\Guard\Ulgrin\Escort"+Rand(1,2)+".ogg") + #e\room\NPC[3]\SoundChn = PlaySound2(e\room\NPC[3]\Sound, Camera, e\room\NPC[3]\Collider) + # + #;e\room\NPC[3]\PathStatus = FindPath(e\room\NPC[3],PlayerRoom\x-1584*RoomScale, 0.3, PlayerRoom\z-1040*RoomScale) + #;e\room\NPC[4]\PathStatus = FindPath(e\room\NPC[4],PlayerRoom\x-1584*RoomScale, 0.3, PlayerRoom\z-1040*RoomScale) + #e\room\NPC[3]\PathStatus = FindPath(e\room\NPC[3],PlayerRoom\x-320*RoomScale, 0.3, PlayerRoom\z-704*RoomScale) + #e\room\NPC[4]\PathStatus = FindPath(e\room\NPC[4],PlayerRoom\x-320*RoomScale, 0.3, PlayerRoom\z-704*RoomScale) + # + #e\EventState3 = 710 + #EndIf + #Else ;inside the cell + #e\room\NPC[3]\State = 9 + #;PointEntity e\room\NPC[3]\Collider, Collider + #;RotateEntity e\room\NPC[3]\Collider, 0, EntityYaw(e\room\NPC[3]\Collider), 0 + # + #If e\EventState3-(FPSfactor/4) < 350 And e\EventState3=>350 Then + #FreeSound_Strict e\room\NPC[3]\Sound + #e\room\NPC[3]\Sound = LoadSound_Strict("SFX\Room\Intro\Guard\Ulgrin\ExitCellRefuse"+Rand(1,2)+".ogg") + #e\room\NPC[3]\SoundChn = PlaySound2(e\room\NPC[3]\Sound, Camera, e\room\NPC[3]\Collider) + #ElseIf e\EventState3-(FPSfactor/4) < 550 And e\EventState3=>550 + #FreeSound_Strict e\room\NPC[3]\Sound + #e\room\NPC[3]\Sound = LoadSound_Strict("SFX\Room\Intro\Guard\Ulgrin\CellGas"+Rand(1,2)+".ogg") + #e\room\NPC[3]\SoundChn = PlaySound2(e\room\NPC[3]\Sound, Camera, e\room\NPC[3]\Collider) + #ElseIf e\EventState3>630 + #PositionEntity Collider, EntityX(Collider), EntityY(Collider), Min(EntityZ(Collider), EntityZ(e\room\obj,True)+490*RoomScale) + #If e\room\RoomDoors[6]\open = True Then + #e\room\RoomDoors[6]\locked = False + #UseDoor(e\room\RoomDoors[6],False) + #e\room\RoomDoors[6]\locked = True + # + #em.Emitters = CreateEmitter(PlayerRoom\x - (2976.0+1024) * RoomScale, 373.0 * RoomScale, PlayerRoom\z + 204.0 * RoomScale, 0) + #TurnEntity(em\Obj, 90, 0, 0, True) + #em\RandAngle = 7 + #em\Speed = 0.03 + #em\SizeChange = 0.003 + #em\Room = PlayerRoom + # + #em.Emitters = CreateEmitter(PlayerRoom\x - (3168.0+1024) * RoomScale, 373.0 * RoomScale, PlayerRoom\z + 204.0 * RoomScale, 0) + #TurnEntity(em\Obj, 90, 0, 0, True) + #em\RandAngle = 7 + #em\Speed = 0.03 + #em\SizeChange = 0.003 + #em\Room = PlayerRoom + #EndIf + # + #EyeIrritation=Max(EyeIrritation+FPSfactor * 4, 1.0) + #EndIf + # + #EndIf + #EndIf + #ElseIf e\EventState3 < 800 + #e\EventState3 = e\EventState3+FPSfactor/4.0 + # + #;e\room\NPC[3]\State = 5 + #;e\room\NPC[3]\EnemyX = EntityX(Collider) + #;e\room\NPC[3]\EnemyY = EntityY(Collider) + #;e\room\NPC[3]\EnemyZ = EntityZ(Collider) + # + #If e\room\NPC[5]\State <> 11 + #If EntityDistance(e\room\NPC[3]\Collider,e\room\NPC[5]\Collider)>5.0 And EntityDistance(e\room\NPC[4]\Collider,e\room\NPC[5]\Collider) + #If EntityDistance(e\room\NPC[5]\Collider,Collider)<3.5 + #e\room\NPC[5]\State = 11 + #e\room\NPC[5]\State3 = 1 + #e\room\NPC[5]\SoundChn2 = PlaySound2(e\room\NPC[5]\Sound2,Camera,e\room\NPC[5]\Collider) + #e\room\NPC[5]\Reload = 70*3 + #EndIf + #EndIf + #EndIf + #ElseIf e\EventState3 < 900 + #e\room\NPC[4]\Angle = 0 + # + #If EntityX(Collider)Null Then ;the scientist + #If e\room\NPC[6]\State = 0 Then + #If e\room\RoomDoors[7]\open Then + #If Distance(EntityX(Collider), EntityZ(Collider), EntityX(e\room\obj,True)-3328*RoomScale, EntityZ(e\room\obj,True)-1232*RoomScale)<5.0 Then + #e\room\NPC[6]\State = 1 + #If e\EventStr = "done" Then + #PlaySound_Strict LoadTempSound("SFX\Room\Intro\PA\scripted\announcement"+Rand(1,7)+".ogg") + #EndIf + #EndIf + #EndIf + #Else + #If EntityZ(e\room\NPC[6]\Collider)>EntityZ(e\room\obj,True)-64.0*RoomScale Then + #RotateEntity e\room\NPC[6]\Collider, 0, CurveAngle(90,EntityYaw(e\room\NPC[6]\Collider),15.0),0 + #If e\room\RoomDoors[7]\open Then UseDoor(e\room\RoomDoors[7],False) + #If e\room\RoomDoors[7]\openstate < 1.0 Then e\room\NPC[6]\State = 0 + #EndIf + #EndIf + #EndIf + # + #If e\room\NPC[8]<>Null Then ;the 2 guards and ClassD + #If e\room\NPC[8]\State = 7 Then + #;If e\room\RoomDoors[7]\open Then + #If Distance(EntityX(Collider), EntityZ(Collider), EntityX(e\room\obj,True)-6688*RoomScale, EntityZ(e\room\obj,True)-1252*RoomScale)<2.5 Then + #e\room\NPC[8]\State = 10 + #e\room\NPC[9]\State = 1 + #e\room\NPC[10]\State = 10 + #EndIf + #Else + #If EntityX(e\room\NPC[8]\Collider) "" And e\EventStr <> "done" Then + #If e\SoundCHN = 0 Then + #e\SoundCHN = PlaySound_Strict(LoadTempSound("SFX\Room\Intro\PA\on.ogg")) + #EndIf + #If ChannelPlaying(e\SoundCHN)=False Then + #strtemp = Left(e\EventStr, Instr(e\EventStr, "|", 1)-1) + #e\SoundCHN = PlaySound_Strict (LoadTempSound("SFX\Room\Intro\PA\"+strtemp)) + #e\EventStr = Right(e\EventStr, Len(e\EventStr)-Len(strtemp)-1) + #If e\EventStr = "" Then + #FreeSound_Strict e\room\NPC[3]\Sound + #temp = Rand(1,5) + #e\room\NPC[3]\Sound = LoadSound_Strict("SFX\Room\Intro\Guard\Conversation"+temp+"a.ogg") + #e\room\NPC[3]\SoundChn = PlaySound2(e\room\NPC[3]\Sound, Camera, e\room\NPC[3]\Collider) + #e\room\NPC[4]\Sound = LoadSound_Strict("SFX\Room\Intro\Guard\Conversation"+temp+"b.ogg") + #e\room\NPC[4]\SoundChn = PlaySound2(e\room\NPC[4]\Sound, Camera, e\room\NPC[4]\Collider) + #e\EventStr = "done" + #EndIf + #EndIf + #EndIf + # + #dist = Distance(EntityX(Collider), EntityZ(Collider), EntityX(e\room\NPC[3]\Collider), EntityZ(e\room\NPC[3]\Collider)) + # + #If dist < 3.0 Then + #e\room\NPC[3]\State3 = Min(Max(e\room\NPC[3]\State3-FPSfactor,0),50) + #Else + #e\room\NPC[3]\State3 = Max(e\room\NPC[3]\State3+FPSfactor,50) + #If e\room\NPC[3]\State3 => 70*8 And e\room\NPC[3]\State3-FPSfactor < 70*8 And e\room\NPC[3]\State=7 Then + #If e\room\NPC[4]\SoundChn <> 0 Then + #If ChannelPlaying(e\room\NPC[4]\SoundChn) Then StopChannel(e\room\NPC[4]\SoundChn) + #EndIf + # + #If e\room\NPC[3]\State2 < 2 Then + #FreeSound_Strict e\room\NPC[3]\Sound + #e\room\NPC[3]\Sound = LoadSound_Strict("SFX\Room\Intro\Guard\Ulgrin\EscortRefuse"+Rand(1,2)+".ogg") + #e\room\NPC[3]\SoundChn = PlaySound2(e\room\NPC[3]\Sound, Camera, e\room\NPC[3]\Collider) + #e\room\NPC[3]\State3=50 + #e\room\NPC[3]\State2=3 + #ElseIf e\room\NPC[3]\State2=3 + #FreeSound_Strict e\room\NPC[3]\Sound + #e\room\NPC[3]\Sound = LoadSound_Strict("SFX\Room\Intro\Guard\Ulgrin\EscortPissedOff"+Rand(1,2)+".ogg") + #e\room\NPC[3]\SoundChn = PlaySound2(e\room\NPC[3]\Sound, Camera, e\room\NPC[3]\Collider) + #e\room\NPC[3]\State3=50 + #e\room\NPC[3]\State2=4 + #ElseIf e\room\NPC[3]\State2=4 + #FreeSound_Strict e\room\NPC[3]\Sound + #e\room\NPC[3]\Sound = LoadSound_Strict("SFX\Room\Intro\Guard\Ulgrin\EscortKill"+Rand(1,2)+".ogg") + #e\room\NPC[3]\SoundChn = PlaySound2(e\room\NPC[3]\Sound, Camera, e\room\NPC[3]\Collider) + #e\room\NPC[3]\State3 = 50+70*2.5 + #e\room\NPC[3]\State2=5 + #ElseIf e\room\NPC[3]\State2=5 + #e\room\NPC[3]\State = 11 + #e\room\NPC[4]\State = 11 + #e\room\NPC[5]\State = 11 + #e\room\NPC[3]\State3 = 1 + #e\room\NPC[4]\State3 = 1 + #e\room\NPC[5]\State3 = 1 + #EndIf + #EndIf + #If e\room\NPC[5]\State <> 11 + #If EntityDistance(e\room\NPC[3]\Collider,e\room\NPC[5]\Collider)>5.0 And EntityDistance(e\room\NPC[4]\Collider,e\room\NPC[5]\Collider) + #If EntityDistance(e\room\NPC[5]\Collider,Collider)<3.5 + #e\room\NPC[5]\State = 11 + #e\room\NPC[5]\State3 = 1 + #e\room\NPC[5]\SoundChn2 = PlaySound2(e\room\NPC[5]\Sound2,Camera,e\room\NPC[5]\Collider) + #e\room\NPC[5]\Reload = 70*3 + #EndIf + #EndIf + #EndIf + #EndIf + # + #If e\room\NPC[5]\State = 11 + #UpdateSoundOrigin(e\room\NPC[5]\SoundChn2,Camera,e\room\NPC[5]\Collider) + #EndIf + # + #If e\room\NPC[3]\State <> 11 Then + #If dist < Min(Max(4.0-e\room\NPC[3]\State3*0.05, 1.5),4.0) Then + #If e\room\NPC[3]\PathStatus <> 1 Then + #e\room\NPC[3]\State = 7 + #PointEntity e\room\NPC[3]\obj, Collider + #RotateEntity e\room\NPC[3]\Collider,0,CurveValue(EntityYaw(e\room\NPC[3]\obj),EntityYaw(e\room\NPC[3]\Collider),20.0),0,True + # + #If e\room\NPC[3]\PathStatus = 2 Then + #;e\room\NPC[3]\PathStatus = FindPath(e\room\NPC[3],EntityX(e\room\obj,True)-1584*RoomScale, 0.3, EntityZ(e\room\obj,True)-1040*RoomScale) + #e\room\NPC[3]\PathStatus = FindPath(e\room\NPC[3],PlayerRoom\x-320*RoomScale, 0.3, PlayerRoom\z-704*RoomScale) + #e\room\NPC[4]\PathStatus = FindPath(e\room\NPC[4],PlayerRoom\x-320*RoomScale, 0.3, PlayerRoom\z-704*RoomScale) + #e\room\NPC[3]\State = 3 + #EndIf + #Else + #e\room\NPC[3]\State = 3 + #EndIf + #Else + #e\room\NPC[3]\State = 7 + #PointEntity e\room\NPC[3]\obj, Collider + #RotateEntity e\room\NPC[3]\Collider,0,CurveValue(EntityYaw(e\room\NPC[3]\obj),EntityYaw(e\room\NPC[3]\Collider),20.0),0,True + # + #If dist > 5.5 Then + #e\room\NPC[3]\PathStatus = 2 + #If e\room\NPC[3]\State2=0 Then + #FreeSound_Strict e\room\NPC[3]\Sound + #e\room\NPC[3]\Sound = LoadSound_Strict("SFX\Room\Intro\Guard\Ulgrin\EscortRun.ogg") + #e\room\NPC[3]\SoundChn = PlaySound2(e\room\NPC[3]\Sound, Camera, e\room\NPC[3]\Collider) + #PlaySound2(e\Sound, Camera, e\room\NPC[3]\Collider) + #e\room\NPC[3]\State2=1 + #EndIf + # + #e\room\NPC[3]\State = 5 + #e\room\NPC[3]\EnemyX = EntityX(Collider) + #e\room\NPC[3]\EnemyY = EntityY(Collider) + #e\room\NPC[3]\EnemyZ = EntityZ(Collider) + #;e\room\NPC[3]\PathStatus = FindPath(e\room\NPC[3],EntityY(Collider), 0.3, EntityZ(Collider)) + #EndIf + #EndIf + # + #;PointEntity e\room\NPC[5]\obj, Collider + #;RotateEntity e\room\NPC[5]\Collider, 0, CurveAngle(EntityYaw(e\room\NPC[5]\obj),EntityYaw(e\room\NPC[5]\Collider),30), 0 + # + #dist = EntityDistance(Collider, e\room\NPC[4]\Collider) + #If dist > 1.5 And EntityDistance(e\room\NPC[3]\Collider, Collider)0 Then + #If ChannelPlaying(e\room\NPC[7]\SoundChn) Then + #StopChannel(e\room\NPC[7]\SoundChn) + #FreeSound_Strict e\room\NPC[7]\Sound + #e\room\NPC[7]\Sound=0 + #EndIf + #EndIf + # + #FreeEntity(e\room\Objects[9]) + #e\room\Objects[9]=0 + #FreeEntity(e\room\Objects[10]) + #e\room\Objects[10]=0 + # + #If e\room\NPC[5]<>Null Then + #RemoveNPC(e\room\NPC[5]) + #EndIf + # + #For i = 8 To 10 + #If e\room\NPC[i]<>Null Then + #RemoveNPC(e\room\NPC[i]) + #EndIf + #Next + # + #FreeSound_Strict e\room\NPC[3]\Sound + #e\room\NPC[3]\Sound = LoadSound_Strict("SFX\Room\Intro\Guard\Ulgrin\EscortDone"+Rand(1,5)+".ogg") + #e\room\NPC[3]\SoundChn = PlaySound2(e\room\NPC[3]\Sound, Camera, e\room\NPC[3]\Collider) + # + #PositionEntity e\room\NPC[6]\Collider, EntityX(e\room\obj,True)-1190*RoomScale, 450*RoomScale, EntityZ(e\room\obj, True)+456*RoomScale, True + #ResetEntity e\room\NPC[6]\Collider + #PointEntity e\room\NPC[6]\Collider, e\room\obj + #e\room\NPC[6]\CurrSpeed = 0 + #e\room\NPC[6]\State = 0 + # + #e\EventState3 = 905 ;910 + # + #e\room\RoomDoors[3]\locked = False + #UseDoor(e\room\RoomDoors[3],False) + #e\room\RoomDoors[3]\locked = True + # + #e\room\NPC[4]\State = 9 + # + #;e\room\RoomDoors[2]\locked = False + #;UseDoor(e\room\RoomDoors[2],False) + #;e\room\RoomDoors[2]\locked = True + #EndIf + #ElseIf e\EventState3 <= 905 + #If (Not ChannelPlaying(e\room\NPC[3]\SoundChn)) And e\room\NPC[3]\Frame < 358.0 Then + #e\room\NPC[3]\State = 8 + #FreeSound_Strict e\room\NPC[3]\Sound + #e\room\NPC[3]\Sound = LoadSound_Strict("SFX\Room\Intro\Guard\Ulgrin\OhAndByTheWay.ogg") + #e\room\NPC[3]\SoundChn = PlaySound2(e\room\NPC[3]\Sound, Camera, e\room\NPC[3]\Collider) + #SetNPCFrame(e\room\NPC[3],358) + #ElseIf e\room\NPC[3]\Frame >= 358.0 Then + #PointEntity e\room\NPC[3]\Collider,Collider + #RotateEntity e\room\NPC[3]\Collider,0,EntityYaw(e\room\NPC[3]\Collider),0 + # + #If e\room\NPC[3]\Frame <= 481.5 Then + #Local prevAnimFrame# = e\room\NPC[3]\Frame + #AnimateNPC(e\room\NPC[3],358.0,482.0,0.4,False) + #Else + #AnimateNPC(e\room\NPC[3],483.0,607.0,0.2,True) + #If (EntityDistance(Collider, e\room\NPC[3]\Collider)<1.5) Then + #If EntityInView(e\room\NPC[3]\obj, Camera) Then + #DrawHandIcon = True + # + #If MouseHit1 Then + #SelectedItem = CreateItem("Document SCP-173", "paper", 0.0, 0.0, 0.0) + #EntityType SelectedItem\collider,HIT_ITEM + # + #PickItem(SelectedItem) + # + #e\room\RoomDoors[2]\locked = False + #UseDoor(e\room\RoomDoors[2],False) + #e\room\RoomDoors[2]\locked = True + #e\EventState3 = 910 + #SetNPCFrame(e\room\NPC[3],608) + #EndIf + #EndIf + #EndIf + #EndIf + #EndIf + #Else + #If e\room\NPC[3]\Frame <= 620.5 And e\room\NPC[3]\State = 8 Then + #AnimateNPC(e\room\NPC[3],608,621,0.4,False) + #Else + #e\room\NPC[3]\Angle = EntityYaw(e\room\NPC[3]\Collider) + #e\room\NPC[3]\State = 9 + #e\room\NPC[4]\State = 9 + #If Distance(EntityX(Collider), EntityZ(Collider), EntityX(e\room\obj), EntityZ(e\room\obj)) < 4.0 Then + #e\room\RoomDoors[2]\locked = False + #UseDoor(e\room\RoomDoors[2],False) + #e\room\RoomDoors[2]\locked = True + #e\EventState3 = 0 + #e\room\NPC[3]\State = 0 + #e\room\NPC[4]\State = 0 + # + #UseDoor(e\room\RoomDoors[1],False) + #EndIf + #EndIf + #EndIf + # + #;the scientist sitting at his desk + #If e\room\NPC[7]<>Null Then + #RotateEntity e\room\NPC[7]\Collider,0,180+Sin(MilliSecs2()/20)*3,0,True + #PositionEntity e\room\NPC[7]\Collider, EntityX(e\room\obj,True)-3361*RoomScale,-315*RoomScale,EntityZ(e\room\obj,True)-2165*RoomScale + #ResetEntity e\room\NPC[7]\Collider + # + #e\room\NPC[7]\State = 6 + #SetNPCFrame(e\room\NPC[7], 182) + # + #If e\room\NPC[6]\State=1 And e\room\NPC[7]\Sound<>0 Then + #If e\room\NPC[7]\SoundChn<>0 Then + #If (Not ChannelPlaying(e\room\NPC[7]\SoundChn)) Then FreeSound_Strict e\room\NPC[7]\Sound : e\room\NPC[7]\Sound=0 + # + #EndIf + # + #If e\room\NPC[7]\Sound<>0 Then e\room\NPC[7]\SoundChn = LoopSound2(e\room\NPC[7]\Sound, e\room\NPC[7]\SoundChn, Camera, e\room\NPC[7]\Collider, 7.0) + #EndIf + #EndIf + # + #For i = 3 To 4 + #If e\room\NPC[i]\Sound <> 0 Then + #If ChannelPlaying(e\room\NPC[i]\SoundChn)=False Then + #FreeSound_Strict e\room\NPC[i]\Sound + #e\room\NPC[i]\Sound=0 + #Else + #e\room\NPC[i]\SoundChn=LoopSound2(e\room\NPC[i]\Sound, e\room\NPC[i]\SoundChn, Camera, e\room\NPC[i]\Collider) + #EndIf + #EndIf + #Next + # + #Else + # + #;ambience inside the chamber + #If IntroSFX(18)<>0 Then e\SoundCHN2 = LoopSound2(IntroSFX(18), e\SoundCHN2, Camera, e\room\Objects[4], 6) + # + #;[Block] + #If e\EventState = 0 Then + #If PlayerRoom = e\room Then + #IntroSFX(0) = LoadSound_Strict("SFX\Room\Intro\Scientist\Franklin\EnterChamber.ogg") + #IntroSFX(1) = LoadSound_Strict("SFX\Room\Intro\Scientist\Franklin\Approach173.ogg") + #IntroSFX(2) = LoadSound_Strict("SFX\Room\Intro\Scientist\Franklin\Problem.ogg") + #For i = 4 To 6 + #IntroSFX(i) = LoadSound_Strict("SFX\Room\Intro\Scientist\Franklin\Refuse" + (i - 3) + ".ogg") + #Next + #IntroSFX(16) = LoadSound_Strict("SFX\Room\Intro\Horror.ogg") + #IntroSFX(17) = LoadSound_Strict("SFX\Room\Intro\See173.ogg") + #IntroSFX(18) = LoadSound_Strict("SFX\Room\Intro\173Chamber.ogg") + # + #Curr173\Idle = True + # + #e\room\NPC[3] = CreateNPC(NPCtypeGuard, e\room\x-4096*RoomScale+Rnd(-0.3,0.3), 0.3, e\room\z+Rand(860,896)*RoomScale) + #RotateEntity e\room\NPC[3]\Collider,0,e\room\angle+180,0 + #e\room\NPC[3]\State = 7 + #e\room\NPC[4] = CreateNPC(NPCtypeGuard, e\room\x-3840*RoomScale, 0.3, e\room\z+768*RoomScale) + #RotateEntity e\room\NPC[4]\Collider,0,e\room\angle+135,0 + #e\room\NPC[4]\State = 7 + #;SetNPCFrame(e\room\NPC[4], Rnd(1035, 1326)) + #e\room\NPC[5] = CreateNPC(NPCtypeGuard, e\room\x-8288*RoomScale, 0.3, e\room\z+1096*RoomScale) + #e\room\NPC[5]\Sound = LoadSound_Strict("SFX\Room\Intro\Guard\Music"+Rand(1,5)+".ogg") + #RotateEntity e\room\NPC[5]\Collider, 0, e\room\angle+180, 0, True + #e\room\NPC[5]\State = 7 + #e\room\NPC[5]\Sound2 = LoadSound_Strict("SFX\Room\Intro\Guard\PlayerEscape.ogg") + #e\room\NPC[6] = CreateNPC(NPCtypeD, e\room\x-3712*RoomScale, -0.3, e\room\z-2208*RoomScale) + #;tex = LoadTexture_Strict("GFX\npcs\scientist2.jpg") + #;EntityTexture e\room\NPC[6]\obj, DTextures[4] + #;FreeTexture tex + #ChangeNPCTextureID(e\room\NPC[6],3) + #e\room\NPC[7] = CreateNPC(NPCtypeD, e\room\x-3712*RoomScale, -0.3, e\room\z-2208*RoomScale) + #;tex = LoadTexture_Strict("GFX\npcs\scientist.jpg") + #e\room\NPC[7]\Sound = LoadSound_Strict("SFX\Room\Intro\Scientist\Conversation.ogg") + #;EntityTexture e\room\NPC[7]\obj, DTextures[3] + #;FreeTexture tex + #ChangeNPCTextureID(e\room\NPC[7],2) + #pvt = CreatePivot() + #RotateEntity pvt,90,0,0 + # + #e\room\NPC[8] = CreateNPC(NPCtypeGuard, e\room\x-3800.0*RoomScale, 1.0, e\room\z-3900.0*RoomScale) + #e\room\NPC[8]\State = 7 + #e\room\NPC[9] = CreateNPC(NPCtypeD, e\room\x-4000.0*RoomScale, 1.1, e\room\z-3900.0*RoomScale) + #e\room\NPC[9]\State2 = 1.0 + #tex = LoadTexture_Strict("GFX\npcs\classd3.jpg") + #EntityTexture e\room\NPC[9]\obj, tex + #FreeTexture tex + #e\room\NPC[10] = CreateNPC(NPCtypeGuard, e\room\x-4200.0*RoomScale, 1.0, e\room\z-3900.0*RoomScale) + #e\room\NPC[10]\State = 7 + # + #For i = 8 To 10 + #PositionEntity pvt,EntityX(e\room\NPC[i]\Collider),EntityY(e\room\NPC[i]\Collider),EntityZ(e\room\NPC[i]\Collider) + #EntityPick pvt,20.0 + #If PickedEntity() <> 0 + #PositionEntity e\room\NPC[i]\Collider,PickedX(),PickedY(),PickedZ(),True + #AlignToVector e\room\NPC[i]\Collider,-PickedNX(),-PickedNY(),-PickedNZ(),3 + #RotateEntity e\room\NPC[i]\Collider,0,90,0 + #EndIf + #Next + # + #FreeEntity pvt + # + #PositionEntity(Curr173\Collider, EntityX(e\room\Objects[5], True), 0.5, EntityZ(e\room\Objects[5], True)) + #ResetEntity(Curr173\Collider) + # + #PositionEntity Collider, PlayerRoom\x-(3072+1024)*RoomScale, 0.3, PlayerRoom\z+192.0*RoomScale + #ResetEntity Collider + # + #e\EventState = 1 + #e\EventState3 = 1 + #EndIf + #ElseIf e\EventState < 10000 + #If e\room\NPC[6]\SoundChn<>0 Then + #If ChannelPlaying (e\room\NPC[6]\SoundChn) Then + #e\room\NPC[6]\State = 6 + #;PointEntity e\room\NPC[6]\Collider, e\room\obj + #If AnimTime(e\room\NPC[6]\obj)=>325 Then + #Animate2(e\room\NPC[6]\obj, AnimTime(e\room\NPC[6]\obj),326,328, 0.02, False) + #Else + #Animate2(e\room\NPC[6]\obj, AnimTime(e\room\NPC[6]\obj),320,328, 0.05, False) + #EndIf + #Else + #Animate2(e\room\NPC[6]\obj,AnimTime(e\room\NPC[6]\obj), 328,320,-0.02, False) + #EndIf + #EndIf + # + #If IntroSFX(17)<>0 Then + #If EntityVisible(Curr173\Collider, Collider) Then + #If EntityInView(Curr173\obj, Camera) Then + #Msg = "Press "+KeyName(KEY_BLINK)+" to blink." + #MsgTimer = 70*4 + #PlaySound_Strict IntroSFX(17) + #IntroSFX(17)=0 + #EndIf + #EndIf + #EndIf + # + #e\EventState = Min(e\EventState + (FPSfactor / 3), 5000) + #If e\EventState >= 130 And e\EventState - (FPSfactor/3) < 130 Then + #e\room\NPC[6]\SoundChn = PlaySound_Strict(IntroSFX(0)) + #ElseIf e\EventState > 230 + #temp = True + #For i = 1 To 2 + #If Distance(EntityX(e\room\NPC[i]\Collider), EntityZ(e\room\NPC[i]\Collider), EntityX(e\room\Objects[i + 2], True), EntityZ(e\room\Objects[i + 2], True)) > 0.3 Then + # + #PointEntity(e\room\NPC[i]\obj, e\room\Objects[i + 2]) + #RotateEntity(e\room\NPC[i]\Collider, 0, CurveValue(EntityYaw(e\room\NPC[i]\obj),EntityYaw(e\room\NPC[i]\Collider),15.0),0) + #;moveentity(e\room\npc(i).Collider, 0, 0, 0.015 * FPSfactor) + #If e\EventState > (200 + i * 30) Then e\room\NPC[i]\State = 1 + #temp = False + #Else + #e\room\NPC[i]\State = 0 + # + #PointEntity(e\room\NPC[i]\obj, e\room\Objects[5]) + #RotateEntity(e\room\NPC[i]\Collider, 0, CurveValue(EntityYaw(e\room\NPC[i]\obj),EntityYaw(e\room\NPC[i]\Collider),15.0), 0) + # + #EndIf + #Next + # + #If EntityX(Collider) < (EntityX(e\room\obj)) + 408.0 * RoomScale Then + #If e\EventState => 450 And e\EventState - (FPSfactor/3) < 450 Then ;"mene huoneeseen" + #e\room\NPC[6]\SoundChn = PlaySound_Strict(IntroSFX(4)) + #ElseIf e\EventState => 650 And e\EventState - (FPSfactor/3) < 650 ;"viimeinen varoitus, 5 sek aikaa" + #e\room\NPC[6]\SoundChn = PlaySound_Strict(IntroSFX(5)) + #ElseIf e\EventState => 850 And e\EventState - (FPSfactor/3) < 850 ;"fire at will" + #UseDoor(e\room\RoomDoors[1],False) + #;e\room\RoomDoors[1]\open = False + #e\room\NPC[6]\SoundChn = PlaySound_Strict(IntroSFX(6)) + #ElseIf e\EventState > 1000 + #e\room\NPC[0]\State = 1 + #e\room\NPC[0]\State2= 10 + #e\room\NPC[0]\State3= 1 + #e\room\NPC[3]\State = 11 + #e\room\RoomDoors[2]\locked = False + #UseDoor(e\room\RoomDoors[2],False) + #e\room\RoomDoors[2]\locked = True + #e\EventState2 = 1 + #Exit + #EndIf + # + #If e\EventState > 850 Then + #PositionEntity(Collider, Min(EntityX(Collider), EntityX(e\room\obj) + 352.0 * RoomScale), EntityY(Collider), EntityZ(Collider)) + #End If + #ElseIf temp = True ;pelaaja ja molemmat npc:t huoneessa + #e\EventState = 10000 + #UseDoor(e\room\RoomDoors[1],False) + #End If + #End If + # + #e\room\NPC[6]\State = 7 + #PointEntity e\room\NPC[6]\obj, Collider + #RotateEntity e\room\NPC[6]\Collider,0,CurveValue(EntityYaw(e\room\NPC[6]\obj),EntityYaw(e\room\NPC[6]\Collider),20.0),0,True + # + #PositionEntity(Curr173\Collider, EntityX(e\room\Objects[5], True), EntityY(Curr173\Collider), EntityZ(e\room\Objects[5], True)) + #RotateEntity(Curr173\Collider, 0, 0, 0, True) + #ResetEntity(Curr173\Collider) + #ElseIf e\EventState < 14000 ; player is inside the room + #e\EventState = Min(e\EventState + FPSfactor, 13000) + # + #If e\EventState < 10300 Then + #PositionEntity(Collider, Max(EntityX(Collider), EntityX(e\room\obj) + 352.0 * RoomScale), EntityY(Collider), EntityZ(Collider)) + #End If + # + #e\room\NPC[6]\State = 6 + #PointEntity e\room\NPC[6]\obj, Curr173\Collider + #RotateEntity e\room\NPC[6]\Collider,0,CurveValue(EntityYaw(e\room\NPC[6]\obj),EntityYaw(e\room\NPC[6]\Collider),50.0),0,True + # + #If e\EventState => 10300 And e\EventState - FPSfactor < 10300 Then ;"please approach SCP-173..." + #e\SoundCHN = PlaySound_Strict(IntroSFX(1)) + #PositionEntity(Collider, Max(EntityX(Collider), EntityX(e\room\obj) + 352.0 * RoomScale), EntityY(Collider), EntityZ(Collider)) + #ElseIf e\EventState => 10440 And e\EventState - FPSfactor < 10440 ;the door opens + #UseDoor(e\room\RoomDoors[1],False) + #e\SoundCHN = PlaySound_Strict(IntroSFX(7)) ;bang + #ElseIf e\EventState => 10740 And e\EventState - FPSfactor < 10740 ;"there seems to be a problem..." + #e\SoundCHN = PlaySound_Strict(IntroSFX(2)) + #ElseIf e\EventState => 11145 And e\EventState - FPSfactor < 11145;"I don't like this" + #e\SoundCHN = PlaySound_Strict(IntroSFX(10)) + #e\room\NPC[1]\Sound = LoadSound_Strict("SFX\Room\Intro\ClassD\DontLikeThis.ogg") + #PlaySound2(e\room\NPC[1]\Sound, Camera, e\room\NPC[2]\Collider) + #ElseIf e\EventState => 11561 And e\EventState - FPSfactor < 11561 ;lights go out + #e\EventState = 14000 + #PlaySound_Strict IntroSFX(16) + #e\room\NPC[2]\Sound = LoadSound_Strict("SFX\Room\Intro\ClassD\Breen.ogg") + #PlaySound2(e\room\NPC[2]\Sound, Camera, e\room\NPC[1]\Collider) + #End If + # + #;Guard Alert + #If e\EventState => 10440 And e\EventState - FPSfactor < 11561 + #If EntityX(Collider) < EntityX(e\room\RoomDoors[1]\frameobj, True) + #If e\room\NPC[0]\State <> 12 + #e\room\NPC[0]\Sound = LoadSound_Strict("SFX\Room\Intro\Guard\Balcony\Alert"+Rand(1,2)+".ogg") + #e\room\NPC[0]\SoundChn = PlaySound2(e\room\NPC[0]\Sound,Camera,e\room\NPC[0]\Collider,20) + #e\room\NPC[0]\State = 12 + #e\room\NPC[0]\State2 = 1 + #EndIf + #EndIf + #EndIf + # + #If e\EventState > 10300 Then + # + #If e\EventState > 10560 Then + #If e\EventState < 10750 Then + #e\room\NPC[1]\State = 1 + #e\room\NPC[1]\CurrSpeed = 0.005 + #Else + #e\room\NPC[1]\State = 0 + #e\room\NPC[1]\CurrSpeed = CurveValue(0,e\room\NPC[1]\CurrSpeed,10) + #EndIf + # + #EndIf + # + #If AnimTime(e\room\NPC[6]\obj)=>325 Then + #Animate2(e\room\NPC[6]\obj, AnimTime(e\room\NPC[6]\obj),326,328, 0.02, False) + #Else + #Animate2(e\room\NPC[6]\obj, AnimTime(e\room\NPC[6]\obj),320,328, 0.05, False) + #EndIf + #EndIf + # + #PositionEntity(Curr173\Collider, EntityX(e\room\Objects[5], True),EntityY(Curr173\Collider), EntityZ(e\room\Objects[5], True)) + #RotateEntity(Curr173\Collider, 0, 0, 0, True) + #ResetEntity(Curr173\Collider) + #ElseIf e\EventState < 20000 + #pvt% = CreatePivot() + #PositionEntity pvt, EntityX(Camera), EntityY(Curr173\Collider,True)-0.05, EntityZ(Camera) + #PointEntity(pvt, Curr173\Collider) + #RotateEntity(Collider, EntityPitch(Collider), CurveAngle(EntityYaw(pvt), EntityYaw(Collider), 40), 0) + # + #TurnEntity(pvt, 90, 0, 0) + #user_camera_pitch = CurveAngle(EntityPitch(pvt), user_camera_pitch + 90.0, 40) + #user_camera_pitch=user_camera_pitch-90 + #FreeEntity pvt + # + #e\room\NPC[6]\State = 6 + #PointEntity e\room\NPC[6]\obj, Curr173\Collider + #RotateEntity e\room\NPC[6]\Collider,0,CurveValue(EntityYaw(e\room\NPC[6]\obj),EntityYaw(e\room\NPC[6]\Collider),20.0),0,True + #Animate2(e\room\NPC[6]\obj, AnimTime(e\room\NPC[6]\obj),357,381, 0.05) + # + #e\EventState = Min(e\EventState + FPSfactor, 19000) + #If e\EventState < 14100 Then ;lights go out and 173 kills the first Class D + # + #;14000-14030 + #If e\EventState < 14060 Then + #BlinkTimer = Max((14000-e\EventState)/2-Rnd(0,1.0),-10) + #;0-60, 90-640 + #If BlinkTimer = -10 Then + #PointEntity Curr173\Collider, e\room\NPC[1]\obj + #RotateEntity(Curr173\Collider, 0, EntityYaw(Curr173\Collider),0) + #MoveEntity Curr173\Collider, 0,0,Curr173\Speed*0.6*FPSfactor + # + #Curr173\SoundChn = LoopSound2(StoneDragSFX, Curr173\SoundChn, Camera, Curr173\Collider, 10.0, Curr173\State) + # + #Curr173\State = CurveValue(1.0, Curr173\State, 3) + # + #Else + #Curr173\State = Max(0, Curr173\State - FPSfactor / 20) + #EndIf + #ElseIf e\EventState < 14065 + #BlinkTimer = -10 + #If e\room\NPC[1]\State = 0 Then PlaySound2(NeckSnapSFX(Rand(0, 2)),Camera,Curr173\Collider) + # + #;e\room\NPC[0]\State=8 + #SetAnimTime e\room\NPC[1]\obj, 0 + #e\room\NPC[1]\State = 6 + #PositionEntity(Curr173\Collider, EntityX(e\room\NPC[1]\obj), EntityY(Curr173\Collider), EntityZ(e\room\NPC[1]\obj)) + #ResetEntity(Curr173\Collider) + #PointEntity(Curr173\Collider, e\room\NPC[2]\Collider) + # + #e\room\NPC[2]\State = 3 + #RotateEntity e\room\NPC[2]\Collider, 0, EntityYaw(e\room\NPC[2]\Collider), 0 + #Animate2(e\room\NPC[2]\obj, AnimTime(e\room\NPC[2]\obj),406,382,-0.01*15) + #MoveEntity e\room\NPC[2]\Collider, 0,0,-0.01*FPSfactor + # + #;Guard WTF + #e\room\NPC[0]\State = 12 + #If e\room\NPC[0]\Sound<>0 + #StopChannel(e\room\NPC[0]\SoundChn) + #FreeSound_Strict(e\room\NPC[0]\Sound) + #e\room\NPC[0]\Sound = 0 + #EndIf + #e\room\NPC[0]\Angle = 180 + #e\room\NPC[0]\Sound = LoadSound_Strict("SFX\Room\Intro\Guard\Balcony\WTF"+Rand(1,2)+".ogg") + #e\room\NPC[0]\SoundChn = PlaySound2(e\room\NPC[0]\Sound,Camera,e\room\NPC[0]\Collider,20) + #e\room\NPC[0]\State2 = 0 + #Else + #Animate2(e\room\NPC[1]\obj, AnimTime(e\room\NPC[1]\obj), 0, 19, 0.2, False) + #If e\room\NPC[2]\Sound=0 Then + #e\room\NPC[2]\Sound = LoadSound_Strict("SFX\Room\Intro\ClassD\Gasp.ogg") + #PlaySound2 (e\room\NPC[2]\Sound, Camera, e\room\NPC[2]\Collider, 8.0) + #EndIf + #EndIf + # + #If e\EventState > 14080 And e\EventState - FPSfactor < 14080 Then PlaySound_Strict(IntroSFX(12)) + #CameraShake = 3 + #ElseIf e\EventState < 14200 ;kills the other class d + #Animate2(e\room\NPC[1]\obj, AnimTime(e\room\NPC[1]\obj), 0, 19, 0.2, False) + # + #;Animate2(e\room\NPC[0]\obj, AnimTime(e\room\NPC[0]\obj), 110, 120, 0.2, False) + #e\room\NPC[0]\State=8 + #If e\EventState > 14105 Then + #If e\room\NPC[2]\State<>6 Then PlaySound2 (NeckSnapSFX(1), Camera, e\room\NPC[2]\Collider, 8.0) + #e\room\NPC[2]\State = 6 + #PositionEntity(Curr173\Collider, EntityX(e\room\NPC[2]\obj), EntityY(Curr173\Collider), EntityZ(e\room\NPC[2]\obj)) + #ResetEntity(Curr173\Collider) + #PointEntity(Curr173\Collider, Collider) + #EndIf + #If e\EventState < 14130 Then + #SetAnimTime e\room\NPC[2]\obj,50 + #BlinkTimer = -10 : LightBlink = 1.0 + #Else + #Animate2(e\room\NPC[2]\obj, AnimTime(e\room\NPC[2]\obj), 50, 60, 0.2, False) + #Curr173\Idle = False + #EndIf + #If e\EventState > 14100 And e\EventState - FPSfactor < 14100 Then PlaySound_Strict(IntroSFX(8)) + #If e\EventState < 14150 Then CameraShake = 5 + #Else + #Animate2(e\room\NPC[2]\obj, AnimTime(e\room\NPC[2]\obj), 45, 60, 0.2, False) + #If e\EventState > 14300 Then + #If e\EventState > 14600 And e\EventState < 14700 Then BlinkTimer = -10 : LightBlink = 1.0 + #If EntityX(Collider) < (EntityX(e\room\obj)) + 448.0 * RoomScale Then e\EventState = 20000 + #EndIf + #End If + #ElseIf e\EventState < 30000 + #e\EventState = Min(e\EventState + FPSfactor, 30000) + #If e\EventState < 20100 Then + #CameraShake = 2 + #Else + #If e\EventState < 20200 Then ;lights go out again and 173 teleports next to the guard + #If e\EventState > 20105 And e\EventState - FPSfactor < 20105 Then + #PlaySound_Strict(IntroSFX(9)) + #PositionEntity(e\room\NPC[0]\Collider, EntityX(e\room\obj) - 160.0 * RoomScale, EntityY(e\room\NPC[0]\Collider) + 0.1, EntityZ(e\room\obj) + 1280.0 * RoomScale) + #ResetEntity(e\room\NPC[0]\Collider) + # + #;Guard OhShit + #If e\room\NPC[0]\Sound<>0 + #StopChannel(e\room\NPC[0]\SoundChn) + #FreeSound_Strict(e\room\NPC[0]\Sound) + #e\room\NPC[0]\Sound = 0 + #EndIf + #e\room\NPC[0]\Sound = LoadSound_Strict("SFX\Room\Intro\Guard\Balcony\OhSh.ogg") + #e\room\NPC[0]\SoundChn = PlaySound2(e\room\NPC[0]\Sound,Camera,e\room\NPC[0]\Collider,20) + #EndIf + #If e\EventState > 20105 Then + #Curr173\Idle = True + #PointEntity(e\room\NPC[0]\Collider, Curr173\obj) + #PositionEntity(Curr173\Collider, EntityX(e\room\obj) - 608.0 * RoomScale, EntityY(e\room\obj) + 480.0 * RoomScale, EntityZ(e\room\obj) + 1312.0 * RoomScale) + #ResetEntity(Curr173\Collider) + #PointEntity(Curr173\Collider, e\room\NPC[0]\Collider) + #EndIf + # + #BlinkTimer = -10 : LightBlink = 1.0 + #CameraShake = 3 + #ElseIf e\EventState < 20300 ;lights on, the guard starts shooting at 173 + #PointEntity(e\room\NPC[0]\Collider, Curr173\Collider) + #MoveEntity(e\room\NPC[0]\Collider, 0, 0, -0.002) + #e\room\NPC[0]\State = 2 + #UpdateSoundOrigin(e\room\NPC[0]\SoundChn,Camera,e\room\NPC[0]\Collider,20) + #If e\EventState > 20260 And e\EventState - FPSfactor < 20260 Then PlaySound_Strict(IntroSFX(12)) + #Else ;lights out, guard dies + # + #If e\EventState - FPSfactor < 20300 Then + #BlinkTimer = -10 : LightBlink = 1.0 + #CameraShake = 3 + #PlaySound_Strict(IntroSFX(11)) + #PlaySound2 (NeckSnapSFX(1), Camera, e\room\NPC[0]\Collider, 8.0) + # + #Curr173\Idle = False + # + #e\SoundCHN = PlaySound_Strict(IntroSFX(15)) + # + #PositionEntity(Curr173\Collider, EntityX(PlayerRoom\obj) - 400.0 * RoomScale, 100.0, EntityZ(PlayerRoom\obj) + 1072.0 * RoomScale) + #ResetEntity(Curr173\Collider) + # + #For r.Rooms = Each Rooms + #If r\RoomTemplate\Name = "start" Then + #DebugLog "tostart" + #;Msg = "Press "+KeyName(KEY_SAVE)+" to save." + #;MsgTimer = 70*8 + # + #PlayerRoom = r + # + #x# = EntityX(r\obj, True)+3712*RoomScale + #y# = 384.0*RoomScale + #z# = EntityZ(r\obj, True)+1312*RoomScale + # + #PositionEntity(Collider, x + (EntityX(Collider) - EntityX(e\room\obj)), y+EntityY(Collider)+0.4, z + (EntityZ(Collider) - EntityZ(e\room\obj))) + #DropSpeed = 0 + #ResetEntity(Collider) + # + #For i = 0 To 2 + #PositionEntity(e\room\NPC[i]\Collider, x + (EntityX(e\room\NPC[i]\Collider) - EntityX(e\room\obj)), y+EntityY(e\room\NPC[i]\Collider)+0.4, z + (EntityZ(e\room\NPC[i]\Collider) - EntityZ(e\room\obj))) + #ResetEntity(e\room\NPC[i]\Collider) + #Next + # + #ShouldPlay = 0 + # + #For i = 0 To 9 + #FreeSound_Strict IntroSFX(i) + #Next + #For i = 16 To 18 + #FreeSound_Strict IntroSFX(i) + #Next + # + #r\NPC[0]=e\room\NPC[0] + #r\NPC[0]\State=8 + # + #For do.doors = Each Doors + #If do\room = e\room Then + #RemoveDoor(do) + #EndIf + #Next + # + #For w.waypoints = Each WayPoints + #If w\room = e\room Then + #FreeEntity w\obj + #Delete w + #EndIf + #Next + # + #For i = 3 To 4 + #RemoveNPC(e\room\NPC[i]) + #Next + #r\NPC[1]=e\room\NPC[6] + #;RemoveNPC(e\room\NPC[7]) + # + #FreeEntity e\room\obj + #Delete e\room + # + #For sc.SecurityCams = Each SecurityCams + #If sc\room = e\room Then Delete sc + #Next + # + #ShowEntity Fog + #AmbientLight Brightness, Brightness, Brightness + #CameraFogRange(Camera, CameraFogNear, CameraFogFar) + #CameraFogMode(Camera, 1) + # + #e\EventState2 = 1 + # + #;For i = 8 To 10 + #; RemoveNPC(e\room\NPC[i]) + #;Next + # + #Exit + #EndIf + #Next + #EndIf + # + #EndIf + # + #EndIf + #EndIf + # + #;[End block] + # + #EndIf + # + #Else + #If KillTimer<0 Then + #If e\room\NPC[3]\State = 1 Then + #LoadEventSound(e,"SFX\Room\Intro\Guard\Ulgrin\EscortTerminated.ogg") + #PlaySound_Strict e\Sound + #EndIf + #EndIf + # + #For i = 0 To 6 + #If IntroSFX(i)<>0 Then FreeSound_Strict IntroSFX(i) : IntroSFX(i)=0 + #Next + #FreeSound_Strict IntroSFX(16) : IntroSFX(16)=0 + # + #e\EventState2 = 1 + #EndIf + # + #If PlayerRoom = e\room Then + #If e\EventState >= 10 Then + #CameraRange(Camera, 0.05, 15) + #If e\room\NPC[7]<>Null Then + #RemoveNPC(e\room\NPC[7]) + #EndIf + #Else + #CameraRange(Camera, 0.05, 40) + #EndIf + #CameraFogMode(Camera, 0) + #AmbientLight (140, 140, 140) + #HideEntity(Fog) + # + #LightVolume = 4.0 + #TempLightVolume = 4.0 + #Else + #DebugLog "delete intro event" + #RemoveEvent(e) + #EndIf + #;[End Block] + #Case "buttghost" + #;[Block] + #If PlayerRoom = e\room Then + #If EntityDistance(Collider, e\room\Objects[0]) < 1.8 Then + #If e\EventState = 0 + #GiveAchievement(Achv789) + #e\SoundCHN = PlaySound2(ButtGhostSFX, Camera,e\room\Objects[0]) + #e\EventState = 1 + #Else + #If (Not ChannelPlaying(e\SoundCHN)) + #RemoveEvent(e) + #EndIf + #EndIf + #EndIf + #EndIf + #;[End Block] + #Case "checkpoint" + #;[Block] + #If PlayerRoom = e\room Then + #;If e\room\RoomDoors[0]\open <> e\EventState Then + #; If e\Sound = 0 Then LoadEventSound(e,"SFX\Door\DoorCheckpoint.Ogg") + #; PlaySound_Strict e\Sound + #;EndIf + # + #;play a sound clip when the player passes through the gate + #If e\EventState2 = 0 Then + #If EntityZ(Collider) < e\room\z Then + #If PlayerZone = 1 Then + #PlaySound_Strict(LoadTempSound("SFX\Ambient\ToZone2.ogg")) + #Else + #PlaySound_Strict(LoadTempSound("SFX\Ambient\ToZone3.ogg")) + #EndIf + #e\EventState2 = 1 + #EndIf + #EndIf + # + #If e\EventState3=0 Then + #If Rand(2)=1 Then + #GiveAchievement(Achv1048) + #e\room\Objects[1]=LoadAnimMesh_Strict("GFX\npcs\scp-1048.b3d") + #ScaleEntity e\room\Objects[1], 0.05,0.05,0.05 + #PositionEntity(e\room\Objects[1],EntityX(e\room\Objects[0],True),EntityY(e\room\Objects[0],True),EntityZ(e\room\Objects[0],True)) + #SetAnimTime e\room\Objects[1],267 + #EndIf + # + #e\EventState3 = 1 + #ElseIf e\room\Objects[1]<>0 + #If e\EventState3 = 1 Then + #PointEntity e\room\Objects[1], Collider + #RotateEntity e\room\Objects[1], -90, EntityYaw(e\room\Objects[1]),0 + #angle = WrapAngle(DeltaYaw(Collider, e\room\Objects[1])) + #If angle<40 Or angle > 320 Then e\EventState3=2 + #ElseIf e\EventState3 = 2 + #PointEntity e\room\Objects[1], Collider + #RotateEntity e\room\Objects[1], -90, EntityYaw(e\room\Objects[1]),0 + #Animate2(e\room\Objects[1],AnimTime(e\room\Objects[1]),267,283,0.3,False) + #If AnimTime(e\room\Objects[1])=283 Then e\EventState3=3 + #ElseIf e\EventState3 = 3 + #Animate2(e\room\Objects[1],AnimTime(e\room\Objects[1]),283,267,-0.2,False) + #If AnimTime( e\room\Objects[1])=267 Then e\EventState3=4 + #ElseIf e\EventState3 = 4 + #angle = WrapAngle(DeltaYaw(Collider, e\room\Objects[1])) + #If angle>90 And angle < 270 Then + #FreeEntity(e\room\Objects[1]) + #e\room\Objects[1]=0 + #e\EventState3=5 + #EndIf + #EndIf + #EndIf + #EndIf + # + #If e\room\RoomTemplate\Name = "checkpoint2" + #For e2.Events = Each Events + #If e2\EventName = "008" + #If e2\EventState = 2 + #If e\room\RoomDoors[0]\locked + #TurnCheckpointMonitorsOff(1) + #e\room\RoomDoors[0]\locked = False + #e\room\RoomDoors[1]\locked = False + #EndIf + #Else + #If e\room\dist < 12 + #UpdateCheckpointMonitors(1) + #e\room\RoomDoors[0]\locked = True + #e\room\RoomDoors[1]\locked = True + #EndIf + #EndIf + #EndIf + #Next + #Else + #For e2.Events = Each Events + #If e2\EventName = "room2sl" + #If e2\EventState3 = 0 + #If e\room\dist < 12 + #TurnCheckpointMonitorsOff(0) + #e\room\RoomDoors[0]\locked = False + #e\room\RoomDoors[1]\locked = False + #EndIf + #Else + #If e\room\dist < 12 + #UpdateCheckpointMonitors(0) + #e\room\RoomDoors[0]\locked = True + #e\room\RoomDoors[1]\locked = True + #EndIf + #EndIf + #EndIf + #Next + #EndIf + # + #If e\room\RoomDoors[0]\open <> e\EventState Then + #If e\Sound = 0 Then LoadEventSound(e,"SFX\Door\DoorCheckpoint.ogg") + #e\SoundCHN = PlaySound2(e\Sound,Camera,e\room\RoomDoors[0]\obj) + #e\SoundCHN2 = PlaySound2(e\Sound,Camera,e\room\RoomDoors[1]\obj) + #EndIf + # + #e\EventState = e\room\RoomDoors[0]\open + # + #If ChannelPlaying(e\SoundCHN) + #UpdateSoundOrigin(e\SoundCHN,Camera,e\room\RoomDoors[0]\obj) + #EndIf + #If ChannelPlaying(e\SoundCHN2) + #UpdateSoundOrigin(e\SoundCHN2,Camera,e\room\RoomDoors[1]\obj) + #EndIf + #;[End Block] + #Case "coffin", "coffin106" + #;[Block] + # + #If e\EventState < MilliSecs2() Then + #;SCP-079 starts broadcasting 895 camera feed on monitors after leaving the first zone + #If PlayerZone > 0 Then + #If EntityPitch(e\room\Levers[0],True) > 0 Then ;camera feed on + #For sc.SecurityCams = Each SecurityCams + #If sc\CoffinEffect=0 And sc\room\RoomTemplate\Name<>"room106" And sc\room\RoomTemplate\Name<>"room205" Then sc\CoffinEffect = 2 + #If sc\room = e\room Then sc\Screen = True + #Next + #Else ;camera feed off + #For sc.SecurityCams = Each SecurityCams + #If sc\CoffinEffect<>1 Then sc\CoffinEffect = 0 + #If sc\room = e\room Then sc\Screen = False + #Next + #EndIf + #EndIf + # + #e\EventState = MilliSecs2()+3000 + #EndIf + # + #If PlayerRoom = e\room Then + #CoffinDistance = EntityDistance(Collider, e\room\Objects[1]) + #If CoffinDistance < 1.5 Then + #GiveAchievement(Achv895) + #If (Not Contained106) And e\EventName="coffin106" And e\EventState2 = 0 Then + #de.Decals = CreateDecal(0, EntityX(e\room\Objects[1],True), -1531.0*RoomScale, EntityZ(e\room\Objects[1],True), 90, Rand(360), 0) + #de\Size = 0.05 : de\SizeChange = 0.001 : EntityAlpha(de\obj, 0.8) : UpdateDecals() + # + #If Curr106\State > 0 Then + #PositionEntity Curr106\Collider, EntityX(e\room\Objects[1],True), -10240*RoomScale, EntityZ(e\room\Objects[1],True) + #Curr106\State = -0.1 + #ShowEntity Curr106\obj + #e\EventState2 = 1 + #EndIf + #EndIf + #ElseIf CoffinDistance < 3.0 Then + #If e\room\NPC[0]=Null Then + #e\room\NPC[0]=CreateNPC(NPCtypeGuard,e\room\x,e\room\y,e\room\z) + #RotateEntity e\room\NPC[0]\Collider,0,e\room\angle+90,0 + #e\room\NPC[0]\State = 8 + #;270, 286, 0.4, False + #SetNPCFrame(e\room\NPC[0],270) + #e\room\NPC[0]\GravityMult = 0.0 + #e\room\NPC[0]\Sound = LoadSound_Strict("SFX\Room\895Chamber\GuardIdle"+Rand(1,3)+".ogg") + #e\room\NPC[0]\SoundChn = PlaySound2(e\room\NPC[0]\Sound,Camera,e\room\NPC[0]\Collider) + #e\room\NPC[0]\IsDead = True + #e\room\NPC[0]\FallingPickDistance = 0.0 + #EndIf + #ElseIf CoffinDistance > 5.0 Then + #If e\room\NPC[0]<>Null Then + #If e\room\NPC[0]\PrevState = 0 Then + #If ChannelPlaying(e\room\NPC[0]\SoundChn) Then + #StopChannel e\room\NPC[0]\SoundChn + #EndIf + #FreeSound_Strict e\room\NPC[0]\Sound + #e\room\NPC[0]\Sound = LoadSound_Strict("SFX\Room\895Chamber\GuardScream"+Rand(1,3)+".ogg") + #e\room\NPC[0]\SoundChn = PlaySound2(e\room\NPC[0]\Sound,Camera,e\room\NPC[0]\Collider,100) + #e\room\NPC[0]\PrevState = 1 + #e\room\NPC[0]\State2 = 0.0 + #EndIf + #EndIf + #EndIf + # + #If e\room\NPC[0]<>Null Then + #UpdateSoundOrigin(e\room\NPC[0]\SoundChn,Camera,e\room\NPC[0]\Collider,100) + #If e\room\NPC[0]\PrevState = 0 Then + #e\room\NPC[0]\GravityMult = 0.0 + #ElseIf e\room\NPC[0]\PrevState = 1 Then + #If e\room\NPC[0]\State2 < 70*1 Then + #e\room\NPC[0]\State2 = e\room\NPC[0]\State2 + FPSfactor + #e\room\NPC[0]\GravityMult = 0.0 + #Else + #e\room\NPC[0]\GravityMult = 1.0 + #EndIf + #If EntityY(e\room\NPC[0]\Collider)>(-1531.0*RoomScale)+0.35 Then + #dist# = EntityDistance(Collider,e\room\NPC[0]\Collider) + #If dist<0.8 Then ;get the player out of the way + #fdir# = point_direction(EntityX(Collider,True),EntityZ(Collider,True),EntityX(e\room\NPC[0]\Collider,True),EntityZ(e\room\NPC[0]\Collider,True)) + #TranslateEntity Collider,Cos(-fdir+90)*(dist-0.8)*(dist-0.8),0,Sin(-fdir+90)*(dist-0.8)*(dist-0.8) + #EndIf + # + #If EntityY(e\room\NPC[0]\Collider)>0.6 Then EntityType e\room\NPC[0]\Collider,0 + #Else + #e\EventState=e\EventState+FPSfactor + #AnimateNPC(e\room\NPC[0], 270, 286, 0.4, False) + #If e\Sound=0 Then + #LoadEventSound(e,"SFX\General\BodyFall.ogg") + #e\SoundCHN = PlaySound_Strict(e\Sound) + # + #de.Decals = CreateDecal(3, EntityX(e\room\obj), -1531.0*RoomScale, EntityZ(e\room\obj), 90, Rand(360), 0) + #de\Size = 0.4 : ScaleSprite(de\obj,de\Size,de\Size) : UpdateDecals() + #EndIf + #If e\room\NPC[0]\Frame = 286.0 Then + #e\room\NPC[0]\PrevState = 2 + #EndIf + #EndIf + #If e\room\NPC[0]\SoundChn2 = 0 Then + #e\room\NPC[0]\Sound2 = LoadSound_Strict("SFX\Room\895Chamber\GuardRadio.ogg") + #e\room\NPC[0]\SoundChn2 = LoopSound2(e\room\NPC[0]\Sound2,e\room\NPC[0]\SoundChn2,Camera,e\room\NPC[0]\Collider,5) + #EndIf + #ElseIf e\room\NPC[0]\PrevState = 2 Then + #If (Not ChannelPlaying(e\SoundCHN)) And e\Sound<>0 Then + #FreeSound_Strict e\Sound : e\Sound = 0 + #e\SoundCHN = 0 + #EndIf + #If (Not ChannelPlaying(e\room\NPC[0]\SoundChn)) And e\room\NPC[0]\Sound<>0 Then + #FreeSound_Strict e\room\NPC[0]\Sound : e\room\NPC[0]\Sound = 0 + #e\room\NPC[0]\SoundChn = 0 + #EndIf + #If e\room\NPC[0]\Sound2 = 0 Then + #e\room\NPC[0]\Sound2 = LoadSound_Strict("SFX\Room\895Chamber\GuardRadio.ogg") + #EndIf + #e\room\NPC[0]\SoundChn2 = LoopSound2(e\room\NPC[0]\Sound2,e\room\NPC[0]\SoundChn2,Camera,e\room\NPC[0]\Collider,5) + #EndIf + #EndIf + # + #If WearingNightVision > 0 Then + #Local hasBatteryFor895% = 0 + #For i% = 0 To MaxItemAmount - 1 + #If (Inventory(i) <> Null) Then + #If (WearingNightVision = 1 And Inventory(i)\itemtemplate\tempname = "nvgoggles") Or (WearingNightVision = 2 And Inventory(i)\itemtemplate\tempname = "supernv") Or (WearingNightVision = 3 And Inventory(i)\itemtemplate\tempname = "finenvgoggles") Then + #If Inventory(i)\state > 0.0 Or WearingNightVision=3 Then + #hasBatteryFor895 = 1 + #Exit + #EndIf + #EndIf + #EndIf + #Next + #If (CoffinDistance < 4.0) And (hasBatteryFor895) And (Not Wearing714) Then + #tempF# = point_direction(EntityX(Collider,True),EntityZ(Collider,True),EntityX(e\room\Objects[1],True),EntityZ(e\room\Objects[1],True)) + #tempF2# = EntityYaw(Collider) + #tempF3# = angleDist(tempF+90+Sin(WrapAngle(e\EventState3/10)),tempF2) + #TurnEntity Collider, 0,tempF3/4,0,True + #tempF# = Abs(point_distance(EntityX(Collider,True),EntityZ(Collider,True),EntityX(e\room\Objects[1],True),EntityZ(e\room\Objects[1],True))) + #tempF2# = -60.0 * Min(Max((2.0-tempF)/2.0,0.0),1.0) + #user_camera_pitch=(user_camera_pitch * 0.8)+(tempF2 * 0.2) + # + #Sanity = Sanity-(FPSfactor*1.1/WearingNightVision) + #RestoreSanity = False + #BlurTimer = Sin(MilliSecs2()/10)*Abs(Sanity) + # + #If VomitTimer < 0 Then + #RestoreSanity = False + #Sanity = -1010 + #EndIf + # + #If Sanity < -1000 Then + #If WearingNightVision > 1 + #DeathMSG = Chr(34)+"Class D viewed SCP-895 through a pair of digital night vision goggles, presumably enhanced by SCP-914. It might be possible that the subject " + #DeathMSG = DeathMSG + "was able to resist the memetic effects partially through these goggles. The goggles have been stored for further study."+Chr(34) + #Else + #DeathMSG = Chr(34)+"Class D viewed SCP-895 through a pair of digital night vision goggles, killing him."+Chr(34) + #EndIf + #EntityTexture(NVOverlay, NVTexture) + #If VomitTimer < -10 Then + #Kill() + #EndIf + #ElseIf Sanity < - 800 Then + #If Rand(3) = 1 Then EntityTexture(NVOverlay, NVTexture) + #If Rand(6) < 5 Then + #EntityTexture(NVOverlay, GorePics(Rand(0, 5))) + #For i% = 0 To MaxItemAmount - 1 + #If (Inventory(i) <> Null) Then + #If (WearingNightVision = 1 And Inventory(i)\itemtemplate\tempname = "nvgoggles") Or (WearingNightVision = 2 And Inventory(i)\itemtemplate\tempname = "supernv") Or (WearingNightVision = 3 And Inventory(i)\itemtemplate\tempname = "finenvgoggles") Then + #If Inventory(i)\state2 = 1 Then PlaySound_Strict(HorrorSFX(1)) + #Inventory(i)\state2 = 2 + #Exit + #EndIf + #EndIf + #Next + #EndIf + #BlurTimer = 1000 + #If VomitTimer = 0 Then + #VomitTimer = 1 + #EndIf + #ElseIf Sanity < - 500 Then + #If Rand(7) = 1 Then EntityTexture(NVOverlay, NVTexture) + #If Rand(50) = 1 Then + #EntityTexture(NVOverlay, GorePics(Rand(0, 5))) + #For i% = 0 To MaxItemAmount - 1 + #If (Inventory(i) <> Null) Then + #If (WearingNightVision = 1 And Inventory(i)\itemtemplate\tempname = "nvgoggles") Or (WearingNightVision = 2 And Inventory(i)\itemtemplate\tempname = "supernv") Or (WearingNightVision = 3 And Inventory(i)\itemtemplate\tempname = "finenvgoggles") Then + #If Inventory(i)\state2 = 0 Then PlaySound_Strict(HorrorSFX(0)) + #Inventory(i)\state2 = 1 + #Exit + #EndIf + #EndIf + #Next + #EndIf + #Else + #EntityTexture(NVOverlay, NVTexture) + #For i% = 0 To MaxItemAmount - 1 + #If (Inventory(i) <> Null) Then + #If (WearingNightVision = 1 And Inventory(i)\itemtemplate\tempname = "nvgoggles") Or (WearingNightVision = 2 And Inventory(i)\itemtemplate\tempname = "supernv") Or (WearingNightVision = 3 And Inventory(i)\itemtemplate\tempname = "finenvgoggles") Then + #Inventory(i)\state2 = 0 + #EndIf + #EndIf + #Next + #EndIf + #EndIf + #EndIf + # + #If e\EventState3>0.0 Then e\EventState3=Max(e\EventState3-FPSfactor,0.0) + #If e\EventState3=0.0 Then + #e\EventState3=-1.0 + #EntityTexture(NVOverlay, NVTexture) + #If WearingNightVision = 1 Then + #EntityColor(NVOverlay, 0,255,0) + #ElseIf WearingNightVision = 2 Then + #EntityColor(NVOverlay, 0,100,255) + #EndIf + #EndIf + # + #ShouldPlay = 66 + # + #If UpdateLever(e\room\Levers[0]) Then + #For sc.SecurityCams = Each SecurityCams + #If sc\CoffinEffect=0 And sc\room\RoomTemplate\Name<>"room106" Then sc\CoffinEffect = 2 + #If sc\CoffinEffect = 1 Then EntityBlend(sc\ScrOverlay, 3) + #If sc\room = e\room Then sc\Screen = True + #Next + #Else + #For sc.SecurityCams = Each SecurityCams + #If sc\CoffinEffect <> 1 Then sc\CoffinEffect = 0 + #If sc\CoffinEffect = 1 Then EntityBlend(sc\ScrOverlay, 0) + #If sc\room = e\room Then sc\Screen = False + #Next + #EndIf + #Else + #CoffinDistance = e\room\dist + #EndIf + #;[End Block] + #Case "endroom106" + #;[Block] + #If (Not Contained106) Then + #If e\EventState = 0 Then + #If e\room\dist < 8 And e\room\dist > 0 Then + #If Curr106\State < 0 Then + #RemoveEvent(e) + #Else + #e\room\RoomDoors[0]\open = True + # + #e\room\NPC[0]=CreateNPC(NPCtypeD, EntityX(e\room\RoomDoors[0]\obj,True), 0.5, EntityZ(e\room\RoomDoors[0]\obj,True)) + # + #ChangeNPCTextureID(e\room\NPC[0],4) + # + #PointEntity e\room\NPC[0]\Collider, e\room\obj + #RotateEntity e\room\NPC[0]\Collider, 0, EntityYaw(e\room\NPC[0]\Collider),0, True + #MoveEntity e\room\NPC[0]\Collider, 0,0,0.5 + # + #e\room\RoomDoors[0]\open = False + #PlaySound2(LoadTempSound("SFX\Door\EndroomDoor.ogg"), Camera, e\room\obj, 15) + # + #e\EventState = 1 + #EndIf + #EndIf + #ElseIf e\EventState = 1 + #If PlayerRoom = e\room Then + #;PlaySound_Strict(CloseDoorSFX(1,0)) + #;PlaySound_Strict(DecaySFX(0)) + #;e\room\RoomDoors[0]\open = False + #e\room\NPC[0]\State = 1 + #e\EventState = 2 + # + #e\Sound = LoadSound_Strict("SFX\Character\Janitor\106Abduct.ogg") + #PlaySound_Strict(e\Sound) + # + #If e\SoundCHN<>0 Then StopChannel e\SoundCHN + #ElseIf e\room\dist < 8 + #If e\Sound = 0 Then e\Sound = LoadSound_Strict("SFX\Character\Janitor\Idle.ogg") + #e\SoundCHN = LoopSound2(e\Sound, e\SoundCHN, Camera, e\room\NPC[0]\obj, 15.0) + #EndIf + #ElseIf e\EventState = 2 + #dist = EntityDistance(e\room\NPC[0]\Collider, e\room\obj) + #If dist<1.5 Then + #de.Decals = CreateDecal(0, EntityX(e\room\obj), 0.01, EntityZ(e\room\obj), 90, Rand(360), 0) + #de\Size = 0.05 : de\SizeChange = 0.008 : de\timer=10000 : UpdateDecals + #e\EventState = 3 + # + #;PlaySound_Strict(DecaySFX(1)) + #EndIf + #Else + #dist = Distance(EntityX(e\room\NPC[0]\Collider),EntityZ(e\room\NPC[0]\Collider), EntityX(e\room\obj),EntityZ(e\room\obj)) + #PositionEntity(Curr106\obj, EntityX(e\room\obj, True), 0.0, EntityZ(e\room\obj, True)) + #;ResetEntity(Curr106\Collider) + #PointEntity(Curr106\obj, e\room\NPC[0]\Collider) + #RotateEntity(Curr106\obj, 0, EntityYaw(Curr106\obj), 0, True) + # + #Curr106\Idle = True + # + #If dist<0.4 Then + #If e\room\NPC[0]\State=1 Then + #;PlaySound_Strict(HorrorSFX(10)) + #SetNPCFrame(e\room\NPC[0],41) + #EndIf + #e\EventState = e\EventState+FPSfactor/2 + #e\room\NPC[0]\State = 6 + #e\room\NPC[0]\CurrSpeed = CurveValue(0.0, e\room\NPC[0]\CurrSpeed, 25.0) + #PositionEntity(e\room\NPC[0]\Collider, CurveValue(EntityX(e\room\obj, True), EntityX(e\room\NPC[0]\Collider), 25.0), 0.3-e\EventState/70, CurveValue(EntityZ(e\room\obj, True), EntityZ(e\room\NPC[0]\Collider), 25.0)) + #ResetEntity(e\room\NPC[0]\Collider) + # + #;TurnEntity(e\room\NPC[0]\Collider,0,0,0.5*FPSfactor) + #AnimateNPC(e\room\NPC[0], 41, 58, 0.1, False) + # + #AnimateNPC(Curr106, 206,112, -1.0, False) + #Else + #AnimateNPC(Curr106, 112,206, 1.5, False) + #EndIf + #CurrSpeed = Min(CurrSpeed - (CurrSpeed * (0.15/EntityDistance(e\room\NPC[0]\Collider, Collider)) * FPSfactor), CurrSpeed) + #If e\EventState > 100 Then + #;PlaySound2(OldManSFX(Rand(1,2)), Camera, e\room\NPC[0]\Collider) + # + #PositionEntity(Curr106\obj, EntityX(Curr106\Collider), -100.0, EntityZ(Curr106\Collider), True) + #PositionEntity(Curr106\Collider, EntityX(Curr106\Collider), -100.0, EntityZ(Curr106\Collider), True) + # + #Curr106\Idle = False + #If EntityDistance(Collider, e\room\obj)<2.5 Then Curr106\State=-0.1 + # + #RemoveNPC(e\room\NPC[0]) + # + #RemoveEvent(e) + #EndIf + #EndIf + #EndIf + #;[End Block] + #Case "gateaentrance" + #;[Block] + #If PlayerRoom = e\room Then + #If RemoteDoorOn=False Then + #e\room\RoomDoors[1]\locked=True + #ElseIf RemoteDoorOn And e\EventState3=0 + #e\room\RoomDoors[1]\locked=False + #If e\room\RoomDoors[1]\open Then + #If e\room\RoomDoors[1]\openstate > 50 Or EntityDistance(Collider, e\room\RoomDoors[1]\frameobj)<0.5 Then + #e\room\RoomDoors[1]\openstate = Min(e\room\RoomDoors[1]\openstate,50) + #e\room\RoomDoors[1]\open = False + #PlaySound2 (LoadTempSound("SFX\Door\DoorError.ogg"), Camera, e\room\RoomDoors[1]\frameobj) + #EndIf + #EndIf + #Else + #e\room\RoomDoors[1]\locked=False + #Local gatea.Rooms =Null + #For r.Rooms = Each Rooms + #If r\RoomTemplate\Name = "gatea" Then + #gatea = r + #Exit + #EndIf + #Next + # + #If Curr096 <> Null Then + #If Curr096\State = 0 Or Curr096\State = 5 Then + #e\EventState = UpdateElevators(e\EventState, e\room\RoomDoors[0], gatea\RoomDoors[1], e\room\Objects[0], e\room\Objects[1], e) + #Else + #e\EventState = Update096ElevatorEvent(e,e\EventState,e\room\RoomDoors[0],e\room\Objects[0]) + #EndIf + #Else + #e\EventState = UpdateElevators(e\EventState, e\room\RoomDoors[0], gatea\RoomDoors[1], e\room\Objects[0], e\room\Objects[1], e) + #EndIf + #If Contained106 = False Then + #If e\EventState < -1.5 And e\EventState+FPSfactor=> -1.5 Then + #PlaySound_Strict(OldManSFX(3)) + #EndIf + #EndIf + # + #If EntityDistance(Collider, e\room\Objects[1])<4.0 Then + #gatea\RoomDoors[1]\locked = True + #PlayerRoom = gatea + #RemoveEvent(e) + #EndIf + #EndIf + #EndIf + #;[End Block] + #Case "lockroom173" + #;[Block] + #If e\room\dist < 6.0 And e\room\dist > 0 Then + #If Curr173\Idle > 1 Then + #RemoveEvent(e) + #Else + #If (Not EntityInView(Curr173\Collider, Camera)) Or EntityDistance(Curr173\Collider, Collider)>15.0 Then + #PositionEntity(Curr173\Collider, e\room\x + Cos(225-90 + e\room\angle) * 2, 0.6, e\room\z + Sin(225-90 + e\room\angle) * 2) + #ResetEntity(Curr173\Collider) + #RemoveEvent(e) + #EndIf + #EndIf + #EndIf + #;[End Block] + #Case "lockroom096" + #;[Block] + #If PlayerRoom = e\room Then + #If Curr096=Null Then + #Curr096 = CreateNPC(NPCtype096, EntityX(e\room\obj,True), 0.3, EntityZ(e\room\obj,True)) + #RotateEntity Curr096\Collider, 0, e\room\angle+45, 0, True + #EndIf + #RemoveEvent(e) + #End If + #;[End Block] + #Case "pj" + #;[Block] + #If PlayerRoom = e\room Then + #If e\EventState = 0 Then + #If EntityDistance(Collider, e\room\obj) < 2.5 Then + #PlaySound_Strict(RustleSFX(Rand(0,2))) + #CreateNPC(NPCtype372, 0, 0, 0) + #e\EventState = 1 + #RemoveEvent(e) + #EndIf + #EndIf + #EndIf + #;[End Block] + #Case "pocketdimension" + #;[Block] + # + #;eventstate: a timer for scaling the tunnels in the starting room + #;eventstate2: + #;0 if the player is in the starting room + #;1 if in the room with the throne, moving pillars, plane etc + #;12-15 if player is in the room with the tall pillars + #;(goes down from 15 to 12 And 106 teleports from pillar to another, pillars being room\objects[12 to 15]) + #;eventstate3: + #;1 when appearing in the tunnel that looks like the tunnels in hcz + #;2 after opening the door in the tunnel + #;otherwise 0 + # + #If PlayerRoom = e\room Then + #ShowEntity e\room\obj + # + #PlayerFallingPickDistance = 0.0 + # + #Injuries = Injuries+FPSfactor*0.00005 + #PrevSecondaryLightOn = SecondaryLightOn : SecondaryLightOn = True + # + #If (EntityY(Collider)<2000*RoomScale Or EntityY(Collider)>2608*RoomScale) Then CurrStepSFX = 1 + # + #If e\Sound = 0 Then LoadEventSound(e,"SFX\Room\PocketDimension\Rumble.ogg") + #If e\Sound2 = 0 Then e\Sound2 = LoadEventSound(e,"SFX\Room\PocketDimension\PrisonVoices.ogg",1) + # + #If e\EventState = 0 Then + #CameraFogColor Camera, 0,0,0 + #CameraClsColor Camera, 0,0,0 + #e\EventState = 0.1 + #EndIf + # + #If EntityY(Collider)<2000*RoomScale Or e\EventState3=0 Or EntityY(Collider)>2608*RoomScale Then + #ShouldPlay = 3 + #Else + #ShouldPlay = 0 + #EndIf + # + #ScaleEntity(e\room\obj,RoomScale, RoomScale*(1.0 + Sin(e\EventState/14.0)*0.2), RoomScale) + #For i = 0 To 7 + #ScaleEntity(e\room\Objects[i],RoomScale*(1.0 + Abs(Sin(e\EventState/21.0+i*45.0)*0.1)),RoomScale*(1.0 + Sin(e\EventState/14.0+i*20.0)*0.1), RoomScale,True) + #Next + #ScaleEntity(e\room\Objects[9],RoomScale*(1.5 + Abs(Sin(e\EventState/21.0+i*45.0)*0.1)),RoomScale*(1.0 + Sin(e\EventState/14.0+i*20.0)*0.1), RoomScale,True) + # + #e\EventState = e\EventState + FPSfactor + # + #If e\EventState2 = 0 Then + #e\room\RoomDoors[0]\open = False + #e\room\RoomDoors[1]\open = False + # + #If Curr106\State > 0 ;106 circles around the starting room + #angle = (e\EventState/10 Mod 360) + #PositionEntity(Curr106\Collider, EntityX(e\room\obj), 0.2+0.35+Sin(e\EventState/14.0+i*20.0)*0.4, EntityX(e\room\obj)) + #RotateEntity(Curr106\Collider, 0,angle,0) + #MoveEntity(Curr106\Collider,0,0,6.0-Sin(e\EventState/10.0)) + #AnimateNPC(Curr106, 55, 104, 0.5) + #RotateEntity(Curr106\Collider, 0,angle+90,0) + #Curr106\Idle = True + #ShowEntity Curr106\obj + #ShowEntity Curr106\Collider + #ResetEntity Curr106\Collider + #Curr106\GravityMult = 0.0 + #Curr106\DropSpeed = 0 + #PositionEntity(Curr106\obj, EntityX(Curr106\Collider), EntityY(Curr106\Collider) - 0.15, EntityZ(Curr106\Collider)) + #RotateEntity Curr106\obj, 0, EntityYaw(Curr106\Collider), 0 + # + #If e\EventState > 65*70 Then + #If Rand(800)=1 Then + #PlaySound_Strict HorrorSFX(8) + #Curr106\State = -0.1 + #Curr106\Idle = False + #e\EventState = 601 + #EndIf + #EndIf + #EndIf + #EndIf + # + #If EntityDistance(Collider, Curr106\Collider) < 0.3 Then ;106 attacks if close enough to player + #Curr106\Idle = False + #Curr106\State = -10 + #EndIf + # + #If e\EventState2 = 1 Then ;in the second room + # + #PositionEntity(e\room\Objects[9], EntityX(e\room\Objects[8],True)+3384*RoomScale, 0.0, EntityZ(e\room\Objects[8],True)) + # + #TranslateEntity e\room\Objects[9], Cos(e\EventState*0.8)*5, 0, Sin(e\EventState*1.6)*4, True + #RotateEntity e\room\Objects[9],0,e\EventState * 2,0 + # + #PositionEntity(e\room\Objects[10], EntityX(e\room\Objects[8],True), 0.0, EntityZ(e\room\Objects[8],True)+3384*RoomScale) + # + #TranslateEntity e\room\Objects[10], Sin(e\EventState*1.6)*4, 0, Cos(e\EventState*0.8)*5, True + #RotateEntity e\room\Objects[10],0,e\EventState * 2,0 + # + #If e\EventState3 = 1 Or e\EventState3 = 2 Then ;the "trick room" + #If e\EventState3 = 1 And (e\room\RoomDoors[0]\openstate>150 Or e\room\RoomDoors[1]\openstate>150) Then + #PlaySound_Strict LoadTempSound("SFX\Horror\Horror16.ogg") + #BlurTimer = 800 + #e\EventState3=2 + #EndIf + # + #If EntityY(Collider)<5.0 Then e\EventState3 = 0 + #Else + #;the trenches + #If EntityY(Collider)>6.0 Then + #ShouldPlay = 15 + # + #CameraFogColor Camera, 38, 55, 47 + #CameraClsColor Camera, 38, 55, 47 + # + #If EntityX(e\room\Objects[20],True)0 And ChannelPlaying(e\SoundCHN2) + #e\SoundCHN2 = LoopSound2(e\Sound2, e\SoundCHN2, Camera, Camera, 10.0, 0.3+(Not safe)*0.6) + #EndIf + # + #If safe Then + #EntityTexture e\room\Objects[20], e\room\Objects[18] + #ElseIf dist < 8.0 + #e\SoundCHN = LoopSound2(e\Sound, e\SoundCHN, Camera, e\room\Objects[20], 8.0) + #EntityTexture e\room\Objects[20], e\room\Objects[19] + #Injuries=Injuries+(8.0-dist)*FPSfactor*0.0003 + # + #If dist<7.0 Then + #pvt% = CreatePivot() + #PositionEntity pvt, EntityX(Camera), EntityY(Camera), EntityZ(Camera) + #PointEntity(pvt, e\room\Objects[20]) + #TurnEntity(pvt, 90, 0, 0) + #user_camera_pitch = CurveAngle(EntityPitch(pvt), user_camera_pitch + 90.0, 10.0) + #user_camera_pitch=user_camera_pitch-90 + #RotateEntity(Collider, EntityPitch(Collider), CurveAngle(EntityYaw(pvt), EntityYaw(Collider), 10), 0) + #FreeEntity pvt + #EndIf + #EndIf + # + #CameraShake = Max(4.0+((Not safe) * 4.0) - dist, 0.0) + # + #;check if player is at the sinkhole (the exit from the trench room) + #If EntityY(Collider)<8.5 Then + #LoadEventSound(e,"SFX\Room\PocketDimension\Rumble.ogg") + #LoadEventSound(e,"SFX\Room\PocketDimension\PrisonVoices.ogg",1) + # + #;move to the "exit room" + #BlurTimer = 1500 + #e\EventState2=1 + #BlinkTimer = -10 + # + #PositionEntity(Collider, EntityX(e\room\Objects[8],True)-400*RoomScale, -304*RoomScale, EntityZ(e\room\Objects[8],True)) + #ResetEntity Collider + # + #CameraFogColor Camera, 0,0,0 + #CameraClsColor Camera, 0,0,0 + #EndIf + # + #Else + #e\EventState3 = 0 + # + #For i = 9 To 10 + #dist = Distance(EntityX(Collider), EntityZ(Collider),EntityX(e\room\Objects[i],True),EntityZ(e\room\Objects[i],True)) + #If dist<6.0 Then + #If dist<100.0*RoomScale Then + #pvt=CreatePivot() + #PositionEntity pvt, EntityX(e\room\Objects[i],True),EntityY(Collider),EntityZ(e\room\Objects[i],True) + # + #PointEntity pvt, Collider + #RotateEntity pvt, 0, Int(EntityYaw(pvt)/90)*90,0,True + #MoveEntity pvt, 0,0,100*RoomScale + #PositionEntity Collider, EntityX(pvt),EntityY(Collider),EntityZ(pvt) + # + #FreeEntity pvt + # + #If KillTimer = 0 Then + #DeathMSG = "In addition to the decomposed appearance typical of SCP-106's victims, the body exhibits injuries that have not been observed before: " + #DeathMSG = DeathMSG + "massive skull fracture, three broken ribs, fractured shoulder and multiple heavy lacerations." + # + #PlaySound_Strict LoadTempSound("SFX\Room\PocketDimension\Impact.ogg") + #KillTimer=-1.0 + #EndIf + #EndIf + #If Float(e\EventStr) < 1000.0 Then + #e\SoundCHN = LoopSound2(e\Sound, e\SoundCHN, Camera, e\room\Objects[i], 6.0) + #EndIf + #EndIf + #Next + # + #pvt=CreatePivot() + #PositionEntity pvt, EntityX(e\room\Objects[8],True)-1536*RoomScale,500*RoomScale,EntityZ(e\room\Objects[8],True)+608*RoomScale + #If EntityDistance(pvt, Collider)<5.0 Then + #e\SoundCHN2 = LoopSound2(e\Sound2, e\SoundCHN2, Camera, pvt, 3.0) + #EndIf + #FreeEntity pvt + # + #;106's eyes + #ShowEntity e\room\Objects[17] + #PositionEntity e\room\Objects[17], EntityX(e\room\Objects[8],True),1376*RoomScale,EntityZ(e\room\Objects[8],True)-2848*RoomScale + #PointEntity e\room\Objects[17], Collider + #TurnEntity e\room\Objects[17], 0, 180, 0 + # + #temp = EntityDistance(Collider, e\room\Objects[17]) + #If temp < 2000*RoomScale Then + #Injuries = Injuries + (FPSfactor/4000) + #e\EventStr = Float(e\EventStr)+(FPSfactor/1000.0) + # + #;If Injuries > 1.0 Then + #If Float(e\EventStr) > 1.0 And Float(e\EventStr) < 1000.0 Then + #PlaySound_Strict LoadTempSound("SFX\Room\PocketDimension\Kneel.ogg") + #LoadEventSound(e,"SFX\Room\PocketDimension\Screech.ogg") + #e\EventStr = Float(1000.0) + #DebugLog "Loaded screech sound" + #EndIf + # + #Sanity = Max(Sanity - FPSfactor / temp / 8,-1000) + # + #;e\SoundCHN = LoopSound2(OldManSFX(4), e\SoundCHN, Camera, e\room\Objects[17], 5.0, 0.6) + # + #CurrCameraZoom = Max(CurrCameraZoom, (Sin(Float(MilliSecs2()) / 20.0)+1.0)*15.0*Max((6.0-temp)/6.0,0.0)) + # + #pvt% = CreatePivot() + #PositionEntity pvt, EntityX(Camera), EntityY(Camera), EntityZ(Camera) + #PointEntity(pvt, e\room\Objects[17]) + #TurnEntity(pvt, 90, 0, 0) + #user_camera_pitch = CurveAngle(EntityPitch(pvt), user_camera_pitch + 90.0, Min(Max(15000.0 / (-Sanity), 15.0), 500.0)) + #user_camera_pitch=user_camera_pitch-90 + #RotateEntity(Collider, EntityPitch(Collider), CurveAngle(EntityYaw(pvt), EntityYaw(Collider), Min(Max(15000.0 / (-Sanity), 15.0), 500.0)), 0) + #FreeEntity pvt + # + #;teleport the player to the trenches + #If Crouch Then + #BlinkTimer = -10 + #PositionEntity Collider, EntityX(e\room\Objects[8],True)-1344*RoomScale,2944*RoomScale,EntityZ(e\room\Objects[8],True)-1184*RoomScale + #ResetEntity Collider + #Crouch = False + # + #LoadEventSound(e,"SFX\Room\PocketDimension\Explosion.ogg") + #LoadEventSound(e,"SFX\Room\PocketDimension\TrenchPlane.ogg",1) + #PositionEntity e\room\Objects[20], EntityX(e\room\Objects[8],True)-1000,0,0,True + # + #e\EventStr = Float(0) + #EndIf + #ElseIf EntityY(Collider)<-180*RoomScale ;the "exit room" + #temp = Distance(EntityX(Collider),EntityZ(Collider),EntityX(e\room\Objects[8],True)+1024*RoomScale,EntityZ(e\room\Objects[8],True)) + #If temp<640*RoomScale + #BlurTimer = (640*RoomScale-temp)*3000 + # + #e\SoundCHN2 = LoopSound2(DecaySFX(Rand(1, 3)), e\SoundCHN2, Camera, Collider, 2.0, (640*RoomScale-temp)*Abs(CurrSpeed)*100) + #CurrSpeed = CurveValue(0.0, CurrSpeed, temp*10) + # + #If temp < 130*RoomScale Then + # + #For r.Rooms = Each Rooms + #If r\RoomTemplate\Name = "room2shaft" Then + #GiveAchievement(AchvPD) + #e\EventState = 0 + #e\EventState2 = 0 + # + #SecondaryLightOn = PrevSecondaryLightOn + #PrevSecondaryLightOn = 0.0 + # + #BlinkTimer = -10 + #LightBlink = 5 + # + #BlurTimer = 1500 + # + #PlayerRoom = r + # + #PlaySound_Strict(LoadTempSound("SFX\Room\PocketDimension\Exit.ogg")) + # + #TeleportEntity(Collider,EntityX(r\Objects[0],True),0.4,EntityZ(r\Objects[0],True),0.3,True) + # + #UpdateRooms() + #UpdateDoors() + #Curr106\State = 10000 + #Curr106\Idle = False + # + #de.decals = CreateDecal(0, EntityX(r\Objects[0],True),EntityY(r\Objects[0],True),EntityZ(r\Objects[0],True), 270, Rand(360), 0) + #TeleportEntity(de\obj,EntityX(r\Objects[0],True),EntityY(r\Objects[0],True)+0.6,EntityZ(r\Objects[0],True),0.0,True,4,1) + # + #For e2.Events = Each Events + #If e2\EventName = "room2sl" + #e2\EventState3 = 0 + #UpdateLever(e2\room\Levers[0]) + #RotateEntity e2\room\Levers[0],0,EntityYaw(e2\room\Levers[0]),0 + #TurnCheckpointMonitorsOff(0) + #Exit + #EndIf + #Next + #Exit + #Return + #EndIf + #Next + #EndIf + #EndIf + #EndIf + #EndIf + #EndIf + # + # + # + #If EntityY(Collider) < -1600*RoomScale Then + #If EntityDistance(Collider, e\room\Objects[8]) > 4750*RoomScale Then + #CameraFogColor Camera, 0,0,0 + #CameraClsColor Camera, 0,0,0 + # + #DropSpeed = 0 + #BlurTimer = 500 + #BlurTimer = 1500 + #PositionEntity(Collider, EntityX(e\room\obj,True), 0.4, EntityX(e\room\obj,True)) + #For r.Rooms = Each Rooms + #If r\RoomTemplate\Name = "room106" Then + #e\EventState = 0 + #e\EventState2 = 0 + # + #TeleportEntity(Collider,EntityX(r\Objects[10],True),0.4,EntityZ(r\Objects[10],True),0.3,True) + # + #GiveAchievement(AchvPD) + #SecondaryLightOn = PrevSecondaryLightOn + #PrevSecondaryLightOn = 0.0 + # + #Curr106\State = 10000 + #Curr106\Idle = False + # + #For e2.Events = Each Events + #If e2\EventName = "room2sl" + #e2\EventState3 = 0 + #UpdateLever(e2\room\Levers[0]) + #RotateEntity e2\room\Levers[0],0,EntityYaw(e2\room\Levers[0]),0 + #TurnCheckpointMonitorsOff(0) + #Exit + #EndIf + #Next + #Exit + #Return + #EndIf + #Next + #ResetEntity Collider + # + #e\EventState2 = 0 + #UpdateDoorsTimer = 0 + #UpdateDoors() + #UpdateRooms() + #Else ;the player is not at the exit, must've fallen down + # + #If KillTimer => 0 Then + #PlaySound_Strict HorrorSFX(8) + #DeathMSG = "In addition to the decomposed appearance typical of the victims of SCP-106, the subject seems to have suffered multiple heavy fractures to both of his legs." + # + #EndIf + #KillTimer = Min(-1, KillTimer) + #BlurTimer = 3000 + #EndIf + #EndIf + # + #UpdateDoorsTimer = 0 + #UpdateDoors() + #UpdateRooms() + # + #ElseIf e\EventState2 = 0 + #dist# = EntityDistance(Collider, e\room\obj) + # + #If dist > 1700*RoomScale Then + #BlinkTimer = -10 + # + #Select Rand(25) + #Case 1,2,3,4 + #PlaySound_Strict(OldManSFX(3)) + # + #pvt = CreatePivot() + #PositionEntity(pvt, EntityX(Collider), EntityY(Collider), EntityZ(Collider)) + # + #PointEntity(pvt, e\room\obj) + #MoveEntity pvt, 0,0,dist*1.9 + #PositionEntity(Collider, EntityX(pvt), EntityY(Collider), EntityZ(pvt)) + #ResetEntity Collider + # + #MoveEntity pvt, 0,0,0.8 + #PositionEntity(e\room\Objects[10], EntityX(pvt), 0.0, EntityZ(pvt)) + #RotateEntity e\room\Objects[10], 0, EntityYaw(pvt), 0, True + # + #FreeEntity pvt + #Case 5,6,7,8,9,10 + #e\EventState2=1 + #BlinkTimer = -10 + #PlaySound_Strict(OldManSFX(3)) + # + #PositionEntity(Collider, EntityX(e\room\Objects[8],True), 0.5, EntityZ(e\room\Objects[8],True)) + #ResetEntity Collider + #Case 11,12 ;middle of the large starting room + #BlurTimer = 500 + #PositionEntity Collider,EntityX(e\room\obj), 0.5, EntityZ(e\room\obj) + #Case 13,14,15 ;"exit room" + #BlurTimer = 1500 + #e\EventState2=1 + #BlinkTimer = -10 + # + #PositionEntity(Collider, EntityX(e\room\Objects[8],True)-400*RoomScale, -304*RoomScale, EntityZ(e\room\Objects[8],True)) + #ResetEntity Collider + #Case 16,17,18,19 + #BlurTimer = 1500 + #For r.Rooms = Each Rooms + #If r\RoomTemplate\Name = "tunnel" Then + #GiveAchievement(AchvPD) + #e\EventState = 0 + #e\EventState2 = 0 + # + #SecondaryLightOn = PrevSecondaryLightOn + #PrevSecondaryLightOn = 0.0 + #TeleportEntity(Collider,EntityX(r\obj,True),0.4,EntityZ(r\obj,True),0.3,True) + #Curr106\State = 250 + #Curr106\Idle = False + # + #For e2.Events = Each Events + #If e2\EventName = "room2sl" + #e2\EventState3 = 0 + #UpdateLever(e2\room\Levers[0]) + #RotateEntity e2\room\Levers[0],0,EntityYaw(e2\room\Levers[0]),0 + #TurnCheckpointMonitorsOff(0) + #Exit + #EndIf + #Next + #Exit + #Return + #EndIf + #Next + #Case 20,21,22 ;the tower room + #BlinkTimer = -10 + #PositionEntity(Collider, EntityX(e\room\Objects[12],True), 0.6, EntityZ(e\room\Objects[12],True)) + #ResetEntity Collider + #e\EventState2 = 15 + #Case 23,24,25 + #BlurTimer = 1500 + #e\EventState2=1 + #e\EventState3=1 + #BlinkTimer = -10 + # + #PlaySound_Strict(OldManSFX(3)) + # + #PositionEntity(Collider, EntityX(e\room\Objects[8],True), 2288*RoomScale, EntityZ(e\room\Objects[8],True)) + #ResetEntity Collider + #End Select + # + #UpdateDoorsTimer = 0 + #UpdateDoors() + #UpdateRooms() + #EndIf + #Else ;pillar room + #CameraFogColor Camera, 38*0.5, 55*0.5, 47*0.5 + #CameraClsColor Camera, 38*0.5, 55*0.5, 47*0.5 + # + #If ParticleAmount > 0 + #If Rand(800)=1 Then + #angle = EntityYaw(Camera,True)+Rnd(150,210) + #p.Particles = CreateParticle(EntityX(Collider)+Cos(angle)*7.5, 0.0, EntityZ(Collider)+Sin(angle)*7.5, 3, 4.0, 0.0, 2500) + #EntityBlend(p\obj, 2) + #;EntityFX(p\obj, 1) + #p\speed = 0.01 + #p\SizeChange = 0 + #PointEntity(p\pvt, Camera) + #TurnEntity(p\pvt, 0, 145, 0, True) + #TurnEntity(p\pvt, Rand(10,20), 0, 0, True) + #EndIf + #EndIf + # + #If e\EventState2 > 12 Then + #Curr106\Idle = True + #PositionEntity(Curr106\Collider, EntityX(e\room\Objects[e\EventState2],True),0.27, EntityZ(e\room\Objects[e\EventState2],True)) + # + #PointEntity(Curr106\Collider, Camera) + #TurnEntity(Curr106\Collider, 0, Sin(MilliSecs2() / 20) * 6.0, 0, True) + #MoveEntity(Curr106\Collider, 0, 0, Sin(MilliSecs2() / 15) * 0.06) + # + #ShowEntity Curr106\obj + #ShowEntity Curr106\Collider + #ResetEntity Curr106\Collider + #Curr106\GravityMult = 0.0 + #Curr106\DropSpeed = 0 + #PositionEntity(Curr106\obj, EntityX(Curr106\Collider), EntityY(Curr106\Collider) - 0.15, EntityZ(Curr106\Collider)) + #RotateEntity Curr106\obj, 0, EntityYaw(Curr106\Collider), 0 + # + #If Rand(750)=1 And e\EventState2 > 12 Then + #BlinkTimer = -10 + #e\EventState2 = e\EventState2-1 + #PlaySound_Strict HorrorSFX(8) + #EndIf + # + #If e\EventState2 = 12 Then + #CameraShake = 1.0 + #PositionEntity(Curr106\Collider, EntityX(e\room\Objects[e\EventState2],True),-1.0, EntityZ(e\room\Objects[e\EventState2],True)) + #Curr106\State = -10 + #ResetEntity Curr106\Collider + #EndIf + # + #Else + #Curr106\State = -10 + #Curr106\Idle = False + #EndIf + # + #If EntityY(Collider) < -1600*RoomScale Then + #;player is at the exit + #If Distance(EntityX(e\room\Objects[16],True),EntityZ(e\room\Objects[16],True),EntityX(Collider),EntityZ(Collider))<144*RoomScale Then + # + #CameraFogColor Camera, 0,0,0 + #CameraClsColor Camera, 0,0,0 + # + #DropSpeed = 0 + #BlurTimer = 500 + #PositionEntity(Collider, EntityX(e\room\obj), 0.5, EntityZ(e\room\obj)) + #ResetEntity Collider + #e\EventState2 = 0 + #UpdateDoorsTimer = 0 + #UpdateDoors() + #UpdateRooms() + #Else ;somewhere else -> must've fallen down + #If KillTimer => 0 Then PlaySound_Strict HorrorSFX(8) + #KillTimer = Min(-1, KillTimer) + #BlurTimer = 3000 + #EndIf + #EndIf + # + #EndIf + # + #Else + #HideEntity e\room\obj + #;CameraClsColor Camera, 0,0,0 + #e\EventState = 0 + #e\EventState2 = 0 + #e\EventState3 = 0 + #e\EventStr = Float(0) + #EndIf + #;[End Block] + #Case "room2cafeteria" + #;[Block] + #If PlayerRoom = e\room Then + #If Not Using294 Then + #If EntityDistance(e\room\Objects[0], Collider)<1.5 Then + #GiveAchievement(Achv294) + #If EntityInView(e\room\Objects[0], Camera) Then + #DrawHandIcon = True + #If MouseHit1 Then + #temp = True + #For it.Items = Each Items + #If it\Picked=False Then + #If EntityX(it\collider)-EntityX(e\room\Objects[1],True)=0 Then + #If EntityZ(it\collider)-EntityZ(e\room\Objects[1],True)=0 Then + #temp = False + #Exit + #EndIf + #EndIf + #EndIf + #Next + #Local inserted% = False + #If e\EventState2 < 2 Then + #If SelectedItem<>Null Then + #If SelectedItem\itemtemplate\tempname="25ct" Or SelectedItem\itemtemplate\tempname="coin" Then + #RemoveItem(SelectedItem) + #SelectedItem=Null + #e\EventState2 = e\EventState2 + 1 + #PlaySound_Strict LoadTempSound("SFX\SCP\294\coin_drop.ogg") + #inserted = True + #EndIf + #EndIf + #EndIf + #If e\EventState2 = 2 Then + #Using294=temp + #If Using294 Then MouseHit1=False + #ElseIf e\EventState2 = 1 And (Not inserted) Then + #Using294=False + #Msg = "You need to insert another Quarter in order to use this machine." + #MsgTimer = 70*5 + #ElseIf (Not inserted) Then + #Using294=False + #Msg = "You need to insert two Quarters in order to use this machine." + #MsgTimer = 70*5 + #EndIf + #EndIf + #EndIf + #EndIf + #EndIf + #EndIf + # + #If e\EventState = 0 Then + #CreateNPC(NPCtype066, EntityX(e\room\obj), 0.5, EntityZ(e\room\obj)) + #e\EventState = 1 + #EndIf + #;[End Block] + #Case "room2ccont" + #;[Block] + #If PlayerRoom = e\room Then + # + #EntityPick(Camera, 1.5) + # + #If PickedEntity() = e\room\Objects[3] + #If e\EventState = 0 + #e\EventState = Max(e\EventState,1) + #PlaySound_Strict HorrorSFX(7) + #PlaySound_Strict LeverSFX + #EndIf + #EndIf + # + #;Primary Lighting + #UpdateLever(e\room\Objects[1]) + # + #;Secondary Lighting + #Local prevstate2 = e\EventState2 + #e\EventState2 = UpdateLever(e\room\Objects[3]) + #If (prevstate2 <> e\EventState2) And e\EventState>0 Then PlaySound2(LightSFX, Camera, e\room\Objects[3]) + #If e\EventState2 + #SecondaryLightOn = CurveValue(1.0, SecondaryLightOn, 10.0) + #Else + #SecondaryLightOn = CurveValue(0.0, SecondaryLightOn, 10.0) + #EndIf + # + #;Remote Door Control + #RemoteDoorOn = UpdateLever(e\room\Objects[5]) + # + #If e\EventState > 0 And e\EventState < 200 Then + #e\EventState = e\EventState + FPSfactor + #RotateEntity(e\room\Objects[3], CurveValue(-85, EntityPitch(e\room\Objects[3]), 5), EntityYaw(e\room\Objects[3]), 0) + #EndIf + # + #EndIf + #;[End Block] + #Case "room2closets" + #;[Block] + #If e\EventState = 0 Then + #If PlayerRoom = e\room And Curr173\Idle<2 Then + #If e\EventStr = "" And QuickLoadPercent = -1 + #QuickLoadPercent = 0 + #QuickLoad_CurrEvent = e + #e\EventStr = "load0" + #EndIf + #EndIf + #Else + #e\EventState=e\EventState+FPSfactor + #If e\EventState < 70*3.5 Then + #RotateEntity(e\room\NPC[1]\Collider,0,CurveAngle(e\room\angle+90,EntityYaw(e\room\NPC[1]\Collider),100.0),0,True) + # + #e\room\NPC[0]\State=1 + #If e\EventState > 70*3.2 And e\EventState-FPSfactor =< 70*3.2 Then PlaySound2(IntroSFX(15),Camera,e\room\obj,15.0) + #ElseIf e\EventState < 70*6.5 + #If e\EventState-FPSfactor < 70*3.5 Then + #e\room\NPC[0]\State=0 + #e\room\NPC[1]\SoundChn = PlaySound2(e\room\NPC[1]\Sound, Camera, e\room\NPC[1]\Collider,12.0) + #EndIf + # + #If e\EventState > 70*4.5 Then + #PointEntity e\room\NPC[0]\obj, e\room\obj + #RotateEntity(e\room\NPC[0]\Collider,0,CurveAngle(EntityYaw(e\room\NPC[0]\obj),EntityYaw(e\room\NPC[0]\Collider),30.0),0,True) + #EndIf + #PointEntity e\room\NPC[1]\obj, e\room\obj + #TurnEntity e\room\NPC[1]\obj, 0, Sin(e\EventState)*25, 0 + #RotateEntity(e\room\NPC[1]\Collider,0,CurveAngle(EntityYaw(e\room\NPC[1]\obj),EntityYaw(e\room\NPC[1]\Collider),30.0),0,True) + #Else + #If e\EventState-FPSfactor < 70*6.5 Then + #PlaySound_Strict (HorrorSFX(0)) + #PlaySound_Strict (LightSFX) + #EndIf + #BlinkTimer = Max((70*6.5-e\EventState)/5.0 - Rnd(0.0,2.0),-10) + #If BlinkTimer =-10 Then + #If e\EventState > 70*7.5 And e\EventState-FPSfactor =< 70*7.5 Then + #PlaySound2(NeckSnapSFX(0),Camera,e\room\NPC[0]\Collider,8.0) + #;Wallet spawning (with 3 coins) + #it.Items = CreateItem("Wallet","wallet",EntityX(e\room\NPC[0]\Collider,True),EntityY(e\room\NPC[0]\Collider,True),EntityZ(e\room\NPC[0]\Collider,True)) + #EntityType(it\collider, HIT_ITEM) + #PointEntity it\collider,e\room\NPC[1]\Collider + #MoveEntity it\collider,-0.4,0,-0.2 + #TeleportEntity(it\collider,EntityX(it\collider),EntityY(it\collider),EntityZ(it\collider),-0.02,True,10) + #For i = 0 To 1 + #it2.Items = CreateItem("Quarter","25ct",1,1,1) + #it2\Picked = True + #it2\Dropped = -1 + #it2\itemtemplate\found=True + #it\SecondInv[i] = it2 + #HideEntity(it2\collider) + #EntityType(it2\collider, HIT_ITEM) + #Next + #EndIf + #If e\EventState > 70*8.0 And e\EventState-FPSfactor =< 70*8.0 Then + #PlaySound2(NeckSnapSFX(1),Camera,e\room\NPC[1]\Collider,8.0) + #EndIf + #SetNPCFrame e\room\NPC[0], 60 + #e\room\NPC[0]\State=8 + # + #SetNPCFrame e\room\NPC[1], 19 + #e\room\NPC[1]\State = 6 + #EndIf + # + #If e\EventState > 70*8.5 Then + #PositionEntity Curr173\Collider, (EntityX(e\room\Objects[0],True)+EntityX(e\room\Objects[1],True))/2,EntityY(e\room\Objects[0],True),(EntityZ(e\room\Objects[0],True)+EntityZ(e\room\Objects[1],True))/2 + #PointEntity Curr173\Collider, Collider + #ResetEntity Curr173\Collider + #RemoveEvent(e) + #EndIf + #EndIf + #EndIf + #;[End Block] + #Case "room2doors173" + #;[Block] + #If PlayerRoom = e\room Then + #If e\EventState = 0 And Curr173\Idle = 0 Then + #If (Not EntityInView(Curr173\obj, Camera)) Then + #e\EventState = 1 + #PositionEntity(Curr173\Collider, EntityX(e\room\Objects[0], True), 0.5, EntityZ(e\room\Objects[0], True)) + #ResetEntity(Curr173\Collider) + #RemoveEvent(e) + #EndIf + #EndIf + #EndIf + #;[End Block] + #Case "room2elevator" + #;[Block] + #If e\EventState = 0 Then + #If e\room\dist < 8.0 And e\room\dist > 0 Then + #e\room\NPC[0]=CreateNPC(NPCtypeGuard, EntityX(e\room\obj,True), 0.5, EntityZ(e\room\obj,True)) + #PointEntity e\room\NPC[0]\Collider, Collider + #RotateEntity e\room\NPC[0]\Collider, 0, EntityYaw(e\room\NPC[0]\Collider),0, True + # + #e\EventState = 1 + #EndIf + #Else + #If e\EventState = 1 Then + #If e\room\dist<5.0 Or Rand(700)=1 Then + #e\EventState = 2 + # + #e\room\NPC[0]\State = 5 + #e\room\NPC[0]\EnemyX = EntityX(e\room\Objects[1],True) + #e\room\NPC[0]\EnemyY = EntityY(e\room\Objects[1],True) + #e\room\NPC[0]\EnemyZ = EntityZ(e\room\Objects[1],True) + #EndIf + #ElseIf e\EventState = 2 + #If EntityDistance(e\room\NPC[0]\Collider,e\room\Objects[1])<2.0 Then + #e\room\RoomDoors[0]\open = False + #PlaySound2(CloseDoorSFX(3, 0), Camera, e\room\RoomDoors[0]\obj, 8.0) + # + #PlaySound_Strict (LoadTempSound("SFX\Room\Room2ElevatorDeath.ogg")) + # + #e\EventState = 2.05 + #EndIf + #ElseIf e\EventState < 13*70 + #e\EventState = e\EventState+FPSfactor + #;6.7 - 7.4 + #;8.6 - 10 + #If e\EventState > 6.7*70 And e\EventState < 7.4*70 Then + #CameraShake = 7.4-(e\EventState/70.0) + #ElseIf e\EventState > 8.6*70 And e\EventState < 10.6*70 + #CameraShake = 10.6-(e\EventState/70.0) + #ElseIf e\EventState > 12.6*70 + #CameraShake = 0 + #If e\EventState-FPSfactor < 12.6*70 And e\room\NPC[0]<>Null Then + #RemoveNPC(e\room\NPC[0]) + #e\room\NPC[0]=Null + # + #de.Decals = CreateDecal(3, EntityX(e\room\Objects[0],True), 0.0005, EntityZ(e\room\Objects[0],True),90,Rnd(360),0) + # + #de.Decals = CreateDecal(17, EntityX(e\room\Objects[0],True), 0.002, EntityZ(e\room\Objects[0],True),90,Rnd(360),0) + #de\size = 0.5 + # + #de.Decals = CreateDecal(3, EntityX(e\room\Objects[1],True), EntityY(e\room\Objects[1],True), EntityZ(e\room\Objects[1],True),0,e\room\angle+270,0) + #de\size = 0.9 + #EndIf + #e\room\RoomDoors[0]\locked = False + #EndIf + #Else + #If e\room\RoomDoors[0]\open Then e\room\RoomDoors[0]\locked = True : RemoveEvent(e) + #EndIf + #EndIf + #;[End Block] + #Case "room2elevator2" + #;[Block] + #If e\room\dist < 8.0 And e\room\dist > 0 Then + # + #de.Decals = CreateDecal(3, EntityX(e\room\Objects[0],True), 0.0005, EntityZ(e\room\Objects[0],True),90,Rnd(360),0) + # + #e\room\NPC[0]=CreateNPC(NPCtypeD, EntityX(e\room\Objects[0],True), 0.5, EntityZ(e\room\Objects[0],True)) + #ChangeNPCTextureID(e\room\NPC[0],0) + # + #RotateEntity e\room\NPC[0]\Collider, 0, EntityYaw(e\room\obj)-80,0, True + # + #SetNPCFrame e\room\NPC[0], 19 + #e\room\NPC[0]\State=8 + # + #RemoveEvent(e) + #EndIf + #;[End Block] + #Case "room2fan" + #;[Block] + #;eventstate1 = timer for turning the fan on/off + #;eventstate2 = fan on/off + #;eventstate3 = the speed of the fan + #If PlayerRoom = e\room Then + #TurnEntity (e\room\Objects[0], e\EventState3*FPSfactor, 0, 0) + #If e\EventState3 > 0.01 Then + #e\room\SoundCHN = LoopSound2 (RoomAmbience[9], e\room\SoundCHN, Camera, e\room\Objects[0], 5.0, (e\EventState3/4.0)) + #EndIf + #e\EventState3 = CurveValue(e\EventState2*5, e\EventState3, 150.0) + #EndIf + # + #If e\room\dist < 16.0 Then + #If e\EventState < 0 Then + #e\EventState = Rand(15,30)*70 + #temp = e\EventState2 + #e\EventState2 = Rand(0,1) + #If PlayerRoom<>e\room Then + #e\EventState3 = e\EventState2*5 + #Else + #If temp = 0 And e\EventState2 = 1.0 Then ;turn on the fan + #PlaySound2 (LoadTempSound("SFX\ambient\Room ambience\FanOn.ogg"), Camera, e\room\Objects[0], 8.0) + #ElseIf temp = 1 And e\EventState2 = 0.0 ;turn off the fan + #PlaySound2 (LoadTempSound("SFX\ambient\Room ambience\FanOff.ogg"), Camera, e\room\Objects[0], 8.0) + #EndIf + #EndIf + #Else + #e\EventState = e\EventState-FPSfactor + #EndIf + #EndIf + #;[End Block] + #Case "room2nuke" + #;[Block] + #If PlayerRoom = e\room Then + #e\EventState2 = UpdateElevators(e\EventState2, e\room\RoomDoors[0], e\room\RoomDoors[1], e\room\Objects[4], e\room\Objects[5], e) + # + #e\EventState = UpdateLever(e\room\Objects[1]) + #UpdateLever(e\room\Objects[3]) + #EndIf + # + #If e\EventState3 = 0 Then + #n.NPCs = CreateNPC(NPCtypeD,EntityX(e\room\Objects[6],True),0.5,EntityZ(e\room\Objects[6],True)) + #RotateEntity n\Collider,0,e\room\angle+90,0 + #n\State = 3 + #SetNPCFrame(n,40) + #n\IsDead = True + #n\texture = "GFX\npcs\body2.jpg" + #tex = LoadTexture_Strict(n\texture) + #EntityTexture(n\obj, tex) + #FreeTexture tex + #e\EventState3 = 1 + #EndIf + #;[End Block] + #Case "room2offices2" + #;[Block] + #If PlayerRoom = e\room Then + #If BlinkTimer<-8 And BlinkTimer >-12 Then + #temp = Rand(1,4) + #PositionEntity e\room\Objects[0], EntityX(e\room\Objects[temp],True),EntityY(e\room\Objects[temp],True),EntityZ(e\room\Objects[temp],True),True + #RotateEntity e\room\Objects[0], 0, Rnd(360), 0 + #EndIf + #EndIf + #;[End Block] + #Case "room2offices3" + #;[Block] + #If PlayerRoom = e\room Then + #e\EventState = e\EventState+FPSfactor + #If e\EventState > 700 Then + #If EntityDistance(e\room\RoomDoors[0]\obj, Collider)>0.5 Then + #If EntityInView(e\room\RoomDoors[0]\obj, Camera)=False Then + #DebugLog "%@@= \ {2E6C2=FD gi`h]c" + #e\room\RoomDoors[0]\open = False + #RemoveEvent(e) + #EndIf + #EndIf + #EndIf + #EndIf + #;[End Block] + #Case "room2tesla" + #;[Block] + #temp = True + #If e\EventState2 > 70*3.5 And e\EventState2 < 70*90 Then temp = False + # + #If temp And EntityY(Collider, True) > EntityY(e\room\obj,True) And EntityY(Collider, True) < 4.0 Then + # + #If e\Sound = 0 Then e\Sound = LoadSound_Strict("SFX\Room\Tesla\Shock.ogg") + # + #If e\EventState = 0 Then + #If e\room\dist < 8 Then + #HideEntity e\room\Objects[3] + #If (MilliSecs2() Mod 1500) < 800 Then + #ShowEntity e\room\Objects[4] + #Else + #HideEntity e\room\Objects[4] + #EndIf + # + #If e\SoundCHN = 0 Then ;humming when the player isn't close + #e\SoundCHN = PlaySound2(TeslaIdleSFX, Camera, e\room\Objects[3],4.0,0.5) + #Else + #If Not ChannelPlaying(e\SoundCHN) Then e\SoundCHN = PlaySound2(TeslaIdleSFX, Camera, e\room\Objects[3],4.0,0.5) + #EndIf + # + #For i = 0 To 2 + #If Distance(EntityX(Collider),EntityZ(Collider),EntityX(e\room\Objects[i],True),EntityZ(e\room\Objects[i],True)) < 300.0*RoomScale Then + #;play the activation sound + #If KillTimer => 0 Then + #PlayerSoundVolume = Max(8.0,PlayerSoundVolume) + #StopChannel(e\SoundCHN) + #e\SoundCHN = PlaySound2(TeslaActivateSFX, Camera, e\room\Objects[3],4.0,0.5) + #e\EventState = 1 + #Exit + #EndIf + #EndIf + #Next + # + #Local temp2 = True + #For e2.Events = Each Events + #If e2\EventName = e\EventName And e2 <> e + #If e2\EventStr <> "" + #temp2 = False + #e\EventStr = "done" + #Exit + #EndIf + #EndIf + #Next + # + #Local temp3 = 0 + #If temp2 + #If e\EventStr = "" And PlayerRoom = e\room + #If EntityDistance(e\room\Objects[5],Collider) 0 Then + #StopChannel(e\SoundCHN) + #e\SoundCHN = PlaySound2(TeslaActivateSFX, Camera, e\room\Objects[3],4.0,0.5) + #HideEntity e\room\Objects[4] + #e\EventState = 1 + #Curr106\State = 70 * 60 * Rand(10,13) + #GiveAchievement(AchvTesla) + #Exit + #EndIf + #EndIf + #Next + #EndIf + #Else + #e\EventState = e\EventState+FPSfactor + #If e\EventState =< 40 Then + #HideEntity e\room\Objects[3] + #If (MilliSecs2() Mod 100) < 50 Then + #ShowEntity e\room\Objects[4] + #Else + #HideEntity e\room\Objects[4] + #EndIf + #Else + #If e\room\dist < 2 + #If e\EventState-FPSfactor =< 40 Then PlaySound_Strict(e\Sound) + #Else + #If e\EventState-FPSfactor =< 40 Then PlaySound2(e\Sound,Camera,e\room\Objects[2]) + #EndIf + #If e\EventState < 70 Then + # + #If KillTimer => 0 Then + #For i = 0 To 2 + #If Distance(EntityX(Collider),EntityZ(Collider),EntityX(e\room\Objects[i],True),EntityZ(e\room\Objects[i],True)) < 250.0*RoomScale Then + #ShowEntity Light + #LightFlash = 0.4 + #CameraShake = 1.0 + #Kill() + #DeathMSG = "Subject D-9341 killed by the Tesla gate at [REDACTED]." + #EndIf + #Next + #EndIf + # + #If e\EventStr = "step1" + #e\room\NPC[0]\State = 3 + #EndIf + # + #If Curr106\State < -10 Then + #For i = 0 To 2 + #If Distance(EntityX(Curr106\Collider),EntityZ(Curr106\Collider),EntityX(e\room\Objects[i],True),EntityZ(e\room\Objects[i],True)) < 250.0*RoomScale Then + #ShowEntity Light + #LightFlash = 0.3 + #If ParticleAmount > 0 + #For i = 0 To 5+(5*(ParticleAmount-1)) + #p.Particles = CreateParticle(EntityX(Curr106\Collider, True), EntityY(Curr106\Collider, True), EntityZ(Curr106\Collider, True), 0, 0.015, -0.2, 250) + #p\size = 0.03 + #p\gravity = -0.2 + #p\lifetime = 200 + #p\SizeChange = 0.005 + #p\speed = 0.001 + #RotateEntity(p\pvt, Rnd(360), Rnd(360), 0, True) + #Next + #EndIf + #Curr106\State = -20000 + #TranslateEntity(Curr106\Collider,0,-50.0,0,True) + #EndIf + #Next + #EndIf + # + #HideEntity e\room\Objects[3] + #HideEntity e\room\Objects[4] + # + #If Rand(5)<5 Then + #PositionTexture TeslaTexture,0.0,Rnd(0,1.0) + #ShowEntity e\room\Objects[3] + #EndIf + #Else + #If e\EventState-FPSfactor < 70 Then + #StopChannel(e\SoundCHN) + #e\SoundCHN = PlaySound2(TeslaPowerUpSFX, Camera, e\room\Objects[3],4.0,0.5) + #EndIf + #HideEntity e\room\Objects[3] + # + #If e\EventState > 150 Then e\EventState = 0 + #EndIf + #EndIf + #EndIf + #Else + #HideEntity e\room\Objects[4] + #EndIf + # + #If e\room\NPC[0] <> Null + #If e\EventStr = "step1" And e\room\NPC[0]\State <> 3 + #If e\EventState = 0 + #For i = 0 To 2 + #If Distance(EntityX(e\room\NPC[0]\Collider),EntityZ(e\room\NPC[0]\Collider),EntityX(e\room\Objects[i],True),EntityZ(e\room\Objects[i],True)) < 400.0*RoomScale + #StopChannel(e\SoundCHN) + #e\SoundCHN = PlaySound2(TeslaActivateSFX, Camera, e\room\Objects[3],4.0,0.5) + #HideEntity e\room\Objects[4] + #e\EventState = 1 + #Exit + #EndIf + #Next + #EndIf + #ElseIf e\EventStr = "step1" And e\room\NPC[0]\State = 3 + #e\room\NPC[0]\CurrSpeed = 0 + #AnimateNPC(e\room\NPC[0],41,60,0.5,False) + #If e\room\NPC[0]\Frame = 60 + #e\room\NPC[0]\IsDead = True + #e\EventStr = "step2" + #SetNPCFrame(e\room\NPC[0],57) + #EndIf + #ElseIf e\EventStr = "step2" + #AnimateNPC(e\room\NPC[0],57,60,0.5,False) + #If e\room\NPC[0]\Frame = 60 + #e\EventStr = "0" + #EndIf + #ElseIf e\EventStr <> "" And e\EventStr <> "step1" And e\EventStr <> "done" + #If Float(e\EventStr) < 70*10 Then + #If ParticleAmount > 0 Then + #If Rand(20-(10*(ParticleAmount-1)))=1 Then + #;p.Particles = CreateParticle(EntityX(e\room\NPC[0]\Collider),EntityY(e\room\NPC[0]\obj)+0.05,EntityZ(e\room\NPC[0]\Collider),6,0.05,0,60) + #p.Particles = CreateParticle(EntityX(e\room\NPC[0]\Collider),EntityY(e\room\NPC[0]\obj)+0.05,EntityZ(e\room\NPC[0]\Collider),0,0.05,0,60) + #p\speed = 0.002 + #RotateEntity(p\pvt, 0, EntityYaw(e\room\NPC[0]\Collider), 0) + #MoveEntity p\pvt,Rnd(-0.1,0.1),0,0.1+Rnd(0,0.5) + #RotateEntity(p\pvt, -90, EntityYaw(e\room\NPC[0]\Collider), 0) + #p\Achange = -0.02 + #EndIf + #EndIf + #e\EventStr = Float(e\EventStr) + FPSfactor + #Else + #e\EventStr = "done" + #EndIf + #EndIf + #EndIf + # + #If PlayerRoom\RoomTemplate\Name <> "pocketdimension" And PlayerRoom\RoomTemplate\Name <> "room860" Then + #If e\EventState2 = 0 Then + #If e\EventState3 <=0 Then + #temp = False + #For n.NPCs = Each NPCs + #If n\NPCtype = NPCtypeMTF Then + #If Abs(EntityX(n\Collider)-EntityX(e\room\obj,True))<4.0 Then + #If Abs(EntityZ(n\Collider)-EntityZ(e\room\obj,True))<4.0 Then + #temp = True + #If e\EventState2 = 0 Then + #n\Sound = LoadSound_Strict("SFX\Character\MTF\Tesla0.ogg") + #PlayMTFSound(n\Sound,n) + # + #;LoadEventSound(e,"SFX\Character\MTF\Tesla1.ogg") + #;e\SoundCHN = PlaySound_Strict (e\Sound) + #;PlayAnnouncement("SFX\Character\MTF\Tesla"+Rand(1,3)+".ogg") + #n\Idle = 70*10 + #e\EventState2 = 70*100 + #EndIf + #EndIf + #EndIf + #EndIf + #Next + #If temp = False Then e\EventState2=70*3.5 + #e\EventState3=e\EventState3+140 + #Else + #e\EventState3=e\EventState3-FPSfactor + #EndIf + #Else + #If e\EventState2 => 70*92 And e\EventState2-FPSfactor < 70*92 + #PlayAnnouncement("SFX\Character\MTF\Tesla"+Rand(1,3)+".ogg") + #EndIf + # + #e\EventState2 = Max(e\EventState2-FPSfactor,0) + #EndIf + #EndIf + # + #;[End Block] + #Case "room2trick" + #;[Block] + #If PlayerRoom = e\room Then + #If EntityDistance(e\room\obj,Collider)<2.0 Then + #If EntityDistance(Collider, Curr173\obj)<6.0 Or EntityDistance(Collider, Curr106\obj)<6.0 Then + #RemoveEvent(e) + #Else + #DebugLog "%@@= \ {2E6C2=FD gi`h]c" + # + #pvt = CreatePivot() + #PositionEntity pvt, EntityX(Collider),EntityY(Collider),EntityZ(Collider) + #PointEntity pvt, e\room\obj + #RotateEntity pvt, 0, EntityYaw(pvt),0,True + #MoveEntity pvt, 0,0,EntityDistance(pvt,e\room\obj)*2 + # + #;CameraShake = 5.0 + #;BlurTimer = 100 + # + #BlinkTimer = -10 + # + #PlaySound_Strict HorrorSFX(11);DripSFX(0) + # + #PositionEntity Collider, EntityX(pvt),EntityY(pvt)+0.05,EntityZ(pvt) + #UpdateWorld() + #;ResetEntity Collider + # + #TurnEntity Collider, 0,180,0 + # + #FreeEntity pvt + #RemoveEvent(e) + #EndIf + #EndIf + #EndIf + #;[End Block] + #Case "room2tunnel" + #;[Block] + # + #If EntityY(Collider,True)>=8.0 And EntityY(Collider,True)<=12.0 Then + #If (EntityX(Collider,True)>=e\room\x-6.0) And (EntityX(Collider,True)<=(e\room\x+2.0*gridsz+6.0)) Then + #If (EntityZ(Collider,True)>=e\room\z-6.0) And (EntityZ(Collider,True)<=(e\room\z+2.0*gridsz+6.0)) Then + #PlayerRoom=e\room + #EndIf + #EndIf + #EndIf + # + #If PlayerRoom = e\room Then + # + #;[Block] + #Local Meshes%[7] + #Local tempStr$ + # + #Local ia%,ib%,ic%,id% + #Local dr.Doors + # + #Local tempInt%,tempInt2% + #Local ix%,iy% + # + #If I_Zone\HasCustomMT Then + #If e\room\grid\Meshes[0]=0 Then + #PlaceGrid_MapCreator(e\room) + #EndIf + #EndIf + # + #If e\room\grid = Null Then + # + #e\room\grid = New Grids + # + #oldSeed% = RndSeed() + #SeedRnd GenerateSeedNumber(RandomSeed) + # + #Local dir% + # + #dir=Rand(0,1) Shl 1 + #;0 = right + #;1 = up + #;2 = left + #;3 = down + # + #ix=gridsz/2+Rand(-2,2) + #iy=gridsz/2+Rand(-2,2) + # + #e\room\grid\grid[ix+(iy*gridsz)]=1 + # + #If dir=2 Then e\room\grid\grid[(ix+1)+(iy*gridsz)]=1 Else e\room\grid\grid[(ix-1)+(iy*gridsz)]=1 + # + #Local count% = 2 + # + #While count<100 + #tempInt=Rand(1,5) Shl Rand(1,2) + #For i=1 To tempInt + # + #tempInt2=True + # + #Select dir + #Case 0 + #If ix1+(i Mod 2) Then ix=ix-1 Else tempInt2=False + #Case 3 + #If iy>1+(i Mod 2) Then iy=iy-1 Else tempInt2=False + #End Select + # + #If tempInt2 Then + #If e\room\grid\grid[ix+(iy*gridsz)]=0 Then + #e\room\grid\grid[ix+(iy*gridsz)]=1 + #count=count+1 + #EndIf + #Else + #Exit + #EndIf + #Next + #dir=dir+((Rand(0,1) Shl 1)-1) + #While dir<0 + #dir=dir+4 + #Wend + #While dir>3 + #dir=dir-4 + #Wend + #Wend + # + #;generate the tunnels + #For iy=0 To gridsz-1 + #For ix=0 To gridsz-1 + #If e\room\grid\grid[ix+(iy*gridsz)]>0 Then + #e\room\grid\grid[ix+(iy*gridsz)]=(e\room\grid\grid[(ix)+((iy+1)*gridsz)]>0)+(e\room\grid\grid[(ix)+((iy-1)*gridsz)]>0)+(e\room\grid\grid[(ix+1)+((iy)*gridsz)]>0)+(e\room\grid\grid[(ix-1)+((iy)*gridsz)]>0) + #EndIf + #Next + #Next + # + #Local maxX%=gridsz-1 + #Local canRetry%=0 + # + #For ix=0 To maxX + #For iy=0 To gridsz-1 + #If e\room\grid\grid[ix+1+(iy*gridsz)]>0 Then + #maxX=ix + #If (e\room\grid\grid[ix+1+((iy+1)*gridsz)]<3) And (e\room\grid\grid[ix+1+((iy-1)*gridsz)]<3) Then + #canRetry=1 + #If Rand(0,1)=1 Then + #e\room\grid\grid[ix+1+((iy)*gridsz)]=e\room\grid\grid[ix+1+((iy)*gridsz)]+1 + #e\room\grid\grid[ix+((iy)*gridsz)]=7 ;generator room + #canRetry=0 + #Exit + #EndIf + #EndIf + #EndIf + #Next + #If canRetry Then ix=ix-1 + #Next + # + #Local firstX%,lastX% + #Local firstY%,lastY% + # + #firstX=-1 + #lastY=-1 + #firstX=-1 + #lastY=-1 + # + #For iy=0 To gridsz-1 + #For ix=0 To gridsz-1 + #If e\room\grid\grid[ix+(iy*gridsz)]=2 Then + #If e\room\grid\grid[(ix+1)+((iy)*gridsz)]>0 And e\room\grid\grid[(ix-1)+((iy)*gridsz)]>0 Then ;horizontal + #If firstX=-1 Or firstY=-1 Then + #If e\room\grid\grid[ix-1+(iy*gridsz)]<3 And e\room\grid\grid[ix+1+(iy*gridsz)]<3 And e\room\grid\grid[ix+((iy-1)*gridsz)]<3 And e\room\grid\grid[ix+((iy+1)*gridsz)]<3 Then + #If e\room\grid\grid[ix-1+((iy-1)*gridsz)]<1 And e\room\grid\grid[ix+1+((iy-1)*gridsz)]<1 And e\room\grid\grid[ix+1+((iy-1)*gridsz)]<1 And e\room\grid\grid[ix-1+((iy+1)*gridsz)]<1 Then + #firstX=ix : firstY=iy + #EndIf + #EndIf + #EndIf + #If e\room\grid\grid[ix-1+(iy*gridsz)]<3 And e\room\grid\grid[ix+1+(iy*gridsz)]<3 And e\room\grid\grid[ix+((iy-1)*gridsz)]<3 And e\room\grid\grid[ix+((iy+1)*gridsz)]<3 Then + #If e\room\grid\grid[ix-1+((iy-1)*gridsz)]<1 And e\room\grid\grid[ix+1+((iy-1)*gridsz)]<1 And e\room\grid\grid[ix+1+((iy-1)*gridsz)]<1 And e\room\grid\grid[ix-1+((iy+1)*gridsz)]<1 Then + #lastX=ix : lastY=iy + #EndIf + #EndIf + #ElseIf e\room\grid\grid[(ix)+((iy+1)*gridsz)]>0 And e\room\grid\grid[(ix)+((iy-1)*gridsz)]>0 Then ;vertical + #If firstX=-1 Or firstY=-1 Then + #If e\room\grid\grid[ix-1+(iy*gridsz)]<3 And e\room\grid\grid[ix+1+(iy*gridsz)]<3 And e\room\grid\grid[ix+((iy-1)*gridsz)]<3 And e\room\grid\grid[ix+((iy+1)*gridsz)]<3 Then + #If e\room\grid\grid[ix-1+((iy-1)*gridsz)]<1 And e\room\grid\grid[ix+1+((iy-1)*gridsz)]<1 And e\room\grid\grid[ix+1+((iy-1)*gridsz)]<1 And e\room\grid\grid[ix-1+((iy+1)*gridsz)]<1 Then + #firstX=ix : firstY=iy + #EndIf + #EndIf + #EndIf + #If e\room\grid\grid[ix-1+(iy*gridsz)]<3 And e\room\grid\grid[ix+1+(iy*gridsz)]<3 And e\room\grid\grid[ix+((iy-1)*gridsz)]<3 And e\room\grid\grid[ix+((iy+1)*gridsz)]<3 Then + #If e\room\grid\grid[ix-1+((iy-1)*gridsz)]<1 And e\room\grid\grid[ix+1+((iy-1)*gridsz)]<1 And e\room\grid\grid[ix+1+((iy-1)*gridsz)]<1 And e\room\grid\grid[ix-1+((iy+1)*gridsz)]<1 Then + #lastX=ix : lastY=iy + #EndIf + #EndIf + #EndIf + #EndIf + #Next + #Next + # + #If lastX=firstX And lastY=firstY Then + #RuntimeError("The maintenance tunnels could not be generated properly!") + #EndIf + # + #;place the tunnels + # + #For i=0 To 6 + #; Select True + #; Case i=2 + #; tempStr="2c" + #; Case i>2 + #; tempStr=Str(i) + #; Default + #; tempStr=Str(i+1) + #; End Select + #Meshes[i]=CopyEntity(OBJTunnel(i)) + #;Meshes[i]=LoadRMesh("GFX\map\mt"+tempStr+".rmesh",Null) + #DebugLog i + #HideEntity Meshes[i] + #Next + #; Meshes[5]=CopyEntity(OBJTunnel(5)) + #; Meshes[5]=LoadRMesh("GFX\map\mt_elevator.rmesh",Null) + #; HideEntity Meshes[5] + #; Meshes[6]=CopyEntity(OBJTunnel(6)) + #; Meshes[6]=LoadRMesh("GFX\map\mt_generator.rmesh",Null) + #; HideEntity Meshes[6] + # + #FreeTextureCache + # + #tempInt=0 + # + #For iy=0 To gridsz-1 + #For ix=0 To gridsz-1 + #If e\room\grid\grid[ix+(iy*gridsz)]>0 Then + # + #Select e\room\grid\grid[ix+(iy*gridsz)] + #Case 1,7 + # + #tempInt%=CopyEntity(Meshes[e\room\grid\grid[ix+(iy*gridsz)]-1]) + # + #If e\room\grid\grid[(ix+1)+((iy)*gridsz)]>0 Then + #RotateEntity tempInt,0,90,0 + #e\room\grid\angles[ix+(iy*gridsz)]=1 + #ElseIf e\room\grid\grid[(ix-1)+((iy)*gridsz)]>0 Then + #RotateEntity tempInt,0,270,0 + #e\room\grid\angles[ix+(iy*gridsz)]=3 + #ElseIf e\room\grid\grid[(ix)+((iy+1)*gridsz)]>0 Then + #RotateEntity tempInt,0,180,0 + #e\room\grid\angles[ix+(iy*gridsz)]=2 + #Else + #RotateEntity tempInt,0,0,0 + #e\room\grid\angles[ix+(iy*gridsz)]=0 + #EndIf + #Case 2 + # + #If (ix=firstX And iy=firstY) Or (ix=lastX And iy=lastY) Then + #e\room\grid\grid[ix+(iy*gridsz)]=6 + #EndIf + # + #If e\room\grid\grid[(ix+1)+((iy)*gridsz)]>0 And e\room\grid\grid[(ix-1)+((iy)*gridsz)]>0 Then ;horizontal + #tempInt%=CopyEntity(Meshes[e\room\grid\grid[ix+(iy*gridsz)]-1]) + # + #AddLight%(Null, e\room\x+ix*2.0, 8.0+(368.0*RoomScale), e\room\z+iy*2.0, 2, 500.0 * RoomScale, 255, 255, 255) + # + #tempInt2=Rand(0,1) + #RotateEntity tempInt,0.0,tempInt2*180.0+90,0.0 + # + #e\room\grid\angles[ix+(iy*gridsz)]=(tempInt2*2)+1 + #ElseIf e\room\grid\grid[(ix)+((iy+1)*gridsz)]>0 And e\room\grid\grid[(ix)+((iy-1)*gridsz)]>0 Then ;vertical + #tempInt%=CopyEntity(Meshes[e\room\grid\grid[ix+(iy*gridsz)]-1]) + # + #AddLight%(Null, e\room\x+ix*2.0, 8.0+(368.0*RoomScale), e\room\z+iy*2.0, 2, 500.0 * RoomScale, 255, 255, 255) + # + #tempInt2=Rand(0,1) + #RotateEntity tempInt,0.0,tempInt2*180.0,0.0 + #e\room\grid\angles[ix+(iy*gridsz)]=(tempInt2*2) + #Else + #tempInt%=CopyEntity(Meshes[e\room\grid\grid[ix+(iy*gridsz)]]) + # + #AddLight%(Null, e\room\x+ix*2.0, 8.0+(412.0*RoomScale), e\room\z+iy*2.0, 2, 500.0 * RoomScale, 255, 255, 255) + # + #ia=e\room\grid\grid[(ix)+((iy+1)*gridsz)] + #ib=e\room\grid\grid[(ix)+((iy-1)*gridsz)] + #ic=e\room\grid\grid[(ix+1)+((iy)*gridsz)] + #id=e\room\grid\grid[(ix-1)+((iy)*gridsz)] + # + #If ia>0 And ic>0 Then + #RotateEntity tempInt,0,0,0 + #e\room\grid\angles[ix+(iy*gridsz)]=0 + #ElseIf ia>0 And id>0 Then + #RotateEntity tempInt,0,90,0 + #e\room\grid\angles[ix+(iy*gridsz)]=1 + #ElseIf ib>0 And ic>0 Then + #RotateEntity tempInt,0,270,0 + #e\room\grid\angles[ix+(iy*gridsz)]=3 + #Else + #RotateEntity tempInt,0,180,0 + #e\room\grid\angles[ix+(iy*gridsz)]=2 + #EndIf + #EndIf + # + #If (ix=firstX And iy=firstY) Then + #e\room\grid\grid[ix+(iy*gridsz)]=5 + #EndIf + # + #Case 3 + #tempInt%=CopyEntity(Meshes[e\room\grid\grid[ix+(iy*gridsz)]]) + # + #ia=e\room\grid\grid[(ix)+((iy+1)*gridsz)] + #ib=e\room\grid\grid[(ix)+((iy-1)*gridsz)] + #ic=e\room\grid\grid[(ix+1)+((iy)*gridsz)] + #id=e\room\grid\grid[(ix-1)+((iy)*gridsz)] + #If ia>0 And ic>0 And id>0 Then + #RotateEntity tempInt,0,90,0 + #e\room\grid\angles[ix+(iy*gridsz)]=1 + #ElseIf ib>0 And ic>0 And id>0 Then + #RotateEntity tempInt,0,270,0 + #e\room\grid\angles[ix+(iy*gridsz)]=3 + #ElseIf ic>0 And ia>0 And ib>0 Then + #RotateEntity tempInt,0,0,0 + #e\room\grid\angles[ix+(iy*gridsz)]=0 + #Else + #RotateEntity tempInt,0,180,0 + #e\room\grid\angles[ix+(iy*gridsz)]=2 + #EndIf + #Case 4 + #tempInt%=CopyEntity(Meshes[e\room\grid\grid[ix+(iy*gridsz)]]) + # + #tempInt2=Rand(0,3) + #RotateEntity tempInt,0,tempInt2*90.0,0 + # + #e\room\grid\angles[ix+(iy*gridsz)]=tempInt2 + #End Select + # + #ScaleEntity tempInt,RoomScale,RoomScale,RoomScale,True + #PositionEntity tempInt,e\room\x+ix*2.0,8.0,e\room\z+iy*2.0,True + # + #Select e\room\grid\grid[ix+(iy*gridsz)] + #Case 1;,5,6 + #AddLight%(Null, e\room\x+ix*2.0, 8.0+(368.0*RoomScale), e\room\z+iy*2.0, 2, 500.0 * RoomScale, 255, 255, 255) + #Case 3,4 + #AddLight%(Null, e\room\x+ix*2.0, 8.0+(412.0*RoomScale), e\room\z+iy*2.0, 2, 500.0 * RoomScale, 255, 255, 255) + #Case 7 + #AddLight%(Null, e\room\x+ix*2.0-(Sin(EntityYaw(tempInt,True))*504.0*RoomScale)+(Cos(EntityYaw(tempInt,True))*16.0*RoomScale), 8.0+(396.0*RoomScale), e\room\z+iy*2.0+(Cos(EntityYaw(tempInt,True))*504.0*RoomScale)+(Sin(EntityYaw(tempInt,True))*16.0*RoomScale), 2, 500.0 * RoomScale, 255, 200, 200) + #it = CreateItem("SCP-500-01","scp500",e\room\x+ix*2.0+(Cos(EntityYaw(tempInt,True))*(-208.0)*RoomScale)-(Sin(EntityYaw(tempInt,True))*1226.0*RoomScale),8.0+(80.0*RoomScale),e\room\z+iy*2.0+(Sin(EntityYaw(tempInt,True))*(-208.0)*RoomScale)+(Cos(EntityYaw(tempInt,True))*1226.0*RoomScale)) + #EntityType (it\collider, HIT_ITEM) + # + #it = CreateItem("Night Vision Goggles", "nvgoggles",e\room\x+ix*2.0-(Sin(EntityYaw(tempInt,True))*504.0*RoomScale)+(Cos(EntityYaw(tempInt,True))*16.0*RoomScale), 8.0+(80.0*RoomScale), e\room\z+iy*2.0+(Cos(EntityYaw(tempInt,True))*504.0*RoomScale)+(Sin(EntityYaw(tempInt,True))*16.0*RoomScale)) + #EntityType (it\collider, HIT_ITEM) + #End Select + # + #If e\room\grid\grid[ix+(iy*gridsz)]=6 Or e\room\grid\grid[ix+(iy*gridsz)]=5 Then + #dr=CreateDoor(e\room\zone,e\room\x+(ix*2.0)+(Cos(EntityYaw(tempInt,True))*240.0*RoomScale),8.0,e\room\z+(iy*2.0)+(Sin(EntityYaw(tempInt,True))*240.0*RoomScale),EntityYaw(tempInt,True)+90.0,Null,False,3,False,"") + #PositionEntity dr\buttons[0],EntityX(dr\buttons[0],True)+(Cos(EntityYaw(tempInt,True))*0.05),EntityY(dr\buttons[0],True)+0.0,EntityZ(dr\buttons[0],True)+(Sin(EntityYaw(tempInt,True))*0.05),True + # + #AddLight%(Null, e\room\x+ix*2.0+(Cos(EntityYaw(tempInt,True))*555.0*RoomScale), 8.0+(469.0*RoomScale), e\room\z+iy*2.0+(Sin(EntityYaw(tempInt,True))*555.0*RoomScale), 2, 600.0 * RoomScale, 255, 255, 255) + # + #tempInt2=CreatePivot() + #RotateEntity tempInt2,0,EntityYaw(tempInt,True)+180.0,0,True + #PositionEntity tempInt2,e\room\x+(ix*2.0)+(Cos(EntityYaw(tempInt,True))*552.0*RoomScale),8.0+(240.0*RoomScale),e\room\z+(iy*2.0)+(Sin(EntityYaw(tempInt,True))*552.0*RoomScale) + #If e\room\grid\grid[ix+(iy*gridsz)]=6 Then + #If e\room\RoomDoors[1]=Null Then + #dr\open = (Not e\room\RoomDoors[0]\open) + #e\room\RoomDoors[1]=dr + #Else + #RemoveDoor(dr) + #EndIf + #If e\room\Objects[3]=0 Then + #e\room\Objects[3]=tempInt2 + #PositionEntity e\room\Objects[1],e\room\x+ix*2.0,8.0,e\room\z+iy*2.0,True + #Else + #FreeEntity tempInt2 + #EndIf + #Else + #If e\room\RoomDoors[3]=Null Then + #dr\open = (Not e\room\RoomDoors[2]\open) + #e\room\RoomDoors[3]=dr + #Else + #RemoveDoor(dr) + #EndIf + #If e\room\Objects[5]=0 Then + #e\room\Objects[5]=tempInt2 + #PositionEntity e\room\Objects[0],e\room\x+ix*2.0,8.0,e\room\z+iy*2.0,True + #Else + #FreeEntity tempInt2 + #EndIf + #EndIf + #EndIf + # + #e\room\grid\Entities[ix+(iy*gridsz)]=tempInt + # + #wayp.WayPoints = CreateWaypoint(e\room\x+(ix*2.0),8.2,e\room\z+(iy*2.0),Null,e\room) + # + #e\room\grid\waypoints[ix+(iy*gridsz)]=wayp + # + #If iyNull Then + #dist=EntityDistance(e\room\grid\waypoints[ix+(iy*gridsz)]\obj,e\room\grid\waypoints[ix+((iy+1)*gridsz)]\obj) + #For i=0 To 3 + #If e\room\grid\waypoints[ix+(iy*gridsz)]\connected[i]=e\room\grid\waypoints[ix+((iy+1)*gridsz)] Then + #Exit + #ElseIf e\room\grid\waypoints[ix+(iy*gridsz)]\connected[i]=Null Then + #e\room\grid\waypoints[ix+(iy*gridsz)]\connected[i]=e\room\grid\waypoints[ix+((iy+1)*gridsz)] + #e\room\grid\waypoints[ix+(iy*gridsz)]\dist[i]=dist + #Exit + #EndIf + #Next + #For i=0 To 3 + #If e\room\grid\waypoints[ix+((iy+1)*gridsz)]\connected[i]=e\room\grid\waypoints[ix+(iy*gridsz)] Then + #Exit + #ElseIf e\room\grid\waypoints[ix+((iy+1)*gridsz)]\connected[i]=Null Then + #e\room\grid\waypoints[ix+((iy+1)*gridsz)]\connected[i]=e\room\grid\waypoints[ix+(iy*gridsz)] + #e\room\grid\waypoints[ix+((iy+1)*gridsz)]\dist[i]=dist + #Exit + #EndIf + #Next + #EndIf + #EndIf + #If iy>0 Then + #If e\room\grid\waypoints[ix+((iy-1)*gridsz)]<>Null Then + #dist=EntityDistance(e\room\grid\waypoints[ix+(iy*gridsz)]\obj,e\room\grid\waypoints[ix+((iy-1)*gridsz)]\obj) + #For i=0 To 3 + #If e\room\grid\waypoints[ix+(iy*gridsz)]\connected[i]=e\room\grid\waypoints[ix+((iy-1)*gridsz)] Then + #Exit + #ElseIf e\room\grid\waypoints[ix+(iy*gridsz)]\connected[i]=Null Then + #e\room\grid\waypoints[ix+(iy*gridsz)]\connected[i]=e\room\grid\waypoints[ix+((iy-1)*gridsz)] + #e\room\grid\waypoints[ix+(iy*gridsz)]\dist[i]=dist + #Exit + #EndIf + #Next + #For i=0 To 3 + #If e\room\grid\waypoints[ix+((iy-1)*gridsz)]\connected[i]=e\room\grid\waypoints[ix+(iy*gridsz)] Then + #Exit + #ElseIf e\room\grid\waypoints[ix+(iy*gridsz)]\connected[i]=Null Then + #e\room\grid\waypoints[ix+((iy-1)*gridsz)]\connected[i]=e\room\grid\waypoints[ix+(iy*gridsz)] + #e\room\grid\waypoints[ix+((iy-1)*gridsz)]\dist[i]=dist + #Exit + #EndIf + #Next + #EndIf + #EndIf + #If ix>0 Then + #If e\room\grid\waypoints[ix-1+(iy*gridsz)]<>Null Then + #dist=EntityDistance(e\room\grid\waypoints[ix+(iy*gridsz)]\obj,e\room\grid\waypoints[ix-1+(iy*gridsz)]\obj) + #For i=0 To 3 + #If e\room\grid\waypoints[ix+(iy*gridsz)]\connected[i]=e\room\grid\waypoints[ix-1+(iy*gridsz)] Then + #Exit + #ElseIf e\room\grid\waypoints[ix+(iy*gridsz)]\connected[i]=Null Then + #e\room\grid\waypoints[ix+(iy*gridsz)]\connected[i]=e\room\grid\waypoints[ix-1+(iy*gridsz)] + #e\room\grid\waypoints[ix+(iy*gridsz)]\dist[i]=dist + #Exit + #EndIf + #Next + #For i=0 To 3 + #If e\room\grid\waypoints[ix-1+(iy*gridsz)]\connected[i]=e\room\grid\waypoints[ix+(iy*gridsz)] Then + #Exit + #ElseIf e\room\grid\waypoints[ix+(iy*gridsz)]\connected[i]=Null Then + #e\room\grid\waypoints[ix-1+(iy*gridsz)]\connected[i]=e\room\grid\waypoints[ix+(iy*gridsz)] + #e\room\grid\waypoints[ix-1+(iy*gridsz)]\dist[i]=dist + #Exit + #EndIf + #Next + #EndIf + #EndIf + #If ixNull Then + #dist=EntityDistance(e\room\grid\waypoints[ix+(iy*gridsz)]\obj,e\room\grid\waypoints[ix+1+(iy*gridsz)]\obj) + #For i=0 To 3 + #If e\room\grid\waypoints[ix+(iy*gridsz)]\connected[i]=e\room\grid\waypoints[ix+1+(iy*gridsz)] Then + #Exit + #ElseIf e\room\grid\waypoints[ix+(iy*gridsz)]\connected[i]=Null Then + #e\room\grid\waypoints[ix+(iy*gridsz)]\connected[i]=e\room\grid\waypoints[ix+1+(iy*gridsz)] + #e\room\grid\waypoints[ix+(iy*gridsz)]\dist[i]=dist + #Exit + #EndIf + #Next + #For i=0 To 3 + #If e\room\grid\waypoints[ix+1+(iy*gridsz)]\connected[i]=e\room\grid\waypoints[ix+(iy*gridsz)] Then + #Exit + #ElseIf e\room\grid\waypoints[ix+(iy*gridsz)]\connected[i]=Null Then + #e\room\grid\waypoints[ix+1+(iy*gridsz)]\connected[i]=e\room\grid\waypoints[ix+(iy*gridsz)] + #e\room\grid\waypoints[ix+1+(iy*gridsz)]\dist[i]=dist + #Exit + #EndIf + #Next + #EndIf + #EndIf + # + #EndIf + #Next + #Next + # + #For i=0 To 6 + #e\room\grid\Meshes[i]=Meshes[i] + #;FreeEntity Meshes[i] + #Next + # + #PositionEntity e\room\Objects[0],e\room\x+firstX*2.0,8.0,e\room\z+firstY*2.0,True + #PositionEntity e\room\Objects[1],e\room\x+lastX*2.0,8.0,e\room\z+lastY*2.0,True + # + #Else If e\room\grid\Meshes[0]=0 Then + # + #;place the tunnels + #For i=0 To 6 + #; Select True + #; Case i=2 + #; tempStr="2c" + #; Case i>2 + #; tempStr=Str(i) + #; Default + #; tempStr=Str(i+1) + #; End Select + #Meshes[i]=CopyEntity(OBJTunnel(i)) + #DebugLog i + #HideEntity Meshes[i] + #Next + #; Meshes[5]=CopyEntity(OBJTunnel(5)) + #; HideEntity Meshes[5] + #; Meshes[6]=CopyEntity(OBJTunnel(6)) + #; HideEntity Meshes[6] + # + #; For i=0 To 4 + #; Select True + #; Case i=2 + #; tempStr="2c" + #; Case i>2 + #; tempStr=Str(i) + #; Default + #; tempStr=Str(i+1) + #; End Select + #; Meshes[i]=LoadRMesh("GFX\map\mt"+tempStr+".rmesh",Null) + #; DebugLog i + #; HideEntity Meshes[i] + #; Next + #; + #; Meshes[5]=LoadRMesh("GFX\map\mt_elevator.rmesh",Null) + #; HideEntity Meshes[5] + #; Meshes[6]=LoadRMesh("GFX\map\mt_generator.rmesh",Null) + #; HideEntity Meshes[6] + # + #FreeTextureCache + # + #tempInt=0 + # + #For iy=0 To gridsz-1 + #For ix=0 To gridsz-1 + #If e\room\grid\grid[ix+(iy*gridsz)]>0 Then + #Select e\room\grid\grid[ix+(iy*gridsz)] + #Case 1,7 + #tempInt%=CopyEntity(Meshes[e\room\grid\grid[ix+(iy*gridsz)]-1]) + #Case 2 + #If e\room\grid\grid[(ix+1)+((iy)*gridsz)]>0 And e\room\grid\grid[(ix-1)+((iy)*gridsz)]>0 Then ;horizontal + #tempInt%=CopyEntity(Meshes[e\room\grid\grid[ix+(iy*gridsz)]-1]) + #AddLight%(Null, e\room\x+ix*2.0, 8.0+(368.0*RoomScale), e\room\z+iy*2.0, 2, 500.0 * RoomScale, 255, 255, 255) + #ElseIf e\room\grid\grid[(ix)+((iy+1)*gridsz)]>0 And e\room\grid\grid[(ix)+((iy-1)*gridsz)]>0 Then ;vertical + #tempInt%=CopyEntity(Meshes[e\room\grid\grid[ix+(iy*gridsz)]-1]) + #AddLight%(Null, e\room\x+ix*2.0, 8.0+(368.0*RoomScale), e\room\z+iy*2.0, 2, 500.0 * RoomScale, 255, 255, 255) + #Else + #tempInt%=CopyEntity(Meshes[e\room\grid\grid[ix+(iy*gridsz)]]) + #AddLight%(Null, e\room\x+ix*2.0, 8.0+(412.0*RoomScale), e\room\z+iy*2.0, 2, 500.0 * RoomScale, 255, 255, 255) + #EndIf + #Case 3,4 + #tempInt%=CopyEntity(Meshes[e\room\grid\grid[ix+(iy*gridsz)]]) + #Case 5,6 + #tempInt%=CopyEntity(Meshes[5]) + #End Select + # + #ScaleEntity tempInt,RoomScale,RoomScale,RoomScale,True + # + #RotateEntity tempInt,0,e\room\grid\angles[ix+(iy*gridsz)]*90.0,0 + #PositionEntity tempInt,e\room\x+ix*2.0,8.0,e\room\z+iy*2.0,True + # + #Select e\room\grid\grid[ix+(iy*gridsz)] + #Case 1,5,6 + #AddLight%(Null, e\room\x+ix*2.0, 8.0+(368.0*RoomScale), e\room\z+iy*2.0, 2, 500.0 * RoomScale, 255, 255, 255) + #Case 3,4 + #AddLight%(Null, e\room\x+ix*2.0, 8.0+(412.0*RoomScale), e\room\z+iy*2.0, 2, 500.0 * RoomScale, 255, 255, 255) + #Case 7 + #AddLight%(Null, e\room\x+ix*2.0-(Sin(EntityYaw(tempInt,True))*504.0*RoomScale)+(Cos(EntityYaw(tempInt,True))*16.0*RoomScale), 8.0+(396.0*RoomScale), e\room\z+iy*2.0+(Cos(EntityYaw(tempInt,True))*504.0*RoomScale)+(Sin(EntityYaw(tempInt,True))*16.0*RoomScale), 2, 500.0 * RoomScale, 255, 200, 200) + #End Select + # + #If e\room\grid\grid[ix+(iy*gridsz)]=6 Or e\room\grid\grid[ix+(iy*gridsz)]=5 Then + #dr=CreateDoor(e\room\zone,e\room\x+(ix*2.0)+(Cos(EntityYaw(tempInt,True))*240.0*RoomScale),8.0,e\room\z+(iy*2.0)+(Sin(EntityYaw(tempInt,True))*240.0*RoomScale),EntityYaw(tempInt,True)+90.0,Null,False,3,False,"") + # + #AddLight%(Null, e\room\x+ix*2.0+(Cos(EntityYaw(tempInt,True))*555.0*RoomScale), 8.0+(469.0*RoomScale), e\room\z+iy*2.0+(Sin(EntityYaw(tempInt,True))*555.0*RoomScale), 2, 600.0 * RoomScale, 255, 255, 255) + # + #PositionEntity dr\buttons[0],EntityX(dr\buttons[0],True)+(Cos(EntityYaw(tempInt,True))*0.05),EntityY(dr\buttons[0],True)+0.0,EntityZ(dr\buttons[0],True)+(Sin(EntityYaw(tempInt,True))*0.05),True + #tempInt2=CreatePivot() + #RotateEntity tempInt2,0,EntityYaw(tempInt,True)+180.0,0,True + #PositionEntity tempInt2,e\room\x+(ix*2.0)+(Cos(EntityYaw(tempInt,True))*552.0*RoomScale),8.0+(240.0*RoomScale),e\room\z+(iy*2.0)+(Sin(EntityYaw(tempInt,True))*552.0*RoomScale) + #If e\room\grid\grid[ix+(iy*gridsz)]=6 Then + #If e\room\RoomDoors[1]=Null Then + #dr\open = (Not e\room\RoomDoors[0]\open) + #e\room\RoomDoors[1]=dr + #Else + #RemoveDoor(dr) + #EndIf + #If e\room\Objects[3]=0 Then + #e\room\Objects[3]=tempInt2 + #PositionEntity e\room\Objects[1],e\room\x+ix*2.0,8.0,e\room\z+iy*2.0,True + #Else + #FreeEntity tempInt2 + #EndIf + #Else + #If e\room\RoomDoors[3]=Null Then + #dr\open = (Not e\room\RoomDoors[2]\open) + #e\room\RoomDoors[3]=dr + #Else + #RemoveDoor(dr) + #EndIf + #If e\room\Objects[5]=0 Then + #e\room\Objects[5]=tempInt2 + #PositionEntity e\room\Objects[0],e\room\x+ix*2.0,8.0,e\room\z+iy*2.0,True + #Else + #FreeEntity tempInt2 + #EndIf + #EndIf + #EndIf + # + #e\room\grid\Entities[ix+(iy*gridsz)]=tempInt + # + #wayp.WayPoints = CreateWaypoint(e\room\x+(ix*2.0),8.2,e\room\z+(iy*2.0),Null,e\room) + # + #e\room\grid\waypoints[ix+(iy*gridsz)]=wayp + # + #If iyNull Then + #dist=EntityDistance(e\room\grid\waypoints[ix+(iy*gridsz)]\obj,e\room\grid\waypoints[ix+((iy+1)*gridsz)]\obj) + #For i=0 To 3 + #If e\room\grid\waypoints[ix+(iy*gridsz)]\connected[i]=e\room\grid\waypoints[ix+((iy+1)*gridsz)] Then + #Exit + #ElseIf e\room\grid\waypoints[ix+(iy*gridsz)]\connected[i]=Null Then + #e\room\grid\waypoints[ix+(iy*gridsz)]\connected[i]=e\room\grid\waypoints[ix+((iy+1)*gridsz)] + #e\room\grid\waypoints[ix+(iy*gridsz)]\dist[i]=dist + #Exit + #EndIf + #Next + #For i=0 To 3 + #If e\room\grid\waypoints[ix+((iy+1)*gridsz)]\connected[i]=e\room\grid\waypoints[ix+(iy*gridsz)] Then + #Exit + #ElseIf e\room\grid\waypoints[ix+((iy+1)*gridsz)]\connected[i]=Null Then + #e\room\grid\waypoints[ix+((iy+1)*gridsz)]\connected[i]=e\room\grid\waypoints[ix+(iy*gridsz)] + #e\room\grid\waypoints[ix+((iy+1)*gridsz)]\dist[i]=dist + #Exit + #EndIf + #Next + #EndIf + #EndIf + #If iy>0 Then + #If e\room\grid\waypoints[ix+((iy-1)*gridsz)]<>Null Then + #dist=EntityDistance(e\room\grid\waypoints[ix+(iy*gridsz)]\obj,e\room\grid\waypoints[ix+((iy-1)*gridsz)]\obj) + #For i=0 To 3 + #If e\room\grid\waypoints[ix+(iy*gridsz)]\connected[i]=e\room\grid\waypoints[ix+((iy-1)*gridsz)] Then + #Exit + #ElseIf e\room\grid\waypoints[ix+(iy*gridsz)]\connected[i]=Null Then + #e\room\grid\waypoints[ix+(iy*gridsz)]\connected[i]=e\room\grid\waypoints[ix+((iy-1)*gridsz)] + #e\room\grid\waypoints[ix+(iy*gridsz)]\dist[i]=dist + #Exit + #EndIf + #Next + #For i=0 To 3 + #If e\room\grid\waypoints[ix+((iy-1)*gridsz)]\connected[i]=e\room\grid\waypoints[ix+(iy*gridsz)] Then + #Exit + #ElseIf e\room\grid\waypoints[ix+(iy*gridsz)]\connected[i]=Null Then + #e\room\grid\waypoints[ix+((iy-1)*gridsz)]\connected[i]=e\room\grid\waypoints[ix+(iy*gridsz)] + #e\room\grid\waypoints[ix+((iy-1)*gridsz)]\dist[i]=dist + #Exit + #EndIf + #Next + #EndIf + #EndIf + #If ix>0 Then + #If e\room\grid\waypoints[ix-1+(iy*gridsz)]<>Null Then + #dist=EntityDistance(e\room\grid\waypoints[ix+(iy*gridsz)]\obj,e\room\grid\waypoints[ix-1+(iy*gridsz)]\obj) + #For i=0 To 3 + #If e\room\grid\waypoints[ix+(iy*gridsz)]\connected[i]=e\room\grid\waypoints[ix-1+(iy*gridsz)] Then + #Exit + #ElseIf e\room\grid\waypoints[ix+(iy*gridsz)]\connected[i]=Null Then + #e\room\grid\waypoints[ix+(iy*gridsz)]\connected[i]=e\room\grid\waypoints[ix-1+(iy*gridsz)] + #e\room\grid\waypoints[ix+(iy*gridsz)]\dist[i]=dist + #Exit + #EndIf + #Next + #For i=0 To 3 + #If e\room\grid\waypoints[ix-1+(iy*gridsz)]\connected[i]=e\room\grid\waypoints[ix+(iy*gridsz)] Then + #Exit + #ElseIf e\room\grid\waypoints[ix+(iy*gridsz)]\connected[i]=Null Then + #e\room\grid\waypoints[ix-1+(iy*gridsz)]\connected[i]=e\room\grid\waypoints[ix+(iy*gridsz)] + #e\room\grid\waypoints[ix-1+(iy*gridsz)]\dist[i]=dist + #Exit + #EndIf + #Next + #EndIf + #EndIf + #If ixNull Then + #dist=EntityDistance(e\room\grid\waypoints[ix+(iy*gridsz)]\obj,e\room\grid\waypoints[ix+1+(iy*gridsz)]\obj) + #For i=0 To 3 + #If e\room\grid\waypoints[ix+(iy*gridsz)]\connected[i]=e\room\grid\waypoints[ix+1+(iy*gridsz)] Then + #Exit + #ElseIf e\room\grid\waypoints[ix+(iy*gridsz)]\connected[i]=Null Then + #e\room\grid\waypoints[ix+(iy*gridsz)]\connected[i]=e\room\grid\waypoints[ix+1+(iy*gridsz)] + #e\room\grid\waypoints[ix+(iy*gridsz)]\dist[i]=dist + #Exit + #EndIf + #Next + #For i=0 To 3 + #If e\room\grid\waypoints[ix+1+(iy*gridsz)]\connected[i]=e\room\grid\waypoints[ix+(iy*gridsz)] Then + #Exit + #ElseIf e\room\grid\waypoints[ix+(iy*gridsz)]\connected[i]=Null Then + #e\room\grid\waypoints[ix+1+(iy*gridsz)]\connected[i]=e\room\grid\waypoints[ix+(iy*gridsz)] + #e\room\grid\waypoints[ix+1+(iy*gridsz)]\dist[i]=dist + #Exit + #EndIf + #Next + #EndIf + #EndIf + #EndIf + #Next + #Next + # + #For i=0 To 6 + #e\room\grid\Meshes[i]=Meshes[i] + #Next + # + #SeedRnd oldSeed + # + #For it.Items = Each Items + #If (EntityY(it\collider,True)>=8.0) And (EntityY(it\collider,True)<=12.0) Then + #DebugLog it\name+" is within Y limits" + #If (EntityX(it\collider,True)>=e\room\x-6.0) And (EntityX(it\collider,True)<=(e\room\x+(2.0*gridsz)+6.0)) Then + #DebugLog "and within X limits" + #EndIf + #If (EntityZ(it\collider,True)>=e\room\z-6.0) And (EntityZ(it\collider,True)<=(e\room\z+(2.0*gridsz)+6.0)) Then + #DebugLog "and within Z limits" + #EndIf + #EndIf + # + #If (EntityY(it\collider,True)>=8.0) And (EntityY(it\collider,True)<=12.0) And (EntityX(it\collider,True)>=e\room\x-6.0) And (EntityX(it\collider,True)<=(e\room\x+(2.0*gridsz)+6.0)) And (EntityZ(it\collider,True)>=e\room\z-6.0) And (EntityZ(it\collider,True)<=(e\room\z+(2.0*gridsz)+6.0)) Then + #DebugLog it\name + #TranslateEntity it\collider,0.0,0.3,0.0,True + #ResetEntity it\collider + #EndIf + #Next + # + #EndIf + #;[End Block] + # + #If EntityY(Collider,True)>4.0 Then + #For iy=0 To gridsz-1 + #For ix=0 To gridsz-1 + #If e\room\grid\Entities[ix+(iy*gridsz)]<>0 + #ShowEntity e\room\grid\Entities[ix+(iy*gridsz)] + #EndIf + #Next + #Next + # + #For r.Rooms = Each Rooms + #If r <> e\room + #HideEntity r\obj + #EndIf + #Next + #EntityAlpha(GetChild(e\room\obj,2),0) + # + #ShouldPlay = 7 + # + #If e\EventState = 0 Then + #If EntityDistance(Collider, e\room\Objects[0]) < EntityDistance(Collider, e\room\Objects[1]) Then + #temp = 0 + #Else + #temp = 1 + #EndIf + #e\EventState = 2 + # + #If (Not Contained106) Then + #de.Decals = CreateDecal(0, EntityX(e\room\Objects[temp],True), EntityY(e\room\Objects[temp],True)+0.05, EntityZ(e\room\Objects[temp],True), 90, Rand(360), 0) + #de\Size = 0.05 : de\SizeChange = 0.001 : EntityAlpha(de\obj, 0.8) : UpdateDecals + # + #DebugLog "updateevents collider: "+EntityY(Collider,True) + #PositionEntity Curr106\Collider, EntityX(e\room\Objects[temp],True), EntityY(Collider,True)-3.0, EntityZ(e\room\Objects[temp],True) + #SetAnimTime Curr106\obj, 110 + #Curr106\State = -0.1 + #Curr106\PrevY = EntityY(Collider) + #EndIf + # + #For i = 0 To 1 + #Local spawnPoint.WayPoints = Null + #For x = i*((gridsz*gridsz)/5.0) To (gridsz*gridsz-1) + #DebugLog("spawn 966 X: "+x) + #If Rand(2)=1 And e\room\grid\waypoints[x]<>Null Then + #spawnPoint = e\room \grid\waypoints[x] + #x = gridsz*gridsz + #EndIf + #Next + #If (spawnPoint<>Null) Then + #e\room\NPC[i] =CreateNPC(NPCtype966, EntityX(spawnPoint\obj,True), EntityY(spawnPoint\obj,True), EntityZ(spawnPoint\obj,True)) + #EndIf + #Next + #EndIf + #Else + #For iy=0 To gridsz-1 + #For ix=0 To gridsz-1 + #If e\room\grid\Entities[ix+(iy*gridsz)]<>0 + #HideEntity e\room\grid\Entities[ix+(iy*gridsz)] + #EndIf + #Next + #Next + #EndIf ;entityy(collider) >4 + # + #e\EventState2 = UpdateElevators(e\EventState2, e\room\RoomDoors[0], e\room\RoomDoors[1],e\room\Objects[2],e\room\Objects[3], e, False) + #e\EventState3 = UpdateElevators(e\EventState3, e\room\RoomDoors[2], e\room\RoomDoors[3],e\room\Objects[4],e\room\Objects[5], e, False) + #Else + #If e\room\grid <> Null + #If e\room\grid\Meshes[0]<>0 + #For iy=0 To gridsz-1 + #For ix=0 To gridsz-1 + #If e\room\grid\Entities[ix+(iy*gridsz)]<>0 + #HideEntity e\room\grid\Entities[ix+(iy*gridsz)] + #EndIf + #Next + #Next + #EndIf + #EndIf + #EndIf + #;[End Block] + #Case "room2pipes106" + #;[Block] + #If (Not Contained106) Then + #If e\EventState = 0 Then + #If PlayerRoom = e\room Then e\EventState = 1 + #Else + #e\EventState=(e\EventState+FPSfactor*0.7) + #;0-50 = walk to the middle + #;50-200 = look around + #;200-250 = leave + #If e\EventState < 50 Then + #Curr106\Idle = True + #PositionEntity(Curr106\Collider, EntityX(e\room\Objects[0], True), EntityY(Collider) - 0.15, EntityZ(e\room\Objects[0], True)) + #PointEntity(Curr106\Collider, e\room\Objects[1]) + #MoveEntity(Curr106\Collider, 0, 0, EntityDistance(e\room\Objects[0], e\room\Objects[1])*0.5 * (e\EventState / 50.0)) + #AnimateNPC(Curr106, 284, 333, 0.02*35) + #ElseIf e\EventState < 200 + #Curr106\Idle = True + #AnimateNPC(Curr106, 334, 494, 0.2) + # + #PositionEntity(Curr106\Collider, (EntityX(e\room\Objects[0], True)+EntityX(e\room\Objects[1], True))/2, EntityY(Collider) - 0.15, (EntityZ(e\room\Objects[0], True)+EntityZ(e\room\Objects[1], True))/2) + #;MoveEntity(Curr106\Collider, 0, 0, EntityDistance(e\room\Objects[0], e\room\Objects[1])*0.5) + #RotateEntity(Curr106\Collider,0, CurveValue(e\EventState,EntityYaw(Curr106\Collider),30.0),0,True) + #If EntityDistance(Curr106\Collider, Collider)<4.0 Then + #pvt = CreatePivot() + #PositionEntity(pvt, EntityX(Curr106\Collider),EntityY(Curr106\Collider),EntityZ(Curr106\Collider)) + #PointEntity pvt, Collider + #If WrapAngle(EntityYaw(pvt)-EntityYaw(Curr106\Collider))<80 Then + #Curr106\State = -11 + #Curr106\Idle = False + #PlaySound_Strict(HorrorSFX(10)) + #e\EventState = 260 + #EndIf + #FreeEntity pvt + #EndIf + #ElseIf e\EventState < 250 + #Curr106\Idle = True + #PositionEntity(Curr106\Collider, EntityX(e\room\Objects[0], True), EntityY(Collider) - 0.15, EntityZ(e\room\Objects[0], True)) + #PointEntity(Curr106\Collider, e\room\Objects[1]) + #;200-250 (- 150) 50-100 + #MoveEntity(Curr106\Collider, 0, 0, EntityDistance(e\room\Objects[0], e\room\Objects[1]) * ((e\EventState-150.0) / 100.0)) + #AnimateNPC(Curr106, 284, 333, 0.02*35) + #EndIf + #ResetEntity(Curr106\Collider) + # + #PositionEntity(Curr106\obj, EntityX(Curr106\Collider), EntityY(Curr106\Collider) - 0.15, EntityZ(Curr106\Collider)) + #RotateEntity Curr106\obj, 0, EntityYaw(Curr106\Collider), 0 + # + #;PositionEntity(Curr106\Collider, EntityX(Curr106\Collider), EntityY(Collider) - 0.20, EntityZ(Curr106\Collider)) + # + #If (e\EventState / 250.0) > 0.3 And ((e\EventState - FPSfactor*0.7) / 250.0) <= 0.3 Then + #e\SoundCHN = PlaySound_Strict(HorrorSFX(6)) + #BlurTimer = 800 + #d.Decals = CreateDecal(0, EntityX(e\room\Objects[2], True), EntityY(e\room\Objects[2], True), EntityZ(e\room\Objects[2], True), 0, e\room\angle - 90, Rnd(360)) ;90, Rnd(360), 0 + #d\Timer = 90000 + #d\Alpha = 0.01 : d\AlphaChange = 0.005 + #d\Size = 0.1 : d\SizeChange = 0.003 + #EndIf + # + #If (e\EventState / 250.0) > 0.65 And ((e\EventState - FPSfactor*0.7) / 250.0) <= 0.65 Then + #d.Decals = CreateDecal(0, EntityX(e\room\Objects[3], True), EntityY(e\room\Objects[3], True), EntityZ(e\room\Objects[3], True), 0, e\room\angle + 90, Rnd(360)) + #d\Timer = 90000 + #d\Alpha = 0.01 : d\AlphaChange = 0.005 + #d\Size = 0.1 : d\SizeChange = 0.003 + #EndIf + # + #If e\EventState > 250 Then Curr106\Idle = False :RemoveEvent(e) + # + #End If + #EndIf + #;[End Block] + #Case "room2pit106" + #;[Block] + #If (Not Contained106) And Curr106\State>0 Then + #If e\EventState = 0 Then + #If PlayerRoom = e\room Then e\EventState = 1 + #Else + #e\EventState = e\EventState + 1 + #PositionEntity(Curr106\Collider, EntityX(e\room\Objects[7], True), EntityY(e\room\Objects[7], True), EntityZ(e\room\Objects[7], True)) + #ResetEntity(Curr106\Collider) + # + #PointEntity(Curr106\Collider, Camera) + #TurnEntity(Curr106\Collider, 0, Sin(MilliSecs2() / 20) * 6.0, 0, True) + #MoveEntity(Curr106\Collider, 0, 0, Sin(MilliSecs2() / 15) * 0.06) + #PositionEntity(Curr106\obj, EntityX(Curr106\Collider), EntityY(Curr106\Collider) - 0.15, EntityZ(Curr106\Collider)) + # + #RotateEntity Curr106\obj, 0, EntityYaw(Curr106\Collider), 0 + #Curr106\Idle = True + #AnimateNPC(Curr106, 334, 494, 0.3) + #If e\EventState > 800 Then + #If BlinkTimer < - 5 Then Curr106\Idle = False : RemoveEvent(e) + #EndIf + #EndIf + #End If + #;[End Block] + #Case "room2pit" + #;[Block] + #If Curr173\Idle = 0 Then + #If e\room\dist < 8.0 And e\room\dist > 0 Then + #If (Not EntityVisible(Curr173\Collider, Camera)) And (Not EntityVisible(e\room\Objects[6], Camera)) Then + #PositionEntity(Curr173\Collider, EntityX(e\room\Objects[6], True), 0.5, EntityZ(e\room\Objects[6], True)) + #ResetEntity(Curr173\Collider) + #RemoveEvent(e) + #EndIf + #End If + #EndIf + #;[End Block] + #Case "room3pitduck" + #;[Block] + #If PlayerRoom = e\room Then + #If e\room\Objects[2] = 0 Then + #e\room\Objects[2] = LoadMesh_Strict("GFX\npcs\duck_low_res.b3d") + #ScaleEntity(e\room\Objects[2], 0.07, 0.07, 0.07) + #tex = LoadTexture_Strict("GFX\npcs\duck1.png") + #EntityTexture e\room\Objects[2], tex + #FreeTexture tex + #PositionEntity (e\room\Objects[2], EntityX(e\room\Objects[0],True), EntityY(e\room\Objects[0],True), EntityZ(e\room\Objects[0],True)) + #PointEntity e\room\Objects[2], e\room\obj + #RotateEntity(e\room\Objects[2], 0, EntityYaw(e\room\Objects[2],True),0, True) + # + #LoadEventSound(e,"SFX\SCP\Joke\Saxophone.ogg") + #Else + #If EntityInView(e\room\Objects[2],Camera)=False Then + #e\EventState = e\EventState + FPSfactor + #If Rand(200)=1 And e\EventState > 300 Then + #e\EventState = 0 + #e\SoundCHN = PlaySound2(e\Sound, Camera, e\room\Objects[2],6.0) + #EndIf + #Else + #If e\SoundCHN <> 0 Then + #If ChannelPlaying(e\SoundCHN) Then StopChannel e\SoundCHN + #EndIf + #EndIf + #EndIf + #EndIf + #;[End Block] + #Case "room3pit1048" + #;[Block] + #If PlayerRoom = e\room Then + #If e\room\Objects[2] = 0 Then + #e\room\Objects[2] = LoadAnimMesh_Strict("GFX\npcs\scp-1048pp.b3d") + #ScaleEntity e\room\Objects[2], 0.05,0.05,0.05 + #SetAnimTime(e\room\Objects[2], 414) + # + #Local imgPath$ = "GFX\items\1048\1048_"+Rand(1,20)+".jpg" + # + #Local itt.ItemTemplates + #For itt.ItemTemplates = Each ItemTemplates + #If itt\name = "Drawing" Then + #If itt\img<>0 Then FreeImage itt\img + #itt\img = LoadImage_Strict(imgPath) + #MaskImage(itt\img, 255,0,255) + #itt\imgpath = imgPath + # + #Exit + #EndIf + #Next + # + #tex% = LoadTexture_Strict(imgPath) + #Local brush% = LoadBrush_Strict(imgPath, 1) + # + #For i = 1 To CountSurfaces(e\room\Objects[2]) + #sf% = GetSurface(e\room\Objects[2],i) + #b% = GetSurfaceBrush( sf ) + #t% = GetBrushTexture(b, 0) + #texname$ = StripPath(TextureName(t)) + #DebugLog "texname: "+texname + #If Lower(texname) = "1048_1.jpg" Then + #PaintSurface sf, brush + #EndIf + #;MAV??? + #;If texname<>"" Then FreeTexture t + #FreeBrush b + #Next + # + #FreeTexture tex + #FreeBrush brush + # + #PositionEntity (e\room\Objects[2], EntityX(e\room\Objects[0],True), EntityY(e\room\Objects[0],True), EntityZ(e\room\Objects[0],True)) + # + #;e\Sound = LoadSound_Strict("SFX\SCP\Joke\Saxophone.ogg") + #Else + #PointEntity e\room\Objects[2], Collider + #RotateEntity(e\room\Objects[2], -90, EntityYaw(e\room\Objects[2],True),0, True) + # + #If e\EventState=0 Then + #If (EntityDistance(Collider, e\room\Objects[2])<3.0) Then + #If EntityInView(e\room\Objects[2],Camera) Then + #e\EventState = 1 + #GiveAchievement(Achv1048) + #EndIf + #EndIf + #Else If e\EventState=1 + #Animate2(e\room\Objects[2], AnimTime(e\room\Objects[2]), 1, 205, 0.5, False) + #If AnimTime(e\room\Objects[2])=205 Then e\EventState=2 + #Else If e\EventState = 2 + #Animate2(e\room\Objects[2], AnimTime(e\room\Objects[2]), 205, 353, 1.0) + #If (EntityDistance(Collider, e\room\Objects[2])<1.5) Then + #DrawHandIcon = True + # + #If MouseHit1 Then + #If ItemAmount >= MaxItemAmount Then + #Msg = "You cannot carry any more items." + #MsgTimer = 70 * 5 + #Else + #SelectedItem = CreateItem("Drawing", "paper", 0.0, 0.0, 0.0) + #EntityType SelectedItem\collider,HIT_ITEM + # + #PickItem(SelectedItem) + # + #FreeEntity(e\room\Objects[2]) + #e\room\Objects[2] = 0 + # + #e\EventState = 3 + #RemoveEvent(e) + #EndIf + #EndIf + #EndIf + #EndIf + #EndIf + #EndIf + #;[End Block] + #Case "room2poffices2" + #;[Block] + #If PlayerRoom = e\room Then + #If e\EventState = 0 Then + #If e\room\RoomDoors[0]\open = True Then + #If e\room\RoomDoors[0]\openstate = 180 Then + #e\EventState = 1 + #PlaySound_Strict HorrorSFX(5) + #EndIf + #Else + #If (EntityDistance(Collider, e\room\RoomDoors[0]\obj)<1.5) And (RemoteDoorOn) Then + #e\room\RoomDoors[0]\open = True + #EndIf + #EndIf + #Else + #If EntityDistance(e\room\Objects[0], Collider) < 2.0 Then + #HeartBeatVolume = CurveValue(0.5, HeartBeatVolume, 5) + #HeartBeatRate = CurveValue(120, HeartBeatRate, 150) + #e\SoundCHN = LoopSound2(OldManSFX(4), e\SoundCHN, Camera, e\room\obj, 5.0, 0.3) + #Curr106\State=Curr106\State-FPSfactor*3 + #EndIf + # + #EndIf + #EndIf + #;[End Block] + #Case "room2servers" + #;[Block] + #If e\EventState=0 Then + #If PlayerRoom = e\room Then + #;close the doors when the player enters the room + #UseDoor(e\room\RoomDoors[0],False) + #e\room\RoomDoors[0]\locked = True + #UseDoor(e\room\RoomDoors[1],False) + #e\room\RoomDoors[1]\locked = True + # + #If Curr096=Null Then + #Curr096 = CreateNPC(NPCtype096, EntityX(e\room\Objects[6],True),EntityY(e\room\Objects[6],True)+0.1,EntityZ(e\room\Objects[6],True)) + #Else + #PositionEntity Curr096\Collider, EntityX(e\room\Objects[6],True),EntityY(e\room\Objects[6],True)+0.1,EntityZ(e\room\Objects[6],True),True + #EndIf + # + #RotateEntity Curr096\Collider, 0, e\room\angle+270, 0, True + #ResetEntity Curr096\Collider + #Curr096\State=6 + #Curr096\State2=70*10 + # + #LoadEventSound(e,"SFX\Character\Guard\096ServerRoom1.ogg") + #e\SoundCHN = PlaySound_Strict (e\Sound) + # + #e\room\NPC[0]=CreateNPC(NPCtypeGuard, EntityX(e\room\Objects[7],True),EntityY(e\room\Objects[7],True),EntityZ(e\room\Objects[7],True)) + # + #GiveAchievement(Achv096) + # + #e\EventState=1 + #EndIf + #ElseIf e\EventState < 70*45 + #If Rand(200)<5 And PlayerRoom = e\room Then + #LightBlink = Rnd(1.0,2.0) + #If Rand(5)=1 Then PlaySound2(IntroSFX(Rand(10,12)), Camera, e\room\obj, 8.0, Rnd(0.1,0.3)) + #EndIf + # + #e\EventState=Min(e\EventState+FPSfactor,70*43) + # + #If e\room\NPC[0]<>Null Then + #;[Block] +#; If e\EventState < 70*13 Then +#; +#; If e\EventState > 70*8 Then +#; Curr096\State=Min(Max(2,Curr096\State),3) +#; Curr096\State2=70*10 +#; Else +#; Curr096\State = 5 +#; PointEntity Curr096\Collider, e\room\Objects[9] +#; RotateEntity Curr096\Collider, 0, EntityYaw(Curr096\Collider,True),0,True +#; If EntityDistance(Curr096\Collider, e\room\Objects[8])<2.4 Then +#; Curr096\State2 = 0 +#; Else +#; Curr096\State2 = 1001 +#; EndIf +#; EndIf +#; +#; e\room\NPC[0]\State=13 +#; ;SetAnimTime e\room\NPC[0]\obj, 115 +#; PointEntity e\room\NPC[0]\Collider, Curr096\Collider +#; ElseIf e\EventState-FPSfactor =< 70*15 Then ;walk to the doorway +#; If e\EventState > 70*15 Then +#; e\room\NPC[0]\State=14 +#; ;e\room\NPC[0]\PathStatus = FindPath(e\room\NPC[0], EntityX(e\room\Objects[8],True),0.5,EntityZ(e\room\Objects[8],True)) +#; e\room\NPC[0]\PathStatus = FindPath(e\room\NPC[0], EntityX(Curr096\Collider,True),0.4,EntityZ(Curr096\Collider,True)) +#; e\room\NPC[0]\PathTimer=300 +#; EndIf +#; ElseIf e\EventState<70*20 Then +#; If e\room\NPC[0]\PathStatus=0 Then +#; e\room\RoomDoors[2]\open = False +#; +#; e\room\NPC[0]\State=13 +#; ;SetAnimTime e\room\NPC[0]\obj, 115 +#; PointEntity e\room\NPC[0]\obj, Curr096\Collider +#; RotateEntity (e\room\NPC[0]\Collider, 0, CurveAngle(EntityYaw(e\room\NPC[0]\obj),EntityYaw(e\room\NPC[0]\Collider),30),0) +#; +#; EndIf +#; Else ;start walking away +#; +#; If Curr096\State = 4 Then ;shoot at 096 when it starts attacking +#; Curr096\LastSeen=1 +#; +#; e\room\NPC[0]\State = 2 +#; PointEntity e\room\NPC[0]\obj, Curr096\Collider +#; RotateEntity (e\room\NPC[0]\Collider, 0, CurveAngle(EntityYaw(e\room\NPC[0]\obj),EntityYaw(e\room\NPC[0]\Collider),30),0) +#; If PlayerRoom = e\room Then LightBlink = (e\room\NPC[0]\Reload)+Rnd(0.5,2.0) +#; Curr096\Target = e\room\NPC[0] +#; Else +#; If e\EventState>70*22 Then Curr096\State = 4 +#; If e\room\NPC[0]\State=13 Then +#; e\room\NPC[0]\State=14 +#; e\room\NPC[0]\PathStatus = FindPath(e\room\NPC[0], EntityX(e\room\obj,True),0.4,EntityZ(e\room\obj,True)) +#; e\room\NPC[0]\PathTimer=300 +#; e\room\NPC[0]\Speed = e\room\NPC[0]\Speed*1.8 ;Making the guard walking a bit faster +#; EndIf +#; EndIf +#; EndIf +#; +#; Curr096\Target = e\room\NPC[0] +#; If AnimTime(Curr096\obj)>25 And AnimTime(Curr096\obj)<150 Then +#; FreeSound_Strict e\Sound : e\Sound = 0 +#; e\Sound=LoadSound_Strict("SFX\Character\Guard\096ServerRoom2.ogg") +#; e\SoundCHN=PlaySound_Strict(e\Sound) +#; +#; Curr096\CurrSpeed = 0 +#; +#; For i = 0 To 6 +#; If e\room\angle = 0 Or e\room\angle = 180 Then +#; de.Decals = CreateDecal(Rand(2,3), e\room\x-Rnd(197,199)*Cos(e\room\angle)*RoomScale, 1.0, e\room\z+(140.0*(i-3))*RoomScale,0,e\room\angle+90,Rnd(360)) +#; de\size = Rnd(0.8,0.85) : de\sizechange = 0.001 +#; de.Decals = CreateDecal(Rand(2,3), e\room\x-Rnd(197,199)*Cos(e\room\angle)*RoomScale, 1.0, e\room\z+(140.0*(i-3))*RoomScale,0,e\room\angle-90,Rnd(360)) +#; de\size = Rnd(0.8,0.85) : de\sizechange = 0.001 +#; Else +#; de.Decals = CreateDecal(Rand(2,3), e\room\x+(140.0*(i-3))*RoomScale, 1.0, e\room\z-Rnd(197,199)*Sin(e\room\angle)*RoomScale-Rnd(0.001,0.003),0,e\room\angle+90,Rnd(360)) +#; de\size = Rnd(0.8,0.85) : de\sizechange = 0.001 +#; de.Decals = CreateDecal(Rand(2,3), e\room\x+(140.0*(i-3))*RoomScale, 1.0, e\room\z-Rnd(197,199)*Sin(e\room\angle)*RoomScale-Rnd(0.001,0.003),0,e\room\angle-90,Rnd(360)) +#; de\size = Rnd(0.8,0.85) : de\sizechange = 0.001 +#; EndIf +#; de.Decals = CreateDecal(Rand(2,3), EntityX(e\room\NPC[0]\Collider)+Rnd(-2,2),Rnd(0.001,0.003),EntityZ(e\room\NPC[0]\Collider)+Rnd(-2,2),90,Rnd(360),0) +#; +#; Next +#; de\Size = Rnd(0.5,0.7) +#; ScaleSprite(de\obj, de\Size,de\Size) +#; +#; Curr096\State=5 +#; +#; RemoveNPC(e\room\NPC[0]) +#; e\room\NPC[0]=Null +#; +#; EndIf + #;[End Block] + # + #Curr096\Target = e\room\NPC[0] + # + #If e\EventState < 70*8 + #AnimateNPC(Curr096,472,520,0.25) + #PointEntity e\room\NPC[0]\Collider, Curr096\Collider + #ElseIf e\EventState >= 70*8 And e\EventState < 70*10 + #;Checking at which side the player is + #If EntityDistance(Collider,e\room\RoomDoors[0]\frameobj)554.5 + #e\EventState=70*10 + #Curr096\Frame = 677 + #SetNPCFrame(Curr096,Curr096\Frame) + #Curr096\State = 1 + #TurnEntity Curr096\Collider,0,180,0 + #MoveEntity Curr096\Collider,0,0,0.3 + #EndIf + #Else + #AnimateNPC(Curr096,556,590,0.25,False) + #If Curr096\Frame=>589.5 + #e\EventState=70*10 + #Curr096\Frame = 677 + #SetNPCFrame(Curr096,Curr096\Frame) + #Curr096\State = 1 + #TurnEntity Curr096\Collider,0,180,0 + #MoveEntity Curr096\Collider,0,0,0.3 + #EndIf + #EndIf + #PointEntity e\room\NPC[0]\Collider, Curr096\Collider + #ElseIf e\EventState >= 70*10 And e\EventState < 70*20 + #Curr096\State=Min(Max(1,Curr096\State),3) + #Curr096\State2=Max(Curr096\State2,70*12) + #If e\EventState-FPSfactor =< 70*15 Then ;walk to the doorway + #If e\EventState > 70*15 Then + #e\room\NPC[0]\State=14 + #e\room\NPC[0]\PathStatus = FindPath(e\room\NPC[0], EntityX(Curr096\Collider,True),0.4,EntityZ(Curr096\Collider,True)) + #e\room\NPC[0]\PathTimer=300 + #Else + #PointEntity e\room\NPC[0]\Collider, Curr096\Collider + #EndIf + #EndIf + #;If e\room\NPC[0]\PathStatus=0 Then + #If EntityVisible(e\room\NPC[0]\Collider,Curr096\Collider) + #e\room\RoomDoors[2]\open = False + #e\room\NPC[0]\State=13 + #PointEntity e\room\NPC[0]\obj, Curr096\Collider + #RotateEntity (e\room\NPC[0]\Collider, 0, CurveAngle(EntityYaw(e\room\NPC[0]\obj),EntityYaw(e\room\NPC[0]\Collider),30),0) + #EndIf + #Else + #If Curr096\State = 4 Then ;shoot at 096 when it starts attacking + #Curr096\LastSeen=1 + #e\room\NPC[0]\State = 2 + #PointEntity e\room\NPC[0]\obj, Curr096\Collider + #RotateEntity (e\room\NPC[0]\Collider, 0, CurveAngle(EntityYaw(e\room\NPC[0]\obj),EntityYaw(e\room\NPC[0]\Collider),30),0) + #If PlayerRoom = e\room Then LightBlink = (e\room\NPC[0]\Reload)+Rnd(0.5,2.0) + #Curr096\Target = e\room\NPC[0] + #Else + #If e\EventState>70*22 Then Curr096\State = 4 + #If e\room\NPC[0]\State=13 Then + #e\room\NPC[0]\State=14 + #e\room\NPC[0]\PathStatus = FindPath(e\room\NPC[0], EntityX(e\room\obj,True),0.4,EntityZ(e\room\obj,True)) + #e\room\NPC[0]\PathTimer=300 + #e\room\NPC[0]\Speed = e\room\NPC[0]\Speed*1.8 ;Making the guard walking a bit faster + #EndIf + #EndIf + #EndIf + # + #If AnimTime(Curr096\obj)>25 And AnimTime(Curr096\obj)<150 Then + #FreeSound_Strict e\Sound : e\Sound = 0 + #e\Sound=LoadSound_Strict("SFX\Character\Guard\096ServerRoom2.ogg") + #e\SoundCHN=PlaySound_Strict(e\Sound) + # + #Curr096\CurrSpeed = 0 + # + #For i = 0 To 6 + #If e\room\angle = 0 Or e\room\angle = 180 Then + #de.Decals = CreateDecal(Rand(2,3), e\room\x-Rnd(197,199)*Cos(e\room\angle)*RoomScale, 1.0, e\room\z+(140.0*(i-3))*RoomScale,0,e\room\angle+90,Rnd(360)) + #de\size = Rnd(0.8,0.85) : de\sizechange = 0.001 + #de.Decals = CreateDecal(Rand(2,3), e\room\x-Rnd(197,199)*Cos(e\room\angle)*RoomScale, 1.0, e\room\z+(140.0*(i-3))*RoomScale,0,e\room\angle-90,Rnd(360)) + #de\size = Rnd(0.8,0.85) : de\sizechange = 0.001 + #Else + #de.Decals = CreateDecal(Rand(2,3), e\room\x+(140.0*(i-3))*RoomScale, 1.0, e\room\z-Rnd(197,199)*Sin(e\room\angle)*RoomScale-Rnd(0.001,0.003),0,e\room\angle+90,Rnd(360)) + #de\size = Rnd(0.8,0.85) : de\sizechange = 0.001 + #de.Decals = CreateDecal(Rand(2,3), e\room\x+(140.0*(i-3))*RoomScale, 1.0, e\room\z-Rnd(197,199)*Sin(e\room\angle)*RoomScale-Rnd(0.001,0.003),0,e\room\angle-90,Rnd(360)) + #de\size = Rnd(0.8,0.85) : de\sizechange = 0.001 + #EndIf + #de.Decals = CreateDecal(Rand(2,3), EntityX(e\room\NPC[0]\Collider)+Rnd(-2,2),Rnd(0.001,0.003),EntityZ(e\room\NPC[0]\Collider)+Rnd(-2,2),90,Rnd(360),0) + # + #Next + #de\Size = Rnd(0.5,0.7) + #ScaleSprite(de\obj, de\Size,de\Size) + # + #Curr096\State=5 + #StopStream_Strict(Curr096\SoundChn) + #Curr096\SoundChn=0 + # + #RemoveNPC(e\room\NPC[0]) + #e\room\NPC[0]=Null + #EndIf + #Else + # + #If e\EventState >= 70*40 And e\EventState-FPSfactor < 70*40 Then ;open them again to let the player in + #e\room\RoomDoors[0]\locked=False + #e\room\RoomDoors[1]\locked=False + #UseDoor(e\room\RoomDoors[0],False) + #UseDoor(e\room\RoomDoors[1],False) + #FreeSound_Strict e\Sound : e\Sound = 0 + #e\room\RoomDoors[0]\locked=True + #e\room\RoomDoors[1]\locked=True + #EndIf + # + #If PlayerRoom = e\room Then + #If e\SoundCHN<>0 Then + #If ChannelPlaying(e\SoundCHN) Then + #LightBlink = Rnd(0.5,6.0) + #If Rand(50)=1 Then PlaySound2(IntroSFX(Rand(10,12)), Camera, e\room\obj, 8.0, Rnd(0.1,0.3)) + #EndIf + #EndIf + # + #If (e\room\angle = 0 Or e\room\angle = 180) Then ;lock the player inside + #If Abs(EntityX(Collider)-EntityX(e\room\obj,True))> 1.3 Then + #e\EventState = 70*50 + #e\Sound=0 + #EndIf + #Else + #If Abs(EntityZ(Collider)-EntityZ(e\room\obj,True))> 1.3 Then + #e\EventState = 70*50 + #e\Sound=0 + #EndIf + #EndIf + #EndIf + # + #EndIf + # + #ElseIf PlayerRoom = e\room + #temp = UpdateLever(e\room\Objects[1]) ;power switch + #x = UpdateLever(e\room\Objects[3]) ;fuel pump + #z = UpdateLever(e\room\Objects[5]) ;generator + # + #;fuel pump on + #If x Then + #e\EventState2 = Min(1.0, e\EventState2+FPSfactor/350) + # + #;generator on + #If z Then + #If e\Sound2=0 Then LoadEventSound(e,"SFX\General\GeneratorOn.ogg",1) + #e\EventState3 = Min(1.0, e\EventState3+FPSfactor/450) + #Else + #e\EventState3 = Min(0.0, e\EventState3-FPSfactor/450) + #EndIf + #Else + #e\EventState2 = Max(0, e\EventState2-FPSfactor/350) + #e\EventState3 = Max(0, e\EventState3-FPSfactor/450) + #EndIf + # + #If e\EventState2>0 Then e\SoundCHN=LoopSound2(RoomAmbience[8], e\SoundCHN, Camera, e\room\Objects[3], 5.0, e\EventState2*0.8) + #If e\EventState3>0 Then e\SoundCHN2=LoopSound2(e\Sound2, e\SoundCHN2, Camera, e\room\Objects[5], 6.0, e\EventState3) + # + #If temp=0 And x And z Then + #e\room\RoomDoors[0]\locked = False + #e\room\RoomDoors[1]\locked = False + #Else + #If Rand(200)<5 Then LightBlink = Rnd(0.5,1.0) + # + #If e\room\RoomDoors[0]\open Then + #e\room\RoomDoors[0]\locked = False + #UseDoor(e\room\RoomDoors[0],False) + #EndIf + #If e\room\RoomDoors[1]\open Then + #e\room\RoomDoors[1]\locked = False + #UseDoor(e\room\RoomDoors[1],False) + #EndIf + #e\room\RoomDoors[0]\locked=True + #e\room\RoomDoors[1]\locked=True + #EndIf + #EndIf + # + #;[End Block] + #Case "room2storage" + #;[Block] + #If PlayerRoom = e\room Then + #If e\EventState2 <= 0 Then + #e\room\RoomDoors[1]\locked = False + #e\room\RoomDoors[4]\locked = False + # + #If EntityDistance(Collider, Curr173\obj)<8.0 Or EntityDistance(Collider, Curr106\obj)<8.0 Then + #e\room\RoomDoors[1]\locked = True + #e\room\RoomDoors[4]\locked = True + #Else + #For n.NPCs = Each NPCs + #If n\NPCtype = NPCtypeMTF Then + #If EntityDistance(Collider, Curr173\obj)<8.0 Then + #e\room\RoomDoors[1]\locked = True + #e\room\RoomDoors[4]\locked = True + #Exit + #EndIf + #EndIf + #Next + #EndIf + #e\EventState2 = 70*5 + #Else + #e\EventState2 = e\EventState2 - FPSfactor + #EndIf + # + #LightVolume = TempLightVolume*0.5 + # + #TFormPoint EntityX(Collider),EntityY(Collider),EntityZ(Collider),0,e\room\obj + # + #temp = 0 + #If TFormedX()>730 Then + #GiveAchievement(Achv970) + # + #UpdateWorld() + #TFormPoint EntityX(Collider),EntityY(Collider),EntityZ(Collider),0,e\room\obj + # + #;1->3, 2->4 + #;3->0, 4->0 + #For i = 1 To 2 + #e\room\RoomDoors[i]\open = e\room\RoomDoors[i+2]\open + #e\room\RoomDoors[i]\openstate = e\room\RoomDoors[i+2]\openstate + #PositionEntity e\room\RoomDoors[i]\obj, EntityX(e\room\RoomDoors[i+2]\obj),EntityY(e\room\RoomDoors[i+2]\obj),EntityZ(e\room\RoomDoors[i+2]\obj) + #PositionEntity e\room\RoomDoors[i]\obj2, EntityX(e\room\RoomDoors[i+2]\obj2),EntityY(e\room\RoomDoors[i+2]\obj2),EntityZ(e\room\RoomDoors[i+2]\obj2) + # + #e\room\RoomDoors[i+2]\open = False + #e\room\RoomDoors[i+2]\openstate = 0 + #PositionEntity e\room\RoomDoors[i+2]\obj, EntityX(e\room\RoomDoors[0]\obj),EntityY(e\room\RoomDoors[0]\obj),EntityZ(e\room\RoomDoors[0]\obj) + #PositionEntity e\room\RoomDoors[i+2]\obj2, EntityX(e\room\RoomDoors[0]\obj2),EntityY(e\room\RoomDoors[0]\obj2),EntityZ(e\room\RoomDoors[0]\obj2) + #Next + # + #TFormPoint TFormedX()-1024, TFormedY(), TFormedZ(),e\room\obj,0 + #HideEntity Collider + #PositionEntity Collider, TFormedX(), EntityY(Collider), TFormedZ(), True + #ShowEntity Collider + #DebugLog "tformedx()>720" + #temp = True + # + #ElseIf TFormedX()<-730 + #GiveAchievement(Achv970) + # + #UpdateWorld() + #TFormPoint EntityX(Collider),EntityY(Collider),EntityZ(Collider),0,e\room\obj + # + #;3->1, 4->2 + #;1->0, 2->0 + #For i = 1 To 2 + #e\room\RoomDoors[i+2]\open = e\room\RoomDoors[i]\open + #e\room\RoomDoors[i+2]\openstate = e\room\RoomDoors[i]\openstate + #PositionEntity e\room\RoomDoors[i+2]\obj, EntityX(e\room\RoomDoors[i]\obj),EntityY(e\room\RoomDoors[i]\obj),EntityZ(e\room\RoomDoors[i]\obj) + #PositionEntity e\room\RoomDoors[i+2]\obj2, EntityX(e\room\RoomDoors[i]\obj2),EntityY(e\room\RoomDoors[i]\obj2),EntityZ(e\room\RoomDoors[i]\obj2) + # + #e\room\RoomDoors[i]\open = False + #e\room\RoomDoors[i]\openstate = 0 + #PositionEntity e\room\RoomDoors[i]\obj, EntityX(e\room\RoomDoors[0]\obj),EntityY(e\room\RoomDoors[0]\obj),EntityZ(e\room\RoomDoors[0]\obj) + #PositionEntity e\room\RoomDoors[i]\obj2, EntityX(e\room\RoomDoors[0]\obj2),EntityY(e\room\RoomDoors[0]\obj2),EntityZ(e\room\RoomDoors[0]\obj2) + #Next + # + #TFormPoint TFormedX()+1024, TFormedY(), TFormedZ(),e\room\obj,0 + #HideEntity Collider + #PositionEntity Collider, TFormedX(), EntityY(Collider), TFormedZ(), True + #ShowEntity Collider + # + #DebugLog "tformedx()<720" + # + #temp = True + #EndIf + # + #If temp = True Then + # + #e\EventState=e\EventState+1;Rand(1,2) + # + #For it.Items = Each Items + #If EntityDistance(it\collider,Collider)<5.0 Then + # + #TFormPoint EntityX(it\collider),EntityY(it\collider),EntityZ(it\collider),0,e\room\obj + #x = TFormedX() : y = TFormedY() : z = TFormedZ() + #If TFormedX()>264 Then + #TFormPoint x-1024,y,z,e\room\obj,0 + #PositionEntity it\collider, TFormedX(), TFormedY(), TFormedZ() + #ResetEntity it\collider + #ElseIf TFormedX()<-264 + #TFormPoint x+1024,y,z,e\room\obj,0 + #PositionEntity it\collider, TFormedX(), TFormedY(), TFormedZ() + #ResetEntity it\collider + #EndIf + # + #EndIf + #Next + # + #Select e\EventState + #Case 2 + #i = Rand(MaxItemAmount) + #If Inventory(i)<>Null Then RemoveItem(Inventory(i)) + #Case 5 + #Injuries = Injuries + 0.3 + #Case 10 + #de.Decals = CreateDecal(3, EntityX(e\room\obj)+Cos(e\room\angle-90)*760*RoomScale, 0.0005, EntityZ(e\room\obj)+Sin(e\room\angle-90)*760*RoomScale,90,Rnd(360),0) + #Case 14 + #For i = 0 To MaxItemAmount-1 + #If Inventory(i)<> Null Then + #If Inventory(i)\itemtemplate\tempname = "paper" Then + #RemoveItem(Inventory(i)) + #For itt.ItemTemplates = Each ItemTemplates + #If itt\tempname = "paper" And Rand(6)=1 Then + #Inventory(i) = CreateItem(itt\name, itt\tempname, 1,1,1) + #HideEntity Inventory(i)\collider + #Inventory(i)\Picked = True + #Exit + #EndIf + #Next + #Exit + #EndIf + #EndIf + #Next + #Case 18 + #TFormPoint -344,176, 272, e\room\obj,0 + #it.Items = CreateItem("Strange Note", "paper", TFormedX(), TFormedY(), TFormedZ()) + #EntityType(it\collider, HIT_ITEM) + #Case 25 + #e\room\NPC[0]=CreateNPC(NPCtypeD, EntityX(e\room\obj)+Cos(e\room\angle-90)*760*RoomScale, 0.35, EntityZ(e\room\obj)+Sin(e\room\angle-90)*760*RoomScale) + #RotateEntity e\room\NPC[0]\Collider, 0, e\room\angle-200, 0, True + #tex=LoadTexture("GFX\NPCs\corpse.jpg") + #e\room\NPC[0]\texture = "GFX\NPCs\corpse.jpg" + #EntityTexture e\room\NPC[0]\obj, tex + #FreeTexture tex + #SetAnimTime(e\room\NPC[0]\obj,80) + #e\room\NPC[0]\State=10 + #Case 30 + #i = Rand(0,MaxItemAmount-1) + #If Inventory(i)<>Null Then RemoveItem(Inventory(i)) + #Inventory(i) = CreateItem("Strange Note", "paper", 1,1,1) + #HideEntity Inventory(i)\collider + #Inventory(i)\Picked = True + #Case 35 + #For i = 0 To 3 + #de.Decals = CreateDecal(17, e\room\x+Rnd(-2,2), 700*RoomScale, e\room\z+Rnd(-2,2), 270, Rand(360), 0) + #de\Size = 0.05 : de\SizeChange = 0.0005 : EntityAlpha(de\obj, 0.8) : UpdateDecals + #Next + #Case 40 + #PlaySound_Strict(LoadTempSound("SFX\radio\franklin4.ogg")) + #Case 50 + #e\room\NPC[1]=CreateNPC(NPCtypeGuard, EntityX(e\room\obj)+Cos(e\room\angle+90)*600*RoomScale, 0.35, EntityZ(e\room\obj)+Sin(e\room\angle+90)*600*RoomScale) + #e\room\NPC[1]\State=7 + #Case 52 + #If e\room\NPC[1] <> Null Then + #RemoveNPC(e\room\NPC[1]) + #e\room\NPC[1]=Null + #EndIf + #Case 60 + #If (Not HalloweenTex) Then + #Local tex970 = LoadTexture_Strict("GFX\npcs\173h.pt", 1) + #EntityTexture Curr173\obj, tex970, 0, 0 + #FreeTexture tex970 + #EndIf + #End Select + # + #If Rand(10)=1 Then + #temp = Rand(0,2) + #PlaySound_Strict(AmbientSFX(temp, Rand(0,AmbientSFXAmount(temp)-1))) + #EndIf + #Else + #If e\room\NPC[0] <> Null Then + #If EntityDistance(Collider, e\room\NPC[0]\Collider)<3.0 Then + #If EntityInView(e\room\NPC[0]\obj, Camera) Then + #CurrCameraZoom = (Sin(Float(MilliSecs2())/20.0)+1.0)*15.0 + #HeartBeatVolume = Max(CurveValue(0.3, HeartBeatVolume, 2.0), HeartBeatVolume) + #HeartBeatRate = Max(HeartBeatRate, 120) + #EndIf + #EndIf + #EndIf + # + #If e\room\NPC[1] <> Null Then + #PointEntity e\room\NPC[1]\obj, Collider + #RotateEntity e\room\NPC[1]\Collider, 0, CurveAngle(EntityYaw(e\room\NPC[1]\obj),EntityYaw(e\room\NPC[1]\Collider),35),0 + #EndIf + # + #;If Abs(TFormedX())<264 Then + #For it.Items = Each Items + #If (it\Dropped=1 And Abs(TFormedX())<264) Or it\Dropped=-1 Then + #DebugLog "dropping/picking: "+it\Dropped+" - "+EntityX(it\collider)+", "+EntityY(it\collider)+", "+EntityZ(it\collider) + # + #TFormPoint EntityX(it\collider),EntityY(it\collider),EntityZ(it\collider),0,e\room\obj + #x = TFormedX() : y = TFormedY() : z = TFormedZ() + # + #If it\Dropped=1 Then + #For i = - 1 To 1 Step 2 + #TFormPoint x+1024*i,y,z,e\room\obj,0 + #it2.items = CreateItem(it\name, it\itemtemplate\tempname, TFormedX(), EntityY(it\collider), TFormedZ()) + #RotateEntity(it2\collider, EntityPitch(it\collider),EntityYaw(it\collider),0) + #EntityType(it2\collider, HIT_ITEM) + #Next + #Else + #For it2.items = Each Items + #If it2<>it And it2\dist < 15.0 Then + # + #TFormPoint EntityX(it2\collider),EntityY(it2\collider),EntityZ(it2\collider),0,e\room\obj + #DebugLog TFormedZ()+" - "+z + # + #If TFormedZ()=z Then RemoveItem(it2) : DebugLog "item removed" + #EndIf + #Next + #EndIf + # + #Exit + #EndIf + #Next + #;EndIf + #EndIf + # + #EndIf + # + # + #If e\EventState > 26 Then + #If Abs(EntityX(Collider)-e\room\x)<8.0 Then + #If Abs(EntityZ(Collider)-e\room\z)<8.0 Then + #If e\Sound = 0 Then + #e\Sound = LoadSound_Strict("SFX\SCP\970\Corpse.ogg") + #EndIf + #e\SoundCHN = LoopSound2(e\Sound, e\SoundCHN, Camera, e\room\NPC[0]\obj); + #If e\EventState < 30 Then + #LightVolume = TempLightVolume*0.4 + #ElseIf e\EventState > 60 + #AnimateNPC(e\room\NPC[0], 80, 61, -0.02, False) + # + #e\room\NPC[0]\DropSpeed = 0 + #y = CurveValue(1.5+Sin(Float(MilliSecs2())/20.0)*0.1,EntityY(e\room\NPC[0]\Collider),50.0) + # + #PositionEntity e\room\NPC[0]\Collider,EntityX(e\room\NPC[0]\Collider),y,EntityZ(e\room\NPC[0]\Collider) + #TurnEntity e\room\NPC[0]\Collider,0,0.1*FPSfactor,0 + #EndIf + #EndIf + # + #EndIf + #EndIf + # + # + #;[End Block] + #Case "room2test1074" + #;[Block] + # + #If PlayerRoom=e\room Then + #If e\Sound=0 Then e\Sound=LoadSound_Strict("SFX\music\420J.ogg") ;tell me if you can find a better alternative to this + # + #GiveAchievement(Achv1074) + #If (Wearing714=1) Or (WearingNightVision>0) Then + #Playable = True : e\EventState = 0 : e\EventState2 = 0 + #If EntityInView(e\room\Objects[0],Camera) And EntityVisible(e\room\Objects[0],Camera) Then GiveAchievement(Achv1074) + #EndIf + # + #;check if 714 is being used, and choose the right texture--------------- + #If (e\EventState3 < 1.0 And ((Wearing714=1) Or (WearingNightVision>0))) Then + #ForceAngle = 0.0 + #e\EventState3 = 1.0 + #If EntityInView(e\room\Objects[0],Camera) And EntityVisible(e\room\Objects[0],Camera) Then BlinkTimer = -2 : BlurTimer = 500 + #If e\SoundCHN <> 0 Then StopChannel e\SoundCHN : e\SoundCHN = 0 + #aa=GetSurfaceBrush(e\room\NonFreeAble[0]) + #BrushTexture aa, e\room\Textures[0], 0, 1 + #PaintSurface e\room\NonFreeAble[0],aa + #FreeBrush aa + #HeartBeatVolume = 0.0 + #EndIf + #If (e\EventState3 > 0.0 And (Not ((Wearing714=1) Or (WearingNightVision>0)))) Then + #e\EventState3 = 0.0 + #If EntityInView(e\room\Objects[0],Camera) And EntityVisible(e\room\Objects[0],Camera) Then BlinkTimer = -2 : BlurTimer = 500 + #aa=GetSurfaceBrush(e\room\NonFreeAble[0]) + #BrushTexture aa, e\room\Textures[1], 0, 1 + #PaintSurface e\room\NonFreeAble[0],aa + #FreeBrush aa + #EndIf + # + #;end with that------------ + # + # + #bb# = point_direction(EntityX(e\room\Objects[0],True),EntityZ(e\room\Objects[0],True),EntityX(Collider,True),EntityZ(Collider,True)) + #cc# = point_direction(EntityX(e\room\Objects[0],True),EntityZ(e\room\Objects[0],True),EntityX(e\room\Objects[1],True),EntityZ(e\room\Objects[1],True)) + # + # + #If EntityInView(e\room\Objects[0],Camera) And EntityVisible(e\room\Objects[0],Camera) And BlinkTimer > 0 And (Not (Wearing714=1)) And (Not (WearingNightVision>0)) And Abs(angleDist(bb,cc))<95.0 Then + #If e\EventState = 0.0 Then e\EventState = 1.0 + #; + #EndIf + #If e\EventState > 0.0 Then + #HeartBeatRate = 150 + #HeartBeatVolume = 0.5 + #If e\EventState = 1.0 Then e\SoundCHN = PlaySound_Strict(e\Sound) : ChannelVolume e\SoundCHN,1.0 + #;Player saw 1074: walk towards r\Objects[1] + #tempF# = point_direction(EntityX(Collider,True),EntityZ(Collider,True),EntityX(e\room\Objects[0],True),EntityZ(e\room\Objects[0],True)) + #tempF2# = EntityYaw(Collider) + #tempF3# = angleDist(tempF+90+Sin(WrapAngle(e\EventState/10)),tempF2) + #TurnEntity Collider, 0,tempF3/8,0,True + #If e\EventState < 100.0 Or e\EventState > 105.0 Then + #e\EventState = e\EventState + Min(FPSfactor,1.99) + #Else + #e\EventState2 = Min(e\EventState2+(0.01*Min(FPSfactor,1.99)),0.5) ;If e\EventState2<0.5 Then + #ForceMove = e\EventState2 + #Crouch = 0 + #If point_distance(EntityX(Collider,True),EntityZ(Collider,True),EntityX(e\room\Objects[1],True),EntityZ(e\room\Objects[1],True)) <= RoomScale*800.0 Then + #ForceAngle = point_direction(EntityX(Collider,True),EntityZ(Collider,True),EntityX(e\room\Objects[1],True),EntityZ(e\room\Objects[1],True))-tempF2+90.0 + #Else + #ForceAngle = point_direction(EntityX(Collider,True),EntityZ(Collider,True),EntityX(e\room\Objects[0],True),EntityZ(e\room\Objects[0],True))-tempF2+90.0 + #EndIf + #If point_distance(EntityX(Collider,True),EntityZ(Collider,True),EntityX(e\room\Objects[1],True),EntityZ(e\room\Objects[1],True)) < RoomScale*8.0 Then + #e\EventState = 106.0 + #Playable = False + #ForceMove = 0 + #ForceAngle = 0 + #e\EventState2 = 0 + #EndIf + #EndIf + # + #If (Not EntityVisible(e\room\Objects[0],Camera)) Then Playable=True : e\EventState = 0 : e\EventState2 = 0 + # + #Select Floor(e\EventState) + #Case 250.0 + #Msg = "Hey there!" + #MsgTimer = 70*5 + #Case 500.0 + #Msg = "If you're seeing this, post a bug report." + #MsgTimer = 70*5 + #Case 700.0 + #Msg = "Seriously, this SCP should not spawn." ; shouldn't --> should not why juan why --Mark + #MsgTimer = 70*5 + #Case 800.0 + #BlinkTimer = -2 + #BlurTimer = 800 + #Case 1200.0 + #Msg = "This event sucks." + #MsgTimer = 70*5 + #Case 1400.0 + #Msg = "Thanks a lot, Juan." + #MsgTimer = 70*5 + #Case 1500.0 + #DeathMSG = "God DAMMIT, Juan. What were you thinking?" + #Kill() + #End Select + #If e\EventState >= 2500.0 Then + #;BlinkTimer = -20 : LightBlink = 1.0 + #ChannelVolume e\SoundCHN,(Max(0,2600.0-e\EventState))/100.0 + #EndIf + #If PlayerRoom <> e\room Then + #;e\EventState = 2300.0 + #If PlayerRoom\RoomTemplate\Name = "pocketdimension" Then DeathMSG = "Subject D-9341 was captured and killed by SCP-106. Body was disposed of via incineration." + #Kill() + #Playable = True + #EndIf + #If KillTimer < 0 Then + #e\EventState = 2300.0 + #ForceAngle = 0.0 + #ForceMove = 0.0 + #If e\SoundCHN <> 0 Then StopChannel e\SoundCHN : e\SoundCHN = 0 + #Playable = True + #;FreeTexture r\Objects[2] + #;FreeTexture r\Objects[3] + #;FreeEntity r\Objects[0] + #;FreeEntity r\Objects[1] + #;FreeSound_Strict e\Sound + #;e\Sound = 0 + #EndIf + #user_camera_pitch = user_camera_pitch-((user_camera_pitch-10.0)/8) + #Else + #If e\SoundCHN <> 0 Then StopChannel e\SoundCHN : e\SoundCHN = 0 + #EndIf + # + #EndIf + #;[End Block] + #Case "room3door" + #;[Block] + #If PlayerRoom = e\room Then + #If EntityDistance(e\room\obj,Collider)<2.5 Then + #For do.doors = Each Doors + #If Abs(EntityX(do\obj,True)-EntityX(Collider))<2.0 Then + #If Abs(EntityZ(do\obj,True)-EntityZ(Collider))<2.0 Then + #If (Not EntityInView(do\obj,Camera)) Then + #If do\open Then + #DebugLog "%@@= \ {2E6C2=FD gi`h]c" + #do\open = False + #do\openstate = 0 + #BlurTimer = 100 + #CameraShake = 3.0 + #EndIf + # + #EndIf + #Exit + #EndIf + #EndIf + #Next + #RemoveEvent(e) + #EndIf + #EndIf + #;[End Block] + #Case "room3servers" + #;[Block] + #If PlayerRoom = e\room Then + #If e\EventState3=0 And Curr173\Idle = 0 Then + #If BlinkTimer < -10 Then + #temp = Rand(0,2) + #PositionEntity Curr173\Collider, EntityX(e\room\Objects[temp],True),EntityY(e\room\Objects[temp],True),EntityZ(e\room\Objects[temp],True) + #ResetEntity Curr173\Collider + #e\EventState3=1 + #EndIf + #EndIf + # + #If e\room\Objects[3]>0 Then + #If BlinkTimer<-8 And BlinkTimer >-12 Then + #PointEntity e\room\Objects[3], Camera + #RotateEntity(e\room\Objects[3], 0, EntityYaw(e\room\Objects[3],True),0, True) + #EndIf + #If e\EventState2 = 0 Then + #e\EventState = CurveValue(0, e\EventState, 15.0) + #If Rand(800)=1 Then e\EventState2 = 1 + #Else + #e\EventState = e\EventState+(FPSfactor*0.5) + #If e\EventState > 360 Then e\EventState = 0 + # + #If Rand(1200)=1 Then e\EventState2 = 0 + #EndIf + # + #PositionEntity e\room\Objects[3], EntityX(e\room\Objects[3],True), (-608.0*RoomScale)+0.05+Sin(e\EventState+270)*0.05, EntityZ(e\room\Objects[3],True), True + #EndIf + #EndIf + #;[End Block] + #Case "room3storage" + #;[Block] + #If PlayerRoom = e\room Then + #e\EventState2 = UpdateElevators(e\EventState2, e\room\RoomDoors[0], e\room\RoomDoors[1],e\room\Objects[0],e\room\Objects[1], e) + # + #e\EventState3 = UpdateElevators(e\EventState3, e\room\RoomDoors[2], e\room\RoomDoors[3],e\room\Objects[2],e\room\Objects[3], e) + # + #If EntityY(Collider)<-4600*RoomScale Then + # + #GiveAchievement(Achv939) + # + #ShouldPlay = 7 + # + #If e\room\NPC[0]=Null Or e\room\NPC[1]=Null Or e\room\NPC[2]=Null Then + #If QuickLoadPercent = -1 Then + #QuickLoadPercent = 0 + #QuickLoad_CurrEvent = e + #EndIf + #Else + #If e\EventState = 0 Then + #;Instance 1 + #PositionEntity(e\room\NPC[0]\Collider, EntityX(e\room\Objects[4],True),EntityY(e\room\Objects[4],True)+0.2,EntityZ(e\room\Objects[4],True)) + #ResetEntity e\room\NPC[0]\Collider + #e\room\NPC[0]\State = 2 + #e\room\NPC[0]\State2 = 5 + #e\room\NPC[0]\PrevState = 7 + #;Instance 2 + #PositionEntity(e\room\NPC[1]\Collider, EntityX(e\room\Objects[9],True),EntityY(e\room\Objects[9],True)+0.2,EntityZ(e\room\Objects[9],True)) + #ResetEntity e\room\NPC[1]\Collider + #e\room\NPC[1]\State = 2 + #e\room\NPC[1]\State2 = 10 + #e\room\NPC[1]\PrevState = 12 + #;Instance 3 + #PositionEntity(e\room\NPC[2]\Collider, EntityX(e\room\Objects[13],True),EntityY(e\room\Objects[13],True)+0.2,EntityZ(e\room\Objects[13],True)) + #ResetEntity e\room\NPC[2]\Collider + #e\room\NPC[2]\State = 2 + #e\room\NPC[2]\State2 = 14 + #e\room\NPC[2]\PrevState = 16 + #;Other + #e\EventState = 1 + #EndIf + # + #If e\room\RoomDoors[4]\open = False + #If UpdateLever(e\room\Levers[0]) + #e\room\RoomDoors[4]\open = True + #If e\Sound2 <> 0 Then FreeSound_Strict e\Sound2 : e\Sound2=0 + #e\Sound2 = LoadSound_Strict("SFX\Door\Door2Open1_dist.ogg") + #e\SoundCHN2 = PlaySound2(e\Sound2,Camera,e\room\RoomDoors[4]\obj,400) + #EndIf + #If UpdateLever(e\room\Levers[1]) + #e\room\RoomDoors[4]\open = True + #If e\Sound2 <> 0 Then FreeSound_Strict e\Sound2 : e\Sound2=0 + #e\Sound2 = LoadSound_Strict("SFX\Door\Door2Open1_dist.ogg") + #e\SoundCHN2 = PlaySound2(e\Sound2,Camera,e\room\RoomDoors[4]\obj,400) + #EndIf + #EndIf + # + #UpdateLever(e\room\Levers[0],e\room\RoomDoors[4]\open) + #UpdateLever(e\room\Levers[1],e\room\RoomDoors[4]\open) + # + #e\room\NPC[0]\IgnorePlayer = False + #e\room\NPC[2]\IgnorePlayer = False + # + #CurrTrigger$ = CheckTriggers() + # + #Select CurrTrigger$ + #Case "939-1_fix" + #e\room\NPC[0]\IgnorePlayer = True + #Case "939-3_fix" + #e\room\NPC[2]\IgnorePlayer = True + #End Select + # + #If ChannelPlaying(e\SoundCHN2) + #UpdateSoundOrigin(e\SoundCHN2,Camera,e\room\RoomDoors[4]\obj,400) + #EndIf + # + #PlayerFallingPickDistance = 0.0 + # + #If EntityY(Collider)<-6400*RoomScale And KillTimer >= 0 And FallTimer >= 0 Then + #DeathMSG="" + #PlaySound_Strict LoadTempSound("SFX\Room\PocketDimension\Impact.ogg") + #KillTimer=-1.0 + #EndIf + #EndIf + #Else + #e\EventState = 0 + #If e\room\NPC[0]<>Null Then e\room\NPC[0]\State = 66 + #If e\room\NPC[1]<>Null Then e\room\NPC[1]\State = 66 + #If e\room\NPC[2]<>Null Then e\room\NPC[2]\State = 66 + #EndIf + #Else + #If e\room\NPC[0]<>Null Then e\room\NPC[0]\State = 66 + #If e\room\NPC[1]<>Null Then e\room\NPC[1]\State = 66 + #If e\room\NPC[2]<>Null Then e\room\NPC[2]\State = 66 + #EndIf + #;[End Block] + #Case "room3tunnel" + #;[Block] + #If e\EventState = 0 Then + #e\room\NPC[0]=CreateNPC(NPCtypeGuard, EntityX(e\room\Objects[0],True), EntityY(e\room\Objects[0],True)+0.5, EntityZ(e\room\Objects[0],True)) + #PointEntity e\room\NPC[0]\Collider, e\room\obj + #RotateEntity e\room\NPC[0]\Collider, 0, EntityYaw(e\room\NPC[0]\Collider)+Rnd(-20,20),0, True + #SetNPCFrame (e\room\NPC[0], 288) + #e\room\NPC[0]\State = 8 + # + #e\EventState = 1 + #RemoveEvent(e) + #EndIf + #;[End Block] + #Case "room4" + #;[Block] + #If e\EventState < MilliSecs2() Then + #If PlayerRoom <> e\room Then + #If Distance(EntityX(Collider),EntityZ(Collider),EntityX(e\room\obj),EntityZ(e\room\obj))<16.0 Then + #For n.NPCs = Each NPCs + #If n\NPCtype = NPCtype049 Then + #If n\State = 2 And EntityDistance(Collider,n\Collider)>16.0 Then + #TFormVector(368, 528, 176, e\room\obj, 0) + #PositionEntity n\Collider, EntityX(e\room\obj)+TFormedX(), TFormedY(), EntityZ(e\room\obj)+TFormedZ() + #DebugLog TFormedX()+", "+ TFormedY()+", "+ TFormedZ() + #ResetEntity n\Collider + #n\PathStatus = 0 + #n\State = 4 + #n\State2 = 0 + #n\State3 = 0 + #RemoveEvent(e) + #EndIf + #Exit + #EndIf + #Next + #EndIf + #EndIf + #If e<>Null Then e\EventState = MilliSecs2()+5000 + #EndIf + #;[End Block] + #Case "room012" + #;[Block] + #If PlayerRoom = e\room Then + # + #If e\EventState=0 Then + #If EntityDistance(Collider, e\room\RoomDoors[0]\obj)<2.5 And RemoteDoorOn Then + #GiveAchievement(Achv012) + #PlaySound_Strict HorrorSFX(7) + #PlaySound2 (LeverSFX,Camera,e\room\RoomDoors[0]\obj) + #e\EventState=1 + #e\room\RoomDoors[0]\locked = False + #UseDoor(e\room\RoomDoors[0],False) + #e\room\RoomDoors[0]\locked = True + #EndIf + #Else + # + #If e\Sound=0 Then LoadEventSound(e,"SFX\Music\012Golgotha.ogg") + #e\SoundCHN = LoopSound2(e\Sound, e\SoundCHN, Camera, e\room\Objects[3], 5.0) + # + #If e\Sound2=0 Then LoadEventSound(e,"SFX\Music\012.ogg",1) + # + #If e\EventState<90 Then e\EventState=CurveValue(90,e\EventState,500) + #PositionEntity e\room\Objects[2], EntityX(e\room\Objects[2],True),(-130-448*Sin(e\EventState))*RoomScale,EntityZ(e\room\Objects[2],True),True + # + #If e\EventState2 > 0 And e\EventState2 < 200 Then + #e\EventState2 = e\EventState2 + FPSfactor + #RotateEntity(e\room\Objects[1], CurveValue(85, EntityPitch(e\room\Objects[1]), 5), EntityYaw(e\room\Objects[1]), 0) + #Else + #e\EventState2 = e\EventState2 + FPSfactor + #If e\EventState2<250 Then + #ShowEntity e\room\Objects[3] + #Else + #HideEntity e\room\Objects[3] + #If e\EventState2>300 Then e\EventState2=200 + #EndIf + #EndIf + # + #If Wearing714=False And WearingGasMask<3 And WearingHazmat<3 Then + #;temp = False + #If EntityVisible(e\room\Objects[2],Camera) Then + #;012 not visible, walk to the door + # + # + #;DebugLog "WHERE IS IT?!" + #e\SoundCHN2 = LoopSound2(e\Sound2, e\SoundCHN2, Camera, e\room\Objects[3], 10, e\EventState3/(86.0*70.0)) + # + #pvt% = CreatePivot() + #PositionEntity pvt, EntityX(Camera), EntityY(e\room\Objects[2],True)-0.05, EntityZ(Camera) + #PointEntity(pvt, e\room\Objects[2]) + #RotateEntity(Collider, EntityPitch(Collider), CurveAngle(EntityYaw(pvt), EntityYaw(Collider), 80-(e\EventState3/200.0)), 0) + # + #TurnEntity(pvt, 90, 0, 0) + #user_camera_pitch = CurveAngle(EntityPitch(pvt)+25, user_camera_pitch + 90.0, 80-(e\EventState3/200.0)) + #user_camera_pitch=user_camera_pitch-90 + # + #dist = Distance(EntityX(Collider),EntityZ(Collider),EntityX(e\room\Objects[2],True),EntityZ(e\room\Objects[2],True)) + # + #HeartBeatRate = 150 + #HeartBeatVolume = Max(3.0-dist,0.0)/3.0 + #BlurVolume = Max((2.0-dist)*(e\EventState3/800.0)*(Sin(Float(MilliSecs2()) / 20.0 + 1.0)),BlurVolume) + #CurrCameraZoom = Max(CurrCameraZoom, (Sin(Float(MilliSecs2()) / 20.0)+1.0)*8.0*Max((3.0-dist),0.0)) + # + #If BreathCHN <> 0 Then + #If ChannelPlaying(BreathCHN) Then StopChannel(BreathCHN) + #EndIf + # + #If dist < 0.6 Then + #e\EventState3=Min(e\EventState3+FPSfactor,86*70) + #If e\EventState3>70 And e\EventState3-FPSfactor=<70 Then + #PlaySound_Strict LoadTempSound("SFX\SCP\012\Speech1.ogg") + #ElseIf e\EventState3>13*70 And e\EventState3-FPSfactor=<13*70 + #Msg="You start pushing your nails into your wrist, drawing blood." + #MsgTimer = 7*70 + #Injuries=Injuries+0.5 + #PlaySound_Strict LoadTempSound("SFX\SCP\012\Speech2.ogg") + #ElseIf e\EventState3>31*70 And e\EventState3-FPSfactor=<31*70 + #tex = LoadTexture_Strict("GFX\map\scp-012_1.jpg") + #EntityTexture (e\room\Objects[4], tex,0,1) + #FreeTexture tex + # + #Msg="You tear open your left wrist and start writing on the composition with your blood." + #MsgTimer = 7*70 + #Injuries=Max(Injuries,1.5) + #PlaySound_Strict LoadTempSound("SFX\SCP\012\Speech"+Rand(3,4)+".ogg") + #ElseIf e\EventState3>49*70 And e\EventState3-FPSfactor=<49*70 + #Msg="You push your fingers deeper into the wound." + #MsgTimer = 8*70 + #Injuries=Injuries+0.3 + #PlaySound_Strict LoadTempSound("SFX\SCP\012\Speech5.ogg") + #ElseIf e\EventState3>63*70 And e\EventState3-FPSfactor=<63*70 + #tex = LoadTexture_Strict("GFX\map\scp-012_2.jpg") + #EntityTexture (e\room\Objects[4], tex,0,1) + #FreeTexture tex + # + #Injuries=Injuries+0.5 + #PlaySound_Strict LoadTempSound("SFX\SCP\012\Speech6.ogg") + #ElseIf e\EventState3>74*70 And e\EventState3-FPSfactor=<74*70 + #tex = LoadTexture_Strict("GFX\map\scp-012_3.jpg") + #EntityTexture (e\room\Objects[4], tex,0,1) + #FreeTexture tex + # + #Msg="You rip the wound wide open. Grabbing scoops of blood pouring out." + #MsgTimer = 7*70 + #Injuries=Injuries+0.8 + #PlaySound_Strict LoadTempSound("SFX\SCP\012\Speech7.ogg") + #Crouch = True + # + #de.Decals = CreateDecal(17, EntityX(Collider), -768*RoomScale+0.01, EntityZ(Collider),90,Rnd(360),0) + #de\Size = 0.1 : de\maxsize = 0.45 : de\sizechange = 0.0002 : UpdateDecals() + #ElseIf e\EventState3>85*70 And e\EventState3-FPSfactor=<85*70 + #DeathMSG = "Subject D-9341 found in a pool of blood next to SCP-012. Subject seems to have ripped open his wrists and written three extra " + #DeathMSG = DeathMSG + "lines to the composition before dying of blood loss." + #Kill() + #EndIf + # + #RotateEntity(Collider, EntityPitch(Collider), CurveAngle(EntityYaw(Collider)+Sin(e\EventState3*(e\EventState3/2000))*(e\EventState3/300), EntityYaw(Collider), 80), 0) + # + #Else + #angle = WrapAngle(EntityYaw(pvt)-EntityYaw(Collider)) + #If angle<40.0 Then + #ForceMove = (40.0-angle)*0.02 + #ElseIf angle > 310.0 + #ForceMove = (40.0-Abs(360.0-angle))*0.02 + #EndIf + #EndIf + # + #FreeEntity pvt + #Else + # + #; If EntityY(Collider)=-768.0*RoomScale Then + #If (Distance(EntityX(Collider), EntityZ(Collider), EntityX(e\room\RoomDoors[0]\frameobj), EntityZ(e\room\RoomDoors[0]\frameobj))<4.5) And EntityY(Collider)<-2.5 Then + #pvt% = CreatePivot() + #PositionEntity pvt, EntityX(Camera), EntityY(Collider), EntityZ(Camera) + #PointEntity(pvt, e\room\RoomDoors[0]\frameobj) + #;TurnEntity(pvt, 90, 0, 0) + #user_camera_pitch = CurveAngle(90, user_camera_pitch+90, 100) + #user_camera_pitch=user_camera_pitch-90 + #RotateEntity(Collider, EntityPitch(Collider), CurveAngle(EntityYaw(pvt), EntityYaw(Collider), 150), 0) + # + #angle = WrapAngle(EntityYaw(pvt)-EntityYaw(Collider)) + #If angle<40.0 Then + #ForceMove = (40.0-angle)*0.008 + #ElseIf angle > 310.0 + #ForceMove = (40.0-Abs(360.0-angle))*0.008 + #EndIf + #FreeEntity pvt + # + #EndIf + #DebugLog Distance(EntityX(Collider), EntityZ(Collider), EntityX(e\room\RoomDoors[0]\frameobj), EntityZ(e\room\RoomDoors[0]\frameobj)) + #DebugLog EntityY(Collider) + #EndIf + # + #EndIf + # + #EndIf + #EndIf + #;[End Block] + #Case "room035" + #;[Block] + #If PlayerRoom = e\room Then + #;eventstate2 = has 035 told the code to the storage room (true/false) + #;eventstate3 = has the player opened the gas valves (0=no, 035*70 the host has died) + # + #If e\EventState = 0 Then + #If EntityDistance(Collider, e\room\Objects[3])<2 Then + #n.NPCs = CreateNPC(NPCtypeD, EntityX(e\room\Objects[4],True),0.5,EntityZ(e\room\Objects[4],True)) + # + #n\texture = "GFX\NPCs\035victim.jpg" + #n\Model = "GFX\NPCs\035.b3d" + #HideEntity n\obj + # + #SetAnimTime(n\obj, 501) + #n\Frame = 501 + # + #n\State = 6 + # + #e\EventState=1 + #EndIf + # + #ElseIf e\EventState > 0 + #If e\room\NPC[0]=Null Then + #For n.NPCs = Each NPCs + #If n\texture = "GFX\NPCs\035victim.jpg" Then + #e\room\NPC[0]=n + # + #temp = e\room\NPC[0]\Frame + # + #FreeEntity e\room\NPC[0]\obj + #e\room\NPC[0]\obj = LoadAnimMesh_Strict("GFX\NPCs\035.b3d") + #x = 0.5 / MeshWidth(e\room\NPC[0]\obj) + #e\room\NPC[0]\ModelScaleX = x + #e\room\NPC[0]\ModelScaleY = x + #e\room\NPC[0]\ModelScaleZ = x + #ScaleEntity e\room\NPC[0]\obj, x,x,x + #SetAnimTime(e\room\NPC[0]\obj, temp) + #ShowEntity e\room\NPC[0]\obj + # + #RotateEntity n\Collider, 0, e\room\angle+270, 0, True + # + #Exit + #EndIf + #Next + #EndIf + # + #If e\room\NPC[0]\SoundChn <> 0 Then + #If ChannelPlaying(e\room\NPC[0]\SoundChn) Then + #e\room\NPC[0]\SoundChn=LoopSound2(e\room\NPC[0]\Sound, e\room\NPC[0]\SoundChn, Camera, e\room\obj, 6.0) + #EndIf + #EndIf + # + #If e\EventState=1 Then + #If EntityDistance(Collider, e\room\Objects[3])<1.2 + #If EntityInView(e\room\NPC[0]\obj, Camera) Then + #GiveAchievement(Achv035) + #PlaySound_Strict(LoadTempSound("SFX\SCP\035\GetUp.ogg")) + #e\EventState = 1.5 + #EndIf + #EndIf + #Else + # + #If e\room\RoomDoors[3]\open Then e\EventState2 = Max(e\EventState2, 1) + # + #;the door is closed + #If UpdateLever(e\room\Levers[0],(e\EventState2=20)) = 0 Then + #;the gas valves are open + #temp = UpdateLever(e\room\Levers[1],False) + #If temp Or (e\EventState3>25*70 And e\EventState3<50*70) Then + #If temp Then + #PositionEntity(e\room\Objects[5], EntityX(e\room\Objects[5],True), 424.0*RoomScale, EntityZ(e\room\Objects[5],True),True) + #PositionEntity(e\room\Objects[6], EntityX(e\room\Objects[6],True), 424.0*RoomScale, EntityZ(e\room\Objects[6],True),True) + #Else + #PositionEntity(e\room\Objects[5], EntityX(e\room\Objects[5],True), 10, EntityZ(e\room\Objects[5],True),True) + #PositionEntity(e\room\Objects[6], EntityX(e\room\Objects[6],True), 10, EntityZ(e\room\Objects[6],True),True) + # + #EndIf + # + #If e\EventState3 >-30*70 Then + #e\EventState3=Abs(e\EventState3)+FPSfactor + #If e\EventState3 > 1 And e\EventState3-FPSfactor=<1 Then + #e\room\NPC[0]\State = 0 + #If e\room\NPC[0]\Sound<>0 Then FreeSound_Strict(e\room\NPC[0]\Sound) : e\room\NPC[0]\Sound = 0 + #e\room\NPC[0]\Sound = LoadSound_Strict("SFX\SCP\035\Gased1.ogg") + #e\room\NPC[0]\SoundChn = PlaySound_Strict(e\room\NPC[0]\Sound) + #ElseIf e\EventState3>15*70 And e\EventState3<25*70 + #If e\EventState3-FPSfactor=<15*70 Then + #If e\room\NPC[0]\Sound<>0 Then FreeSound_Strict(e\room\NPC[0]\Sound) : e\room\NPC[0]\Sound = 0 + #e\room\NPC[0]\Sound = LoadSound_Strict("SFX\SCP\035\Gased2.ogg") + #e\room\NPC[0]\SoundChn = PlaySound_Strict(e\room\NPC[0]\Sound) + #SetNPCFrame( e\room\NPC[0],553) + #EndIf + #e\room\NPC[0]\State = 6 + # + #AnimateNPC(e\room\NPC[0], 553, 529, -0.12, False) + #ElseIf e\EventState3>25*70 And e\EventState3<35*70 + #e\room\NPC[0]\State = 6 + #AnimateNPC(e\room\NPC[0], 529, 524, -0.08, False) + #ElseIf e\EventState3>35*70 + #If e\room\NPC[0]\State = 6 Then + #Sanity = -150*Sin(AnimTime(e\room\NPC[0]\obj)-524)*9 + #AnimateNPC(e\room\NPC[0], 524, 553, 0.08, False) + #If e\room\NPC[0]\Frame=553 Then e\room\NPC[0]\State = 0 + #EndIf + # + #If e\EventState3-FPSfactor=<35*70 Then + #If e\room\NPC[0]\Sound<>0 Then FreeSound_Strict(e\room\NPC[0]\Sound) : e\room\NPC[0]\Sound = 0 + #e\room\NPC[0]\Sound = LoadSound_Strict("SFX\SCP\035\GasedKilled1.ogg") + #e\room\NPC[0]\SoundChn = PlaySound_Strict(e\room\NPC[0]\Sound) + #PlaySound_Strict(LoadTempSound("SFX\SCP\035\KilledGetUp.ogg")) + #e\EventState = 60*70 + #EndIf + #EndIf + #EndIf + #Else ;gas valves closed + # + #If e\room\NPC[0]\State = 6 Then + #If e\room\NPC[0]\Frame>=501 And e\room\NPC[0]\Frame<=523 Then + #e\room\NPC[0]\Frame = Animate2(e\room\NPC[0]\obj, AnimTime(e\room\NPC[0]\obj), 501, 523, 0.08, False) + #If e\room\NPC[0]\Frame=523 Then e\room\NPC[0]\State = 0 + #EndIf + # + #If e\room\NPC[0]\Frame>=524 And e\room\NPC[0]\Frame<=553 Then + #e\room\NPC[0]\Frame = Animate2(e\room\NPC[0]\obj, AnimTime(e\room\NPC[0]\obj), 524, 553, 0.08, False) + #If e\room\NPC[0]\Frame=553 Then e\room\NPC[0]\State = 0 + #EndIf + #EndIf + # + #PositionEntity(e\room\Objects[5], EntityX(e\room\Objects[5],True), 10, EntityZ(e\room\Objects[5],True),True) + #PositionEntity(e\room\Objects[6], EntityX(e\room\Objects[6],True), 10, EntityZ(e\room\Objects[6],True),True) + # + #If e\room\NPC[0]\State = 0 Then + #PointEntity e\room\NPC[0]\obj, Collider + #RotateEntity e\room\NPC[0]\Collider, 0, CurveAngle(EntityYaw(e\room\NPC[0]\obj), EntityYaw(e\room\NPC[0]\Collider), 15.0), 0 + # + #If Rand(500)=1 Then + #If EntityDistance(e\room\NPC[0]\Collider, e\room\Objects[4])>2 Then + #e\room\NPC[0]\State2 = 1 + #Else + #e\room\NPC[0]\State2 = 0 + #EndIf + #e\room\NPC[0]\State = 1 + #EndIf + #ElseIf e\room\NPC[0]\State = 1 + #If e\room\NPC[0]\State2 = 1 Then + #PointEntity e\room\NPC[0]\obj, e\room\Objects[4] + #If EntityDistance(e\room\NPC[0]\Collider, e\room\Objects[4])<0.2 Then e\room\NPC[0]\State = 0 + #Else + #RotateEntity e\room\NPC[0]\obj, 0, e\room\angle-180, 0, True + #If EntityDistance(e\room\NPC[0]\Collider, e\room\Objects[4])>2 Then e\room\NPC[0]\State = 0 + #EndIf + # + #RotateEntity e\room\NPC[0]\Collider, 0, CurveAngle(EntityYaw(e\room\NPC[0]\obj), EntityYaw(e\room\NPC[0]\Collider), 15.0), 0 + # + #EndIf + # + #If e\EventState3 > 0 Then + #e\EventState3=-e\EventState3 + #If e\EventState3<-35*70 Then ;the host is dead + #If e\room\NPC[0]\Sound<>0 Then FreeSound_Strict(e\room\NPC[0]\Sound) : e\room\NPC[0]\Sound = 0 + #e\room\NPC[0]\Sound = LoadSound_Strict("SFX\SCP\035\GasedKilled2.ogg") + #e\room\NPC[0]\SoundChn = PlaySound_Strict(e\room\NPC[0]\Sound) + #e\EventState = 60*70 + #Else + #If e\room\NPC[0]\Sound<>0 Then FreeSound_Strict(e\room\NPC[0]\Sound) : e\room\NPC[0]\Sound = 0 + #If e\EventState3<-20*70 Then + #e\room\NPC[0]\Sound = LoadSound_Strict("SFX\SCP\035\GasedStop2.ogg") + #Else + #e\EventState3=-21*70 + #e\room\NPC[0]\Sound = LoadSound_Strict("SFX\SCP\035\GasedStop1.ogg") + #EndIf + # + #e\room\NPC[0]\SoundChn = PlaySound_Strict(e\room\NPC[0]\Sound) + #e\EventState = 61*70 + #EndIf + #Else + # + #e\EventState = e\EventState+FPSfactor + #If e\EventState > 4*70 And e\EventState-FPSfactor =<4*70 Then + #If e\room\NPC[0]\Sound<>0 Then FreeSound_Strict(e\room\NPC[0]\Sound) : e\room\NPC[0]\Sound = 0 + #e\room\NPC[0]\Sound = LoadSound_Strict("SFX\SCP\035\Help1.ogg") + #e\room\NPC[0]\SoundChn = PlaySound_Strict(e\room\NPC[0]\Sound) + #e\EventState = 10*70 + #ElseIf e\EventState > 20*70 And e\EventState-FPSfactor =<20*70 + #If e\room\NPC[0]\Sound<>0 Then FreeSound_Strict(e\room\NPC[0]\Sound) : e\room\NPC[0]\Sound = 0 + #e\room\NPC[0]\Sound = LoadSound_Strict("SFX\SCP\035\Help2.ogg") + #e\room\NPC[0]\SoundChn = PlaySound_Strict(e\room\NPC[0]\Sound) + #ElseIf e\EventState > 40*70 And e\EventState-FPSfactor =<40*70 + #If e\room\NPC[0]\Sound<>0 Then FreeSound_Strict(e\room\NPC[0]\Sound) : e\room\NPC[0]\Sound = 0 + #e\room\NPC[0]\Sound = LoadSound_Strict("SFX\SCP\035\Idle1.ogg") + #e\room\NPC[0]\SoundChn = PlaySound_Strict(e\room\NPC[0]\Sound) + #ElseIf e\EventState > 50*70 And e\EventState-FPSfactor =<50*70 + #If e\room\NPC[0]\Sound<>0 Then FreeSound_Strict(e\room\NPC[0]\Sound) : e\room\NPC[0]\Sound = 0 + #e\room\NPC[0]\Sound = LoadSound_Strict("SFX\SCP\035\Idle2.ogg") + #e\room\NPC[0]\SoundChn = PlaySound_Strict(e\room\NPC[0]\Sound) + #ElseIf e\EventState > 80*70 And e\EventState-FPSfactor =<80*70 + #If e\EventState2 Then ;skip the closet part if player has already opened it + #e\EventState = 130*70 + #Else + #If e\EventState3<-30*70 Then ;the host is dead + #If e\room\NPC[0]\Sound<>0 Then FreeSound_Strict(e\room\NPC[0]\Sound) : e\room\NPC[0]\Sound = 0 + #e\room\NPC[0]\Sound = LoadSound_Strict("SFX\SCP\035\GasedCloset.ogg") + #e\room\NPC[0]\SoundChn = PlaySound_Strict(e\room\NPC[0]\Sound) + #ElseIf e\EventState3 = 0 ;the gas valves haven't been opened + #If e\room\NPC[0]\Sound<>0 Then FreeSound_Strict(e\room\NPC[0]\Sound) : e\room\NPC[0]\Sound = 0 + #e\room\NPC[0]\Sound = LoadSound_Strict("SFX\SCP\035\Closet1.ogg") + #e\room\NPC[0]\SoundChn = PlaySound_Strict(e\room\NPC[0]\Sound) + #Else ;gas valves have been opened but 035 isn't dead + #If e\room\NPC[0]\Sound<>0 Then FreeSound_Strict(e\room\NPC[0]\Sound) : e\room\NPC[0]\Sound = 0 + #e\room\NPC[0]\Sound = LoadSound_Strict("SFX\SCP\035\GasedCloset.ogg") + #e\room\NPC[0]\SoundChn = PlaySound_Strict(e\room\NPC[0]\Sound) + #EndIf + #EndIf + #ElseIf e\EventState > 80*70 + #If e\EventState2 Then e\EventState = Max(e\EventState,100*70) + #If e\EventState>110*70 And e\EventState-FPSfactor =<110*70 Then + #If e\EventState2 Then + #If e\room\NPC[0]\Sound<>0 Then FreeSound_Strict(e\room\NPC[0]\Sound) : e\room\NPC[0]\Sound = 0 + #e\room\NPC[0]\Sound = LoadSound_Strict("SFX\SCP\035\Closet2.ogg") + #e\room\NPC[0]\SoundChn = PlaySound_Strict(e\room\NPC[0]\Sound) + #e\EventState = 130*70 + #Else + #If e\room\NPC[0]\Sound<>0 Then FreeSound_Strict(e\room\NPC[0]\Sound) : e\room\NPC[0]\Sound = 0 + #e\room\NPC[0]\Sound = LoadSound_Strict("SFX\SCP\035\Idle3.ogg") + #e\room\NPC[0]\SoundChn = PlaySound_Strict(e\room\NPC[0]\Sound) + #EndIf + #ElseIf e\EventState>125*70 And e\EventState-FPSfactor =<125*70 + #If e\EventState2 Then + #If e\room\NPC[0]\Sound<>0 Then FreeSound_Strict(e\room\NPC[0]\Sound) : e\room\NPC[0]\Sound = 0 + #e\room\NPC[0]\Sound = LoadSound_Strict("SFX\SCP\035\Closet2.ogg") + #e\room\NPC[0]\SoundChn = PlaySound_Strict(e\room\NPC[0]\Sound) + #Else + #If e\room\NPC[0]\Sound<>0 Then FreeSound_Strict(e\room\NPC[0]\Sound) : e\room\NPC[0]\Sound = 0 + #e\room\NPC[0]\Sound = LoadSound_Strict("SFX\SCP\035\Idle4.ogg") + #e\room\NPC[0]\SoundChn = PlaySound_Strict(e\room\NPC[0]\Sound) + #EndIf + #ElseIf e\EventState>150*70 And e\EventState-FPSfactor =<150*70 + #If e\room\NPC[0]\Sound<>0 Then FreeSound_Strict(e\room\NPC[0]\Sound) : e\room\NPC[0]\Sound = 0 + #e\room\NPC[0]\Sound = LoadSound_Strict("SFX\SCP\035\Idle5.ogg") + #e\room\NPC[0]\SoundChn = PlaySound_Strict(e\room\NPC[0]\Sound) + #ElseIf e\EventState>200*70 And e\EventState-FPSfactor =<200*70 + #If e\room\NPC[0]\Sound<>0 Then FreeSound_Strict(e\room\NPC[0]\Sound) : e\room\NPC[0]\Sound = 0 + #e\room\NPC[0]\Sound = LoadSound_Strict("SFX\SCP\035\Idle6.ogg") + #e\room\NPC[0]\SoundChn = PlaySound_Strict(e\room\NPC[0]\Sound) + # + #EndIf + #EndIf + # + #EndIf + # + #EndIf + # + #Else ;the player has opened the door + #If e\EventState2 < 10 Then + #e\room\RoomDoors[2]\open = False + #e\room\RoomDoors[2]\locked = True + # + #If e\room\RoomDoors[1]\open = False Then + #e\room\RoomDoors[0]\locked = False + #e\room\RoomDoors[1]\locked = False + #UseDoor(e\room\RoomDoors[1]) + #e\room\RoomDoors[0]\locked = True + #e\room\RoomDoors[1]\locked = True + # + #EndIf + # + #If e\EventState3=0 Then + #If e\room\NPC[0]\Sound<>0 Then FreeSound_Strict(e\room\NPC[0]\Sound) : e\room\NPC[0]\Sound = 0 + #e\room\NPC[0]\Sound = LoadSound_Strict("SFX\SCP\035\Escape.ogg") + #e\room\NPC[0]\SoundChn = PlaySound_Strict(e\room\NPC[0]\Sound) + #ElseIf Abs(e\EventState3)>35*70 + #If e\room\NPC[0]\Sound<>0 Then FreeSound_Strict(e\room\NPC[0]\Sound) : e\room\NPC[0]\Sound = 0 + #e\room\NPC[0]\Sound = LoadSound_Strict("SFX\SCP\035\KilledEscape.ogg") + #e\room\NPC[0]\SoundChn = PlaySound_Strict(e\room\NPC[0]\Sound) + #Else + #If e\room\NPC[0]\Sound<>0 Then FreeSound_Strict(e\room\NPC[0]\Sound) : e\room\NPC[0]\Sound = 0 + #e\room\NPC[0]\Sound = LoadSound_Strict("SFX\SCP\035\GasedEscape.ogg") + #e\room\NPC[0]\SoundChn = PlaySound_Strict(e\room\NPC[0]\Sound) + #EndIf + #e\EventState2 = 20 + #EndIf + # + #If e\EventState2 = 20 Then + #dist = EntityDistance(e\room\RoomDoors[0]\frameobj, e\room\NPC[0]\Collider) + # + #e\room\NPC[0]\State = 1 + #If dist > 2.5 Then + #PointEntity e\room\NPC[0]\obj, e\room\RoomDoors[1]\frameobj + #RotateEntity e\room\NPC[0]\Collider, 0, CurveAngle(EntityYaw(e\room\NPC[0]\obj), EntityYaw(e\room\NPC[0]\Collider), 15.0), 0 + #ElseIf dist > 0.7 + #If ChannelPlaying (e\room\NPC[0]\SoundChn) Then + #e\room\NPC[0]\State = 0 + #PointEntity e\room\NPC[0]\obj, Collider + #RotateEntity e\room\NPC[0]\Collider, 0, CurveAngle(EntityYaw(e\room\NPC[0]\obj), EntityYaw(e\room\NPC[0]\Collider), 15.0), 0 + #Else + #PointEntity e\room\NPC[0]\obj, e\room\RoomDoors[0]\frameobj + #RotateEntity e\room\NPC[0]\Collider, 0, CurveAngle(EntityYaw(e\room\NPC[0]\obj), EntityYaw(e\room\NPC[0]\Collider), 15.0), 0 + #EndIf + #Else + #RemoveNPC(e\room\NPC[0]) + #e\room\NPC[0]=Null + #e\EventState = -1 + #e\EventState2 = 0 + #e\EventState3 = 0 + #e\room\RoomDoors[0]\locked = False + #e\room\RoomDoors[1]\locked = False + #e\room\RoomDoors[2]\locked = False + #UseDoor(e\room\RoomDoors[1],False) + #For do.doors = Each Doors + #If do\dir = 2 Then + #If Abs(EntityX(e\room\obj)-EntityX(do\frameobj,True))<4.5 Then + #If Abs(EntityZ(e\room\obj)-EntityZ(do\frameobj,True))<4.5 Then + #UseDoor(do,False) + #Exit + #EndIf + #EndIf + #EndIf + #Next + #EndIf + #EndIf + # + #EndIf + # + #EndIf ;eventstate > 1 + # + #Else ;eventstate < 0 (SCP-035 has left) + # + #If UpdateLever(e\room\Levers[1],False) Then + #PositionEntity(e\room\Objects[5], EntityX(e\room\Objects[5],True), 424.0*RoomScale, EntityZ(e\room\Objects[5],True),True) + #PositionEntity(e\room\Objects[6], EntityX(e\room\Objects[6],True), 424.0*RoomScale, EntityZ(e\room\Objects[6],True),True) + #Else + #PositionEntity(e\room\Objects[5], EntityX(e\room\Objects[5],True), 10, EntityZ(e\room\Objects[5],True),True) + #PositionEntity(e\room\Objects[6], EntityX(e\room\Objects[6],True), 10, EntityZ(e\room\Objects[6],True),True) + #EndIf + # + #;If UpdateLever(e\room\Levers[0]) Then + #; If e\room\RoomDoors[0]\open = True Then UseDoor(e\room\RoomDoors[1]) + #;Else + #; If e\room\RoomDoors[0]\open = False Then UseDoor(e\room\RoomDoors[1]) + #;EndIf + # + #temp = False + # + #;player is inside the containment chamber + #If EntityX(Collider)>Min(EntityX(e\room\Objects[7],True),EntityX(e\room\Objects[8],True)) Then + #If EntityX(Collider)Min(EntityZ(e\room\Objects[7],True),EntityZ(e\room\Objects[8],True)) Then + #If EntityZ(Collider) 0 Then + #If e\room\NPC[1]=Null Then + #If e\room\NPC[1]=Null Then e\room\NPC[1] = CreateNPC(NPCtypeTentacle, 0,0,0) + #EndIf + #EndIf + # + #Stamina = CurveValue(Min(60,Stamina), Stamina, 20.0) + # + #temp = True + # + #If e\Sound = 0 Then LoadEventSound(e,"SFX\Room\035Chamber\Whispers1.ogg") + #If e\Sound2 = 0 Then LoadEventSound(e,"SFX\Room\035Chamber\Whispers2.ogg",1) + # + #e\EventState2 = Min(e\EventState2+(FPSfactor/6000),1.0) + #e\EventState3 = CurveValue(e\EventState2, e\EventState3, 50) + # + #If (Not Wearing714) And WearingHazmat<3 And WearingGasMask<3 Then + #Sanity=Sanity-FPSfactor*1.1 + #BlurTimer = Sin(MilliSecs2()/10)*Abs(Sanity) + #EndIf + # + #If (Not WearingHazmat) Then + #Injuries = Injuries + (FPSfactor/5000) + #Else + #Injuries = Injuries + (FPSfactor/10000) + #EndIf + # + #If KillTimer < 0 And Bloodloss =>100 Then + #DeathMSG = "Class D Subject D-9341 found dead inside SCP-035's containment chamber. " + #DeathMSG = DeathMSG + "The subject exhibits heavy hemorrhaging of blood vessels around the eyes and inside the mouth and nose. " + #DeathMSG = DeathMSG + "Sent for autopsy." + #EndIf + #EndIf + #EndIf + #EndIf + #EndIf + # + #If e\room\NPC[1]<>Null Then + #PositionEntity e\room\NPC[1]\Collider, EntityX(e\room\obj,True), 0, EntityZ(e\room\obj,True) + #angle = WrapAngle(EntityYaw(e\room\NPC[1]\Collider)-e\room\angle) + # + #If angle>90 Then + #If angle < 225 Then + #RotateEntity e\room\NPC[1]\Collider, 0, e\room\angle-89-180, 0 + #Else + #RotateEntity e\room\NPC[1]\Collider, 0, e\room\angle-1, 0 + #EndIf + #EndIf + #EndIf + # + #If temp = False Then + #e\EventState2 = Max(e\EventState2-(FPSfactor/2000),0) + #e\EventState3 = Max(e\EventState3-(FPSfactor/100),0) + #EndIf + # + #If e\EventState3 > 0 And (Not Wearing714) And WearingHazmat<3 And WearingGasMask<3 Then + #e\SoundCHN = LoopSound2(e\Sound, e\SoundCHN, Camera, e\room\obj, 10, e\EventState3) + #e\SoundCHN2 = LoopSound2(e\Sound2, e\SoundCHN2, Camera, e\room\obj, 10, (e\EventState3-0.5)*2) + #EndIf + # + #EndIf + # + #Else + #If e\EventState=0 Then + #If e\Sound = 0 Then + #If EntityDistance(Collider, e\room\obj) < 20 Then + #LoadEventSound(e,"SFX\Room\035Chamber\InProximity.ogg") + #PlaySound_Strict e\Sound + #EndIf + #EndIf + #ElseIf e\EventState < 0 + #For i = 0 To 1 + #If e\room\NPC[i]<>Null Then + #RemoveNPC(e\room\NPC[i]) + #e\room\NPC[i]=Null + #EndIf + #Next + #EndIf + # + #EndIf + #;[End Block] + #Case "room049" + #;[Block] + #If PlayerRoom = e\room Then + #If EntityY(Collider) > -2848*RoomScale Then + #e\EventState2 = UpdateElevators(e\EventState2, e\room\RoomDoors[0], e\room\RoomDoors[1],e\room\Objects[0],e\room\Objects[1], e) + #e\EventState3 = UpdateElevators(e\EventState3, e\room\RoomDoors[2], e\room\RoomDoors[3],e\room\Objects[2],e\room\Objects[3], e) + #Else + # + #ShouldPlay = 25 + # + #If e\EventState = 0 Then + #If e\EventStr = "" And QuickLoadPercent = -1 + #QuickLoadPercent = 0 + #QuickLoad_CurrEvent = e + #e\EventStr = "load0" + #EndIf + #PlaySound_Strict LoadTempSound("SFX\Room\Blackout.ogg") + #If EntityDistance(e\room\Objects[11],Collider) 0 + # + #Local prevGenLever + #If EntityPitch(e\room\Objects[9],True) > 0 Then + #prevGenLever = True + #Else + #prevGenLever = False + #EndIf + #temp = Not UpdateLever(e\room\Objects[7]) ;power feed + #x = UpdateLever(e\room\Objects[9]) ;generator + # + #e\room\RoomDoors[1]\locked = True + #e\room\RoomDoors[3]\locked = True + #e\room\RoomDoors[1]\IsElevatorDoor = 0 + #e\room\RoomDoors[3]\IsElevatorDoor = 0 + # + #If (prevGenLever <> x) Then + #If x=False Then + #PlaySound_Strict LightSFX + #Else + #PlaySound_Strict TeslaPowerUpSFX + #EndIf + #EndIf + # + #If e\EventState >= 70 Then + #If x Then + #ShouldPlay = 8 + #e\EventState = Max(e\EventState,70*180) + #SecondaryLightOn = CurveValue(1.0, SecondaryLightOn, 10.0) + #If e\Sound2=0 Then LoadEventSound(e,"SFX\Ambient\Room ambience\fuelpump.ogg",1) + #e\SoundCHN2=LoopSound2(e\Sound2, e\SoundCHN2, Camera, e\room\Objects[10], 6.0) + #For i = 4 To 6 + #e\room\RoomDoors[i]\locked = False + #Next + #Else + #SecondaryLightOn = CurveValue(0.0, SecondaryLightOn, 10.0) + #If ChannelPlaying(e\SoundCHN2) Then + #StopChannel(e\SoundCHN2) + #EndIf + #For i = 4 To 6 + #e\room\RoomDoors[i]\locked = True + #Next + #EndIf + #Else + #e\EventState = Min(e\EventState+FPSfactor,70) + #EndIf + # + #If temp And x Then + #e\room\RoomDoors[1]\locked = False + #e\room\RoomDoors[3]\locked = False + #e\EventState2 = UpdateElevators(e\EventState2, e\room\RoomDoors[0], e\room\RoomDoors[1],e\room\Objects[0],e\room\Objects[1], e) + #e\EventState3 = UpdateElevators(e\EventState3, e\room\RoomDoors[2], e\room\RoomDoors[3],e\room\Objects[2],e\room\Objects[3], e) + # + #If e\room\NPC[0]\Idle > 0 + #i = 0 + #If EntityDistance(Collider,e\room\RoomDoors[1]\frameobj)<3.0 + #i = 1 + #ElseIf EntityDistance(Collider,e\room\RoomDoors[3]\frameobj)<3.0 + #i = 3 + #EndIf + #If i > 0 + #PositionEntity e\room\NPC[0]\Collider,EntityX(e\room\Objects[i],True),EntityY(e\room\Objects[i],True),EntityZ(e\room\Objects[i],True) + #ResetEntity e\room\NPC[0]\Collider + #PlaySound2(ElevatorBeepSFX, Camera, e\room\Objects[i], 4.0) + #e\room\RoomDoors[i]\locked = False + #UseDoor(e\room\RoomDoors[i],False,True) + #e\room\RoomDoors[i-1]\open = False + #e\room\RoomDoors[i]\open = True + #e\room\NPC[0]\PathStatus = FindPath(e\room\NPC[0],EntityX(Collider),EntityY(Collider),EntityZ(Collider)) + #If e\room\NPC[0]\Sound2 <> 0 Then FreeSound_Strict(e\room\NPC[0]\Sound2) + #e\room\NPC[0]\Sound2 = LoadSound_Strict("SFX\SCP\049\DetectedInChamber.ogg") + #e\room\NPC[0]\SoundChn2 = LoopSound2(e\room\NPC[0]\Sound2,e\room\NPC[0]\SoundChn2,Camera,e\room\NPC[0]\obj) + #e\room\NPC[0]\Idle = 0 + #e\room\NPC[0]\HideFromNVG = False + #e\room\NPC[0]\PrevState = 2 + #e\room\NPC[0]\State = 2 + #EndIf + #EndIf + #EndIf + # + #If e\EventState < 70*190 Then + #If e\EventState >= 70*180 Then + #e\room\RoomDoors[1]\open = False + #e\room\RoomDoors[3]\open = False + #e\room\RoomDoors[0]\open = True + #e\room\RoomDoors[2]\open = True + # + #e\EventState= 70*190 + #EndIf + #ElseIf e\EventState < 70*240 + #For n.NPCs = Each NPCs ;awake the zombies + #If n\NPCtype = NPCtypeZombie And n\State = 0 Then + #n\State = 1 + #SetNPCFrame(n, 155) + #EndIf + #Next + #e\EventState=70*241 + #EndIf + #EndIf + #EndIf + #Else + #e\EventState2 = UpdateElevators(e\EventState2, e\room\RoomDoors[0], e\room\RoomDoors[1],e\room\Objects[0],e\room\Objects[1], e) + #e\EventState3 = UpdateElevators(e\EventState3, e\room\RoomDoors[2], e\room\RoomDoors[3],e\room\Objects[2],e\room\Objects[3], e) + #EndIf + # + #If e\EventState < 0 Then + #If e\EventState > -70*4 Then + #Infect = 0 + #If FallTimer => 0 Then + #FallTimer = Min(-1, FallTimer) + #PositionEntity(Head, EntityX(Camera, True), EntityY(Camera, True), EntityZ(Camera, True), True) + #ResetEntity (Head) + #RotateEntity(Head, 0, EntityYaw(Camera) + Rand(-45, 45), 0) + #ElseIf FallTimer < -230 + #FallTimer = -231 + #BlinkTimer = 0 + #e\EventState = e\EventState-FPSfactor + # + #If e\EventState =< -70*4 Then + #UpdateDoorsTimer = 0 + #UpdateDoors() + #UpdateRooms() + #ShowEntity Collider + #DropSpeed = 0 + #BlinkTimer = -10 + #FallTimer = 0 + #PositionEntity Collider, EntityX(e\room\obj,True), EntityY(e\room\Objects[5],True)+0.2, EntityZ(e\room\obj,True) + #ResetEntity Collider + # + #PositionEntity e\room\NPC[0]\Collider, EntityX(e\room\Objects[0],True),EntityY(e\room\Objects[0],True),EntityZ(e\room\Objects[0],True),True + #ResetEntity e\room\NPC[0]\Collider + # + #For n.NPCs = Each NPCs + #If n\NPCtype = NPCtypeZombie Then + #PositionEntity n\Collider, EntityX(e\room\Objects[4],True),EntityY(e\room\Objects[4],True),EntityZ(e\room\Objects[4],True),True + #ResetEntity n\Collider + #n\State = 4 + #DebugLog "moving zombie" + #EndIf + #Next + # + #n.NPCs = CreateNPC(NPCtypeMTF, EntityX(e\room\Objects[5],True), EntityY(e\room\Objects[5],True)+0.2, EntityZ(e\room\Objects[5],True)) + #n\State = 6 + #n\Reload = 6*70 + #PointEntity n\Collider,Collider + #e\room\NPC[1] = n + # + #n.NPCs = CreateNPC(NPCtypeMTF, EntityX(e\room\Objects[5],True), EntityY(e\room\Objects[5],True)+0.2, EntityZ(e\room\Objects[5],True)) + #n\State = 6 + #n\Reload = (6*70)+Rnd(15,30) + #RotateEntity n\Collider,0,EntityYaw(e\room\NPC[1]\Collider),0 + #MoveEntity n\Collider,0.5,0,0 + #PointEntity n\Collider,Collider + # + #n.NPCs = CreateNPC(NPCtypeMTF, EntityX(e\room\Objects[5],True), EntityY(e\room\Objects[5],True)+0.2, EntityZ(e\room\Objects[5],True)) + #n\State = 6 + #n\Reload = 6*70+Rnd(15,30) + #RotateEntity n\Collider,0,EntityYaw(e\room\NPC[1]\Collider),0 + #n\State2 = EntityYaw(n\Collider) + #MoveEntity n\Collider,-0.65,0,0 + # + #MoveEntity e\room\NPC[1]\Collider,0,0,0.1 + #PointEntity Collider, e\room\NPC[1]\Collider + # + #PlaySound_Strict LoadTempSound("SFX\Character\MTF\049\Player0492_1.ogg") + # + #LoadEventSound(e,"SFX\SCP\049\0492Breath.ogg") + # + #IsZombie = True + #EndIf + #EndIf + #Else + #BlurTimer = 800 + #ForceMove = 0.5 + #Injuries = Max(2.0,Injuries) + #Bloodloss = 0 + #Infect = 0 + # + #;Msg = "" + # +#; If e\room\NPC[2]\State = 7 +#; If e\room\NPC[2]\State3 < 70*1.75 +#; e\room\NPC[2]\State3 = e\room\NPC[2]\State3 + FPSfactor +#; Else +#; e\room\NPC[2]\State = 6 +#; e\room\NPC[2]\Reload = e\room\NPC[1]\Reload+Rnd(5,10) +#; EndIf +#; ElseIf e\room\NPC[2]\State = 6 And e\room\NPC[2]\Reload > 70*4 +#; If e\room\NPC[2]\State3 > -(70*4) +#; e\room\NPC[2]\State3 = e\room\NPC[2]\State3 - FPSfactor +#; Else +#; e\room\NPC[2]\State3 = 0.0 +#; e\room\NPC[2]\Reload = 45 +#; e\room\NPC[2]\State = 7 +#; EndIf +#; EndIf + # + #pvt% = CreatePivot() + #PositionEntity pvt%,EntityX(e\room\NPC[1]\Collider),EntityY(e\room\NPC[1]\Collider)+0.2,EntityZ(e\room\NPC[1]\Collider) + # + #PointEntity Collider, e\room\NPC[1]\Collider + #PointEntity Camera, pvt%,EntityRoll(Camera) + # + #FreeEntity pvt% + # + #If KillTimer < 0 Then + #PlaySound_Strict LoadTempSound("SFX\Character\MTF\049\Player0492_2.ogg") + #RemoveEvent(e) + #Else + #If e\SoundCHN = 0 Then + #e\SoundCHN = PlaySound_Strict (e\Sound) + #Else + #If (Not ChannelPlaying(e\SoundCHN)) Then e\SoundCHN = PlaySound_Strict(e\Sound) + #EndIf + #EndIf + #EndIf + #EndIf + #;[End Block] + #Case "room079" + #;[Block] + #If PlayerRoom = e\room Then + # + #If e\EventState = 0 Then + # + #e\room\NPC[0]=CreateNPC(NPCtypeGuard, EntityX(e\room\Objects[2],True), EntityY(e\room\Objects[2],True)+0.5, EntityZ(e\room\Objects[2],True)) + #PointEntity e\room\NPC[0]\Collider, e\room\obj + #RotateEntity e\room\NPC[0]\Collider, 0, EntityYaw(e\room\NPC[0]\Collider),0, True + #;SetAnimTime e\room\NPC[0]\obj, 906 + #SetNPCFrame(e\room\NPC[0], 288) + #e\room\NPC[0]\State = 8 + # + #e\EventState = 1 + #EndIf + # + #ShouldPlay = 4 + #If RemoteDoorOn Then + #If e\room\RoomDoors[0]\open Then + #If e\room\RoomDoors[0]\openstate > 50 Or EntityDistance(Collider, e\room\RoomDoors[0]\frameobj)<0.5 Then + #e\room\RoomDoors[0]\openstate = Min(e\room\RoomDoors[0]\openstate,50) + #e\room\RoomDoors[0]\open = False + #PlaySound_Strict (LoadTempSound("SFX\Door\DoorError.ogg")) + #EndIf + #EndIf + #ElseIf e\EventState < 10000 + #If e\EventState = 1 Then + #e\EventState = 2 + #ElseIf e\EventState = 2 + #If EntityDistance(e\room\Objects[0], Collider)<3.0 Then + #GiveAchievement(Achv079) + #e\EventState = 3 + #e\EventState2 = 1 + #;e\Sound = LoadSound_Strict("SFX\SCP\079\Speech.ogg") + #;LoadEventSound(e,"SFX\SCP\079\Speech.ogg") + #;e\SoundCHN = PlaySound_Strict (e\Sound) + #e\SoundCHN = StreamSound_Strict("SFX\SCP\079\Speech.ogg",SFXVolume,0) + #e\SoundCHN_isStream = True + #EndIf + #;ElseIf e\EventState = 3 + #ElseIf e\EventState < 2000 Then ;3500 + #;If ChannelPlaying(e\SoundCHN) Then + #If IsStreamPlaying_Strict(e\SoundCHN) + #If Rand(3) = 1 Then + #EntityTexture(e\room\Objects[1], OldAiPics(0)) + #ShowEntity (e\room\Objects[1]) + #ElseIf Rand(10) = 1 + #HideEntity (e\room\Objects[1]) + #EndIf + #Else + #;If e\Sound <> 0 Then FreeSound_Strict e\Sound : e\Sound = 0 + #If e\SoundCHN<>0 + #StopStream_Strict(e\SoundCHN) : e\SoundCHN=0 + #EndIf + #EntityTexture(e\room\Objects[1], OldAiPics(1)) + #ShowEntity (e\room\Objects[1]) + #e\EventState = e\EventState + FPSfactor + #EndIf + #Else + #If EntityDistance(e\room\Objects[0], Collider)<2.5 Then + #e\EventState = 10001 + #;e\Sound = LoadSound_Strict("SFX\SCP\079\Refuse.ogg") + #;LoadEventSound(e,"SFX\SCP\079\Refuse.ogg") + #;e\SoundCHN = PlaySound_Strict (e\Sound) + #If e\SoundCHN<>0 + #StopStream_Strict(e\SoundCHN) : e\SoundCHN=0 + #EndIf + #e\SoundCHN = StreamSound_Strict("SFX\SCP\079\Refuse.ogg",SFXVolume,0) + #;EntityTexture(e\room\Objects[1], OldAiPics(1)) + #;ShowEntity (e\room\Objects[1]) + #EndIf + #EndIf + #Else + #If e\SoundCHN<>0 + #If (Not IsStreamPlaying_Strict(e\SoundCHN)) + #e\SoundCHN = 0 + #EntityTexture(e\room\Objects[1], OldAiPics(1)) + #ShowEntity (e\room\Objects[1]) + #Else + #If Rand(3) = 1 Then + #EntityTexture(e\room\Objects[1], OldAiPics(0)) + #ShowEntity (e\room\Objects[1]) + #ElseIf Rand(10) = 1 + #HideEntity (e\room\Objects[1]) + #EndIf + #EndIf + #EndIf + #EndIf + # + #EndIf + # + # + #If e\EventState2 = 1 Then + #If RemoteDoorOn Then + #;LoadEventSound(e,"SFX\SCP\079\GateB.ogg") + #;e\SoundCHN = PlaySound_Strict (e\Sound) + #If e\SoundCHN<>0 + #StopStream_Strict(e\SoundCHN) : e\SoundCHN=0 + #EndIf + #e\SoundCHN = StreamSound_Strict("SFX\SCP\079\GateB.ogg",SFXVolume,0) + #e\SoundCHN_isStream = True + #e\EventState2 = 2 + # + #For e2.Events = Each Events + #If e2\EventName="exit1" Or e2\EventName="gateaentrance" Then + #e2\EventState3 = 1 + #EndIf + #Next + #EndIf + #EndIf + # + #;[End Block] + #Case "room106" + #;[Block] + # + #;eventstate2 = are the magnets on + # + #If SoundTransmission Then + #If e\EventState = 1 Then + #e\EventState3 = Min(e\EventState3+FPSfactor,4000) + #EndIf + #If ChannelPlaying(e\SoundCHN) = False Then e\SoundCHN = PlaySound_Strict(RadioStatic) + #EndIf + # + #If e\room\NPC[0]=Null Then ;add the lure subject + #TFormPoint(1088, 1096, 1728, e\room\obj, 0) + #e\room\NPC[0] = CreateNPC(NPCtypeD, TFormedX(), TFormedY(), TFormedZ()) + #TurnEntity e\room\NPC[0]\Collider,0,e\room\angle+90,0,True + #e\room\NPC[0]\HideFromNVG = True + #EndIf + # + #If PlayerRoom = e\room And e\room\NPC[0]<>Null Then + # + #;ShowEntity e\room\NPC[0]\obj + # + #ShouldPlay = 66 + # + #e\room\NPC[0]\State=6 + #If e\room\NPC[0]\Idle = 0 Then + #AnimateNPC(e\room\NPC[0], 17.0, 19.0, 0.01, False) + #If e\room\NPC[0]\Frame = 19.0 Then e\room\NPC[0]\Idle = 1 + #Else + #AnimateNPC(e\room\NPC[0], 19.0, 17.0, -0.01, False) + #If e\room\NPC[0]\Frame = 17.0 Then e\room\NPC[0]\Idle = 0 + #EndIf + # + #PositionEntity(e\room\NPC[0]\Collider, EntityX(e\room\Objects[5],True),EntityY(e\room\Objects[5],True)+0.1,EntityZ(e\room\Objects[5],True),True) + #RotateEntity(e\room\NPC[0]\Collider,EntityPitch(e\room\Objects[5],True),EntityYaw(e\room\Objects[5],True),0,True) + #ResetEntity(e\room\NPC[0]\Collider) + # + #temp = e\EventState2 + # + #Local leverstate = UpdateLever(e\room\Objects[1],((EntityY(e\room\Objects[6],True)<-990*RoomScale) And (EntityY(e\room\Objects[6],True)>-1275.0*RoomScale))) + #If GrabbedEntity = e\room\Objects[1] And DrawHandIcon = True Then e\EventState2 = leverstate + # + #If e\EventState2 <> temp Then + #If e\EventState2 = False Then + #PlaySound_Strict(MagnetDownSFX) + #Else + #PlaySound_Strict(MagnetUpSFX) + #EndIf + #EndIf + # + #If ((e\EventState3>3200) Or (e\EventState3<2500)) Or (e\EventState<>1) Then + #SoundTransmission% = UpdateLever(e\room\Objects[3]) + #EndIf + #If (Not SoundTransmission) Then + #If (e\SoundCHN2<>0) Then + #If ChannelPlaying(e\SoundCHN2) Then StopChannel e\SoundCHN2 + #EndIf + #If (e\SoundCHN<>0) Then + #If ChannelPlaying(e\SoundCHN) Then StopChannel e\SoundCHN + #EndIf + #EndIf + # + #If e\EventState = 0 Then + #If SoundTransmission And Rand(100)=1 Then + #If e\SoundCHN2 = 0 Then + #LoadEventSound(e,"SFX\Character\LureSubject\Idle"+Rand(1,6)+".ogg",1) + #e\SoundCHN2 = PlaySound_Strict(e\Sound2) + #EndIf + #If ChannelPlaying(e\SoundCHN2) = False Then + #LoadEventSound(e,"SFX\Character\LureSubject\Idle"+Rand(1,6)+".ogg",1) + #e\SoundCHN2 = PlaySound_Strict(e\Sound2) + #EndIf + #EndIf + # + #If SoundTransmission Then + #UpdateButton(e\room\Objects[4]) + #If ClosestButton = e\room\Objects[4] And MouseHit1 Then + #e\EventState = 1 ;start the femur breaker + #If SoundTransmission = True Then ;only play sounds if transmission is on + #If e\SoundCHN2 <> 0 Then + #If ChannelPlaying(e\SoundCHN2) Then StopChannel e\SoundCHN2 + #EndIf + #FemurBreakerSFX = LoadSound_Strict("SFX\Room\106Chamber\FemurBreaker.ogg") + #e\SoundCHN2 = PlaySound_Strict (FemurBreakerSFX) + #EndIf + #EndIf + #EndIf + #ElseIf e\EventState = 1 ;bone broken + #If SoundTransmission And e\EventState3 < 2000 Then + #If e\SoundCHN2 = 0 Then + #LoadEventSound(e,"SFX\Character\LureSubject\Sniffling.ogg",1) + #e\SoundCHN2 = PlaySound_Strict(e\Sound2) + #EndIf + #If ChannelPlaying(e\SoundCHN2) = False Then + #LoadEventSound(e,"SFX\Character\LureSubject\Sniffling.ogg",1) + #e\SoundCHN2 = PlaySound_Strict(e\Sound2) + #EndIf + #EndIf + # + #If e\EventState3 => 2500 Then + # + #If e\EventState2 = 1 And e\EventState3-FPSfactor < 2500 Then + #PositionEntity(Curr106\Collider, EntityX(e\room\Objects[6], True), EntityY(e\room\Objects[6], True), EntityZ(e\room\Objects[6], True)) + #Contained106 = False + #ShowEntity Curr106\obj + #Curr106\Idle = False + #Curr106\State = -11 + #e\EventState = 2 + #Exit + #EndIf + # + #ShouldPlay = 10 + # + #PositionEntity(Curr106\Collider, EntityX(e\room\Objects[5], True), (700.0 + 108.0*(Min(e\EventState3-2500.0,800)/320.0))*RoomScale , EntityZ(e\room\Objects[5], True)) + #HideEntity Curr106\obj2 + # + #;PointEntity(Curr106\Collider, Camera) + #RotateEntity(Curr106\Collider,0, EntityYaw(e\room\Objects[5],True)+180.0, 0, True) + #Curr106\State = -11 + #AnimateNPC(Curr106, 206, 250, 0.1) + #Curr106\Idle = True + # + #If e\EventState3-FPSfactor < 2500 Then + #d.Decals = CreateDecal(0, EntityX(e\room\Objects[5], True), 936.0*RoomScale, EntityZ(e\room\Objects[5], True), 90, 0, Rnd(360)) + #d\Timer = 90000 + #d\Alpha = 0.01 : d\AlphaChange = 0.005 + #d\Size = 0.1 : d\SizeChange = 0.003 + # + #If e\SoundCHN2 <> 0 Then + #If ChannelPlaying(e\SoundCHN2) Then StopChannel e\SoundCHN2 + #EndIf + #LoadEventSound(e,"SFX\Character\LureSubject\106Bait.ogg",1) + #e\SoundCHN2=PlaySound_Strict(e\Sound2) + #ElseIf e\EventState3-FPSfactor < 2900 And e\EventState3 => 2900 Then + #If FemurBreakerSFX <> 0 Then FreeSound_Strict FemurBreakerSFX : FemurBreakerSFX = 0 + # + #d.Decals = CreateDecal(0, EntityX(e\room\Objects[7], True), EntityY(e\room\Objects[7], True) , EntityZ(e\room\Objects[7], True), 0, 0, 0) + #RotateEntity(d\obj, EntityPitch(e\room\Objects[7], True)+Rand(10,20), EntityYaw(e\room\Objects[7], True)+30, EntityRoll(d\obj)) + #MoveEntity d\obj, 0,0.05,0.2 ;0.15 + #RotateEntity(d\obj, EntityPitch(e\room\Objects[7], True), EntityYaw(e\room\Objects[7], True), EntityRoll(d\obj)) + # + #EntityParent d\obj, e\room\Objects[7] + #;TurnEntity (d\obj, 0, 180, 0) + # + #d\Timer = 90000 + #d\Alpha = 0.01 : d\AlphaChange = 0.005 + #d\Size = 0.05 : d\SizeChange = 0.002 + #ElseIf e\EventState3 > 3200 Then + #;PositionEntity e\room\Objects[8], 0, 1000.0, 0, True + #;PositionEntity e\room\Objects[7], 0, 1000.0, 0, True + # + #If e\EventState2 = True Then ;magnets off -> 106 caught + #Contained106 = True + #Else ;magnets off -> 106 comes out and attacks + #PositionEntity(Curr106\Collider, EntityX(e\room\Objects[6], True), EntityY(e\room\Objects[6], True), EntityZ(e\room\Objects[6], True)) + # + #Contained106 = False + #ShowEntity Curr106\obj + #Curr106\Idle = False + #Curr106\State = -11 + # + #e\EventState = 2 + #Exit + #EndIf + #EndIf + # + #EndIf + # + #EndIf + # + #If e\EventState2 Then + #PositionEntity (e\room\Objects[6],EntityX(e\room\Objects[6],True),CurveValue(-980.0*RoomScale + Sin(Float(MilliSecs2())*0.04)*0.07,EntityY(e\room\Objects[6],True),200.0),EntityZ(e\room\Objects[6],True),True) + #RotateEntity(e\room\Objects[6], Sin(Float(MilliSecs2())*0.03), EntityYaw(e\room\Objects[6],True), -Sin(Float(MilliSecs2())*0.025), True) + #Else + #PositionEntity (e\room\Objects[6],EntityX(e\room\Objects[6],True),CurveValue(-1280.0*RoomScale,EntityY(e\room\Objects[6],True),200.0),EntityZ(e\room\Objects[6],True),True) + #RotateEntity(e\room\Objects[6], 0, EntityYaw(e\room\Objects[6],True), 0, True) + #EndIf + #Else + #If PlayerRoom\RoomTemplate\Name = "pocketdimension" Or PlayerRoom\RoomTemplate\Name = "dimension1499" Then + #If (e\SoundCHN2<>0) Then + #If ChannelPlaying(e\SoundCHN2) Then StopChannel e\SoundCHN2 + #EndIf + #If (e\SoundCHN<>0) Then + #If ChannelPlaying(e\SoundCHN) Then StopChannel e\SoundCHN + #EndIf + #ElseIf PlayerRoom\RoomTemplate\Name = "room860" Then + #For e2.Events = Each Events + #If e2\EventName = "room860" Then + #If e2\EventState = 1.0 Then + #If (e\SoundCHN2<>0) Then + #If ChannelPlaying(e\SoundCHN2) Then StopChannel e\SoundCHN2 + #EndIf + #If (e\SoundCHN<>0) Then + #If ChannelPlaying(e\SoundCHN) Then StopChannel e\SoundCHN + #EndIf + #EndIf + #Exit + #EndIf + #Next + #EndIf + #EndIf + #;[End Block] + #Case "room205" + #;[Block] + #If PlayerRoom = e\room Then + #If e\EventState=0 Or e\room\Objects[0]=0 Then + #If e\EventStr = "" And QuickLoadPercent = -1 + #QuickLoadPercent = 0 + #QuickLoad_CurrEvent = e + #e\EventStr = "load0" + #EndIf + # + #If e\room\Objects[3]<>0 + #HideEntity(e\room\Objects[3]) + #HideEntity(e\room\Objects[4]) + #HideEntity(e\room\Objects[5]) + #HideEntity(e\room\Objects[6]) + #EndIf + # + #If e\room\RoomDoors[1]\open = True + #e\EventState = 1 + #GiveAchievement(Achv205) + #EndIf + #Else + #ShouldPlay = 16 + #If (e\EventState<65) Then + #If (Distance(EntityX(Collider), EntityZ(Collider), EntityX(e\room\Objects[0],True), EntityZ(e\room\Objects[0],True))<2.0) Then + #PlaySound_Strict(LoadTempSound("SFX\SCP\205\Enter.ogg")) + # + #e\EventState = Max(e\EventState, 65) + # + #ShowEntity(e\room\Objects[3]) + #ShowEntity(e\room\Objects[4]) + #ShowEntity(e\room\Objects[5]) + #HideEntity(e\room\Objects[6]) + # + #SetAnimTime(e\room\Objects[3], 492) + #SetAnimTime(e\room\Objects[4], 434) + #SetAnimTime(e\room\Objects[5], 434) + # + #e\room\RoomDoors[0]\open = False + #EndIf + # + #If e\EventState>7 Then + #If (Rand(0,300)=1) Then + #e\room\RoomDoors[0]\open = Not e\room\RoomDoors[0]\open + #EndIf + #EndIf + # + #e\EventState2 = e\EventState2 + FPSfactor + #EndIf + # + # + #Select e\EventState + #Case 1 + #ShowEntity e\room\Objects[1] + #HideEntity(e\room\Objects[5]) + #HideEntity(e\room\Objects[4]) + #HideEntity(e\room\Objects[3]) + #;sitting + #ShowEntity(e\room\Objects[6]) + #Animate2(e\room\Objects[6], AnimTime(e\room\Objects[6]), 526, 530, 0.2) + #If e\EventState2 > 20*70 Then e\EventState = e\EventState+1 + #Case 3 + #ShowEntity e\room\Objects[1] + #HideEntity(e\room\Objects[5]) + #HideEntity(e\room\Objects[4]) + #HideEntity(e\room\Objects[3]) + #;laying down + #ShowEntity(e\room\Objects[6]) + #Animate2(e\room\Objects[6], AnimTime(e\room\Objects[6]), 377, 525, 0.2) + #If e\EventState2 > 30*70 Then e\EventState = e\EventState+1 + #Case 5 + #ShowEntity e\room\Objects[1] + #HideEntity(e\room\Objects[5]) + #HideEntity(e\room\Objects[4]) + #HideEntity(e\room\Objects[3]) + #;standing + #ShowEntity(e\room\Objects[6]) + #Animate2(e\room\Objects[6], AnimTime(e\room\Objects[6]), 228, 376, 0.2) + #If e\EventState2 > 40*70 Then + #e\EventState = e\EventState+1 + #PlaySound2(LoadTempSound("SFX\SCP\205\Horror.ogg"), Camera, e\room\Objects[6], 10, 0.3) + #EndIf + #Case 7 + #ShowEntity e\room\Objects[1] + #ShowEntity(e\room\Objects[6]) + #HideEntity(e\room\Objects[4]) + #HideEntity(e\room\Objects[3]) + #;first demon appears + #ShowEntity(e\room\Objects[5]) + #;le sexy demon pose + #Animate2(e\room\Objects[5], AnimTime(e\room\Objects[5]), 500, 648, 0.2) + #;TurnEntity(e\room\Objects[6], 0.0, DeltaYaw(e\room\Objects[6], e\room\Objects[5])*0.01, 0.0, True) + #If e\EventState2 > 60*70 Then + #e\EventState = e\EventState+1 + #PlaySound2(LoadTempSound("SFX\SCP\205\Horror.ogg"), Camera, e\room\Objects[6], 10, 0.5) + #EndIf + #Case 9 + #ShowEntity e\room\Objects[1] + #ShowEntity(e\room\Objects[6]) + #ShowEntity(e\room\Objects[5]) + #HideEntity(e\room\Objects[3]) + #;second demon appears + #ShowEntity(e\room\Objects[4]) + #;idle + #Animate2(e\room\Objects[4], AnimTime(e\room\Objects[4]), 2, 200, 0.2) + #Animate2(e\room\Objects[5], AnimTime(e\room\Objects[5]), 4, 125, 0.2) + # + #;TurnEntity(e\room\Objects[6], 0.0, DeltaYaw(e\room\Objects[6], e\room\Objects[4])*0.01, 0.0, True) + # + #If e\EventState2 > 80*70 Then + #e\EventState = e\EventState+1 + #PlaySound_Strict(LoadTempSound("SFX\SCP\205\Horror.ogg")) + #EndIf + #Case 11 + #ShowEntity e\room\Objects[1] + #ShowEntity(e\room\Objects[6]) + #ShowEntity(e\room\Objects[5]) + #ShowEntity(e\room\Objects[4]) + #;third demon + #ShowEntity(e\room\Objects[3]) + #;idle + #Animate2(e\room\Objects[3], AnimTime(e\room\Objects[3]), 2, 226, 0.2) + #Animate2(e\room\Objects[4], AnimTime(e\room\Objects[4]), 2, 200, 0.2) + #Animate2(e\room\Objects[5], AnimTime(e\room\Objects[5]), 4, 125, 0.2) + # + #;TurnEntity(e\room\Objects[6], 0.0, DeltaYaw(e\room\Objects[5], e\room\Objects[4])*0.01, 0.0, True) + # + #If e\EventState2 > 85*70 Then e\EventState = e\EventState+1 + #Case 13 + #ShowEntity e\room\Objects[1] + #ShowEntity(e\room\Objects[6]) + #ShowEntity(e\room\Objects[5]) + #ShowEntity(e\room\Objects[4]) + #ShowEntity(e\room\Objects[3]) + #If (AnimTime(e\room\Objects[6])<>227) Then SetAnimTime(e\room\Objects[6], 227) + # + #Animate2(e\room\Objects[3], AnimTime(e\room\Objects[3]), 2, 491, 0.05) + #Animate2(e\room\Objects[4], AnimTime(e\room\Objects[4]), 197, 433, 0.05) + #Animate2(e\room\Objects[5], AnimTime(e\room\Objects[5]), 2, 433, 0.05) + #Case 66 + #ShowEntity e\room\Objects[1] + #Animate2(e\room\Objects[3], AnimTime(e\room\Objects[3]), 492, 534, 0.1, False) + #Animate2(e\room\Objects[4], AnimTime(e\room\Objects[4]), 434, 466, 0.1, False) + #Animate2(e\room\Objects[5], AnimTime(e\room\Objects[5]), 434, 494, 0.1, False) + # + #If AnimTime(e\room\Objects[3])>515 Then + #;MoveEntity(e\room\Objects[3], 0,-FPSfactor*0.001,0) + #;MoveEntity(e\room\Objects[4], 0,-FPSfactor*0.001,0) + #;MoveEntity(e\room\Objects[5], 0,-FPSfactor*0.001,0) + #If AnimTime(e\room\Objects[3])>533 Then + #e\EventState = 67 + #e\EventState2 = 0 + #e\EventState3 = 0 + #HideEntity e\room\Objects[1] + #EndIf + #EndIf + #Case 67 + #If (Rand(150)=1) Then + #DeathMSG = "The SCP-205 cycle seems to have resumed its normal course after the anomalies observed during " + #DeathMSG = DeathMSG + "[REDACTED]. The body of subject D-9341 was discovered inside the chamber. " + #DeathMSG = DeathMSG + "The subject exhibits signs of blunt force trauma typical for personnel who have " + #DeathMSG = DeathMSG + "entered the chamber when the lights are off." + # + #Injuries=Injuries+Rnd(0.4,0.8) + #PlaySound_Strict DamageSFX(Rand(2,3)) + #CameraShake = 0.5 + # + #e\EventState2 = Rnd(-0.1, 0.1) + #e\EventState3 = Rnd(-0.1, 0.1) + # + #If (Injuries>5.0) Kill() + #EndIf + # + #TranslateEntity(Collider, e\EventState2,0,e\EventState3) + #e\EventState2 = CurveValue(e\EventState2, 0, 10.0) + #e\EventState3 = CurveValue(e\EventState3, 0, 10.0) + #Default + #If (Rand(3)=1) Then + #HideEntity e\room\Objects[1] + #Else + #ShowEntity e\room\Objects[1] + #EndIf + # + #e\EventState3 = e\EventState3 + FPSfactor + #If (e\EventState3>50) Then + #ShowEntity e\room\Objects[1] + #e\EventState = e\EventState+1 + #e\EventState3=0 + #EndIf + #End Select + #EndIf + #Else If (e\room\Objects[3]<>0) + #HideEntity(e\room\Objects[3]) + #HideEntity(e\room\Objects[4]) + #HideEntity(e\room\Objects[5]) + #HideEntity(e\room\Objects[6]) + #Else + #e\EventState = 0 + #e\EventStr = "" + #EndIf + #;[End block] + #Case "room860" + #;[Block] + # + #;e\EventState = is the player in the forest + #;e\EventState2 = which side of the door did the player enter from + #;e\EventState3 = monster spawn timer + # + #Local fr.Forest=e\room\fr + # + #If PlayerRoom = e\room And fr<>Null Then + # + #;Local dp.DrawPortal + # + #If e\EventState=1.0 Then ;the player is in the forest + #CurrStepSFX = 2 + # + #Curr106\Idle = True + # + #;ShowEntity fr\DetailEntities[0] + #;ShowEntity fr\DetailEntities[1] + # + #UpdateForest(fr,Collider) + # + #If e\EventStr = "" And QuickLoadPercent = -1 + #QuickLoadPercent = 0 + #QuickLoad_CurrEvent = e + #e\EventStr = "load0" + #EndIf + # + #If e\room\NPC[0]<>Null Then + #If (e\room\NPC[0]\State2 = 1 And e\room\NPC[0]\State>1) Or e\room\NPC[0]\State>2 ;the monster is chasing the player + #ShouldPlay = 12 + #Else + #ShouldPlay = 9 + #EndIf + #EndIf + # + #;the player fell + #If (Not NoClip) + #If EntityY(Collider)<=28.5 Then + #Kill() + #BlinkTimer=-2 + #ElseIf EntityY(Collider)>EntityY(fr\Forest_Pivot,True)+0.5 + #MoveEntity(Collider, 0, ((EntityY(fr\Forest_Pivot,True)+0.5) - EntityY(Collider))*FPSfactor, 0) + #EndIf + #EndIf + # + #If e\room\NPC[0]<>Null + #If e\room\NPC[0]\State = 0 Or EntityDistance(Collider, e\room\NPC[0]\Collider)>20.0 Then + #e\EventState3 = e\EventState3 + (1+CurrSpeed)* FPSfactor + #If (e\EventState3 Mod 500) < 10.0 And ((e\EventState3-FPSfactor) Mod 500) > 490.0 Then + #;If e\EventState3 > 3500 And Rnd(10000) 3000-(500*SelectedDifficulty\aggressiveNPCs) And Rnd(10000+(500*SelectedDifficulty\aggressiveNPCs)) < e\EventState3 + #e\room\NPC[0]\State=2 + #PositionEntity e\room\NPC[0]\Collider, 0,-110,0 + #;e\EventState3=e\EventState3-Rnd(2000,3000) + #e\EventState3=e\EventState3-Rnd(1000,2000-(500*SelectedDifficulty\aggressiveNPCs)) + #DebugLog "attack" + #Else + #e\room\NPC[0]\State=1 + #PositionEntity e\room\NPC[0]\Collider, 0,-110,0 + #DebugLog "spawn" + #EndIf + #EndIf + #EndIf + #EndIf + # + #;If KeyHit(25) Then + #; e\room\NPC[0]\State=2 + #; PositionEntity e\room\NPC[0]\Collider, 0,-110,0 + #; e\EventState3=e\EventState3-Rnd(2000,3000) + #;EndIf + # + #For i = 0 To 1 + #If EntityDistance(fr\Door[i], Collider)<0.5 Then + #If EntityInView(fr\Door[i], Camera) Then + #DrawHandIcon = True + #If MouseHit1 Then + #If i=e\EventState2 Then + #BlinkTimer = -10 + # + #PlaySound_Strict(LoadTempSound("SFX\Door\WoodenDoorOpen.ogg")) + # + #RotateEntity e\room\Objects[3], 0, 0, 0 + #RotateEntity e\room\Objects[4], 0, 180, 0 + #;SetAnimTime e\room\Objects[3], 0.0 + #;SetAnimTime e\room\Objects[4], 0.0 + # + #;dp.DrawPortal=e\room\dp;Object.DrawPortal(e\room\Objects[0]) + #PositionEntity Collider, EntityX(e\room\Objects[2],True),0.5,EntityZ(e\room\Objects[2],True) + # + #RotateEntity Collider, 0, EntityYaw(e\room\obj,True)+e\EventState2*180, 0 + #MoveEntity Collider, 0,0,1.5 + # + #ResetEntity Collider + # + #UpdateDoorsTimer = 0 + #UpdateDoors() + # + #SecondaryLightOn = PrevSecondaryLightOn + #;SecondaryLightOn = 0.0 + # + #e\EventState = 0.0 + #e\EventState3 = 0.0 + #Else + #PlaySound_Strict(LoadTempSound("SFX\Door\WoodenDoorBudge.ogg")) + #Msg = "The door will not budge." + #MsgTimer = 70*5 + #EndIf + #EndIf + #EndIf + #EndIf + #Next + # + #If e\room\NPC[0]<>Null + #x = Max(1.0-(e\room\NPC[0]\State3/300.0),0.1) + #Else + #x = 2.0 + #EndIf + # + #If (Not DebugHUD) + #CameraClsColor Camera,98*x,133*x,162*x + #CameraRange Camera,RoomScale,8.5 + #CameraFogRange Camera,0.5,8.0 + #CameraFogColor Camera,98*x,133*x,162*x + #EndIf + # + #Else + # + #If (Not Contained106) Then Curr106\Idle = False + # + #;dp.DrawPortal=e\room\dp;Object.DrawPortal(e\room\Objects[0]) + # + #;HideEntity fr\DetailEntities[0] + #;HideEntity fr\DetailEntities[1] + # + #If EntityYaw(e\room\Objects[3])=0.0 Then + #HideEntity fr.Forest\Forest_Pivot + #If (Abs(Distance(EntityX(e\room\Objects[3],True),EntityZ(e\room\Objects[3],True),EntityX(Collider,True),EntityZ(Collider,True)))<1.0) Then + #DrawHandIcon = True + # + #If SelectedItem = Null Then + #If MouseHit1 Then + #PlaySound_Strict(LoadTempSound("SFX\Door\WoodenDoorBudge.ogg")) + #Msg = "The door will not budge." + #MsgTimer = 5*70 + #EndIf + #ElseIf SelectedItem\itemtemplate\tempname="scp860" + #If MouseHit1 Then + #PlaySound_Strict(LoadTempSound("SFX\Door\WoodenDoorOpen.ogg")) + #ShowEntity fr.Forest\Forest_Pivot + #SelectedItem = Null + # + #BlinkTimer = -10 + # + #e\EventState=1.0 + # + #;reset monster spawn timer + #e\EventState3 = 0.0 + # + #If e\room\NPC[0]<>Null Then + #;reset monster to the (hidden) idle state + #e\room\NPC[0]\State = 0 + #EndIf + # + #PrevSecondaryLightOn = SecondaryLightOn + #SecondaryLightOn = True + # + #pvt = CreatePivot() + #PositionEntity pvt, EntityX(Camera),EntityY(Camera),EntityZ(Camera) + #PointEntity pvt, e\room\obj + #ang# = WrapAngle(EntityYaw(pvt)-EntityYaw(e\room\obj,True)) + #If ang > 90 And ang < 270 Then + #PositionEntity Collider,EntityX(fr\Door[0],True),EntityY(fr\Door[0],True)+EntityY(Collider,True)+0.5,EntityZ(fr\Door[0],True),True + #RotateEntity Collider, 0.0, EntityYaw(fr\Door[0],True)-180, 0.0, True + #MoveEntity Collider, -0.5,0.0,0.5 + #e\EventState2 = 1 + #Else + #PositionEntity Collider,EntityX(fr\Door[1],True),EntityY(fr\Door[1],True)+EntityY(Collider,True)+0.5,EntityZ(fr\Door[1],True),True + #RotateEntity Collider, 0.0, EntityYaw(fr\Door[1],True)-180, 0.0, True + #MoveEntity Collider, -0.5,0.0,0.5 + #e\EventState2 = 0 + #EndIf + #FreeEntity pvt + # + #ResetEntity Collider + #EndIf + #EndIf + #EndIf + #EndIf + # + #EndIf + # + #Else + #If (fr=Null) Then + #RemoveEvent(e) + #Else + #If (fr\Forest_Pivot<>0) Then HideEntity fr\Forest_Pivot + #EndIf + #EndIf + # + #;[End Block] + # + #Case "room966" + #;[Block] + #If PlayerRoom = e\room Then + #Select e\EventState + #Case 0 + #;a dirty workaround to hide the pause when loading 966 model + #If QuickLoadPercent = -1 + #;LightBlink = 5.0 + #e\EventState = 1 + #;PlaySound_Strict LightSFX + #QuickLoadPercent = 0 + #QuickLoad_CurrEvent = e + #EndIf + #Case 2 + #e\EventState = 2 + #RemoveEvent (e) + #End Select + #EndIf + #;[End Block] + #Case "room1123" + #;[Block] + #If PlayerRoom = e\room Then + #;the event is started when the player picks up SCP-1123 (in Items.bb/UpdateItems()) + #If e\EventState>0 And e\EventState<7 Then + #CanSave = False + #EndIf + #If e\EventState = 1 Then + #;If e\SoundCHN = 0 Then + #; e\SoundCHN = + #;Else + #; If Not ChannelPlaying(e\SoundCHN) Then e\SoundCHN = PlaySound_Strict(moddedambience) + #;End If + # + #;Saving Injuries and Bloodloss, so that the player won't be healed automatically + #PrevInjuries = Injuries + #PrevBloodloss = Bloodloss + #PrevSecondaryLightOn = SecondaryLightOn + #SecondaryLightOn = True + # + #e\room\NPC[0] = CreateNPC(NPCtypeD, EntityX(e\room\Objects[6],True),EntityY(e\room\Objects[6],True),EntityZ(e\room\Objects[6],True)) + #;e\room\NPC[1] = CreateNPC(NPCtypeD, EntityX(e\room\Objects[7],True),EntityY(e\room\Objects[7],True),EntityZ(e\room\Objects[7],True)) + # + #nazi = LoadAnimMesh_Strict("GFX\npcs\naziofficer.b3d") + #scale# = 0.5 / MeshWidth(nazi) + # + #FreeEntity e\room\NPC[0]\obj + #e\room\NPC[0]\obj = CopyEntity(nazi) + #ScaleEntity e\room\NPC[0]\obj, scale, scale, scale + # + #;FreeEntity e\room\NPC[1]\obj + #;e\room\NPC[1]\obj = CopyEntity(nazi) + #;ScaleEntity e\room\NPC[1]\obj, scale, scale, scale + # + #FreeEntity nazi + #PositionEntity Collider, EntityX(e\room\Objects[4],True),EntityY(e\room\Objects[4],True),EntityZ(e\room\Objects[4],True),True + #ResetEntity Collider + #;PlaySound_Strict(HorrorSFX(9)) + #CameraShake = 1.0 + #BlurTimer = 1200 + #Injuries = 1.0 + #e\EventState = 2 + # + #ElseIf e\EventState = 2 + #e\EventState2 = e\EventState2 + FPSfactor + # + #PointEntity e\room\NPC[0]\Collider, Collider + #BlurTimer = Max(BlurTimer, 100) + # + #If e\EventState2>200 And e\EventState2-FPSfactor=<200 Then + #e\Sound = LoadSound_Strict("SFX\Music\1123.ogg"); + #e\SoundCHN = PlaySound_Strict(e\Sound) + #EndIf + # + #If e\EventState2 > 1000 Then + #If e\Sound2=0 Then + #e\Sound2 = LoadSound_Strict("SFX\Door\1123DoorOpen.ogg") + #e\SoundCHN2 = PlaySound_Strict(e\Sound2) + #EndIf + #RotateEntity e\room\Objects[11], 0, CurveAngle(10, EntityYaw(e\room\Objects[11],0), 40), 0,False + #If e\EventState2=>1040 And e\EventState2-FPSfactor<1040 Then + #PlaySound2(LoadTempSound("SFX\SCP\1123\Officer1.ogg"), Camera, e\room\NPC[0]\obj) + #ElseIf e\EventState2=>1400 And e\EventState2-FPSfactor<1400 Then + #PlaySound2(LoadTempSound("SFX\SCP\1123\Officer2.ogg"), Camera, e\room\NPC[0]\obj) + #EndIf + #e\room\NPC[0]\State = 3 + #AnimateNPC(e\room\NPC[0],3,26,0.2,True) + #;Animate2(e\room\Objects[4], AnimTime(e\room\Objects[4]), 0, 8, 0.1, False) + #If EntityDistance(Collider, e\room\Objects[4])>392*RoomScale Then + #BlinkTimer = -10 + #BlurTimer = 500 + #PositionEntity Collider, EntityX(e\room\Objects[5],True),EntityY(e\room\Objects[5],True),EntityZ(e\room\Objects[5],True),True + #RotateEntity Collider, 0, EntityYaw(e\room\obj,True)+180, 0 + #ResetEntity(Collider) + #e\EventState = 3 + #EndIf + # + #EndIf + #ElseIf e\EventState=3 + #If e\room\RoomDoors[0]\openstate>160 Then + #If e\Sound=0 Then e\Sound = LoadSound_Strict("SFX\Music\1123.ogg") + #e\SoundCHN = PlaySound_Strict(e\Sound) + # + #PositionEntity e\room\NPC[0]\Collider, EntityX(e\room\Objects[7],True),EntityY(e\room\Objects[7],True),EntityZ(e\room\Objects[7],True) + #ResetEntity e\room\NPC[0]\Collider + # + #e\EventState=4 + #EndIf + #ElseIf e\EventState=4 + # + #;PointEntity e\room\NPC[1]\Collider, Collider + # + #TFormPoint EntityX(Collider),EntityY(Collider),EntityZ(Collider),0,e\room\obj + # + #If TFormedX()<256 And TFormedZ()>-480 Then + #e\room\RoomDoors[0]\open = False + #EndIf + # + #If EntityYaw(e\room\Objects[13],False)=0 Then + #DebugLog "aaaaaaaa" + #If EntityDistance(Collider, e\room\Objects[12])<1.0 Then + #DrawHandIcon = True + #If MouseHit1 Then + #RotateEntity e\room\Objects[13], 0, 1, 0, False + #RotateEntity e\room\Objects[11], 0, 90, 0, False + #PlaySound_Strict(LoadTempSound("SFX\SCP\1123\Horror.ogg")) + #EndIf + #EndIf + #Else + #DebugLog "bbbbbbb" + #RotateEntity e\room\Objects[13], 0, CurveAngle(90, EntityYaw(e\room\Objects[13], False), 40), 0 + #If EntityYaw(e\room\Objects[13], False)>30 Then + #e\room\NPC[0]\State = 3 + #PointEntity e\room\NPC[0]\Collider, Collider + #AnimateNPC(e\room\NPC[0], 27, 54, 0.5, False) + #If e\room\NPC[0]\Frame => 54 Then + #e\EventState = 5 + #e\EventState2 = 0 + #PositionEntity Collider, EntityX(e\room\obj,True),0.3,EntityZ(e\room\obj,True),True + #ResetEntity Collider + #BlinkTimer = -10 + #BlurTimer = 500 + #Injuries = 1.5 + #Bloodloss = 70 + #;PlaySound_Strict(LoadTempSound("SFX\Door\WoodenDoorClose.ogg")) + #EndIf + #EndIf + # + #EndIf + # + #;RemoveNPC(e\room\NPC[0]) + #;RemoveNPC(e\room\NPC[1]) + #;RemoveEvent(e) + #ElseIf e\EventState = 5 + #e\EventState2 = e\EventState2 + FPSfactor + #If e\EventState2 > 500 Then + #RotateEntity e\room\Objects[9],0,90,0,False + #RotateEntity e\room\Objects[13],0,0,0,False + # + #x = (EntityX(e\room\Objects[8], True)+EntityX(e\room\Objects[12], True))/2 + #y = EntityY(e\room\Objects[5], True) + #z = (EntityZ(e\room\Objects[8], True)+EntityZ(e\room\Objects[12], True))/2 + #PositionEntity Collider, x,y,z, True + #ResetEntity(Collider) + # + #x = (EntityX(Collider, True)+EntityX(e\room\Objects[12], True))/2 + #z = (EntityZ(Collider, True)+EntityZ(e\room\Objects[12], True))/2 + # + #PositionEntity e\room\NPC[0]\Collider, x,y+0.2,z + #ResetEntity e\room\NPC[0]\Collider + # + #Injuries = 1.5 + #Bloodloss = 70 + # + #BlinkTimer = -10 + # + #de.Decals = CreateDecal(3, EntityX(Collider), 512*RoomScale + 0.0005, EntityZ(Collider),90,Rnd(360),0) + #de\size = 0.5 : ScaleSprite de\obj, de\size, de\size + # + #e\room\NPC[0]\Sound = LoadSound_Strict("SFX\SCP\1123\Officer3.ogg") + # + #e\EventState = 6 + #EndIf + #ElseIf e\EventState = 6 + #PointEntity e\room\NPC[0]\Collider, Collider + #AnimateNPC(e\room\NPC[0], 75, 128, 0.04, True) + #If e\room\NPC[0]\Sound<>0 Then + #If e\room\NPC[0]\SoundChn<>0 Then + #If (Not ChannelPlaying(e\room\NPC[0]\SoundChn)) Then + #PlaySound_Strict(LoadTempSound("SFX\SCP\1123\Gunshot.ogg")) + #e\EventState = 7 + #FreeSound_Strict e\room\NPC[0]\Sound : e\room\NPC[0]\Sound=0 + #EndIf + #EndIf + # + #If e\room\NPC[0]\Sound<>0 Then e\room\NPC[0]\SoundChn = LoopSound2(e\room\NPC[0]\Sound, e\room\NPC[0]\SoundChn, Camera, e\room\NPC[0]\Collider, 7.0) + #EndIf + #ElseIf e\EventState=7 + #PositionEntity Collider, EntityX(e\room\obj,True),0.3,EntityZ(e\room\obj,True),True + #ResetEntity Collider + #ShowEntity Light + #LightFlash = 6 + #BlurTimer = 500 + #Injuries = PrevInjuries + #Bloodloss = PrevBloodloss + #SecondaryLightOn = PrevSecondaryLightOn + #RotateEntity e\room\Objects[9],0,0,0,False + # + #PrevInjuries = 0 + #PrevBloodloss = 0 + #PrevSecondaryLightOn = 0.0 + #Crouch = False + #CanSave = True + #For i = 0 To MaxItemAmount-1 + #If Inventory(i) <> Null Then + #If Inventory(i)\itemtemplate\name = "Leaflet" + #RemoveItem(Inventory(i)) + #Exit + #EndIf + #EndIf + #Next + # + #GiveAchievement(Achv1123) + # + #RemoveNPC(e\room\NPC[0]) + #RemoveEvent(e) + #End If + #EndIf + #;[End Block] + # + # + # + #Case "testroom" + #;[Block] + #If e <> Null Then + #If PlayerRoom = e\room Then + #If e\EventState = 0 Then + #e\room\Objects[7]=LoadAnimMesh_Strict("GFX\npcs\scp-1048.b3d") + #ScaleEntity e\room\Objects[7], 0.05,0.05,0.05 + # + #TFormPoint EntityX(Collider),EntityY(Collider),EntityZ(Collider),0,e\room\obj + #If TFormedZ()=0 Then temp = -1 Else temp = -Sgn(TFormedZ()) + #TFormPoint -720,0,816*temp,e\room\obj,0 + #PositionEntity(e\room\Objects[7],TFormedX(),0,TFormedZ()) + # + #RotateEntity e\room\Objects[7],-90,e\room\angle-90,0 + #SetAnimTime e\room\Objects[7],297 + #e\EventState = 1 + #EndIf + #If EntityDistance(Collider, e\room\Objects[6]) < 2.5 And e\EventState > 0 Then + #PlaySound_Strict(LoadTempSound("SFX\SCP\079\TestroomWarning.ogg")) + #For i = 0 To 5 + #em.Emitters = CreateEmitter(EntityX(e\room\Objects[i], True), EntityY(e\room\Objects[i], True), EntityZ(e\room\Objects[i], True), 0) + #TurnEntity(em\Obj, 90, 0, 0, True) + #;entityParent(em\obj, e\room\obj) + #em\RandAngle = 5 + #em\Speed = 0.042 + #em\SizeChange = 0.0025 + #Next + #;Delete e + #e\EventState = e\EventState * -1 + #EndIf + #If e\room\Objects[7]<>0 Then + #Animate2(e\room\Objects[7],AnimTime(e\room\Objects[7]),284,295,0.3) + #MoveEntity e\room\Objects[7],0,-0.008*FPSfactor,0 + #TFormPoint EntityX(e\room\Objects[7]),EntityY(e\room\Objects[7]),EntityZ(e\room\Objects[7]),0,e\room\obj + # + #If Abs(TFormedX())>725 Then + #FreeEntity(e\room\Objects[7]) + #e\room\Objects[7]=0 + #e\EventState = e\EventState *2 + #EndIf + #EndIf + #If e\EventState = -2 Then RemoveEvent(e) + #EndIf + #End If + #;[End Block] + #Case "tunnel2smoke" + #;[Block] + #If PlayerRoom = e\room Then + #If e\room\dist < 3.5 Then + #PlaySound2(BurstSFX, Camera, e\room\obj) + #For i = 0 To 1 + #em.Emitters = CreateEmitter(EntityX(e\room\Objects[i],True),EntityY(e\room\Objects[i],True), EntityZ(e\room\Objects[i],True),0) + #TurnEntity(em\Obj, 90, 0, 0, True) + #EntityParent(em\Obj, e\room\obj) + #em\Size = 0.05 + #em\RandAngle = 10 + #em\Speed = 0.06 + #em\SizeChange = 0.007 + #;EntityParent(em\Obj, e\room\obj) + # + #For z = 0 To Ceil(3.3333*(ParticleAmount+1)) + #p.Particles = CreateParticle(EntityX(em\Obj, True), 448*RoomScale, EntityZ(em\Obj, True), Rand(em\MinImage, em\MaxImage), em\Size, em\Gravity, em\LifeTime) + #p\speed = em\Speed + #RotateEntity(p\pvt, Rnd(360), Rnd(360), 0, True) + #p\size = 0.05 + #p\SizeChange = 0.008 + #Next + # + #Next + #RemoveEvent(e) + #End If + #EndIf + # + #;[End Block] + #Case "tunnel2" + #;[Block] + #If PlayerRoom = e\room Then + #If Curr173\Idle > 1 Then + #RemoveEvent(e) + #Exit + #Else + #If e\EventState = 0 Then + #If Distance(EntityX(Collider), EntityZ(Collider), EntityX(e\room\obj), EntityZ(e\room\obj)) < 3.5 Then + #PlaySound_Strict(LightSFX) + # + #LightBlink = Rnd(0.0,1.0)*(e\EventState/200) + #e\EventState = 1 + #End If + #End If + #EndIf + #EndIf + # + #If e\EventState > 0 And e\EventState < 200 Then + #BlinkTimer = -10 + #If e\EventState > 30 Then + #LightBlink = 1.0 + #If e\EventState-FPSfactor =< 30 Then + #PlaySound_Strict LoadTempSound("SFX\ambient\general\ambient3.ogg") + #EndIf + #EndIf + #If e\EventState-FPSfactor =< 100 And e\EventState > 100 Then + #PlaySound_Strict LoadTempSound("SFX\ambient\general\ambient6.ogg") + #PositionEntity(Curr173\Collider, EntityX(e\room\obj), 0.6, EntityZ(e\room\obj)) + #ResetEntity(Curr173\Collider) + #Curr173\Idle = True + #EndIf + #LightBlink = 1.0 + #e\EventState = e\EventState + FPSfactor + #ElseIf e\EventState <> 0 Then + #BlinkTimer = BLINKFREQ + # + #Curr173\Idle = False + #RemoveEvent(e) + #EndIf + #;[End Block] + #Case "tunnel106" + #;[Block] + #If e\EventState = 0 Then + #If e\room\dist < 5.0 And e\room\dist > 0 Then + #If Curr106\State >= 0 Then + #e\EventState = 1 + #Else + #If Curr106\State <= -10 And EntityDistance(Curr106\Collider,Collider)>5 And (Not EntityInView(Curr106\obj,Camera)) Then + #e\EventState = 1 + #e\EventState2 = 1 + #EndIf + #EndIf + #ElseIf Contained106 + #RemoveEvent(e) + #EndIf + #ElseIf e\EventState = 1 + # + #If e\room\dist < 3.0 Or Rand(7000)=1 Then + #e\EventState = 2 + #d.Decals = CreateDecal(0, EntityX(e\room\obj), 445.0*RoomScale, EntityZ(e\room\obj), -90, Rand(360), 0) + #d\Size = Rnd(0.5, 0.7) : EntityAlpha(d\obj, 0.7) : d\ID = 1 : ScaleSprite(d\obj, d\Size, d\Size) + #EntityAlpha(d\obj, Rnd(0.7, 0.85)) + # + #PlaySound_Strict HorrorSFX(10) + #ElseIf e\room\dist > 8.0 + #If Rand(5) = 1 Then + #Curr106\Idle = False + #RemoveEvent(e) + #Else + #Curr106\Idle = False + #Curr106\State = -10000 + #RemoveEvent(e) + #End If + #EndIf + #Else + #If e\EventState2 = 1 Then + #ShouldPlay = 10 + #EndIf + #e\EventState = e\EventState+FPSfactor + #If e\EventState <= 180 Then + #PositionEntity(Curr106\Collider, EntityX(e\room\obj, True), EntityY(Collider) + 1.0 - Min(Sin(e\EventState)*1.5,1.1), EntityZ(e\room\obj, True), True) + #PointEntity(Curr106\Collider, Camera) + #AnimateNPC(Curr106, 55, 104, 0.1) + #Curr106\Idle = True + #Curr106\State = 1 + #ResetEntity(Curr106\Collider) + #Curr106\DropSpeed = 0 + #PositionEntity(Curr106\obj, EntityX(Curr106\Collider), EntityY(Curr106\Collider) - 0.15, EntityZ(Curr106\Collider)) + #RotateEntity Curr106\obj, 0, EntityYaw(Curr106\Collider), 0 + #ShowEntity Curr106\obj + #ElseIf e\EventState > 180 And e\EventState < 300 Then + #Curr106\Idle = False + #Curr106\State = -10 + #PositionEntity(Curr106\Collider, EntityX(e\room\obj, True), -3.0, EntityZ(e\room\obj, True), True) + #Curr106\PathTimer = 70*10 + #Curr106\PathStatus = 0 + #Curr106\PathLocation = 0 + #de.Decals = CreateDecal(0, EntityX(e\room\obj, True), 0.01, EntityZ(e\room\obj, True), 90, Rand(360), 0) + #de\Size = 0.05 : de\SizeChange = 0.01 : EntityAlpha(de\obj, 0.8) : UpdateDecals + #e\EventState = 300 + #ElseIf e\EventState < 800 + #If EntityY(Curr106\Collider)>=EntityY(Collider)-0.05 Then + #RemoveEvent(e) + #Else + #TranslateEntity Curr106\Collider, 0, ((EntityY(Collider,True) - 0.11) - EntityY(Curr106\Collider)) / 50.0, 0 + #If EntityY(Curr106\Collider)<-0.1 Then + #Curr106\CurrSpeed = 0.0 + #EndIf + #EndIf + #Else + #RemoveEvent(e) + #EndIf + # + #EndIf + #;[End Block] + # + #Case "testroom173" + #;[Block] + #If PlayerRoom = e\room + #If Curr173\Idle = 0 Then + #If e\EventState = 0 Then + #If e\room\RoomDoors[0]\open = True + #PositionEntity(Curr173\Collider, EntityX(e\room\Objects[0], True), 0.5, EntityZ(e\room\Objects[0], True)) + #ResetEntity(Curr173\Collider) + #e\EventState = 1 + #EndIf + #Else + #If e\room\Objects[2]=0 + #Local Glasstex = LoadTexture_Strict("GFX\map\glass.png",1+2) + #e\room\Objects[2] = CreateSprite() + #EntityTexture(e\room\Objects[2],Glasstex) + #SpriteViewMode(e\room\Objects[2],2) + #ScaleSprite(e\room\Objects[2],182.0*RoomScale*0.5, 192.0*RoomScale*0.5) + #pvt% = CreatePivot(e\room\obj) + #;PositionEntity pvt%,-595.0,224.0,-208.0,False + #PositionEntity pvt%,-632.0,224.0,-208.0,False + #PositionEntity(e\room\Objects[2], EntityX(pvt,True), EntityY(pvt,True), EntityZ(pvt,True)) + #FreeEntity pvt + #RotateEntity e\room\Objects[2],0,e\room\angle,0 + #TurnEntity(e\room\Objects[2],0,180,0) + #EntityParent(e\room\Objects[2], e\room\obj) + #FreeTexture Glasstex + #EndIf + # + #ShowEntity (e\room\Objects[2]) + #;start a timer for 173 breaking through the window + #e\EventState = e\EventState + 1 + #dist# = EntityDistance(Collider, e\room\Objects[1]) + #If dist <1.0 Then + #;if close, increase the timer so that 173 is ready to attack + #e\EventState = Max(e\EventState, 70*12) + #ElseIf dist > 1.4 + #;if the player moves a bit further and blinks, 173 attacks + #If e\EventState > 70*12 And BlinkTimer =< -10 Then + #If (EntityDistance(Curr173\Collider, e\room\Objects[0]) > 5.0) Then + #;if 173 is far away from the room (perhaps because the player + #;left and 173 moved to some other room?) -> disable the event + #RemoveEvent(e) + #Else + #PlaySound2(LoadTempSound("SFX\General\GlassBreak.ogg"), Camera, Curr173\obj) + #FreeEntity(e\room\Objects[2]) + #e\room\Objects[2]=0 + #PositionEntity(Curr173\Collider, EntityX(e\room\Objects[1], True), 0.5, EntityZ(e\room\Objects[1], True)) + #ResetEntity(Curr173\Collider) + #RemoveEvent(e) + #EndIf + #EndIf + #EndIf + #End If + #EndIf + #End If + #;[End Block] + #Case "toiletguard" + #;[Block] + #If e\EventState = 0 Then + #If e\room\dist < 8.0 And e\room\dist > 0 Then e\EventState = 1 + #ElseIf e\EventState = 1 + #e\room\NPC[0]=CreateNPC(NPCtypeGuard, EntityX(e\room\Objects[1],True), EntityY(e\room\Objects[1],True)+0.5, EntityZ(e\room\Objects[1],True)) + #PointEntity e\room\NPC[0]\Collider, e\room\obj + #RotateEntity e\room\NPC[0]\Collider, 0, EntityYaw(e\room\NPC[0]\Collider)-20,0, True + # + #SetNPCFrame (e\room\NPC[0], 287) + #e\room\NPC[0]\State = 8 + # + #e\EventState = 2 + #Else + #If e\Sound = 0 Then e\Sound = LoadSound_Strict("SFX\Character\Guard\SuicideGuard1.ogg") + #If e\room\dist < 15.0 And e\room\dist >= 4.0 Then + #e\SoundCHN = LoopSound2(e\Sound, e\SoundCHN, Camera, e\room\NPC[0]\Collider, 15.0) + # + #ElseIf e\room\dist<4.0 And PlayerSoundVolume > 1.0 + #If e\EventState2=0 + #;Y=0.01 + #de.Decals = CreateDecal(3, EntityX(e\room\Objects[2],True), EntityY(e\room\Objects[2],True), EntityZ(e\room\Objects[2],True),0,e\room\angle+270,0) + #de\Size = 0.3 : ScaleSprite (de\obj, de\size, de\size) + # + #;de.Decals = CreateDecal(17, EntityX(e\room\Objects[2],True), 0.01, EntityZ(e\room\Objects[2],True),90,Rnd(360),0) + #;de\Size = 0.1 : de\maxsize = 0.45 : de\sizechange = 0.0002 : UpdateDecals() + # + #e\EventState2 = 1 + #EndIf + #If e\SoundCHN2 = 0 + #StopChannel(e\SoundCHN) + #FreeSound_Strict(e\Sound) + #e\room\NPC[0]\Sound = LoadSound_Strict("SFX\Character\Guard\SuicideGuard2.ogg") + #e\SoundCHN2 = PlaySound2(e\room\NPC[0]\Sound, Camera, e\room\NPC[0]\Collider, 15.0) + #EndIf + #UpdateSoundOrigin(e\SoundCHN2,Camera,e\room\NPC[0]\Collider,15.0) + #If (Not ChannelPlaying(e\SoundCHN2)) Then RemoveEvent(e) + #EndIf + #EndIf + #;[End Block] + # + #Case "008" + #;[Block] + #If PlayerRoom = e\room Then + #GiveAchievement(Achv008)=True + #;container open + #If e\EventState = 0 Then + #If Curr173\Idle<2 And EntityDistance(Curr173\Collider,Collider)>HideDistance ;Just making sure that 173 is far away enough to spawn him to this room + #PositionEntity Curr173\Collider, EntityX(e\room\Objects[3],True),0.5,EntityZ(e\room\Objects[3],True),True + #ResetEntity Curr173\Collider + #EndIf + #e\EventState = 1 + #ElseIf e\EventState = 1 + #e\SoundCHN = LoopSound2(AlarmSFX(0), e\SoundCHN, Camera, e\room\Objects[0], 5.0) + # + #If (MilliSecs2() Mod 1000)<500 Then + #ShowEntity e\room\Objects[5] + #Else + #HideEntity e\room\Objects[5] + #EndIf + # + #dist = EntityDistance(Collider, e\room\Objects[0]) + #If dist<2.0 Then + #e\room\RoomDoors[0]\locked = True + #e\room\RoomDoors[1]\locked = True + # + #If e\EventState2=0 Then + #ShowEntity e\room\Objects[2] + #If EntityDistance(Curr173\Collider,e\room\Objects[4])<3.0 + #If (BlinkTimer<-10 Or (Not EntityInView(Curr173\obj,Camera))) And Curr173\Idle = 0 Then + #PositionEntity Curr173\Collider, EntityX(e\room\Objects[4],True),0.5,EntityZ(e\room\Objects[4],True),True + #ResetEntity Curr173\Collider + # + #HideEntity e\room\Objects[2] + # + #If (Not WearingHazmat) Then + #Injuries=Injuries+0.1 + #If Infect=0 Then Infect=1 + #Msg = "The window shattered and a piece of glass cut your arm." + #MsgTimer = 70*8 + #EndIf + # + #PlaySound2(LoadTempSound("SFX\General\GlassBreak.ogg"), Camera, e\room\Objects[0]) + # + #e\EventState2=1 + #EndIf + #EndIf + #EndIf + # + #If dist<1.0 Then + #If EntityInView(e\room\Objects[0], Camera) Then + #DrawHandIcon = True + # + #If MouseDown1 Then + #DrawArrowIcon(2) = True + #RotateEntity(e\room\Levers[0], Max(Min(EntityPitch(e\room\Levers[0])+Max(Min(-mouse_y_speed_1,10.0),-10), 89), 35), EntityYaw(e\room\Levers[0]), 0) + #EndIf + #EndIf + #EndIf + # + #If (Not WearingHazmat) And Bloodloss>0.0 + #If Infect=0 + #Infect=1 + #DebugLog "Infected player" + #EndIf + #EndIf + #EndIf + # + #If EntityPitch(e\room\Levers[0],True)<40 Then + #e\EventState = 2 + #PlaySound_Strict LeverSFX + #Else + #p.Particles = CreateParticle(EntityX(e\room\Objects[0],True),EntityY(e\room\Objects[0],True),EntityZ(e\room\Objects[0],True), 6, 0.02, -0.12) + #RotateEntity (p\pvt,-90,0,0,True) + #TurnEntity(p\pvt, Rnd(-26,26), Rnd(-26,26), Rnd(360)) + # + #p\SizeChange = 0.012 + #p\Achange = -0.015 + #EndIf + #Else + #HideEntity e\room\Objects[5] + #e\room\RoomDoors[0]\locked = False + #e\room\RoomDoors[1]\locked = False + #e\room\RoomDoors[2]\locked = False + # + #RotateEntity (e\room\Levers[0],CurveAngle(1,EntityPitch(e\room\Levers[0],True),15.0),EntityYaw(e\room\Levers[0],True),0,True) + # + #If EntityPitch(e\room\Levers[0],True)=<1.0 Then + #RemoveEvent(e) + #EndIf + #EndIf + #EndIf + #;[End Block] + #Case "106victim" + #;[Block] + #If (Not Contained106) Then + #If PlayerRoom = e\room Then + #If e\EventState = 0 Then + #de.Decals = CreateDecal(0, EntityX(e\room\obj), 799.0*RoomScale, EntityZ(e\room\obj), -90, Rand(360), 0) + #de\Size = 0.05 : de\SizeChange = 0.0015 : EntityAlpha(de\obj, 0.8) : UpdateDecals() + #PlaySound2(DecaySFX(3), Camera, de\obj, 15.0) + #e\EventState=1 + #EndIf + #EndIf + # + #If e\EventState > 0 Then + #If e\room\NPC[0]=Null Then + #e\EventState=e\EventState+FPSfactor + #EndIf + #If e\EventState>200 Then + #If e\room\NPC[0]=Null Then + #e\room\NPC[0]=CreateNPC(NPCtypeD, EntityX(e\room\obj), 900.0*RoomScale, EntityZ(e\room\obj)) + #RotateEntity e\room\NPC[0]\Collider, 0, Rnd(360), 0, True + #ChangeNPCTextureID(e\room\NPC[0],5) + #e\room\NPC[0]\State=6 + # + #PlaySound_Strict HorrorSFX(0) + #PlaySound2(DecaySFX(2), Camera, e\room\NPC[0]\Collider, 15.0) + #EndIf + # + #e\room\NPC[0]\FallingPickDistance = 0.0 + #EntityType e\room\NPC[0]\Collider,HIT_PLAYER + #If EntityY(e\room\NPC[0]\Collider)>0.35 Then + #AnimateNPC(e\room\NPC[0], 1, 10, 0.12, False) + #dist# = EntityDistance(Collider,e\room\NPC[0]\Collider) + #If dist<0.8 Then ;get the player out of the way + #fdir# = point_direction(EntityX(Collider,True),EntityZ(Collider,True),EntityX(e\room\NPC[0]\Collider,True),EntityZ(e\room\NPC[0]\Collider,True)) + #TranslateEntity Collider,Cos(-fdir+90)*(dist-0.8)*(dist-0.8),0,Sin(-fdir+90)*(dist-0.8)*(dist-0.8) + #EndIf + # + #If EntityY(e\room\NPC[0]\Collider)>0.6 Then EntityType e\room\NPC[0]\Collider,0 + #Else + #e\EventState=e\EventState+FPSfactor + #AnimateNPC(e\room\NPC[0], 11, 19, 0.25, False) + #If e\Sound=0 Then + #;e\Sound = LoadSound("SFX\General\BodyFall.ogg") + #LoadEventSound(e,"SFX\General\BodyFall.ogg") + #PlaySound_Strict e\Sound + # + #de.Decals = CreateDecal(0, EntityX(e\room\obj), 0.001, EntityZ(e\room\obj), 90, Rand(360), 0) + #de\Size = 0.4 : EntityAlpha(de\obj, 0.8) : UpdateDecals() + #EndIf + # + #If e\EventState>400 Then + #If e\Sound<>0 Then FreeSound_Strict e\Sound : e\Sound=0 + #RemoveEvent(e) + #EndIf + #EndIf + # + #EndIf + #EndIf + # + #EndIf + # + #;[End Block] + #Case "106sinkhole" + #;[Block] + #If e\EventState=0 Then + #de.Decals = CreateDecal(0, EntityX(e\room\obj)+Rnd(-0.5,0.5), 0.01, EntityZ(e\room\obj)+Rnd(-0.5,0.5), 90, Rand(360), 0) + #de\Size = 2.5 : ScaleSprite(de\obj, de\Size, de\Size); + # + #e\EventState=1 + #ElseIf PlayerRoom = e\room + #If e\Sound=0 Then + #e\Sound=LoadSound_Strict("SFX\Room\Sinkhole.ogg") + #Else + #e\SoundCHN = LoopSound2(e\Sound, e\SoundCHN, Camera, e\room\obj, 4.5, 1.5) + #EndIf + #dist = Distance(EntityX(Collider),EntityZ(Collider),EntityX(e\room\obj),EntityZ(e\room\obj)) + #If dist < 2.0 Then + #CurrStepSFX=1 + #CurrSpeed = CurveValue(0.0, CurrSpeed, Max(dist*50,1.0)) + #CrouchState = (2.0-dist)/2.0 + # + #If dist<0.5 Then + #If e\EventState2 = 0 Then + #PlaySound_Strict(LoadTempSound("SFX\Room\SinkholeFall.ogg")) + #EndIf + # + #CurrSpeed = CurveValue(0.0, CurrSpeed, Max(dist*50,1.0)) + # + #x = CurveValue(EntityX(e\room\obj),EntityX(Collider),10.0) + #y = CurveValue(EntityY(e\room\obj)-e\EventState2,EntityY(Collider),25.0) + #z = CurveValue(EntityZ(e\room\obj),EntityZ(Collider),10.0) + #PositionEntity Collider, x, y, z, True + # + #DropSpeed = 0 + # + #ResetEntity Collider + # + #e\EventState2=Min(e\EventState2+FPSfactor/200.0,2.0) + # + #LightBlink = Min(e\EventState2*5,10.0) + #BlurTimer = e\EventState2*500 + # + #If e\EventState2 = 2.0 Then MoveToPocketDimension() + #EndIf + #EndIf + #Else + #e\EventState2=0 + #EndIf + # + #;[End Block] + # + #Case "682roar" + #;[Block] + #If e\EventState = 0 Then + #If PlayerRoom = e\room Then e\EventState = 70 * Rand(300,1000) + #ElseIf PlayerRoom\RoomTemplate\Name <> "pocketdimension" And PlayerRoom\RoomTemplate\Name <> "room860" And PlayerRoom\RoomTemplate\Name <> "room1123" And PlayerRoom\RoomTemplate\Name <> "dimension1499" + #e\EventState = e\EventState-FPSfactor + # + #If e\EventState < 17*70 Then + #If e\EventState+FPSfactor => 17*70 Then LoadEventSound(e,"SFX\SCP\682\Roar.ogg") : e\SoundCHN = PlaySound_Strict(e\Sound) ;e\Sound = LoadSound_Strict("SFX\SCP\682\Roar.ogg") + #If e\EventState > 17*70 - 3*70 Then CameraShake = 0.5 + #If e\EventState < 17*70 - 7.5*70 And e\EventState > 17*70 - 11*70 Then CameraShake = 2.0 + #If e\EventState < 70 Then + #If e\Sound<>0 Then FreeSound_Strict (e\Sound) + #RemoveEvent(e) + #EndIf + #EndIf + #EndIf + #;[End Block] + # + #Case "914" + #;[Block] + #If PlayerRoom = e\room Then + #;GiveAchievement(Achv914) + # + #If e\room\RoomDoors[2]\open + #GiveAchievement(Achv914) + #e\EventState2=1 + #EndIf + # + #If e\EventState2=1 + #ShouldPlay = 22 + #EndIf + # + #EntityPick(Camera, 1.0) + #If PickedEntity() = e\room\Objects[0] Then + #DrawHandIcon = True + #If MouseHit1 Then GrabbedEntity = e\room\Objects[0] + #ElseIf PickedEntity() = e\room\Objects[1] + #DrawHandIcon = True + #If MouseHit1 Then GrabbedEntity = e\room\Objects[1] + #EndIf + # + #If MouseDown1 Or MouseHit1 Then + #If GrabbedEntity <> 0 Then ;avain + #If GrabbedEntity = e\room\Objects[0] Then + #If e\EventState = 0 Then + #DrawHandIcon = True + #TurnEntity(GrabbedEntity, 0, 0, -mouse_x_speed_1 * 2.5) + # + #angle = WrapAngle(EntityRoll(e\room\Objects[0])) + #If angle > 181 Then DrawArrowIcon(3) = True + #DrawArrowIcon(1) = True + # + #If angle < 90 Then + #RotateEntity(GrabbedEntity, 0, 0, 361.0) + #ElseIf angle < 180 + #RotateEntity(GrabbedEntity, 0, 0, 180) + #EndIf + # + #If angle < 181 And angle > 90 Then + #For it.Items = Each Items + #If it\collider <> 0 And it\Picked = False Then + #If Abs(EntityX(it\collider) - (e\room\x - 712.0 * RoomScale)) < 200.0 Then + #If Abs(EntityY(it\collider) - (e\room\y + 648.0 * RoomScale)) < 104.0 Then + #e\EventState = 1 + #e\SoundCHN = PlaySound2(MachineSFX, Camera, e\room\Objects[1]) + #e\room\RoomDoors[1]\SoundCHN = PlaySound2(LoadTempSound("SFX\SCP\914\DoorClose.ogg"), Camera, e\room\RoomDoors[1]\obj) + #Exit + #EndIf + #End If + #End If + #Next + #EndIf + #End If + #ElseIf GrabbedEntity = e\room\Objects[1] + #If e\EventState = 0 Then + #DrawHandIcon = True + #TurnEntity(GrabbedEntity, 0, 0, -mouse_x_speed_1 * 2.5) + # + #angle# = WrapAngle(EntityRoll(e\room\Objects[1])) + #DrawArrowIcon(3) = True + #DrawArrowIcon(1) = True + # + #If angle > 90 Then + #If angle < 180 Then + #RotateEntity(GrabbedEntity, 0, 0, 90.0) + #ElseIf angle < 270 + #RotateEntity(GrabbedEntity, 0, 0, 270) + #EndIf + #EndIf + # + #End If + #End If + #End If + #Else + #GrabbedEntity = 0 + #End If + # + #Local setting$ = "" + # + #If GrabbedEntity <> e\room\Objects[1] Then + #angle# = WrapAngle(EntityRoll(e\room\Objects[1])) + #If angle < 22.5 Then + #angle = 0 + #setting = "1:1" + #ElseIf angle < 67.5 + #angle = 40 + #setting = "coarse" + #ElseIf angle < 180 + #angle = 90 + #setting = "rough" + #ElseIf angle > 337.5 + #angle = 359 - 360 + #setting = "1:1" + #ElseIf angle > 292.5 + #angle = 320 - 360 + #setting = "fine" + #Else + #angle = 270 - 360 + #setting = "very fine" + #End If + #RotateEntity(e\room\Objects[1], 0, 0, CurveValue(angle, EntityRoll(e\room\Objects[1]), 20)) + #EndIf + # + #For i% = 0 To 1 + #If GrabbedEntity = e\room\Objects[i] Then + #If Not EntityInView(e\room\Objects[i], Camera) Then + #GrabbedEntity = 0 + #ElseIf EntityDistance(e\room\Objects[i], Camera) > 1.0 + #GrabbedEntity = 0 + #End If + #End If + #Next + # + #If e\EventState > 0 Then + #e\EventState = e\EventState + FPSfactor + # + # + #e\room\RoomDoors[1]\open = False + #If e\EventState > 70 * 2 Then + #If e\room\RoomDoors[0]\open=True Then + #e\room\RoomDoors[0]\SoundCHN = PlaySound2(LoadTempSound("SFX\SCP\914\DoorClose.ogg"), Camera, e\room\RoomDoors[0]\obj) + #EndIf + # + #e\room\RoomDoors[0]\open = False + #EndIf + # + #If Distance(EntityX(Collider), EntityZ(Collider), EntityX(e\room\Objects[2], True), EntityZ(e\room\Objects[2], True)) < (170.0 * RoomScale) Then + # + #If setting = "rough" Or setting = "coarse" Then + #If e\EventState > 70 * 2.6 And e\EventState - FPSfactor2 < 70 * 2.6 Then PlaySound_Strict Death914SFX + #EndIf + # + #If e\EventState > 70 * 3 Then + #Select setting + #Case "rough" + #KillTimer = Min(-1, KillTimer) + #BlinkTimer = -10 + #If e\SoundCHN <> 0 Then StopChannel e\SoundCHN + #DeathMSG = Chr(34)+"A heavily mutilated corpse found inside the output booth of SCP-914. DNA testing identified the corpse as Class D Subject D-9341. " + #DeathMSG = DeathMSG + "The subject had obviously been "+Chr(34)+"refined"+Chr(34)+" by SCP-914 on the "+Chr(34)+"Rough"+Chr(34)+" setting, but we are still confused as to how he " + #DeathMSG = DeathMSG + "ended up inside the intake booth and who or what wound the key."+Chr(34) + #Case "coarse" + #BlinkTimer = -10 + #If e\EventState - FPSfactor2 < 70 * 3 Then PlaySound_Strict Use914SFX + #Case "1:1" + #BlinkTimer = -10 + #If e\EventState - FPSfactor2 < 70 * 3 Then PlaySound_Strict Use914SFX + #Case "fine", "very fine" + #BlinkTimer = -10 + #If e\EventState - FPSfactor2 < 70 * 3 Then PlaySound_Strict Use914SFX + #End Select + #End If + #EndIf + # + #If e\EventState > (6 * 70) Then + #RotateEntity(e\room\Objects[0], EntityPitch(e\room\Objects[0]), EntityYaw(e\room\Objects[0]), CurveAngle(0, EntityRoll(e\room\Objects[0]),10.0)) + #Else + #RotateEntity(e\room\Objects[0], EntityPitch(e\room\Objects[0]), EntityYaw(e\room\Objects[0]), 180) + #EndIf + # + #If e\EventState > (12 * 70) Then + #For it.Items = Each Items + #If it\collider <> 0 And it\Picked = False Then + #If Distance(EntityX(it\collider), EntityZ(it\collider), EntityX(e\room\Objects[2], True), EntityZ(e\room\Objects[2], True)) < (180.0 * RoomScale) Then + #Use914(it, setting, EntityX(e\room\Objects[3], True), EntityY(e\room\Objects[3], True), EntityZ(e\room\Objects[3], True)) + # + #End If + #End If + #Next + # + #If Distance(EntityX(Collider), EntityZ(Collider), EntityX(e\room\Objects[2], True), EntityZ(e\room\Objects[2], True)) < (160.0 * RoomScale) Then + #Select setting + #Case "coarse" + #Injuries = 4.0 + #Msg = "You notice countless small incisions all around your body. They are bleeding heavily." + #MsgTimer = 70*8 + #Case "1:1" + #InvertMouse = (Not InvertMouse) + #Case "fine", "very fine" + #SuperMan = True + #End Select + #BlurTimer = 1000 + #PositionEntity(Collider, EntityX(e\room\Objects[3], True), EntityY(e\room\Objects[3], True) + 1.0, EntityZ(e\room\Objects[3], True)) + #ResetEntity(Collider) + #DropSpeed = 0 + #EndIf + # + #e\room\RoomDoors[0]\open = True + #e\room\RoomDoors[1]\open = True + #RotateEntity(e\room\Objects[0], 0, 0, 0) + #e\EventState = 0 + # + #Local opensfx914 = LoadTempSound("SFX\SCP\914\DoorOpen.ogg") + #e\room\RoomDoors[0]\SoundCHN = PlaySound2(opensfx914, Camera, e\room\RoomDoors[0]\obj) + #e\room\RoomDoors[1]\SoundCHN = PlaySound2(opensfx914, Camera, e\room\RoomDoors[1]\obj) + #End If + #End If + # + #EndIf + #UpdateSoundOrigin(e\SoundCHN,Camera,e\room\Objects[1]) + #;[End Block] + #Case "1048a" + #;[Block] + # + #If e\room\Objects[0]=0 Then + #If PlayerRoom<>e\room And BlinkTimer<-10 Then + #dist = Distance(EntityX(Collider),EntityZ(Collider), EntityX(e\room\obj),EntityZ(e\room\obj)) + #If (dist<16.0) Then + #For e2.Events = Each Events + #If e2\EventName = e\EventName Then + #If e2\room <> e\room Then + #If e2\room\Objects[0]<>0 Then + #e\room\Objects[0]=CopyEntity(e2\room\Objects[0]) + #Exit + #EndIf + #EndIf + #EndIf + #Next + #If e\room\Objects[0]=0 Then + #e\room\Objects[0] = LoadAnimMesh_Strict("GFX\npcs\scp-1048a.b3d") + #EndIf + #ScaleEntity e\room\Objects[0], 0.05,0.05,0.05 + #SetAnimTime(e\room\Objects[0], 2) + #PositionEntity(e\room\Objects[0], EntityX(e\room\obj), 0.0, EntityZ(e\room\obj)) + # + #RotateEntity(e\room\Objects[0], -90.0, Rnd(0.0, 360.0), 0.0) + # + #e\Sound = LoadSound_Strict("SFX\SCP\1048A\Shriek.ogg") + #e\Sound2 = LoadSound_Strict("SFX\SCP\1048A\Growth.ogg") + # + #e\EventState = 1 + #EndIf + #EndIf + #Else + #e\EventState3 = 1 + #Select e\EventState + #Case 1 + #Animate2(e\room\Objects[0], AnimTime(e\room\Objects[0]), 2.0, 395.0, 1.0) + # + #If (EntityDistance(Collider, e\room\Objects[0])<2.5) Then e\EventState = 2 + #Case 2 + #Local prevFrame# = AnimTime(e\room\Objects[0]) + #Animate2(e\room\Objects[0], prevFrame, 2.0, 647.0, 1.0, False) + # + #If (prevFrame <= 400.0 And AnimTime(e\room\Objects[0])>400.0) Then + #e\SoundCHN = PlaySound_Strict(e\Sound) + #EndIf + # + #Local volume# = Max(1.0 - Abs(prevFrame - 600.0)/100.0, 0.0) + # + #BlurTimer = volume*1000.0 + #CameraShake = volume*10.0 + # + #PointEntity(e\room\Objects[0], Collider) + #RotateEntity(e\room\Objects[0], -90.0, EntityYaw(e\room\Objects[0]), 0.0) + # + #If (prevFrame>646.0) Then + #If (PlayerRoom = e\room) Then + #e\EventState = 3 + #PlaySound_Strict e\Sound2 + # + #Msg = "Something is growing all around your body." + #MsgTimer = 70.0 * 3.0 + #Else + #e\EventState3 = 70*30 + #EndIf + #EndIf + #Case 3 + #e\EventState2 = e\EventState2 + FPSfactor + # + #BlurTimer = e\EventState2*2.0 + # + #If (e\EventState2>250.0 And e\EventState2-FPSfactor <= 250.0) Then + #Select Rand(3) + #Case 1 + #Msg = "Ears are growing all over your body." + #Case 2 + #Msg = "Ear-like organs are growing all over your body." + #Case 3 + #Msg = "Ears are growing all over your body. They are crawling on your skin." + #End Select + # + #MsgTimer = 70.0 * 3.0 + #Else If (e\EventState2>600.0 And e\EventState2-FPSfactor <= 600.0) + #Select Rand(4) + #Case 1 + #Msg = "It is becoming difficult to breathe." + #Case 2 + #Msg = "You have excellent hearing now. Also, you are dying." + #Case 3 + #Msg = "The ears are growing inside your body." + #Case 4 + #Msg = Chr(34)+"Can't... Breathe..."+Chr(34) + #End Select + # + #MsgTimer = 70.0 * 5.0 + #EndIf + # + #If (e\EventState2>70*15) Then + #DeathMSG = "A dead body covered in ears was found in [REDACTED]. Subject was presumably attacked by an instance of SCP-1048-A and suffocated to death by the ears. " + #DeathMSG = DeathMSG + "Body was sent for autopsy." + #Kill() + #e\EventState = 4 + #RemoveEvent(e) + #EndIf + #End Select + # + #If (e <> Null) Then + #If PlayerRoom <> e\room Then + #If e\EventState3>0 Then + #e\EventState3 = e\EventState3+FPSfactor + # + #If e\EventState3>70*25 Then + #FreeEntity(e\room\Objects[0]) + #e\room\Objects[0]=0 + #RemoveEvent(e) + #EndIf + #EndIf + #EndIf + #EndIf + #EndIf + # + #;[End Block] + #;New Events in SCP:CB version 1.3 - ENDSHN + #Case "room4tunnels" + #;[Block] + #If e\room\dist < 10.0 And e\room\dist > 0 Then + #e\room\NPC[0]=CreateNPC(NPCtypeD, EntityX(e\room\obj,True)+1.0, 0.5, EntityZ(e\room\obj,True)+1.0) + #e\room\NPC[0]\texture = "GFX\npcs\body1.jpg" + #tex = LoadTexture_Strict(e\room\NPC[0]\texture) + #EntityTexture(e\room\NPC[0]\obj, tex) + #FreeTexture tex + #;EntityTexture e\room\NPC[0]\obj,NTF_BodyTextures(0) + # + #RotateEntity e\room\NPC[0]\Collider, 0, EntityYaw(e\room\obj)-(Rand(20,60)),0, True + # + #SetNPCFrame e\room\NPC[0], 19 + #e\room\NPC[0]\State=8 + # + #;Delete e + #RemoveEvent(e) + #EndIf + #;[End Block] + #Case "room2gw_b" + #;[Block] + #If e\room\dist < 8 + #If e\EventState = 0 Then + #e\room\NPC[0]=CreateNPC(NPCtypeGuard, EntityX(e\room\Objects[2],True), EntityY(e\room\Objects[2],True)+0.5, EntityZ(e\room\Objects[2],True)) + #PointEntity e\room\NPC[0]\Collider, e\room\obj + #RotateEntity e\room\NPC[0]\Collider, 0, EntityYaw(e\room\NPC[0]\Collider),0, True + #SetNPCFrame(e\room\NPC[0], 288) + #e\room\NPC[0]\State = 8 + # + #e\EventState = 1 + #EndIf + # + #;WIP + #p.Particles = CreateParticle(EntityX(e\room\Objects[0],True), EntityY(e\room\Objects[0],True), EntityZ(e\room\Objects[0],True), 6, 0.2, 0, 10) + #p\speed = 0.01 + #RotateEntity(p\pvt, -60, e\room\angle-90, 0) + # + #p\Achange = -0.02 + # + #e\SoundCHN = LoopSound2(AlarmSFX(3),e\SoundCHN,Camera,e\room\Objects[3],5) + #EndIf + #;[End Block] + #Case "room2scps2" + #;[Block] + #;If PlayerRoom = e\room + #If e\room\dist < 15 + #If Contained106 Then e\EventState = 2.0 + #If Curr106\State < 0 Then e\EventState = 2.0 + # + #If e\EventState < 2.0 + #If e\EventState = 0.0 + #LoadEventSound(e,"SFX\Character\Scientist\EmilyScream.ogg") + #e\SoundCHN = PlaySound2(e\Sound, Camera, e\room\Objects[0], 100, 1.0) + #de.Decals = CreateDecal(0, EntityX(e\room\Objects[0],True), e\room\y+2.0*RoomScale, EntityZ(e\room\Objects[0],True), 90, Rand(360), 0) + #de\Size = 0.5 : EntityAlpha(de\obj, 0.8) + #EntityFX de\obj,1 + #e\EventState = 1.0 + #ElseIf e\EventState = 1.0 + #If (Not ChannelPlaying(e\SoundCHN)) + #e\EventState = 2.0 + #e\room\RoomDoors[0]\locked = False + #Else + #UpdateSoundOrigin(e\SoundCHN,Camera,e\room\Objects[0],100,1.0) + #EndIf + #EndIf + #Else + #DebugLog "Removed 'room2scps2' event" + #e\room\RoomDoors[0]\locked = False + #de.Decals = CreateDecal(0, EntityX(e\room\Objects[0],True), e\room\y+2.0*RoomScale, EntityZ(e\room\Objects[0],True), 90, Rand(360), 0) + #de\Size = 0.5 : EntityAlpha(de\obj, 0.8) + #EntityFX de\obj,1 + #RemoveEvent(e) + #EndIf + #EndIf + #;[End Block] + #Case "room1162" + #;[Block] + #;e\EventState = A variable to determine the "nostalgia" items + #;- 0.0 = No nostalgia item + #;- 1.0 = Lost key + #;- 2.0 = Disciplinary Hearing DH-S-4137-17092 + #;- 3.0 = Coin + #;- 4.0 = Movie Ticket + #;- 5.0 = Old Badge + #;e\EventState2 = Defining which slot from the Inventory should be picked + #;e\EventState3 = A check for if a item should be removed + #;- 0.0 = no item "trade" will happen + #;- 1.0 = item "trade" will happen + #;- 2.0 = the player doesn't has any items in the Inventory, giving him heavily Injuries and giving him a random item + #;- 3.0 = player got a memorial item (to explain a bit D-9341's background) + #;- 3.1 = player got a memorial item + injuries (because he didn't had any item in his inventory before) + #If PlayerRoom = e\room + # + #GrabbedEntity = 0 + # + #e\EventState = 0 + # + #Local Pick1162% = True + #Local pp% = CreatePivot(e\room\obj) + #PositionEntity pp,976,128,-640,False + # + #For it.Items = Each Items + #If (Not it\Picked) + #If EntityDistance(it\collider,e\room\Objects[0])<0.75 + #Pick1162% = False + #EndIf + #EndIf + #Next + # + #If EntityDistance(e\room\Objects[0],Collider)<0.75 And Pick1162% + #DrawHandIcon = True + #If MouseHit1 Then GrabbedEntity = e\room\Objects[0] + #EndIf + # + #If GrabbedEntity <> 0 + #e\EventState2 = Rand(0,MaxItemAmount-1) + #If Inventory(e\EventState2)<>Null + #;randomly picked item slot has an item in it, using this slot + #e\EventState3 = 1.0 + #DebugLog "pick1" + #Else + #;randomly picked item slot is empty, getting the first available slot + #For i = 0 To MaxItemAmount-1 + #Local isSlotEmpty% = (Inventory((i+e\EventState2) Mod MaxItemAmount) = Null) + # + #If (Not isSlotEmpty) Then + #;successful + #e\EventState2 = (i+e\EventState2) Mod MaxItemAmount + #EndIf + # + #If Rand(8)=1 Then + #If isSlotEmpty Then + #e\EventState3 = 3.1 + #Else + #e\EventState3 = 3.0 + #EndIf + # + #e\EventState = Rand(1,5) + # + #;Checking if the selected nostalgia item already exists or not + #Local itemName$ = "" + #Select (e\EventState) + #Case 1 + #itemName = "Lost Key" + #Case 2 + #itemName = "Disciplinary Hearing DH-S-4137-17092" + #Case 3 + #itemName = "Coin" + #Case 4 + #itemName = "Movie Ticket" + #Case 5 + #itemName = "Old Badge" + #End Select + # + #Local itemExists% = False + #For it.Items = Each Items + #If (it\name = itemName) Then + #itemExists = True + #e\EventState3 = 1.0 + #e\EventState = 0.0 + #Exit + #EndIf + #Next + # + #If ((Not itemExists) And (Not isSlotEmpty)) Exit + #Else + #If isSlotEmpty Then + #e\EventState3 = 2.0 + #Else + #e\EventState3 = 1.0 + #Exit + #EndIf + #EndIf + #Next + #EndIf + #EndIf + # + # + #;trade successful + #If e\EventState3 = 1.0 + #Local shouldCreateItem% = False + # + #For itt.ItemTemplates = Each ItemTemplates + #If (IsItemGoodFor1162(itt)) Then + #Select Inventory(e\EventState2)\itemtemplate\tempname + #Case "key" + #If itt\tempname = "key1" Or itt\tempname = "key2" And Rand(2)=1 + #shouldCreateItem = True + #DebugLog "lostkey" + #EndIf + #Case "paper","oldpaper" + #If itt\tempname = "paper" And Rand(12)=1 Then + #shouldCreateItem = True + #DebugLog "paper" + #EndIf + #Case "gasmask","gasmask3","supergasmask","hazmatsuit","hazmatsuit2","hazmatsuit3" + #If itt\tempname = "gasmask" Or itt\tempname = "gasmask3" Or itt\tempname = "supergasmask" Or itt\tempname = "hazmatsuit" Or itt\tempname = "hazmatsuit2" Or itt\tempname = "hazmatsuit3" And Rand(2)=1 + #shouldCreateItem = True + #DebugLog "gasmask hazmat" + #EndIf + #Case "key1","key2","key3" + #If itt\tempname = "key1" Or itt\tempname = "key2" Or itt\tempname = "key3" Or itt\tempname = "misc" And Rand(6)=1 + #shouldCreateItem = True + #DebugLog "key" + #EndIf + #Case "vest","finevest" + #If itt\tempname = "vest" Or itt\tempname = "finevest" And Rand(1)=1 + #shouldCreateItem = True + #DebugLog "vest" + #EndIf + #Default + #If itt\tempname = "misc" And Rand(6)=1 + #shouldCreateItem = True + #DebugLog "default" + #EndIf + #End Select + #EndIf + # + #If (shouldCreateItem) Then + #RemoveItem(Inventory(e\EventState2)) + #it=CreateItem(itt\name,itt\tempname,EntityX(pp,True),EntityY(pp,True),EntityZ(pp,True)) + #EntityType(it\collider, HIT_ITEM) + #PlaySound_Strict LoadTempSound("SFX\SCP\1162\Exchange"+Rand(0,4)+".ogg") + #e\EventState3 = 0.0 + # + # + #GiveAchievement(Achv1162) + #MouseHit1 = False + #Exit + #EndIf + #Next + #;trade not sucessful (player got in return to injuries a new item) + #ElseIf e\EventState3 = 2.0 + #Injuries = Injuries + 5.0 + #pvt = CreatePivot() + #PositionEntity pvt, EntityX(Collider),EntityY(Collider)-0.05,EntityZ(Collider) + #TurnEntity pvt, 90, 0, 0 + #EntityPick(pvt,0.3) + #de.decals = CreateDecal(3, PickedX(), PickedY()+0.005, PickedZ(), 90, Rand(360), 0) + #de\size = 0.75 : ScaleSprite de\obj, de\size, de\size + #FreeEntity pvt + #For itt.ItemTemplates = Each ItemTemplates + #If IsItemGoodFor1162(itt) And Rand(6)=1 + #it = CreateItem(itt\name, itt\tempname, EntityX(pp,True),EntityY(pp,True),EntityZ(pp,True)) + #EntityType(it\collider, HIT_ITEM) + #GiveAchievement(Achv1162) + #MouseHit1 = False + #e\EventState3 = 0.0 + #If Injuries > 15 + #DeathMSG = "A dead Class D subject was discovered within the containment chamber of SCP-1162." + #DeathMSG = DeathMSG + " An autopsy revealed that his right lung was missing, which suggests" + #DeathMSG = DeathMSG + " interaction with SCP-1162." + #PlaySound_Strict LoadTempSound("SFX\SCP\1162\BodyHorrorExchange"+Rand(1,4)+".ogg") + #LightFlash = 5.0 + #Kill() + #Else + #PlaySound_Strict LoadTempSound("SFX\SCP\1162\BodyHorrorExchange"+Rand(1,4)+".ogg") + #LightFlash = 5.0 + #Msg = "You feel a sudden overwhelming pain in your chest." + #MsgTimer = 70*5 + #EndIf + #Exit + #EndIf + #Next + #;trade with nostalgia item + #ElseIf e\EventState3 >= 3.0 + #If e\EventState3 < 3.1 + #PlaySound_Strict LoadTempSound("SFX\SCP\1162\Exchange"+Rand(0,4)+".ogg") + #RemoveItem(Inventory(e\EventState2)) + #Else + #Injuries = Injuries + 5.0 + #pvt = CreatePivot() + #PositionEntity pvt, EntityX(Collider),EntityY(Collider)-0.05,EntityZ(Collider) + #TurnEntity pvt, 90, 0, 0 + #EntityPick(pvt,0.3) + #de.decals = CreateDecal(3, PickedX(), PickedY()+0.005, PickedZ(), 90, Rand(360), 0) + #de\size = 0.75 : ScaleSprite de\obj, de\size, de\size + #FreeEntity pvt + #If Injuries > 15 + #DeathMSG = "A dead Class D subject was discovered within the containment chamber of SCP-1162." + #DeathMSG = DeathMSG + " An autopsy revealed that his right lung was missing, which suggests" + #DeathMSG = DeathMSG + " interaction with SCP-1162." + #PlaySound_Strict LoadTempSound("SFX\SCP\1162\BodyHorrorExchange"+Rand(1,4)+".ogg") + #LightFlash = 5.0 + #Kill() + #Else + #PlaySound_Strict LoadTempSound("SFX\SCP\1162\BodyHorrorExchange"+Rand(1,4)+".ogg") + #LightFlash = 5.0 + #Msg = "You notice something moving in your pockets and a sudden pain in your chest." + #MsgTimer = 70*5 + #EndIf + #e\EventState2 = 0.0 + #EndIf + #Select e\EventState + #Case 1 + #it = CreateItem("Lost Key","key",EntityX(pp,True),EntityY(pp,True),EntityZ(pp,True)) + #Case 2 + #it = CreateItem("Disciplinary Hearing DH-S-4137-17092","oldpaper",EntityX(pp,True),EntityY(pp,True),EntityZ(pp,True)) + #Case 3 + #it = CreateItem("Coin","coin",EntityX(pp,True),EntityY(pp,True),EntityZ(pp,True)) + #Case 4 + #it = CreateItem("Movie Ticket","ticket",EntityX(pp,True),EntityY(pp,True),EntityZ(pp,True)) + #Case 5 + #it = CreateItem("Old Badge","badge",EntityX(pp,True),EntityY(pp,True),EntityZ(pp,True)) + #End Select + #EntityType(it\collider, HIT_ITEM) + #GiveAchievement(Achv1162) + #MouseHit1 = False + #e\EventState3 = 0.0 + #EndIf + #FreeEntity pp + #EndIf + #;[End Block] + #Case "room_gw" + #;[Block] + #;e\EventState: Determines if the airlock is in operation or not + #;e\EventState2: The timer for the airlocks + #;e\EventState3: Checks if the player had left the airlock or not + # + #e\room\RoomDoors[0]\locked = True + #e\room\RoomDoors[1]\locked = True + # + #Local brokendoor% = False + #If e\room\Objects[1]<>0 Then brokendoor% = True + # + #If PlayerRoom = e\room + #If e\EventState = 0.0 + #If EntityDistance(e\room\Objects[0],Collider)<1.4 And e\EventState3 = 0.0 + #e\EventState = 1.0 + #If brokendoor + #If e\Sound2 <> 0 Then FreeSound_Strict(e\Sound2) : e\Sound2 = 0 + #e\Sound2 = LoadSound_Strict("SFX\Door\DoorSparks.ogg") + #e\SoundCHN2 = PlaySound2(e\Sound2,Camera,e\room\Objects[1],5) + #EndIf + #StopChannel e\SoundCHN + #e\SoundCHN = 0 + #If e\Sound <> 0 Then FreeSound_Strict(e\Sound) : e\Sound = 0 + #e\Sound = LoadSound_Strict("SFX\Door\Airlock.ogg") + #e\room\RoomDoors[0]\locked = False + #e\room\RoomDoors[1]\locked = False + #UseDoor(e\room\RoomDoors[0]) + #UseDoor(e\room\RoomDoors[1]) + #PlaySound_Strict(AlarmSFX(4)) + #ElseIf EntityDistance(e\room\Objects[0],Collider)>2.4 + #e\EventState3 = 0.0 + #EndIf + #Else + #If e\EventState2 < 70*7 + #e\EventState2 = e\EventState2 + FPSfactor + #e\room\RoomDoors[0]\open = False + #e\room\RoomDoors[1]\open = False + #If e\EventState2 < 70*1 + # + #If brokendoor + #pvt% = CreatePivot() + #Local d_ent% = e\room\Objects[1] + #PositionEntity(pvt, EntityX(d_ent%,True), EntityY(d_ent%,True)+Rnd(0.0,0.05), EntityZ(d_ent%,True)) + #RotateEntity(pvt, 0, EntityYaw(d_ent%,True)+90, 0) + #MoveEntity pvt,0,0,0.2 + # + #If ParticleAmount > 0 + #For i = 0 To (1+(2*(ParticleAmount-1))) + #p.Particles = CreateParticle(EntityX(pvt), EntityY(pvt), EntityZ(pvt), 7, 0.002, 0, 25) + #p\speed = Rnd(0.01,0.05) + #;RotateEntity(p\pvt, Rnd(-20, 20), Rnd(360), 0) + #RotateEntity(p\pvt, Rnd(-45,0), EntityYaw(pvt)+Rnd(-10.0,10.0), 0) + # + #p\size = 0.0075 + #ScaleSprite p\obj,p\size,p\size + # + #;EntityOrder p\obj,-1 + # + #p\Achange = -0.05 + #Next + #EndIf + # + #FreeEntity pvt + #EndIf + # + #ElseIf e\EventState2 > 70*3 And e\EventState < 70*5.5 + #pvt% = CreatePivot(e\room\obj) + #For i = 0 To 1 + #If e\room\RoomTemplate\Name$ = "room3gw" + #If i = 0 + #PositionEntity pvt%,-288.0,416.0,320.0,False + #Else + #PositionEntity pvt%,192.0,416.0,320.0,False + #EndIf + #Else + #If i = 0 + #PositionEntity pvt%,312.0,416.0,-128.0,False + #Else + #PositionEntity pvt%,312.0,416.0,224.0,False + #EndIf + #EndIf + # + #p.Particles = CreateParticle(EntityX(pvt,True), EntityY(pvt,True), EntityZ(pvt,True), 6, 0.8, 0, 50) + #p\speed = 0.025 + #RotateEntity(p\pvt, 90, 0, 0) + # + #p\Achange = -0.02 + #Next + # + #FreeEntity pvt + #If e\SoundCHN = 0 Then e\SoundCHN = PlaySound2(e\Sound,Camera,e\room\Objects[0],5) + #EndIf + #Else + #e\EventState = 0.0 + #e\EventState2 = 0.0 + #e\EventState3 = 1.0 + #If e\room\RoomDoors[0]\open = False + #e\room\RoomDoors[0]\locked = False + #e\room\RoomDoors[1]\locked = False + #UseDoor(e\room\RoomDoors[0]) + #UseDoor(e\room\RoomDoors[1]) + #EndIf + #EndIf + #EndIf + # + #If brokendoor + #If ChannelPlaying(e\SoundCHN2) + #UpdateSoundOrigin(e\SoundCHN2,Camera,e\room\Objects[1],5) + #EndIf + #EndIf + #If ChannelPlaying(e\SoundCHN) + #UpdateSoundOrigin(e\SoundCHN,Camera,e\room\Objects[0],5) + #EndIf + #Else + #e\EventState3 = 0.0 + #EndIf + #;[End Block] + #Case "room2sl" + #;[Block] + #;e\EventState: Determines if the player already entered the room or not (0 = No, 1 = Yes) + #;e\EventState2: Variable used for the SCP-049 event + #;e\EventState3: Checks if Lever is activated or not + # + #;Camera-Spawning Code + SCP-049-Spawning (will now be loaded in the QuickLoadEvents function) + #;[Block] + #If PlayerRoom = e\room + #If e\EventStr = "" And QuickLoadPercent = -1 + #QuickLoadPercent = 0 + #QuickLoad_CurrEvent = e + #e\EventStr = 0 + #EndIf + #EndIf + #;[End Block] + # + #;SCP-049 + #;[Block] + #If e\EventState = 1 + #If e\EventState2 < 0 + #If e\EventState2 = -(70*5) + #For sc.SecurityCams = Each SecurityCams + #If sc\room = e\room + #If EntityDistance(sc\ScrObj,Camera)<5.0 + #If EntityVisible(sc\ScrObj,Camera) + #e\EventState2 = Min(e\EventState2+FPSfactor,0) + #Exit + #EndIf + #EndIf + #EndIf + #Next + #Else + #e\EventState2 = Min(e\EventState2+FPSfactor,0) + #EndIf + #ElseIf e\EventState2 = 0 + #If e\room\NPC[0] <> Null + #;PositionEntity e\room\NPC[0]\Collider,EntityX(e\room\NPC[0]\Collider),EntityY(e\room\Objects[7],True),EntityZ(e\room\NPC[0]\Collider) + #Local AdjDist1# = 0.0 + #Local AdjDist2# = 0.0 + #Local Adj1% = -1 + #Local Adj2% = -1 + #For i = 0 To 3 + #If e\room\AdjDoor[i]<>Null + #If Adj1 = -1 + #AdjDist1# = EntityDistance(e\room\Objects[7],e\room\AdjDoor[i]\frameobj) + #Adj1 = i + #Else + #AdjDist2# = EntityDistance(e\room\Objects[7],e\room\AdjDoor[i]\frameobj) + #Adj2 = i + #EndIf + #EndIf + #Next + #If AdjDist1# > AdjDist2# + #PositionEntity e\room\NPC[0]\Collider,EntityX(e\room\AdjDoor[Adj1]\frameobj),EntityY(e\room\Objects[7],True),EntityZ(e\room\AdjDoor[Adj1]\frameobj) + #Else + #PositionEntity e\room\NPC[0]\Collider,EntityX(e\room\AdjDoor[Adj2]\frameobj),EntityY(e\room\Objects[7],True),EntityZ(e\room\AdjDoor[Adj2]\frameobj) + #EndIf + #PointEntity e\room\NPC[0]\Collider,e\room\obj + #MoveEntity e\room\NPC[0]\Collider,0,0,-1 + #ResetEntity e\room\NPC[0]\Collider + #e\room\NPC[0]\HideFromNVG = False + #e\room\NPC[0]\PathX = EntityX(e\room\NPC[0]\Collider) + #e\room\NPC[0]\PathZ = EntityZ(e\room\NPC[0]\Collider) + #e\room\NPC[0]\State = 5 + #DebugLog "aaaaaaaaa" + #e\EventState2 = 1 + #EndIf + #ElseIf e\EventState2 = 1 + #If e\room\NPC[0]\PathStatus <> 1 + #e\room\NPC[0]\PathStatus = FindPath(e\room\NPC[0],EntityX(e\room\Objects[15],True),EntityY(e\room\Objects[15],True),EntityZ(e\room\Objects[15],True)) + #Else + #DebugLog "bbbbbbbbb" + #e\EventState2 = 2 + #EndIf + #ElseIf e\EventState2 = 2 + #If e\room\NPC[0]\PathStatus <> 1 + #e\room\NPC[0]\State3 = 1.0 + #e\EventState2 = 3 + #e\room\NPC[0]\PathTimer# = 0.0 + #DebugLog "ccccccccc" + #Else + #If EntityDistance(e\room\NPC[0]\Collider,e\room\RoomDoors[0]\frameobj) < 5.0 + #e\room\RoomDoors[0]\locked = True + #e\room\RoomDoors[1]\locked = True + #If e\room\NPC[0]\Reload = 0 + #PlaySound_Strict LoadTempSound("SFX\Door\DoorOpen079.ogg") + #DebugLog "079 - OPEN DOORS IN ROOM2SL" + #e\room\NPC[0]\Reload = 1 + #EndIf + #If (Not e\room\RoomDoors[0]\open) + #e\room\RoomDoors[0]\open = True + #sound=Rand(0, 2) + #PlaySound2(OpenDoorSFX(0,sound),Camera,e\room\RoomDoors[0]\obj) + #EndIf + #If (Not e\room\RoomDoors[1]\open) + #e\room\RoomDoors[1]\open = True + #sound=Rand(0, 2) + #PlaySound2(OpenDoorSFX(0,sound),Camera,e\room\RoomDoors[1]\obj) + #EndIf + #EndIf + #If e\room\NPC[0]\Reload = 1 + #e\room\NPC[0]\DropSpeed = 0 + #EndIf + #EndIf + # + #If e\room\NPC[0]\State <> 5 + #e\EventState2 = 7 + #DebugLog "fffffffff" + #EndIf + #ElseIf e\EventState2 = 3 + #If e\room\NPC[0]\State <> 5 + #e\EventState2 = 7 + #DebugLog "fffffffff" + #EndIf + # + #If MeNPCSeesPlayer(e\room\NPC[0],True)=2 + #e\EventState2 = 4 + #DebugLog "ddddddddd" + #EndIf + # + #If e\room\NPC[0]\PathStatus <> 1 + #;If e\room\NPC[0]\PathTimer# < 70*3 + #If e\room\NPC[0]\PathTimer# = 0.0 + #;e\room\NPC[0]\PathTimer# = e\room\NPC[0]\PathTimer# + FPSfactor + #If e\room\NPC[0]\PrevState = 1 Then + #If (e\room\NPC[0]\SoundChn2 = 0) Then + #e\room\NPC[0]\Sound2 = LoadSound_Strict("SFX\SCP\049\Room2SL1.ogg") + #e\room\NPC[0]\SoundChn2 = PlaySound2(e\room\NPC[0]\Sound2, Camera, e\room\NPC[0]\Collider) + #Else + #If (Not ChannelPlaying(e\room\NPC[0]\SoundChn2)) + #e\room\NPC[0]\PathTimer# = 1.0 + #e\room\NPC[0]\SoundChn2 = 0 + #EndIf + #EndIf + #ElseIf e\room\NPC[0]\PrevState = 2 + #If e\room\NPC[0]\State3 = 3 Then + #If (e\room\NPC[0]\SoundChn2 = 0) Then + #e\room\NPC[0]\Sound2 = LoadSound_Strict("SFX\SCP\049\Room2SL2.ogg") + #e\room\NPC[0]\SoundChn2 = PlaySound2(e\room\NPC[0]\Sound2, Camera, e\room\NPC[0]\Collider) + #Else + #If (Not ChannelPlaying(e\room\NPC[0]\SoundChn2)) + #e\room\NPC[0]\PathTimer# = 1.0 + #e\room\NPC[0]\SoundChn2 = 0 + #EndIf + #EndIf + #Else + #If e\room\NPC[0]\Frame >= 1118 + #e\room\NPC[0]\PathTimer# = 1.0 + #EndIf + #EndIf + #EndIf + #Else + #Select e\room\NPC[0]\State3 + #Case 1 + #e\room\NPC[0]\PathStatus = FindPath(e\room\NPC[0],EntityX(e\room\Objects[16],True),EntityY(e\room\Objects[16],True),EntityZ(e\room\Objects[16],True)) + #e\room\NPC[0]\PrevState = 1 + #DebugLog "Path1" + #Case 2 + #e\room\NPC[0]\PathStatus = FindPath(e\room\NPC[0],EntityX(e\room\Objects[15],True),EntityY(e\room\Objects[15],True),EntityZ(e\room\Objects[15],True)) + #e\room\NPC[0]\PrevState = 2 + #DebugLog "Path2" + #Case 3 + #e\room\NPC[0]\PathStatus = FindPath(e\room\NPC[0],EntityX(e\room\Objects[17],True),EntityY(e\room\Objects[17],True),EntityZ(e\room\Objects[17],True)) + #e\room\NPC[0]\PrevState = 2 + #DebugLog "Path3" + #Case 4 + #e\room\NPC[0]\PathStatus = FindPath(e\room\NPC[0],e\room\NPC[0]\PathX,0.1,e\room\NPC[0]\PathZ) + #e\room\NPC[0]\PrevState = 2 + #DebugLog "Path4" + #Case 5 + #e\EventState2 = 5 + #End Select + #e\room\NPC[0]\PathTimer# = 0.0 + #e\room\NPC[0]\State3 = e\room\NPC[0]\State3 + 1 + #EndIf + #EndIf + #ElseIf e\EventState2 = 4 + #If e\room\NPC[0]\State <> 5 + #e\EventState2 = 7 + #e\room\NPC[0]\State3 = 6.0 + #DebugLog "fffffffff" + #EndIf + #ElseIf e\EventState2 = 5 + #;RemoveNPC(e\room\NPC[0]) + #DebugLog "ddddddddd" + #e\room\NPC[0]\State = 2 + #For r.Rooms = Each Rooms + #If r <> PlayerRoom + #If (EntityDistance(r\obj,e\room\NPC[0]\Collider)HideDistance) + #e\room\NPC[0]\PathStatus = FindPath(e\room\NPC[0],EntityX(r\obj),EntityY(r\obj),EntityZ(r\obj)) + #e\room\NPC[0]\PathTimer = 0.0 + #If e\room\NPC[0]\PathStatus = 1 Then e\EventState2 = 6 + #Exit + #EndIf + #EndIf + #Next + #ElseIf e\EventState2 = 6 + #If MeNPCSeesPlayer(e\room\NPC[0],True) Or e\room\NPC[0]\State2 > 0 Or e\room\NPC[0]\LastSeen > 0 + #DebugLog "fffffffff" + #e\EventState2 = 7 + #Else + #;Still playing the Music for SCP-049 (in the real, SCP-049's State will be set to 2, causing it to stop playing the chasing track) + #If PlayerRoom = e\room Then + #ShouldPlay = 20 + #EndIf + #If e\room\NPC[0]\PathStatus<>1 + #e\room\NPC[0]\Idle = 70*60 ;(Making SCP-049 idle for one minute (twice as fast for aggressive NPCs = True)) + #PositionEntity e\room\NPC[0]\Collider,0,500,0 + #ResetEntity e\room\NPC[0]\Collider + #DebugLog "eeeeeeeee" + #e\EventState2 = 7 + #EndIf + #EndIf + #;ElseIf e\EventState2 = 7 + #; e\room\RoomDoors[0]\locked = False + #; e\room\RoomDoors[1]\locked = False + #; e\EventState2 = 8 + #EndIf + # + #If e\room\NPC[0]<>Null + #If e\EventState2 < 7 + #If e\EventState2 > 2 + #If Abs(EntityY(e\room\RoomDoors[0]\frameobj)-EntityY(e\room\NPC[0]\Collider))>1.0 + #If Abs(EntityY(e\room\RoomDoors[0]\frameobj)-EntityY(Collider))<1.0 + #If e\room\RoomDoors[0]\open + #e\room\RoomDoors[0]\open = False + #e\room\RoomDoors[0]\fastopen = 1 + #PlaySound_Strict LoadTempSound("SFX\Door\DoorClose079.ogg") + #DebugLog "079 - CLOSE DOOR AT HALLWAY IN ROOM2SL" + #EndIf + #EndIf + #Else + #If e\room\RoomDoors[0]\open = False + #e\room\RoomDoors[0]\fastopen = 0 + #e\room\RoomDoors[0]\open = True + #sound=Rand(0, 2) + #PlaySound2(OpenDoorSFX(0,sound),Camera,e\room\RoomDoors[0]\obj) + #PlaySound_Strict LoadTempSound("SFX\Door\DoorOpen079.ogg") + #DebugLog "079 - OPEN DOOR AT HALLWAY IN ROOM2SL" + #EndIf + #EndIf + #EndIf + # + #;If e\EventState2 > 0 Then CanSave% = False + #Else + #If e\room\RoomDoors[0]\open = False + #e\room\RoomDoors[0]\fastopen = 0 + #e\room\RoomDoors[0]\open = True + #sound=Rand(0, 2) + #PlaySound2(OpenDoorSFX(0,sound),Camera,e\room\RoomDoors[0]\obj) + #PlaySound_Strict LoadTempSound("SFX\Door\DoorOpen079.ogg") + #DebugLog "079 - OPEN DOOR AT HALLWAY IN ROOM2SL" + #EndIf + #EndIf + #EndIf + #EndIf + #;[End Block] + # + #;Other code + #;[Block] + #If PlayerRoom = e\room Then + #;Lever for checkpoint locking (might have a function in the future for the case if the checkpoint needs to be locked again) + #e\EventState3 = UpdateLever(e\room\Levers[0]) + #If e\EventState3 = 1 Then + #UpdateCheckpointMonitors(0) + #If MonitorTimer# < 50 Then + #EntityTexture e\room\Objects[20],e\room\Textures[0],1 + #Else + #EntityTexture e\room\Objects[20],e\room\Textures[0],2 + #EndIf + #Else + #TurnCheckpointMonitorsOff(0) + #EntityTexture e\room\Objects[20],e\room\Textures[0],0 + #EndIf + # + #;Checking if the monitors and such should be rendered or not + #If Abs(EntityY(e\room\RoomDoors[0]\frameobj)-EntityY(Collider))>1.0 Then + #For i = 0 To 14 + #If e\room\Objects[i]<>0 And i<>7 Then + #ShowEntity e\room\Objects[i] + #EndIf + #Next + #For sc.SecurityCams = Each SecurityCams + #If sc\room = e\room Then + #If sc\ScrObj<>0 + #ShowEntity sc\ScrObj + #EndIf + #If sc\ScrOverlay<>0 + #ShowEntity sc\ScrOverlay + #EndIf + #Exit + #EndIf + #Next + #For i = 0 To 3 + #If PlayerRoom\Adjacent[i]<>Null Then + #EntityAlpha(GetChild(PlayerRoom\Adjacent[i]\obj,2),0) + #EndIf + #Next + #Else + #For i = 0 To 14 + #If e\room\Objects[i]<>0 And i<>7 Then + #HideEntity e\room\Objects[i] + #EndIf + #Next + #For sc.SecurityCams = Each SecurityCams + #If sc\room = e\room Then + #If sc\ScrObj<>0 + #HideEntity sc\ScrObj + #EndIf + #If sc\ScrOverlay<>0 + #HideEntity sc\ScrOverlay + #EndIf + #Exit + #EndIf + #Next + #EndIf + #EndIf + # + #For e2.Events = Each Events + #If e2\EventName = "008" + #If e2\EventState = 2 + #EntityTexture e\room\Objects[21],e\room\Textures[0],3 + #Else + #EntityTexture e\room\Objects[21],e\room\Textures[1],6 + #EndIf + #EndIf + #Next + #;[End Block] + # + #;[End Block] + #Case "096spawn" + #;[Block] + #Local xspawn#,zspawn#,place% + #If e\room\dist < HideDistance + #;Checking some statements in order to determine if SCP-096 can spawn in this room + #;[Block] + #If e\EventState <> 2 + #If Curr096<>Null + #If EntityDistance(Curr096\Collider,Collider)<40 + #e\EventState = 2 + #DebugLog "Failed to spawn SCP-096 in room "+e\room\RoomTemplate\Name$ + #DebugLog "- SCP-096 too close to player" + #EndIf + # + #For e2.Events = Each Events + #If e2\EventName = "room2servers" + #If e2\EventState > 0 And e2\room\NPC[0]<>Null + #e\EventState = 2 + #DebugLog "Failed to spawn SCP-096 in room "+e\room\RoomTemplate\Name$ + #DebugLog "- room2servers event still in progress" + #Exit + #EndIf + #EndIf + #Next + # + #For r.Rooms = Each Rooms + #If r\RoomTemplate\Name = "checkpoint1" + #If r\dist < 10 + #e\EventState = 2 + #DebugLog "Failed to spawn SCP-096 in room "+e\room\RoomTemplate\Name$ + #DebugLog "- too close to checkpoint1" + #Exit + #EndIf + #EndIf + #Next + # + #If Curr096\State <> 5 + #e\EventState = 2 + #DebugLog "Failed to spawn SCP-096 in room "+e\room\RoomTemplate\Name$ + #DebugLog "- SCP-096 enraged" + #EndIf + # + #If EntityDistance(Curr096\Collider,e\room\obj)>EntityDistance(Curr096\Collider,Collider) + #e\EventState = 2 + #DebugLog "Failed to spawn SCP-096 in room "+e\room\RoomTemplate\Name$ + #DebugLog "- Room is too far away" + #EndIf + #EndIf + #For e2.Events = Each Events + #If e2\EventName = "room2servers" + #If e2\EventState = 0 ;And (Abs(e2\room\dist-e\room\dist)0 Then + #e\EventState = 0 + #Else + #e\EventState = 3 + #EndIf + #EndIf + #EndIf + #;[End Block] + #Case "medibay" + #;[Block] + #;e\EventState: Determines if the player has entered the room or not + #; - 0 : Not entered + #; - 1 : Has entered + #;e\EventState2: A timer for the zombie wake up + # + #;Hiding/Showing the props in this room + #If PlayerRoom <> e\room + #HideEntity e\room\Objects[0] + #Else + #ShowEntity e\room\Objects[0] + #;Setup + #If e\EventState = 0 + #e\room\NPC[0] = CreateNPC(NPCtype008,EntityX(e\room\Objects[3],True),0.5,EntityZ(e\room\Objects[3],True)) + #RotateEntity e\room\NPC[0]\Collider,0,e\room\angle-90,0 + #e\EventState = 1 + #EndIf + # + #If EntityDistance(e\room\NPC[0]\Collider,Collider)<1.2 + #If e\EventState2 = 0 + #LightBlink = 12.0 + #PlaySound_Strict LightSFX + #e\EventState2 = FPSfactor + #EndIf + #EndIf + #EndIf + # + #If e\EventState2 > 0 And e\EventState2 < 70*4 + #e\EventState2 = e\EventState2 + FPSfactor + #ElseIf e\EventState2 >= 70*4 + #If e\room\NPC[0]\State = 0 + #e\room\NPC[0]\State = 2 + #EndIf + #EndIf + #;[End Block] + #Case "dimension1499" + #;[Block] + #If PlayerRoom<>e\room + #If e\room\Objects[0]<>0 + #For i = 1 To 15 + #HideEntity e\room\Objects[i] + #Next + #EndIf + #If EntityY(Collider)>EntityY(e\room\obj)-0.5 + #PlayerRoom = e\room + #EndIf + #EndIf + #If e\EventState = 2.0 + #If e\SoundCHN<>0 Then + #StopStream_Strict(e\SoundCHN) + #StopChannel(e\SoundCHN2) + #e\SoundCHN = 0 + #e\SoundCHN2 = 0 + #EndIf + #HideEntity NTF_1499Sky + #HideChunks() + #For n.NPCs = Each NPCs + #If n\NPCtype = NPCtype1499 + #RemoveNPC(n) + #;n\Idle = True + #EndIf + #Next + #For du.Dummy1499 = Each Dummy1499 + #FreeEntity(du\obj) + #Delete du + #Next + #If e\EventState3 < 70*30 Then + #e\EventState3 = 0.0 + #EndIf + #e\EventState = 1.0 + #If e\Sound2 <> 0 Then + #FreeSound_Strict e\Sound2 + #e\Sound2 = 0 + #EndIf + #EndIf + #;[End Block] + #Case "room2offices035" + #;[Block] + #Local is035released = False + # + #For e2.Events = Each Events + #If e2<>e And e2\EventName="room035" + #If e2\EventState<0.0 + #is035released=True + #Exit + #EndIf + #EndIf + #Next + # + #If is035released + #If e\room\dist < 8 + #If e\room\NPC[0]=Null + #e\room\NPC[0]=CreateNPC(NPCtypeD,e\room\x,0.5,e\room\z) + #RotateEntity e\room\NPC[0]\Collider,0,e\room\angle+180,0 + #MoveEntity e\room\NPC[0]\Collider,0,0,-0.5 + #e\room\NPC[0]\State = 3 + #e\room\NPC[0]\texture = "GFX\npcs\035victim.jpg" + #ChangeNPCTextureID(e\room\NPC[0],7) + #SetNPCFrame(e\room\NPC[0],19) + #EndIf + #If e\room\NPC[1]=Null + #If EntityDistance(e\room\NPC[0]\Collider,Collider)<2.5 + #e\room\NPC[1]=CreateNPC(NPCtypeTentacle,EntityX(e\room\NPC[0]\Collider),0.0,EntityZ(e\room\NPC[0]\Collider)) + #RotateEntity e\room\NPC[1]\Collider,0,e\room\angle,0 + #MoveEntity e\room\NPC[1]\Collider,0,0,0.6 + #EndIf + #EndIf + #Else + #If e\room\dist>HideDistance + #If e\room\NPC[1]<>Null + #RemoveNPC(e\room\NPC[1]) + #e\room\NPC[1]=Null + #EndIf + #EndIf + #EndIf + #EndIf + #;[End Block] + #Case "room1archive" + #;[Block] + #If e\EventState = 0 + #e\EventState = Rand(1,3) + #Else + #e\room\RoomDoors[0]\KeyCard = e\EventState + #EndIf + #;[End Block] + #Case "room2shaft" + #;[Block] + #If e\EventState = 0 Then + #e\room\NPC[0]=CreateNPC(NPCtypeGuard, EntityX(e\room\Objects[1],True), EntityY(e\room\Objects[1],True)+0.5, EntityZ(e\room\Objects[1],True)) + #RotateEntity e\room\NPC[0]\Collider, 0, e\room\angle+180,0, True + # + #SetNPCFrame (e\room\NPC[0], 286) + #e\room\NPC[0]\State = 8 + # + #e\EventState = 1 + #EndIf + # + #If PlayerRoom=e\room Then + #UpdateButton(e\room\Objects[2]) + #If ClosestButton = e\room\Objects[2] And MouseHit1 Then + #Msg = "The elevator appears to be broken." + #PlaySound2(ButtonSFX2, Camera, e\room\Objects[2]) + #MsgTimer = 5*70 + #MouseHit1=0 + #EndIf + #EndIf + #;[End Block] + #Case "room1lifts" + #;[Block] + #If PlayerRoom=e\room Then + #For i = 0 To 1 + #UpdateButton(e\room\Objects[i]) + #If ClosestButton = e\room\Objects[i] And MouseHit1 Then + #Msg = "The elevator appears to be broken." + #PlaySound2(ButtonSFX2, Camera, e\room\Objects[i]) + #MsgTimer = 5*70 + #MouseHit1=0 + #EndIf + #Next + #EndIf + #;[End Block] + # + #If e<>Null Then + #CatchErrors(Chr(34)+e\EventName+Chr(34)+" event") + #Else + #CatchErrors("Deleted event") + #EndIf + #Next + # + #;This here is necessary because the 294 drinks with explosion effect didn't worked anymore - ENDSHN + #If ExplosionTimer > 0 Then + #ExplosionTimer = ExplosionTimer+FPSfactor + # + #If ExplosionTimer < 140.0 Then + #If ExplosionTimer-FPSfactor < 5.0 Then + #ExplosionSFX = LoadSound_Strict("SFX\Ending\GateB\Nuke1.ogg") + #PlaySound_Strict ExplosionSFX + #CameraShake = 10.0 + #ExplosionTimer = 5.0 + #EndIf + # + #CameraShake = CurveValue(ExplosionTimer/60.0,CameraShake, 50.0) + #Else + #CameraShake = Min((ExplosionTimer/20.0),20.0) + #If ExplosionTimer-FPSfactor < 140.0 Then + #BlinkTimer = 1.0 + #ExplosionSFX = LoadSound_Strict("SFX\Ending\GateB\Nuke2.ogg") + #PlaySound_Strict ExplosionSFX + #For i = 0 To (10+(10*(ParticleAmount+1))) + #p.Particles = CreateParticle(EntityX(Collider)+Rnd(-0.5,0.5),EntityY(Collider)-Rnd(0.2,1.5),EntityZ(Collider)+Rnd(-0.5,0.5),0, Rnd(0.2,0.6), 0.0, 350) + #RotateEntity p\pvt,-90,0,0,True + #p\speed = Rnd(0.05,0.07) + #Next + #EndIf + #LightFlash = Min((ExplosionTimer-140.0)/10.0,5.0) + # + #If ExplosionTimer > 160 Then KillTimer = Min(KillTimer,-0.1) + #If ExplosionTimer > 500 Then ExplosionTimer = 0 + # + #;a dirty workaround to prevent the collider from falling down into the facility once the nuke goes off, + #;causing the UpdateEvent function to be called again and crashing the game + #PositionEntity Collider, EntityX(Collider), 200, EntityZ(Collider) + #EndIf + #EndIf + # +#End Function +# +#Function UpdateDimension1499() + #Local e.Events,n.NPCs,n2.NPCs,r.Rooms,it.Items,i%,j%,du.Dummy1499,du2.Dummy1499,temp%,scale#,x%,y% + # + #For e.Events = Each Events + #If e\EventName = "dimension1499" + #;[Block] + #;e\EventState: If player entered dimension (will be resetted after the player leaves it) + #;0: The player never entered SCP-1499 + #;1: The player had already entered the dimension at least once + #;2: The player is in dimension + #;e\EventState2: Used to count the amount of times the player has entered the 1499 dimension (for a little spawning event) + #;e\EventState3: Variable used for the 1499 church event + #If PlayerRoom = e\room Then + #If e\EventState < 2.0 + #;1499 random generator + #;[Block] + #If e\EventState = 0.0 + #If e\EventStr = "" And QuickLoadPercent = -1 + #QuickLoadPercent = 0 + #QuickLoad_CurrEvent = e + #e\EventStr = "load0" + #EndIf + #Else + #e\EventState = 2.0 + #EndIf + #;[End Block] + #;For n.NPCs = Each NPCs + #; If n\NPCtype = NPCtype1499 + #; n\Idle = False + #; n\State = 0 + #; ;If Rand(2)=1 Then n\State2 = 500*3 + #; n\Angle = Rnd(360) + #; PositionEntity n\Collider,EntityX(n\Collider)+Rnd(-60.0,60.0),EntityY(n\Collider)+0.05,EntityZ(n\Collider)+Rnd(-60.0,60.0) + #; ResetEntity n\Collider + #; EndIf + #;Next + #Local value% = Rand(2,3) + #If e\EventState2 = value% Or e\EventState2=4 Then + #For i = -1 To 1 + #For j = -1 To 1 + #If i<>0 And j<>0 Then + #n.NPCs = CreateNPC(NPCtype1499,EntityX(Collider)+(0.75*i),EntityY(Collider)+0.05,EntityZ(Collider)+(0.75*j)) + #PointEntity n\Collider,Collider + #RotateEntity n\Collider,0,EntityYaw(n\Collider),0 + #n\State = 2 + #ElseIf i<>0 Or j<>0 Then + #n.NPCs = CreateNPC(NPCtype1499,EntityX(Collider)+i,EntityY(Collider)+0.05,EntityZ(Collider)+j) + #PointEntity n\Collider,Collider + #RotateEntity n\Collider,0,EntityYaw(n\Collider),0 + #n\State = 2 + #EndIf + #Next + #Next + #e\EventState2 = 5 + #EndIf + #If e\EventState3 < 70*30 Then + #;Guards at the entrance to church + #n.NPCs = CreateNPC(NPCtype1499,e\room\x+4055.0*RoomScale,e\room\y+240.0*RoomScale,e\room\z+1884.0*RoomScale) + #n\PrevState = 3 + #n\Angle = 270 + #RotateEntity n\Collider,0,n\Angle,0 + #n2.NPCs = CreateNPC(NPCtype1499,e\room\x+4055.0*RoomScale,e\room\y+240.0*RoomScale,e\room\z+2876.0*RoomScale) + #n2\PrevState = 3 + #n2\Angle = 270 + #RotateEntity n2\Collider,0,n2\Angle,0 + #n\Target = n2 + #n2\Target = n + #e\room\NPC[2] = n + #e\room\NPC[3] = n2 + #;More guards + #n.NPCs = CreateNPC(NPCtype1499,e\room\x-1877.0*RoomScale,e\room\y+192.0*RoomScale,e\room\z+1071.0*RoomScale) + #n\PrevState = 3 + #n\Angle = 270 + #RotateEntity n\Collider,0,n\Angle,0 + #n2.NPCs = CreateNPC(NPCtype1499,e\room\x-1877.0*RoomScale,e\room\y+192.0*RoomScale,e\room\z+3503.0*RoomScale) + #n2\PrevState = 3 + #n2\Angle = 270 + #RotateEntity n2\Collider,0,n2\Angle,0 + #n\Target = n2 + #n2\Target = n + #e\room\NPC[4] = n + #e\room\NPC[5] = n2 + #;Guard at stairs + #n.NPCs = CreateNPC(NPCtype1499,e\room\x-2761.0*RoomScale,e\room\y+240.0*RoomScale,e\room\z+3204.0*RoomScale) + #n\PrevState = 1 + #n\Angle = 180 + #RotateEntity n\Collider,0,n\Angle,0 + #n\Speed = 0.0 + #;King + #n.NPCs = CreateNPC(NPCtype1499,e\room\x-1917.0*RoomScale,e\room\y+1904.0*RoomScale,e\room\z+2308.0*RoomScale) + #n\PrevState = 2 + #n\Angle = 270 + #RotateEntity n\Collider,0,n\Angle,0 + #tex = LoadTexture_Strict("GFX\npcs\1499_King.jpg") + #EntityTexture n\obj,tex + #FreeTexture tex + #e\room\NPC[0] = n + #;Guard next to king + #n.NPCs = CreateNPC(NPCtype1499,e\room\x-1917.0*RoomScale,e\room\y+1904.0*RoomScale,e\room\z+2052.0*RoomScale) + #n\PrevState = 1 + #n\Angle = 270 + #RotateEntity n\Collider,0,n\Angle,0 + #e\room\NPC[1] = n + #;1499-1 instances praying in church + #;Zone 1 + #For x=0 To 7 + #For y=0 To 2 + #du = New Dummy1499 + #For n.NPCs = Each NPCs + #If n\NPCtype = NPCtype1499 And n\PrevState<>2 Then + #du\obj = CopyEntity(n\obj) + #Exit + #EndIf + #Next + #scale# = (GetINIFloat("DATA\NPCs.ini", "SCP-1499-1", "scale") / 4.0) * Rnd(0.8,1.0) + #ScaleEntity du\obj, scale#,scale#,scale# + #EntityFX du\obj,1 + #du\anim = Rand(0,1) + #;2560=x 768=z + #;1687.0 + #PositionEntity du\obj,Max(Min((e\room\x+(1887.0-((2560.0/7.0)*x))*RoomScale)+Rnd(-0.5,0.5),e\room\x+1887.0*RoomScale),e\room\x-873.0*RoomScale),e\room\y,Max(Min((e\room\z+(1796.0-(384.0*y))*RoomScale)+Rnd(-0.5,0.5),e\room\z+1796.0*RoomScale),e\room\z+1028.0*RoomScale) + #RotateEntity du\obj,0,270,0 + #EntityAutoFade du\obj,25,39 + #Next + #Next + #;Zone 2 + #For x=0 To 6 + #For y=0 To 2 + #du = New Dummy1499 + #For n.NPCs = Each NPCs + #If n\NPCtype = NPCtype1499 And n\PrevState<>2 Then + #du\obj = CopyEntity(n\obj) + #Exit + #EndIf + #Next + #scale# = (GetINIFloat("DATA\NPCs.ini", "SCP-1499-1", "scale") / 4.0) * Rnd(0.8,1.0) + #ScaleEntity du\obj, scale#,scale#,scale# + #EntityFX du\obj,1 + #du\anim = Rand(0,1) + #;2048=x 768=z + #;1175.0 + #PositionEntity du\obj,Max(Min((e\room\x+(1375.0-((2048.0/6.0)*x))*RoomScale)+Rnd(-0.5,0.5),e\room\x+1375.0*RoomScale),e\room\x-873.0*RoomScale),e\room\y,Max(Min((e\room\z+(3588-(384.0*y))*RoomScale)+Rnd(-0.5,0.5),e\room\z+3588.0*RoomScale),e\room\z+2820.0*RoomScale) + #RotateEntity du\obj,0,270,0 + #EntityAutoFade du\obj,25,39 + #Next + #Next + #;4055, 240, 2084 + #;4055, 240, 3076 + #;-2761, 240, 3204 for stairs guard + #;-1449, 240, 1092 + #;-1449, 240, 3524 + #;-1917, 1904, 2052 - guard + #;-1917, 1904, 2308 - king + # + #;1687, 240, 1028 + #;1687, 240, 1796 + #;-873, 240, 1796 + #;-873, 240, 1028 + #;that's the First zone + #;1175, 240, 2820 + #;1175, 240, 3588 + #;-873, 240, 3588 + #;-873, 240, 2820 + #;that's For second zone + #Else + #HideEntity e\room\Levers[1] + #EndIf + # + #For i = 0 To 14 + #n.NPCs = CreateNPC(NPCtype1499,EntityX(Collider)+Rnd(-20,20),EntityY(Collider)+0.1,EntityZ(Collider)+Rnd(-20,20)) + #If Rand(2)=1 Then n\State2 = 500*3 + #n\Angle = Rnd(360) + #n\State2 = 0 + #If EntityDistance(n\Collider,Collider)<10.0 Then + #n\State = 2 + #EndIf + #Next + #EndIf + # + #;PositionEntity e\room\Objects[0],0,800,0 + #If (Not DebugHUD) + #CameraFogRange Camera,40,80 + #CameraFogColor Camera,96,97,104 + #CameraClsColor Camera,96,97,104 + #CameraRange Camera,0.05,90 + #Else + #CameraFogRange Camera,120,120 + #CameraFogColor Camera,96,97,104 + #CameraClsColor Camera,96,97,104 + #CameraRange Camera,0.05,120 + #EndIf + # + #For r.Rooms = Each Rooms + #HideEntity r\obj + #Next + #ShowEntity e\room\obj + #If QuickLoadPercent = 100 Or QuickLoadPercent = -1 + #UpdateChunks(e\room,15) + #ShowEntity NTF_1499Sky + #Update1499Sky() + #ShouldPlay = 18 + #If EntityY(Collider)<800.0 + #PositionEntity Collider,EntityX(Collider),800.5,EntityZ(Collider),True + #ResetEntity Collider + #EndIf + #;A hacky fix to make items not fall that are in dimension1499 + #For it.Items = Each Items + #If EntityY(it\collider)>750.0 + #If EntityY(it\collider)<800.0 + #PositionEntity it\collider,EntityX(it\collider),800.5,EntityZ(it\collider) + #ResetEntity it\collider + #EndIf + #EndIf + #Next + #For du = Each Dummy1499 + #If e\EventState3 < 70*30 Then + #If du\anim=0 Then + #;321-361 + #If AnimTime(du\obj)<=360.5 Then + #Animate2(du\obj,AnimTime(du\obj),321,361,0.2,False) + #;362-402 + #ElseIf AnimTime(du\obj)>361.5 And AnimTime(du\obj)<=401.5 Then + #Animate2(du\obj,AnimTime(du\obj),362,402,0.2,False) + #Else + #temp = Rand(0,1) + #If temp=0 Then + #SetAnimTime(du\obj,321) + #Else + #SetAnimTime(du\obj,362) + #EndIf + #EndIf + #Else + #;413-453 + #If AnimTime(du\obj)<=452.5 Then + #Animate2(du\obj,AnimTime(du\obj),413,453,0.2,False) + #;454-498 + #ElseIf AnimTime(du\obj)>453.5 And AnimTime(du\obj)<=497.5 Then + #Animate2(du\obj,AnimTime(du\obj),454,498,0.2,False) + #Else + #temp = Rand(0,1) + #If temp=0 Then + #SetAnimTime(du\obj,413) + #Else + #SetAnimTime(du\obj,454) + #EndIf + #EndIf + #EndIf + #Else + #If du\anim=0 Then + #If AnimTime(du\obj)<=411.5 And AnimTime(du\obj)>320.5 Then + #Animate2(du\obj,AnimTime(du\obj),403,412,0.2,False) + #Else + #Animate2(du\obj,AnimTime(du\obj),296,320,0.2,True) + #EndIf + #Else + #If AnimTime(du\obj)<=507.5 And AnimTime(du\obj)>320.5 Then + #Animate2(du\obj,AnimTime(du\obj),499,508,0.2,False) + #Else + #Animate2(du\obj,AnimTime(du\obj),296,320,0.2,True) + #EndIf + #EndIf + #Local pvt = CreatePivot() + #PositionEntity pvt,EntityX(du\obj),EntityY(du\obj),EntityZ(du\obj),True + #PointEntity pvt,Collider + #RotateEntity du\obj,0,CurveAngle(EntityYaw(pvt),EntityYaw(du\obj)-180,10.0)+180,0 + #FreeEntity pvt + #EndIf + #Next + #;-56,0,2287 + #;X distance: 2160 + #;Z distance: 1408 + # + #;Player is inside the church + #If e\EventState3 < 70*10 Then + #If Abs(EntityX(Collider)-(e\room\x-56.0*RoomScale))<2160.0*RoomScale Then + #If Abs(EntityZ(Collider)-(e\room\z+2287.0*RoomScale))<1408.0*RoomScale Then + #e\EventState3 = e\EventState3 + FPSfactor + #;CurrMusicVolume = 1.0 + #EndIf + #EndIf + #ElseIf e\EventState3 >= 70*10 And e\EventState3 < 70*20 Then + #For i = 0 To 1 + #e\room\NPC[i]\Reload = 1 + #Next + #e\EventState3 = 70*20 + #ElseIf e\EventState3 = 70*20 + #If e\room\NPC[0]\Frame > 854.5 Then + #For i = 2 To 5 + #If i = 2 + #If e\room\NPC[i]\Sound <> 0 Then FreeSound_Strict e\room\NPC[i]\Sound : e\room\NPC[i]\Sound = 0 + #e\room\NPC[i]\Sound = LoadSound_Strict("SFX\SCP\1499\Triggered.ogg") + #e\room\NPC[i]\SoundChn = PlaySound2(e\room\NPC[i]\Sound, Camera, e\room\NPC[i]\Collider,50.0) + #EndIf + #e\room\NPC[i]\State = 1 + #e\room\NPC[i]\Frame = 203 + #Next + #e\EventState3 = 70*30 + #EndIf + #EndIf + # + #;If Abs(EntityX(Collider)-(e\room\x-56.0*RoomScale))<2160.0*RoomScale Then + #; If Abs(EntityZ(Collider)-(e\room\z+2287.0*RoomScale))<1408.0*RoomScale Then + #; ShouldPlay = 66 + #; EndIf + #;EndIf + # + #If e\room\NPC[0]<>Null Then + #ShowEntity e\room\Levers[1] + #If e\EventState3 < 70*30 Then + #ShouldPlay = 66 + #If NowPlaying = 66 Then + #If e\SoundCHN = 0 Then + #e\Sound2 = LoadSound_Strict("SFX\Music\HaveMercyOnMe(Choir).ogg") + #e\SoundCHN = StreamSound_Strict("SFX\Music\HaveMercyOnMe(NoChoir).ogg",MusicVolume) + #e\SoundCHN_isStream = True + #EndIf + #;If e\SoundCHN2<>0 Then + #; UpdateStreamSoundOrigin(e\SoundCHN2,Camera,e\room\Levers[0]) + #;EndIf + #EndIf + #If e\Sound2<>0 Then + #e\SoundCHN2 = LoopSound2(e\Sound2,e\SoundCHN2,Camera,e\room\Levers[0],10,MusicVolume) + #EndIf + #Else + #ShouldPlay = 19 + #If e\SoundCHN<>0 Then + #StopStream_Strict(e\SoundCHN) + #StopChannel(e\SoundCHN2) + #e\SoundCHN = 0 + #e\SoundCHN2 = 0 + #EndIf + #If e\Sound2 <> 0 Then + #FreeSound_Strict e\Sound2 + #e\Sound2 = 0 + #EndIf + #EndIf + #EndIf + # + #If EntityDistance(Collider,e\room\obj)>40.0 + #For du.Dummy1499 = Each Dummy1499 + #HideEntity du\obj + #Next + #Else + #For du.Dummy1499 = Each Dummy1499 + #ShowEntity du\obj + #Next + #EndIf + #Else + #DropSpeed = 0 + #EndIf + #CurrStepSFX=3 + #PlayerFallingPickDistance = 0.0 + #Else + #If e\EventState = 2.0 + #If e\SoundCHN<>0 Then + #StopStream_Strict(e\SoundCHN) + #StopChannel(e\SoundCHN2) + #e\SoundCHN = 0 + #e\SoundCHN2 = 0 + #EndIf + #HideEntity NTF_1499Sky + #HideChunks() + #For n.NPCs = Each NPCs + #If n\NPCtype = NPCtype1499 + #RemoveNPC(n) + #;n\Idle = True + #EndIf + #Next + #For du.Dummy1499 = Each Dummy1499 + #FreeEntity du\obj + #Delete du + #Next + #If e\EventState3 < 70*30 Then + #e\EventState3 = 0.0 + #EndIf + #e\EventState = 1.0 + #If e\Sound2 <> 0 Then + #FreeSound_Strict e\Sound2 + #e\Sound2 = 0 + #EndIf + #EndIf + #EndIf + #;[End Block] + #EndIf + #Next + # +#End Function +# +#Function UpdateEndings() + #Local e.Events,n.NPCs,r.Rooms,i,pvt,p.Particles + # + #For e.Events = Each Events + #Select e\EventName + #Case "exit1" + #;[Block] + #If PlayerRoom = e\room Then + # + #If EntityY(Collider)>1040.0*RoomScale Then + # + #;For r.Rooms = Each Rooms + #; HideEntity r\obj + #;Next + #ShowEntity e\room\obj + # + #;Curr106\State = 20000 + #;Curr106\Idle = True + # + #If e\EventState = 0 Then + #DrawLoading(0,True) + # + #For i = 0 To MaxRoomLights-1 + #If e\room\LightSprites[i]<>0 Then + #EntityFX e\room\LightSprites[i], 1+8 + #EndIf + #Next + # + #For n.NPCs = Each NPCs + #RemoveNPC(n) + #Next + #Curr173 = Null + #Curr106 = Null + #Curr096 = Null + #Curr5131 = Null + # + #CameraFogMode(Camera, 0) + #SecondaryLightOn = True + # + #;Music(5) = LoadSound_Strict("SFX\Music\GateB1.ogg") + #DrawLoading(60,True) + #;Music(6) = LoadSound_Strict("SFX\Music\GateB2.ogg") + #DrawLoading(90,True) + # + #e\room\NPC[0] = CreateNPC(NPCtypeApache, e\room\x, 100.0, e\room\z) + #e\room\NPC[0]\State = 1 + # + #e\room\NPC[1] = CreateNPC(NPCtypeGuard, EntityX(e\room\Objects[4],True),EntityY(e\room\Objects[4],True)+0.2,EntityZ(e\room\Objects[4],True)) + #e\room\NPC[1]\State = 0 + #e\room\NPC[1]\State2 = 10 + # + # + #pvt = CreatePivot() + #PositionEntity pvt, EntityX(e\room\Objects[0],True), EntityY(e\room\Objects[0],True), EntityZ(e\room\Objects[0],True) + # + #e\room\Objects[0] = LoadMesh_Strict("GFX\map\exit1terrain.b3d", e\room\obj) + #ScaleEntity e\room\Objects[0],RoomScale,RoomScale,RoomScale,True + #RotateEntity e\room\Objects[0],0,e\room\angle,0,True + #PositionEntity(e\room\Objects[0], EntityX(pvt), EntityY(pvt), EntityZ(pvt), True) + # + #FreeEntity pvt + # + #Delay 100 + # + #Sky = sky_CreateSky("GFX\map\sky\sky") + #RotateEntity Sky,0,e\room\angle-90,0 + # + #e\EventState = 1.0 + # + #For n.NPCs = Each NPCs + #If n\NPCtype = NPCtypeMTF + #RemoveNPC(n) + #EndIf + #Next + # + #DrawLoading(100,True) + #Else + # + #UpdateSky() + # + #If e\EventState < 2.0 And SelectedEnding = "" Then + #If e\room\NPC[0]\State = 2 Then + #ShouldPlay = 6 + #Else + #e\EventState2=(e\EventState2+FPSfactor) Mod 3600 + #PositionEntity(e\room\NPC[0]\Collider, EntityX(e\room\obj,True)+Cos(e\EventState2/10)*6000.0*RoomScale,14000*RoomScale,EntityZ(e\room\obj,True)+Sin(e\EventState2/10)*6000.0*RoomScale) + #RotateEntity e\room\NPC[0]\Collider,7.0,(e\EventState2/10),20.0 + #ShouldPlay = 5 + #EndIf + # + #If EntityDistance(Collider, e\room\Objects[10])<320*RoomScale Then + #e\EventState = 2.0 + #e\room\RoomDoors[2]\open = False + #e\room\RoomDoors[2]\locked = 6 + #e\room\RoomDoors[3]\open = False + #e\room\RoomDoors[3]\locked = 6 + # + #e\room\NPC[2] = CreateNPC(NPCtypeApache, EntityX(e\room\Objects[9],True),EntityY(e\room\Objects[9],True)+0.5,EntityZ(e\room\Objects[9],True)) + #e\room\NPC[2]\State = 3 + # + #e\room\NPC[3] = CreateNPC(NPCtypeApache, EntityX(e\room\Objects[7],True),EntityY(e\room\Objects[7],True)-2.0,EntityZ(e\room\Objects[7],True)) + #e\room\NPC[3]\State = 3 + # + #e\room\NPC[0]\State = 3 + # + #;e\SoundCHN = PlaySound_Strict (LoadTempSound("SFX\Ending\GateB\682Battle.ogg")) + #PlayAnnouncement("SFX\Ending\GateB\682Battle.ogg") + #EndIf + #Else + #ShouldPlay = 6 + #e\EventState=e\EventState+FPSfactor + # + #If e\EventState < 40.0*70 Then + #e\room\NPC[0]\EnemyX = EntityX(e\room\Objects[11],True)+Sin(MilliSecs2()/25.0)*3 + #e\room\NPC[0]\EnemyY = EntityY(e\room\Objects[11],True)+Cos(MilliSecs()/85.0)+9.0 + #e\room\NPC[0]\EnemyZ = EntityZ(e\room\Objects[11],True)+Cos(MilliSecs()/25.0)*3 + # + #e\room\NPC[2]\EnemyX = EntityX(e\room\Objects[11],True)+Sin(MilliSecs2()/23.0)*3 + #e\room\NPC[2]\EnemyY = EntityY(e\room\Objects[11],True)+Cos(MilliSecs()/83.0)+5.0 + #e\room\NPC[2]\EnemyZ = EntityZ(e\room\Objects[11],True)+Cos(MilliSecs()/23.0)*3 + # + #If e\room\NPC[3]\State = 3 Then + #e\room\NPC[3]\EnemyX = EntityX(e\room\Objects[11],True)+Sin(MilliSecs2()/20.0)*3 + #e\room\NPC[3]\EnemyY = EntityY(e\room\Objects[11],True)+Cos(MilliSecs()/80.0)+3.5 + #e\room\NPC[3]\EnemyZ = EntityZ(e\room\Objects[11],True)+Cos(MilliSecs()/20.0)*3 + #EndIf + #EndIf + #EndIf + # + # + #If e\EventState > 0.6*70 And e\EventState < 42.2*70 Then + #If e\EventState < 0.7*70 Then + #CameraShake = 0.5 + #ElseIf e\EventState > 3.2*70 And e\EventState < 3.3*70 + #CameraShake = 0.5 + #ElseIf e\EventState > 6.1*70 And e\EventState < 6.2*70 + #CameraShake = 0.5 + #ElseIf e\EventState < 10.8*70 And e\EventState < 10.9*70 + #CameraShake = 0.5 + #ElseIf e\EventState > 12.1*70 And e\EventState < 12.3*70 + #CameraShake = 1.0 + #ElseIf e\EventState > 13.3*70 And e\EventState < 13.5*70 + #CameraShake = 1.5 + #ElseIf e\EventState > 16.5*70 And e\EventState < 18.5*70 + #CameraShake = 3.0 + #ElseIf e\EventState > 21.5*70 And e\EventState < 24.0*70 + #CameraShake = 2.0 + #ElseIf e\EventState > 25.5*70 And e\EventState < 27.0*70 + #CameraShake = 2.0 + #ElseIf e\EventState > 31.0*70 And e\EventState < 31.5*70 + #CameraShake = 0.5 + #ElseIf e\EventState > 35.0*70 And e\EventState < 36.5*70 + #CameraShake = 1.5 + #If e\EventState-FPSfactor =< 35.0*70 Then + #e\SoundCHN = StreamSound_Strict("SFX\Ending\GateB\DetonatingAlphaWarheads.ogg",SFXVolume,0) + #e\SoundCHN_isStream = True + #EndIf + #ElseIf e\EventState > 39.5*70 And e\EventState < 39.8*70 + #CameraShake = 1.0 + #ElseIf e\EventState > 42.0*70 + #CameraShake = 0.5 + # + #;helicopters leave + #e\room\NPC[0]\EnemyX = EntityX(e\room\Objects[19],True)+4.0 + #e\room\NPC[0]\EnemyY = EntityY(e\room\Objects[19],True)+4.0 + #e\room\NPC[0]\EnemyZ = EntityZ(e\room\Objects[19],True)+4.0 + # + #e\room\NPC[2]\EnemyX = EntityX(e\room\Objects[19],True) + #e\room\NPC[2]\EnemyY = EntityY(e\room\Objects[19],True) + #e\room\NPC[2]\EnemyZ = EntityZ(e\room\Objects[19],True) + # + #EndIf + #EndIf + # + #If e\EventState => 45.0*70 Then + #If e\EventState < 75.0*70 Then + #If e\SoundCHN2=0 + #e\SoundCHN2 = StreamSound_Strict("SFX\Ending\GateB\Siren.ogg",SFXVolume,Mode) + #e\SoundCHN2_isStream = True + #EndIf + #Else + #If SelectedEnding = "" Then + #ShouldPlay = 66 + # + #StopStream_Strict(e\SoundCHN) + #StopStream_Strict(e\SoundCHN2) + # + #temp = True + #For e2.Events = Each Events + #If e2\EventName = "room2nuke" Then + #temp = e2\EventState + #Exit + #EndIf + #Next + # + #If temp = 1 Then ;remote detonation on -> explode + #ExplosionTimer = Max(ExplosionTimer, 0.1) + #SelectedEnding = "B2" + #Else + #;LoadEventSound(e,"SFX\Ending\GateB\AlphaWarheadsFail.ogg") + #;e\SoundCHN = PlaySound_Strict(e\Sound) + #PlayAnnouncement("SFX\Ending\GateB\AlphaWarheadsFail.ogg") + # + #For i = 0 To 1 + #n.NPCs = CreateNPC(NPCtypeMTF, EntityX(e\room\Objects[18],True)+(i*0.4),EntityY(e\room\Objects[18],True)+0.29,EntityZ(e\room\Objects[18],True)+(i*0.4)) + #Next + # + #n.NPCs = CreateNPC(NPCtypeMTF, EntityX(e\room\RoomDoors[2]\obj,True),EntityY(e\room\RoomDoors[2]\obj,True)+0.29,(EntityZ(e\room\RoomDoors[2]\obj,True)+EntityZ(e\room\RoomDoors[3]\obj,True))/2) + # + #For n.NPCs = Each NPCs + #If n\NPCtype = NPCtypeMTF Then + #n\LastSeen = (70*Rnd(30,35)) + #n\State = 3 + #n\State2 = 10 + #n\EnemyX = EntityX(Collider) + #n\EnemyY = EntityY(Collider) + #n\EnemyZ = EntityZ(Collider) + #EndIf + #Next + # + #DebugLog "MTF Units spawned!" + # + #e\EventState = 85.0*70 + # + #SelectedEnding = "B3" + #EndIf + # + #;EndIf + #Else + #If SelectedEnding = "B3" Then + #e\room\NPC[0]\EnemyX = EntityX(e\room\Objects[11],True)+Sin(MilliSecs2()/25.0)*3 + #e\room\NPC[0]\EnemyY = EntityY(e\room\Objects[11],True)+Cos(MilliSecs()/85.0)+9.0 + #e\room\NPC[0]\EnemyZ = EntityZ(e\room\Objects[11],True)+Cos(MilliSecs()/25.0)*3 + # + #e\room\NPC[2]\EnemyX = EntityX(e\room\Objects[11],True)+Sin(MilliSecs2()/23.0)*3 + #e\room\NPC[2]\EnemyY = EntityY(e\room\Objects[11],True)+Cos(MilliSecs()/83.0)+5.0 + #e\room\NPC[2]\EnemyZ = EntityZ(e\room\Objects[11],True)+Cos(MilliSecs()/23.0)*3 + # + #e\room\RoomDoors[5]\open = True + # + #;Update the MTF Units everytime they cannot detect the player + #If e\EventState3 = 0.0 + #For n.NPCs = Each NPCs + #If n\NPCtype = NPCtypeMTF + #If n\State = 5 + #n\State = 3 + #n\PathStatus = FindPath(n, EntityX(Collider),EntityY(Collider),EntityZ(Collider)) + #n\PathTimer = 70*Rand(15,20) + #n\LastSeen = 70*300 + #EndIf + #If EntityDistance(n\Collider,Collider)<3.0 + #n\State = 5 + #n\PathStatus = 0 + #n\PathTimer = 0 + #n\CurrSpeed = 0 + #EndIf + #EndIf + #Next + #EndIf + # + #For n.NPCs = Each NPCs + #If n\NPCtype = NPCtypeMTF + #If n\State = 5 And EntityDistance(n\Collider,Collider)<3.0 + #If e\EventState3 = 0.0 + #PlaySound_Strict LoadTempSound("SFX\Ending\GateB\PlayerDetect.ogg") + #e\EventState3 = e\EventState3 + FPSfactor + #For n2.NPCs = Each NPCs + #If n2\NPCtype = n\NPCtype + #n2\State = 5 + #n2\PathStatus = 0 + #n2\PathTimer = 0 + #n2\CurrSpeed = 0 + #EndIf + #Next + #Exit + #EndIf + #EndIf + #EndIf + #Next + # + #If e\EventState3 > 0.0 And e\EventState3 <= 500.0 + #e\EventState3 = e\EventState3 + FPSfactor + #UnableToMove% = True + #For n.NPCs = Each NPCs + #If n\NPCtype = NPCtypeMTF + #n\EnemyX = EntityX(Collider) + #n\EnemyY = EntityY(Collider) + #n\EnemyZ = EntityZ(Collider) + #n\BoneToManipulate = "spine" + #n\ManipulateBone = True + #n\ManipulationType = 1 + #n\Gravity = 0 + #n\GravityMult = 0 + #EndIf + #Next + #ElseIf e\EventState3 > 500.0 + #ent% = LoadSprite("GFX\blooddrop1.png",1+2) + #EntityFX ent%,1+2+8 + #ScaleSprite ent%,1.5,1.5 + #ShouldPlay = 0 + #CurrSpeed = 0 + #PlaySound_Strict LoadTempSound("SFX\Ending\GateB\Gunshot.ogg") + #GodMode = 0 + #NoClip = 0 + #KillTimer = -0.1 + #DeathMSG = "" + #Kill() + #BlinkTimer = -10 + # + #For n.NPCs = Each NPCs + #If n\NPCtype = NPCtypeMTF + #RemoveNPC(n) + #EndIf + #Next + #RemoveEvent(e) + #Exit + #EndIf + # + #EndIf + #EndIf + # + # + #EndIf + #EndIf + # + #If e\EventState > 26.5*70 Then + #If e\room\Objects[12] = 0 Then + #e\room\Objects[12] = LoadMesh_Strict("GFX\NPCs\682arm.b3d") + #ScaleEntity e\room\Objects[12], 0.15,0.15,0.15 + #temp = (Min(((EntityDistance(e\room\NPC[3]\Collider,Collider)/RoomScale)-3000.0)/4,1000)+12192.0)*RoomScale + #PositionEntity e\room\Objects[12],EntityX(e\room\NPC[3]\Collider),12192.0*RoomScale,EntityZ(e\room\NPC[3]\Collider) + #RotateEntity e\room\Objects[12],0,e\room\angle+Rnd(-10,10),0,True + #TurnEntity e\room\Objects[12], 0,0,180 + #Else + #If WrapAngle(EntityRoll(e\room\Objects[12]))<340.0 Then + #angle# = WrapAngle(EntityRoll(e\room\Objects[12])) + #TurnEntity e\room\Objects[12], 0,0,(5.0+Abs(Sin(angle))*2)*FPSfactor + #If angle < 270 And WrapAngle(EntityRoll(e\room\Objects[12]))=> 270 Then + #PlaySound_Strict LoadTempSound("SFX\Character\Apache\Crash1.ogg") + #e\room\NPC[3]\State = 4 + #e\room\NPC[3]\State2 = 1.0 + #e\room\NPC[3]\EnemyX = EntityX(e\room\Objects[7],True) + #e\room\NPC[3]\EnemyY = EntityY(e\room\Objects[7],True)-2.5 + #e\room\NPC[3]\EnemyZ = EntityZ(e\room\Objects[7],True) + # + #em.Emitters = CreateEmitter(EntityX(e\room\NPC[3]\Collider), EntityY(e\room\NPC[3]\Collider), EntityZ(e\room\NPC[3]\Collider),0) + #em\Room = PlayerRoom + #em\RandAngle = 45 + #em\Gravity = -0.18 + #em\LifeTime = 400 + #em\SizeChange = Rnd(0.005,0.007) + #em\Achange = -0.004 + #TurnEntity(em\Obj, -80+20*i, 0, 0) + #EntityParent em\Obj, e\room\NPC[3]\Collider + # + #If ParticleAmount > 0 + #For i = 0 To (3+(4*(ParticleAmount-1))) + #p.Particles = CreateParticle(EntityX(e\room\NPC[3]\Collider),EntityY(e\room\NPC[3]\Collider),EntityZ(e\room\NPC[3]\Collider), 0, Rnd(0.5,1.0), -0.1, 200) + #p\speed = 0.01 + #p\SizeChange = 0.01 + #p\A = 1.0 + #p\Achange = -0.005 + #RotateEntity p\pvt, Rnd(360),Rnd(360),0 + #MoveEntity p\pvt, 0,0,0.3 + #Next + # + #For i = 0 To (6+(6*(ParticleAmount-1))) + #p.Particles = CreateParticle(EntityX(e\room\NPC[3]\Collider),EntityY(e\room\NPC[3]\Collider),EntityZ(e\room\NPC[3]\Collider), 0, 0.02, 0.003, 200) + #p\speed = 0.04 + #p\A = 1.0 + #p\Achange = -0.005 + #RotateEntity p\pvt, Rnd(360),Rnd(360),0 + #Next + #EndIf + #EndIf + #Else + #HideEntity e\room\Objects[12] + #EndIf + #EndIf + #EndIf + # + # + #;0.5 + #;2.1 + #;3.3 + #;6.5 - 8.5 + #;11.5-14 + #;15.5-17 + #;21 + #;25-26.5 + #;29.5 + #;32 + #EndIf + # + #;dist = Max(Min(EntityDistance(Collider, e\room\objects[3])/10000.0,1.0),0.0) + #;EntityAlpha Fog, 1.0-dist + #HideEntity Fog + #CameraFogRange Camera, 5,45 + # + #angle = Max(Sin(EntityYaw(Collider)),0.0) + #;250,230,200 + #CameraFogColor (Camera,200+(angle*50),200+(angle*30),200) + #CameraClsColor (Camera,200+(angle*50),200+(angle*30),200) + #CameraRange(Camera, 0.05, 60) + # + #AmbientLight (140, 140, 140) + # + #If ParticleAmount > 0 + #If Rand(3) = 1 Then + #p.Particles = CreateParticle(EntityX(Camera)+Rnd(-2.0,2.0), EntityY(Camera)+Rnd(0.9,2.0), EntityZ(Camera)+Rnd(-2.0,2.0), 2, 0.006, 0, 300) + #p\speed = Rnd(0.002,0.003) + #RotateEntity(p\pvt, Rnd(-20, 20), e\room\angle-90+Rnd(-15,15),0, 0) + # + #p\SizeChange = -0.00001 + #EndIf + #EndIf + # + #;Helicopter spots or player is within range. --> Start shooting. + #If (e\room\NPC[1]\State <> 1) Then + #If ((EntityDistance(e\room\NPC[1]\Collider,Collider) < 15.0) Or EntityVisible(e\room\NPC[0]\Collider,Collider)) Then + #e\room\NPC[1]\State = 1 + #e\room\NPC[1]\State3 = 1 + #EndIf + #EndIf + # + #;Below roof or inside catwalk. --> Stop shooting. + #If (EntityDistance(e\room\NPC[1]\Collider,Collider) < 8.9) Or (EntityDistance(e\room\Objects[5],Collider) < 16.9) Then + #e\room\NPC[1]\State3 = 0 + #Else + #e\room\NPC[1]\State3 = 1 + #EndIf + #EndIf + #EndIf + #;[End Block] + #Case "gatea" + #;[Block] + #If PlayerRoom = e\room Then + #For r.Rooms = Each Rooms + #HideEntity r\obj + #Next + #ShowEntity e\room\obj + # + #If e\EventState = 0 Then + #DrawLoading(0) + #e\room\Objects[0] = LoadMesh_Strict("GFX\MAP\gateatunnel.b3d") + #PositionEntity e\room\Objects[0], EntityX(e\room\obj,True),EntityY(e\room\obj,True),EntityZ(e\room\obj,True) + #ScaleEntity (e\room\Objects[0],RoomScale,RoomScale,RoomScale) + #EntityType e\room\Objects[0], HIT_MAP + #EntityPickMode e\room\Objects[0], 3 + #EntityParent(e\room\Objects[0],e\room\obj) + # + #DrawLoading(30) + # + #For i = 0 To e\room\MaxLights + #If e\room\LightSprites[i]<>0 Then + #EntityFX e\room\LightSprites[i], 1+8 + #EndIf + #Next + # + #For n.NPCs = Each NPCs + #If n <> Curr106 And n <> Curr173 + #RemoveNPC(n) + #EndIf + #Next + #Curr173\Idle = True + #Curr096 = Null + #Curr5131 = Null + # + #CameraFogMode(Camera, 0) + #SecondaryLightOn = True + # + #HideDistance = 35.0 + # + #For i = 2 To 4 + #e\room\NPC[i] = CreateNPC(NPCtypeApache, e\room\x, e\room\y+11, e\room\z) + #e\room\NPC[i]\State = (Not Contained106) + #Next + # + #CreateConsoleMsg("WARNING! Teleporting away from this area may cause bugs or crashing.") + # + #Sky = sky_CreateSky("GFX\map\sky\sky") + #RotateEntity Sky,0,e\room\angle,0 + # + #DrawLoading(60) + # + #For i = 0 To 1 + #e\room\NPC[i] = CreateNPC(NPCtypeGuard, EntityX(e\room\Objects[i+5],True),EntityY(e\room\Objects[i+5],True),EntityZ(e\room\Objects[i+5],True)) + #e\room\NPC[i]\State = 0 + #PointEntity e\room\NPC[i]\Collider, e\room\Objects[3] + #Next + # + #For i = 7 To 8 + #e\room\NPC[i] = CreateNPC(NPCtypeMTF, EntityX(e\room\Objects[i],True)+0.8,EntityY(e\room\Objects[i],True),EntityZ(e\room\Objects[i],True)+0.8) + #e\room\NPC[i]\State = 5 + #e\room\NPC[i]\PrevState = 1 + #PointEntity e\room\NPC[i]\Collider, e\room\Objects[3] + #Next + # + #For i = 5 To 6 + #e\room\NPC[i] = CreateNPC(NPCtypeMTF, EntityX(e\room\Objects[i+2],True),EntityY(e\room\Objects[i+2],True),EntityZ(e\room\Objects[i+2],True)) + #e\room\NPC[i]\State = 5 + #e\room\NPC[i]\PrevState = 1 + #PointEntity e\room\NPC[i]\Collider, e\room\Objects[3] + #Next + # + #If Contained106 Then + #e\room\RoomDoors[2]\locked = True + # + #PositionEntity e\room\NPC[5]\Collider, EntityX(e\room\Objects[15],True)+(i-6)*0.2,EntityY(e\room\Objects[15],True),EntityZ(e\room\Objects[15],True)+(i-6)*0.2, True + #ResetEntity e\room\NPC[5]\Collider + # + #EndIf + # + #xtemp#=EntityX(e\room\Objects[9],True) + #ztemp#=EntityZ(e\room\Objects[9],True) + #FreeEntity e\room\Objects[9] + # + #e\room\Objects[9] = LoadMesh_Strict("GFX\map\lightgunbase.b3d") + #ScaleEntity e\room\Objects[9], RoomScale,RoomScale,RoomScale + #EntityFX(e\room\Objects[9],0) + #PositionEntity(e\room\Objects[9], xtemp, e\room\y+992.0*RoomScale, ztemp) + #e\room\Objects[10] = LoadMesh_Strict("GFX\map\lightgun.b3d") + #EntityFX(e\room\Objects[10],0) + #ScaleEntity e\room\Objects[10], RoomScale,RoomScale,RoomScale + #PositionEntity(e\room\Objects[10], xtemp, e\room\y+(992.0+288.0)*RoomScale, ztemp-176.0*RoomScale,True) + #EntityParent e\room\Objects[10],e\room\Objects[9] + #RotateEntity e\room\Objects[9], 0, 48, 0 + #RotateEntity e\room\Objects[10], 40, 0, 0 + # + #For temp = 0 To 20 + #For i = 0 To 1 + #TranslateEntity e\room\NPC[i]\Collider, 0, -0.04, 0 + #Next + #For i = 5 To 8 + #TranslateEntity e\room\NPC[i]\Collider, 0, -0.04, 0 + #Next + #Next + # + #ResetEntity Collider + #e\EventState = 1.0 + # + #RotateEntity Collider,0,EntityYaw(Collider)+(e\room\angle+180),0 + # + #If (Not Contained106) Then PlaySound_Strict LoadTempSound("SFX\Ending\GateA\106Escape.ogg") + # + #DrawLoading(100) + #Else + # + #ShouldPlay = 17 + # + #e\EventState = e\EventState+FPSfactor + #HideEntity Fog + #CameraFogRange Camera, 5,30 + # + #angle = Max(Sin(EntityYaw(Collider)+90),0.0) + #;240,220,200 + #CameraFogColor (Camera,200+(angle*40),200+(angle*20),200) + #CameraClsColor (Camera,200+(angle*40),200+(angle*20),200) + #CameraRange(Camera, 0.05, 30) + # + #AmbientLight (140, 140, 140) + # + #For i = 2 To 4 + #If e\room\NPC[i]<>Null Then + #If e\room\NPC[i]\State < 2 Then + #PositionEntity(e\room\NPC[i]\Collider, EntityX(e\room\Objects[3],True)+Cos(e\EventState/10+(120*i))*6000.0*RoomScale,e\room\y+11,EntityZ(e\room\Objects[3],True)+Sin(e\EventState/10+(120*i))*6000.0*RoomScale) + #RotateEntity e\room\NPC[i]\Collider,7.0,(e\EventState/10+(120*i)),20.0 + #EndIf + #EndIf + #Next + # + #UpdateSky() + # + #If e\EventState=>350 Then + #If Contained106=False Then + #If e\EventState-FPSfactor < 350 + #Curr106\State = -0.1 + #;Curr106\Idle = True + #SetNPCFrame(Curr106, 110.0) + #PositionEntity (Curr106\Collider, EntityX(e\room\Objects[3],True),EntityY(Collider)-50.0,EntityZ(e\room\Objects[3],True),True) + #PositionEntity (Curr106\obj, EntityX(e\room\Objects[3],True),EntityY(Collider)-50.0,EntityZ(e\room\Objects[3],True),True) + #de.Decals = CreateDecal(0, EntityX(e\room\Objects[3],True),EntityY(e\room\Objects[3],True)+0.01,EntityZ(e\room\Objects[3],True), 90, Rand(360), 0) + #de\Size = 0.05 : de\SizeChange = 0.001 : EntityAlpha(de\obj, 0.8) : UpdateDecals() + #PlaySound_Strict (HorrorSFX(5)) + #PlaySound_Strict DecaySFX(0) + #ElseIf Curr106\State < 0 + #HideEntity Curr106\obj2 + #Curr106\PathTimer = 70*100 + # + #If Curr106\State3 = 0 Then + #If Curr106\PathStatus <> 1 Then + #PositionEntity Curr106\Collider,EntityX(e\room\Objects[3],True),EntityY(Curr106\Collider),EntityZ(e\room\Objects[3],True),True + #If Curr106\State =< -10 Then + #dist# = EntityY(Curr106\Collider) + #PositionEntity Curr106\Collider,EntityX(Curr106\Collider),EntityY(e\room\Objects[3],True),EntityZ(Curr106\Collider),True + #;Curr106\PathStatus = FindPath(Curr106, EntityX(e\room\Objects[4],True),EntityY(e\room\Objects[4],True),EntityZ(e\room\Objects[4],True)) + #Curr106\PathStatus = FindPath(Curr106,EntityX(e\room\NPC[5]\Collider,True),EntityY(e\room\NPC[5]\Collider,True),EntityZ(e\room\NPC[5]\Collider,True)) + #Curr106\PathTimer = 70*200 + #PositionEntity Curr106\Collider,EntityX(Curr106\Collider),dist,EntityZ(Curr106\Collider),True + #ResetEntity Curr106\Collider + #Curr106\PathLocation = 1 + #;Curr106\Idle = False + #;Else + #;PositionEntity (Curr106\Collider, EntityX(e\room\Objects[3],True),EntityY(e\room\Objects[3],True),EntityZ(e\room\Objects[3],True),True) + #;Curr106\Idle = True + #;Animate2(Curr106\obj, AnimTime(Curr106\obj), 110, 259, 0.15, False) + #;If AnimTime(Curr106\obj)=>259 Then Curr106\Idle = False + # + #EndIf + #Else + #Curr106\PathTimer = 70*200 + #For i = 2 To 4 ;helicopters start attacking 106 + #e\room\NPC[i]\State = 3 + #e\room\NPC[i]\EnemyX = EntityX(Curr106\obj,True) + #e\room\NPC[i]\EnemyY = EntityY(Curr106\obj,True)+5.0 + #e\room\NPC[i]\EnemyZ = EntityZ(Curr106\obj,True) + #Next + # + #For i = 5 To 8 + #e\room\NPC[i]\State = 5 + #e\room\NPC[i]\EnemyX = EntityX(Curr106\obj,True) + #e\room\NPC[i]\EnemyY = EntityY(Curr106\obj,True)+0.4 + #e\room\NPC[i]\EnemyZ = EntityZ(Curr106\obj,True) + #Next + # + #pvt=CreatePivot() + #PositionEntity pvt, EntityX(e\room\Objects[10],True),EntityY(e\room\Objects[10],True),EntityZ(e\room\Objects[10],True) + #PointEntity pvt, Curr106\Collider + #RotateEntity(e\room\Objects[9],0,CurveAngle(EntityYaw(pvt),EntityYaw(e\room\Objects[9],True),150.0),0,True) + #RotateEntity(e\room\Objects[10],CurveAngle(EntityPitch(pvt),EntityPitch(e\room\Objects[10],True),200.0),EntityYaw(e\room\Objects[9],True),0, True) + # + #FreeEntity pvt + # + #If FPSfactor > 0 Then ;decals under 106 + #If ((e\EventState-FPSfactor) Mod 100.0)=<50.0 And (e\EventState Mod 100.0)>50.0 Then + #de.Decals = CreateDecal(0, EntityX(Curr106\Collider,True),EntityY(e\room\Objects[3],True)+0.01,EntityZ(Curr106\Collider,True), 90, Rand(360), 0) + #de\Size = 0.2 : de\SizeChange = 0.004 : de\timer = 90000 : EntityAlpha(de\obj, 0.8) : UpdateDecals() + #EndIf + #EndIf + #EndIf + #EndIf + # + #dist# = Distance(EntityX(Curr106\Collider),EntityZ(Curr106\Collider),EntityX(e\room\Objects[4],True),EntityZ(e\room\Objects[4],True)) + # + #Curr106\CurrSpeed = CurveValue(0, Curr106\CurrSpeed, Max(5*dist,2.0)) + #If dist < 15.0 Then + #If e\SoundCHN2 = 0 Then + #e\SoundCHN2 = PlaySound_Strict (LoadTempSound("SFX\Ending\GateA\Franklin.ogg")) + #EndIf + # + #If dist<0.4 Then + #Curr106\PathStatus = 0 + #Curr106\PathTimer = 70*200 + #If Curr106\State3=0 Then + #SetNPCFrame(Curr106, 259.0) + #If e\Sound <> 0 Then FreeSound_Strict e\Sound : e\Sound = 0 + #LoadEventSound(e,"SFX\Ending\GateA\106Retreat.ogg") + #e\SoundCHN = PlaySound2(e\Sound, Camera, Curr106\Collider, 35.0) + #EndIf + # + #If FPSfactor > 0 Then ;106:n alle ilmestyy decaleita + #If ((e\EventState-FPSfactor) Mod 160.0)=<50.0 And (e\EventState Mod 160.0)>50.0 Then + #de.Decals = CreateDecal(0, EntityX(Curr106\Collider,True),EntityY(e\room\Objects[3],True)+0.01,EntityZ(Curr106\Collider,True), 90, Rand(360), 0) + #de\Size = 0.05 : de\SizeChange = 0.004 : de\timer = 90000 : EntityAlpha(de\obj, 0.8) : UpdateDecals() + #EndIf + #EndIf + # + #AnimateNPC(Curr106, 259, 110, -0.1, False) + # + #Curr106\State3 = Curr106\State3+FPSfactor + #PositionEntity(Curr106\Collider, EntityX(Curr106\Collider,True),CurveValue(EntityY(e\room\Objects[3],True)-(Curr106\State3/4500.0),EntityY(Curr106\Collider,True),100.0),EntityZ(Curr106\Collider,True)) + #If Curr106\State3>700.0 Then + #Curr106\State = 100000 + #e\EventState2 = 0 + #For i = 5 To 8 + #e\room\NPC[i]\State = 1 + #Next + #For i = 2 To 4 ;helicopters attack the player + #e\room\NPC[i]\State = 2 + #Next + #HideEntity Curr106\obj + #EndIf + #Else + #If dist < 8.5 Then + #If e\EventState2=0;ChannelPlaying(e\SoundCHN2) = 0 Then + #e\SoundCHN2 = PlaySound_Strict (LoadTempSound("SFX\Ending\GateA\HIDTurret.ogg")) + #e\EventState2 = 1 + #ElseIf e\EventState2>0 + #e\EventState2=e\EventState2+FPSfactor + #If e\EventState2=> 7.5*70 Then + #If e\EventState2-FPSfactor < 7.5*70 Then + #p.Particles = CreateParticle(EntityX(Curr106\obj,True),EntityY(Curr106\obj,True)+0.4, EntityZ(Curr106\obj,True), 4, 7.0, 0, (6.7*70)) + #p\speed = 0.0 + #p\A = 1.0 + #EntityParent p\pvt, Curr106\Collider, True + # + #p.Particles = CreateParticle(EntityX(e\room\Objects[10],True),EntityY(e\room\Objects[10],True),EntityZ(e\room\Objects[10],True), 4, 2.0, 0, (6.7*70)) + #RotateEntity p\pvt, EntityPitch(e\room\Objects[10],True),EntityYaw(e\room\Objects[10],True),0,True + #MoveEntity p\pvt, 0, 92.0*RoomScale, 512.0*RoomScale + #p\speed = 0.0 + #p\A = 1.0 + #EntityParent p\pvt, e\room\Objects[10], True + #ElseIf e\EventState2 < 14.3*70 + #CameraShake = 0.5 + #LightFlash = 0.3+EntityInView(e\room\Objects[10],Camera)*0.5 + #EndIf + #EndIf + #EndIf + # + #If ParticleAmount > 0 + #For i = 0 To Rand(2,2+(6*(ParticleAmount-1)))-Int(dist) + #p.Particles = CreateParticle(EntityX(Curr106\obj,True),EntityY(Curr106\obj,True)+Rnd(0.4,0.9), EntityZ(Curr106\obj), 0, 0.006, -0.002, 40) + #p\speed = 0.005 + #p\A = 0.8 + #p\Achange = -0.01 + #RotateEntity p\pvt, -Rnd(70,110), Rnd(360),0 + #Next + #EndIf + #EndIf + # + # + #EndIf + #EndIf + #EndIf + # + #If e\EventState3 = 0.0 Then + #If Abs(EntityY(Collider)-EntityY(e\room\Objects[11],True))<1.0 Then + #If Distance(EntityX(Collider),EntityZ(Collider),EntityX(e\room\Objects[11],True),EntityZ(e\room\Objects[11],True)) < 12.0 Then + #Curr106\State = 100000 + #HideEntity Curr106\obj + # + #;MTF spawns at the tunnel entrance + #For i = 5 To 8 + #e\room\NPC[i]\State = 3 + #PositionEntity e\room\NPC[i]\Collider, EntityX(e\room\Objects[15],True)+(i-6)*0.3,EntityY(e\room\Objects[15],True),EntityZ(e\room\Objects[15],True)+(i-6)*0.3, True + #ResetEntity e\room\NPC[i]\Collider + # + #e\room\NPC[i]\PathStatus = FindPath(e\room\NPC[i], EntityX(Collider),EntityY(Collider)+0.2,EntityZ(Collider)) + #e\room\NPC[i]\PathTimer = 70*2 + #e\room\NPC[i]\LastSeen = 70*100 + #Next + #e\room\NPC[5]\Sound = LoadSound_Strict("SFX\Character\MTF\ThereHeIs1.ogg") + #PlaySound2(e\room\NPC[5]\Sound, Camera, e\room\NPC[5]\Collider, 25.0) + # + #e\room\RoomDoors[2]\open = True + # + #For i = 2 To 4 + #RemoveNPC(e\room\NPC[i]) + #e\room\NPC[i]=Null + #Next + # + #e\EventState3 = 1.0 + #EndIf + #EndIf + #ElseIf e\EventState3 = 1.0 + # + #For i = 5 To 8 + #If EntityDistance(e\room\NPC[i]\Collider,Collider)> 4.0 Then + #e\room\NPC[i]\State = 3 + #Else + #e\room\NPC[i]\State = 1 + #EndIf + #Next + # + #If Abs(EntityY(Collider)-EntityY(e\room\Objects[11],True))<1.0 Then + #If Distance(EntityX(Collider),EntityZ(Collider),EntityX(e\room\Objects[11],True),EntityZ(e\room\Objects[11],True)) < 7.0 Then + #e\room\Objects[12] = LoadMesh_Strict("GFX\npcs\s2.b3d") + #EntityColor e\room\Objects[12], 0,0,0 + #ScaleMesh (e\room\Objects[12], 0.32/21.3, 0.32/21.3, 0.32/21.3) + #PositionEntity e\room\Objects[12], EntityX(e\room\Objects[11],True), EntityY(e\room\Objects[11],True), EntityZ(e\room\Objects[11],True) + # + #e\room\Objects[17] = CopyEntity(e\room\Objects[12]) + #PositionEntity e\room\Objects[17], EntityX(e\room\obj,True)-3968*RoomScale, EntityY(e\room\Objects[11],True), EntityZ(e\room\obj,True)-1920*RoomScale + # + #obj = CopyEntity(e\room\Objects[12]) + #PositionEntity obj, EntityX(e\room\obj,True)-4160*RoomScale, EntityY(e\room\Objects[11],True), EntityZ(e\room\obj,True)-1920*RoomScale + #EntityParent obj,e\room\Objects[17] + # + #obj = CopyEntity(e\room\Objects[12]) + #PositionEntity obj, EntityX(e\room\obj,True)-4064*RoomScale, EntityY(e\room\Objects[11],True), EntityZ(e\room\obj,True)-2112*RoomScale + #EntityParent obj,e\room\Objects[17] + # + #e\SoundCHN = PlaySound2(LoadTempSound("SFX\Ending\GateA\Bell1.ogg"), Camera, e\room\Objects[12]) + # + #p.Particles = CreateParticle(EntityX(e\room\Objects[11],True),EntityY(Camera,True), EntityZ(e\room\Objects[11],True), 4, 8.0, 0, 50) + #p\speed = 0.15 + #p\A = 0.5 + #p.Particles = CreateParticle(EntityX(e\room\Objects[11],True),EntityY(Camera,True), EntityZ(e\room\Objects[11],True), 4, 8.0, 0, 50) + #p\speed = 0.25 + #p\A = 0.5 + #PointEntity p\pvt, Collider + # + #CameraShake = 1.0 + #LightFlash = 1.0 + # + #e\EventState3 = 2.0 + #EndIf + #EndIf + #Else + #e\EventState3=e\EventState3+FPSfactor + #PointEntity e\room\Objects[12], Collider + #RotateEntity e\room\Objects[12], 0, EntityYaw(e\room\Objects[12]), 0 + # + #Stamina = -5.0 + # + #BlurTimer = Sin(e\EventState3*0.7)*1000.0 + # + #If KillTimer = 0 Then + #CameraZoom(Camera, 1.0+Sin(e\EventState3*0.8)*0.2) + # + #dist = EntityDistance(Collider,e\room\Objects[11]) + #If dist < 6.5 Then + #PositionEntity(Collider, CurveValue(EntityX(e\room\Objects[11],True),EntityX(Collider),dist*80),EntityY(Collider),CurveValue(EntityZ(e\room\Objects[0],True),EntityZ(Collider),dist*80)) + #EndIf + #EndIf + # + #;tunneli menee umpeen + #If e\EventState3>50 And e\EventState3<230 Then + #CameraShake = Sin(e\EventState3-50)*3 + #TurnEntity e\room\Objects[13], 0, (Sin(e\EventState3-50)*-0.85)*FPSfactor, 0, True + #TurnEntity e\room\Objects[14], 0, (Sin(e\EventState3-50)*0.85)*FPSfactor, 0, True + # + #For i = 5 To 8 + #PositionEntity (e\room\NPC[i]\Collider, CurveValue(EntityX(e\room\RoomDoors[2]\frameobj,True), EntityX(e\room\NPC[i]\Collider,True),50.0),EntityY(e\room\NPC[i]\Collider,True),CurveValue(EntityZ(e\room\RoomDoors[2]\frameobj,True), EntityZ(e\room\NPC[i]\Collider,True),50.0),True) + #ResetEntity e\room\NPC[i]\Collider + #Next + #EndIf + # + #If e\EventState3=>230.0 Then + #If e\EventState3-FPSfactor<230.0 Then + #e\SoundCHN = PlaySound_Strict(LoadTempSound("SFX\Ending\GateA\CI.ogg")) + #EndIf + # + #If ChannelPlaying(e\SoundCHN)=False And SelectedEnding="" Then + #PlaySound_Strict LoadTempSound("SFX\Ending\GateA\Bell2.ogg") + # + #p.Particles = CreateParticle(EntityX(e\room\Objects[11],True),EntityY(Camera,True), EntityZ(e\room\Objects[11],True), 4, 8.0, 0, 50) + #p\speed = 0.15 + #p\A = 0.5 + #p.Particles = CreateParticle(EntityX(e\room\Objects[11],True),EntityY(Camera,True), EntityZ(e\room\Objects[11],True), 4, 8.0, 0, 50) + #p\speed = 0.25 + #p\A = 0.5 + # + #SelectedEnding = "A1" + #GodMode = 0 + #NoClip = 0 + #KillTimer = -0.1 + #DeathMSG = "" + #Kill() + #EndIf + # + #If SelectedEnding <> "" Then + #CameraShake=CurveValue(2.0,CameraShake,10.0) + #LightFlash = CurveValue(2.0,LightFlash,8.0);Min(Abs(KillTimer)/100.0,1.0) + #EndIf + # + #EndIf + #EndIf + # + #Else ;contained106 = true + # + #If e\EventState2 = 0 Then + #;PositionEntity (e\room\NPC[5]\Collider, EntityX(e\room\obj,True)-3408*RoomScale, EntityY(e\room\obj,True)-796*RoomScale, EntityZ(e\room\obj,True)+4976, True) + #;ResetEntity e\room\NPC[5]\Collider + #e\EventState2 = 1 + # + #For i = 5 To 8 + #e\room\NPC[i]\State = 3 + # + #e\room\NPC[i]\PathStatus = FindPath(e\room\NPC[i], EntityX(e\room\obj)-1.0+2.0*(i Mod 2),EntityY(Collider)+0.2,EntityZ(e\room\obj)-2.0*(i Mod 2)) + #e\room\NPC[i]\PathTimer = 70*Rand(15,20) + #e\room\NPC[i]\LastSeen = 70*300 + #Next + #Else + # + #For i = 5 To 8 + #If e\room\NPC[i]\State = 5 + #e\room\NPC[i]\EnemyX = EntityX(Collider) + #e\room\NPC[i]\EnemyY = EntityY(Collider) + #e\room\NPC[i]\EnemyZ = EntityZ(Collider) + #Else + #If EntityDistance(e\room\NPC[i]\Collider,Collider)<6.0 + #e\room\NPC[i]\State = 5 + #e\room\NPC[i]\CurrSpeed = 0 + #EndIf + #EndIf + #Next + # + #If e\EventState2=<1 Then + #For i = 5 To 8 + #If e\room\NPC[i]\State = 5 Then + #For temp = 5 To 8 + #e\room\NPC[temp]\State = 5 + #e\room\NPC[temp]\EnemyX = EntityX(Collider) + #e\room\NPC[temp]\EnemyY = EntityY(Collider) + #e\room\NPC[temp]\EnemyZ = EntityZ(Collider) + #e\room\NPC[temp]\PathTimer = 70*Rand(7,10) + #e\room\NPC[temp]\Reload = 2000 + #UnableToMove% = True + #Next + # + #If e\EventState2=1 Then + #e\SoundCHN = PlaySound_Strict (LoadTempSound("SFX\Ending\GateA\STOPRIGHTTHERE.ogg")) + #e\EventState2=2 + #EndIf + #Else + #e\room\NPC[i]\LastSeen = 70*300 + #e\room\NPC[i]\Reload = 2000 + #e\room\NPC[i]\State3 = 70*145 + #EndIf + #Next + #Else + # + #ShouldPlay = 0 + #CurrSpeed = 0 + #If ChannelPlaying(e\SoundCHN)=False Then + #PlaySound_Strict IntroSFX(9) + #SelectedEnding = "A2" + #GodMode = 0 + #NoClip = 0 + #KillTimer = -0.1 + #DeathMSG = "" + #Kill() + #BlinkTimer = -10 + #RemoveEvent(e) + #Exit + #EndIf + #EndIf + # + #EndIf + # + #EndIf + #EndIf + # + #EndIf + #Else + #HideEntity e\room\obj + #EndIf + #;[End Block] + #End Select + #Next + # + #If ExplosionTimer > 0 Then + #ExplosionTimer = ExplosionTimer+FPSfactor + # + #If ExplosionTimer < 140.0 Then + #If ExplosionTimer-FPSfactor < 5.0 Then + #ExplosionSFX = LoadSound_Strict("SFX\Ending\GateB\Nuke1.ogg") + #PlaySound_Strict ExplosionSFX + #CameraShake = 10.0 + #ExplosionTimer = 5.0 + #EndIf + # + #CameraShake = CurveValue(ExplosionTimer/60.0,CameraShake, 50.0) + #Else + #CameraShake = Min((ExplosionTimer/20.0),20.0) + #If ExplosionTimer-FPSfactor < 140.0 Then + #BlinkTimer = 1.0 + #ExplosionSFX = LoadSound_Strict("SFX\Ending\GateB\Nuke2.ogg") + #PlaySound_Strict ExplosionSFX + #For i = 0 To (10+(10*(ParticleAmount+1))) + #p.Particles = CreateParticle(EntityX(Collider)+Rnd(-0.5,0.5),EntityY(Collider)-Rnd(0.2,1.5),EntityZ(Collider)+Rnd(-0.5,0.5),0, Rnd(0.2,0.6), 0.0, 350) + #RotateEntity p\pvt,-90,0,0,True + #p\speed = Rnd(0.05,0.07) + #Next + #EndIf + #LightFlash = Min((ExplosionTimer-140.0)/10.0,5.0) + # + #If ExplosionTimer > 160 Then KillTimer = Min(KillTimer,-0.1) + #If ExplosionTimer > 500 Then ExplosionTimer = 0 + # + #;a dirty workaround to prevent the collider from falling down into the facility once the nuke goes off, + #;causing the UpdateEvent function to be called again and crashing the game + #PositionEntity Collider, EntityX(Collider), 200, EntityZ(Collider) + #EndIf + # + #EndIf diff --git a/src/EventSystem.gd.uid b/src/EventSystem.gd.uid new file mode 100644 index 0000000..b22124d --- /dev/null +++ b/src/EventSystem.gd.uid @@ -0,0 +1 @@ +uid://pga6iqmmq4w0 diff --git a/src/GameStartup.gd b/src/GameStartup.gd index d340da2..bf22dda 100644 --- a/src/GameStartup.gd +++ b/src/GameStartup.gd @@ -4,9 +4,9 @@ var skipIntro = false func _ready() -> void: DisplayServer.window_set_title(str("SCP - Containment Breach v", Global.GAME_VERSION)) - var width = Main.options.get("options").get("width").to_int() - var height = Main.options.get("options").get("height").to_int() - var fullscreen = Main.options.get("options").get("fullscreen").to_lower() == "true" + var width = Global.options.get("options").get("width").to_int() + var height = Global.options.get("options").get("height").to_int() + var fullscreen = Global.options.get("options").get("fullscreen").to_lower() == "true" DisplayServer.window_set_max_size(Vector2i(width, height)) DisplayServer.window_set_min_size(Vector2i(width, height)) var window = get_window() diff --git a/src/Global.gd b/src/Global.gd index 46fa5a6..10f328a 100644 --- a/src/Global.gd +++ b/src/Global.gd @@ -109,26 +109,125 @@ var EnableVRam: int var NavImages: Array = Utils.Init1DArray(5, null) var MusicVolume: float = 1.0 +var SFXVolume: float = 1.0 +var PlayerSoundVolume: float = 0 + +var materials: Dictionary +func StepSoundFromTexture(textureName: String): + if materials.has(textureName): + if materials[textureName].has("stepsound"): + return INI.GetInt(materials[textureName], "stepsound") + return 0 # TODO: Set SFX volume! -func PlayTempSound(path: String): +func PlayTempSound(path) -> AudioStreamPlayer: var audioPlayer = AudioStreamPlayer.new() add_child(audioPlayer) audioPlayer.connect("finished", func(): audioPlayer.queue_free() ) + if path is String: + audioPlayer.stream = LoadAudio(path) + elif path is AudioStream: + audioPlayer.stream = path + audioPlayer.play() + return audioPlayer + +func PlayTempSound3D(path: String, targetPos: Node3D): + var audioPlayer = AudioStreamPlayer3D.new() + add_child(audioPlayer) + audioPlayer.global_position = targetPos.global_position + audioPlayer.connect("finished", func(): + audioPlayer.queue_free() + ) audioPlayer.stream = LoadAudio(path) audioPlayer.play() return audioPlayer +func PlaySound2(path: String, cam: Node3D, entity: Node3D, range: float = 10, volume: float = 1.0): + range = max(range, 1.0) + + var audioPlayer = PlayTempSound3D(path, entity) + if volume > 0: + var dist: float = cam.global_position.distance_to(entity.global_position) / range + if 1.0 - dist > 0.0 and 1.0 - dist < 1.0: + audioPlayer.volume_db = linear_to_db(volume * (1 - dist) * SFXVolume) + else: + audioPlayer.stop() + + return audioPlayer + +var musicSystem: MusicSystem + +var options: Dictionary + +var difficulties: Array = Utils.Init1DArray(4) + +var SelectedDifficulty: Difficulty + func _ready(): - #BumpEnabled = GetINIInt("options.ini", "options", "bump mapping enabled") - #Brightness = GetINIFloat("options.ini", "options", "brightness") - #HUDenabled = GetINIInt("options.ini", "options", "HUD enabled") - #CameraFogNear = GetINIFloat("options.ini", "options", "camera fog near") - #CameraFogFar = GetINIFloat("options.ini", "options", "camera fog far") - #MouseSens = GetINIFloat("options.ini", "options", "mouse sensitivity") - #EnableVRam = GetINIInt("options.ini", "options", "enable vram") + options = INI.Load("res://options.ini") + materials = INI.Load("res://Data/materials.ini") + + musicSystem = MusicSystem.new() + add_child(musicSystem) + var optionsSection = options["options"] + BumpEnabled = INI.GetInt(optionsSection, "bump mapping enabled") + Brightness = INI.GetFloat(optionsSection, "brightness") + HUDenabled = INI.GetInt(optionsSection, "HUD enabled") + CameraFogNear = INI.GetFloat(optionsSection, "camera fog near") + CameraFogFar = INI.GetFloat(optionsSection, "camera fog far") + MouseSens = INI.GetFloat(optionsSection, "mouse sensitivity") + EnableVRam = INI.GetInt(optionsSection, "enable vram") + + MusicVolume = INI.GetFloat(options["audio"], "music volume") + SFXVolume = INI.GetFloat(options["audio"], "sound volume") + + difficulties[Constants.SAFE] = Difficulty.new() + difficulties[Constants.SAFE].name = "Safe" + difficulties[Constants.SAFE].description = "The game can be saved any time. However, as in the case of SCP Objects, a Safe classification does not mean that handling it does not pose a threat." + difficulties[Constants.SAFE].permaDeath = false + difficulties[Constants.SAFE].aggressiveNPCs = 0 + difficulties[Constants.SAFE].saveType = Constants.SAVEANYWHERE + difficulties[Constants.SAFE].otherFactors = Constants.EASY + difficulties[Constants.SAFE].r = 120 + difficulties[Constants.SAFE].g = 150 + difficulties[Constants.SAFE].b = 50 + + difficulties[Constants.EUCLID] = Difficulty.new() + difficulties[Constants.EUCLID].name = "Euclid" + difficulties[Constants.EUCLID].description = "In Euclid difficulty, saving is only allowed at specific locations marked by lit up computer screens. " + "Euclid-class objects are inherently unpredictable, so that reliable containment is not always possible." + difficulties[Constants.EUCLID].permaDeath = false + difficulties[Constants.EUCLID].aggressiveNPCs = 0 + difficulties[Constants.EUCLID].saveType = Constants.SAVEONSCREENS + difficulties[Constants.EUCLID].otherFactors = Constants.NORMAL + difficulties[Constants.EUCLID].r = 200 + difficulties[Constants.EUCLID].g = 200 + difficulties[Constants.EUCLID].b = 0 + + difficulties[Constants.KETER] = Difficulty.new() + difficulties[Constants.KETER].name = "Keter" + difficulties[Constants.KETER].description = "Keter-class objects are considered the most dangerous ones in Foundation containment. " + "The same can be said for this difficulty level: the SCPs are more aggressive, and you have only one life - when you die, the game is over. " + difficulties[Constants.KETER].permaDeath = true + difficulties[Constants.KETER].aggressiveNPCs = 1 + difficulties[Constants.KETER].saveType = Constants.SAVEONQUIT + difficulties[Constants.KETER].otherFactors = Constants.HARD + difficulties[Constants.KETER].r = 200 + difficulties[Constants.KETER].g = 0 + difficulties[Constants.KETER].b = 0 + + difficulties[Constants.CUSTOM] = Difficulty.new() + difficulties[Constants.CUSTOM].name = "Custom" + difficulties[Constants.CUSTOM].permaDeath = false + difficulties[Constants.CUSTOM].aggressiveNPCs = 1 + difficulties[Constants.CUSTOM].saveType = Constants.SAVEANYWHERE + difficulties[Constants.CUSTOM].customizable = true + difficulties[Constants.CUSTOM].otherFactors = Constants.EASY + difficulties[Constants.CUSTOM].r = 255 + difficulties[Constants.CUSTOM].g = 255 + difficulties[Constants.CUSTOM].b = 255 + + SelectedDifficulty = difficulties[Constants.SAFE] MusicCHN.name = "MusicCHN" add_child(MusicCHN) @@ -156,12 +255,12 @@ var PrevTime = 0 func _process(delta): #FPSfactor = delta * 1000 - #FPSfactor = max(min(delta * 70, 5.0), 0.2) + FPSfactor = max(min(delta * 70, 5.0), 0.2) #print(max(min(delta * 70, 5.0), 0.2)) - CurTime = Time.get_ticks_usec() - ElapsedTime = (CurTime - PrevTime) / 1000000.0 - PrevTime = CurTime - FPSfactor = max(min(ElapsedTime * 70, 5.0), 0.2) + #CurTime = Time.get_ticks_usec() + #ElapsedTime = (CurTime - PrevTime) / 1000000.0 + #PrevTime = CurTime + #FPSfactor = max(min(ElapsedTime * 70, 5.0), 0.2) if Engine.time_scale == 0: FPSfactor = 0 diff --git a/src/Launcher.gd b/src/Launcher.gd index d908362..b31e6ab 100644 --- a/src/Launcher.gd +++ b/src/Launcher.gd @@ -5,8 +5,8 @@ func _ready() -> void: $SelectionList.connect("selection_changed", func(resolutionRaw: String): var resSplit = resolutionRaw.split("x") - Main.options.get("options")["width"] = resSplit[0] - Main.options.get("options")["height"] = resSplit[1] + Global.options.get("options")["width"] = resSplit[0] + Global.options.get("options")["height"] = resSplit[1] ) $Launch.connect("clicked", func(): get_tree().change_scene_to_file("res://scenes/screens/GameStartup.tscn") diff --git a/src/LoadAllSounds.gd b/src/LoadAllSounds.gd new file mode 100644 index 0000000..a0c4df3 --- /dev/null +++ b/src/LoadAllSounds.gd @@ -0,0 +1,198 @@ +class_name LoadAllSounds + +static func Go(map: DynamicMap): + # Dim OpenDoorSFX%(3,3), CloseDoorSFX%(3,3) + for i in range(3): + map.OpenDoorSFX[0][i] = Global.LoadAudio(str("SFX/Door/DoorOpen", (i + 1), ".ogg")) + map.CloseDoorSFX[0][i] = Global.LoadAudio(str("SFX/Door/DoorClose", (i + 1), ".ogg")) + map.OpenDoorSFX[2][i] = Global.LoadAudio(str("SFX/Door/Door2Open", (i + 1), ".ogg")) + map.CloseDoorSFX[2][i] = Global.LoadAudio(str("SFX/Door/Door2Close", (i + 1), ".ogg")) + map.OpenDoorSFX[3][i] = Global.LoadAudio(str("SFX/Door/ElevatorOpen", (i + 1), ".ogg")) + map.CloseDoorSFX[3][i] = Global.LoadAudio(str("SFX/Door/ElevatorClose", (i + 1), ".ogg")) + + for i in range(2): + map.OpenDoorSFX[1][i] = Global.LoadAudio(str("SFX/Door/BigDoorOpen", (i + 1), ".ogg")) + map.CloseDoorSFX[1][i] = Global.LoadAudio(str("SFX/Door/BigDoorClose", (i + 1), ".ogg")) + + map.KeyCardSFX1 = Global.LoadAudio("SFX/Interact/KeyCardUse1.ogg") + map.KeyCardSFX2 = Global.LoadAudio("SFX/Interact/KeyCardUse2.ogg") + map.ButtonSFX2 = Global.LoadAudio("SFX/Interact/Button2.ogg") + map.ScannerSFX1 = Global.LoadAudio("SFX/Interact/ScannerUse1.ogg") + map.ScannerSFX2 = Global.LoadAudio("SFX/Interact/ScannerUse2.ogg") + + map.OpenDoorFastSFX = Global.LoadAudio("SFX/Door/DoorOpenFast.ogg") + map.CautionSFX = Global.LoadAudio("SFX/Room/LockroomSiren.ogg") + + # NuclearSirenSFX% + + map.CameraSFX = Global.LoadAudio("SFX/General/Camera.ogg") + + map.StoneDragSFX = Global.LoadAudio("SFX/SCP/173/StoneDrag.ogg") + + map.GunshotSFX = Global.LoadAudio("SFX/General/Gunshot.ogg") + map.Gunshot2SFX = Global.LoadAudio("SFX/General/Gunshot2.ogg") + map.Gunshot3SFX = Global.LoadAudio("SFX/General/BulletMiss.ogg") + map.BullethitSFX = Global.LoadAudio("SFX/General/BulletHit.ogg") + + map.TeslaIdleSFX = Global.LoadAudio("SFX/Room/Tesla/Idle.ogg") + map.TeslaActivateSFX = Global.LoadAudio("SFX/Room/Tesla/WindUp.ogg") + map.TeslaPowerUpSFX = Global.LoadAudio("SFX/Room/Tesla/PowerUp.ogg") + + map.MagnetUpSFX = Global.LoadAudio("SFX/Room/106Chamber/MagnetUp.ogg") + map.MagnetDownSFX = Global.LoadAudio("SFX/Room/106Chamber/MagnetDown.ogg") + # FemurBreakerSFX% + # EndBreathCHN% + # EndBreathSFX% + + # Dim DecaySFX%(5) + for i in range(4): + map.DecaySFX[i] = Global.LoadAudio(str("SFX/SCP/106/Decay", i, ".ogg")) + + map.BurstSFX = Global.LoadAudio("SFX/Room/TunnelBurst.ogg") + + # DrawLoading(20, True) + + # Dim RustleSFX%(3) + for i in range(3): + map.RustleSFX[i] = Global.LoadAudio(str("SFX/SCP/372/Rustle", i, ".ogg")) + + map.Death914SFX = Global.LoadAudio("SFX/SCP/914/PlayerDeath.ogg") + map.Use914SFX = Global.LoadAudio("SFX/SCP/914/PlayerUse.ogg") + + # Dim DripSFX%(4) + for i in range(4): + map.DripSFX[i] = Global.LoadAudio(str("SFX/Character/D9341/BloodDrip", i, ".ogg")) + + map.LeverSFX = Global.LoadAudio("SFX/Interact/LeverFlip.ogg") + map.LightSFX = Global.LoadAudio("SFX/General/LightSwitch.ogg") + + map.ButtGhostSFX = Global.LoadAudio("SFX/SCP/Joke/789J.ogg") + + # Dim RadioSFX(5,10) + map.RadioSFX[1][0] = Global.LoadAudio("SFX/Radio/RadioAlarm.ogg") + map.RadioSFX[1][1] = Global.LoadAudio("SFX/Radio/RadioAlarm2.ogg") + for i in range(9): + map.RadioSFX[2][i] = Global.LoadAudio(str("SFX/Radio/scpradio", i, ".ogg")) + + map.RadioSquelch = Global.LoadAudio("SFX/Radio/squelch.ogg") + map.RadioStatic = Global.LoadAudio("SFX/Radio/static.ogg") + map.RadioBuzz = Global.LoadAudio("SFX/Radio/buzz.ogg") + + map.ElevatorBeepSFX = Global.LoadAudio("SFX/General/Elevator/Beep.ogg") + map.ElevatorMoveSFX = Global.LoadAudio("SFX/General/Elevator/Moving.ogg") + + # Dim PickSFX%(10) + for i in range(4): + map.PickSFX[i] = Global.LoadAudio(str("SFX/Interact/PickItem", i, ".ogg")) + + # AmbientSFXCHN% + # CurrAmbientSFX% + # Dim AmbientSFXAmount(6) + # 0 = light containment, 1 = heavy containment, 2 = entrance + map.AmbientSFXAmount[0] = 11 + map.AmbientSFXAmount[1] = 11 + map.AmbientSFXAmount[2] = 12 + # 3 = general, 4 = pre-breach + map.AmbientSFXAmount[3] = 15 + map.AmbientSFXAmount[4] = 5 + # 5 = forest + map.AmbientSFXAmount[5] = 10 + + # Dim AmbientSFX%(6, 15) + + # Dim OldManSFX%(6) + for i in range(3): + map.OldManSFX[i] = Global.LoadAudio(str("SFX/SCP/106/Corrosion", (i + 1), ".ogg")) + + map.OldManSFX[3] = Global.LoadAudio("SFX/SCP/106/Laugh.ogg") + map.OldManSFX[4] = Global.LoadAudio("SFX/SCP/106/Breathing.ogg") + map.OldManSFX[5] = Global.LoadAudio("SFX/Room/PocketDimension/Enter.ogg") + for i in range(3): + map.OldManSFX[6 + i] = Global.LoadAudio(str("SFX/SCP/106/WallDecay", (i + 1), ".ogg")) + + + # Dim Scp173SFX%(3) + for i in range(3): + map.Scp173SFX[i] = Global.LoadAudio(str("SFX/SCP/173/Rattle", (i + 1), ".ogg")) + + # Dim HorrorSFX%(20) + for i in range(12): + map.HorrorSFX[i] = Global.LoadAudio(str("SFX/Horror/Horror", i, ".ogg")) + + for i in range(14, 16): + map.HorrorSFX[i] = Global.LoadAudio(str("SFX/Horror/Horror", i, ".ogg")) + + # DrawLoading(25, True) + + # Dim IntroSFX%(20) + + for i in range(7, 10): + map.IntroSFX[i] = Global.LoadAudio(str("SFX/Room/Intro/Bang", (i - 6), ".ogg")) + + for i in range(10, 13): + map.IntroSFX[i] = Global.LoadAudio(str("SFX/Room/Intro/Light", (i - 9), ".ogg")) + + # IntroSFX(13) = Global.LoadAudio("SFX\intro\shoot1.ogg") + # IntroSFX(14) = Global.LoadAudio("SFX\intro\shoot2.ogg") + map.IntroSFX[15] = Global.LoadAudio("SFX/Room/Intro/173Vent.ogg") + + # Dim AlarmSFX%(5) + map.AlarmSFX[0] = Global.LoadAudio("SFX/Alarm/Alarm.ogg") + # AlarmSFX(1) = Global.LoadAudio("SFX\Alarm\Alarm2.ogg") + map.AlarmSFX[2] = Global.LoadAudio("SFX/Alarm/Alarm3.ogg") + + # room_gw alarms + map.AlarmSFX[3] = Global.LoadAudio("SFX/Alarm/Alarm4.ogg") + map.AlarmSFX[4] = Global.LoadAudio("SFX/Alarm/Alarm5.ogg") + + # Dim CommotionState%(23) + + map.HeartBeatSFX = Global.LoadAudio("SFX/Character/D9341/Heartbeat.ogg") + + # VomitSFX% + + # Dim BreathSFX(2,5) + # BreathCHN% + for i in range(0, 5): + map.BreathSFX[0][i] = Global.LoadAudio(str("SFX/Character/D9341/breath", i, ".ogg")) + map.BreathSFX[1][i] = Global.LoadAudio(str("SFX/Character/D9341/breath", i, "gas.ogg")) + + + # Dim NeckSnapSFX(3) + for i in range(0, 3): + map.NeckSnapSFX[i] = Global.LoadAudio(str("SFX/SCP/173/NeckSnap", (i + 1), ".ogg")) + + # Dim DamageSFX%(9) + for i in range(0, 9): + map.DamageSFX[i] = Global.LoadAudio(str("SFX/Character/D9341/Damage", (i + 1), ".ogg")) + + # Dim MTFSFX%(8) + + # Dim CoughSFX%(3) + # CoughCHN% + # VomitCHN% + for i in range(0, 3): + map.CoughSFX[i] = Global.LoadAudio(str("SFX/Character/D9341/Cough", (i + 1), ".ogg")) + + map.MachineSFX = Global.LoadAudio("SFX/SCP/914/Refining.ogg") + + map.ApacheSFX = Global.LoadAudio("SFX/Character/Apache/Propeller.ogg") + + # CurrStepSFX + # Dim StepSFX%(4, 2, 8) ;(normal/metal, walk/run, id) + for i in range(0, 8): + map.StepSFX[0][0][i] = Global.LoadAudio(str("SFX/Step/Step", (i + 1), ".ogg")) + map.StepSFX[1][0][i] = Global.LoadAudio(str("SFX/Step/StepMetal", (i + 1), ".ogg")) + map.StepSFX[0][1][i] = Global.LoadAudio(str("SFX/Step/Run", (i + 1), ".ogg")) + map.StepSFX[1][1][i] = Global.LoadAudio(str("SFX/Step/RunMetal", (i + 1), ".ogg")) + if i < 3: + map.StepSFX[2][0][i] = Global.LoadAudio(str("SFX/Character/MTF/Step", (i + 1), ".ogg")) + map.StepSFX[3][0][i] = Global.LoadAudio(str("SFX/SCP/049/Step", (i + 1), ".ogg")) + + if i < 4: + map.StepSFX[4][0][i] = Global.LoadAudio(str("SFX/Step/SCP/StepSCP", (i + 1), ".ogg")) # new one 1.3.9 + + # Dim Step2SFX(6) + for i in range(0, 3): + map.Step2SFX[i] = Global.LoadAudio(str("SFX/Step/StepPD", (i + 1), ".ogg")) + map.Step2SFX[i + 3] = Global.LoadAudio(str("SFX/Step/StepForest", (i + 1), ".ogg")) diff --git a/src/LoadAllSounds.gd.uid b/src/LoadAllSounds.gd.uid new file mode 100644 index 0000000..57d5f5e --- /dev/null +++ b/src/LoadAllSounds.gd.uid @@ -0,0 +1 @@ +uid://bq5s2xnh5mlyh diff --git a/src/LoadInit.gd b/src/LoadInit.gd index 27c1eed..1bb25a7 100644 --- a/src/LoadInit.gd +++ b/src/LoadInit.gd @@ -20,10 +20,9 @@ func loadThread(): #Include "dreamfilter.bb" - Global.MusicVolume = INI.GetFloat(Main.options["audio"], "music volume") Global.MusicCHN.stream = Global.LoadAudio("SFX/Music/"+ str(Global.Music[2]) + ".ogg") Global.MusicCHN.stream.loop = true - #Global.MusicCHN.volume_linear = Global.MusicVolume + Global.MusicCHN.volume_db = linear_to_db(Global.MusicVolume) Global.MusicCHN.play.call_deferred() loadingScreen.LoadProgress(10) @@ -69,7 +68,7 @@ func loadThread(): var nomore = false func _process(delta: float) -> void: - if not nomore and loadingScreen.loaded and Input.is_anything_pressed(): + if not nomore and loadingScreen.loaded and Input.is_action_just_pressed("ui_accept"): nomore = true get_tree().change_scene_to_file("res://scenes/screens/MainMenu.tscn") diff --git a/src/LoadWorld.gd b/src/LoadWorld.gd index 8cc5b2c..b1544cd 100644 --- a/src/LoadWorld.gd +++ b/src/LoadWorld.gd @@ -11,10 +11,13 @@ func _ready(): var thread: Thread func nextFrame(): - thread = Thread.new() - thread.start(loadThread) + #thread = Thread.new() + #thread.start(loadThread) + loadThread() func loadThread(): + LoadAllSounds.Go(map) + #Local i%, de.Decals, d.Doors, it.Items, r.Rooms, sc.SecurityCams, e.Events map.LoadRoomTemplates("Data/rooms.ini") @@ -34,6 +37,10 @@ func loadThread(): #else: #LoadMap("Map Creator\Maps\"+SelectedMap) + #var busyWork: int + #while not map.mapMade: + #busyWork += 1 + #InitWayPoints() loadingScreen.LoadProgress(79) @@ -43,19 +50,19 @@ func loadThread(): #Curr106.State = 70 * 60 * randi_range(12,17) for d: Door in map.doors: - map.EntityParent(d.obj, null) + map.EntityParent.call_deferred(d.obj, null) if d.obj2 != null: - map.EntityParent(d.obj2, null) + map.EntityParent.call_deferred(d.obj2, null) if d.frameobj != null: - map.EntityParent(d.frameobj, null) + map.EntityParent.call_deferred(d.frameobj, null) if d.buttons[0] != null: - map.EntityParent(d.buttons[0], null) + map.EntityParent.call_deferred(d.buttons[0], null) if d.buttons[1] != null: - map.EntityParent(d.buttons[1], null) + map.EntityParent.call_deferred(d.buttons[1], null) if d.obj2 != null and d.dir == 0: - map.MoveEntity(d.obj, 0, 0, 8.0 * Constants.RoomScale) - map.MoveEntity(d.obj2, 0, 0, 8.0 * Constants.RoomScale) + map.MoveEntity.call_deferred(d.obj, 0, 0, 8.0 * Constants.RoomScale) + map.MoveEntity.call_deferred(d.obj2, 0, 0, 8.0 * Constants.RoomScale) #for it: Item in map.items: #map.EntityType (it.collider, HIT_ITEM) @@ -70,7 +77,7 @@ func loadThread(): for r: Room in map.rooms: for i in range(Constants.MaxRoomLights): if r.Lights[i] != null: - map.EntityParent(r.Lights[i], null) + map.EntityParent.call_deferred(r.Lights[i], null) #if (not r.RoomTemplate.DisableDecals): #if randi_range(0, 4) == 1: @@ -125,31 +132,29 @@ func loadThread(): #ResetEntity Collider - #If SelectedMap = "" Then InitEvents() - # - #For e.Events = Each Events - #If e\EventName = "room2nuke" - #e\EventState = 1 - #DebugLog "room2nuke" - #EndIf - #If e\EventName = "room106" - #e\EventState2 = 1 - #DebugLog "room106" - #EndIf - #If e\EventName = "room2sl" - #e\EventState3 = 1 - #DebugLog "room2sl" - #EndIf - #Next - # + #if SelectedMap == "": + map.eventSystem.InitEvents() + + for e: Event in map.eventSystem.events: + if e.EventName == "room2nuke": + e.EventState = 1.0 + print("room2nuke") + if e.EventName == "room106": + e.EventState2 = 1.0 + print("room106") + if e.EventName == "room2sl": + e.EventState3 = 1.0 + print("room2sl") + #MoveMouse viewport_center_x,viewport_center_y;320, 240 # #AASetFont Font1 #HidePointer() + Input.mouse_mode = Input.MOUSE_MODE_CAPTURED Global.player = load("res://scenes/world/Player.tscn").instantiate() - map.add_child(Global.player) + map.add_child.call_deferred(Global.player) Global.player.BlinkTimer = -10 #Global.player.BlurTimer = 100 @@ -158,11 +163,11 @@ func loadThread(): for i in range(70): Global.FPSfactor = 1.0 #FlushKeys() - Global.player._process(Global.FPSfactor / 70.0) - Global.player._physics_process(Global.FPSfactor / 70.0) + #Global.player._process(Global.FPSfactor / 70.0) + #Global.player._physics_process(Global.FPSfactor / 70.0) map.UpdateDoors() - map.UpdateNPCs() - map.UpdateWorld() + #map.UpdateNPCs() + #map.UpdateWorld() if (int(float(i) * 0.27) != int(float(i - 1) * 0.27)): loadingScreen.LoadProgress(80 + int(float(i) * 0.27)) @@ -177,5 +182,13 @@ func loadThread(): #PrevTime = MilliSecs() -func _exit_tree() -> void: - thread.wait_to_finish() +var nomore = false +func _process(delta: float) -> void: + if not nomore and loadingScreen.loaded and Input.is_action_just_pressed("ui_accept"): + nomore = true + queue_free.call_deferred() + map.OtherOpen = null + +# +#func _exit_tree() -> void: + #thread.wait_to_finish() diff --git a/src/LoadingScreen.gd b/src/LoadingScreen.gd index 13956d3..964bfea 100644 --- a/src/LoadingScreen.gd +++ b/src/LoadingScreen.gd @@ -75,7 +75,7 @@ func LoadProgress(progress: int): loadProgressIndex += 1 loadProgressIndex = min(loadProgressIndex, loadingText.size() - 1) percent = progress - queue_redraw.call_deferred() + queue_redraw() func _ready() -> void: background = $Background diff --git a/src/Main.gd b/src/Main.gd index efcbb7d..8986892 100644 --- a/src/Main.gd +++ b/src/Main.gd @@ -1,5 +1,3 @@ class_name Main -static var options = INI.Load("res://options.ini") - static var SeedRnd = 0 diff --git a/src/MainMenu.gd b/src/MainMenu.gd index 8b749e6..d4c5ae2 100644 --- a/src/MainMenu.gd +++ b/src/MainMenu.gd @@ -8,6 +8,7 @@ var backBar: ColorRect var buttonList: Array var jankyFix: ColorRect func _ready() -> void: + MusicSystem.UpdateMusic = true jankyFix = $JankyFix jankyFix.visible = true back = $Back @@ -21,7 +22,7 @@ func _ready() -> void: $Buttons/Quit.connect("clicked", quitGame) func newGame(): - print("clicked new game") + get_tree().change_scene_to_file.call_deferred("res://scenes/world/DynamicMap.tscn") func quitGame(): get_tree().quit.call_deferred() @@ -33,6 +34,23 @@ func _process(_delta: float) -> void: else: jankyCounter += 1 + if jankyFix.visible: + return + + if MusicSystem.ShouldPlay == 21: + #EndBreathSFX = LoadSound("SFX\Ending\MenuBreath.ogg") + #EndBreathCHN = PlaySound(EndBreathSFX) + #ShouldPlay = 66 + pass + elif MusicSystem.ShouldPlay == 66: + #if Not ChannelPlaying(EndBreathCHN) Then + #FreeSound(EndBreathSFX) + #ShouldPlay = 11 + #EndIf + pass + else: + MusicSystem.ShouldPlay = 11 + Global.menuScale = size.y / 1024.0 diff --git a/src/MusicSystem.gd b/src/MusicSystem.gd new file mode 100644 index 0000000..e0367ee --- /dev/null +++ b/src/MusicSystem.gd @@ -0,0 +1,44 @@ +extends Node +class_name MusicSystem + +static var NowPlaying: int = 2 +static var ShouldPlay: int = 11 +static var CurrMusicVolume: float = 1.0 +static var CurrMusic: int = 1 +static var UpdateMusic: bool = false + +func _ready(): + name = "MusicSystem" + +func _process(delta: float) -> void: + if not UpdateMusic: + return + #if ConsoleFlush Then + #If Not ChannelPlaying(ConsoleMusPlay) Then ConsoleMusPlay = PlaySound(ConsoleMusFlush) + #ElseIf (Not PlayCustomMusic) + if NowPlaying != ShouldPlay: # playing the wrong clip, fade out + CurrMusicVolume = max(CurrMusicVolume - (Global.FPSfactor / 250.0), 0.0) + if CurrMusicVolume == 0: + if NowPlaying < 66: + Global.MusicCHN.stop() + NowPlaying = ShouldPlay + CurrMusic = 0 + else: # playing the right clip + CurrMusicVolume = CurrMusicVolume + (Global.MusicVolume - CurrMusicVolume) * (0.1 * Global.FPSfactor) + + if NowPlaying < 66: + if CurrMusic == 0: + Global.MusicCHN.stop() + Global.MusicCHN.stream = Global.LoadAudio("SFX/Music/" + str(Global.Music[NowPlaying]) + ".ogg") + Global.MusicCHN.stream.loop = true + Global.MusicCHN.volume_db = linear_to_db(0) + Global.MusicCHN.play() + CurrMusic = 1 + Global.MusicCHN.volume_db = linear_to_db(CurrMusicVolume) + #Else + #If FPSfactor > 0 Or OptionsMenu = 2 Then + #;CurrMusicVolume = 1.0 + #If (Not ChannelPlaying(MusicCHN)) Then MusicCHN = PlaySound_Strict(CustomMusic) + #ChannelVolume MusicCHN,1.0*MusicVolume + #EndIf + #EndIf diff --git a/src/MusicSystem.gd.uid b/src/MusicSystem.gd.uid new file mode 100644 index 0000000..b98c43b --- /dev/null +++ b/src/MusicSystem.gd.uid @@ -0,0 +1 @@ +uid://cev5wfhvjabsb diff --git a/src/Player.gd b/src/Player.gd index 54b1612..93f34ca 100644 --- a/src/Player.gd +++ b/src/Player.gd @@ -10,8 +10,10 @@ var sprintIconBG: ColorRect var blinkBar: Control var sprintBar: Control var Hud: Control +var map: Node3D func _ready() -> void: + map = get_parent() Global.player = self head = $Head camera = $Head/Camera @@ -67,6 +69,8 @@ var EyeStuck:float = 0 var BlinkEffect:float = 1.0 var BlinkEffectTimer:float = 0 +var CurrStepSFX: int = 0 + var LightBlink = 0 var LightFlash = 0 @@ -84,6 +88,11 @@ const IRRITATED_RED = Color(0.78431372549, 0, 0) var cameraMoveByVector = Vector2() +func GetStepSound(): + if floorPick.is_colliding(): + return Global.StepSoundFromTexture(floorPick.get_collider().get_meta("texName")) + return 0 + func _process(delta: float) -> void: if (abs(cameraMoveByVector.x) > 0 or abs(cameraMoveByVector.y) > 0): Rotation.x -= rad_to_deg(cameraMoveByVector.x * 120 * delta); @@ -111,13 +120,12 @@ func _process(delta: float) -> void: if BlinkTimer <= -20: # Randomizes the frequency of blinking. Scales with difficulty. - #Select SelectedDifficulty\otherFactors - # Case EASY - BLINKFREQ = randi_range(490,700) - # Case NORMAL - #BLINKFREQ = randi_range(455,665) - # Case HARD - #BLINKFREQ = randi_range(420,630) + if Global.SelectedDifficulty.otherFactors == Constants.EASY: + BLINKFREQ = randi_range(490,700) + elif Global.SelectedDifficulty.otherFactors == Constants.NORMAL: + BLINKFREQ = randi_range(455,665) + elif Global.SelectedDifficulty.otherFactors == Constants.HARD: + BLINKFREQ = randi_range(420,630) BlinkTimer = BLINKFREQ BlinkTimer = BlinkTimer - Global.FPSfactor @@ -227,33 +235,31 @@ func _process(delta: float) -> void: Shake = fmod((Shake + Global.FPSfactor * min(Sprint, 1.5) * 7), 720) if shake < 180 and fmod(Shake, 360) >= 180 and KillTimer >= 0: print("step sound") - #if CurrStepSFX == 0: - #temp = GetStepSound(Collider) - #if Sprint == 1.0: - #PlayerSoundVolume = max(4.0, PlayerSoundVolume) - #tempchn% = PlaySound_Strict(StepSFX(temp, 0, Rand(0, 7))) - #ChannelVolume tempchn, (1.0-(Crouch*0.6))*SFXVolume# - #Else - #PlayerSoundVolume = Max(2.5-(Crouch*0.6),PlayerSoundVolume) - #tempchn% = PlaySound_Strict(StepSFX(temp, 1, Rand(0, 7))) - #ChannelVolume tempchn, (1.0-(Crouch*0.6))*SFXVolume# - #End If - #elif CurrStepSFX == 1: - #tempchn% = PlaySound_Strict(Step2SFX(Rand(0, 2))) - #ChannelVolume tempchn, (1.0-(Crouch*0.4))*SFXVolume# - #elif CurrStepSFX == 2: - #tempchn% = PlaySound_Strict(Step2SFX(Rand(3,5))) - #ChannelVolume tempchn, (1.0-(Crouch*0.4))*SFXVolume# - #elif CurrStepSFX == 3: - #If Sprint = 1.0 Then - #PlayerSoundVolume = Max(4.0,PlayerSoundVolume) - #tempchn% = PlaySound_Strict(StepSFX(0, 0, Rand(0, 7))) - #ChannelVolume tempchn, (1.0-(Crouch*0.6))*SFXVolume# - #Else - #PlayerSoundVolume = Max(2.5-(Crouch*0.6),PlayerSoundVolume) - #tempchn% = PlaySound_Strict(StepSFX(0, 1, Rand(0, 7))) - #ChannelVolume tempchn, (1.0-(Crouch*0.6))*SFXVolume# - #End If + if CurrStepSFX == 0: + var temp = GetStepSound() + if Sprint == 1.0: + Global.PlayerSoundVolume = max(4.0, Global.PlayerSoundVolume) + var tempchn = Global.PlayTempSound(map.StepSFX[temp][0][randi_range(0, 7)]) + tempchn.volume_db = linear_to_db((1.0 - (Crouch * 0.6)) * Global.SFXVolume) + else: + Global.PlayerSoundVolume = max(2.5 - (Crouch * 0.6), Global.PlayerSoundVolume) + var tempchn = Global.PlayTempSound(map.StepSFX[temp][1][randi_range(0, 7)]) + tempchn.volume_db = linear_to_db((1.0 - (Crouch * 0.6)) * Global.SFXVolume) + elif CurrStepSFX == 1: + var tempchn = Global.PlayTempSound(map.Step2SFX[randi_range(0, 2)]) + tempchn.volume_db = linear_to_db((1.0 - (Crouch * 0.4)) * Global.SFXVolume) + elif CurrStepSFX == 2: + var tempchn = Global.PlayTempSound(map.Step2SFX[randi_range(3,5)]) + tempchn.volume_db = linear_to_db((1.0 - (Crouch * 0.4)) * Global.SFXVolume) + elif CurrStepSFX == 3: + if Sprint == 1.0: + Global.PlayerSoundVolume = max(4.0, Global.PlayerSoundVolume) + var tempchn = Global.PlayTempSound(map.StepSFX[0][0][randi_range(0, 7)]) + tempchn.volume_db = linear_to_db((1.0 - (Crouch * 0.6)) * Global.SFXVolume) + else: + Global.PlayerSoundVolume = max(2.5 - (Crouch * 0.6), Global.PlayerSoundVolume) + var tempchn = Global.PlayTempSound(map.StepSFX[0][1][randi_range(0, 7)]) + tempchn.volume_db = linear_to_db((1.0 - (Crouch * 0.6)) * Global.SFXVolume) else: # noclip on if Input.is_action_pressed("player_sprint"): Sprint = 2.5 @@ -350,18 +356,16 @@ func _process(delta: float) -> void: #Next if CollidedFloor: - #If DropSpeed# < - 0.07 Then - #If CurrStepSFX=0 Then - #PlaySound_Strict(StepSFX(GetStepSound(Collider), 0, Rand(0, 7))) - #ElseIf CurrStepSFX=1 - #PlaySound_Strict(Step2SFX(Rand(0, 2))) - #ElseIf CurrStepSFX=2 - #PlaySound_Strict(Step2SFX(Rand(3, 5))) - #ElseIf CurrStepSFX=3 - #PlaySound_Strict(StepSFX(0, 0, Rand(0, 7))) - #EndIf - #PlayerSoundVolume = Max(3.0,PlayerSoundVolume) - #EndIf + if DropSpeed < -0.07: + if CurrStepSFX == 0: + Global.PlayTempSound(map.StepSFX[GetStepSound()][0][randi_range(0, 7)]) + elif CurrStepSFX == 1: + Global.PlayTempSound(map.Step2SFX[randi_range(0, 2)]) + elif CurrStepSFX == 2: + Global.PlayTempSound(map.Step2SFX[randi_range(3, 5)]) + elif CurrStepSFX == 3: + Global.PlayTempSound(map.StepSFX[0][0][randi_range(0, 7)]) + Global.PlayerSoundVolume = max(3.0, Global.PlayerSoundVolume) DropSpeed = 0 else: DropSpeed = min(max(DropSpeed - 0.006 * Global.FPSfactor, -2.0), 0.0) diff --git a/src/UpdateEvents.gd b/src/UpdateEvents.gd new file mode 100644 index 0000000..b9c6ef6 --- /dev/null +++ b/src/UpdateEvents.gd @@ -0,0 +1,42 @@ +extends Node + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +;~IDEal Editor Parameters: +;~F#1#14#29#13B#343#535#545#5B1#630#68D#6B4#6C2#6CC#6D9#8CA#8EB#93F#976#983#9BD +;~F#9CE#9EE#9F7#A01#A10#B0B#B2D#DE2#E29#E3F#E4B#E68#EB9#ED2#FA1#10A3#1123#113C#115B#11C6 +;~F#11D3#11EC#1284#1439#152D#1581#1633#16D4#1796#17A9#187A#18A7#18C4#18EB#191B#1941#1969#19BB#19F8#1A29 +;~F#1A3C#1AFD#1B6A#1B7D#1B8B#1BCF#1BF0#1CDE#1D53#1E50#1ED1#1F1F#1F24#1F73#1F79#213E +;~B#10D3#1DD1 +;~C#Blitz3D diff --git a/src/UpdateEvents.gd.uid b/src/UpdateEvents.gd.uid new file mode 100644 index 0000000..7a9f3da --- /dev/null +++ b/src/UpdateEvents.gd.uid @@ -0,0 +1 @@ +uid://qgv7j32s51vr diff --git a/src/Utils.gd b/src/Utils.gd index b7b9caa..f61e919 100644 --- a/src/Utils.gd +++ b/src/Utils.gd @@ -54,7 +54,7 @@ static func GetCaseiFileName(path: String): static func Init1DArray(size: int, initValue: Variant = null) -> Array: var array = [] - for i in range(size): + for i in range(size + 1): array.append(initValue) return array @@ -62,14 +62,28 @@ static func Init1DArray(size: int, initValue: Variant = null) -> Array: # I want this to be array[y][x] but this is coming from b3d static func Init2DArray(sizeX: int, sizeY: int, initValue: Variant = null) -> Array: var array = [] - for i in range(sizeX): + for i in range(sizeX + 1): var yArray = [] array.append(yArray) - for i1 in range(sizeY): + for i1 in range(sizeY + 1): yArray.append(initValue) return array +# [x][y][z], unfortunately +static func Init3DArray(sizeX: int, sizeY: int, sizeZ: int, initValue: Variant = null) -> Array: + var array = [] + for i in range(sizeX + 1): + var yArray = [] + array.append(yArray) + for i1 in range(sizeY + 1): + var zArray = [] + yArray.append(zArray) + for i2 in range(sizeZ + 1): + zArray.append(initValue) + + return array + static func GenerateSeedNumber(seedv: String): var hashv = 0 if len(seedv) == 0: diff --git a/src/file_parsers/INI.gd b/src/file_parsers/INI.gd index 2cdc3ba..d09242e 100644 --- a/src/file_parsers/INI.gd +++ b/src/file_parsers/INI.gd @@ -28,10 +28,11 @@ static func GetInt(dict: Dictionary, name: String) -> int: return dict[name].to_int() return 0 -static func GetFloat(dict: Dictionary, name: String) -> int: +static func GetFloat(dict: Dictionary, name: String) -> float: if dict.has(name): return dict[name].to_float() - return 0 + else: + return 0 static func GetBool(dict: Dictionary, name: String) -> bool: if dict.has(name): diff --git a/src/file_parsers/RMesh.gd b/src/file_parsers/RMesh.gd index 4a38e42..0d69fba 100644 --- a/src/file_parsers/RMesh.gd +++ b/src/file_parsers/RMesh.gd @@ -262,6 +262,7 @@ static func LoadRMesh(file: String, rt: RoomTemplate): mat.transparency = BaseMaterial3D.TRANSPARENCY_ALPHA_DEPTH_PRE_PASS if activeAlbedoHasAlpha else BaseMaterial3D.TRANSPARENCY_DISABLED meshInstance.set_surface_override_material(0, mat) meshInstance.create_trimesh_collision() + meshInstance.get_child(0).set_meta("texName", textureName) scene.add_child(meshInstance) #print("YOYOYO MARKER") diff --git a/src/objects/Difficulty.gd b/src/objects/Difficulty.gd new file mode 100644 index 0000000..992a779 --- /dev/null +++ b/src/objects/Difficulty.gd @@ -0,0 +1,14 @@ +class_name Difficulty + +var name: String +var description: String +var permaDeath: bool +var aggressiveNPCs: float +var saveType: int +var otherFactors: int + +var r: int +var g: int +var b: int + +var customizable: bool = false diff --git a/src/objects/Difficulty.gd.uid b/src/objects/Difficulty.gd.uid new file mode 100644 index 0000000..9c582f4 --- /dev/null +++ b/src/objects/Difficulty.gd.uid @@ -0,0 +1 @@ +uid://c8sh6jv0vci5p diff --git a/src/objects/Event.gd b/src/objects/Event.gd new file mode 100644 index 0000000..8f55986 --- /dev/null +++ b/src/objects/Event.gd @@ -0,0 +1,16 @@ +class_name Event + +var EventName: String +var room: Room + +var EventState: float +var EventState2: float +var EventState3: float +#var SoundCHN:, SoundCHN2% +var Sound: AudioStream +var Sound2: AudioStream +#var SoundCHN_isStream%, SoundCHN2_isStream% + +var EventStr: String + +var img: CompressedTexture2D diff --git a/src/objects/Event.gd.uid b/src/objects/Event.gd.uid new file mode 100644 index 0000000..e26d24b --- /dev/null +++ b/src/objects/Event.gd.uid @@ -0,0 +1 @@ +uid://ciycs8rul7vim