diff --git a/_maps/map_files/vr/blood_and_sand.dmm b/_maps/map_files/vr/blood_and_sand.dmm new file mode 100644 index 00000000000..af13e70d2f1 --- /dev/null +++ b/_maps/map_files/vr/blood_and_sand.dmm @@ -0,0 +1,46 @@ +"a" = (/turf/space,/area/space) +"b" = (/turf/unsimulated/wall/other,/area/vr/roman) +"c" = (/turf/unsimulated/beach/sand,/area/vr/roman) +"d" = (/obj/effect/landmark{name = "avatarspawn"},/turf/unsimulated/beach/sand,/area/vr/roman) +"e" = (/turf/unsimulated/floor{tag = "icon-warnplate (NORTHWEST)"; icon_state = "warnplate"; dir = 9},/area/vr/roman) +"f" = (/turf/unsimulated/floor{tag = "icon-warnplate (NORTH)"; icon_state = "warnplate"; dir = 1},/area/vr/roman) +"g" = (/turf/unsimulated/floor{tag = "icon-warnplate (NORTHEAST)"; icon_state = "warnplate"; dir = 5},/area/vr/roman) +"h" = (/turf/unsimulated/floor{icon_state = "warnplate"; dir = 8},/area/vr/roman) +"i" = (/turf/unsimulated/floor/lava/dense,/area/vr/roman) +"j" = (/turf/unsimulated/floor{icon_state = "panelscorched"},/area/vr/roman) +"k" = (/turf/unsimulated/floor{tag = "icon-warnplate (SOUTHWEST)"; icon_state = "warnplate"; dir = 10},/area/vr/roman) +"l" = (/turf/unsimulated/floor{tag = "icon-warnplate"; icon_state = "warnplate"; dir = 2},/area/vr/roman) +"m" = (/turf/unsimulated/floor{tag = "icon-warnplate (SOUTHEAST)"; icon_state = "warnplate"; dir = 6},/area/vr/roman) + +(1,1,1) = {" +aaaaaaaaaaabbbbbbbbaaaaaaaaaaa +aaaaaaaabbbbccccccbbbbaaaaaaaa +aaaaaaabbccccccccccccbbaaaaaaa +aaaaabbbccccccddccccccbbbaaaaa +aaaabbdccccccefgcccccccdbbaaaa +aaabbddcccccchijcccccccddbbaaa +aaabcccccccccklmccccccccccbaaa +aabbccccccccccccccccccccccbbaa +abbccefgcccccccccccccccccccbba +abccchijccccccddccccccccccccba +abcccklmcccdccccccdcccccccccba +bbccccccccdbccccccbdccccccccbb +bccccccccccccccccccccccccccccb +bccccccccccccccccccccccccccccb +bccdccccdccccccccccccdccccdccb +bccdccccdccccccccccccdccccdccb +bccccccccccccccccccccccccccccb +bccccccccccccccccccccccccccccb +bbccccccccdbccccccbdccccefgcbb +abcccccccccdccccccdccccchijcba +abccccccccccccccccccccccklmcba +abbcccefgcccccddcccccccccccbba +aabbcchijcccccccccccccccccbbaa +aaabddklmcccccccccccccccccbaaa +aaabbdcccccccccccccccccddbbaaa +aaaabbcccccccccccccccccdbbaaaa +aaaaabbbccccccddccccccbbbaaaaa +aaaaaaabbccccccccccccbbaaaaaaa +aaaaaaaabbbbccccccbbbbaaaaaaaa +aaaaaaaaaaabbbbbbbbaaaaaaaaaaa +"} diff --git a/_maps/map_files/vr/lobby.dmm b/_maps/map_files/vr/lobby.dmm new file mode 100644 index 00000000000..798228e212e --- /dev/null +++ b/_maps/map_files/vr/lobby.dmm @@ -0,0 +1,46 @@ +"a" = (/turf/space,/area/space) +"b" = (/turf/unsimulated/wall/metal,/area/vr/lobby) +"c" = (/turf/unsimulated/floor{tag = "icon-dark"; icon_state = "dark"},/area/vr/lobby) +"d" = (/turf/unsimulated/wall/fakeglass{dir = 8; icon_state = "fakewindows3"; tag = "icon-fakewindows (WEST)"},/area/vr/lobby) +"e" = (/turf/unsimulated/floor{icon_state = "gcircuit"},/area/vr/lobby) +"f" = (/obj/machinery/telecomms/processor/preset_cent,/turf/unsimulated/floor{tag = "icon-dark"; icon_state = "dark"},/area/vr/lobby) +"g" = (/turf/unsimulated/floor{icon_state = "light_on"},/area/vr/lobby) +"h" = (/turf/unsimulated/wall/fakeglass{dir = 1; icon_state = "fakewindows"; tag = "icon-fakewindows (WEST)"},/area/vr/lobby) +"i" = (/turf/unsimulated/wall/fakeglass{dir = 0; icon_state = "fakewindows"; tag = "icon-fakewindows (EAST)"},/area/vr/lobby) +"j" = (/obj/machinery/telecomms/server/presets/centcomm,/turf/unsimulated/floor{icon_state = "gcircuit"},/area/vr/lobby) +"k" = (/obj/machinery/telecomms/relay/preset/centcom,/turf/unsimulated/floor{icon_state = "gcircuit"},/area/vr/lobby) +"l" = (/obj/machinery/telecomms/hub/preset_cent,/turf/unsimulated/floor{tag = "icon-dark"; icon_state = "dark"},/area/vr/lobby) +"m" = (/obj/machinery/computer/vr_control,/turf/unsimulated/floor{tag = "icon-dark"; icon_state = "dark"},/area/vr/lobby) +"n" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 8},/area/vr/lobby) +"o" = (/turf/unsimulated/wall/fakeglass{tag = "icon-fakewindows (EAST)"; icon_state = "fakewindows"; dir = 4},/area/vr/lobby) +"p" = (/obj/effect/landmark{name = "avatarspawn"},/turf/unsimulated/floor{icon_state = "gcircuit"},/area/vr/lobby) +"q" = (/obj/machinery/telecomms/processor/preset_cent,/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/vr/lobby) +"r" = (/turf/unsimulated/wall/fakeglass,/area/vr/lobby) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaabbbbaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaabbccbbaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaabbbdeedbbbaaaaaaaaaaaaaaaaaaaa +aabbbbbbbbbbbbbbbbbbbeefeefeebbbbbbbbbbbbbbbbbbbaa +aabbcecececececbbbeeeegheehgeeeebbbcecececececbbaa +aabcgegegegegegcbbegcgcieeicgcgebbcgegegegegegcbaa +aabeejekejekejeebbeceeeleeleeecebbeejekejekejeebaa +aabcgegegegegegcbeegecgheehgcegeebcgegegegegegcbaa +aabbcecececececbbegcegcieeicgecgebbcecececececbbaa +aaabdmdmdmdmdmdbdfnolnobccbnolnofdbdmdmdmdmdmdbaaa +aaabeeeeeeeeeeeceeeeeeecppceeeeeeeceeeeeeeeeeebaaa +aaabeeeeeeeeeeeceeeeeeecppceeeeeeeceeeeeeeeeeebaaa +aaabbbbbbbbbbbbbdfnolnobccbnolnoqdbbbbbbbbbbbbbaaa +aaaaaaaaaaaaaaabbegcegcheehcgecgebbaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaabeegecgreeigcegeebaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaabbeceeeleeleeecebbaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaabegcgcheehcgcgebaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaabeeeegreeigeeeebaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaabbbbeefeefeebbbbaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaabbbdeedbbbaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaabbccbbaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaabbbbaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} diff --git a/code/_globalvars/mapping.dm b/code/_globalvars/mapping.dm index 841fbced3f7..4915b91f3d0 100644 --- a/code/_globalvars/mapping.dm +++ b/code/_globalvars/mapping.dm @@ -40,6 +40,7 @@ var/list/prisonwarped = list() //list of players already warped var/list/blobstart = list() var/list/ninjastart = list() var/list/carplist = list() //list of all carp-spawn landmarks +var/list/avatarspawn = list() //away missions var/list/awaydestinations = list() //a list of landmarks that the warpgate can take you to @@ -51,4 +52,5 @@ var/list/datum/map_template/ruins_templates = list() var/list/datum/map_template/space_ruins_templates = list() var/list/datum/map_template/lava_ruins_templates = list() var/list/datum/map_template/shelter_templates = list() -var/list/datum/map_template/shuttle_templates = list() \ No newline at end of file +var/list/datum/map_template/shuttle_templates = list() +var/list/datum/map_template/vr_templates = list() \ No newline at end of file diff --git a/code/datums/helper_datums/map_template.dm b/code/datums/helper_datums/map_template.dm index ead199814f3..1ecf89de0fe 100644 --- a/code/datums/helper_datums/map_template.dm +++ b/code/datums/helper_datums/map_template.dm @@ -114,6 +114,7 @@ preloadRuinTemplates() preloadShelterTemplates() preloadShuttleTemplates() + preloadVRTemplates() /proc/preloadRuinTemplates() // Still supporting bans by filename @@ -163,4 +164,15 @@ var/datum/map_template/shuttle/S = new shuttle_type() shuttle_templates[S.shuttle_id] = S - map_templates[S.shuttle_id] = S \ No newline at end of file + map_templates[S.shuttle_id] = S + +/proc/preloadVRTemplates() + for(var/item in subtypesof(/datum/map_template/vr)) + var/datum/map_template/vr/vr_type = item + if(!initial(vr_type.suffix)) + continue + + var/datum/map_template/vr/V = new vr_type() + + vr_templates[V.id] = V + map_templates[V.id] = V \ No newline at end of file diff --git a/code/datums/vr.dm b/code/datums/vr.dm new file mode 100644 index 00000000000..4d31b6a2072 --- /dev/null +++ b/code/datums/vr.dm @@ -0,0 +1,15 @@ +/datum/map_template/vr + name = null + var/id = null // For blacklisting purposes, all vr levels need an id + var/description = "This is a placeholder. Please contact your virtual adminsitrator if you see this." + var/outfit = null + + var/prefix = null + var/suffix = null + +/datum/map_template/vr/New() + if(!name && id) + name = id + + mappath = prefix + suffix + ..(path = mappath) \ No newline at end of file diff --git a/code/datums/vr/level.dm b/code/datums/vr/level.dm new file mode 100644 index 00000000000..d3feca26ad9 --- /dev/null +++ b/code/datums/vr/level.dm @@ -0,0 +1,16 @@ +/datum/map_template/vr/level + prefix = "_maps/map_files/vr/" + +/datum/map_template/vr/level/lobby + id = "lobby" + suffix = "lobby.dmm" + name = "Virtual Hub Facility" + description = "This is the lobby. The hub for all things VR." + outfit = /datum/outfit/vr/vr_basic + +/datum/map_template/vr/level/roman + id = "roman" + suffix = "blood_and_sand.dmm" + name = "Blood and Sand Arena" + description = "To the Death!" + outfit = /datum/outfit/vr/roman \ No newline at end of file diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index c572023fc3f..e814bc9081f 100644 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -2582,6 +2582,22 @@ area/security/podbay /area/awaycontent/a30 icon_state = "awaycontent30" +////////////////////////VR AREAS/////////////////////////////////// + +/area/vr + name = "VR" + requires_power = 0 + dynamic_lighting = 0 + no_teleportlocs = 1 + + +/area/vr/lobby + name = "VR Lobby" + +/area/vr/roman + name = "Roman Arena" + + ///////////////////////////////////////////////////////////////////// /* Lists of areas to be used with is_type_in_list. diff --git a/code/game/machinery/computer/vr_control.dm b/code/game/machinery/computer/vr_control.dm new file mode 100644 index 00000000000..b1fded03b99 --- /dev/null +++ b/code/game/machinery/computer/vr_control.dm @@ -0,0 +1,37 @@ +/obj/machinery/computer/vr_control + name = "VR console" + desc = "A list and control panel for all virtual servers." + icon_screen = "comm_logs" + + light_color = LIGHT_COLOR_DARKGREEN + + +/obj/machinery/computer/vr_control/New() + ..() + +/obj/machinery/computer/vr_control/Destroy() + return ..() + +/obj/machinery/computer/vr_control/attack_ai(mob/user) + attack_hand(user) + ui_interact(user) + + +/obj/machinery/computer/vr_control/attack_hand(mob/user) + add_fingerprint(user) + if(stat & (BROKEN|NOPOWER)) + return + ui_interact(user) + +/obj/machinery/computer/vr_control/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) + switch(alert("What would you like to do?", "VR Control", "Join Room", "Make Room", "Cancel")) + if("Join Room") + spawn_vr_avatar(user, input(user, "Choose a room to join.","Select Level") as null|anything in vr_rooms) + qdel(user) + if("Make Room") + make_vr_room(input(user, "Name your new Room","Name here.") as null|text, input(user, "Choose a Level to load into your new Room.","Select Level") as null|anything in vr_templates) + if("Cancel") + return + +/obj/machinery/computer/vr_control/interact(mob/user) + diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index 7ff80f248da..e5b1098e2d0 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -20,6 +20,9 @@ wizardstart += loc qdel(src) + if("avatarspawn") + avatarspawn += loc + if("JoinLate") latejoin += loc qdel(src) @@ -251,7 +254,7 @@ new /obj/item/clothing/mask/gas/sexymime(src.loc) new /obj/item/clothing/under/sexymime(src.loc) qdel(src) - + /obj/effect/landmark/ruin var/datum/map_template/ruin/ruin_template diff --git a/code/modules/VR/vr_avatar.dm b/code/modules/VR/vr_avatar.dm new file mode 100644 index 00000000000..510871fb40a --- /dev/null +++ b/code/modules/VR/vr_avatar.dm @@ -0,0 +1,87 @@ + + +/mob/living/carbon/human/virtual_reality + var/mob/living/carbon/human/real_me //The human controlling us, can be any human (including virtual ones... inception...) + var/datum/action/quit_vr/quit_action + var/datum/action/back_to_lobby/back_to_lobby + var/datum/action/detach_from_avatar/detach_from_avatar + +/mob/living/carbon/human/virtual_reality/New() + quit_action = new() + quit_action.Grant(src) + back_to_lobby = new() + back_to_lobby.Grant(src) + detach_from_avatar = new() + detach_from_avatar.Grant(src) + ..() + +/mob/living/carbon/human/virtual_reality/death() + return_to_lobby() + return ..() + +/mob/living/carbon/human/virtual_reality/Destroy() + return_to_lobby() + return ..() + +/mob/living/carbon/human/virtual_reality/ghost() + set category = "OOC" + set name = "Ghost" + set desc = "Relinquish your life and enter the land of the dead." + var/mob/living/carbon/human/H = real_me + revert_to_reality(FALSE) + if(H) + H.ghost() + qdel(src) + +/mob/living/carbon/human/virtual_reality/proc/revert_to_reality(remove = 0) + if(real_me && mind) + mind.transfer_to(real_me) + real_me.EyeBlind(2) + real_me.Confused(2) + if(remove) + qdel(src) + else + return src + +/mob/living/carbon/human/virtual_reality/proc/return_to_lobby() + if(real_me && mind) + var/mob/living/carbon/human/virtual_reality/new_vr + new_vr = spawn_vr_avatar(src, "Lobby") + var/obj/item/clothing/glasses/vr_goggles/g = new_vr.real_me.glasses + g.vr_human = new_vr + qdel(src) + +/datum/action/quit_vr + name = "Quit Virtual Reality" + +/datum/action/quit_vr/Trigger() + if(..()) + if(istype(owner, /mob/living/carbon/human/virtual_reality)) + var/mob/living/carbon/human/virtual_reality/vr = owner + vr.revert_to_reality(1) + else + Remove(owner) + +/datum/action/back_to_lobby + name = "Return To Lobby" + +/datum/action/back_to_lobby/Trigger() + if(..()) + if(istype(owner, /mob/living/carbon/human/virtual_reality)) + var/mob/living/carbon/human/virtual_reality/vr = owner + vr.return_to_lobby() + else + Remove(owner) + +/datum/action/detach_from_avatar + name = "Detach From Avatar" + +/datum/action/detach_from_avatar/Trigger() + if(..()) + if(istype(owner, /mob/living/carbon/human/virtual_reality)) + var/mob/living/carbon/human/virtual_reality/vr = owner + var/obj/item/clothing/glasses/vr_goggles/g = vr.real_me.glasses + g.vr_human = vr + vr.revert_to_reality(0) + else + Remove(owner) diff --git a/code/modules/VR/vr_goggles.dm b/code/modules/VR/vr_goggles.dm new file mode 100644 index 00000000000..c2a185b0ffa --- /dev/null +++ b/code/modules/VR/vr_goggles.dm @@ -0,0 +1,41 @@ +//Glorified teleporter that puts you in a new human body. +// it's """VR""" + +/obj/item/clothing/glasses/vr_goggles + desc = "A long time ago, people used these glasses to makes images from screens threedimensional." + name = "3D glasses" + icon_state = "3d" + item_state = "3d" + prescription_upgradable = 0 + species_fit = list("Vox") + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/eyes.dmi' + ) + + var/you_die_in_the_game_you_die_for_real = FALSE + var/mob/living/carbon/human/virtual_reality/vr_human + + +/obj/item/clothing/glasses/vr_goggles/Destroy() + ..() + vr_human.revert_to_reality(1) + cleanup_vr_avatar() + +/obj/item/clothing/glasses/vr_goggles/dropped() + ..() + if(vr_human) + vr_human.revert_to_reality(0) + +/obj/item/clothing/glasses/vr_goggles/proc/cleanup_vr_avatar() + if(vr_human) + vr_human = null + +/obj/item/clothing/glasses/vr_goggles/equipped() + ..() + var/mob/living/carbon/human/H = loc + spawn(1) + if(H.glasses == src) + if(vr_human == null) + vr_human = spawn_vr_avatar(H, "Lobby") + else + control_remote(H, vr_human) \ No newline at end of file diff --git a/code/modules/space_management/space_chunk.dm b/code/modules/space_management/space_chunk.dm index 8b6e5b6974e..e139394e963 100644 --- a/code/modules/space_management/space_chunk.dm +++ b/code/modules/space_management/space_chunk.dm @@ -96,6 +96,13 @@ /datum/space_chunk/proc/return_turfs() return +/datum/space_chunk/proc/search_chunk(object_list) + var/list/located = list() + for(var/atom/object in object_list) + if(((object.x >= x) && (object.x <= (x + width))) && ((object.y >= y) && (object.y <= (y + height))) && (object.z == zpos)) + located.Add(object) + return located + #undef BOTTOM_LEFT_CHUNK #undef BOTTOM_RIGHT_CHUNK #undef TOP_LEFT_CHUNK diff --git a/code/modules/vr/vr_controller.dm b/code/modules/vr/vr_controller.dm new file mode 100644 index 00000000000..45bf2a6cc74 --- /dev/null +++ b/code/modules/vr/vr_controller.dm @@ -0,0 +1,63 @@ +//Control file with the backbone for the vr rooms and avatars + +var/datum/vr_rooms = list() +var/roomcap = 20 + +/datum/vr_room + var/name = null + var/datum/map_template/vr/template = null + var/datum/space_chunk/chunk = null + var/list/spawn_points = list() + var/expires = 1 + +proc/make_vr_room(name, template, expires) + var/datum/vr_room/R = new + R.name = name + R.template = template + R.template = vr_templates[R.template] + R.chunk = space_manager.allocate_space(R.template.width, R.template.height) + R.expires = expires + vr_rooms[R.name] = R + R.template.load(locate(R.chunk.x,R.chunk.y,R.chunk.zpos), centered = FALSE) + + for(var/atom/landmark in R.chunk.search_chunk(landmarks_list)) + if(landmark.name == "avatarspawn") + R.spawn_points.Add(landmark) + +//Control code for the avatars +proc/build_virtual_avatar(mob/living/carbon/human/H, location, datum/map_template/vr/level/template) + if(!location) + return + var/mob/living/carbon/human/virtual_reality/vr_avatar + location = get_turf(location) + vr_avatar = new /mob/living/carbon/human/virtual_reality(location) + vr_avatar.set_species(H.species.name) + if(istype(H, /mob/living/carbon/human/virtual_reality)) + var/mob/living/carbon/human/virtual_reality/V = H + vr_avatar.real_me = V.real_me + else + vr_avatar.real_me = H + vr_avatar.dna = H.dna.Clone() + vr_avatar.name = H.name + vr_avatar.real_name = H.real_name + vr_avatar.undershirt = H.undershirt + vr_avatar.underwear = H.underwear + vr_avatar.UpdateAppearance() + vr_avatar.equipOutfit(template.outfit) + return vr_avatar + +proc/control_remote(mob/living/carbon/human/H, mob/living/carbon/human/virtual_reality/vr_avatar) + if(H.mind) + H.mind.transfer_to(vr_avatar) + +proc/spawn_vr_avatar(mob/living/carbon/human/H, datum/vr_room/room) + room = vr_rooms[room] + var/mob/living/carbon/human/virtual_reality/vr_human + vr_human = build_virtual_avatar(H, pick(room.spawn_points), room.template) + control_remote(H, vr_human) + return vr_human + +//Preloaded rooms +/hook/roundstart/proc/starting_levels() + make_vr_room("Lobby", "lobby", 0) + return 1 \ No newline at end of file diff --git a/code/modules/vr/vr_outfits.dm b/code/modules/vr/vr_outfits.dm new file mode 100644 index 00000000000..4f673fd4e8c --- /dev/null +++ b/code/modules/vr/vr_outfits.dm @@ -0,0 +1,15 @@ +//place all the outfits for your levels in here. + +/datum/outfit/vr/vr_basic + name = "basic vr" + uniform = /obj/item/clothing/under/psysuit + shoes = /obj/item/clothing/shoes/black + +/datum/outfit/vr/roman + name = "roman" + uniform = /obj/item/clothing/under/roman + shoes = /obj/item/clothing/shoes/roman + l_hand = /obj/item/weapon/shield/riot/roman + r_hand = /obj/item/weapon/twohanded/spear + head = /obj/item/clothing/head/helmet/roman + back = /obj/item/weapon/twohanded/spear \ No newline at end of file diff --git a/paradise.dme b/paradise.dme index 431b0f954ed..1fc98107ca4 100644 --- a/paradise.dme +++ b/paradise.dme @@ -219,6 +219,7 @@ #include "code\datums\supplypacks.dm" #include "code\datums\uplink_item.dm" #include "code\datums\vision_override.dm" +#include "code\datums\vr.dm" #include "code\datums\cache\air_alarm.dm" #include "code\datums\cache\apc.dm" #include "code\datums\cache\cache.dm" @@ -317,6 +318,7 @@ #include "code\datums\spells\trigger.dm" #include "code\datums\spells\turf_teleport.dm" #include "code\datums\spells\wizard.dm" +#include "code\datums\vr\level.dm" #include "code\datums\weather\weather.dm" #include "code\datums\weather\weather_types.dm" #include "code\datums\wires\airlock.dm" @@ -601,6 +603,7 @@ #include "code\game\machinery\computer\store.dm" #include "code\game\machinery\computer\syndicate_specops_shuttle.dm" #include "code\game\machinery\computer\telecrystalconsoles.dm" +#include "code\game\machinery\computer\vr_control.dm" #include "code\game\machinery\doors\airlock.dm" #include "code\game\machinery\doors\airlock_control.dm" #include "code\game\machinery\doors\airlock_electronics.dm" @@ -2210,6 +2213,10 @@ #include "code\modules\vehicle\speedbike.dm" #include "code\modules\vehicle\sportscar.dm" #include "code\modules\vehicle\vehicle.dm" +#include "code\modules\vr\vr_avatar.dm" +#include "code\modules\vr\vr_controller.dm" +#include "code\modules\vr\vr_goggles.dm" +#include "code\modules\vr\vr_outfits.dm" #include "goon\code\datums\browserOutput.dm" #include "interface\interface.dm" #include "interface\skin.dmf"