mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-23 12:07:27 +01:00
Merge branch 'master' of https://github.com/ParadiseSS13/Paradise into turfs
# Conflicts: # code/modules/mob/living/simple_animal/hostile/hostile.dm
This commit is contained in:
@@ -23,7 +23,6 @@ var/list/world_uplinks = list()
|
||||
var/used_TC = 0
|
||||
|
||||
var/job = null
|
||||
var/show_descriptions = 0
|
||||
var/temp_category
|
||||
var/uplink_type = "traitor"
|
||||
|
||||
@@ -72,7 +71,10 @@ var/list/world_uplinks = list()
|
||||
if(I.job && I.job.len)
|
||||
if(!(I.job.Find(job)))
|
||||
continue
|
||||
dat += "<A href='byond://?src=[UID()];buy_item=[I.reference];cost=[I.cost]'>[I.name]</A> ([I.cost])<BR>"
|
||||
dat += "<A href='byond://?src=[UID()];buy_item=[I.reference];cost=[I.cost]'>[I.name]</A> ([I.cost])"
|
||||
if(I.hijack_only)
|
||||
dat += " (HIJACK ONLY)"
|
||||
dat += " <BR>"
|
||||
category_items++
|
||||
|
||||
dat += "<A href='byond://?src=[UID()];buy_item=random'>Random Item (??)</A><br>"
|
||||
@@ -95,7 +97,7 @@ var/list/world_uplinks = list()
|
||||
if(I.job && I.job.len)
|
||||
if(!(I.job.Find(job)))
|
||||
continue
|
||||
nano[nano.len]["items"] += list(list("Name" = sanitize(I.name), "Description" = sanitize(I.description()),"Cost" = I.cost, "obj_path" = I.reference))
|
||||
nano[nano.len]["items"] += list(list("Name" = sanitize(I.name), "Description" = sanitize(I.description()),"Cost" = I.cost, "hijack_only" = I.hijack_only, "obj_path" = I.reference))
|
||||
reference[I.reference] = I
|
||||
|
||||
var/datum/nano_item_lists/result = new
|
||||
@@ -231,7 +233,6 @@ var/list/world_uplinks = list()
|
||||
data["welcome"] = welcome
|
||||
data["crystals"] = uses
|
||||
data["menu"] = nanoui_menu
|
||||
data["descriptions"] = show_descriptions
|
||||
if(!nanoui_items)
|
||||
generate_items(user)
|
||||
data["nano_items"] = nanoui_items
|
||||
@@ -266,12 +267,6 @@ var/list/world_uplinks = list()
|
||||
if(href_list["menu"])
|
||||
nanoui_menu = text2num(href_list["menu"])
|
||||
update_nano_data(href_list["id"])
|
||||
if(href_list["menu"])
|
||||
nanoui_menu = text2num(href_list["menu"])
|
||||
update_nano_data(href_list["id"])
|
||||
if(href_list["descriptions"])
|
||||
show_descriptions = !show_descriptions
|
||||
update_nano_data()
|
||||
if(href_list["category"])
|
||||
temp_category = href_list["category"]
|
||||
update_nano_data()
|
||||
|
||||
@@ -1372,7 +1372,8 @@ obj/item/toy/cards/deck/syndicate/black
|
||||
force = 5
|
||||
origin_tech = "combat=1"
|
||||
attack_verb = list("struck", "hit", "bashed")
|
||||
var/bullet_position = 1
|
||||
var/bullets_left = 0
|
||||
var/max_shots = 6
|
||||
|
||||
/obj/item/toy/russian_revolver/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] quickly loads six bullets into [src]'s cylinder and points it at [user.p_their()] head before pulling the trigger! It looks like [user.p_theyre()] trying to commit suicide.</span>")
|
||||
@@ -1380,46 +1381,70 @@ obj/item/toy/cards/deck/syndicate/black
|
||||
return BRUTELOSS
|
||||
|
||||
/obj/item/toy/russian_revolver/New()
|
||||
spin_cylinder()
|
||||
..()
|
||||
|
||||
spin_cylinder()
|
||||
|
||||
/obj/item/toy/russian_revolver/attack_self(mob/user)
|
||||
if(!bullet_position)
|
||||
user.visible_message("<span class='warning'>[user] loads a bullet into [src]'s cylinder.</span>")
|
||||
bullet_position = 1
|
||||
else
|
||||
if(!bullets_left)
|
||||
user.visible_message("<span class='warning'>[user] loads a bullet into [src]'s cylinder before spinning it.</span>")
|
||||
spin_cylinder()
|
||||
user.visible_message("<span class='warning'>[user] spins the cylinder on [src]!</span>")
|
||||
|
||||
/obj/item/toy/russian_revolver/attack(mob/living/carbon/human/M, mob/living/carbon/human/user)
|
||||
if(M != user) //can't use this on other people
|
||||
return ..()
|
||||
if(!bullet_position)
|
||||
to_chat(user, "<span class='notice'>[src] is empty.</span>")
|
||||
return
|
||||
if(!(user.has_organ("head"))) //For sanity
|
||||
to_chat(user, "<span class='notice'>Playing this game without a head would be classed as cheating.</span>")
|
||||
return
|
||||
user.visible_message("<span class='danger'>[user] points [src] at [user.p_their()] head, ready to pull the trigger!</span>")
|
||||
if(do_after(user, 30, target = user))
|
||||
if(bullet_position > 1)
|
||||
user.visible_message("<span class='danger'>*click*</span>")
|
||||
playsound(src, 'sound/weapons/empty.ogg', 100, 1)
|
||||
bullet_position--
|
||||
return
|
||||
else
|
||||
bullet_position = null
|
||||
playsound(src, 'sound/weapons/gunshots/gunshot_strong.ogg', 50, 1)
|
||||
user.visible_message("<span class='danger'>[src] goes off!</span>")
|
||||
user.apply_damage(200, BRUTE, "head", sharp = 1, used_weapon = "Self-inflicted gunshot wound to the head.")
|
||||
user.death()
|
||||
else
|
||||
user.visible_message("<span class='danger'>[user] lowers [src] from [user.p_their()] head.</span>")
|
||||
user.visible_message("<span class='warning'>[user] spins the cylinder on [src]!</span>")
|
||||
spin_cylinder()
|
||||
|
||||
/obj/item/toy/russian_revolver/attack(mob/M, mob/living/user)
|
||||
return
|
||||
|
||||
/obj/item/toy/russian_revolver/afterattack(atom/target, mob/user, proximity)
|
||||
shoot_gun(user)
|
||||
|
||||
/obj/item/toy/russian_revolver/proc/spin_cylinder()
|
||||
bullet_position = rand(1,6)
|
||||
bullets_left = rand(1, max_shots)
|
||||
|
||||
/obj/item/toy/russian_revolver/proc/post_shot(mob/user)
|
||||
return
|
||||
|
||||
/obj/item/toy/russian_revolver/proc/shoot_gun(mob/living/carbon/human/user)
|
||||
if(bullets_left > 1)
|
||||
bullets_left--
|
||||
user.visible_message("<span class='danger'>*click*</span>")
|
||||
playsound(src, 'sound/weapons/empty.ogg', 100, 1)
|
||||
return FALSE
|
||||
if(bullets_left == 1)
|
||||
bullets_left = 0
|
||||
var/zone = "head"
|
||||
if(!(user.has_organ(zone))) // If they somehow don't have a head.
|
||||
zone = "chest"
|
||||
playsound(src, 'sound/weapons/gunshots/gunshot_strong.ogg', 50, 1)
|
||||
user.visible_message("<span class='danger'>[src] goes off!</span>")
|
||||
post_shot(user)
|
||||
user.apply_damage(300, BRUTE, zone, sharp = TRUE, used_weapon = "Self-inflicted gunshot wound to the [zone].")
|
||||
user.bleed(BLOOD_VOLUME_NORMAL)
|
||||
user.death() // Just in case
|
||||
return TRUE
|
||||
else
|
||||
to_chat(user, "<span class='warning'>[src] needs to be reloaded.</span>")
|
||||
return FALSE
|
||||
|
||||
/obj/item/toy/russian_revolver/trick_revolver
|
||||
name = "\improper .357 revolver"
|
||||
desc = "A suspicious revolver. Uses .357 ammo."
|
||||
icon_state = "revolver"
|
||||
max_shots = 1
|
||||
var/fake_bullets = 0
|
||||
|
||||
/obj/item/toy/russian_revolver/trick_revolver/New()
|
||||
..()
|
||||
fake_bullets = rand(2, 7)
|
||||
|
||||
/obj/item/toy/russian_revolver/trick_revolver/examine(mob/user) //Sneaky sneaky
|
||||
..()
|
||||
to_chat(user, "Has [fake_bullets] round\s remaining.")
|
||||
to_chat(user, "[fake_bullets] of those are live rounds.")
|
||||
|
||||
/obj/item/toy/russian_revolver/trick_revolver/post_shot(user)
|
||||
to_chat(user, "<span class='danger'>[src] did look pretty dodgey!</span>")
|
||||
SEND_SOUND(user, 'sound/misc/sadtrombone.ogg') //HONK
|
||||
/*
|
||||
* Rubber Chainsaw
|
||||
*/
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
light_power = 10
|
||||
light_color = LIGHT_COLOR_WHITE
|
||||
var/light_time = 2
|
||||
var/range = 7
|
||||
|
||||
/obj/item/grenade/flashbang/prime()
|
||||
update_mob()
|
||||
@@ -15,60 +16,65 @@
|
||||
|
||||
set_light(7)
|
||||
|
||||
for(var/mob/living/M in hearers(7, flashbang_turf))
|
||||
bang(get_turf(M), M)
|
||||
do_sparks(rand(5, 9), FALSE, src)
|
||||
playsound(flashbang_turf, 'sound/effects/bang.ogg', 25, 1)
|
||||
bang(flashbang_turf, range, src)
|
||||
|
||||
for(var/obj/structure/blob/B in hear(8,flashbang_turf)) //Blob damage here
|
||||
var/damage = round(30/(get_dist(B,get_turf(src))+1))
|
||||
for(var/obj/structure/blob/B in hear(8, flashbang_turf)) //Blob damage here
|
||||
var/damage = round(30 / (get_dist(B, get_turf(src)) + 1))
|
||||
B.health -= damage
|
||||
B.update_icon()
|
||||
|
||||
spawn(light_time)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/grenade/flashbang/proc/bang(var/turf/T , var/mob/living/M)
|
||||
M.show_message("<span class='warning'>BANG</span>", 2)
|
||||
playsound(loc, 'sound/effects/bang.ogg', 25, 1)
|
||||
/proc/bang(turf/T, atom/A, range = 7, flash = TRUE, bang = TRUE)
|
||||
for(var/mob/living/M in hearers(range, T))
|
||||
if(M.stat == DEAD)
|
||||
continue
|
||||
M.show_message("<span class='warning'>BANG</span>", 2)
|
||||
|
||||
//Checking for protections
|
||||
var/ear_safety = M.check_ear_prot()
|
||||
var/distance = max(1,get_dist(src,T))
|
||||
//Checking for protections
|
||||
var/ear_safety = M.check_ear_prot()
|
||||
var/distance = max(1, get_dist(get_turf(A), get_turf(M)))
|
||||
|
||||
//Flash
|
||||
if(M.weakeyes)
|
||||
M.visible_message("<span class='disarm'><b>[M]</b> screams and collapses!</span>")
|
||||
to_chat(M, "<span class='userdanger'><font size=3>AAAAGH!</font></span>")
|
||||
M.Weaken(15) //hella stunned
|
||||
M.Stun(15)
|
||||
if(ishuman(M))
|
||||
M.emote("scream")
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/obj/item/organ/internal/eyes/E = H.get_int_organ(/obj/item/organ/internal/eyes)
|
||||
if(E)
|
||||
E.receive_damage(8, 1)
|
||||
//Flash
|
||||
if(flash)
|
||||
if(M.weakeyes)
|
||||
M.visible_message("<span class='disarm'><b>[M]</b> screams and collapses!</span>")
|
||||
to_chat(M, "<span class='userdanger'><font size=3>AAAAGH!</font></span>")
|
||||
M.Weaken(15) //hella stunned
|
||||
M.Stun(15)
|
||||
if(ishuman(M))
|
||||
M.emote("scream")
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/obj/item/organ/internal/eyes/E = H.get_int_organ(/obj/item/organ/internal/eyes)
|
||||
if(E)
|
||||
E.receive_damage(8, 1)
|
||||
|
||||
if(M.flash_eyes(affect_silicon = 1))
|
||||
M.Stun(max(10/distance, 3))
|
||||
M.Weaken(max(10/distance, 3))
|
||||
if(M.flash_eyes(affect_silicon = TRUE))
|
||||
M.Stun(max(10 / distance, 3))
|
||||
M.Weaken(max(10 / distance, 3))
|
||||
|
||||
|
||||
//Bang
|
||||
if(get_turf(M) == get_turf(src))//Holding on person or being exactly where lies is significantly more dangerous and voids protection
|
||||
M.Stun(10)
|
||||
M.Weaken(10)
|
||||
if(!ear_safety)
|
||||
M.Stun(max(10/distance, 3))
|
||||
M.Weaken(max(10/distance, 3))
|
||||
M.AdjustEarDamage(rand(0, 5), 15)
|
||||
if(iscarbon(M))
|
||||
var/mob/living/carbon/C = M
|
||||
var/obj/item/organ/internal/ears/ears = C.get_int_organ(/obj/item/organ/internal/ears)
|
||||
if(istype(ears))
|
||||
if(ears.ear_damage >= 15)
|
||||
to_chat(M, "<span class='warning'>Your ears start to ring badly!</span>")
|
||||
if(prob(ears.ear_damage - 5))
|
||||
to_chat(M, "<span class='warning'>You can't hear anything!</span>")
|
||||
M.BecomeDeaf()
|
||||
else
|
||||
if(ears.ear_damage >= 5)
|
||||
to_chat(M, "<span class='warning'>Your ears start to ring!</span>")
|
||||
//Bang
|
||||
if(bang)
|
||||
if(!distance || A.loc == M || A.loc == M.loc) //Holding on person or being exactly where lies is significantly more dangerous and voids protection
|
||||
M.Stun(10)
|
||||
M.Weaken(10)
|
||||
if(!ear_safety)
|
||||
M.Stun(max(10 / distance, 3))
|
||||
M.Weaken(max(10 / distance, 3))
|
||||
M.AdjustEarDamage(rand(0, 5), 15)
|
||||
if(iscarbon(M))
|
||||
var/mob/living/carbon/C = M
|
||||
var/obj/item/organ/internal/ears/ears = C.get_int_organ(/obj/item/organ/internal/ears)
|
||||
if(istype(ears))
|
||||
if(ears.ear_damage >= 15)
|
||||
to_chat(M, "<span class='warning'>Your ears start to ring badly!</span>")
|
||||
if(prob(ears.ear_damage - 5))
|
||||
to_chat(M, "<span class='warning'>You can't hear anything!</span>")
|
||||
M.BecomeDeaf()
|
||||
else
|
||||
if(ears.ear_damage >= 5)
|
||||
to_chat(M, "<span class='warning'>Your ears start to ring!</span>")
|
||||
@@ -262,13 +262,24 @@
|
||||
new /obj/item/spellbook/oneuse/mime/greaterwall(src)
|
||||
new /obj/item/spellbook/oneuse/mime/fingergun(src)
|
||||
|
||||
/obj/item/storage/box/syndie_kit/atmosgasgrenades
|
||||
name = "Atmos Grenades"
|
||||
|
||||
/obj/item/storage/box/syndie_kit/atmosgasgrenades/New()
|
||||
/obj/item/storage/box/syndie_kit/atmosn2ogrenades
|
||||
name = "Atmos N2O Grenades"
|
||||
|
||||
/obj/item/storage/box/syndie_kit/atmosn2ogrenades/New()
|
||||
..()
|
||||
new /obj/item/grenade/clusterbuster/n2o(src)
|
||||
new /obj/item/grenade/clusterbuster/n2o(src)
|
||||
|
||||
|
||||
/obj/item/storage/box/syndie_kit/atmosfiregrenades
|
||||
name = "Plasma Fire Grenades"
|
||||
|
||||
/obj/item/storage/box/syndie_kit/atmosfiregrenades/New()
|
||||
..()
|
||||
new /obj/item/grenade/clusterbuster/plasma(src)
|
||||
new /obj/item/grenade/clusterbuster/n2o(src)
|
||||
new /obj/item/grenade/clusterbuster/plasma(src)
|
||||
|
||||
|
||||
/obj/item/storage/box/syndie_kit/missionary_set
|
||||
name = "Missionary Starter Kit"
|
||||
|
||||
Reference in New Issue
Block a user