Merge branch 'master' into upstream-merge-13038
26
.github/ISSUE_TEMPLATE.md
vendored
@@ -1,26 +0,0 @@
|
|||||||
<!-- Please DO NOT report 'suggestions' on GitHub. If your issue consists of an opinion about how something should be, it doesn't belong here. -->
|
|
||||||
<!-- If your issue consists of something not operating as intended, please report it below by filling out the template. -->
|
|
||||||
<!-- These directions will not appear in the issue, when submitted. -->
|
|
||||||
|
|
||||||
<!--Please provide a clear and concise description of what the bug is.-->
|
|
||||||
#### Brief description of the bug
|
|
||||||
|
|
||||||
<!--What normally happens when this occurs? Keep in mind that behavior may be different on other servers.-->
|
|
||||||
#### What you expected to happen
|
|
||||||
|
|
||||||
<!--Please use as much detail as possible when describing the bug behavior, including any context (things you did before) that might be relevant.-->
|
|
||||||
#### What actually happened
|
|
||||||
|
|
||||||
<!-- Same here, please include any context that might have contributed, such as actions taken right before.-->
|
|
||||||
#### Steps to reproduce
|
|
||||||
- (Step 1)
|
|
||||||
- (Step 2)
|
|
||||||
- (and so on)
|
|
||||||
|
|
||||||
<!--Optional, you may remove this section.-->
|
|
||||||
#### Code Revision
|
|
||||||
- (Found using the "Show Server Revision" verb under the OOC tab.)
|
|
||||||
|
|
||||||
<!--Optional, you may remove this section.-->
|
|
||||||
#### Anything else you may wish to add:
|
|
||||||
- (Location if it's a mapping issue, screenshots, sprites, etc.)
|
|
||||||
16
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@@ -1,25 +1,35 @@
|
|||||||
---
|
---
|
||||||
name: Bug report
|
name: Bug report
|
||||||
about: Create a report to help us improve
|
about: Create a report to help us improve
|
||||||
|
title: ''
|
||||||
|
labels: 'Type: Bug'
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
#### Brief description of the issue
|
<!-- Please DO NOT report 'suggestions' on GitHub. If your issue consists of an opinion about how something should be, it doesn't belong here. -->
|
||||||
|
<!-- If your issue consists of something not operating as intended, please report it below by filling out the template. -->
|
||||||
|
<!-- These directions will not appear in the issue, when submitted. -->
|
||||||
|
|
||||||
|
<!--Please provide a clear and concise description of what the bug is.-->
|
||||||
|
#### Brief description of the bug
|
||||||
|
|
||||||
|
<!--What normally happens when this occurs? Keep in mind that behavior may be different on other servers.-->
|
||||||
#### What you expected to happen
|
#### What you expected to happen
|
||||||
|
|
||||||
|
<!--Please use as much detail as possible when describing the bug behavior, including any context (things you did before) that might be relevant.-->
|
||||||
#### What actually happened
|
#### What actually happened
|
||||||
|
|
||||||
|
<!-- Same here, please include any context that might have contributed, such as actions taken right before.-->
|
||||||
#### Steps to reproduce
|
#### Steps to reproduce
|
||||||
- (Step 1)
|
- (Step 1)
|
||||||
- (Step 2)
|
- (Step 2)
|
||||||
- (and so on)
|
- (and so on)
|
||||||
|
|
||||||
|
<!--Optional, you may remove this section.-->
|
||||||
#### Code Revision
|
#### Code Revision
|
||||||
- (Found using the "Show Server Revision" verb under the OOC tab.)
|
- (Found using the "Show Server Revision" verb under the OOC tab.)
|
||||||
|
|
||||||
|
<!--Optional, you may remove this section.-->
|
||||||
#### Anything else you may wish to add:
|
#### Anything else you may wish to add:
|
||||||
- (Location if it's a mapping issue, screenshots, sprites, etc.)
|
- (Location if it's a mapping issue, screenshots, sprites, etc.)
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
// All religion stuff
|
|
||||||
GLOBAL_VAR(religion)
|
|
||||||
GLOBAL_VAR(deity)
|
|
||||||
|
|
||||||
//bible
|
|
||||||
GLOBAL_VAR(bible_name)
|
|
||||||
GLOBAL_VAR(bible_icon_state)
|
|
||||||
GLOBAL_VAR(bible_item_state)
|
|
||||||
@@ -75,6 +75,8 @@
|
|||||||
//used to store what traits the player had picked out in their preferences before joining, in text form.
|
//used to store what traits the player had picked out in their preferences before joining, in text form.
|
||||||
var/list/traits = list()
|
var/list/traits = list()
|
||||||
|
|
||||||
|
var/datum/religion/my_religion
|
||||||
|
|
||||||
/datum/mind/New(var/key)
|
/datum/mind/New(var/key)
|
||||||
src.key = key
|
src.key = key
|
||||||
purchase_log = list()
|
purchase_log = list()
|
||||||
@@ -571,4 +573,4 @@
|
|||||||
/mob/living/simple_mob/construct/juggernaut/mind_initialize()
|
/mob/living/simple_mob/construct/juggernaut/mind_initialize()
|
||||||
. = ..()
|
. = ..()
|
||||||
mind.assigned_role = "Juggernaut"
|
mind.assigned_role = "Juggernaut"
|
||||||
mind.special_role = "Cultist"
|
mind.special_role = "Cultist"
|
||||||
@@ -29,20 +29,14 @@
|
|||||||
return
|
return
|
||||||
|
|
||||||
var/obj/item/weapon/storage/bible/B = locate(/obj/item/weapon/storage/bible) in H
|
var/obj/item/weapon/storage/bible/B = locate(/obj/item/weapon/storage/bible) in H
|
||||||
if(!B)
|
var/obj/item/weapon/card/id/I = locate(/obj/item/weapon/card/id) in H
|
||||||
|
|
||||||
|
if(!B || !I)
|
||||||
return
|
return
|
||||||
|
|
||||||
if(GLOB.religion)
|
INVOKE_ASYNC(src, .proc/religion_prompts, H, B, I)
|
||||||
B.deity_name = GLOB.deity
|
|
||||||
B.name = GLOB.bible_name
|
|
||||||
B.icon_state = GLOB.bible_icon_state
|
|
||||||
B.item_state = GLOB.bible_item_state
|
|
||||||
to_chat(H, "<span class='boldnotice'>There is already an established religion onboard the station. You are an acolyte of [GLOB.deity]. Defer to the [title].</span>")
|
|
||||||
return
|
|
||||||
|
|
||||||
INVOKE_ASYNC(src, .proc/religion_prompts, H, B)
|
|
||||||
|
|
||||||
/datum/job/chaplain/proc/religion_prompts(mob/living/carbon/human/H, obj/item/weapon/storage/bible/B)
|
/datum/job/chaplain/proc/religion_prompts(mob/living/carbon/human/H, obj/item/weapon/storage/bible/B, obj/item/weapon/card/id/I)
|
||||||
var/religion_name = "Unitarianism"
|
var/religion_name = "Unitarianism"
|
||||||
var/new_religion = sanitize(input(H, "You are the crew services officer. Would you like to change your religion? Default is Unitarianism", "Name change", religion_name), MAX_NAME_LEN)
|
var/new_religion = sanitize(input(H, "You are the crew services officer. Would you like to change your religion? Default is Unitarianism", "Name change", religion_name), MAX_NAME_LEN)
|
||||||
if(!new_religion)
|
if(!new_religion)
|
||||||
@@ -83,18 +77,48 @@
|
|||||||
B.name = "Guru Granth Sahib"
|
B.name = "Guru Granth Sahib"
|
||||||
else
|
else
|
||||||
B.name = "The Holy Book of [new_religion]"
|
B.name = "The Holy Book of [new_religion]"
|
||||||
feedback_set_details("religion_name","[new_religion]")
|
|
||||||
|
|
||||||
var/deity_name = "Hashem"
|
var/deity_name = "Hashem"
|
||||||
var/new_deity = sanitize(input(H, "Would you like to change your deity? Default is Hashem", "Name change", deity_name), MAX_NAME_LEN)
|
var/new_deity = sanitize(input(H, "Would you like to change your deity? Default is Hashem", "Name change", deity_name), MAX_NAME_LEN)
|
||||||
|
|
||||||
if((length(new_deity) == 0) || (new_deity == "Hashem"))
|
if((length(new_deity) == 0) || (new_deity == "Hashem"))
|
||||||
new_deity = deity_name
|
new_deity = deity_name
|
||||||
B.deity_name = new_deity
|
|
||||||
|
|
||||||
GLOB.religion = new_religion
|
var/new_title = sanitize(input(H, "Would you like to change your title?", "Title Change", I.assignment), MAX_NAME_LEN)
|
||||||
GLOB.bible_name = B.name
|
|
||||||
GLOB.deity = B.deity_name
|
|
||||||
feedback_set_details("religion_deity","[new_deity]")
|
|
||||||
|
|
||||||
|
|
||||||
|
var/list/all_jobs = get_job_datums()
|
||||||
|
|
||||||
|
// Are they trying to fake an actual existent job
|
||||||
|
var/faking_job = FALSE
|
||||||
|
|
||||||
|
for (var/datum/job/J in all_jobs)
|
||||||
|
if (J.title == new_title || (new_title in get_alternate_titles(J.title)))
|
||||||
|
faking_job = TRUE
|
||||||
|
|
||||||
|
if (length(new_title) != 0 && !faking_job)
|
||||||
|
I.assignment = new_title
|
||||||
|
|
||||||
|
H.mind.my_religion = new /datum/religion(new_religion, new_deity, B.name, "bible", "bible", new_title)
|
||||||
|
|
||||||
|
B.deity_name = H.mind.my_religion.deity
|
||||||
|
I.assignment = H.mind.my_religion.title
|
||||||
|
I.name = text("[I.registered_name]'s ID Card ([I.assignment])")
|
||||||
|
data_core.manifest_modify(I.registered_name, I.assignment, I.rank)
|
||||||
|
|
||||||
|
/datum/religion
|
||||||
|
var/religion = "Unitarianism"
|
||||||
|
var/deity = "Hashem"
|
||||||
|
var/bible_name = "Bible"
|
||||||
|
var/bible_icon_state = "bible"
|
||||||
|
var/bible_item_state = "bible"
|
||||||
|
var/title = "Chaplain"
|
||||||
|
var/configured = FALSE
|
||||||
|
|
||||||
|
/datum/religion/New(var/r, var/d, var/bn, var/bis, var/bits, var/t)
|
||||||
|
. = ..()
|
||||||
|
religion = r
|
||||||
|
deity = d
|
||||||
|
bible_name = bn
|
||||||
|
bible_icon_state = bis
|
||||||
|
bible_item_state = bits
|
||||||
|
title = t
|
||||||
@@ -26,13 +26,13 @@
|
|||||||
data["network"] = network
|
data["network"] = network
|
||||||
data["temp"] = temp
|
data["temp"] = temp
|
||||||
|
|
||||||
var/list/servers = list()
|
var/list/serverData = list()
|
||||||
for(var/obj/machinery/telecomms/T in servers)
|
for(var/obj/machinery/telecomms/T in servers)
|
||||||
servers.Add(list(list(
|
serverData.Add(list(list(
|
||||||
"id" = T.id,
|
"id" = T.id,
|
||||||
"name" = T.name,
|
"name" = T.name,
|
||||||
)))
|
)))
|
||||||
data["servers"] = servers
|
data["servers"] = serverData
|
||||||
|
|
||||||
data["selectedServer"] = null
|
data["selectedServer"] = null
|
||||||
if(SelectedServer)
|
if(SelectedServer)
|
||||||
|
|||||||
@@ -26,13 +26,13 @@
|
|||||||
data["network"] = network
|
data["network"] = network
|
||||||
data["temp"] = temp
|
data["temp"] = temp
|
||||||
|
|
||||||
var/list/machinelist = list()
|
var/list/machinelistData = list()
|
||||||
for(var/obj/machinery/telecomms/T in machinelist)
|
for(var/obj/machinery/telecomms/T in machinelist)
|
||||||
machinelist.Add(list(list(
|
machinelistData.Add(list(list(
|
||||||
"id" = T.id,
|
"id" = T.id,
|
||||||
"name" = T.name,
|
"name" = T.name,
|
||||||
)))
|
)))
|
||||||
data["machinelist"] = machinelist
|
data["machinelist"] = machinelistData
|
||||||
|
|
||||||
data["selectedMachine"] = null
|
data["selectedMachine"] = null
|
||||||
if(SelectedMachine)
|
if(SelectedMachine)
|
||||||
|
|||||||
@@ -14,6 +14,8 @@ GLOBAL_LIST_BOILERPLATE(all_pai_cards, /obj/item/device/paicard)
|
|||||||
var/obj/item/device/radio/radio
|
var/obj/item/device/radio/radio
|
||||||
var/looking_for_personality = 0
|
var/looking_for_personality = 0
|
||||||
var/mob/living/silicon/pai/pai
|
var/mob/living/silicon/pai/pai
|
||||||
|
var/image/screen_layer
|
||||||
|
var/screen_color = "#00ff0d"
|
||||||
|
|
||||||
/obj/item/device/paicard/relaymove(var/mob/user, var/direction)
|
/obj/item/device/paicard/relaymove(var/mob/user, var/direction)
|
||||||
if(user.stat || user.stunned)
|
if(user.stat || user.stunned)
|
||||||
@@ -48,12 +50,19 @@ GLOBAL_LIST_BOILERPLATE(all_pai_cards, /obj/item/device/paicard)
|
|||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
var/turf/location = get_turf(src)
|
var/turf/location = get_turf(src)
|
||||||
var/obj/item/device/paicard/card = new(location)
|
if(istype(src , /obj/item/device/paicard/typeb))
|
||||||
var/mob/living/silicon/pai/new_pai = new(card)
|
var/obj/item/device/paicard/typeb/card = new(location)
|
||||||
|
var/mob/living/silicon/pai/new_pai = new(card)
|
||||||
|
new_pai.key = user.key
|
||||||
|
card.setPersonality(new_pai)
|
||||||
|
new_pai.SetName(actual_pai_name)
|
||||||
|
else
|
||||||
|
var/obj/item/device/paicard/card = new(location)
|
||||||
|
var/mob/living/silicon/pai/new_pai = new(card)
|
||||||
|
new_pai.key = user.key
|
||||||
|
card.setPersonality(new_pai)
|
||||||
|
new_pai.SetName(actual_pai_name)
|
||||||
qdel(src)
|
qdel(src)
|
||||||
new_pai.key = user.key
|
|
||||||
card.setPersonality(new_pai)
|
|
||||||
new_pai.SetName(actual_pai_name)
|
|
||||||
return ..()
|
return ..()
|
||||||
// VOREStation Edit End
|
// VOREStation Edit End
|
||||||
|
|
||||||
@@ -214,6 +223,7 @@ GLOBAL_LIST_BOILERPLATE(all_pai_cards, /obj/item/device/paicard)
|
|||||||
else //</font></font>
|
else //</font></font>
|
||||||
dat += "<b>Radio Uplink</b><br>"
|
dat += "<b>Radio Uplink</b><br>"
|
||||||
dat += "<font color=red><i>Radio firmware not loaded. Please install a pAI personality to load firmware.</i></font><br>"
|
dat += "<font color=red><i>Radio firmware not loaded. Please install a pAI personality to load firmware.</i></font><br>"
|
||||||
|
/* - //A button for instantly deleting people from the game is lame, especially considering that pAIs on our server tend to activate without a master.
|
||||||
dat += {"
|
dat += {"
|
||||||
<table>
|
<table>
|
||||||
<td class="button_red"><a href='byond://?src=\ref[src];wipe=1' class='button'>Wipe current pAI personality</a>
|
<td class="button_red"><a href='byond://?src=\ref[src];wipe=1' class='button'>Wipe current pAI personality</a>
|
||||||
@@ -221,6 +231,7 @@ GLOBAL_LIST_BOILERPLATE(all_pai_cards, /obj/item/device/paicard)
|
|||||||
</td>
|
</td>
|
||||||
</table>
|
</table>
|
||||||
"}
|
"}
|
||||||
|
*/
|
||||||
else
|
else
|
||||||
if(looking_for_personality)
|
if(looking_for_personality)
|
||||||
dat += {"
|
dat += {"
|
||||||
@@ -304,34 +315,40 @@ GLOBAL_LIST_BOILERPLATE(all_pai_cards, /obj/item/device/paicard)
|
|||||||
|
|
||||||
/obj/item/device/paicard/proc/setPersonality(mob/living/silicon/pai/personality)
|
/obj/item/device/paicard/proc/setPersonality(mob/living/silicon/pai/personality)
|
||||||
src.pai = personality
|
src.pai = personality
|
||||||
add_overlay("pai-happy")
|
setEmotion(1)
|
||||||
|
|
||||||
/obj/item/device/paicard/proc/removePersonality()
|
/obj/item/device/paicard/proc/removePersonality()
|
||||||
src.pai = null
|
src.pai = null
|
||||||
cut_overlays()
|
cut_overlays()
|
||||||
add_overlay("pai-off")
|
setEmotion(16)
|
||||||
|
|
||||||
/obj/item/device/paicard
|
/obj/item/device/paicard
|
||||||
var/current_emotion = 1
|
var/current_emotion = 1
|
||||||
/obj/item/device/paicard/proc/setEmotion(var/emotion)
|
/obj/item/device/paicard/proc/setEmotion(var/emotion)
|
||||||
if(pai)
|
if(pai)
|
||||||
cut_overlays()
|
cut_overlays()
|
||||||
|
qdel(screen_layer)
|
||||||
|
screen_layer = null
|
||||||
switch(emotion)
|
switch(emotion)
|
||||||
if(1) add_overlay("pai-happy")
|
if(1) screen_layer = image(icon, "pai-neutral")
|
||||||
if(2) add_overlay("pai-cat")
|
if(2) screen_layer = image(icon, "pai-what")
|
||||||
if(3) add_overlay("pai-extremely-happy")
|
if(3) screen_layer = image(icon, "pai-happy")
|
||||||
if(4) add_overlay("pai-face")
|
if(4) screen_layer = image(icon, "pai-cat")
|
||||||
if(5) add_overlay("pai-laugh")
|
if(5) screen_layer = image(icon, "pai-extremely-happy")
|
||||||
if(6) add_overlay("pai-off")
|
if(6) screen_layer = image(icon, "pai-face")
|
||||||
if(7) add_overlay("pai-sad")
|
if(7) screen_layer = image(icon, "pai-laugh")
|
||||||
if(8) add_overlay("pai-angry")
|
if(8) screen_layer = image(icon, "pai-sad")
|
||||||
if(9) add_overlay("pai-what")
|
if(9) screen_layer = image(icon, "pai-angry")
|
||||||
if(10) add_overlay("pai-neutral")
|
if(10) screen_layer = image(icon, "pai-silly")
|
||||||
if(11) add_overlay("pai-silly")
|
if(11) screen_layer = image(icon, "pai-nose")
|
||||||
if(12) add_overlay("pai-nose")
|
if(12) screen_layer = image(icon, "pai-smirk")
|
||||||
if(13) add_overlay("pai-smirk")
|
if(13) screen_layer = image(icon, "pai-exclamation")
|
||||||
if(14) add_overlay("pai-exclamation")
|
if(14) screen_layer = image(icon, "pai-question")
|
||||||
if(15) add_overlay("pai-question")
|
if(15) screen_layer = image(icon, "pai-blank")
|
||||||
|
if(16) screen_layer = image(icon, "pai-off")
|
||||||
|
|
||||||
|
screen_layer.color = pai.eye_color
|
||||||
|
add_overlay(screen_layer)
|
||||||
current_emotion = emotion
|
current_emotion = emotion
|
||||||
|
|
||||||
/obj/item/device/paicard/proc/alertUpdate()
|
/obj/item/device/paicard/proc/alertUpdate()
|
||||||
@@ -396,9 +413,6 @@ GLOBAL_LIST_BOILERPLATE(all_pai_cards, /obj/item/device/paicard)
|
|||||||
name = initial(src.name)
|
name = initial(src.name)
|
||||||
to_chat(AI, span_notice("You feel a tad claustrophobic as your mind closes back into your card, ejecting from \the [initial(src.name)]."))
|
to_chat(AI, span_notice("You feel a tad claustrophobic as your mind closes back into your card, ejecting from \the [initial(src.name)]."))
|
||||||
if(user)
|
if(user)
|
||||||
<<<<<<< HEAD
|
|
||||||
to_chat(user, span_notice("You eject the card from \the [initial(src.name)]."))
|
|
||||||
=======
|
|
||||||
to_chat(user, span_notice("You eject the card from \the [initial(src.name)]."))
|
to_chat(user, span_notice("You eject the card from \the [initial(src.name)]."))
|
||||||
|
|
||||||
/obj/item/device/paicard/typeb
|
/obj/item/device/paicard/typeb
|
||||||
@@ -411,5 +425,4 @@ GLOBAL_LIST_BOILERPLATE(all_pai_cards, /obj/item/device/paicard)
|
|||||||
icon_state = "pai"
|
icon_state = "pai"
|
||||||
|
|
||||||
/obj/random/paicard/item_to_spawn()
|
/obj/random/paicard/item_to_spawn()
|
||||||
return pick(/obj/item/device/paicard ,/obj/item/device/paicard/typeb)
|
return pick(/obj/item/device/paicard ,/obj/item/device/paicard/typeb)
|
||||||
>>>>>>> 1df6e69b74... Merge pull request #13038 from Very-Soft/teppipai
|
|
||||||
36
code/game/objects/items/devices/scanners/gas.dm
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
/obj/item/device/analyzer
|
||||||
|
name = "gas analyzer"
|
||||||
|
desc = "A hand-held environmental scanner which reports current gas levels."
|
||||||
|
icon_state = "atmos"
|
||||||
|
item_state = "analyzer"
|
||||||
|
w_class = ITEMSIZE_SMALL
|
||||||
|
slot_flags = SLOT_BELT
|
||||||
|
throwforce = 5
|
||||||
|
throw_speed = 4
|
||||||
|
throw_range = 20
|
||||||
|
|
||||||
|
matter = list(MAT_STEEL = 30,MAT_GLASS = 20)
|
||||||
|
|
||||||
|
origin_tech = list(TECH_MAGNET = 1, TECH_ENGINEERING = 1)
|
||||||
|
|
||||||
|
/obj/item/device/analyzer/atmosanalyze(var/mob/user)
|
||||||
|
var/air = user.return_air()
|
||||||
|
if (!air)
|
||||||
|
return
|
||||||
|
|
||||||
|
return atmosanalyzer_scan(src, air, user)
|
||||||
|
|
||||||
|
/obj/item/device/analyzer/attack_self(mob/user as mob)
|
||||||
|
if (user.stat)
|
||||||
|
return
|
||||||
|
if (!(ishuman(user) || ticker) && ticker.mode.name != "monkey")
|
||||||
|
to_chat(usr, "<span class='warning'>You don't have the dexterity to do this!</span>")
|
||||||
|
return
|
||||||
|
|
||||||
|
analyze_gases(src, user)
|
||||||
|
return
|
||||||
|
|
||||||
|
/obj/item/device/analyzer/afterattack(var/obj/O, var/mob/user, var/proximity)
|
||||||
|
if(proximity)
|
||||||
|
analyze_gases(O, user)
|
||||||
|
return
|
||||||
20
code/game/objects/items/devices/scanners/halogen.dm
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
/obj/item/device/halogen_counter
|
||||||
|
name = "halogen counter"
|
||||||
|
icon_state = "eftpos"
|
||||||
|
desc = "A hand-held halogen counter, used to detect the level of irradiation of living beings."
|
||||||
|
w_class = ITEMSIZE_SMALL
|
||||||
|
origin_tech = list(TECH_MAGNET = 1, TECH_BIO = 2)
|
||||||
|
throwforce = 0
|
||||||
|
throw_speed = 3
|
||||||
|
throw_range = 7
|
||||||
|
|
||||||
|
/obj/item/device/halogen_counter/attack(mob/living/M as mob, mob/living/user as mob)
|
||||||
|
if(!iscarbon(M))
|
||||||
|
to_chat(user, "<span class='warning'>This device can only scan organic beings!</span>")
|
||||||
|
return
|
||||||
|
user.visible_message("<span class='warning'>\The [user] has analyzed [M]'s radiation levels!</span>", "<span class='notice'>Analyzing Results for [M]:</span>")
|
||||||
|
if(M.radiation)
|
||||||
|
to_chat(user, "<span class='notice'>Radiation Level: [M.radiation]</span>")
|
||||||
|
else
|
||||||
|
to_chat(user, "<span class='notice'>No radiation detected.</span>")
|
||||||
|
return
|
||||||
@@ -1,15 +1,4 @@
|
|||||||
#define DEFIB_TIME_LIMIT (10 MINUTES) //VOREStation addition- past this many seconds, defib is useless.
|
#define DEFIB_TIME_LIMIT (10 MINUTES) //VOREStation addition- past this many seconds, defib is useless.
|
||||||
/*
|
|
||||||
CONTAINS:
|
|
||||||
T-RAY
|
|
||||||
DETECTIVE SCANNER
|
|
||||||
HEALTH ANALYZER
|
|
||||||
GAS ANALYZER - Analyzes atmosphere, container
|
|
||||||
MASS SPECTROMETER
|
|
||||||
REAGENT SCANNER
|
|
||||||
HALOGEN COUNTER - Radcount on mobs
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/obj/item/device/healthanalyzer
|
/obj/item/device/healthanalyzer
|
||||||
name = "health analyzer"
|
name = "health analyzer"
|
||||||
@@ -335,214 +324,4 @@ HALOGEN COUNTER - Radcount on mobs
|
|||||||
origin_tech = list(TECH_MAGNET = 7, TECH_BIO = 8)
|
origin_tech = list(TECH_MAGNET = 7, TECH_BIO = 8)
|
||||||
icon_state = "health3"
|
icon_state = "health3"
|
||||||
|
|
||||||
/obj/item/device/analyzer
|
|
||||||
name = "analyzer"
|
|
||||||
desc = "A hand-held environmental scanner which reports current gas levels."
|
|
||||||
icon_state = "atmos"
|
|
||||||
item_state = "analyzer"
|
|
||||||
w_class = ITEMSIZE_SMALL
|
|
||||||
slot_flags = SLOT_BELT
|
|
||||||
throwforce = 5
|
|
||||||
throw_speed = 4
|
|
||||||
throw_range = 20
|
|
||||||
|
|
||||||
matter = list(MAT_STEEL = 30,MAT_GLASS = 20)
|
|
||||||
|
|
||||||
origin_tech = list(TECH_MAGNET = 1, TECH_ENGINEERING = 1)
|
|
||||||
|
|
||||||
/obj/item/device/analyzer/atmosanalyze(var/mob/user)
|
|
||||||
var/air = user.return_air()
|
|
||||||
if (!air)
|
|
||||||
return
|
|
||||||
|
|
||||||
return atmosanalyzer_scan(src, air, user)
|
|
||||||
|
|
||||||
/obj/item/device/analyzer/attack_self(mob/user as mob)
|
|
||||||
if (user.stat)
|
|
||||||
return
|
|
||||||
if (!(ishuman(user) || ticker) && ticker.mode.name != "monkey")
|
|
||||||
to_chat(usr, "<span class='warning'>You don't have the dexterity to do this!</span>")
|
|
||||||
return
|
|
||||||
|
|
||||||
analyze_gases(src, user)
|
|
||||||
return
|
|
||||||
|
|
||||||
/obj/item/device/analyzer/afterattack(var/obj/O, var/mob/user, var/proximity)
|
|
||||||
if(proximity)
|
|
||||||
analyze_gases(O, user)
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
/obj/item/device/mass_spectrometer
|
|
||||||
name = "mass spectrometer"
|
|
||||||
desc = "A hand-held mass spectrometer which identifies trace chemicals in a blood sample."
|
|
||||||
icon_state = "spectrometer"
|
|
||||||
w_class = ITEMSIZE_SMALL
|
|
||||||
flags = OPENCONTAINER
|
|
||||||
slot_flags = SLOT_BELT
|
|
||||||
throwforce = 5
|
|
||||||
throw_speed = 4
|
|
||||||
throw_range = 20
|
|
||||||
|
|
||||||
matter = list(MAT_STEEL = 30,MAT_GLASS = 20)
|
|
||||||
|
|
||||||
origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 2)
|
|
||||||
var/details = 0
|
|
||||||
var/recent_fail = 0
|
|
||||||
|
|
||||||
/obj/item/device/mass_spectrometer/New()
|
|
||||||
..()
|
|
||||||
var/datum/reagents/R = new/datum/reagents(5)
|
|
||||||
reagents = R
|
|
||||||
R.my_atom = src
|
|
||||||
|
|
||||||
/obj/item/device/mass_spectrometer/on_reagent_change()
|
|
||||||
if(reagents.total_volume)
|
|
||||||
icon_state = initial(icon_state) + "_s"
|
|
||||||
else
|
|
||||||
icon_state = initial(icon_state)
|
|
||||||
|
|
||||||
/obj/item/device/mass_spectrometer/attack_self(mob/user as mob)
|
|
||||||
if (user.stat)
|
|
||||||
return
|
|
||||||
if (!(ishuman(user) || ticker) && ticker.mode.name != "monkey")
|
|
||||||
to_chat(user, "<span class='warning'>You don't have the dexterity to do this!</span>")
|
|
||||||
return
|
|
||||||
if(reagents.total_volume)
|
|
||||||
var/list/blood_traces = list()
|
|
||||||
for(var/datum/reagent/R in reagents.reagent_list)
|
|
||||||
if(R.id != "blood")
|
|
||||||
reagents.clear_reagents()
|
|
||||||
to_chat(user, "<span class='warning'>The sample was contaminated! Please insert another sample</span>")
|
|
||||||
return
|
|
||||||
else
|
|
||||||
blood_traces = params2list(R.data["trace_chem"])
|
|
||||||
break
|
|
||||||
var/dat = "Trace Chemicals Found: "
|
|
||||||
for(var/R in blood_traces)
|
|
||||||
if(details)
|
|
||||||
dat += "[R] ([blood_traces[R]] units) "
|
|
||||||
else
|
|
||||||
dat += "[R] "
|
|
||||||
to_chat(user, "[dat]")
|
|
||||||
reagents.clear_reagents()
|
|
||||||
return
|
|
||||||
|
|
||||||
/obj/item/device/mass_spectrometer/adv
|
|
||||||
name = "advanced mass spectrometer"
|
|
||||||
icon_state = "adv_spectrometer"
|
|
||||||
details = 1
|
|
||||||
origin_tech = list(TECH_MAGNET = 4, TECH_BIO = 2)
|
|
||||||
|
|
||||||
/obj/item/device/reagent_scanner
|
|
||||||
name = "reagent scanner"
|
|
||||||
desc = "A hand-held reagent scanner which identifies chemical agents."
|
|
||||||
icon_state = "spectrometer"
|
|
||||||
item_state = "analyzer"
|
|
||||||
w_class = ITEMSIZE_SMALL
|
|
||||||
slot_flags = SLOT_BELT
|
|
||||||
throwforce = 5
|
|
||||||
throw_speed = 4
|
|
||||||
throw_range = 20
|
|
||||||
matter = list(MAT_STEEL = 30,MAT_GLASS = 20)
|
|
||||||
|
|
||||||
origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 2)
|
|
||||||
var/details = 0
|
|
||||||
var/recent_fail = 0
|
|
||||||
|
|
||||||
/obj/item/device/reagent_scanner/afterattack(obj/O, mob/living/user, proximity)
|
|
||||||
if(!proximity || user.stat || !istype(O))
|
|
||||||
return
|
|
||||||
if(!istype(user))
|
|
||||||
return
|
|
||||||
|
|
||||||
if(!isnull(O.reagents))
|
|
||||||
if(!(O.flags & OPENCONTAINER)) // The idea is that the scanner has to touch the reagents somehow. This is done to prevent cheesing unidentified autoinjectors.
|
|
||||||
to_chat(user, span("warning", "\The [O] is sealed, and cannot be scanned by \the [src] until unsealed."))
|
|
||||||
return
|
|
||||||
|
|
||||||
var/dat = ""
|
|
||||||
if(O.reagents.reagent_list.len > 0)
|
|
||||||
var/one_percent = O.reagents.total_volume / 100
|
|
||||||
for (var/datum/reagent/R in O.reagents.reagent_list)
|
|
||||||
dat += "\n \t " + span("notice", "[R][details ? ": [R.volume / one_percent]%" : ""]")
|
|
||||||
if(dat)
|
|
||||||
to_chat(user, span("notice", "Chemicals found: [dat]"))
|
|
||||||
else
|
|
||||||
to_chat(user, span("notice", "No active chemical agents found in [O]."))
|
|
||||||
else
|
|
||||||
to_chat(user, span("notice", "No significant chemical agents found in [O]."))
|
|
||||||
|
|
||||||
return
|
|
||||||
|
|
||||||
/obj/item/device/reagent_scanner/adv
|
|
||||||
name = "advanced reagent scanner"
|
|
||||||
icon_state = "adv_spectrometer"
|
|
||||||
details = 1
|
|
||||||
origin_tech = list(TECH_MAGNET = 4, TECH_BIO = 2)
|
|
||||||
|
|
||||||
/obj/item/device/slime_scanner
|
|
||||||
name = "slime scanner"
|
|
||||||
icon_state = "xenobio"
|
|
||||||
item_state = "xenobio"
|
|
||||||
origin_tech = list(TECH_BIO = 1)
|
|
||||||
w_class = ITEMSIZE_SMALL
|
|
||||||
throwforce = 0
|
|
||||||
throw_speed = 3
|
|
||||||
throw_range = 7
|
|
||||||
matter = list(MAT_STEEL = 30,MAT_GLASS = 20)
|
|
||||||
|
|
||||||
/obj/item/device/slime_scanner/attack(mob/living/M as mob, mob/living/user as mob)
|
|
||||||
if(!istype(M, /mob/living/simple_mob/slime/xenobio))
|
|
||||||
to_chat(user, "<B>This device can only scan lab-grown slimes!</B>")
|
|
||||||
return
|
|
||||||
var/mob/living/simple_mob/slime/xenobio/S = M
|
|
||||||
user.show_message("Slime scan results:<br>[S.slime_color] [S.is_adult ? "adult" : "baby"] slime<br>Health: [S.health]<br>Mutation Probability: [S.mutation_chance]")
|
|
||||||
|
|
||||||
var/list/mutations = list()
|
|
||||||
for(var/potential_color in S.slime_mutation)
|
|
||||||
var/mob/living/simple_mob/slime/xenobio/slime = potential_color
|
|
||||||
mutations.Add(initial(slime.slime_color))
|
|
||||||
user.show_message("Potental to mutate into [english_list(mutations)] colors.<br>Extract potential: [S.cores]<br>Nutrition: [S.nutrition]/[S.max_nutrition]")
|
|
||||||
|
|
||||||
if (S.nutrition < S.get_starve_nutrition())
|
|
||||||
user.show_message("<span class='alert'>Warning: Subject is starving!</span>")
|
|
||||||
else if (S.nutrition < S.get_hunger_nutrition())
|
|
||||||
user.show_message("<span class='warning'>Warning: Subject is hungry.</span>")
|
|
||||||
user.show_message("Electric change strength: [S.power_charge]")
|
|
||||||
|
|
||||||
if(S.has_AI())
|
|
||||||
var/datum/ai_holder/simple_mob/xenobio_slime/AI = S.ai_holder
|
|
||||||
if(AI.resentment)
|
|
||||||
user.show_message("<span class='warning'>Warning: Subject is harboring resentment.</span>")
|
|
||||||
if(AI.rabid)
|
|
||||||
user.show_message("<span class='danger'>Subject is enraged and extremely dangerous!</span>")
|
|
||||||
if(S.harmless)
|
|
||||||
user.show_message("Subject has been pacified.")
|
|
||||||
if(S.unity)
|
|
||||||
user.show_message("Subject is friendly to other slime colors.")
|
|
||||||
|
|
||||||
user.show_message("Growth progress: [S.amount_grown]/10")
|
|
||||||
|
|
||||||
/obj/item/device/halogen_counter
|
|
||||||
name = "halogen counter"
|
|
||||||
icon_state = "eftpos"
|
|
||||||
desc = "A hand-held halogen counter, used to detect the level of irradiation of living beings."
|
|
||||||
w_class = ITEMSIZE_SMALL
|
|
||||||
origin_tech = list(TECH_MAGNET = 1, TECH_BIO = 2)
|
|
||||||
throwforce = 0
|
|
||||||
throw_speed = 3
|
|
||||||
throw_range = 7
|
|
||||||
|
|
||||||
/obj/item/device/halogen_counter/attack(mob/living/M as mob, mob/living/user as mob)
|
|
||||||
if(!iscarbon(M))
|
|
||||||
to_chat(user, "<span class='warning'>This device can only scan organic beings!</span>")
|
|
||||||
return
|
|
||||||
user.visible_message("<span class='warning'>\The [user] has analyzed [M]'s radiation levels!</span>", "<span class='notice'>Analyzing Results for [M]:</span>")
|
|
||||||
if(M.radiation)
|
|
||||||
to_chat(user, "<span class='notice'>Radiation Level: [M.radiation]</span>")
|
|
||||||
else
|
|
||||||
to_chat(user, "<span class='notice'>No radiation detected.</span>")
|
|
||||||
return
|
|
||||||
|
|
||||||
#undef DEFIB_TIME_LIMIT //VOREStation addition
|
#undef DEFIB_TIME_LIMIT //VOREStation addition
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
/obj/item/device/mass_spectrometer
|
||||||
|
name = "mass spectrometer"
|
||||||
|
desc = "A hand-held mass spectrometer which identifies trace chemicals in a blood sample."
|
||||||
|
icon_state = "spectrometer"
|
||||||
|
w_class = ITEMSIZE_SMALL
|
||||||
|
flags = OPENCONTAINER
|
||||||
|
slot_flags = SLOT_BELT
|
||||||
|
throwforce = 5
|
||||||
|
throw_speed = 4
|
||||||
|
throw_range = 20
|
||||||
|
|
||||||
|
matter = list(MAT_STEEL = 30,MAT_GLASS = 20)
|
||||||
|
|
||||||
|
origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 2)
|
||||||
|
var/details = 0
|
||||||
|
var/recent_fail = 0
|
||||||
|
|
||||||
|
/obj/item/device/mass_spectrometer/New()
|
||||||
|
..()
|
||||||
|
var/datum/reagents/R = new/datum/reagents(5)
|
||||||
|
reagents = R
|
||||||
|
R.my_atom = src
|
||||||
|
|
||||||
|
/obj/item/device/mass_spectrometer/on_reagent_change()
|
||||||
|
if(reagents.total_volume)
|
||||||
|
icon_state = initial(icon_state) + "_s"
|
||||||
|
else
|
||||||
|
icon_state = initial(icon_state)
|
||||||
|
|
||||||
|
/obj/item/device/mass_spectrometer/attack_self(mob/user as mob)
|
||||||
|
if (user.stat)
|
||||||
|
return
|
||||||
|
if (!(ishuman(user) || ticker) && ticker.mode.name != "monkey")
|
||||||
|
to_chat(user, "<span class='warning'>You don't have the dexterity to do this!</span>")
|
||||||
|
return
|
||||||
|
if(reagents.total_volume)
|
||||||
|
var/list/blood_traces = list()
|
||||||
|
for(var/datum/reagent/R in reagents.reagent_list)
|
||||||
|
if(R.id != "blood")
|
||||||
|
reagents.clear_reagents()
|
||||||
|
to_chat(user, "<span class='warning'>The sample was contaminated! Please insert another sample</span>")
|
||||||
|
return
|
||||||
|
else
|
||||||
|
blood_traces = params2list(R.data["trace_chem"])
|
||||||
|
break
|
||||||
|
var/dat = "Trace Chemicals Found: "
|
||||||
|
for(var/R in blood_traces)
|
||||||
|
if(details)
|
||||||
|
dat += "[R] ([blood_traces[R]] units) "
|
||||||
|
else
|
||||||
|
dat += "[R] "
|
||||||
|
to_chat(user, "[dat]")
|
||||||
|
reagents.clear_reagents()
|
||||||
|
return
|
||||||
|
|
||||||
|
/obj/item/device/mass_spectrometer/adv
|
||||||
|
name = "advanced mass spectrometer"
|
||||||
|
icon_state = "adv_spectrometer"
|
||||||
|
details = 1
|
||||||
|
origin_tech = list(TECH_MAGNET = 4, TECH_BIO = 2)
|
||||||
46
code/game/objects/items/devices/scanners/reagents.dm
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
/obj/item/device/reagent_scanner
|
||||||
|
name = "reagent scanner"
|
||||||
|
desc = "A hand-held reagent scanner which identifies chemical agents."
|
||||||
|
icon_state = "spectrometer"
|
||||||
|
item_state = "analyzer"
|
||||||
|
w_class = ITEMSIZE_SMALL
|
||||||
|
slot_flags = SLOT_BELT
|
||||||
|
throwforce = 5
|
||||||
|
throw_speed = 4
|
||||||
|
throw_range = 20
|
||||||
|
matter = list(MAT_STEEL = 30,MAT_GLASS = 20)
|
||||||
|
|
||||||
|
origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 2)
|
||||||
|
var/details = 0
|
||||||
|
var/recent_fail = 0
|
||||||
|
|
||||||
|
/obj/item/device/reagent_scanner/afterattack(obj/O, mob/living/user, proximity)
|
||||||
|
if(!proximity || user.stat || !istype(O))
|
||||||
|
return
|
||||||
|
if(!istype(user))
|
||||||
|
return
|
||||||
|
|
||||||
|
if(!isnull(O.reagents))
|
||||||
|
if(!(O.flags & OPENCONTAINER)) // The idea is that the scanner has to touch the reagents somehow. This is done to prevent cheesing unidentified autoinjectors.
|
||||||
|
to_chat(user, span("warning", "\The [O] is sealed, and cannot be scanned by \the [src] until unsealed."))
|
||||||
|
return
|
||||||
|
|
||||||
|
var/dat = ""
|
||||||
|
if(O.reagents.reagent_list.len > 0)
|
||||||
|
var/one_percent = O.reagents.total_volume / 100
|
||||||
|
for (var/datum/reagent/R in O.reagents.reagent_list)
|
||||||
|
dat += "\n \t " + span("notice", "[R][details ? ": [R.volume / one_percent]%" : ""]")
|
||||||
|
if(dat)
|
||||||
|
to_chat(user, span("notice", "Chemicals found: [dat]"))
|
||||||
|
else
|
||||||
|
to_chat(user, span("notice", "No active chemical agents found in [O]."))
|
||||||
|
else
|
||||||
|
to_chat(user, span("notice", "No significant chemical agents found in [O]."))
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
/obj/item/device/reagent_scanner/adv
|
||||||
|
name = "advanced reagent scanner"
|
||||||
|
icon_state = "adv_spectrometer"
|
||||||
|
details = 1
|
||||||
|
origin_tech = list(TECH_MAGNET = 4, TECH_BIO = 2)
|
||||||
@@ -300,4 +300,4 @@ var/global/mob/living/carbon/human/dummy/mannequin/sleevemate_mob
|
|||||||
if(stored_mind)
|
if(stored_mind)
|
||||||
icon_state = "[initial(icon_state)]_on"
|
icon_state = "[initial(icon_state)]_on"
|
||||||
else
|
else
|
||||||
icon_state = initial(icon_state)
|
icon_state = initial(icon_state)
|
||||||
42
code/game/objects/items/devices/scanners/slime.dm
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
/obj/item/device/slime_scanner
|
||||||
|
name = "slime scanner"
|
||||||
|
icon_state = "xenobio"
|
||||||
|
item_state = "xenobio"
|
||||||
|
origin_tech = list(TECH_BIO = 1)
|
||||||
|
w_class = ITEMSIZE_SMALL
|
||||||
|
throwforce = 0
|
||||||
|
throw_speed = 3
|
||||||
|
throw_range = 7
|
||||||
|
matter = list(MAT_STEEL = 30,MAT_GLASS = 20)
|
||||||
|
|
||||||
|
/obj/item/device/slime_scanner/attack(mob/living/M as mob, mob/living/user as mob)
|
||||||
|
if(!istype(M, /mob/living/simple_mob/slime/xenobio))
|
||||||
|
to_chat(user, "<B>This device can only scan lab-grown slimes!</B>")
|
||||||
|
return
|
||||||
|
var/mob/living/simple_mob/slime/xenobio/S = M
|
||||||
|
user.show_message("Slime scan results:<br>[S.slime_color] [S.is_adult ? "adult" : "baby"] slime<br>Health: [S.health]<br>Mutation Probability: [S.mutation_chance]")
|
||||||
|
|
||||||
|
var/list/mutations = list()
|
||||||
|
for(var/potential_color in S.slime_mutation)
|
||||||
|
var/mob/living/simple_mob/slime/xenobio/slime = potential_color
|
||||||
|
mutations.Add(initial(slime.slime_color))
|
||||||
|
user.show_message("Potental to mutate into [english_list(mutations)] colors.<br>Extract potential: [S.cores]<br>Nutrition: [S.nutrition]/[S.max_nutrition]")
|
||||||
|
|
||||||
|
if (S.nutrition < S.get_starve_nutrition())
|
||||||
|
user.show_message("<span class='alert'>Warning: Subject is starving!</span>")
|
||||||
|
else if (S.nutrition < S.get_hunger_nutrition())
|
||||||
|
user.show_message("<span class='warning'>Warning: Subject is hungry.</span>")
|
||||||
|
user.show_message("Electric change strength: [S.power_charge]")
|
||||||
|
|
||||||
|
if(S.has_AI())
|
||||||
|
var/datum/ai_holder/simple_mob/xenobio_slime/AI = S.ai_holder
|
||||||
|
if(AI.resentment)
|
||||||
|
user.show_message("<span class='warning'>Warning: Subject is harboring resentment.</span>")
|
||||||
|
if(AI.rabid)
|
||||||
|
user.show_message("<span class='danger'>Subject is enraged and extremely dangerous!</span>")
|
||||||
|
if(S.harmless)
|
||||||
|
user.show_message("Subject has been pacified.")
|
||||||
|
if(S.unity)
|
||||||
|
user.show_message("Subject is friendly to other slime colors.")
|
||||||
|
|
||||||
|
user.show_message("Growth progress: [S.amount_grown]/10")
|
||||||
@@ -37,30 +37,35 @@ GLOBAL_LIST_INIT(bibleitemstates, list(
|
|||||||
drop_sound = 'sound/bureaucracy/bookclose.ogg'
|
drop_sound = 'sound/bureaucracy/bookclose.ogg'
|
||||||
|
|
||||||
/obj/item/weapon/storage/bible/attack_self(mob/living/carbon/human/user)
|
/obj/item/weapon/storage/bible/attack_self(mob/living/carbon/human/user)
|
||||||
if(GLOB.bible_icon_state)
|
|
||||||
icon_state = GLOB.bible_icon_state
|
|
||||||
item_state = GLOB.bible_item_state
|
|
||||||
return FALSE
|
|
||||||
if(user?.mind?.assigned_role != "Chaplain")
|
if(user?.mind?.assigned_role != "Chaplain")
|
||||||
return FALSE
|
return FALSE
|
||||||
|
|
||||||
var/list/skins = list()
|
if (!user.mind.my_religion)
|
||||||
for(var/i in 1 to GLOB.biblestates.len)
|
|
||||||
var/image/bible_image = image(icon = 'icons/obj/storage.dmi', icon_state = GLOB.biblestates[i])
|
|
||||||
skins += list("[GLOB.biblenames[i]]" = bible_image)
|
|
||||||
|
|
||||||
var/choice = show_radial_menu(user, src, skins, custom_check = CALLBACK(src, .proc/check_menu, user), radius = 40, require_near = TRUE)
|
|
||||||
if(!choice)
|
|
||||||
return FALSE
|
return FALSE
|
||||||
var/bible_index = GLOB.biblenames.Find(choice)
|
|
||||||
if(!bible_index)
|
|
||||||
return FALSE
|
|
||||||
icon_state = GLOB.biblestates[bible_index]
|
|
||||||
item_state = GLOB.bibleitemstates[bible_index]
|
|
||||||
|
|
||||||
GLOB.bible_icon_state = icon_state
|
if (!user.mind.my_religion.configured)
|
||||||
GLOB.bible_item_state = item_state
|
var/list/skins = list()
|
||||||
feedback_set_details("religion_book", "[choice]")
|
for(var/i in 1 to GLOB.biblestates.len)
|
||||||
|
var/image/bible_image = image(icon = 'icons/obj/storage.dmi', icon_state = GLOB.biblestates[i])
|
||||||
|
skins += list("[GLOB.biblenames[i]]" = bible_image)
|
||||||
|
|
||||||
|
var/choice = show_radial_menu(user, src, skins, custom_check = CALLBACK(src, .proc/check_menu, user), radius = 40, require_near = TRUE)
|
||||||
|
if(!choice)
|
||||||
|
return FALSE
|
||||||
|
var/bible_index = GLOB.biblenames.Find(choice)
|
||||||
|
if(!bible_index)
|
||||||
|
return FALSE
|
||||||
|
|
||||||
|
user.mind.my_religion.bible_icon_state = GLOB.biblestates[bible_index]
|
||||||
|
user.mind.my_religion.bible_item_state = GLOB.bibleitemstates[bible_index]
|
||||||
|
user.mind.my_religion.configured = TRUE
|
||||||
|
|
||||||
|
deity_name = user.mind.my_religion.deity
|
||||||
|
name = user.mind.my_religion.bible_name
|
||||||
|
icon_state = user.mind.my_religion.bible_icon_state
|
||||||
|
item_state = user.mind.my_religion.bible_item_state
|
||||||
|
to_chat(user, "<span class='notice'>You invoke [user.mind.my_religion.deity] and prepare a copy of [src].</span>")
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if we are allowed to interact with a radial menu
|
* Checks if we are allowed to interact with a radial menu
|
||||||
@@ -69,7 +74,7 @@ GLOBAL_LIST_INIT(bibleitemstates, list(
|
|||||||
* * user The mob interacting with the menu
|
* * user The mob interacting with the menu
|
||||||
*/
|
*/
|
||||||
/obj/item/weapon/storage/bible/proc/check_menu(mob/living/carbon/human/user)
|
/obj/item/weapon/storage/bible/proc/check_menu(mob/living/carbon/human/user)
|
||||||
if(GLOB.bible_icon_state)
|
if(user.mind.my_religion.configured)
|
||||||
return FALSE
|
return FALSE
|
||||||
if(!istype(user))
|
if(!istype(user))
|
||||||
return FALSE
|
return FALSE
|
||||||
@@ -107,4 +112,4 @@ GLOBAL_LIST_INIT(bibleitemstates, list(
|
|||||||
/obj/item/weapon/storage/bible/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
/obj/item/weapon/storage/bible/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||||
if (src.use_sound)
|
if (src.use_sound)
|
||||||
playsound(src, src.use_sound, 50, 1, -5)
|
playsound(src, src.use_sound, 50, 1, -5)
|
||||||
..()
|
..()
|
||||||
@@ -3,28 +3,30 @@
|
|||||||
sort_order = 1
|
sort_order = 1
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/player_global/ui/load_preferences(var/savefile/S)
|
/datum/category_item/player_setup_item/player_global/ui/load_preferences(var/savefile/S)
|
||||||
S["UI_style"] >> pref.UI_style
|
S["UI_style"] >> pref.UI_style
|
||||||
S["UI_style_color"] >> pref.UI_style_color
|
S["UI_style_color"] >> pref.UI_style_color
|
||||||
S["UI_style_alpha"] >> pref.UI_style_alpha
|
S["UI_style_alpha"] >> pref.UI_style_alpha
|
||||||
S["ooccolor"] >> pref.ooccolor
|
S["ooccolor"] >> pref.ooccolor
|
||||||
S["tooltipstyle"] >> pref.tooltipstyle
|
S["tooltipstyle"] >> pref.tooltipstyle
|
||||||
S["client_fps"] >> pref.client_fps
|
S["client_fps"] >> pref.client_fps
|
||||||
S["ambience_freq"] >> pref.ambience_freq
|
S["ambience_freq"] >> pref.ambience_freq
|
||||||
S["ambience_chance"] >> pref.ambience_chance
|
S["ambience_chance"] >> pref.ambience_chance
|
||||||
S["tgui_fancy"] >> pref.tgui_fancy
|
S["tgui_fancy"] >> pref.tgui_fancy
|
||||||
S["tgui_lock"] >> pref.tgui_lock
|
S["tgui_lock"] >> pref.tgui_lock
|
||||||
|
S["tgui_input_mode"] >> pref.tgui_input_mode
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/player_global/ui/save_preferences(var/savefile/S)
|
/datum/category_item/player_setup_item/player_global/ui/save_preferences(var/savefile/S)
|
||||||
S["UI_style"] << pref.UI_style
|
S["UI_style"] << pref.UI_style
|
||||||
S["UI_style_color"] << pref.UI_style_color
|
S["UI_style_color"] << pref.UI_style_color
|
||||||
S["UI_style_alpha"] << pref.UI_style_alpha
|
S["UI_style_alpha"] << pref.UI_style_alpha
|
||||||
S["ooccolor"] << pref.ooccolor
|
S["ooccolor"] << pref.ooccolor
|
||||||
S["tooltipstyle"] << pref.tooltipstyle
|
S["tooltipstyle"] << pref.tooltipstyle
|
||||||
S["client_fps"] << pref.client_fps
|
S["client_fps"] << pref.client_fps
|
||||||
S["ambience_freq"] << pref.ambience_freq
|
S["ambience_freq"] << pref.ambience_freq
|
||||||
S["ambience_chance"] << pref.ambience_chance
|
S["ambience_chance"] << pref.ambience_chance
|
||||||
S["tgui_fancy"] << pref.tgui_fancy
|
S["tgui_fancy"] << pref.tgui_fancy
|
||||||
S["tgui_lock"] << pref.tgui_lock
|
S["tgui_lock"] << pref.tgui_lock
|
||||||
|
S["tgui_input_mode"] << pref.tgui_input_mode
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/player_global/ui/sanitize_preferences()
|
/datum/category_item/player_setup_item/player_global/ui/sanitize_preferences()
|
||||||
pref.UI_style = sanitize_inlist(pref.UI_style, all_ui_styles, initial(pref.UI_style))
|
pref.UI_style = sanitize_inlist(pref.UI_style, all_ui_styles, initial(pref.UI_style))
|
||||||
@@ -35,8 +37,9 @@
|
|||||||
pref.client_fps = sanitize_integer(pref.client_fps, 0, MAX_CLIENT_FPS, initial(pref.client_fps))
|
pref.client_fps = sanitize_integer(pref.client_fps, 0, MAX_CLIENT_FPS, initial(pref.client_fps))
|
||||||
pref.ambience_freq = sanitize_integer(pref.ambience_freq, 0, 60, initial(pref.ambience_freq)) // No more than once per hour.
|
pref.ambience_freq = sanitize_integer(pref.ambience_freq, 0, 60, initial(pref.ambience_freq)) // No more than once per hour.
|
||||||
pref.ambience_chance = sanitize_integer(pref.ambience_chance, 0, 100, initial(pref.ambience_chance)) // 0-100 range.
|
pref.ambience_chance = sanitize_integer(pref.ambience_chance, 0, 100, initial(pref.ambience_chance)) // 0-100 range.
|
||||||
pref.tgui_fancy = sanitize_integer(pref.tgui_fancy, 0, 1, initial(pref.tgui_fancy))
|
pref.tgui_fancy = sanitize_integer(pref.tgui_fancy, 0, 1, initial(pref.tgui_fancy))
|
||||||
pref.tgui_lock = sanitize_integer(pref.tgui_lock, 0, 1, initial(pref.tgui_lock))
|
pref.tgui_lock = sanitize_integer(pref.tgui_lock, 0, 1, initial(pref.tgui_lock))
|
||||||
|
pref.tgui_input_mode = sanitize_integer(pref.tgui_input_mode, 0, 1, initial(pref.tgui_input_mode))
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/player_global/ui/content(var/mob/user)
|
/datum/category_item/player_setup_item/player_global/ui/content(var/mob/user)
|
||||||
. = "<b>UI Style:</b> <a href='?src=\ref[src];select_style=1'><b>[pref.UI_style]</b></a><br>"
|
. = "<b>UI Style:</b> <a href='?src=\ref[src];select_style=1'><b>[pref.UI_style]</b></a><br>"
|
||||||
@@ -49,6 +52,7 @@
|
|||||||
. += "<b>Ambience Chance:</b> <a href='?src=\ref[src];select_ambience_chance=1'><b>[pref.ambience_chance]</b></a><br>"
|
. += "<b>Ambience Chance:</b> <a href='?src=\ref[src];select_ambience_chance=1'><b>[pref.ambience_chance]</b></a><br>"
|
||||||
. += "<b>tgui Window Mode:</b> <a href='?src=\ref[src];tgui_fancy=1'><b>[(pref.tgui_fancy) ? "Fancy (default)" : "Compatible (slower)"]</b></a><br>"
|
. += "<b>tgui Window Mode:</b> <a href='?src=\ref[src];tgui_fancy=1'><b>[(pref.tgui_fancy) ? "Fancy (default)" : "Compatible (slower)"]</b></a><br>"
|
||||||
. += "<b>tgui Window Placement:</b> <a href='?src=\ref[src];tgui_lock=1'><b>[(pref.tgui_lock) ? "Primary Monitor" : "Free (default)"]</b></a><br>"
|
. += "<b>tgui Window Placement:</b> <a href='?src=\ref[src];tgui_lock=1'><b>[(pref.tgui_lock) ? "Primary Monitor" : "Free (default)"]</b></a><br>"
|
||||||
|
. += "<b>Input Mode (Say, Me, Whisper, Subtle):</b> <a href='?src=\ref[src];tgui_input_mode=1'><b>[(pref.tgui_input_mode) ? "TGUI" : "BYOND (default)"]</b></a><br>"
|
||||||
if(can_select_ooc_color(user))
|
if(can_select_ooc_color(user))
|
||||||
. += "<b>OOC Color:</b>"
|
. += "<b>OOC Color:</b>"
|
||||||
if(pref.ooccolor == initial(pref.ooccolor))
|
if(pref.ooccolor == initial(pref.ooccolor))
|
||||||
@@ -118,6 +122,10 @@
|
|||||||
pref.tgui_lock = !pref.tgui_lock
|
pref.tgui_lock = !pref.tgui_lock
|
||||||
return TOPIC_REFRESH
|
return TOPIC_REFRESH
|
||||||
|
|
||||||
|
else if(href_list["tgui_input_mode"])
|
||||||
|
pref.tgui_input_mode = !pref.tgui_input_mode
|
||||||
|
return TOPIC_REFRESH
|
||||||
|
|
||||||
else if(href_list["reset"])
|
else if(href_list["reset"])
|
||||||
switch(href_list["reset"])
|
switch(href_list["reset"])
|
||||||
if("ui")
|
if("ui")
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ var/list/preferences_datums = list()
|
|||||||
|
|
||||||
var/tgui_fancy = TRUE
|
var/tgui_fancy = TRUE
|
||||||
var/tgui_lock = FALSE
|
var/tgui_lock = FALSE
|
||||||
|
var/tgui_input_mode = FALSE // Say, Me, Whisper, Subtle Input Mode; Disabled by default; FALSE = BYOND, TRUE = TGUI
|
||||||
|
|
||||||
//character preferences
|
//character preferences
|
||||||
var/num_languages = 0 //CHOMPEdit
|
var/num_languages = 0 //CHOMPEdit
|
||||||
|
|||||||
@@ -78,7 +78,7 @@
|
|||||||
adjustOxyLoss(max(getMaxHealth() * 2 - getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0))
|
adjustOxyLoss(max(getMaxHealth() * 2 - getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0))
|
||||||
updatehealth()
|
updatehealth()
|
||||||
|
|
||||||
/* CHOMP EDIT START: Removing PAI suicide, literally no one needs this.
|
/*
|
||||||
/mob/living/silicon/pai/verb/suicide()
|
/mob/living/silicon/pai/verb/suicide()
|
||||||
set category = "pAI Commands"
|
set category = "pAI Commands"
|
||||||
set desc = "Kill yourself and become a ghost (You will receive a confirmation prompt)"
|
set desc = "Kill yourself and become a ghost (You will receive a confirmation prompt)"
|
||||||
@@ -93,5 +93,4 @@
|
|||||||
death(0)
|
death(0)
|
||||||
else
|
else
|
||||||
to_chat(src, "Aborting suicide attempt.")
|
to_chat(src, "Aborting suicide attempt.")
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -183,6 +183,7 @@
|
|||||||
key = "squish"
|
key = "squish"
|
||||||
emote_sound = 'sound/effects/slime_squish.ogg' //Credit to DrMinky (freesound.org) for the sound.
|
emote_sound = 'sound/effects/slime_squish.ogg' //Credit to DrMinky (freesound.org) for the sound.
|
||||||
emote_message_3p = "squishes."
|
emote_message_3p = "squishes."
|
||||||
|
sound_vary = FALSE
|
||||||
|
|
||||||
/decl/emote/audible/warble
|
/decl/emote/audible/warble
|
||||||
key = "warble"
|
key = "warble"
|
||||||
@@ -211,6 +212,7 @@
|
|||||||
emote_message_1p_target = "You chirp in surprise at TARGET!"
|
emote_message_1p_target = "You chirp in surprise at TARGET!"
|
||||||
emote_message_3p_target = "chirps in surprise at TARGET!"
|
emote_message_3p_target = "chirps in surprise at TARGET!"
|
||||||
emote_sound = 'sound/voice/teshsqueak.ogg' // Copyright CC BY 3.0 InspectorJ (freesound.org) for the source audio.
|
emote_sound = 'sound/voice/teshsqueak.ogg' // Copyright CC BY 3.0 InspectorJ (freesound.org) for the source audio.
|
||||||
|
sound_vary = FALSE
|
||||||
|
|
||||||
/decl/emote/audible/teshchirp
|
/decl/emote/audible/teshchirp
|
||||||
key = "tchirp"
|
key = "tchirp"
|
||||||
|
|||||||
@@ -34,6 +34,7 @@
|
|||||||
key = "chirp"
|
key = "chirp"
|
||||||
emote_message_3p = "chirps!"
|
emote_message_3p = "chirps!"
|
||||||
emote_sound = 'sound/misc/nymphchirp.ogg'
|
emote_sound = 'sound/misc/nymphchirp.ogg'
|
||||||
|
sound_vary = FALSE
|
||||||
/decl/emote/audible/hoot
|
/decl/emote/audible/hoot
|
||||||
key = "hoot"
|
key = "hoot"
|
||||||
emote_message_3p = "hoots!"
|
emote_message_3p = "hoots!"
|
||||||
@@ -109,10 +110,12 @@
|
|||||||
key = "snort"
|
key = "snort"
|
||||||
emote_message_3p = "snorts!"
|
emote_message_3p = "snorts!"
|
||||||
emote_sound = 'sound/voice/Snort.ogg'
|
emote_sound = 'sound/voice/Snort.ogg'
|
||||||
|
sound_vary = FALSE
|
||||||
/decl/emote/audible/meow
|
/decl/emote/audible/meow
|
||||||
key = "meow"
|
key = "meow"
|
||||||
emote_message_3p = "gently meows!"
|
emote_message_3p = "gently meows!"
|
||||||
emote_sound = 'sound/voice/Meow.ogg'
|
emote_sound = 'sound/voice/Meow.ogg'
|
||||||
|
sound_vary = FALSE
|
||||||
/decl/emote/audible/moo
|
/decl/emote/audible/moo
|
||||||
key = "moo"
|
key = "moo"
|
||||||
emote_message_3p = "takes a breath and lets out a moo."
|
emote_message_3p = "takes a breath and lets out a moo."
|
||||||
|
|||||||
@@ -1,17 +1,18 @@
|
|||||||
/decl/emote/audible/synth
|
/decl/emote/audible/synth
|
||||||
key = "beep"
|
key = "ping"
|
||||||
emote_message_3p = "beeps."
|
emote_message_3p = "pings."
|
||||||
emote_sound = 'sound/machines/twobeep.ogg'
|
emote_sound = 'sound/machines/ping.ogg'
|
||||||
|
|
||||||
/decl/emote/audible/synth/mob_can_use(var/mob/living/user)
|
/decl/emote/audible/synth/mob_can_use(var/mob/living/user)
|
||||||
if(istype(user) && user.isSynthetic())
|
if(istype(user) && user.isSynthetic())
|
||||||
return ..()
|
return ..()
|
||||||
return FALSE
|
return FALSE
|
||||||
|
|
||||||
/decl/emote/audible/synth/ping
|
/decl/emote/audible/synth/beep
|
||||||
key = "ping"
|
key = "beep"
|
||||||
emote_message_3p = "pings."
|
emote_message_3p = "beeps."
|
||||||
emote_sound = 'sound/machines/ping.ogg'
|
emote_sound = 'sound/machines/twobeep.ogg'
|
||||||
|
sound_vary = FALSE
|
||||||
|
|
||||||
/decl/emote/audible/synth/buzz
|
/decl/emote/audible/synth/buzz
|
||||||
key = "buzz"
|
key = "buzz"
|
||||||
@@ -54,3 +55,19 @@
|
|||||||
emote_message_3p_target = "chirps happily at TARGET!"
|
emote_message_3p_target = "chirps happily at TARGET!"
|
||||||
emote_message_3p = "chirps happily."
|
emote_message_3p = "chirps happily."
|
||||||
emote_sound = 'sound/machines/dwoop.ogg'
|
emote_sound = 'sound/machines/dwoop.ogg'
|
||||||
|
|
||||||
|
/decl/emote/audible/synth/boop
|
||||||
|
key = "roboboop"
|
||||||
|
emote_message_1p_target = "You boop at TARGET!"
|
||||||
|
emote_message_1p = "You boop."
|
||||||
|
emote_message_3p_target = "boops at TARGET!"
|
||||||
|
emote_message_3p = "boops."
|
||||||
|
emote_sound = 'sound/voice/roboboop.ogg'
|
||||||
|
|
||||||
|
/decl/emote/audible/synth/robochirp
|
||||||
|
key = "robochirp"
|
||||||
|
emote_message_1p_target = "You chirp at TARGET!"
|
||||||
|
emote_message_1p = "You chirp."
|
||||||
|
emote_message_3p_target = "chirps at TARGET!"
|
||||||
|
emote_message_3p = "chirps."
|
||||||
|
emote_sound = 'sound/voice/robochirp.ogg'
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ var/global/list/emotes_by_key
|
|||||||
var/emote_range = 0 // If >0, restricts emote visibility to viewers within range.
|
var/emote_range = 0 // If >0, restricts emote visibility to viewers within range.
|
||||||
|
|
||||||
var/sound_preferences = list(/datum/client_preference/emote_noises) // Default emote sound_preferences is just emote_noises. Belch emote overrides this list for pref-checks.
|
var/sound_preferences = list(/datum/client_preference/emote_noises) // Default emote sound_preferences is just emote_noises. Belch emote overrides this list for pref-checks.
|
||||||
|
var/sound_vary = TRUE
|
||||||
|
|
||||||
/decl/emote/Initialize()
|
/decl/emote/Initialize()
|
||||||
. = ..()
|
. = ..()
|
||||||
@@ -186,7 +187,7 @@ var/global/list/emotes_by_key
|
|||||||
if(islist(sound_to_play) && length(sound_to_play))
|
if(islist(sound_to_play) && length(sound_to_play))
|
||||||
sound_to_play = pick(sound_to_play)
|
sound_to_play = pick(sound_to_play)
|
||||||
if(sound_to_play)
|
if(sound_to_play)
|
||||||
playsound(user.loc, sound_to_play, use_sound["vol"], 0, preference = sound_preferences) //VOREStation Add - Preference
|
playsound(user.loc, sound_to_play, use_sound["vol"], sound_vary, frequency = null, preference = sound_preferences) //VOREStation Add - Preference
|
||||||
|
|
||||||
/decl/emote/proc/mob_can_use(var/mob/user)
|
/decl/emote/proc/mob_can_use(var/mob/user)
|
||||||
return istype(user) && user.stat != DEAD && (type in user.get_available_emotes())
|
return istype(user) && user.stat != DEAD && (type in user.get_available_emotes())
|
||||||
|
|||||||
@@ -345,14 +345,7 @@
|
|||||||
screenstate = 5
|
screenstate = 5
|
||||||
if("6")
|
if("6")
|
||||||
if(!bibledelay)
|
if(!bibledelay)
|
||||||
|
new /obj/item/weapon/storage/bible(src.loc)
|
||||||
var/obj/item/weapon/storage/bible/B = new /obj/item/weapon/storage/bible(src.loc)
|
|
||||||
if(GLOB.religion)
|
|
||||||
B.icon_state = GLOB.bible_icon_state
|
|
||||||
B.item_state = GLOB.bible_item_state
|
|
||||||
B.name = GLOB.bible_name
|
|
||||||
B.deity_name = GLOB.deity
|
|
||||||
|
|
||||||
bibledelay = 1
|
bibledelay = 1
|
||||||
spawn(60)
|
spawn(60)
|
||||||
bibledelay = 0
|
bibledelay = 0
|
||||||
@@ -574,4 +567,4 @@
|
|||||||
b.icon_state = "book[rand(1,7)]"
|
b.icon_state = "book[rand(1,7)]"
|
||||||
qdel(O)
|
qdel(O)
|
||||||
else
|
else
|
||||||
..()
|
..()
|
||||||
@@ -1,12 +1,14 @@
|
|||||||
var/list/_human_default_emotes = list(
|
var/list/_human_default_emotes = list(
|
||||||
/decl/emote/visible/blink,
|
/decl/emote/visible/blink,
|
||||||
/decl/emote/audible/synth,
|
/decl/emote/audible/synth,
|
||||||
/decl/emote/audible/synth/ping,
|
/decl/emote/audible/synth/beep,
|
||||||
/decl/emote/audible/synth/buzz,
|
/decl/emote/audible/synth/buzz,
|
||||||
/decl/emote/audible/synth/confirm,
|
/decl/emote/audible/synth/confirm,
|
||||||
/decl/emote/audible/synth/deny,
|
/decl/emote/audible/synth/deny,
|
||||||
/decl/emote/audible/synth/scary,
|
/decl/emote/audible/synth/scary,
|
||||||
/decl/emote/audible/synth/dwoop,
|
/decl/emote/audible/synth/dwoop,
|
||||||
|
/decl/emote/audible/synth/boop,
|
||||||
|
/decl/emote/audible/synth/robochirp,
|
||||||
/decl/emote/visible/nod,
|
/decl/emote/visible/nod,
|
||||||
/decl/emote/visible/shake,
|
/decl/emote/visible/shake,
|
||||||
/decl/emote/visible/shiver,
|
/decl/emote/visible/shiver,
|
||||||
|
|||||||
@@ -1,14 +1,23 @@
|
|||||||
var/list/_silicon_default_emotes = list(
|
var/list/_silicon_default_emotes = list(
|
||||||
/decl/emote/audible/synth,
|
/decl/emote/audible/synth,
|
||||||
/decl/emote/audible/synth/ping,
|
/decl/emote/audible/synth/beep,
|
||||||
/decl/emote/audible/synth/buzz,
|
/decl/emote/audible/synth/buzz,
|
||||||
/decl/emote/audible/synth/confirm,
|
/decl/emote/audible/synth/confirm,
|
||||||
/decl/emote/audible/synth/deny,
|
/decl/emote/audible/synth/deny,
|
||||||
/decl/emote/audible/synth/scary,
|
/decl/emote/audible/synth/scary,
|
||||||
/decl/emote/audible/synth/dwoop,
|
/decl/emote/audible/synth/dwoop,
|
||||||
|
/decl/emote/audible/synth/boop,
|
||||||
|
/decl/emote/audible/synth/robochirp,
|
||||||
/decl/emote/audible/synth/security,
|
/decl/emote/audible/synth/security,
|
||||||
/decl/emote/audible/synth/security/halt
|
/decl/emote/audible/synth/security/halt
|
||||||
)
|
)
|
||||||
|
|
||||||
/mob/living/silicon/get_available_emotes()
|
/mob/living/silicon/get_available_emotes()
|
||||||
return global._silicon_default_emotes
|
return global._silicon_default_emotes
|
||||||
|
|
||||||
|
/mob/living/silicon/pai/get_available_emotes()
|
||||||
|
|
||||||
|
var/list/fulllist = _silicon_default_emotes
|
||||||
|
fulllist |= _robot_default_emotes
|
||||||
|
fulllist |= _human_default_emotes
|
||||||
|
return fulllist
|
||||||
@@ -25,7 +25,9 @@
|
|||||||
|
|
||||||
if(health <= 0)
|
if(health <= 0)
|
||||||
death(null,"gives one shrill beep before falling lifeless.")
|
death(null,"gives one shrill beep before falling lifeless.")
|
||||||
|
else if(health < maxHealth && istype(src.loc , /obj/item/device/paicard))
|
||||||
|
adjustBruteLoss(-0.5)
|
||||||
|
adjustFireLoss(-0.5)
|
||||||
|
|
||||||
/mob/living/silicon/pai/updatehealth()
|
/mob/living/silicon/pai/updatehealth()
|
||||||
if(status_flags & GODMODE)
|
if(status_flags & GODMODE)
|
||||||
|
|||||||
@@ -31,7 +31,7 @@
|
|||||||
"Cat" = "pai-cat",
|
"Cat" = "pai-cat",
|
||||||
"Mouse" = "pai-mouse",
|
"Mouse" = "pai-mouse",
|
||||||
"Monkey" = "pai-monkey",
|
"Monkey" = "pai-monkey",
|
||||||
"Corgi" = "pai-borgi",
|
"Borgi" = "pai-borgi",
|
||||||
"Fox" = "pai-fox",
|
"Fox" = "pai-fox",
|
||||||
"Parrot" = "pai-parrot",
|
"Parrot" = "pai-parrot",
|
||||||
"Rabbit" = "pai-rabbit",
|
"Rabbit" = "pai-rabbit",
|
||||||
@@ -48,11 +48,8 @@
|
|||||||
"Duffel" = "pai-duffel",
|
"Duffel" = "pai-duffel",
|
||||||
"Rat" = "rat",
|
"Rat" = "rat",
|
||||||
"Panther" = "panther",
|
"Panther" = "panther",
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
"Cyber Elf" = "cyberelf",
|
"Cyber Elf" = "cyberelf",
|
||||||
"Teppi" = "teppi"
|
"Teppi" = "teppi"
|
||||||
>>>>>>> 1df6e69b74... Merge pull request #13038 from Very-Soft/teppipai
|
|
||||||
//VOREStation Addition End
|
//VOREStation Addition End
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -414,6 +411,8 @@
|
|||||||
resting = 0
|
resting = 0
|
||||||
icon_state = "[chassis]"
|
icon_state = "[chassis]"
|
||||||
verbs -= /mob/living/silicon/pai/proc/pai_nom //VOREStation edit. Let's remove their nom verb
|
verbs -= /mob/living/silicon/pai/proc/pai_nom //VOREStation edit. Let's remove their nom verb
|
||||||
|
if(isopenspace(card.loc))
|
||||||
|
fall()
|
||||||
|
|
||||||
// No binary for pAIs.
|
// No binary for pAIs.
|
||||||
/mob/living/silicon/pai/binarycheck()
|
/mob/living/silicon/pai/binarycheck()
|
||||||
@@ -438,10 +437,12 @@
|
|||||||
if("Add Access")
|
if("Add Access")
|
||||||
idcard.access |= ID.access
|
idcard.access |= ID.access
|
||||||
to_chat(user, "<span class='notice'>You add the access from the [W] to [src].</span>")
|
to_chat(user, "<span class='notice'>You add the access from the [W] to [src].</span>")
|
||||||
|
to_chat(src, "<span class='notice'>\The [user] swipes the [W] over you. You copy the access codes.</span>")
|
||||||
return
|
return
|
||||||
if("Remove Access")
|
if("Remove Access")
|
||||||
idcard.access = list()
|
idcard.access = list()
|
||||||
to_chat(user, "<span class='notice'>You remove the access from [src].</span>")
|
to_chat(user, "<span class='notice'>You remove the access from [src].</span>")
|
||||||
|
to_chat(src, "<span class='warning'>\The [user] swipes the [W] over you, removing access codes from you.</span>")
|
||||||
return
|
return
|
||||||
if("Cancel")
|
if("Cancel")
|
||||||
return
|
return
|
||||||
@@ -456,16 +457,16 @@
|
|||||||
|
|
||||||
if(idaccessible == 0)
|
if(idaccessible == 0)
|
||||||
idaccessible = 1
|
idaccessible = 1
|
||||||
to_chat(src, "<span class='notice'>You allow access modifications.</span>")
|
visible_message("<span class='notice'>\The [src] clicks as their access modification slot opens.</span>","<span class='notice'>You allow access modifications.</span>", runemessage = "click")
|
||||||
|
|
||||||
else
|
else
|
||||||
idaccessible = 0
|
idaccessible = 0
|
||||||
to_chat(src, "<span class='notice'>You block access modfications.</span>")
|
visible_message("<span class='notice'>\The [src] clicks as their access modification slot closes.</span>","<span class='notice'>You block access modfications.</span>", runemessage = "click")
|
||||||
|
|
||||||
|
|
||||||
/mob/living/silicon/pai/verb/wipe_software()
|
/mob/living/silicon/pai/verb/wipe_software()
|
||||||
set name = "Wipe Software (CRYO)" //CHOMP EDIT: making this clear on first glance
|
set name = "Enter Storage"
|
||||||
set category = "pAI Commands" //CHOMP EDIT: moving this to pai commands, where it belongs
|
set category = "pAI Commands"
|
||||||
set desc = "Wipe your software. This is functionally equivalent to cryo or robotic storage, freeing up your job slot."
|
set desc = "Upload your personality to the cloud and wipe your software from the card. This is functionally equivalent to cryo or robotic storage, freeing up your job slot."
|
||||||
|
|
||||||
// Make sure people don't kill themselves accidentally
|
// Make sure people don't kill themselves accidentally
|
||||||
if(tgui_alert(usr, "WARNING: This will immediately wipe your software and ghost you, removing your character from the round permanently (similar to cryo and robotic storage). Are you entirely sure you want to do this?", "Wipe Software", list("No", "Yes")) != "Yes")
|
if(tgui_alert(usr, "WARNING: This will immediately wipe your software and ghost you, removing your character from the round permanently (similar to cryo and robotic storage). Are you entirely sure you want to do this?", "Wipe Software", list("No", "Yes")) != "Yes")
|
||||||
|
|||||||
@@ -1,13 +1,15 @@
|
|||||||
/mob/living/silicon/pai
|
/mob/living/silicon/pai
|
||||||
var/people_eaten = 0
|
var/people_eaten = 0
|
||||||
icon = 'icons/mob/pai_vr.dmi'
|
icon = 'icons/mob/pai_vr.dmi'
|
||||||
|
softfall = TRUE
|
||||||
|
var/eye_glow = TRUE
|
||||||
|
var/image/eye_layer = null // Holds the eye overlay.
|
||||||
|
var/eye_color = "#00ff0d"
|
||||||
var/global/list/wide_chassis = list(
|
var/global/list/wide_chassis = list(
|
||||||
"rat",
|
"rat",
|
||||||
"panther",
|
"panther",
|
||||||
"teppi"
|
"teppi"
|
||||||
)
|
)
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
var/global/list/flying_chassis = list(
|
var/global/list/flying_chassis = list(
|
||||||
"pai-parrot",
|
"pai-parrot",
|
||||||
"pai-bat",
|
"pai-bat",
|
||||||
@@ -43,7 +45,6 @@
|
|||||||
|
|
||||||
verbs |= /mob/living/proc/hide
|
verbs |= /mob/living/proc/hide
|
||||||
verbs |= /mob/living/proc/vertical_nom
|
verbs |= /mob/living/proc/vertical_nom
|
||||||
>>>>>>> 1df6e69b74... Merge pull request #13038 from Very-Soft/teppipai
|
|
||||||
|
|
||||||
/mob/living/silicon/pai/proc/pai_nom(var/mob/living/T in oview(1))
|
/mob/living/silicon/pai/proc/pai_nom(var/mob/living/T in oview(1))
|
||||||
set name = "pAI Nom"
|
set name = "pAI Nom"
|
||||||
@@ -81,17 +82,6 @@
|
|||||||
icon_state = "[chassis]_rest_full"
|
icon_state = "[chassis]_rest_full"
|
||||||
else
|
else
|
||||||
icon_state = "[chassis]_rest"
|
icon_state = "[chassis]_rest"
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
if(chassis in wide_chassis)
|
|
||||||
icon = 'icons/mob/pai_vr64x64.dmi'
|
|
||||||
pixel_x = -16
|
|
||||||
vis_height = 64
|
|
||||||
else
|
|
||||||
icon = 'icons/mob/pai_vr.dmi'
|
|
||||||
pixel_x = 0
|
|
||||||
vis_height = 32
|
|
||||||
=======
|
|
||||||
if(chassis in wide_chassis)
|
if(chassis in wide_chassis)
|
||||||
pixel_x = -16
|
pixel_x = -16
|
||||||
default_pixel_x = -16
|
default_pixel_x = -16
|
||||||
@@ -99,7 +89,6 @@
|
|||||||
pixel_x = 0
|
pixel_x = 0
|
||||||
default_pixel_x = 0
|
default_pixel_x = 0
|
||||||
add_eyes()
|
add_eyes()
|
||||||
>>>>>>> 1df6e69b74... Merge pull request #13038 from Very-Soft/teppipai
|
|
||||||
|
|
||||||
/mob/living/silicon/pai/update_icons() //And other functions cause this to occur, such as digesting someone.
|
/mob/living/silicon/pai/update_icons() //And other functions cause this to occur, such as digesting someone.
|
||||||
..()
|
..()
|
||||||
@@ -112,8 +101,6 @@
|
|||||||
icon_state = "[chassis]_full"
|
icon_state = "[chassis]_full"
|
||||||
else if(people_eaten && resting)
|
else if(people_eaten && resting)
|
||||||
icon_state = "[chassis]_rest_full"
|
icon_state = "[chassis]_rest_full"
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
if(chassis in wide_chassis)
|
if(chassis in wide_chassis)
|
||||||
pixel_x = -16
|
pixel_x = -16
|
||||||
default_pixel_x = -16
|
default_pixel_x = -16
|
||||||
@@ -121,14 +108,7 @@
|
|||||||
pixel_x = 0
|
pixel_x = 0
|
||||||
default_pixel_x = 0
|
default_pixel_x = 0
|
||||||
add_eyes()
|
add_eyes()
|
||||||
>>>>>>> 1df6e69b74... Merge pull request #13038 from Very-Soft/teppipai
|
|
||||||
|
|
||||||
if(chassis in wide_chassis)
|
|
||||||
icon = 'icons/mob/pai_vr64x64.dmi'
|
|
||||||
pixel_x = -16
|
|
||||||
else
|
|
||||||
icon = 'icons/mob/pai_vr.dmi'
|
|
||||||
pixel_x = 0
|
|
||||||
//proc override to avoid pAI players being invisible while the chassis selection window is open
|
//proc override to avoid pAI players being invisible while the chassis selection window is open
|
||||||
/mob/living/silicon/pai/proc/choose_chassis()
|
/mob/living/silicon/pai/proc/choose_chassis()
|
||||||
set category = "pAI Commands"
|
set category = "pAI Commands"
|
||||||
@@ -138,9 +118,6 @@
|
|||||||
choice = tgui_input_list(usr, "What would you like to use for your mobile chassis icon?", "Chassis Choice", possible_chassis)
|
choice = tgui_input_list(usr, "What would you like to use for your mobile chassis icon?", "Chassis Choice", possible_chassis)
|
||||||
if(!choice) return
|
if(!choice) return
|
||||||
chassis = possible_chassis[choice]
|
chassis = possible_chassis[choice]
|
||||||
<<<<<<< HEAD
|
|
||||||
verbs |= /mob/living/proc/hide
|
|
||||||
=======
|
|
||||||
if(chassis in wide_chassis)
|
if(chassis in wide_chassis)
|
||||||
icon = 'icons/mob/pai_vr64x64.dmi'
|
icon = 'icons/mob/pai_vr64x64.dmi'
|
||||||
vis_height = 64
|
vis_height = 64
|
||||||
@@ -179,9 +156,27 @@
|
|||||||
to_chat(src, "<span class='warning'>Your selected chassis eye color can not be modified. The color you pick will only apply to supporting chassis and your card screen.</span>")
|
to_chat(src, "<span class='warning'>Your selected chassis eye color can not be modified. The color you pick will only apply to supporting chassis and your card screen.</span>")
|
||||||
|
|
||||||
eye_color = input(src, "Choose your character's eye color:", "Eye Color") as color|null
|
eye_color = input(src, "Choose your character's eye color:", "Eye Color") as color|null
|
||||||
>>>>>>> 1df6e69b74... Merge pull request #13038 from Very-Soft/teppipai
|
|
||||||
update_icon()
|
update_icon()
|
||||||
|
card.setEmotion(card.current_emotion)
|
||||||
|
|
||||||
// Release belly contents before being gc'd!
|
// Release belly contents before being gc'd!
|
||||||
/mob/living/silicon/pai/Destroy()
|
/mob/living/silicon/pai/Destroy()
|
||||||
release_vore_contents()
|
release_vore_contents()
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
|
/mob/living/silicon/pai/proc/add_eyes()
|
||||||
|
if(chassis in allows_eye_color)
|
||||||
|
remove_eyes()
|
||||||
|
if(!eye_layer)
|
||||||
|
eye_layer = image(icon, "[icon_state]-eyes")
|
||||||
|
eye_layer.appearance_flags = appearance_flags
|
||||||
|
eye_layer.color = eye_color
|
||||||
|
if(eye_glow)
|
||||||
|
eye_layer.plane = PLANE_LIGHTING_ABOVE
|
||||||
|
add_overlay(eye_layer)
|
||||||
|
|
||||||
|
/mob/living/silicon/pai/proc/remove_eyes()
|
||||||
|
if(chassis in allows_eye_color)
|
||||||
|
cut_overlay(eye_layer)
|
||||||
|
qdel(eye_layer)
|
||||||
|
eye_layer = null
|
||||||
@@ -1,19 +1,20 @@
|
|||||||
var/list/pai_emotions = list(
|
var/list/pai_emotions = list(
|
||||||
"Happy" = 1,
|
"Neutral" = 1,
|
||||||
"Cat" = 2,
|
"What" = 2,
|
||||||
"Extremely Happy" = 3,
|
"Happy" = 3,
|
||||||
"Face" = 4,
|
"Cat" = 4,
|
||||||
"Laugh" = 5,
|
"Extremely Happy" = 5,
|
||||||
"Off" = 6,
|
"Face" = 6,
|
||||||
"Sad" = 7,
|
"Laugh" = 7,
|
||||||
"Angry" = 8,
|
"Sad" = 8,
|
||||||
"What" = 9,
|
"Angry" = 9,
|
||||||
"Neutral" = 10,
|
"Silly" = 10,
|
||||||
"Silly" = 11,
|
"Nose" = 11,
|
||||||
"Nose" = 12,
|
"Smirk" = 12,
|
||||||
"Smirk" = 13,
|
"Exclamation Points" = 13,
|
||||||
"Exclamation Points" = 14,
|
"Question Mark" = 14,
|
||||||
"Question Mark" = 15
|
"Blank" = 15,
|
||||||
|
"Off" = 16
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -411,6 +411,35 @@
|
|||||||
user.add_language(LANGUAGE_SKRELLIAN)
|
user.add_language(LANGUAGE_SKRELLIAN)
|
||||||
user.add_language(LANGUAGE_ZADDAT)
|
user.add_language(LANGUAGE_ZADDAT)
|
||||||
user.add_language(LANGUAGE_SCHECHI)
|
user.add_language(LANGUAGE_SCHECHI)
|
||||||
|
user.add_language(LANGUAGE_DRUDAKAR)
|
||||||
|
user.add_language(LANGUAGE_SLAVIC)
|
||||||
|
user.add_language(LANGUAGE_BIRDSONG)
|
||||||
|
user.add_language(LANGUAGE_SAGARU)
|
||||||
|
user.add_language(LANGUAGE_CANILUNZT)
|
||||||
|
user.add_language(LANGUAGE_ECUREUILIAN)
|
||||||
|
user.add_language(LANGUAGE_DAEMON)
|
||||||
|
user.add_language(LANGUAGE_ENOCHIAN)
|
||||||
|
user.add_language(LANGUAGE_VESPINAE)
|
||||||
|
user.add_language(LANGUAGE_SPACER)
|
||||||
|
user.add_language(LANGUAGE_CLOWNISH)
|
||||||
|
user.add_language(LANGUAGE_TAVAN)
|
||||||
|
user.add_language(LANGUAGE_ECHOSONG)
|
||||||
|
user.add_language(LANGUAGE_CHIMPANZEE)
|
||||||
|
user.add_language(LANGUAGE_NEAERA)
|
||||||
|
user.add_language(LANGUAGE_STOK)
|
||||||
|
user.add_language(LANGUAGE_FARWA)
|
||||||
|
user.add_language(LANGUAGE_ROOTLOCAL)
|
||||||
|
user.add_language(LANGUAGE_VOX)
|
||||||
|
user.add_language(LANGUAGE_SKRELLIANFAR)
|
||||||
|
user.add_language(LANGUAGE_MINBUS)
|
||||||
|
user.add_language(LANGUAGE_ALAI)
|
||||||
|
user.add_language(LANGUAGE_PROMETHEAN)
|
||||||
|
user.add_language(LANGUAGE_GIBBERISH)
|
||||||
|
user.add_language("Mouse")
|
||||||
|
user.add_language("Cat")
|
||||||
|
user.add_language("Bird")
|
||||||
|
user.add_language("Dog")
|
||||||
|
user.add_language("Teppi")
|
||||||
else
|
else
|
||||||
user.remove_language(LANGUAGE_UNATHI)
|
user.remove_language(LANGUAGE_UNATHI)
|
||||||
user.remove_language(LANGUAGE_SIIK)
|
user.remove_language(LANGUAGE_SIIK)
|
||||||
@@ -418,6 +447,35 @@
|
|||||||
user.remove_language(LANGUAGE_SKRELLIAN)
|
user.remove_language(LANGUAGE_SKRELLIAN)
|
||||||
user.remove_language(LANGUAGE_ZADDAT)
|
user.remove_language(LANGUAGE_ZADDAT)
|
||||||
user.remove_language(LANGUAGE_SCHECHI)
|
user.remove_language(LANGUAGE_SCHECHI)
|
||||||
|
user.remove_language(LANGUAGE_DRUDAKAR)
|
||||||
|
user.remove_language(LANGUAGE_SLAVIC)
|
||||||
|
user.remove_language(LANGUAGE_BIRDSONG)
|
||||||
|
user.remove_language(LANGUAGE_SAGARU)
|
||||||
|
user.remove_language(LANGUAGE_CANILUNZT)
|
||||||
|
user.remove_language(LANGUAGE_ECUREUILIAN)
|
||||||
|
user.remove_language(LANGUAGE_DAEMON)
|
||||||
|
user.remove_language(LANGUAGE_ENOCHIAN)
|
||||||
|
user.remove_language(LANGUAGE_VESPINAE)
|
||||||
|
user.remove_language(LANGUAGE_SPACER)
|
||||||
|
user.remove_language(LANGUAGE_CLOWNISH)
|
||||||
|
user.remove_language(LANGUAGE_TAVAN)
|
||||||
|
user.remove_language(LANGUAGE_ECHOSONG)
|
||||||
|
user.remove_language(LANGUAGE_CHIMPANZEE)
|
||||||
|
user.remove_language(LANGUAGE_NEAERA)
|
||||||
|
user.remove_language(LANGUAGE_STOK)
|
||||||
|
user.remove_language(LANGUAGE_FARWA)
|
||||||
|
user.remove_language(LANGUAGE_ROOTLOCAL)
|
||||||
|
user.remove_language(LANGUAGE_VOX)
|
||||||
|
user.remove_language(LANGUAGE_SKRELLIANFAR)
|
||||||
|
user.remove_language(LANGUAGE_MINBUS)
|
||||||
|
user.remove_language(LANGUAGE_ALAI)
|
||||||
|
user.remove_language(LANGUAGE_PROMETHEAN)
|
||||||
|
user.remove_language(LANGUAGE_GIBBERISH)
|
||||||
|
user.remove_language("Mouse")
|
||||||
|
user.remove_language("Cat")
|
||||||
|
user.remove_language("Bird")
|
||||||
|
user.remove_language("Dog")
|
||||||
|
user.remove_language("Teppi")
|
||||||
|
|
||||||
/datum/pai_software/translator/is_active(mob/living/silicon/pai/user)
|
/datum/pai_software/translator/is_active(mob/living/silicon/pai/user)
|
||||||
return user.translator_on
|
return user.translator_on
|
||||||
|
|||||||
@@ -16,12 +16,14 @@ var/list/_robot_default_emotes = list(
|
|||||||
/decl/emote/visible/spin,
|
/decl/emote/visible/spin,
|
||||||
/decl/emote/visible/sidestep,
|
/decl/emote/visible/sidestep,
|
||||||
/decl/emote/audible/synth,
|
/decl/emote/audible/synth,
|
||||||
/decl/emote/audible/synth/ping,
|
/decl/emote/audible/synth/beep,
|
||||||
/decl/emote/audible/synth/buzz,
|
/decl/emote/audible/synth/buzz,
|
||||||
/decl/emote/audible/synth/confirm,
|
/decl/emote/audible/synth/confirm,
|
||||||
/decl/emote/audible/synth/deny,
|
/decl/emote/audible/synth/deny,
|
||||||
/decl/emote/audible/synth/scary,
|
/decl/emote/audible/synth/scary,
|
||||||
/decl/emote/audible/synth/dwoop,
|
/decl/emote/audible/synth/dwoop,
|
||||||
|
/decl/emote/audible/synth/boop,
|
||||||
|
/decl/emote/audible/synth/robochirp,
|
||||||
/decl/emote/audible/synth/security,
|
/decl/emote/audible/synth/security,
|
||||||
/decl/emote/audible/synth/security/halt,
|
/decl/emote/audible/synth/security/halt,
|
||||||
//VOREStation Add
|
//VOREStation Add
|
||||||
|
|||||||
@@ -40,7 +40,11 @@
|
|||||||
set hidden = 1
|
set hidden = 1
|
||||||
|
|
||||||
set_typing_indicator(TRUE)
|
set_typing_indicator(TRUE)
|
||||||
var/message = tgui_input_text(usr, "Type your message:", "Say")
|
var/message
|
||||||
|
if(usr.client.prefs.tgui_input_mode)
|
||||||
|
message = tgui_input_text(usr, "Type your message:", "Say")
|
||||||
|
else
|
||||||
|
message = input(usr, "Type your message:", "Say") as text
|
||||||
set_typing_indicator(FALSE)
|
set_typing_indicator(FALSE)
|
||||||
|
|
||||||
if(message)
|
if(message)
|
||||||
@@ -51,7 +55,11 @@
|
|||||||
set hidden = 1
|
set hidden = 1
|
||||||
|
|
||||||
set_typing_indicator(TRUE)
|
set_typing_indicator(TRUE)
|
||||||
var/message = tgui_input_message(usr, "Type your message:", "Emote")
|
var/message
|
||||||
|
if(usr.client.prefs.tgui_input_mode)
|
||||||
|
message = tgui_input_message(usr, "Type your message:", "Emote")
|
||||||
|
else
|
||||||
|
message = input(usr, "Type your message:", "Emote") as message
|
||||||
set_typing_indicator(FALSE)
|
set_typing_indicator(FALSE)
|
||||||
|
|
||||||
if(message)
|
if(message)
|
||||||
@@ -62,7 +70,12 @@
|
|||||||
set name = ".Whisper"
|
set name = ".Whisper"
|
||||||
set hidden = 1
|
set hidden = 1
|
||||||
|
|
||||||
var/message = tgui_input_text(usr, "Type your message:", "Whisper")
|
var/message
|
||||||
|
if(usr.client.prefs.tgui_input_mode)
|
||||||
|
message = tgui_input_text(usr, "Type your message:", "Whisper")
|
||||||
|
else
|
||||||
|
message = input(usr, "Type your message:", "Whisper") as text
|
||||||
|
|
||||||
if(message)
|
if(message)
|
||||||
whisper(message)
|
whisper(message)
|
||||||
|
|
||||||
@@ -70,6 +83,11 @@
|
|||||||
set name = ".Subtle"
|
set name = ".Subtle"
|
||||||
set hidden = 1
|
set hidden = 1
|
||||||
|
|
||||||
var/message = tgui_input_message(usr, "Type your message:", "Subtle")
|
var/message
|
||||||
|
if(usr.client.prefs.tgui_input_mode)
|
||||||
|
message = tgui_input_message(usr, "Type your message:", "Subtle")
|
||||||
|
else
|
||||||
|
message = input(usr, "Type your message:", "Subtle") as message
|
||||||
|
|
||||||
if(message)
|
if(message)
|
||||||
me_verb_subtle(message)
|
me_verb_subtle(message)
|
||||||
|
|||||||
@@ -237,6 +237,7 @@
|
|||||||
P.vore_taste = src.vore_taste
|
P.vore_taste = src.vore_taste
|
||||||
P.vore_smell = src.vore_smell
|
P.vore_smell = src.vore_smell
|
||||||
P.permit_healbelly = src.permit_healbelly
|
P.permit_healbelly = src.permit_healbelly
|
||||||
|
P.noisy = src.noisy
|
||||||
P.show_vore_fx = src.show_vore_fx
|
P.show_vore_fx = src.show_vore_fx
|
||||||
P.can_be_drop_prey = src.can_be_drop_prey
|
P.can_be_drop_prey = src.can_be_drop_prey
|
||||||
P.can_be_drop_pred = src.can_be_drop_pred
|
P.can_be_drop_pred = src.can_be_drop_pred
|
||||||
@@ -284,6 +285,7 @@
|
|||||||
vore_taste = P.vore_taste
|
vore_taste = P.vore_taste
|
||||||
vore_smell = P.vore_smell
|
vore_smell = P.vore_smell
|
||||||
permit_healbelly = P.permit_healbelly
|
permit_healbelly = P.permit_healbelly
|
||||||
|
noisy = P.noisy
|
||||||
show_vore_fx = P.show_vore_fx
|
show_vore_fx = P.show_vore_fx
|
||||||
can_be_drop_prey = P.can_be_drop_prey
|
can_be_drop_prey = P.can_be_drop_prey
|
||||||
can_be_drop_pred = P.can_be_drop_pred
|
can_be_drop_pred = P.can_be_drop_pred
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
|
|||||||
var/digest_leave_remains = FALSE
|
var/digest_leave_remains = FALSE
|
||||||
var/allowmobvore = TRUE
|
var/allowmobvore = TRUE
|
||||||
var/permit_healbelly = TRUE
|
var/permit_healbelly = TRUE
|
||||||
|
var/noisy = FALSE
|
||||||
|
|
||||||
// These are 'modifier' prefs, do nothing on their own but pair with drop_prey/drop_pred settings.
|
// These are 'modifier' prefs, do nothing on their own but pair with drop_prey/drop_pred settings.
|
||||||
var/drop_vore = TRUE
|
var/drop_vore = TRUE
|
||||||
@@ -152,6 +153,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
|
|||||||
vore_taste = json_from_file["vore_taste"]
|
vore_taste = json_from_file["vore_taste"]
|
||||||
vore_smell = json_from_file["vore_smell"]
|
vore_smell = json_from_file["vore_smell"]
|
||||||
permit_healbelly = json_from_file["permit_healbelly"]
|
permit_healbelly = json_from_file["permit_healbelly"]
|
||||||
|
noisy = json_from_file["noisy"]
|
||||||
show_vore_fx = json_from_file["show_vore_fx"]
|
show_vore_fx = json_from_file["show_vore_fx"]
|
||||||
can_be_drop_prey = json_from_file["can_be_drop_prey"]
|
can_be_drop_prey = json_from_file["can_be_drop_prey"]
|
||||||
can_be_drop_pred = json_from_file["can_be_drop_pred"]
|
can_be_drop_pred = json_from_file["can_be_drop_pred"]
|
||||||
@@ -189,6 +191,8 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
|
|||||||
allowmobvore = TRUE
|
allowmobvore = TRUE
|
||||||
if(isnull(permit_healbelly))
|
if(isnull(permit_healbelly))
|
||||||
permit_healbelly = TRUE
|
permit_healbelly = TRUE
|
||||||
|
if (isnull(noisy))
|
||||||
|
noisy = FALSE
|
||||||
if(isnull(show_vore_fx))
|
if(isnull(show_vore_fx))
|
||||||
show_vore_fx = TRUE
|
show_vore_fx = TRUE
|
||||||
if(isnull(can_be_drop_prey))
|
if(isnull(can_be_drop_prey))
|
||||||
@@ -241,6 +245,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
|
|||||||
"vore_taste" = vore_taste,
|
"vore_taste" = vore_taste,
|
||||||
"vore_smell" = vore_smell,
|
"vore_smell" = vore_smell,
|
||||||
"permit_healbelly" = permit_healbelly,
|
"permit_healbelly" = permit_healbelly,
|
||||||
|
"noisy" = noisy,
|
||||||
"show_vore_fx" = show_vore_fx,
|
"show_vore_fx" = show_vore_fx,
|
||||||
"can_be_drop_prey" = can_be_drop_prey,
|
"can_be_drop_prey" = can_be_drop_prey,
|
||||||
"can_be_drop_pred" = can_be_drop_pred,
|
"can_be_drop_pred" = can_be_drop_pred,
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 162 KiB After Width: | Height: | Size: 167 KiB |
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 25 KiB |
BIN
icons/obj/paicard.dmi
Normal file
|
After Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |
BIN
sound/voice/roboboop.ogg
Normal file
BIN
sound/voice/robochirp.ogg
Normal file
@@ -21,10 +21,10 @@ export const TelecommsLogBrowser = (props, context) => {
|
|||||||
height={450}
|
height={450}
|
||||||
resizable>
|
resizable>
|
||||||
<Window.Content scrollable>
|
<Window.Content scrollable>
|
||||||
{(temp && temp.length) ? (
|
{temp ? (
|
||||||
<NoticeBox warning>
|
<NoticeBox danger={temp.color === "bad"} warning={temp.color !== "bad"}>
|
||||||
<Box display="inline-box" verticalAlign="middle">
|
<Box display="inline-box" verticalAlign="middle">
|
||||||
{temp}
|
{temp.text}
|
||||||
</Box>
|
</Box>
|
||||||
<Button
|
<Button
|
||||||
icon="times-circle"
|
icon="times-circle"
|
||||||
@@ -97,7 +97,7 @@ const TelecommsServerSelection = (props, context) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Section title="Detected Telecommunication Servers">
|
<Section title="Detected Telecommunications Servers">
|
||||||
<LabeledList>
|
<LabeledList>
|
||||||
{servers.map(server => (
|
{servers.map(server => (
|
||||||
<LabeledList.Item
|
<LabeledList.Item
|
||||||
|
|||||||
@@ -20,10 +20,10 @@ export const TelecommsMachineBrowser = (props, context) => {
|
|||||||
height={450}
|
height={450}
|
||||||
resizable>
|
resizable>
|
||||||
<Window.Content scrollable>
|
<Window.Content scrollable>
|
||||||
{(temp && temp.length) ? (
|
{temp ? (
|
||||||
<NoticeBox warning>
|
<NoticeBox danger={temp.color === "bad"} warning={temp.color !== "bad"}>
|
||||||
<Box display="inline-box" verticalAlign="middle">
|
<Box display="inline-box" verticalAlign="middle">
|
||||||
{temp}
|
{temp.text}
|
||||||
</Box>
|
</Box>
|
||||||
<Button
|
<Button
|
||||||
icon="times-circle"
|
icon="times-circle"
|
||||||
|
|||||||
@@ -118,7 +118,6 @@
|
|||||||
#include "code\_global_vars\bitfields.dm"
|
#include "code\_global_vars\bitfields.dm"
|
||||||
#include "code\_global_vars\misc.dm"
|
#include "code\_global_vars\misc.dm"
|
||||||
#include "code\_global_vars\mobs.dm"
|
#include "code\_global_vars\mobs.dm"
|
||||||
#include "code\_global_vars\religion.dm"
|
|
||||||
#include "code\_global_vars\sensitive.dm"
|
#include "code\_global_vars\sensitive.dm"
|
||||||
#include "code\_global_vars\traits.dm"
|
#include "code\_global_vars\traits.dm"
|
||||||
#include "code\_global_vars\typecache.dm"
|
#include "code\_global_vars\typecache.dm"
|
||||||
@@ -1258,8 +1257,6 @@
|
|||||||
#include "code\game\objects\items\devices\paicard_ch.dm"
|
#include "code\game\objects\items\devices\paicard_ch.dm"
|
||||||
#include "code\game\objects\items\devices\pipe_painter.dm"
|
#include "code\game\objects\items\devices\pipe_painter.dm"
|
||||||
#include "code\game\objects\items\devices\powersink.dm"
|
#include "code\game\objects\items\devices\powersink.dm"
|
||||||
#include "code\game\objects\items\devices\scanners.dm"
|
|
||||||
#include "code\game\objects\items\devices\scanners_vr.dm"
|
|
||||||
#include "code\game\objects\items\devices\spy_bug.dm"
|
#include "code\game\objects\items\devices\spy_bug.dm"
|
||||||
#include "code\game\objects\items\devices\starcaster_ch.dm"
|
#include "code\game\objects\items\devices\starcaster_ch.dm"
|
||||||
#include "code\game\objects\items\devices\suit_cooling.dm"
|
#include "code\game\objects\items\devices\suit_cooling.dm"
|
||||||
@@ -1296,6 +1293,13 @@
|
|||||||
#include "code\game\objects\items\devices\radio\radio_vr.dm"
|
#include "code\game\objects\items\devices\radio\radio_vr.dm"
|
||||||
#include "code\game\objects\items\devices\radio\radio_yw.dm"
|
#include "code\game\objects\items\devices\radio\radio_yw.dm"
|
||||||
#include "code\game\objects\items\devices\radio\radiopack.dm"
|
#include "code\game\objects\items\devices\radio\radiopack.dm"
|
||||||
|
#include "code\game\objects\items\devices\scanners\gas.dm"
|
||||||
|
#include "code\game\objects\items\devices\scanners\halogen.dm"
|
||||||
|
#include "code\game\objects\items\devices\scanners\health.dm"
|
||||||
|
#include "code\game\objects\items\devices\scanners\mass_spectrometer.dm"
|
||||||
|
#include "code\game\objects\items\devices\scanners\reagents.dm"
|
||||||
|
#include "code\game\objects\items\devices\scanners\sleevemate.dm"
|
||||||
|
#include "code\game\objects\items\devices\scanners\slime.dm"
|
||||||
#include "code\game\objects\items\robot\robot_items.dm"
|
#include "code\game\objects\items\robot\robot_items.dm"
|
||||||
#include "code\game\objects\items\robot\robot_parts.dm"
|
#include "code\game\objects\items\robot\robot_parts.dm"
|
||||||
#include "code\game\objects\items\robot\robot_upgrades.dm"
|
#include "code\game\objects\items\robot\robot_upgrades.dm"
|
||||||
|
|||||||