mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-21 19:19:12 +01:00
Merge branch 'master' into mobpathfix
This commit is contained in:
@@ -56,3 +56,21 @@
|
||||
mind.active = TRUE
|
||||
|
||||
SC.catch_mob(src) //This will result in us being deleted so...
|
||||
|
||||
/mob/observer/dead/verb/backup_ping()
|
||||
set category = "Ghost"
|
||||
set name = "Notify Transcore"
|
||||
set desc = "If your past-due backup notification was missed or ignored, you can use this to send a new one."
|
||||
|
||||
if(src.mind.name in SStranscore.backed_up)
|
||||
var/datum/transhuman/mind_record/record = SStranscore.backed_up[src.mind.name]
|
||||
if(!(record.dead_state == MR_DEAD))
|
||||
to_chat(src, "<span class='warning'>Your backup is not past-due yet.</span>")
|
||||
else if((world.time - record.last_notification) < 10 MINUTES)
|
||||
to_chat(src, "<span class='warning'>Too little time has passed since your last notification.</span>")
|
||||
else
|
||||
SStranscore.notify(record.mindname, TRUE)
|
||||
record.last_notification = world.time
|
||||
to_chat(src, "<span class='notice'>New notification has been sent.</span>")
|
||||
else
|
||||
to_chat(src, "<span class='warning'>No mind record found!</span>")
|
||||
@@ -1102,7 +1102,7 @@
|
||||
else
|
||||
usr << "<span class='warning'>You failed to check the pulse. Try again.</span>"
|
||||
|
||||
/mob/living/carbon/human/proc/set_species(var/new_species, var/default_colour, var/regen_icons = TRUE)
|
||||
/mob/living/carbon/human/proc/set_species(var/new_species, var/default_colour, var/regen_icons = TRUE, var/mob/living/carbon/human/example = null) //VOREStation Edit - send an example
|
||||
|
||||
if(!dna)
|
||||
if(!new_species)
|
||||
@@ -1139,7 +1139,15 @@
|
||||
if(species.default_language)
|
||||
add_language(species.default_language)
|
||||
|
||||
if(species.base_color) //VOREStation Edit - Always give them a basse color
|
||||
//if(species.icon_scale != 1) //VOREStation Removal
|
||||
// update_transform() //VOREStation Removal
|
||||
|
||||
if(example) //VOREStation Edit begin
|
||||
if(!(example == src))
|
||||
r_skin = example.r_skin
|
||||
g_skin = example.g_skin
|
||||
b_skin = example.b_skin
|
||||
else if(species.base_color) //VOREStation Edit end
|
||||
//Apply colour.
|
||||
r_skin = hex2num(copytext(species.base_color,2,4))
|
||||
g_skin = hex2num(copytext(species.base_color,4,6))
|
||||
@@ -1157,10 +1165,13 @@
|
||||
|
||||
//icon_state = lowertext(species.name) //Necessary?
|
||||
|
||||
species.create_organs(src)
|
||||
|
||||
//VOREStation Edit start: swap places of those two procs
|
||||
species.handle_post_spawn(src)
|
||||
|
||||
species.create_organs(src)
|
||||
//VOREStation Edit end: swap places of those two procs
|
||||
|
||||
|
||||
maxHealth = species.total_health
|
||||
|
||||
if(LAZYLEN(descriptors))
|
||||
|
||||
@@ -1398,7 +1398,7 @@
|
||||
/mob/living/carbon/human/proc/process_glasses(var/obj/item/clothing/glasses/G)
|
||||
if(G && G.active)
|
||||
see_in_dark += G.darkness_view
|
||||
if(G.overlay)
|
||||
if(G.overlay && client)
|
||||
client.screen |= G.overlay
|
||||
if(G.vision_flags)
|
||||
sight |= G.vision_flags
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
max_age = 200
|
||||
health_hud_intensity = 2
|
||||
num_alternate_languages = 3
|
||||
assisted_langs = list(LANGUAGE_EAL, LANGUAGE_ROOTLOCAL, LANGUAGE_ROOTGLOBAL, LANGUAGE_VOX)
|
||||
|
||||
spawn_flags = SPECIES_CAN_JOIN
|
||||
appearance_flags = HAS_HAIR_COLOR | HAS_SKIN_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_EYE_COLOR
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/datum/species/monkey/shark
|
||||
name = "Sobaka"
|
||||
name = SPECIES_MONKEY_AKULA
|
||||
name_plural = "Sobaka"
|
||||
icobase = 'icons/mob/human_races/monkeys/r_sobaka_vr.dmi'
|
||||
deform = 'icons/mob/human_races/monkeys/r_sobaka_vr.dmi'
|
||||
@@ -8,7 +8,7 @@
|
||||
default_language = "Skrellian" //Closest we have.
|
||||
|
||||
/datum/species/monkey/sergal
|
||||
name = "Saru"
|
||||
name = SPECIES_MONKEY_SERGAL
|
||||
greater_form = "Sergal"
|
||||
icobase = 'icons/mob/human_races/monkeys/r_sergaling_vr.dmi'
|
||||
deform = 'icons/mob/human_races/monkeys/r_sergaling_vr.dmi'
|
||||
@@ -16,7 +16,7 @@
|
||||
default_language = LANGUAGE_SAGARU
|
||||
|
||||
/datum/species/monkey/sparra
|
||||
name = "Sparra"
|
||||
name = SPECIES_MONKEY_NEVREAN
|
||||
name_plural = "Sparra"
|
||||
greater_form = "Nevrean"
|
||||
tail = null
|
||||
@@ -41,7 +41,7 @@
|
||||
*/
|
||||
|
||||
/datum/species/monkey/vulpkanin
|
||||
name = "Wolpin"
|
||||
name = SPECIES_MONKEY_VULPKANIN
|
||||
name_plural = "Wolpin"
|
||||
|
||||
icobase = 'icons/mob/human_races/monkeys/r_wolpin.dmi'
|
||||
|
||||
@@ -9,14 +9,8 @@
|
||||
"Rapala", "Neaera", "Stok", "Farwa", "Sobaka",
|
||||
"Wolpin", "Saru", "Sparra")
|
||||
|
||||
heal_rate = 0.2 //As of writing, original was 0.5 - Slows regen speed (bad)
|
||||
hunger_factor = 0.1 //As of writing, original was 0.2 - Slows hunger rate (good)
|
||||
siemens_coefficient = 1 //As of writing, original was 0.4 (bad)
|
||||
active_regen_mult = 0.66 //As of writing, original was 1 (good)
|
||||
|
||||
color_mult = 1
|
||||
mob_size = MOB_MEDIUM //As of writing, original was MOB_SMALL - Allows normal swapping (good)
|
||||
num_alternate_languages = 1 //Might be outdated: They currently have 3 in the other file
|
||||
mob_size = MOB_MEDIUM //As of writing, original was MOB_SMALL - Allows normal swapping
|
||||
trashcan = 1 //They have goopy bodies. They can just dissolve things within them.
|
||||
|
||||
appearance_flags = HAS_SKIN_COLOR | HAS_EYE_COLOR | HAS_HAIR_COLOR | RADIATION_GLOWS | HAS_UNDERWEAR
|
||||
|
||||
@@ -149,6 +149,12 @@ default behaviour is:
|
||||
tmob.forceMove(oldloc)
|
||||
now_pushing = 0
|
||||
return
|
||||
//VOREStation Edit - Begin
|
||||
else if((tmob.mob_always_swap || (tmob.a_intent == I_HELP || tmob.restrained()) && (a_intent == I_HELP || src.restrained())) && canmove && can_swap && handle_micro_bump_helping(tmob))
|
||||
forceMove(tmob.loc)
|
||||
now_pushing = 0
|
||||
return
|
||||
//VOREStation Edit - End
|
||||
|
||||
if(!can_move_mob(tmob, 0, 0))
|
||||
now_pushing = 0
|
||||
@@ -944,7 +950,11 @@ default behaviour is:
|
||||
|
||||
/mob/living/proc/escape_buckle()
|
||||
if(buckled)
|
||||
buckled.user_unbuckle_mob(src, src)
|
||||
if(istype(buckled, /obj/vehicle))
|
||||
var/obj/vehicle/vehicle = buckled
|
||||
vehicle.unload()
|
||||
else
|
||||
buckled.user_unbuckle_mob(src, src)
|
||||
|
||||
/mob/living/proc/resist_grab()
|
||||
var/resisting = 0
|
||||
|
||||
@@ -305,7 +305,10 @@ var/list/ai_verbs_default = list(
|
||||
/obj/machinery/ai_powersupply/New(var/mob/living/silicon/ai/ai=null)
|
||||
powered_ai = ai
|
||||
powered_ai.psupply = src
|
||||
forceMove(powered_ai.loc)
|
||||
if(istype(powered_ai,/mob/living/silicon/ai/announcer)) //Don't try to get a loc for a nullspace announcer mob, just put it into it
|
||||
forceMove(powered_ai)
|
||||
else
|
||||
forceMove(powered_ai.loc)
|
||||
|
||||
..()
|
||||
use_power(1) // Just incase we need to wake up the power system.
|
||||
@@ -443,7 +446,7 @@ var/list/ai_verbs_default = list(
|
||||
return
|
||||
if(usr != src)
|
||||
return
|
||||
/*if(..()) // <------ MOVED FROM HERE
|
||||
/*if(..()) // <------ MOVED FROM HERE
|
||||
return*/
|
||||
if (href_list["mach_close"])
|
||||
if (href_list["mach_close"] == "aialerts")
|
||||
|
||||
@@ -201,7 +201,7 @@
|
||||
medicalActive1 = null
|
||||
medicalActive2 = null
|
||||
medical_cannotfind = 0
|
||||
GLOB.nanomanager.update_uis(src)
|
||||
SSnanoui.update_uis(src)
|
||||
usr << "<span class='notice'>You reset your record-viewing software.</span>"
|
||||
|
||||
/mob/living/silicon/pai/cancel_camera()
|
||||
|
||||
@@ -90,7 +90,7 @@ var/global/list/default_pai_software = list()
|
||||
data["emotions"] = emotions
|
||||
data["current_emotion"] = card.current_emotion
|
||||
|
||||
ui = GLOB.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if (!ui)
|
||||
ui = new(user, src, ui_key, "pai_interface.tmpl", "pAI Software Interface", 450, 600)
|
||||
ui.set_initial_data(data)
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
data["prime"] = user.pai_law0
|
||||
data["supplemental"] = user.pai_laws
|
||||
|
||||
ui = GLOB.nanomanager.try_update_ui(user, user, id, ui, data, force_open)
|
||||
ui = SSnanoui.try_update_ui(user, user, id, ui, data, force_open)
|
||||
if(!ui)
|
||||
// Don't copy-paste this unless you're making a pAI software module!
|
||||
ui = new(user, user, id, "pai_directives.tmpl", "pAI Directives", 450, 600)
|
||||
@@ -102,7 +102,7 @@
|
||||
|
||||
data["channels"] = channels
|
||||
|
||||
ui = GLOB.nanomanager.try_update_ui(user, user, id, ui, data, force_open)
|
||||
ui = SSnanoui.try_update_ui(user, user, id, ui, data, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, user, id, "pai_radio.tmpl", "Radio Configuration", 300, 150)
|
||||
ui.set_initial_data(data)
|
||||
@@ -128,7 +128,7 @@
|
||||
// This is dumb, but NanoUI breaks if it has no data to send
|
||||
data["manifest"] = PDA_Manifest
|
||||
|
||||
ui = GLOB.nanomanager.try_update_ui(user, user, id, ui, data, force_open)
|
||||
ui = SSnanoui.try_update_ui(user, user, id, ui, data, force_open)
|
||||
if(!ui)
|
||||
// Don't copy-paste this unless you're making a pAI software module!
|
||||
ui = new(user, user, id, "crew_manifest.tmpl", "Crew Manifest", 450, 600)
|
||||
@@ -178,7 +178,7 @@
|
||||
|
||||
data["messages"] = messages
|
||||
|
||||
ui = GLOB.nanomanager.try_update_ui(user, user, id, ui, data, force_open)
|
||||
ui = SSnanoui.try_update_ui(user, user, id, ui, data, force_open)
|
||||
if(!ui)
|
||||
// Don't copy-paste this unless you're making a pAI software module!
|
||||
ui = new(user, user, id, "pai_messenger.tmpl", "Digital Messenger", 450, 600)
|
||||
@@ -236,7 +236,7 @@
|
||||
data["medical"] = M ? M.fields : null
|
||||
data["could_not_find"] = user.medical_cannotfind
|
||||
|
||||
ui = GLOB.nanomanager.try_update_ui(user, user, id, ui, data, force_open)
|
||||
ui = SSnanoui.try_update_ui(user, user, id, ui, data, force_open)
|
||||
if(!ui)
|
||||
// Don't copy-paste this unless you're making a pAI software module!
|
||||
ui = new(user, user, id, "pai_medrecords.tmpl", "Medical Records", 450, 600)
|
||||
@@ -290,7 +290,7 @@
|
||||
data["security"] = S ? S.fields : null
|
||||
data["could_not_find"] = user.security_cannotfind
|
||||
|
||||
ui = GLOB.nanomanager.try_update_ui(user, user, id, ui, data, force_open)
|
||||
ui = SSnanoui.try_update_ui(user, user, id, ui, data, force_open)
|
||||
if(!ui)
|
||||
// Don't copy-paste this unless you're making a pAI software module!
|
||||
ui = new(user, user, id, "pai_secrecords.tmpl", "Security Records", 450, 600)
|
||||
@@ -340,7 +340,7 @@
|
||||
data["progress_b"] = user.hackprogress % 10
|
||||
data["aborted"] = user.hack_aborted
|
||||
|
||||
ui = GLOB.nanomanager.try_update_ui(user, user, id, ui, data, force_open)
|
||||
ui = SSnanoui.try_update_ui(user, user, id, ui, data, force_open)
|
||||
if(!ui)
|
||||
// Don't copy-paste this unless you're making a pAI software module!
|
||||
ui = new(user, user, id, "pai_doorjack.tmpl", "Door Jack", 300, 150)
|
||||
@@ -431,7 +431,7 @@
|
||||
gases[++gases.len] = gas
|
||||
data["gas"] = gases
|
||||
|
||||
ui = GLOB.nanomanager.try_update_ui(user, user, id, ui, data, force_open)
|
||||
ui = SSnanoui.try_update_ui(user, user, id, ui, data, force_open)
|
||||
if(!ui)
|
||||
// Don't copy-paste this unless you're making a pAI software module!
|
||||
ui = new(user, user, id, "pai_atmosphere.tmpl", "Atmosphere Sensor", 350, 300)
|
||||
@@ -505,7 +505,7 @@
|
||||
data["frequency"] = format_frequency(user.sradio.frequency)
|
||||
data["code"] = user.sradio.code
|
||||
|
||||
ui = GLOB.nanomanager.try_update_ui(user, user, id, ui, data, force_open)
|
||||
ui = SSnanoui.try_update_ui(user, user, id, ui, data, force_open)
|
||||
if(!ui)
|
||||
// Don't copy-paste this unless you're making a pAI software module!
|
||||
ui = new(user, user, id, "pai_signaller.tmpl", "Signaller", 320, 150)
|
||||
|
||||
@@ -184,12 +184,12 @@
|
||||
dat += "<h3>Injector</h3>"
|
||||
if(patient)// && patient.health > min_health) //Not necessary, leave the buttons on, but the feedback during injection will give more information.
|
||||
for(var/re in injection_chems)
|
||||
var/datum/reagent/C = chemical_reagents_list[re]
|
||||
var/datum/reagent/C = SSchemistry.chemical_reagents[re]
|
||||
if(C)
|
||||
dat += "<A href='?src=\ref[src];inject=[C.id]'>Inject [C.name]</A><BR>"
|
||||
else
|
||||
for(var/re in injection_chems)
|
||||
var/datum/reagent/C = chemical_reagents_list[re]
|
||||
var/datum/reagent/C = SSchemistry.chemical_reagents[re]
|
||||
if(C)
|
||||
dat += "<span class='linkOff'>Inject [C.name]</span><BR>"
|
||||
|
||||
@@ -393,7 +393,7 @@
|
||||
patient.reagents.add_reagent(chem, inject_amount)
|
||||
drain(750) //-750 charge per injection
|
||||
var/units = round(patient.reagents.get_reagent_amount(chem))
|
||||
to_chat(hound, "<span class='notice'>Injecting [units] unit\s of [chemical_reagents_list[chem]] into occupant.</span>") //If they were immersed, the reagents wouldn't leave with them.
|
||||
to_chat(hound, "<span class='notice'>Injecting [units] unit\s of [SSchemistry.chemical_reagents[chem]] into occupant.</span>") //If they were immersed, the reagents wouldn't leave with them.
|
||||
|
||||
//For if the dogborg's existing patient uh, doesn't make it.
|
||||
/obj/item/device/dogborg/sleeper/proc/update_patient()
|
||||
|
||||
@@ -628,7 +628,7 @@
|
||||
else
|
||||
to_chat(user, "Unable to locate a radio.")
|
||||
|
||||
else if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda)||istype(W, /obj/item/weapon/card/robot)) // trying to unlock the interface with an ID card
|
||||
else if (W.GetID()) // trying to unlock the interface with an ID card
|
||||
if(emagged)//still allow them to open the cover
|
||||
to_chat(user, "The interface seems slightly damaged")
|
||||
if(opened)
|
||||
@@ -729,7 +729,7 @@
|
||||
var/list/L = req_access
|
||||
if(!L.len) //no requirements
|
||||
return 1
|
||||
if(!I || !(istype(I, /obj/item/weapon/card/id) || istype(I, /obj/item/device/pda))) //not ID or PDA
|
||||
if(!I) //nothing to check with..?
|
||||
return 0
|
||||
var/access_found = I.GetAccess()
|
||||
for(var/req in req_access)
|
||||
@@ -1003,7 +1003,7 @@
|
||||
if(icontype == "Custom")
|
||||
icon = CUSTOM_ITEM_SYNTH
|
||||
else // This is to fix an issue where someone with a custom borg sprite chooses a non-custom sprite and turns invisible.
|
||||
icon = 'icons/mob/robots.dmi'
|
||||
vr_sprite_check() //VOREStation Edit
|
||||
icon_state = module_sprites[icontype]
|
||||
updateicon()
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
attacktext = list("bitten")
|
||||
|
||||
say_list_type = /datum/say_list/snake
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/melee
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/passive
|
||||
|
||||
/datum/say_list/snake
|
||||
emote_hear = list("hisses")
|
||||
@@ -31,7 +31,6 @@
|
||||
name = "Noodle"
|
||||
desc = "This snake is particularly chubby and demands nothing but the finest of treats."
|
||||
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/passive
|
||||
makes_dirt = FALSE
|
||||
|
||||
var/turns_since_scan = 0
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
/datum/say_list/merc/unknown_ind
|
||||
speak = list("One day the'll fix that damn engine..","Next time, We're hidding on the tropical beach planet.","Wish I had better equipment...","I knew I should have been a line chef...","Fuckin' helmet keeps fogging up.","Hate this blocky ass ship.")
|
||||
say_got_target = list("Looks like trouble!","Contact!","We've got company!","Perimeter Breached!!")
|
||||
@@ -1,5 +1,5 @@
|
||||
/mob/Logout()
|
||||
GLOB.nanomanager.user_logout(src) // this is used to clean up (remove) this user's Nano UIs
|
||||
SSnanoui.user_logout(src) // this is used to clean up (remove) this user's Nano UIs
|
||||
player_list -= src
|
||||
disconnect_time = world.realtime //VOREStation Addition: logging when we disappear.
|
||||
update_client_z(null)
|
||||
|
||||
@@ -373,8 +373,8 @@
|
||||
var/deathtimeseconds = round((deathtime - deathtimeminutes * 600) / 10,1)
|
||||
to_chat(usr, "You have been dead for[pluralcheck] [deathtimeseconds] seconds.")
|
||||
|
||||
if ((deathtime < (5 * 600)) && (ticker && ticker.current_state > GAME_STATE_PREGAME))
|
||||
to_chat(usr, "You must wait 5 minutes to respawn!")
|
||||
if ((deathtime < (1 * 600)) && (ticker && ticker.current_state > GAME_STATE_PREGAME)) //VOREStation Edit: lower respawn timer
|
||||
to_chat(usr, "You must wait 1 minute to respawn!")
|
||||
return
|
||||
else
|
||||
to_chat(usr, "You can respawn now, enjoy your new life!")
|
||||
@@ -716,7 +716,7 @@
|
||||
|
||||
if(statpanel("Tickets"))
|
||||
GLOB.ahelp_tickets.stat_entry()
|
||||
|
||||
|
||||
|
||||
if(length(GLOB.sdql2_queries))
|
||||
if(statpanel("SDQL2"))
|
||||
|
||||
@@ -1049,19 +1049,10 @@
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
body_parts = list(BP_HEAD)
|
||||
|
||||
/*
|
||||
rosette
|
||||
name = "Rosettes"
|
||||
icon_state = "rosette"
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO)
|
||||
|
||||
rosette_color
|
||||
name = "Rosettes (Colorable)"
|
||||
icon_state = "rosette_color"
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO)
|
||||
*/
|
||||
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD)
|
||||
|
||||
heterochromia
|
||||
name = "Heterochromia"
|
||||
|
||||
@@ -182,6 +182,8 @@
|
||||
var/datum/preferences/B = O.client.prefs
|
||||
for(var/language in B.alternate_languages)
|
||||
O.add_language(language)
|
||||
O.resize(B.size_multiplier, animate = FALSE) //VOREStation Addition: add size prefs to borgs
|
||||
O.fuzzy = B.fuzzy //VOREStation Addition: add size prefs to borgs
|
||||
|
||||
callHook("borgify", list(O))
|
||||
O.Namepick()
|
||||
|
||||
Reference in New Issue
Block a user