diff --git a/code/ATMOSPHERICS/components/unary/cold_sink.dm b/code/ATMOSPHERICS/components/unary/cold_sink.dm index 3bd62ffb72..c3b0000572 100644 --- a/code/ATMOSPHERICS/components/unary/cold_sink.dm +++ b/code/ATMOSPHERICS/components/unary/cold_sink.dm @@ -162,7 +162,7 @@ if(istype(P, /obj/item/weapon/stock_parts/matter_bin)) bin_rating += P.rating - power_rating = initial(power_rating) * cap_rating / 2 //more powerful + max_power_rating = initial(max_power_rating) * cap_rating / 2 //more powerful heatsink_temperature = initial(heatsink_temperature) / ((manip_rating + bin_rating) / 2) //more efficient air_contents.volume = max(initial(internal_volume) - 200, 0) + 200 * bin_rating set_power_level(power_setting) diff --git a/code/controllers/shuttle_controller.dm b/code/controllers/shuttle_controller.dm index d881a65a4a..5183304609 100644 --- a/code/controllers/shuttle_controller.dm +++ b/code/controllers/shuttle_controller.dm @@ -9,7 +9,7 @@ var/global/datum/shuttle_controller/shuttle_controller /datum/shuttle_controller/proc/process() //process ferry shuttles for (var/datum/shuttle/ferry/shuttle in process_shuttles) - if (shuttle.process_state) + if (shuttle.process_state || shuttle.always_process) shuttle.process() diff --git a/code/datums/autolathe/arms.dm b/code/datums/autolathe/arms.dm index 6938b06f48..03fd38532c 100644 --- a/code/datums/autolathe/arms.dm +++ b/code/datums/autolathe/arms.dm @@ -258,7 +258,7 @@ /datum/category_item/autolathe/arms/rifle_SVD name = "10rnd rifle magazine (7.62mm)" - path =/obj/item/ammo_magazine/SVD/empty + path =/obj/item/ammo_magazine/m762svd/empty category = "Arms and Ammunition" hidden = 1 diff --git a/code/datums/supplypacks/engineering.dm b/code/datums/supplypacks/engineering.dm index ad251c5f7e..bd16322e20 100644 --- a/code/datums/supplypacks/engineering.dm +++ b/code/datums/supplypacks/engineering.dm @@ -152,7 +152,7 @@ /datum/supply_packs/eng/teg contains = list(/obj/machinery/power/generator) name = "Mark I Thermoelectric Generator" - cost = 50 + cost = 40 containertype = /obj/structure/closet/crate/secure/large containername = "Mk1 TEG crate" access = access_engine @@ -160,7 +160,7 @@ /datum/supply_packs/eng/circulator contains = list(/obj/machinery/atmospherics/binary/circulator) name = "Binary atmospheric circulator" - cost = 50 + cost = 20 containertype = /obj/structure/closet/crate/secure/large containername = "Atmospheric circulator crate" access = access_engine diff --git a/code/datums/supplypacks/robotics.dm b/code/datums/supplypacks/robotics.dm index 5510bae9ce..9e3234cca6 100644 --- a/code/datums/supplypacks/robotics.dm +++ b/code/datums/supplypacks/robotics.dm @@ -68,6 +68,14 @@ containername = "Robolimb blueprints (Xion)" access = access_robotics +/datum/supply_packs/robotics/robolimbs/grayson + name = "Grayson robolimb blueprints" + contains = list(/obj/item/weapon/disk/limb/grayson) + cost = 30 + containertype = /obj/structure/closet/crate/secure/science + containername = "Robolimb blueprints (Grayson)" + access = access_robotics + /datum/supply_packs/robotics/robolimbs/hephaestus name = "Hephaestus robolimb blueprints" contains = list(/obj/item/weapon/disk/limb/hephaestus) diff --git a/code/datums/underwear/undershirts.dm b/code/datums/underwear/undershirts.dm index 59f33be094..1bbbae7fb5 100644 --- a/code/datums/underwear/undershirts.dm +++ b/code/datums/underwear/undershirts.dm @@ -161,4 +161,8 @@ /datum/category_item/underwear/undershirt/longstripe_blue name = "Longsleeve Striped Shirt, Blue" - icon_state = "longstripe_blue" \ No newline at end of file + icon_state = "longstripe_blue" + +/datum/category_item/underwear/undershirt/tiedye + name = "Tiedye Shirt" + icon_state = "tiedye" \ No newline at end of file diff --git a/code/defines/procs/announce.dm b/code/defines/procs/announce.dm index 5bdacf5dd0..ff9e9df323 100644 --- a/code/defines/procs/announce.dm +++ b/code/defines/procs/announce.dm @@ -113,5 +113,5 @@ datum/announcement/proc/Log(message as text, message_title as text) rank = character.mind.role_alt_title AnnounceArrivalSimple(character.real_name, rank, join_message) -/proc/AnnounceArrivalSimple(var/name, var/rank = "visitor", var/join_message = "has arrived on the station") - global_announcer.autosay("[name], [rank], [join_message].", ANNOUNCER_NAME) +/proc/AnnounceArrivalSimple(var/name, var/rank = "visitor", var/join_message = "will arrive to the station shortly by shuttle") + global_announcer.autosay("[name], [rank], [join_message].", "Arrivals Announcement Computer") diff --git a/code/game/antagonist/outsider/raider.dm b/code/game/antagonist/outsider/raider.dm index 7ac0a4729b..596ac1451e 100644 --- a/code/game/antagonist/outsider/raider.dm +++ b/code/game/antagonist/outsider/raider.dm @@ -80,7 +80,7 @@ var/datum/antagonist/raider/raiders /obj/item/weapon/gun/projectile/automatic/c20r, /obj/item/weapon/gun/projectile/automatic/wt550, /obj/item/weapon/gun/projectile/automatic/sts35, - /obj/item/weapon/gun/projectile/automatic/carbine, + /obj/item/weapon/gun/projectile/automatic/bullpup, /obj/item/weapon/gun/projectile/automatic/tommygun, /obj/item/weapon/gun/projectile/silenced, /obj/item/weapon/gun/projectile/shotgun/pump, diff --git a/code/game/antagonist/station/renegade.dm b/code/game/antagonist/station/renegade.dm index d9e3671546..d9796432c0 100644 --- a/code/game/antagonist/station/renegade.dm +++ b/code/game/antagonist/station/renegade.dm @@ -37,7 +37,7 @@ var/datum/antagonist/renegade/renegades /obj/item/weapon/gun/projectile/automatic/mini_uzi, /obj/item/weapon/gun/projectile/automatic/c20r, /obj/item/weapon/gun/projectile/automatic/sts35, - /obj/item/weapon/gun/projectile/automatic/carbine, + /obj/item/weapon/gun/projectile/automatic/bullpup, /obj/item/weapon/gun/projectile/automatic/wt550, /obj/item/weapon/gun/projectile/automatic/z8, /obj/item/weapon/gun/projectile/automatic/tommygun, diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index 9676f66039..1f18dca53f 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -471,13 +471,18 @@ var/global/datum/controller/occupations/job_master if(istype(H)) //give humans wheelchairs, if they need them. var/obj/item/organ/external/l_foot = H.get_organ("l_foot") var/obj/item/organ/external/r_foot = H.get_organ("r_foot") - if(!l_foot || !r_foot) + var/obj/item/weapon/storage/S = locate() in H.contents + var/obj/item/wheelchair/R = locate() in S.contents + if(!l_foot || !r_foot || R) var/obj/structure/bed/chair/wheelchair/W = new /obj/structure/bed/chair/wheelchair(H.loc) H.buckled = W H.update_canmove() W.set_dir(H.dir) W.buckled_mob = H W.add_fingerprint(H) + if(R) + W.color = R.color + qdel(R) H << "You are [job.total_positions == 1 ? "the" : "a"] [alt_title ? alt_title : rank]." @@ -628,12 +633,12 @@ var/global/datum/controller/occupations/job_master if(spawnpos && istype(spawnpos) && spawnpos.turfs.len) // VOREStation Edit - Fix runtime if no landmarks exist for a spawntype if(spawnpos.check_job_spawning(rank)) - H.forceMove(pick(spawnpos.turfs)) + H.forceMove(spawnpos.get_spawn_position()) . = spawnpos.msg else H << "Your chosen spawnpoint ([spawnpos.display_name]) is unavailable for your chosen job. Spawning you at the Arrivals shuttle instead." H.forceMove(pick(latejoin)) - . = "has arrived on the station" + . = "will arrive to the station shortly by shuttle" else H.forceMove(pick(latejoin)) . = "has arrived on the station" diff --git a/code/game/machinery/biogenerator.dm b/code/game/machinery/biogenerator.dm index 07f0b8f9bd..b467a3a375 100644 --- a/code/game/machinery/biogenerator.dm +++ b/code/game/machinery/biogenerator.dm @@ -115,6 +115,13 @@ dat += "Utility belt ([round(300/build_eff)])
" dat += "Leather Satchel ([round(400/build_eff)])
" dat += "Cash Bag ([round(400/build_eff)])
" + dat += "Workboots ([round(400/build_eff)])
" + dat += "Leather Shoes ([round(400/build_eff)])
" + + dat += "Leather Chaps ([round(400/build_eff)])
" + dat += "Leather Coat ([round(500/build_eff)])
" + dat += "Leather Jacket ([round(500/build_eff)])
" + dat += "Winter Coat ([round(500/build_eff)])
" //dat += "Other
" //dat += "Monkey (500)
" else @@ -214,6 +221,18 @@ new/obj/item/weapon/storage/bag/cash(loc) if("monkey") new/mob/living/carbon/human/monkey(loc) + if("workboots") + new/obj/item/clothing/shoes/boots/workboots(loc) + if("leathershoes") + new/obj/item/clothing/shoes/leather(loc) + if("leatherchaps") + new/obj/item/clothing/under/pants/chaps + if("leathercoat") + new/obj/item/clothing/suit/leathercoat(loc) + if("leatherjacket") + new/obj/item/clothing/suit/storage/toggle/brown_jacket(loc) + if("wintercoat") + new/obj/item/clothing/suit/storage/hooded/wintercoat(loc) processing = 0 menustat = "complete" update_icon() diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm index 3282430c82..dc67821301 100644 --- a/code/game/machinery/computer/card.dm +++ b/code/game/machinery/computer/card.dm @@ -59,7 +59,7 @@ if(!istype(id_card)) return ..() - if(!scan && (access_change_ids in id_card.access) && user.unEquip(id_card)) + if(!scan && (access_change_ids in id_card.access) && (user.unEquip(id_card) || (id_card.loc == user && istype(user,/mob/living/silicon/robot)))) //Grippers. Again. ~Mechoid user.drop_item() id_card.forceMove(src) scan = id_card diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index 0057752aa9..6946d6607f 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -99,5 +99,14 @@ if(computer_deconstruction_screwdriver(user, I)) return else + if(istype(I,/obj/item/weapon/gripper)) //Behold, Grippers and their horribleness. If ..() is called by any computers' attackby() now or in the future, this should let grippers work with them appropriately. + var/obj/item/weapon/gripper/B = I //B, for Borg. + if(!B.wrapped) + user << "\The [B] is not holding anything." + return + else + var/B_held = B.wrapped + user << "You use \the [B] to use \the [B_held] with \the [src]." + return attack_hand(user) return \ No newline at end of file diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index aa09463c15..3d5f3c28f3 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -436,6 +436,10 @@ else W.forceMove(src.loc) + for(var/obj/structure/B in items) + if(istype(B,/obj/structure/bed)) + qdel(B) + //Update any existing objectives involving this mob. for(var/datum/objective/O in all_objectives) // We don't want revs to get objectives that aren't for heads of staff. Letting @@ -537,6 +541,9 @@ for(var/obj/item/W in items) W.forceMove(get_turf(src)) + for(var/obj/structure/bed/S in src.contents) + S.forceMove(get_turf(src)) + go_out() add_fingerprint(usr) @@ -579,6 +586,8 @@ if(ishuman(usr) && applies_stasis) var/mob/living/carbon/human/H = occupant H.Stasis(1000) + if(usr.buckled && istype(usr.buckled, /obj/structure/bed/chair/wheelchair)) + usr.buckled.loc = usr.loc icon_state = occupied_icon_state @@ -676,6 +685,8 @@ if(ishuman(M) && applies_stasis) var/mob/living/carbon/human/H = M H.Stasis(1000) + if(M.buckled && istype(M.buckled, /obj/structure/bed/chair/wheelchair)) + M.buckled.loc = M.loc // Book keeping! var/turf/location = get_turf(src) @@ -683,4 +694,4 @@ message_admins("[key_name_admin(M)] has entered a stasis pod.") //Despawning occurs when process() is called with an occupant without a client. - add_fingerprint(M) \ No newline at end of file + add_fingerprint(M) diff --git a/code/game/machinery/kitchen/cooking_machines/_cooker.dm b/code/game/machinery/kitchen/cooking_machines/_cooker.dm index 552e05d95a..26b21c9a13 100644 --- a/code/game/machinery/kitchen/cooking_machines/_cooker.dm +++ b/code/game/machinery/kitchen/cooking_machines/_cooker.dm @@ -76,10 +76,21 @@ else if(istype(check, /obj/item/weapon/disk/nuclear)) user << "Central Command would kill you if you [cook_type] that." return 0 - else if(!istype(check) && !istype(check, /obj/item/weapon/holder) && !istype(check, /obj/item/organ)) - user << "That's not edible." - return 0 - + else if(!istype(check) && !istype(check, /obj/item/weapon/holder) && !istype(check, /obj/item/organ)) //Gripper check has to go here, else it still just cuts it off. ~Mechoid + // Is it a borg using a gripper? + if(istype(check, /obj/item/weapon/gripper)) // Grippers. ~Mechoid. + var/obj/item/weapon/gripper/B = check //B, for Borg. + if(!B.wrapped) + user << "\The [B] is not holding anything." + return 0 + else + var/B_held = B.wrapped + user << "You use \the [B] to put \the [B_held] into \the [src]." + return 0 + else + user << "That's not edible." + return 0 + if(istype(I, /obj/item/organ)) var/obj/item/organ/O = I if(O.robotic) @@ -91,8 +102,8 @@ for(var/mob/living/M in cooking_obj.contents) M.apply_damage(rand(30,40), BURN, "chest") - // Not sure why a food item that passed the previous checks would fail to drop, but safety first. - if(!user.unEquip(I)) + // Not sure why a food item that passed the previous checks would fail to drop, but safety first. (Hint: Borg grippers. That is why. ~Mechoid.) + if(!user.unEquip(I) && !istype(user,/mob/living/silicon/robot)) return // We can actually start cooking now. @@ -134,7 +145,7 @@ // Copy reagents over. trans_to_obj must be used, as trans_to fails for snacks due to is_open_container() failing. if(cooking_obj.reagents && cooking_obj.reagents.total_volume) cooking_obj.reagents.trans_to_obj(result, cooking_obj.reagents.total_volume) - + // Set cooked data. var/obj/item/weapon/reagent_containers/food/snacks/food_item = cooking_obj if(istype(food_item) && islist(food_item.cooked)) @@ -183,7 +194,7 @@ /obj/machinery/cooker/attack_hand(var/mob/user) - if(cooking_obj) + if(cooking_obj && user.Adjacent(src)) //Fixes borgs being able to teleport food in these machines to themselves. user << "You grab \the [cooking_obj] from \the [src]." user.put_in_hands(cooking_obj) cooking = 0 diff --git a/code/game/machinery/kitchen/smartfridge.dm b/code/game/machinery/kitchen/smartfridge.dm index 5b78f81249..7ff33c9452 100644 --- a/code/game/machinery/kitchen/smartfridge.dm +++ b/code/game/machinery/kitchen/smartfridge.dm @@ -252,6 +252,16 @@ if(P.contents.len > 0) user << "Some items are refused." + else if(istype(O, /obj/item/weapon/gripper)) // Grippers. ~Mechoid. + var/obj/item/weapon/gripper/B = O //B, for Borg. + if(!B.wrapped) + user << "\The [B] is not holding anything." + return + else + var/B_held = B.wrapped + user << "You use \the [B] to put \the [B_held] into \the [src]." + return + else user << "\The [src] smartly refuses [O]." return 1 diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index e80b7d8f10..788e65827b 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -21,9 +21,9 @@ newplayer_start += loc delete_me = 1 return - if("JoinLate") - latejoin += loc - delete_me = 1 + if("JoinLate") // Bit difference, since we need the spawn point to move. + latejoin += src + // delete_me = 1 return if("JoinLateGateway") latejoin_gateway += loc diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 996f848849..4c08079585 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -109,6 +109,7 @@ user << "You flick the switch on [src], but nothing happens." return 0 on = !on + playsound(src.loc, 'sound/weapons/empty.ogg', 15, 1, -3) update_icon() user.update_action_buttons() return 1 diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm index 4f7ba66842..1bf4924507 100644 --- a/code/game/objects/items/weapons/cigs_lighters.dm +++ b/code/game/objects/items/weapons/cigs_lighters.dm @@ -583,6 +583,21 @@ CIGARETTE PACKETS ARE IN FANCY.DM desc = "Made of gold and obsidian, this is truly not worth however much you spent on it." icon_state = "cappiezippo" +/obj/item/weapon/flame/lighter/zippo/communist + name = "\improper communist Zippo lighter" + desc = "All you need to spark a revolution." + icon_state = "commiezippo" + +/obj/item/weapon/flame/lighter/zippo/royal + name = "\improper royal Zippo lighter" + desc = "An incredibly fancy lighter, gilded and covered in the color of royalty." + icon_state = "royalzippo" + +/obj/item/weapon/flame/lighter/zippo/gonzo + name = "\improper Gonzo Zippo lighter" + desc = "A lighter with the iconic Gonzo fist painted on it." + icon_state = "gonzozippo" + /obj/item/weapon/flame/lighter/zippo/rainbow name = "\improper rainbow Zippo lighter" icon_state = "rainbowzippo" \ No newline at end of file diff --git a/code/game/objects/items/weapons/policetape.dm b/code/game/objects/items/weapons/policetape.dm index 9b4cb3ca9b..cb6a982231 100644 --- a/code/game/objects/items/weapons/policetape.dm +++ b/code/game/objects/items/weapons/policetape.dm @@ -30,6 +30,7 @@ var/list/tape_roll_applications = list() name = "tape" icon = 'icons/policetape.dmi' anchored = 1 + layer = 3.2 var/lifted = 0 var/crumpled = 0 var/tape_dir = 0 @@ -56,6 +57,7 @@ var/list/tape_roll_applications = list() hazard_overlays["[EAST]"] = new/image('icons/effects/warning_stripes.dmi', icon_state = "E") hazard_overlays["[SOUTH]"] = new/image('icons/effects/warning_stripes.dmi', icon_state = "S") hazard_overlays["[WEST]"] = new/image('icons/effects/warning_stripes.dmi', icon_state = "W") + update_icon() /obj/item/taperoll/police name = "police tape" diff --git a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm index bdce42f9f0..b5395456ed 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm @@ -56,6 +56,7 @@ return if(src.allowed(user)) src.locked = !src.locked + playsound(src.loc, 'sound/machines/click.ogg', 15, 1, -3) for(var/mob/O in viewers(user, 3)) if((O.client && !( O.blinded ))) O << "The locker has been [locked ? null : "un"]locked by [user]." diff --git a/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm b/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm index 9ae19769eb..bdd4b87b0e 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm @@ -193,3 +193,31 @@ pulling = null usr.pulledby = null ..() + +/obj/item/wheelchair + name = "wheelchair" + desc = "A folded wheelchair that can be carried around." + icon = 'icons/obj/furniture.dmi' + icon_state = "wheelchair_folded" + item_state = "wheelchair" + w_class = ITEMSIZE_HUGE // Can't be put in backpacks. Oh well. + +/obj/item/wheelchair/attack_self(mob/user) + var/obj/structure/bed/chair/wheelchair/R = new /obj/structure/bed/chair/wheelchair(user.loc) + R.add_fingerprint(user) + R.name = src.name + R.color = src.color + qdel(src) + +/obj/structure/bed/chair/wheelchair/MouseDrop(over_object, src_location, over_location) + ..() + if((over_object == usr && (in_range(src, usr) || usr.contents.Find(src)))) + if(!ishuman(usr)) return + if(buckled_mob) return 0 + visible_message("[usr] collapses \the [src.name].") + var/obj/item/wheelchair/R = new/obj/item/wheelchair(get_turf(src)) + R.name = src.name + R.color = src.color + spawn(0) + qdel(src) + return diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index ee84303d83..348a7270f3 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -291,6 +291,8 @@ /obj/structure/window/proc/hit(var/damage, var/sound_effect = 1) if(reinf) damage *= 0.5 + if(damage < 5) + return take_damage(damage) return diff --git a/code/game/turfs/space/transit.dm b/code/game/turfs/space/transit.dm index 5426eb43e6..236f94de82 100644 --- a/code/game/turfs/space/transit.dm +++ b/code/game/turfs/space/transit.dm @@ -20,7 +20,10 @@ return result +//------------------------ + /turf/space/transit/north // moving to the north + icon_state = "arrow-north" pushdirection = SOUTH // south because the space tile is scrolling south var/static/list/phase_shift_by_x @@ -33,8 +36,28 @@ var/transit_state = (world.maxy - src.y + x_shift)%15 + 1 icon_state = "speedspace_ns_[transit_state]" +//------------------------ + +/turf/space/transit/south // moving to the south + icon_state = "arrow-south" + pushdirection = SOUTH // south because the space tile is scrolling south + var/static/list/phase_shift_by_x + +/turf/space/transit/south/New() + ..() + if(!phase_shift_by_x) + phase_shift_by_x = get_cross_shift_list(15) + + var/x_shift = phase_shift_by_x[src.x % (phase_shift_by_x.len - 1) + 1] + var/transit_state = (world.maxy - src.y + x_shift)%15 + 1 + + var/icon/I = new(icon, "speedspace_ns_[transit_state]") + I.Flip(SOUTH) + icon = I +//------------------------ /turf/space/transit/east // moving to the east + icon_state = "arrow-east" pushdirection = WEST var/static/list/phase_shift_by_y @@ -47,3 +70,23 @@ var/transit_state = (world.maxx - src.x + y_shift)%15 + 1 icon_state = "speedspace_ew_[transit_state]" +//------------------------ + +/turf/space/transit/west // moving to the west + icon_state = "arrow-west" + pushdirection = WEST + var/static/list/phase_shift_by_y + +/turf/space/transit/west/New() + ..() + if(!phase_shift_by_y) + phase_shift_by_y = get_cross_shift_list(15) + + var/y_shift = phase_shift_by_y[src.y % (phase_shift_by_y.len - 1) + 1] + var/transit_state = (world.maxx - src.x + y_shift)%15 + 1 + + var/icon/I = new(icon, "speedspace_ew_[transit_state]") + I.Flip(WEST) + icon = I + +//------------------------ \ No newline at end of file diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index 5e835a7501..cb16b16a42 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -91,8 +91,8 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey"," //Options bar: mob, details ( admin = 2, dev = 3, mentor = 4, character name (0 = just ckey, 1 = ckey and character name), link? (0 no don't make it a link, 1 do so), // highlight special roles (0 = everyone has same looking name, 1 = antags / special roles get a golden name) - var/mentor_msg = "Request for Help: [get_options_bar(mob, 4, 1, 1, 0)][ai_cl]: [msg]" - msg = "Request for Help:: [get_options_bar(mob, 2, 1, 1)][ai_cl]: [msg]" + var/mentor_msg = "Request for Help: [get_options_bar(mob, 4, 1, 1, 0)][ai_cl]: [msg]" + msg = "Request for Help: [get_options_bar(mob, 2, 1, 1)][ai_cl] [msg]" var/admin_number_afk = 0 diff --git a/code/modules/client/preference_setup/loadout/loadout_utility.dm b/code/modules/client/preference_setup/loadout/loadout_utility.dm index c30291c3a5..5e7fa24d9f 100644 --- a/code/modules/client/preference_setup/loadout/loadout_utility.dm +++ b/code/modules/client/preference_setup/loadout/loadout_utility.dm @@ -90,4 +90,13 @@ /datum/gear/utility/pen display_name = "Fountain Pen" - path = /obj/item/weapon/pen/fountain \ No newline at end of file + path = /obj/item/weapon/pen/fountain + +/datum/gear/utility/wheelchair/color + display_name = "wheelchair" + path = /obj/item/wheelchair + cost = 4 + +/datum/gear/utility/wheelchair/color/New() + ..() + gear_tweaks = list(gear_tweak_free_color_choice) diff --git a/code/modules/client/preference_setup/loadout/loadout_xeno.dm b/code/modules/client/preference_setup/loadout/loadout_xeno.dm index 83f59b3a7b..3ace6ac998 100644 --- a/code/modules/client/preference_setup/loadout/loadout_xeno.dm +++ b/code/modules/client/preference_setup/loadout/loadout_xeno.dm @@ -83,31 +83,47 @@ ..() gear_tweaks = list(gear_tweak_free_color_choice) -/datum/gear/uniform/teshari - display_name = "smock, grey (Teshari)" - path = /obj/item/clothing/under/seromi +/datum/gear/uniform/smock + display_name = "smock selection (Teshari)" + path = /obj/item/clothing/under/seromi/smock whitelisted = "Teshari" sort_category = "Xenowear" -/datum/gear/uniform/teshari/jumpsuit - display_name = "smock, yellow (Teshari)" - path = /obj/item/clothing/under/seromi/yellow +/datum/gear/uniform/smock/New() + ..() + var/list/smocks = list() + for(var/smock in typesof(/obj/item/clothing/under/seromi/smock)) + var/obj/item/clothing/under/seromi/smock/smock_type = smock + smocks[initial(smock_type.name)] = smock_type + gear_tweaks += new/datum/gear_tweak/path(sortAssoc(smocks)) -/datum/gear/uniform/teshari/jumpsuit/red - display_name = "smock, red (Teshari)" - path = /obj/item/clothing/under/seromi/red +/datum/gear/uniform/undercoat + display_name = "undercoat selection (Teshari)" + path = /obj/item/clothing/under/seromi/undercoat + whitelisted = "Teshari" + sort_category = "Xenowear" -/datum/gear/uniform/teshari/jumpsuit/white - display_name = "smock, white (Teshari)" - path = /obj/item/clothing/under/seromi/white +/datum/gear/uniform/undercoat/New() + ..() + var/list/undercoats = list() + for(var/undercoat in typesof(/obj/item/clothing/under/seromi/undercoat)) + var/obj/item/clothing/under/seromi/undercoat/undercoat_type = undercoat + undercoats[initial(undercoat_type.name)] = undercoat_type + gear_tweaks += new/datum/gear_tweak/path(sortAssoc(undercoats)) -/datum/gear/uniform/teshari/jumpsuit/medical - display_name = "smock, Medical (Teshari)" - path = /obj/item/clothing/under/seromi/medical +/datum/gear/suit/cloak + display_name = "cloak selection (Teshari)" + path = /obj/item/clothing/suit/storage/seromi/cloak + whitelisted = "Teshari" + sort_category = "Xenowear" -/datum/gear/uniform/teshari/jumpsuit/rainbow - display_name = "smock, rainbow (Teshari)" - path = /obj/item/clothing/under/seromi/rainbow +/datum/gear/suit/cloak/New() + ..() + var/list/cloaks = list() + for(var/cloak in typesof(/obj/item/clothing/suit/storage/seromi/cloak)) + var/obj/item/clothing/suit/storage/seromi/cloak/cloak_type = cloak + cloaks[initial(cloak_type.name)] = cloak_type + gear_tweaks += new/datum/gear_tweak/path(sortAssoc(cloaks)) /datum/gear/mask/ipc_monitor display_name = "display monitor (Full Body Prosthetic)" diff --git a/code/modules/client/preferences_spawnpoints.dm b/code/modules/client/preferences_spawnpoints.dm index 9277f038e7..c0c54169b2 100644 --- a/code/modules/client/preferences_spawnpoints.dm +++ b/code/modules/client/preferences_spawnpoints.dm @@ -22,9 +22,12 @@ var/list/spawntypes = list() return 1 +/datum/spawnpoint/proc/get_spawn_position() + return get_turf(pick(turfs)) + /datum/spawnpoint/arrivals display_name = "Arrivals Shuttle" - msg = "has arrived on the station" + msg = "will arrive to the station shortly by shuttle" /datum/spawnpoint/arrivals/New() ..() diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index 6cf5d16c4a..106500add0 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -51,7 +51,7 @@ BLIND // can't see anything user.update_action_buttons() /obj/item/clothing/glasses/meson - name = "Optical Meson Scanner" + name = "optical meson scanner" desc = "Used for seeing walls, floors, and stuff through anything." icon_state = "meson" item_state_slots = list(slot_r_hand_str = "meson", slot_l_hand_str = "meson") @@ -70,7 +70,7 @@ BLIND // can't see anything prescription = 1 /obj/item/clothing/glasses/meson/aviator - name = "Engineering Aviators" + name = "engineering aviators" icon_state = "aviator_eng" off_state = "aviator" item_state_slots = list(slot_r_hand_str = "sunglasses", slot_l_hand_str = "sunglasses") @@ -78,7 +78,7 @@ BLIND // can't see anything activation_sound = 'sound/effects/pop.ogg' /obj/item/clothing/glasses/meson/aviator/prescription - name = "Prescription Engineering Aviators" + name = "prescription engineering aviators" desc = "Engineering Aviators with prescription lenses." prescription = 1 @@ -96,7 +96,7 @@ BLIND // can't see anything overlay = global_hud.science /obj/item/clothing/glasses/goggles - name = "Goggles" + name = "goggles" desc = "Just some plain old goggles." icon_state = "plaingoggles" item_state_slots = list(slot_r_hand_str = "glasses", slot_l_hand_str = "glasses") @@ -104,7 +104,7 @@ BLIND // can't see anything body_parts_covered = EYES /obj/item/clothing/glasses/night - name = "Night Vision Goggles" + name = "night vision goggles" desc = "You can totally see in the dark now!" icon_state = "night" item_state_slots = list(slot_r_hand_str = "glasses", slot_l_hand_str = "glasses") @@ -154,7 +154,7 @@ BLIND // can't see anything body_parts_covered = 0 /obj/item/clothing/glasses/material - name = "Optical Material Scanner" + name = "optical material scanner" desc = "Very confusing glasses." icon_state = "material" item_state_slots = list(slot_r_hand_str = "glasses", slot_l_hand_str = "glasses") @@ -164,11 +164,11 @@ BLIND // can't see anything vision_flags = SEE_OBJS /obj/item/clothing/glasses/material/prescription - name = "Prescription Optical Material Scanner" + name = "prescription optical material scanner" prescription = 1 /obj/item/clothing/glasses/regular - name = "Prescription Glasses" + name = "prescription glasses" desc = "Made by Nerd. Co." icon_state = "glasses" item_state_slots = list(slot_r_hand_str = "glasses", slot_l_hand_str = "glasses") @@ -176,12 +176,12 @@ BLIND // can't see anything body_parts_covered = 0 /obj/item/clothing/glasses/regular/scanners - name = "Scanning Goggles" + name = "scanning goggles" desc = "A very oddly shaped pair of goggles with bits of wire poking out the sides. A soft humming sound emanates from it." icon_state = "uzenwa_sissra_1" /obj/item/clothing/glasses/regular/hipster - name = "Prescription Glasses" + name = "prescription glasses" desc = "Made by Uncool. Co." icon_state = "hipster_glasses" @@ -193,15 +193,15 @@ BLIND // can't see anything body_parts_covered = 0 /obj/item/clothing/glasses/gglasses - name = "Green Glasses" + name = "green glasses" desc = "Forest green glasses, like the kind you'd wear when hatching a nasty scheme." icon_state = "gglasses" item_state_slots = list(slot_r_hand_str = "glasses", slot_l_hand_str = "glasses") body_parts_covered = 0 /obj/item/clothing/glasses/sunglasses - desc = "Strangely ancient technology used to help provide rudimentary eye cover. Enhanced shielding blocks many flashes." name = "sunglasses" + desc = "Strangely ancient technology used to help provide rudimentary eye cover. Enhanced shielding blocks many flashes." icon_state = "sun" item_state_slots = list(slot_r_hand_str = "sunglasses", slot_l_hand_str = "sunglasses") darkness_view = -1 @@ -280,7 +280,7 @@ BLIND // can't see anything icon_state = "aviator" /obj/item/clothing/glasses/sunglasses/sechud - name = "HUDSunglasses" + name = "\improper HUD sunglasses" desc = "Sunglasses with a HUD." icon_state = "sunSecHud" var/obj/item/clothing/glasses/hud/security/hud = null @@ -296,7 +296,7 @@ BLIND // can't see anything icon_state = "swatgoggles" /obj/item/clothing/glasses/sunglasses/sechud/aviator - name = "Security HUD aviators" + name = "security HUD aviators" desc = "Modified aviator glasses that can be switch between HUD and flash protection modes." icon_state = "aviator_sec" off_state = "aviator" @@ -338,12 +338,12 @@ BLIND // can't see anything icon_state = off_state /obj/item/clothing/glasses/sunglasses/sechud/aviator/prescription - name = "Prescription Security HUD aviators" + name = "prescription security HUD aviators" desc = "Modified aviator glasses that can be switch between HUD and flash protection modes. Comes with bonus prescription lenses." prescription = 6 /obj/item/clothing/glasses/sunglasses/medhud - name = "HUDSunglasses" + name = "\improper HUD sunglasses" desc = "Sunglasses with a HUD." icon_state = "sunMedHud" var/obj/item/clothing/glasses/hud/health/hud = null @@ -354,7 +354,7 @@ BLIND // can't see anything return /obj/item/clothing/glasses/sunglasses/medhud/aviator - name = "Medical HUD aviators" + name = "medical HUD aviators" desc = "Modified aviator glasses with a toggled health HUD." icon_state = "aviator_med" off_state = "aviator" @@ -396,12 +396,12 @@ BLIND // can't see anything icon_state = off_state /obj/item/clothing/glasses/sunglasses/medhud/aviator/prescription - name = "Prescription Medical HUD aviators" + name = "prescription medical HUD aviators" desc = "Modified aviator glasses with a toggled health HUD. Comes with bonus prescription lenses." prescription = 6 /obj/item/clothing/glasses/thermal - name = "Optical Thermal Scanner" + name = "optical thermal scanner" desc = "Thermals in the shape of glasses." icon_state = "thermal" item_state_slots = list(slot_r_hand_str = "glasses", slot_l_hand_str = "glasses") @@ -431,7 +431,7 @@ BLIND // can't see anything overlay = global_hud.thermal /obj/item/clothing/glasses/thermal/syndi //These are now a traitor item, concealed as mesons. -Pete - name = "Optical Meson Scanner" + name = "optical meson scanner" desc = "Used for seeing walls, floors, and stuff through anything." icon_state = "meson" item_state_slots = list(slot_r_hand_str = "meson", slot_l_hand_str = "meson") @@ -443,7 +443,7 @@ BLIND // can't see anything action_button_name = null /obj/item/clothing/glasses/thermal/plain/monocle - name = "Thermoncle" + name = "thermonocle" desc = "A monocle thermal." icon_state = "thermoncle" item_state_slots = list(slot_r_hand_str = "sunglasses", slot_l_hand_str = "sunglasses") @@ -454,7 +454,7 @@ BLIND // can't see anything body_parts_covered = 0 /obj/item/clothing/glasses/thermal/plain/eyepatch - name = "Optical Thermal Eyepatch" + name = "optical thermal eyepatch" desc = "An eyepatch with built-in thermal optics" icon_state = "eyepatch" item_state_slots = list(slot_r_hand_str = "blindfold", slot_l_hand_str = "blindfold") @@ -463,7 +463,7 @@ BLIND // can't see anything action_button_name = "Toggle Eyepatch" /obj/item/clothing/glasses/thermal/plain/jensen - name = "Optical Thermal Implants" + name = "optical thermal implants" desc = "A set of implantable lenses designed to augment your vision" icon_state = "thermalimplants" item_state_slots = list(slot_r_hand_str = "sunglasses", slot_l_hand_str = "sunglasses") \ No newline at end of file diff --git a/code/modules/clothing/spacesuits/spacesuits.dm b/code/modules/clothing/spacesuits/spacesuits.dm index 01c1861448..159957bddb 100644 --- a/code/modules/clothing/spacesuits/spacesuits.dm +++ b/code/modules/clothing/spacesuits/spacesuits.dm @@ -62,10 +62,6 @@ var/list/supporting_limbs //If not-null, automatically splints breaks. Checked when removing the suit. -/obj/item/clothing/suit/space/New() - ..() - desc += " \"[using_map.station_short]\" is written in large block letters on the back." - /obj/item/clothing/suit/space/equipped(mob/M) check_limb_support(M) ..() diff --git a/code/modules/clothing/suits/xenos/seromi.dm b/code/modules/clothing/suits/xenos/seromi.dm new file mode 100644 index 0000000000..ccba8986d5 --- /dev/null +++ b/code/modules/clothing/suits/xenos/seromi.dm @@ -0,0 +1,134 @@ +/obj/item/clothing/suit/storage/seromi/cloak + name = "black and orange cloak " + desc = "It drapes over a Teshari's shoulders and closes at the neck with pockets convienently placed inside." + icon = 'icons/mob/species/seromi/teshari_cloak.dmi' + icon_override = 'icons/mob/species/seromi/teshari_cloak.dmi' + icon_state = "tesh_cloak_bo" + item_state = "tesh_cloak_bo" + species_restricted = list("Teshari") + body_parts_covered = UPPER_TORSO|ARMS + +/obj/item/clothing/suit/storage/seromi/cloak/black_orange + name = "black and orange cloak" + icon_state = "tesh_cloak_bo" + item_state = "tesh_cloak_bo" + +/obj/item/clothing/suit/storage/seromi/cloak/black_grey + name = "black and grey cloak" + icon_state = "tesh_cloak_bg" + item_state = "tesh_cloak_bg" + +/obj/item/clothing/suit/storage/seromi/cloak/black_midgrey + name = "black and medium grey cloak" + icon_state = "tesh_cloak_bmg" + item_state = "tesh_cloak_bmg" + +/obj/item/clothing/suit/storage/seromi/cloak/black_lightgrey + name = "black and light grey cloak" + icon_state = "tesh_cloak_blg" + item_state = "tesh_cloak_blg" + +/obj/item/clothing/suit/storage/seromi/cloak/black_white + name = "black and white cloak" + icon_state = "tesh_cloak_bw" + item_state = "tesh_cloak_bw" + +/obj/item/clothing/suit/storage/seromi/cloak/black_red + name = "black and red cloak" + icon_state = "tesh_cloak_br" + item_state = "tesh_cloak_br" + +/obj/item/clothing/suit/storage/seromi/cloak/black + name = "black cloak" + icon_state = "tesh_cloak_bn" + item_state = "tesh_cloak_bn" + +/obj/item/clothing/suit/storage/seromi/cloak/black_yellow + name = "black and yellow cloak" + icon_state = "tesh_cloak_by" + item_state = "tesh_cloak_by" + +/obj/item/clothing/suit/storage/seromi/cloak/black_green + name = "black and Green cloak" + icon_state = "tesh_cloak_bgr" + item_state = "tesh_cloak_bgr" + +/obj/item/clothing/suit/storage/seromi/cloak/black_blue + name = "black and blue cloak" + icon_state = "tesh_cloak_bbl" + item_state = "tesh_cloak_bbl" + +/obj/item/clothing/suit/storage/seromi/cloak/black_purple + name = "black and purple cloak" + icon_state = "tesh_cloak_bp" + item_state = "tesh_cloak_bp" + +/obj/item/clothing/suit/storage/seromi/cloak/black_pink + name = "black and pink cloak" + icon_state = "tesh_cloak_bpi" + item_state = "tesh_cloak_bpi" + +/obj/item/clothing/suit/storage/seromi/cloak/black_brown + name = "black and brown cloak" + icon_state = "tesh_cloak_bbr" + item_state = "tesh_cloak_bbr" + +/obj/item/clothing/suit/storage/seromi/cloak/orange_grey + name = "orange and grey cloak" + icon_state = "tesh_cloak_og" + item_state = "tesh_cloak_og" + +/obj/item/clothing/suit/storage/seromi/cloak/rainbow + name = "rainbow cloak" + icon_state = "tesh_cloak_rainbow" + item_state = "tesh_cloak_rainbow" + +/obj/item/clothing/suit/storage/seromi/cloak/lightgrey_grey + name = "light grey and grey cloak" + icon_state = "tesh_cloak_lgg" + item_state = "tesh_cloak_lgg" + +/obj/item/clothing/suit/storage/seromi/cloak/white_grey + name = "white and grey cloak" + icon_state = "tesh_cloak_wg" + item_state = "tesh_cloak_wg" + +/obj/item/clothing/suit/storage/seromi/cloak/red_grey + name = "red and grey cloak" + icon_state = "tesh_cloak_rg" + item_state = "tesh_cloak_rg" + +/obj/item/clothing/suit/storage/seromi/cloak/orange + name = "orange cloak" + icon_state = "tesh_cloak_on" + item_state = "tesh_cloak_on" + +/obj/item/clothing/suit/storage/seromi/cloak/yellow_grey + name = "yellow and grey cloak" + icon_state = "tesh_cloak_yg" + item_state = "tesh_cloak_yg" + +/obj/item/clothing/suit/storage/seromi/cloak/green_grey + name = "green and grey cloak" + icon_state = "tesh_cloak_gg" + item_state = "tesh_cloak_gg" + +/obj/item/clothing/suit/storage/seromi/cloak/blue_grey + name = "blue and grey cloak" + icon_state = "tesh_cloak_blg" + item_state = "tesh_cloak_blg" + +/obj/item/clothing/suit/storage/seromi/cloak/purple_grey + name = "purple and grey cloak" + icon_state = "tesh_cloak_pg" + item_state = "tesh_cloak_pg" + +/obj/item/clothing/suit/storage/seromi/cloak/pink_grey + name = "black and orange cloak" + icon_state = "tesh_cloak_pig" + item_state = "tesh_cloak_pig" + +/obj/item/clothing/suit/storage/seromi/cloak/brown_grey + name = "purple and grey cloak" + icon_state = "tesh_cloak_brg" + item_state = "tesh_cloak_brg" \ No newline at end of file diff --git a/code/modules/clothing/under/xenos/seromi.dm b/code/modules/clothing/under/xenos/seromi.dm index 16eb2c47fe..f99317b7d0 100644 --- a/code/modules/clothing/under/xenos/seromi.dm +++ b/code/modules/clothing/under/xenos/seromi.dm @@ -1,27 +1,167 @@ /obj/item/clothing/under/seromi - name = "small grey smock" - desc = "It looks fitted to nonhuman proportions." icon = 'icons/obj/clothing/species/seromi/uniform.dmi' icon_state = "seromi_grey" species_restricted = list("Teshari") + +/obj/item/clothing/under/seromi/smock + name = "small grey smock" + desc = "It looks fitted to nonhuman proportions." + icon_state = "seromi_grey" body_parts_covered = 0 // It's a thin piece of cloth with a neck hole. -/obj/item/clothing/under/seromi/white +/obj/item/clothing/under/seromi/smock/white name = "small white smock" icon_state = "seromi_white" -/obj/item/clothing/under/seromi/red +/obj/item/clothing/under/seromi/smock/red name = "small Security smock" icon_state = "seromi_red" -/obj/item/clothing/under/seromi/yellow +/obj/item/clothing/under/seromi/smock/yellow name = "small Engineering smock" icon_state = "seromi_yellow" -/obj/item/clothing/under/seromi/medical +/obj/item/clothing/under/seromi/smock/medical name = "small Medical uniform" icon_state = "seromi_medical" - -/obj/item/clothing/under/seromi/rainbow + +/obj/item/clothing/under/seromi/smock/science + name = "small Research uniform" + icon_state = "teshari_science" + +/obj/item/clothing/under/seromi/smock/rainbow name = "small rainbow smock" - icon_state = "seromi_rainbow" \ No newline at end of file + icon_state = "seromi_rainbow" + +/obj/item/clothing/under/seromi/undercoat + desc = "A Teshari traditional garb, with a modern twist! Made of micro and nanofibres to make it light and billowy, perfect for going fast and stylishly!" + icon = 'icons/mob/species/seromi/teshari_uniform.dmi' + icon_override = 'icons/mob/species/seromi/teshari_uniform.dmi' + icon_state = "tesh_uniform_bo" + item_state = "tesh_uniform_bo" + body_parts_covered = UPPER_TORSO|LOWER_TORSO + +/obj/item/clothing/under/seromi/undercoat/black_orange + name = "black and orange undercoat" + icon_state = "tesh_uniform_bo" + item_state = "tesh_uniform_bo" + +/obj/item/clothing/under/seromi/undercoat/black_grey + name = "black and grey undercoat" + icon_state = "tesh_uniform_bg" + item_state = "tesh_uniform_bg" + +/obj/item/clothing/under/seromi/undercoat/black_midgrey + name = "black and medium grey undercoat" + icon_state = "tesh_uniform_bmg" + item_state = "tesh_uniform_bmg" + +/obj/item/clothing/under/seromi/undercoat/black_lightgrey + name = "black and light grey undercoat" + icon_state = "tesh_uniform_blg" + item_state = "tesh_uniform_blg" + +/obj/item/clothing/under/seromi/undercoat/black_white + name = "black and white undercoat" + icon_state = "tesh_uniform_bw" + item_state = "tesh_uniform_bw" + +/obj/item/clothing/under/seromi/undercoat/black_red + name = "black and red undercoat" + icon_state = "tesh_uniform_br" + item_state = "tesh_uniform_br" + +/obj/item/clothing/under/seromi/undercoat/black + name = "black undercoat" + icon_state = "tesh_uniform_bn" + item_state = "tesh_uniform_bn" + +/obj/item/clothing/under/seromi/undercoat/black_yellow + name = "black and yellow undercoat" + icon_state = "tesh_uniform_by" + item_state = "tesh_uniform_by" + +/obj/item/clothing/under/seromi/undercoat/black_green + name = "black and Green undercoat" + icon_state = "tesh_uniform_bgr" + item_state = "tesh_uniform_bgr" + +/obj/item/clothing/under/seromi/undercoat/black_blue + name = "black and blue undercoat" + icon_state = "tesh_uniform_bbl" + item_state = "tesh_uniform_bbl" + +/obj/item/clothing/under/seromi/undercoat/black_purple + name = "black and purple undercoat" + icon_state = "tesh_uniform_bp" + item_state = "tesh_uniform_bp" + +/obj/item/clothing/under/seromi/undercoat/black_pink + name = "black and pink undercoat" + icon_state = "tesh_uniform_bpi" + item_state = "tesh_uniform_bpi" + +/obj/item/clothing/under/seromi/undercoat/black_brown + name = "black and brown undercoat" + icon_state = "tesh_uniform_bbr" + item_state = "tesh_uniform_bbr" + +/obj/item/clothing/under/seromi/undercoat/orange_grey + name = "orange and grey undercoat" + icon_state = "tesh_uniform_og" + item_state = "tesh_uniform_og" + +/obj/item/clothing/under/seromi/undercoat/rainbow + name = "rainbow undercoat" + icon_state = "tesh_uniform_rainbow" + item_state = "tesh_uniform_rainbow" + +/obj/item/clothing/under/seromi/undercoat/lightgrey_grey + name = "light grey and grey undercoat" + icon_state = "tesh_uniform_lgg" + item_state = "tesh_uniform_lgg" + +/obj/item/clothing/under/seromi/undercoat/white_grey + name = "white and grey undercoat" + icon_state = "tesh_uniform_wg" + item_state = "tesh_uniform_wg" + +/obj/item/clothing/under/seromi/undercoat/red_grey + name = "red and grey undercoat" + icon_state = "tesh_uniform_rg" + item_state = "tesh_uniform_rg" + +/obj/item/clothing/under/seromi/undercoat/orange + name = "orange undercoat" + icon_state = "tesh_uniform_on" + item_state = "tesh_uniform_on" + +/obj/item/clothing/under/seromi/undercoat/yellow_grey + name = "yellow and grey undercoat" + icon_state = "tesh_uniform_yg" + item_state = "tesh_uniform_yg" + +/obj/item/clothing/under/seromi/undercoat/green_grey + name = "green and grey undercoat" + icon_state = "tesh_uniform_gg" + item_state = "tesh_uniform_gg" + +/obj/item/clothing/under/seromi/undercoat/blue_grey + name = "blue and grey undercoat" + icon_state = "tesh_uniform_blg" + item_state = "tesh_uniform_blg" + +/obj/item/clothing/under/seromi/undercoat/purple_grey + name = "purple and grey undercoat" + icon_state = "tesh_uniform_pg" + item_state = "tesh_uniform_pg" + +/obj/item/clothing/under/seromi/undercoat/pink_grey + name = "black and orange undercoat" + icon_state = "tesh_uniform_pig" + item_state = "tesh_uniform_pig" + +/obj/item/clothing/under/seromi/undercoat/brown_grey + name = "purple and grey undercoat" + icon_state = "tesh_uniform_brg" + item_state = "tesh_uniform_brg" \ No newline at end of file diff --git a/code/modules/economy/economy_misc.dm b/code/modules/economy/economy_misc.dm index 78c9e7d012..a2cc9aafb9 100644 --- a/code/modules/economy/economy_misc.dm +++ b/code/modules/economy/economy_misc.dm @@ -50,10 +50,10 @@ /var/list/economic_species_modifier = list( /datum/species/human = 10, /datum/species/skrell = 12, - /datum/species/teshari = 9, // Skrell sponsored, - /datum/species/tajaran = 7, /datum/species/unathi = 7, - /datum/species/diona = 7, + /datum/species/tajaran = 7, + /datum/species/teshari = 6, + /datum/species/diona = 4, /datum/species/shapeshifter/promethean = 3 ) diff --git a/code/modules/integrated_electronics/core/special_pins/color_pin.dm b/code/modules/integrated_electronics/core/special_pins/color_pin.dm index 0fa82b4506..2d20560fb6 100644 --- a/code/modules/integrated_electronics/core/special_pins/color_pin.dm +++ b/code/modules/integrated_electronics/core/special_pins/color_pin.dm @@ -6,7 +6,6 @@ var/new_data = input("Please select a color.","[src] color writing") as null|color if(holder.check_interactivity(user) ) to_chat(user, "You input a new color into the pin.") - world << "new_data equals [new_data]." write_data_to_pin(new_data) /datum/integrated_io/color/write_data_to_pin(var/new_data) @@ -15,24 +14,18 @@ if(istext(new_data)) new_data = uppertext(new_data) if(length(new_data) != 7) // We can hex if we want to, we can leave your strings behind - world << "Wrong length." return // Cause your strings don't hex and if they don't hex var/friends = copytext(new_data, 2, 8) // Well they're are no strings of mine - world << "friends equal [friends]." // I say, we can go where we want to, a place where they will never find var/safety_dance = 1 while(safety_dance >= 7) // And we can act like we come from out of this world.log var/hex = copytext(friends, safety_dance, safety_dance+1) - world << "Checking [hex]." if(!(hex in list("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"))) - world << "Hex [hex] failed" return // Leave the fake one far behind, safety_dance++ data = new_data // And we can hex holder.on_data_written() - world << "Done." - world << "Rip." // This randomizes the color. /datum/integrated_io/color/scramble() diff --git a/code/modules/integrated_electronics/core/special_pins/list_pin.dm b/code/modules/integrated_electronics/core/special_pins/list_pin.dm index 535a535514..77d83f82b5 100644 --- a/code/modules/integrated_electronics/core/special_pins/list_pin.dm +++ b/code/modules/integrated_electronics/core/special_pins/list_pin.dm @@ -133,7 +133,6 @@ clear_list(usr) if(href_list["remove"]) - world << "Removing [href_list["pos"]]" if(href_list["pos"]) remove_from_list_by_position(usr, text2num(href_list["pos"])) else diff --git a/code/modules/integrated_electronics/passive/power.dm b/code/modules/integrated_electronics/passive/power.dm index 2b8c200a27..c417c3e4fd 100644 --- a/code/modules/integrated_electronics/passive/power.dm +++ b/code/modules/integrated_electronics/passive/power.dm @@ -101,6 +101,6 @@ return var/area/A = get_area(src) if(A) - if(A.powered(EQUIP)) + if(A.powered(EQUIP) && assembly.give_power(power_amount)) A.use_power(power_amount, EQUIP) - assembly.give_power(power_amount) // give_power() handles CELLRATE on its own. + // give_power() handles CELLRATE on its own. diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 7503563c9d..27d83bd1a2 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -533,11 +533,11 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp var/obj/machinery/atmospherics/unary/vent_pump/vent_found var/list/found_vents = list() for(var/obj/machinery/atmospherics/unary/vent_pump/v in machines) - if(!v.welded && v.z == T.z) + if(!v.welded && v.z == T.z && v.network && v.network.normal_members.len > 20) found_vents.Add(v) if(found_vents.len) vent_found = pick(found_vents) - host = new /mob/living/simple_animal/mouse(vent_found.loc) + host = new /mob/living/simple_animal/mouse(vent_found) else src << "Unable to find any unwelded vents to spawn mice at." @@ -546,6 +546,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp host.universal_understand = 0 announce_ghost_joinleave(src, 0, "They are now a mouse.") host.ckey = src.ckey + host.add_ventcrawl(vent_found) host << "You are now a mouse. Try to avoid interaction with players, and do not give hints away that you are more than a simple rodent." /mob/observer/dead/verb/view_manfiest() diff --git a/code/modules/mob/living/carbon/brain/posibrain.dm b/code/modules/mob/living/carbon/brain/posibrain.dm index 1e2185fbf3..9f1f778ad2 100644 --- a/code/modules/mob/living/carbon/brain/posibrain.dm +++ b/code/modules/mob/living/carbon/brain/posibrain.dm @@ -68,7 +68,8 @@ var/turf/T = get_turf_or_move(src.loc) for (var/mob/M in viewers(T)) - M.show_message("The positronic brain chimes quietly.") + M.show_message("The positronic brain beeps as it loads a personality.") + playsound(src, 'sound/misc/boobeebeep.ogg', 50, 1) icon_state = "posibrain-occupied" /obj/item/device/mmi/digital/posibrain/proc/reset_search() //We give the players sixty seconds to decide, then reset the timer. @@ -81,7 +82,8 @@ var/turf/T = get_turf_or_move(src.loc) for (var/mob/M in viewers(T)) - M.show_message("The positronic brain buzzes quietly, and the golden lights fade away. Perhaps you could try again?") + M.show_message("The positronic brain buzzes and beeps, and the golden lights fade away. Perhaps you could try again?") + playsound(src, 'sound/misc/buzzbeep.ogg', 50, 1) /obj/item/device/mmi/digital/posibrain/examine(mob/user) if(!..(user)) diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 4cbb691239..ca82ecd345 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -41,7 +41,7 @@ var/obj/item/organ/external/E = get_organ(organ_name) if(!E || E.is_stump()) tally += 4 - if(E.splinted) + else if(E.splinted) tally += 0.5 else if(E.status & ORGAN_BROKEN) tally += 1.5 diff --git a/code/modules/mob/living/carbon/human/species/station/prometheans.dm b/code/modules/mob/living/carbon/human/species/station/prometheans.dm index c439aef209..b9eeba318f 100644 --- a/code/modules/mob/living/carbon/human/species/station/prometheans.dm +++ b/code/modules/mob/living/carbon/human/species/station/prometheans.dm @@ -22,7 +22,9 @@ var/datum/species/shapeshifter/promethean/prometheans push_flags = MONKEY|SLIME|SIMPLE_ANIMAL flags = NO_SCAN | NO_SLIP | NO_MINOR_CUT appearance_flags = HAS_SKIN_COLOR | HAS_EYE_COLOR | HAS_HAIR_COLOR | RADIATION_GLOWS - spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED //VOREStation Edit + + spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED + health_hud_intensity = 2 breath_type = null diff --git a/code/modules/mob/living/carbon/human/species/station/seromi.dm b/code/modules/mob/living/carbon/human/species/station/seromi.dm index 120400413b..d3dd435997 100644 --- a/code/modules/mob/living/carbon/human/species/station/seromi.dm +++ b/code/modules/mob/living/carbon/human/species/station/seromi.dm @@ -13,6 +13,12 @@ max_age = 45 health_hud_intensity = 3 + + male_cough_sounds = list('sound/effects/mob_effects/tesharicougha.ogg','sound/effects/mob_effects/tesharicoughb.ogg') + female_cough_sounds = list('sound/effects/mob_effects/tesharicougha.ogg','sound/effects/mob_effects/tesharicoughb.ogg') + male_sneeze_sound = 'sound/effects/mob_effects/tesharisneeze.ogg' + female_sneeze_sound = 'sound/effects/mob_effects/tesharisneeze.ogg' + blood_color = "#D514F7" flesh_color = "#5F7BB0" base_color = "#001144" @@ -95,5 +101,4 @@ /datum/species/teshari/equip_survival_gear(var/mob/living/carbon/human/H) ..() - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H),slot_shoes) - + H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H),slot_shoes) \ No newline at end of file diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 8e5220af6e..59e4137ee5 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -313,21 +313,20 @@ var/finalized = "No" while(finalized == "No" && src.client) - choice = input(usr,"What would you like to use for your mobile chassis icon? This decision can only be made once.") as null|anything in possible_chassis + choice = input(usr,"What would you like to use for your mobile chassis icon?") as null|anything in possible_chassis if(!choice) return icon_state = possible_chassis[choice] finalized = alert("Look at your sprite. Is this what you wish to use?",,"No","Yes") chassis = possible_chassis[choice] - verbs -= /mob/living/silicon/pai/proc/choose_chassis - verbs += /mob/living/proc/hide + verbs |= /mob/living/proc/hide /mob/living/silicon/pai/proc/choose_verbs() set category = "pAI Commands" set name = "Choose Speech Verbs" - var/choice = input(usr,"What theme would you like to use for your speech verbs? This decision can only be made once.") as null|anything in possible_say_verbs + var/choice = input(usr,"What theme would you like to use for your speech verbs?") as null|anything in possible_say_verbs if(!choice) return var/list/sayverbs = possible_say_verbs[choice] @@ -335,8 +334,6 @@ speak_exclamation = sayverbs[(sayverbs.len>1 ? 2 : sayverbs.len)] speak_query = sayverbs[(sayverbs.len>2 ? 3 : sayverbs.len)] - verbs -= /mob/living/silicon/pai/proc/choose_verbs - /mob/living/silicon/pai/lay_down() set name = "Rest" set category = "IC" diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 8bd96e9fc4..b5fdb02bd5 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -245,14 +245,14 @@ if((stat == CONSCIOUS) && (!icon_rest || !resting)) icon_state = icon_living - //Resting or KO'd - else if(((stat == UNCONSCIOUS) || resting) && icon_rest) - icon_state = icon_rest - //Dead else if(stat >= DEAD) icon_state = icon_dead + //Resting or KO'd + else if(((stat == UNCONSCIOUS) || resting) && icon_rest) + icon_state = icon_rest + //Backup else icon_state = initial(icon_state) diff --git a/code/modules/organs/robolimbs.dm b/code/modules/organs/robolimbs.dm index 6abae65fbb..1be793fb6a 100644 --- a/code/modules/organs/robolimbs.dm +++ b/code/modules/organs/robolimbs.dm @@ -21,7 +21,9 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\ scroll=ipc_scroll;\ console=ipc_console;\ glider=ipc_gol_glider;\ - rainbow=ipc_rainbow" + rainnbow=ipc_rainbow;\ + smiley=ipc_smiley;\ + database=ipc_database" /proc/populate_robolimb_list() basic_robolimb = new() @@ -79,6 +81,35 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\ parts = list(BP_HEAD) monitor_styles = standard_monitor_styles +/datum/robolimb/grayson + company = "Grayson" + desc = "This limb has a sturdy and heavy build to it." + icon = 'icons/mob/human_races/cyberlimbs/grayson/grayson_main.dmi' + unavailable_to_build = 1 + monitor_styles = "blank=grayson_off;\ + green=grayson_green;\ + rgb=grayson_rgb" + +/datum/robolimb/grayson_alt1 + company = "Grayson - Reinforced" + desc = "This limb has a sturdy and heavy build to it." + icon = 'icons/mob/human_races/cyberlimbs/grayson/grayson_alt1.dmi' + unavailable_to_build = 1 + parts = list(BP_HEAD) + monitor_styles = "blank=grayson_alt_off;\ + green=grayson_alt_green;\ + scroll=grayson_alt_scroll;\ + rgb=grayson_alt_rgb;\ + rainbow=grayson_alt_rainbow" + +/datum/robolimb/grayson_monitor + company = "Grayson Monitor" + desc = "This limb has a sturdy and heavy build to it, and uses plastics in the place of glass for the monitor." + icon = 'icons/mob/human_races/cyberlimbs/grayson/grayson_monitor.dmi' + unavailable_to_build = 1 + parts = list(BP_HEAD) + monitor_styles = standard_monitor_styles + /datum/robolimb/hephaestus company = "Hephaestus" desc = "This limb has a militaristic black and green casing with gold stripes." @@ -199,6 +230,9 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\ /obj/item/weapon/disk/limb/bishop company = "Bishop" +/obj/item/weapon/disk/limb/grayson + company = "Grayson" + /obj/item/weapon/disk/limb/hephaestus company = "Hephaestus" diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index e7dfe7d095..990c97b1c2 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -79,7 +79,6 @@ /obj/item/weapon/pen/reagent flags = OPENCONTAINER - slot_flags = SLOT_BELT origin_tech = list(TECH_MATERIAL = 2, TECH_ILLEGAL = 5) /obj/item/weapon/pen/reagent/New() diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 7e4de1841c..dd5c5336bd 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -302,7 +302,7 @@ var/list/solars_list = list() M.unset_control() if(connected_tracker) connected_tracker.unset_control() - ..() + return ..() /obj/machinery/power/solar_control/disconnect_from_network() ..() @@ -408,25 +408,23 @@ var/list/solars_list = list() if(do_after(user, 20)) if (src.stat & BROKEN) user << "The broken glass falls out." - var/obj/structure/frame/A = new /obj/structure/frame( src.loc ) + var/obj/structure/frame/A = new /obj/structure/frame/computer( src.loc ) new /obj/item/weapon/material/shard( src.loc ) var/obj/item/weapon/circuitboard/solar_control/M = new /obj/item/weapon/circuitboard/solar_control( A ) for (var/obj/C in src) C.loc = src.loc A.circuit = M - A.frame_type = "computer" A.state = 3 A.icon_state = "computer_3" A.anchored = 1 qdel(src) else user << "You disconnect the monitor." - var/obj/structure/frame/A = new /obj/structure/frame( src.loc ) + var/obj/structure/frame/A = new /obj/structure/frame/computer( src.loc ) var/obj/item/weapon/circuitboard/solar_control/M = new /obj/item/weapon/circuitboard/solar_control( A ) for (var/obj/C in src) C.loc = src.loc A.circuit = M - A.frame_type = "computer" A.state = 4 A.icon_state = "computer_4" A.anchored = 1 diff --git a/code/modules/projectiles/ammunition/magazines.dm b/code/modules/projectiles/ammunition/magazines.dm index 2e8373866c..c3f9532a51 100644 --- a/code/modules/projectiles/ammunition/magazines.dm +++ b/code/modules/projectiles/ammunition/magazines.dm @@ -460,6 +460,23 @@ name = "rifle clip (7.62mm practice)" ammo_type = /obj/item/ammo_casing/a762p +/obj/item/ammo_magazine/m762svd + name = "\improper SVD magazine (7.62mm)" + icon_state = "SVD" + mag_type = MAGAZINE + caliber = "7.62mm" + matter = list(DEFAULT_WALL_MATERIAL = 2000) + ammo_type = /obj/item/ammo_casing/a762 + max_ammo = 10 + multiple_sprites = 1 + +/obj/item/ammo_magazine/m762svd/ap + name = "\improper SVD magazine (7.62mm armor-piercing)" + ammo_type = /obj/item/ammo_casing/a762/ap + +/obj/item/ammo_magazine/m762svd/empty + initial_ammo = 0 + ///////// 12g ///////// /obj/item/ammo_magazine/m12gdrum @@ -487,10 +504,34 @@ /obj/item/ammo_magazine/m12gdrum/empty initial_ammo = 0 +/obj/item/ammo_magazine/clip/c12g + name = "ammo clip (12g slug)" + icon_state = "12gclipslug" //largely a codersprite, looks good enough. feel free to make a better one. + desc = "A color-coded metal clip for holding and quickly loading shotgun shells. This one is loaded with slugs." + caliber = "12g" + ammo_type = /obj/item/ammo_casing/a12g + matter = list(DEFAULT_WALL_MATERIAL = 1790) // slugs shells x4 + 350 metal for the clip itself. + max_ammo = 4 + multiple_sprites = 1 + +/obj/item/ammo_magazine/clip/c12g/pellet + name = "ammo clip (12g buckshot)" + icon_state = "12gclipshell" + desc = "A color-coded metal clip for holding and quickly loading shotgun shells. This one is loaded with buckshot." + ammo_type = /obj/item/ammo_casing/a12g/pellet + matter = list(DEFAULT_WALL_MATERIAL = 1790) // buckshot and slugs cost the same + +/obj/item/ammo_magazine/clip/c12g/beanbag + name = "ammo clip (12g beanbag)" + icon_state = "12gclipbeanbag" + desc = "A color-coded metal clip for holding and quickly loading shotgun shells. This one is loaded with beanbags." + ammo_type = /obj/item/ammo_casing/a12g/beanbag + matter = list(DEFAULT_WALL_MATERIAL = 1070) //beanbags x4 + 350 metal + ///////// .75 Gyrojet ///////// /obj/item/ammo_magazine/m75 - name = "ammo magazine (.75 Gyrojet)" + name = "magazine (.75 Gyrojet)" icon_state = "75" mag_type = MAGAZINE caliber = ".75" @@ -511,32 +552,4 @@ ammo_type = /obj/item/ammo_casing/cap matter = list(DEFAULT_WALL_MATERIAL = 600) max_ammo = 7 - multiple_sprites = 1 - - -/obj/item/ammo_magazine/clip/c12g - name = "ammo clip (12g slug)" - icon_state = "12gclip_s" //largely a codersprite, looks good enough. feel free to make a better one. - desc = "A color-coded metal clip for holding and quickly loading shotgun shells. This one is loaded with slugs." - caliber = "12g" - ammo_type = /obj/item/ammo_casing/a12g - matter = list(DEFAULT_WALL_MATERIAL = 1790) // slugs shells x4 + 350 metal for the clip itself. - max_ammo = 4 - -/obj/item/ammo_magazine/clip/c12g/pellet - name = "ammo clip (12g buckshot)" - icon_state = "12gclip_p" - desc = "A color-coded metal clip for holding and quickly loading shotgun shells. This one is loaded with buckshot." - ammo_type = /obj/item/ammo_casing/a12g/pellet - matter = list(DEFAULT_WALL_MATERIAL = 1790) // buckshot and slugs cost the same - -/obj/item/ammo_magazine/clip/c12g/beanbag - name = "ammo clip (12g beanbag)" - icon_state = "12gclip_bean" - desc = "A color-coded metal clip for holding and quickly loading shotgun shells. This one is loaded with beanbags." - ammo_type = /obj/item/ammo_casing/a12g/beanbag - matter = list(DEFAULT_WALL_MATERIAL = 1070) //beanbags x4 + 350 metal - - - - + multiple_sprites = 1 \ No newline at end of file diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index 604c936172..de28d0d7c5 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -111,7 +111,8 @@ obj/item/weapon/gun/energy/retro desc = "The HI DMR 9E is an older design of Hesphaistos Industries. A designated marksman rifle capable of shooting powerful \ ionized beams, this is a weapon to kill from a distance." icon_state = "sniper" - item_state_slots = list(slot_r_hand_str = "laser", slot_l_hand_str = "laser") //placeholder + item_state = "sniper" + item_state_slots = list(slot_r_hand_str = "z8carbine", slot_l_hand_str = "z8carbine") //placeholder fire_sound = 'sound/weapons/gauss_shoot.ogg' origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 5, TECH_POWER = 4) projectile_type = /obj/item/projectile/beam/sniper diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index 85cb07264f..16aaf4c14d 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -23,7 +23,7 @@ /obj/item/weapon/gun/projectile/automatic/c20r name = "submachine gun" - desc = "The C-20r is a lightweight and rapid firing SMG, for when you REALLY need someone dead. Uses 10mm rounds. Has a 'Scarborough Arms - Per falcis, per pravitas' buttstamp." + desc = "The C-20r is a lightweight and rapid firing SMG, for when you REALLY need someone dead. It has 'Scarborough Arms - Per falcis, per pravitas' inscribed on the stock. Uses 10mm rounds." icon_state = "c20r" item_state = "c20r" w_class = ITEMSIZE_NORMAL @@ -51,7 +51,7 @@ /obj/item/weapon/gun/projectile/automatic/sts35 name = "assault rifle" - desc = "The rugged STS-35 is a durable automatic weapon of a make popular on the frontier worlds. Uses 5.45mm rounds. This one is unmarked." + desc = "The rugged STS-35 is a durable automatic weapon of a make popular on the frontier worlds. Uses 5.45mm rounds." icon_state = "arifle" item_state = null w_class = ITEMSIZE_LARGE @@ -173,7 +173,7 @@ /obj/item/weapon/gun/projectile/automatic/l6_saw name = "light machine gun" - desc = "A rather traditionally made L6 SAW with a pleasantly lacquered wooden pistol grip. Has 'Aussec Armoury- 2531' engraved on the reciever" + desc = "A rather traditionally made L6 SAW with a pleasantly lacquered wooden pistol grip. 'Aussec Armoury-2531' is engraved on the reciever. Uses 5.45mm rounds. It's also compatible with magazines from STS-35 assault rifles." icon_state = "l6closed100" item_state = "l6closed" w_class = ITEMSIZE_LARGE @@ -245,7 +245,7 @@ /obj/item/weapon/gun/projectile/automatic/as24 name = "automatic shotgun" - desc = "The AS-24 is a durable, rugged looking automatic weapon of a make popular on the frontier worlds. Uses 12 gauge shells. It is unmarked." + desc = "The AS-24 is a rugged looking automatic shotgun produced for the military by Gurov Projectile Weapons LLC. For very obvious reasons, it's illegal to own in many juristictions. Uses 12g rounds." icon_state = "ashot" item_state = null w_class = ITEMSIZE_LARGE @@ -276,7 +276,7 @@ /obj/item/weapon/gun/projectile/automatic/mini_uzi name = "\improper Uzi" - desc = "A lightweight, compact, fast firing gun, for when you want someone really dead. Uses .45 rounds." + desc = "The iconic Uzi is a lightweight, compact, fast firing machine pistol. Cybersun Industries famously still produces these designs, which have changed little since the 20th century. Uses .45 rounds." icon_state = "mini-uzi" w_class = ITEMSIZE_NORMAL load_method = MAGAZINE @@ -341,10 +341,10 @@ icon_state = (ammo_magazine)? "tommygun" : "tommygun-empty" // update_held_icon() -/obj/item/weapon/gun/projectile/automatic/carbine // Admin abuse assault rifle. ToDo: Make this less shit. Maybe remove its autofire, and make it spawn with only 10 rounds at start. - name = "assault carbine" - desc = "The bullpup configured GP3000 is a lightweight, compact, military-grade assault rifle produced by Gurov Projectile Weapons LLC. It is sold almost exclusively to standing armies. The serial number on this one has been scratched off. Uses 5.45mm rounds." - icon_state = "bullpup" +/obj/item/weapon/gun/projectile/automatic/bullpup // Admin abuse assault rifle. ToDo: Make this less shit. Maybe remove its autofire, and make it spawn with only 10 rounds at start. + name = "bullpup rifle" + desc = "The bullpup configured GP3000 is a battle rifle produced by Gurov Projectile Weapons LLC. It is sold almost exclusively to standing armies. Uses 7.62mm rounds." + icon_state = "bullpup-small" item_state = "bullpup" w_class = ITEMSIZE_LARGE force = 10 @@ -352,21 +352,22 @@ origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 1, TECH_ILLEGAL = 4) slot_flags = SLOT_BACK load_method = MAGAZINE - magazine_type = /obj/item/ammo_magazine/m762m + magazine_type = /obj/item/ammo_magazine/m762 allowed_magazines = list(/obj/item/ammo_magazine/m762, /obj/item/ammo_magazine/m762m) one_handed_penalty = 4 firemodes = list( list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null), - list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=6, burst_accuracy=list(0,-1,-2), dispersion=list(0.0, 0.6, 0.6)) + list(mode_name="2-round bursts", burst=2, fire_delay=null, move_delay=6, burst_accuracy=list(0,-1), dispersion=list(0.0, 0.6)) ) -/obj/item/weapon/gun/projectile/automatic/carbine/update_icon(var/ignore_inhands) +/obj/item/weapon/gun/projectile/automatic/bullpup/update_icon(var/ignore_inhands) ..() if(istype(ammo_magazine,/obj/item/ammo_magazine/m762)) - icon_state = "bullpup-small" // If using the smaller magazines, use the small mag sprite. + icon_state = "bullpup-small" + else if(istype(ammo_magazine,/obj/item/ammo_magazine/m762m)) + icon_state = "bullpup" else - icon_state = "bullpup-empty" - item_state = (ammo_magazine)? "bullpup" : "bullpup-empty" + item_state = "bullpup-empty" if(!ignore_inhands) update_held_icon() \ No newline at end of file diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm index bddbdfb741..75697bccb2 100644 --- a/code/modules/projectiles/guns/projectile/revolver.dm +++ b/code/modules/projectiles/guns/projectile/revolver.dm @@ -68,8 +68,8 @@ // Blade Runner pistol. /obj/item/weapon/gun/projectile/revolver/deckard - name = "Deckard .38" - desc = "A custom-built revolver, based off the semi-popular Detective Special model." + name = "\improper Deckard .38" + desc = "A custom-built revolver, based off the semi-popular Detective Special model. Uses .38-Special rounds." icon_state = "deckard-empty" caliber = ".38" origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2) @@ -105,7 +105,7 @@ /obj/item/weapon/gun/projectile/revolver/judge name = "\"The Judge\"" - desc = "A revolving hand-shotgun by Cybersun Industries that packs the power of a 12 guage in the palm of your hand (if you don't break your wrist). Uses 12 shotgun rounds." + desc = "A revolving hand-shotgun by Cybersun Industries that packs the power of a 12 guage in the palm of your hand (if you don't break your wrist). Uses 12g rounds." icon_state = "judge" caliber = "12g" origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ILLEGAL = 4) @@ -118,7 +118,7 @@ /obj/item/weapon/gun/projectile/revolver/lemat name = "LeMat Revolver" - desc = "The LeMat Revolver is a 9 shot revolver with a secondary firing barrel loading shotgun shells. For when you really need something dead." + desc = "The LeMat Revolver is a 9 shot revolver with a secondary firing barrel loading shotgun shells. For when you really need something dead. Uses .38-Special and 12g rounds depending on the barrel." icon_state = "lemat" item_state = "revolver" origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2) diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm index 2f4ba9d978..d2012b4c66 100644 --- a/code/modules/projectiles/guns/projectile/shotgun.dm +++ b/code/modules/projectiles/guns/projectile/shotgun.dm @@ -1,6 +1,6 @@ /obj/item/weapon/gun/projectile/shotgun/pump name = "shotgun" - desc = "The mass-produced W-T Remmington 29x shotgun is a favourite of police and security forces on many worlds. Useful for sweeping alleys." + desc = "The mass-produced W-T Remmington 29x shotgun is a favourite of police and security forces on many worlds. Uses 12g rounds." icon_state = "shotgun" item_state = "shotgun" max_shells = 4 @@ -43,7 +43,7 @@ /obj/item/weapon/gun/projectile/shotgun/pump/combat name = "combat shotgun" - desc = "Built for close quarters combat, the Hesphaistos Industries KS-40 is widely regarded as a weapon of choice for repelling boarders." + desc = "Built for close quarters combat, the Hesphaistos Industries KS-40 is widely regarded as a weapon of choice for repelling boarders. Uses 12g rounds." icon_state = "cshotgun" item_state = "cshotgun" origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2) @@ -53,7 +53,7 @@ /obj/item/weapon/gun/projectile/shotgun/doublebarrel name = "double-barreled shotgun" - desc = "A true classic." + desc = "A truely classic weapon. No need to change what works. Uses 12g rounds." icon_state = "dshotgun" item_state = "dshotgun" //SPEEDLOADER because rapid unloading. @@ -80,7 +80,7 @@ /obj/item/weapon/gun/projectile/shotgun/doublebarrel/flare name = "signal shotgun" - desc = "A double-barreled shotgun meant to fire signal flash shells." + desc = "A double-barreled shotgun meant to fire signal flash shells. Uses 12g rounds." ammo_type = /obj/item/ammo_casing/a12g/flash /obj/item/weapon/gun/projectile/shotgun/doublebarrel/unload_ammo(user, allow_dump) @@ -112,7 +112,7 @@ /obj/item/weapon/gun/projectile/shotgun/doublebarrel/sawn name = "sawn-off shotgun" - desc = "Omar's coming!" + desc = "Omar's coming!" // I'm not gonna add "Uses 12g rounds." to this one. I'll just let this reference go undisturbed. icon_state = "sawnshotgun" item_state = "sawnshotgun" slot_flags = SLOT_BELT|SLOT_HOLSTER diff --git a/code/modules/projectiles/guns/projectile/sniper.dm b/code/modules/projectiles/guns/projectile/sniper.dm index 9a16f68a4c..183de3cf17 100644 --- a/code/modules/projectiles/guns/projectile/sniper.dm +++ b/code/modules/projectiles/guns/projectile/sniper.dm @@ -4,8 +4,7 @@ name = "anti-materiel rifle" desc = "A portable anti-armour rifle fitted with a scope, the HI PTR-7 Rifle was originally designed to used against armoured exosuits. It is capable of punching through windows and non-reinforced walls with ease. Fires armor piercing 14.5mm shells." icon_state = "heavysniper" - item_state = "l6closed-empty" // placeholder - item_state_slots = list(slot_r_hand_str = "heavysniper", slot_l_hand_str = "heavysniper") + item_state_slots = list(slot_r_hand_str = "l6closed-empty", slot_l_hand_str = "l6closed-empty") // placeholder w_class = ITEMSIZE_HUGE // So it can't fit in a backpack. force = 10 slot_flags = SLOT_BACK @@ -69,17 +68,15 @@ ////////////// Dragunov Sniper Rifle ////////////// -/* // Commented out until it's not worthless. Also might be nice to have a new icon that looks more sci-fi Dragunov-ish. /obj/item/weapon/gun/projectile/SVD name = "\improper Dragunov" - desc = "The SVD, also known as the Dragunov, was mass produced with an Optical Sniper Sight so simple that even Ivan can figure out how it works. Too bad for you that it's written in Russian. Uses 7.62mm rounds." + desc = "The SVD, also known as the Dragunov, is mass produced with an Optical Sniper Sight so simple that even Ivan can use it. Too bad for you that the inscriptions are written in Russian. Uses 7.62mm rounds." icon_state = "SVD" item_state = "SVD" w_class = ITEMSIZE_HUGE // So it can't fit in a backpack. force = 10 slot_flags = SLOT_BACK // Needs a sprite. origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 2, TECH_ILLEGAL = 8) - recoil = 2 //extra kickback caliber = "7.62mm" load_method = MAGAZINE accuracy = -3 //shooting at the hip @@ -87,13 +84,11 @@ // requires_two_hands = 1 one_handed_penalty = 4 // The weapon itself is heavy, and the long barrel makes it hard to hold steady with just one hand. fire_sound = 'sound/weapons/SVD_shot.ogg' - magazine_type = /obj/item/ammo_magazine/SVD - allowed_magazines = list(/obj/item/ammo_magazine/SVD, /obj/item/ammo_magazine/m762) + magazine_type = /obj/item/ammo_magazine/m762svd + allowed_magazines = list(/obj/item/ammo_magazine/m762svd) /obj/item/weapon/gun/projectile/SVD/update_icon() ..() -// if(istype(ammo_magazine,/obj/item/ammo_magazine/m762) -// icon_state = "SVD-bigmag" //No icon for this exists yet. if(ammo_magazine) icon_state = "SVD" else @@ -104,4 +99,4 @@ set name = "Use Scope" set popup_menu = 1 - toggle_scope(2.0)*/ \ No newline at end of file + toggle_scope(2.0) \ No newline at end of file diff --git a/code/modules/random_map/drop/drop_types.dm b/code/modules/random_map/drop/drop_types.dm index 722aeec09e..f66198e095 100644 --- a/code/modules/random_map/drop/drop_types.dm +++ b/code/modules/random_map/drop/drop_types.dm @@ -82,7 +82,7 @@ var/global/list/datum/supply_drop_loot/supply_drop /obj/item/weapon/storage/belt/security/tactical/bandolier, /obj/item/clothing/accessory/storage/black_drop_pouches, /obj/item/weapon/storage/backpack/dufflebag/sec, - /obj/item/weapon/gun/projectile/automatic/carbine, + /obj/item/weapon/gun/projectile/automatic/bullpup, /obj/item/ammo_magazine/m762/ap, /obj/item/ammo_magazine/m762, /obj/item/weapon/shield/energy, diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index ccf7c62ac1..9c74752b16 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -362,6 +362,17 @@ src.updateUsrDialog() return 0 + if(istype(O,/obj/item/weapon/gripper)) + var/obj/item/weapon/gripper/B = O //B, for Borg. + if(!B.wrapped) + user << "\The [B] is not holding anything." + return 0 + else + var/B_held = B.wrapped + user << "You use \the [B] to load \the [src] with \the [B_held]." + + return 0 + if(!sheet_reagents[O.type] && (!O.reagents || !O.reagents.total_volume)) user << "\The [O] is not suitable for blending." return 1 diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index fd75b22eaf..2588da8454 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -1604,7 +1604,7 @@ CIRCUITS BELOW build_path = /obj/item/device/integrated_circuit_printer sort_string = "VCAAG" -/datum/design/item/custom_circuit_printer +/datum/design/item/custom_circuit_printer_upgrade name = "Integrated circuit printer upgrade - advanced designs" desc = "Allows the integrated circuit printer to create advanced circuits" id = "ic_printer_upgrade_adv" diff --git a/code/modules/research/prosfab_designs.dm b/code/modules/research/prosfab_designs.dm index 24f4d4239e..de1e307386 100644 --- a/code/modules/research/prosfab_designs.dm +++ b/code/modules/research/prosfab_designs.dm @@ -302,7 +302,7 @@ build_path = /obj/item/borg/upgrade/jetpack /datum/design/item/prosfab/robot_upgrade/syndicate - name = "Illegal upgrade" + name = "Scrambled equipment module" desc = "Allows for the construction of lethal upgrades for cyborgs." id = "borg_syndicate_module" req_tech = list(TECH_COMBAT = 4, TECH_ILLEGAL = 3) diff --git a/code/modules/shuttles/shuttle.dm b/code/modules/shuttles/shuttle.dm index 50f60ba9e1..dcb07cb988 100644 --- a/code/modules/shuttles/shuttle.dm +++ b/code/modules/shuttles/shuttle.dm @@ -42,16 +42,30 @@ if(!istype(docking_controller)) world << "warning: shuttle with docking tag [docking_controller_tag] could not find it's controller!" +// Return false to abort a jump, before the 'warmup' phase. +/datum/shuttle/proc/pre_warmup_checks() + return TRUE + +// Ditto, but for afterwards. +/datum/shuttle/proc/post_warmup_checks() + return TRUE + /datum/shuttle/proc/short_jump(var/area/origin,var/area/destination) if(moving_status != SHUTTLE_IDLE) return + if(!pre_warmup_checks()) + return + moving_status = SHUTTLE_WARMUP spawn(warmup_time*10) make_sounds(origin, HYPERSPACE_WARMUP) sleep(5 SECONDS) // so the sound finishes. + if(!post_warmup_checks()) + moving_status = SHUTTLE_IDLE + if (moving_status == SHUTTLE_IDLE) make_sounds(origin, HYPERSPACE_END) return //someone cancelled the launch @@ -66,6 +80,9 @@ if(moving_status != SHUTTLE_IDLE) return + if(!pre_warmup_checks()) + return + //it would be cool to play a sound here moving_status = SHUTTLE_WARMUP spawn(warmup_time*10) @@ -73,6 +90,9 @@ make_sounds(departing, HYPERSPACE_WARMUP) sleep(5 SECONDS) // so the sound finishes. + if(!post_warmup_checks()) + moving_status = SHUTTLE_IDLE + if (moving_status == SHUTTLE_IDLE) make_sounds(departing, HYPERSPACE_END) return //someone cancelled the launch diff --git a/code/modules/shuttles/shuttle_arrivals.dm b/code/modules/shuttles/shuttle_arrivals.dm new file mode 100644 index 0000000000..7b8a6026c8 --- /dev/null +++ b/code/modules/shuttles/shuttle_arrivals.dm @@ -0,0 +1,69 @@ +// The new arrivals shuttle. +/datum/shuttle/ferry/arrivals + name = "Arrivals" + location = 1 + warmup_time = 25 // Warmup takes 5 seconds, so 30 total. + always_process = TRUE + var/launch_delay = 3 + + area_offsite = /area/shuttle/arrival/pre_game // not really 'pre game' but this area is already defined and unused + area_station = /area/shuttle/arrival/station + docking_controller_tag = "arrivals_shuttle" + dock_target_station = "arrivals_dock" + +// For debugging. +/obj/machinery/computer/shuttle_control/arrivals + name = "shuttle control console" + req_access = list(access_cent_general) + shuttle_tag = "Arrivals" + +// Unlike most shuttles, the arrivals shuttle is completely automated, so we need to put some additional code here. + + +// This proc checks if anyone is on the shuttle. +/datum/shuttle/ferry/arrivals/proc/check_for_passengers(area/A) + for(var/mob/living/L in A) + return TRUE + return FALSE + +// This is to stop the shuttle if someone tries to stow away when its leaving. +/datum/shuttle/ferry/arrivals/post_warmup_checks() + if(!location) // If we're at station. + if(check_for_passengers(area_station)) + return FALSE + return TRUE + +/datum/shuttle/ferry/arrivals/process() + if(process_state == IDLE_STATE) + + if(location) // If we're off-station (space). + if(check_for_passengers(area_offsite)) // No point arriving with an empty shuttle. + warmup_time = initial(warmup_time) + launch() + message_passengers(area_offsite, "Arriving at [using_map.station_name] in thirty seconds...") + spawn(10 SECONDS) + message_passengers(area_offsite, "Arriving at [using_map.station_name] in twenty seconds.") + spawn(10 SECONDS) + message_passengers(area_offsite, "Arriving at [using_map.station_name] in ten seconds. Please buckle up.") + + else // We are at the station. + if(!check_for_passengers(area_station)) // Don't leave with anyone. + if(launch_delay) // Give some time to get on the docks so people don't get trapped inbetween the dock airlocks. + launch_delay-- + else + launch_delay = initial(launch_delay) + warmup_time = 0 // Gotta go fast. + launch() + + ..() // Do everything else + +/datum/shuttle/ferry/arrivals/proc/message_passengers(area/A, var/message) + for(var/mob/M in A) + to_chat(M, message) + +/* +/datum/shuttle/ferry/arrivals/current_dock_target() + if(location) // If we're off station. + return null // Nothing to dock to in space. + return ..() +*/ \ No newline at end of file diff --git a/code/modules/shuttles/shuttle_ferry.dm b/code/modules/shuttles/shuttle_ferry.dm index d076357735..c122da96f1 100644 --- a/code/modules/shuttles/shuttle_ferry.dm +++ b/code/modules/shuttles/shuttle_ferry.dm @@ -4,6 +4,7 @@ var/location = 0 //0 = at area_station, 1 = at area_offsite var/direction = 0 //0 = going to station, 1 = going to offsite. var/process_state = IDLE_STATE + var/always_process = FALSE var/in_use = null //tells the controller whether this shuttle needs processing diff --git a/html/changelog.html b/html/changelog.html index e062e723b9..2debd89613 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -53,6 +53,105 @@ -->
+

26 August 2017

+

Belsima updated:

+ +

MagmaRam updated:

+ + +

20 August 2017

+

Anewbe updated:

+ +

Atermonera updated:

+ +

Belsima updated:

+ +

Cirra updated:

+ +

Leshana updated:

+ +

LorenLuke updated:

+ +

MagmaRam updated:

+ +

Nalarac updated:

+ +

PrismaticGynoid updated:

+ +

Sarmie updated:

+ +

09 May 2017

Anewbe updated: