mirror of
https://github.com/CHOMPstation/CHOMPstation.git
synced 2026-08-29 06:56:23 +01:00
Merge branch 'master' of https://github.com/Shadowfire117/CHOMPstation
This commit is contained in:
@@ -736,6 +736,7 @@
|
||||
name = "soybean"
|
||||
seed_name = "soybean"
|
||||
display_name = "soybeans"
|
||||
mutants = list("orangesapbean","purplesapbean","bluesapbean") //CHOMPEDIT: Adding sappy beanies to mutation
|
||||
chems = list("nutriment" = list(1,20), "soymilk" = list(10,20))
|
||||
kitchen_tag = "soybeans"
|
||||
|
||||
@@ -750,6 +751,55 @@
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#EBE7C0")
|
||||
set_trait(TRAIT_PLANT_ICON,"stalk")
|
||||
|
||||
// CHOMPSTATION EDIT: Making soybeans viable in this meta by giving them sappy mutations
|
||||
/datum/seed/soybean/sapbean
|
||||
name = "sapbean"
|
||||
seed_name = "sapbean"
|
||||
display_name = "sapbeans"
|
||||
chems = list()
|
||||
|
||||
/datum/seed/soybean/sapbean/orange
|
||||
name = "orangesapbean"
|
||||
mutants = list("Purplesapbean","bluesapbean","blacksapbean")
|
||||
chems = list("orangesap" = list(0,10))
|
||||
|
||||
/datum/seed/soybean/sapbean/purple
|
||||
name = "purplesapbean"
|
||||
mutants = list("Orangesapbean","bluesapbean","blacksapbean")
|
||||
chems = list("purplesap" = list(0,10))
|
||||
|
||||
/datum/seed/soybean/sapbean/blue
|
||||
name = "bluesapbean"
|
||||
mutants = list("orangesapbean","purplesapbean","blacksapbean")
|
||||
chems = list("bluesap" = list(0,10))
|
||||
|
||||
/datum/seed/soybean/sapbean/black //A bean with all the power but in so little quanitity
|
||||
name = "blacksapbean"
|
||||
chems = list("bluesap" = list(1,2),"orangesap" = list(1,2),"purplesap" = list(1,2))
|
||||
|
||||
/datum/seed/soybean/sapbean/orange/New()
|
||||
..()
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#FF8700")
|
||||
set_trait(TRAIT_PLANT_COLOUR,"#FF8700")
|
||||
/datum/seed/soybean/sapbean/purple/New()
|
||||
..()
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#FF00FF")
|
||||
set_trait(TRAIT_PLANT_COLOUR,"#FF00FF")
|
||||
/datum/seed/soybean/sapbean/blue/New()
|
||||
..()
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#0000FF")
|
||||
set_trait(TRAIT_PLANT_COLOUR,"#0000FF")
|
||||
/datum/seed/soybean/sapbean/black/New() //the only real positive is that its 1 plant to care for rather than 3
|
||||
..()
|
||||
set_trait(TRAIT_PRODUCT_ICON,"treefruit")
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#333333")
|
||||
set_trait(TRAIT_PLANT_COLOUR,"#333333")
|
||||
set_trait(TRAIT_PRODUCTION,3)
|
||||
set_trait(TRAIT_MATURATION,8)
|
||||
set_trait(TRAIT_POTENCY,10)
|
||||
set_trait(TRAIT_YIELD,2)
|
||||
|
||||
// CHOMPSTATION EDIT: END
|
||||
/datum/seed/wheat
|
||||
name = "wheat"
|
||||
seed_name = "wheat"
|
||||
@@ -1226,3 +1276,27 @@
|
||||
set_trait(TRAIT_YIELD,-1)
|
||||
set_trait(TRAIT_SPREAD,2)
|
||||
set_trait(TRAIT_POTENCY,50)
|
||||
|
||||
//CHOMPSTATION EDIT Adding a new seed type
|
||||
/datum/seed/hardlightseed/
|
||||
name = "Type NULL Hardlight Generator"
|
||||
seed_name = "Biomechanical Hardlight generator seed"
|
||||
display_name = "Biomechanical Hardlight stem"
|
||||
mutants = null
|
||||
can_self_harvest = 1
|
||||
has_mob_product = null
|
||||
|
||||
/datum/seed/hardlightseed/New()
|
||||
..()
|
||||
set_trait(TRAIT_IMMUTABLE,1) //Normal genetics wont be able to do much with the mechanical parts, its more a machine than a real plant
|
||||
set_trait(TRAIT_MATURATION,1)
|
||||
set_trait(TRAIT_PRODUCTION,1)
|
||||
set_trait(TRAIT_YIELD,1)
|
||||
set_trait(TRAIT_POTENCY,1)
|
||||
set_trait(TRAIT_PRODUCT_ICON,"alien4")
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#00FFFF")
|
||||
set_trait(TRAIT_PLANT_COLOUR,"#00FFFF")
|
||||
set_trait(TRAIT_PLANT_ICON,"alien4") //spooky pods
|
||||
set_trait(TRAIT_IDEAL_HEAT, 283)
|
||||
set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0)
|
||||
set_trait(TRAIT_WATER_CONSUMPTION, 0)
|
||||
|
||||
@@ -591,7 +591,8 @@ var/list/ai_verbs_default = list(
|
||||
"male tesharii",
|
||||
"female tesharii",
|
||||
"male skrell",
|
||||
"female skrell"
|
||||
"female skrell",
|
||||
"synx"
|
||||
)
|
||||
input = input("Please select a hologram:") as null|anything in icon_list
|
||||
if(input)
|
||||
@@ -641,6 +642,8 @@ var/list/ai_verbs_default = list(
|
||||
holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"holoskrm"))
|
||||
if("female skrell")
|
||||
holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"holoskrf"))
|
||||
if("synx")
|
||||
holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"holosynx"))
|
||||
|
||||
//Toggles the luminosity and applies it by re-entereing the camera.
|
||||
/mob/living/silicon/ai/proc/toggle_camera_light()
|
||||
|
||||
@@ -0,0 +1,276 @@
|
||||
//sculpture
|
||||
//SCP-173, nothing more need be said
|
||||
/mob/living/simple_animal/sculpture
|
||||
name = "\improper sculpture"
|
||||
desc = "It's some kind of hastily-painted human-size stone sculpture. Just looking at it makes you feel nervous."
|
||||
icon_state = "sculpture"
|
||||
icon_living = "sculpture"
|
||||
icon_dead = "sculpture"
|
||||
emote_hear = list("makes a faint scraping sound")
|
||||
emote_see = list("twitches slightly", "shivers")
|
||||
response_help = "touches the"
|
||||
response_disarm = "pushes the"
|
||||
response_harm = "hits the"
|
||||
see_in_dark = 8 //Needs to see in darkness to snap in darkness
|
||||
pass_flags = PASSTABLE
|
||||
var/response_snap = "snapped the neck of" //Past tense because it "happened before you could see it"
|
||||
var/response_snap_target = "In the blink of an eye, something grabs you and snaps your neck!"
|
||||
var/snap_sound = list('sound/scp/firstpersonsnap.ogg','sound/scp/firstpersonsnap2.ogg','sound/scp/firstpersonsnap3.ogg')
|
||||
var/scare_sound = list('sound/scp/scare1.ogg','sound/scp/scare2.ogg','sound/scp/scare3.ogg','sound/scp/scare4.ogg') //Boo
|
||||
var/hibernate = 0 //Disables SCP until toggled back to 0
|
||||
var/scare_played = 0 //Did we rape everyone's ears yet ?
|
||||
var/obj/machinery/atmospherics/unary/vent_pump/entry_vent //Graciously stolen from spider code
|
||||
|
||||
/mob/living/simple_animal/sculpture/Life()
|
||||
|
||||
//If we are hibernating, just don't do anything
|
||||
if(hibernate)
|
||||
return
|
||||
|
||||
if(!check_los())
|
||||
return
|
||||
|
||||
//See if we're able to strangle anyone
|
||||
for(var/mob/living/carbon/M in get_turf(src))
|
||||
if(M.stat == CONSCIOUS && check_los())
|
||||
snap_neck(M)
|
||||
break
|
||||
|
||||
//Find out what mobs we can see for targetting purposes
|
||||
var/list/conscious = list()
|
||||
for(var/mob/living/carbon/H in view(7, src))
|
||||
if(H.stat == CONSCIOUS) //He's up and running
|
||||
conscious.Add(H)
|
||||
|
||||
//Pick the nearest valid conscious target
|
||||
var/mob/living/carbon/target
|
||||
for(var/mob/living/carbon/H in conscious)
|
||||
if(!target || get_dist(src, H) < get_dist(src, target))
|
||||
target = H
|
||||
|
||||
if(target)
|
||||
handle_target(target)
|
||||
else
|
||||
handle_idle()
|
||||
|
||||
|
||||
//Check if any mob can see SPC-173
|
||||
/mob/living/simple_animal/sculpture/proc/check_los()
|
||||
|
||||
var/observed = 0
|
||||
|
||||
//Humans can observe SCP-173. If a single human observes him, he's observed for everyone
|
||||
//Note that humans have a 180 degrees field of vision for the purposes of this proc
|
||||
for(var/mob/living/carbon/H in viewers(src, null))
|
||||
if(H.stat)
|
||||
continue
|
||||
var/x_diff = H.x - src.x
|
||||
var/y_diff = H.y - src.y
|
||||
if(y_diff != 0) //If we are not on the same vertical plane (up/down), mob is either above or below src
|
||||
if(y_diff < 0 && H.dir == NORTH) //Mob is below src and looking up
|
||||
observed = 1
|
||||
break
|
||||
else if(y_diff > 0 && H.dir == SOUTH) //Mob is above src and looking down
|
||||
observed = 1
|
||||
break
|
||||
if(x_diff != 0) //If we are not on the same horizontal plane (left/right), mob is either left or right of src
|
||||
if(x_diff < 0 && H.dir == EAST) //Mob is left of src and looking right
|
||||
observed = 1
|
||||
break
|
||||
else if(x_diff > 0 && H.dir == WEST) //Mob is right of src and looking left
|
||||
observed = 1
|
||||
break
|
||||
|
||||
if(observed) //Is someone looking at us, given that they can see us ?
|
||||
return 0 //Try again when we get a chance
|
||||
return 1 //Success, let's move
|
||||
|
||||
/mob/living/simple_animal/sculpture/proc/handle_target(var/mob/living/carbon/target)
|
||||
|
||||
if(!target) //Sanity
|
||||
return
|
||||
|
||||
if(!check_los())
|
||||
return
|
||||
|
||||
var/turf/target_turf
|
||||
|
||||
//Send the warning that SPC is homing in
|
||||
target_turf = get_turf(target)
|
||||
if(!scare_played) //Let's minimize the spam
|
||||
playsound(get_turf(src), pick(scare_sound), 50, 1)
|
||||
scare_played = 1
|
||||
spawn(50)
|
||||
scare_played = 0
|
||||
|
||||
//Rampage along a path to get to them, in the blink of an eye
|
||||
var/turf/next_turf = get_step_towards(src, target)
|
||||
var/num_turfs = get_dist(src,target)
|
||||
spawn()
|
||||
while(get_turf(src) != target_turf && num_turfs > 0)
|
||||
if(!check_los()) //Something is looking at us now
|
||||
break
|
||||
if(!next_turf.CanPass(src, next_turf)) //We can't pass through our planned path
|
||||
break
|
||||
for(var/obj/structure/table/O in next_turf)
|
||||
O.ex_act(1)
|
||||
sleep(5)
|
||||
for(var/obj/structure/closet/C in next_turf)
|
||||
C.ex_act(1)
|
||||
sleep(5)
|
||||
for(var/obj/structure/grille/G in next_turf)
|
||||
G.ex_act(1)
|
||||
sleep(5)
|
||||
for(var/obj/machinery/door/airlock/A in next_turf)
|
||||
if(A.welded || A.locked) //Snowflakey code to take in account bolts and welding
|
||||
break
|
||||
A.open()
|
||||
sleep(5)
|
||||
for(var/obj/machinery/door/D in next_turf)
|
||||
D.open()
|
||||
sleep(5)
|
||||
if(!next_turf.CanPass(src, next_turf)) //Once we cleared everything we could, check one last time if we can pass
|
||||
break
|
||||
forceMove(next_turf)
|
||||
dir = get_dir(src, target)
|
||||
next_turf = get_step(src, get_dir(next_turf,target))
|
||||
num_turfs--
|
||||
|
||||
/mob/living/simple_animal/sculpture/proc/handle_idle()
|
||||
|
||||
if(!check_los())
|
||||
return
|
||||
|
||||
//If we're not strangling anyone, take a stroll
|
||||
if(prob(25)) //1 in 4 chance of checking out something new
|
||||
var/list/turfs = new/list()
|
||||
for(var/turf/T in view(7, src))
|
||||
if(!istype(T, /turf/simulated/floor))
|
||||
continue
|
||||
turfs += T
|
||||
var/turf/target_turf = safepick(turfs)
|
||||
if(!target_turf)
|
||||
return
|
||||
//Move to our new resting point with celerity
|
||||
var/turf/next_turf = get_step_towards(src, target_turf)
|
||||
var/num_turfs = get_dist(src, target_turf)
|
||||
spawn()
|
||||
while(get_turf(src) != target_turf && num_turfs > 0)
|
||||
if(!check_los()) //Something is looking at us now
|
||||
break
|
||||
if(!next_turf.CanPass(src, next_turf)) //We can't pass through our planned path
|
||||
break
|
||||
for(var/obj/structure/table/O in next_turf)
|
||||
O.ex_act(1)
|
||||
sleep(5)
|
||||
for(var/obj/structure/closet/C in next_turf)
|
||||
C.ex_act(1)
|
||||
sleep(5)
|
||||
for(var/obj/structure/grille/G in next_turf)
|
||||
G.ex_act(1)
|
||||
sleep(5)
|
||||
for(var/obj/machinery/door/airlock/A in next_turf)
|
||||
if(A.welded || A.locked) //Snowflakey code to take in account bolts and welding
|
||||
break
|
||||
A.open()
|
||||
sleep(5)
|
||||
for(var/obj/machinery/door/D in next_turf)
|
||||
D.open()
|
||||
sleep(5)
|
||||
if(!next_turf.CanPass(src, next_turf)) //Once we cleared everything we could, check one last time if we can pass
|
||||
break
|
||||
forceMove(next_turf)
|
||||
dir = get_dir(src, target_turf)
|
||||
next_turf = get_step(src, get_dir(next_turf,target_turf))
|
||||
num_turfs--
|
||||
//Coding note : This is known to allow SCP to end up on tiles that contain obstructing structures (doors, machinery, etc)
|
||||
//Although he CAN'T pass through them during normal movement. Will look into a fix soon
|
||||
|
||||
//Do we have a vent ? Good, let's take a look
|
||||
for(entry_vent in view(1, src))
|
||||
if(prob(90)) //10 % chance to consider a vent, to try and avoid constant vent switching
|
||||
return
|
||||
visible_message("<span class='danger'>\The [src] starts trying to slide itself into the vent!</span>")
|
||||
sleep(50) //Let's stop SCP-173 for five seconds to do his parking job
|
||||
..()
|
||||
if(entry_vent.network && entry_vent.network.normal_members.len)
|
||||
var/list/vents = list()
|
||||
for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in entry_vent.network.normal_members)
|
||||
vents.Add(temp_vent)
|
||||
if(!vents.len)
|
||||
entry_vent = null
|
||||
return
|
||||
if(!check_los()) //Someone started looking at us
|
||||
return
|
||||
var/obj/machinery/atmospherics/unary/vent_pump/exit_vent = pick(vents)
|
||||
spawn()
|
||||
visible_message("<span class='danger'>\The [src] suddenly disappears into the vent!</span>")
|
||||
loc = exit_vent
|
||||
var/travel_time = round(get_dist(loc, exit_vent.loc)/2)
|
||||
spawn(travel_time)
|
||||
if(!exit_vent || exit_vent.welded)
|
||||
forceMove(get_turf(entry_vent))
|
||||
entry_vent = null
|
||||
visible_message("<span class='danger'>\The [src] suddenly appears from the vent!</span>")
|
||||
return
|
||||
|
||||
forceMove(get_turf(exit_vent))
|
||||
entry_vent = null
|
||||
visible_message("<span class='danger'>\The [src] suddenly appears from the vent!</span>")
|
||||
else
|
||||
entry_vent = null
|
||||
|
||||
//This performs an immediate neck snap check, meant to avoid people cheesing SCP-173 by just running faster than Life() refresh
|
||||
/mob/living/simple_animal/sculpture/proc/check_snap_neck()
|
||||
|
||||
//See if we're able to strangle anyone
|
||||
for(var/mob/living/carbon/M in get_turf(src))
|
||||
if(M.stat == CONSCIOUS && check_los())
|
||||
snap_neck(M)
|
||||
break
|
||||
|
||||
/mob/living/simple_animal/sculpture/forceMove(atom/destination, var/no_tp = 0)
|
||||
|
||||
..()
|
||||
check_snap_neck()
|
||||
|
||||
/mob/living/simple_animal/sculpture/proc/snap_neck(var/mob/living/target)
|
||||
|
||||
if(!check_los())
|
||||
return
|
||||
|
||||
if(target)
|
||||
//To prevent movement cheese, SCP snaps necks the second it ends up on the same turf as someone
|
||||
//Or in other terms, if SCP decides it had a clean shot for a neck snap at the moment this proc fired, you're good as dead
|
||||
target.apply_damage(rand(120, 150), BRUTE, "head")
|
||||
target.apply_damage(100, OXY)
|
||||
playsound(target.loc, pick(snap_sound), 50, 1)
|
||||
|
||||
//Warn everyone
|
||||
visible_message("<span class='danger'>[src] [response_snap] [target]!</span>")
|
||||
target << "<span class='alert'><b>[response_snap_target]</b> Your vision fades away...</span>"
|
||||
|
||||
target.death() //Immediately trigger death to avoid doublesnap during lag
|
||||
|
||||
//Logging stuff
|
||||
target.attack_log += text("\[[time_stamp()]\] <font color='red'>Has had his neck snapped by [src]!</font>")
|
||||
log_admin("[target] ([target.ckey]) has had his neck snapped by an active [src].")
|
||||
message_admins("ALERT: <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[target.x];Y=[target.y];Z=[target.z]'>[target.real_name]</a> has had his neck snapped by an active [src].")
|
||||
|
||||
/mob/living/simple_animal/sculpture/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/sculpture/Topic(href, href_list)
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/sculpture/Bump(atom/movable/AM as mob)
|
||||
if(!check_los())
|
||||
snap_neck(AM)
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/sculpture/Bumped(atom/movable/AM as mob, yes)
|
||||
if(!check_los())
|
||||
snap_neck(AM)
|
||||
|
||||
//You cannot destroy SCP-173, fool!
|
||||
/mob/living/simple_animal/sculpture/ex_act(var/severity)
|
||||
@@ -1,131 +1,363 @@
|
||||
/mob/living/simple_animal/retaliate/synx
|
||||
name = "Synx"
|
||||
desc = "A cold blooded, genderless, parasitic eel from the more distant and stranger areas of the cosmos. Plain, white, perpetually grinning and possessing a hunger as enthusiastic and endless as humanity's sense of exploration."
|
||||
tt_desc = "synxus pergulus"
|
||||
|
||||
//Synx species belongs to ChimeraSynx , Sprites by: SpitefulCrow
|
||||
icon = 'icons/mob/synx.dmi'//giving synxes their own DMI file!
|
||||
icon_state = "synx"
|
||||
icon_living = "synx"
|
||||
|
||||
var/transformed_state = "synx_transformed"
|
||||
|
||||
var/transformed = FALSE
|
||||
|
||||
faction = "Synx"
|
||||
intelligence_level = SA_ANIMAL
|
||||
|
||||
maxHealth = 150
|
||||
health = 120
|
||||
//turns_per_move = 2 //to be balanced, default for now
|
||||
//speed = -2 //to be balanced, default for now
|
||||
see_in_dark = 6
|
||||
stop_when_pulled = 0
|
||||
armor = list( // will be determined
|
||||
"melee" = 20,
|
||||
"bullet" = 0,
|
||||
"laser" = 0,
|
||||
"energy" = 0,
|
||||
"bomb" = 10,
|
||||
"bio" = 100,
|
||||
"rad" = 100)
|
||||
//has_hands = TRUE
|
||||
|
||||
response_help = "pets"
|
||||
response_disarm = "gently pushes aside"
|
||||
|
||||
|
||||
pass_flags = PASSTABLE
|
||||
|
||||
melee_damage_lower = 20
|
||||
melee_damage_upper = 30
|
||||
attack_armor_pen = 50 // How much armor pen this attack has.
|
||||
attack_sharp = 1
|
||||
attack_edge = 1
|
||||
|
||||
//will be affected by atmos soon
|
||||
min_oxy = 0
|
||||
max_oxy = 0
|
||||
min_tox = 0
|
||||
max_tox = 0
|
||||
min_co2 = 0
|
||||
max_co2 = 0
|
||||
min_n2 = 0
|
||||
max_n2 = 0
|
||||
minbodytemp = 0
|
||||
//to be added
|
||||
/*speak_chance = 1
|
||||
speak = list()
|
||||
speak_emote = list()
|
||||
emote_hear = list()
|
||||
emote_see = list()*/
|
||||
|
||||
/mob/living/simple_animal/retaliate/synx/New()
|
||||
..()
|
||||
verbs |= /mob/living/proc/ventcrawl
|
||||
verbs |= /mob/living/simple_animal/proc/contort
|
||||
verbs += /mob/living/simple_animal/retaliate/synx/proc/disguise
|
||||
|
||||
mob/living/simple_animal/synx/PunchTarget()
|
||||
if(!Adjacent(target_mob))
|
||||
return
|
||||
custom_emote(1, pick( list("slashes at [target_mob]", "bites [target_mob]") ) )
|
||||
|
||||
var/damage = rand(melee_damage_lower, melee_damage_upper)
|
||||
|
||||
if(ishuman(target_mob))
|
||||
var/mob/living/carbon/human/H = target_mob
|
||||
var/dam_zone = pick(BP_TORSO, BP_L_HAND, BP_R_HAND, BP_L_LEG, BP_R_LEG)
|
||||
var/obj/item/organ/external/affecting = H.get_organ(ran_zone(dam_zone))
|
||||
H.apply_damage(damage, BRUTE, affecting, H.run_armor_check(affecting, "melee"), H.get_armor_soak(affecting, "melee"), sharp=1, edge=1)
|
||||
return H
|
||||
else if(isliving(target_mob))
|
||||
var/mob/living/L = target_mob
|
||||
L.adjustBruteLoss(damage)
|
||||
return L
|
||||
else
|
||||
..()
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////////////// POWERS!!!! /////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/mob/living/simple_animal/proc/contort()
|
||||
set name = "contort"
|
||||
set desc = "Allows to hide beneath tables or certain items. Toggled on or off."
|
||||
set category = "Abilities"
|
||||
|
||||
if(stat == DEAD || paralysis || weakened || stunned || restrained())
|
||||
return
|
||||
|
||||
if(status_flags & HIDING)
|
||||
status_flags &= ~HIDING
|
||||
reset_plane_and_layer()
|
||||
to_chat(src,"<span class='notice'>You have stopped hiding.</span>")
|
||||
//speed = -3, to be balanced
|
||||
else
|
||||
status_flags |= HIDING
|
||||
layer = HIDING_LAYER //Just above cables with their 2.44
|
||||
plane = OBJ_PLANE
|
||||
to_chat(src,"<span class='notice'>You are now hiding.</span>")
|
||||
speed = 2
|
||||
|
||||
/mob/living/simple_animal/retaliate/synx/proc/disguise()
|
||||
set name = "Toggle Form"
|
||||
set desc = "Switch between amorphous and humanoid forms."
|
||||
set category = "Abilities"
|
||||
|
||||
if(stat == DEAD || paralysis || weakened || stunned || restrained())
|
||||
return
|
||||
|
||||
// If transform isn't true
|
||||
if(!transformed)
|
||||
to_chat(src,"<span class='warning'>you changed back into your disguise.</span>")
|
||||
icon_living = transformed_state //Switch state to transformed state
|
||||
else // If transformed is true.
|
||||
to_chat(src,"<span class='warning'>now they see your true form.</span>")
|
||||
icon_living = initial(icon_living) //Switch state to what it was originally defined.
|
||||
|
||||
|
||||
transformed = !transformed
|
||||
update_icons()
|
||||
/mob/living/simple_animal/retaliate/synx
|
||||
name = "Synx"
|
||||
desc = "A cold blooded, genderless, parasitic eel from the more distant and stranger areas of the cosmos. Plain, white, perpetually grinning and possessing a hunger as enthusiastic and endless as humanity's sense of exploration."
|
||||
tt_desc = "synxus pergulus"
|
||||
|
||||
//Synx species belongs to ChimeraSynx , Base sprites by: SpitefulCrow
|
||||
icon = 'icons/mob/synx.dmi'//giving synxes their own DMI file!
|
||||
icon_state = "synx_living"
|
||||
icon_living = "synx_living"
|
||||
icon_dead = "synx_dead"
|
||||
|
||||
//VAR$ SETUP
|
||||
var/poison_per_bite = 5
|
||||
var/poison_chance = 99.666
|
||||
var/poison_type = "synxchem"//inaprovalin, but evil
|
||||
var/transformed_state = "synx_transformed"
|
||||
var/transformed = FALSE
|
||||
var/memorysize = 50 //Var for how many messages synxes remember if they know speechcode
|
||||
|
||||
faction = "Synx"
|
||||
intelligence_level = SA_ANIMAL
|
||||
|
||||
maxHealth = 150
|
||||
health = 150
|
||||
turns_per_move = 5 //Should just affect how often it wanders, subject to change.
|
||||
speed = -2 //Re enabled custom speed
|
||||
see_in_dark = 6
|
||||
stop_when_pulled = 0
|
||||
armor = list( // will be determined
|
||||
"melee" = 20,
|
||||
"bullet" = 0,
|
||||
"laser" = 0,
|
||||
"energy" = 0,
|
||||
"bomb" = 10,
|
||||
"bio" = 100,
|
||||
"rad" = 100)
|
||||
has_hands = 1
|
||||
|
||||
response_help = "pets"
|
||||
response_disarm = "gently pushes aside"
|
||||
|
||||
|
||||
pass_flags = PASSTABLE
|
||||
|
||||
melee_damage_lower = 5 //Massive damage reduction, will be balanced with toxin injection
|
||||
melee_damage_upper = 5
|
||||
attack_armor_pen = 40 // How much armor pen this attack has.
|
||||
attack_sharp = 1
|
||||
attack_edge = 1
|
||||
|
||||
//Vore stuff
|
||||
vore_active = 1
|
||||
vore_capacity = 2
|
||||
vore_pounce_chance = 50
|
||||
vore_bump_chance = 10
|
||||
vore_bump_emote = "Slowly wraps its tongue around, and slides its drooling maw over the head of"
|
||||
vore_standing_too = 1 //I believe this lets it vore standing people, rather than only resting.
|
||||
vore_ignores_undigestable = 0 //Synx don't care if you digest or not, you squirm fine either way.
|
||||
vore_default_mode = DM_HOLD
|
||||
vore_digest_chance = 45 // Chance to switch to digest mode if resisted
|
||||
vore_absorb_chance = 0
|
||||
vore_escape_chance = 10
|
||||
vore_icons = 0 //no vore icons
|
||||
swallowTime = 6 SECONDS //Enter the eel you nerd
|
||||
|
||||
/mob/living/simple_animal/retaliate/synx/init_vore()
|
||||
..()
|
||||
var/obj/belly/B = vore_selected
|
||||
//B.human_prey_swallow_time = 6 SECONDS //doesnt work
|
||||
//B.nonhuman_prey_swallow_time = 3 SECONDS //doesnt work
|
||||
B.vore_verb = "swallow"
|
||||
B.name = "stomach"
|
||||
B.desc = "You're pulled into the snug stomach of the synx. The walls knead weakly around you, coating you in thick, viscous fluids that cling to your body, that soon starts to tingle and burn..."
|
||||
B.digest_burn = 1
|
||||
B.digest_brute = 0
|
||||
B.emote_lists[DM_HOLD] = list(
|
||||
"The walls churn around you, soaking you in thick, smelling fluid as you're kneaded and rolled about in the surprisingly roomy, but still snug, space.",
|
||||
"The unusually cool stomach rolls around you slowly and lazily, trying to almost knead you to sleep gently as the synx pulses around you.",
|
||||
"The thick, viscous fluids cling to your body soaking in deep, giving you a full bath with the kneading of the walls helping to make sure you'll be smelling like synx stomach for days."
|
||||
)
|
||||
B.emote_lists[DM_DIGEST] = list(
|
||||
"The stomach kneads roughly around you, squishing and molding to your shape, with the thick fluids clinging to your body and tingling, making it hard to breathe.",
|
||||
"Firm churns of the stomach roll and knead you around, your body tingling as fur sizzles all around you, your body getting nice and tenderized for the stomach.",
|
||||
"Your body tingles and the air smells strongly of acid, as the stomach churns around you firmly and slowly, eager to break you down.",
|
||||
"You're jostled in the stomach as the synx lets out what can only described as an alien belch, the space around you getting even more snug as the thick acids rise further up your body."
|
||||
)
|
||||
B.digest_messages_prey = list(
|
||||
"Your eyes grow heavy as the air grows thin in the stomach, the burning of the acids slowly putting you into a final slumber, adding you to the synx's hips and tail.",
|
||||
"Slowly, the stinging and burning of the acids, and the constant churning is just too much, and with a few final clenches, your body is broken down into fuel for the synx.",
|
||||
"The acids and fluids rise up above your head, quickly putting an end to your squirming and conciousness.. the stomach eager to break you down completely.",
|
||||
"The synx lets out an audible belch, the last of your air going with it, and with a few audible crunches from the outside, the stomach claims you as food for the parasite."
|
||||
)
|
||||
|
||||
//Shouldn't be affected by lack of atmos, it's a space eel.
|
||||
min_oxy = 0
|
||||
max_oxy = 0 //Maybe add a max
|
||||
min_tox = 0
|
||||
max_tox = 0
|
||||
min_co2 = 0
|
||||
max_co2 = 0 //Maybe add a max
|
||||
min_n2 = 0
|
||||
max_n2 = 0 //Maybe add a max
|
||||
minbodytemp = 0
|
||||
// TODO: Set a max temperature of about 20-30 above room temperatures. Synx don't like the heat.
|
||||
|
||||
|
||||
// to be added
|
||||
/* speak_chance = 2
|
||||
speak = list()
|
||||
speak_emote = list()
|
||||
emote_hear = list()
|
||||
emote_see = list()
|
||||
*/
|
||||
|
||||
/mob/living/simple_animal/retaliate/synx/New()
|
||||
..()
|
||||
verbs |= /mob/living/proc/ventcrawl
|
||||
verbs |= /mob/living/simple_animal/proc/contort
|
||||
verbs += /mob/living/simple_animal/retaliate/synx/proc/disguise
|
||||
|
||||
mob/living/simple_animal/synx/PunchTarget()
|
||||
if(!Adjacent(target_mob))
|
||||
return
|
||||
custom_emote(1, pick( list("slashes at [target_mob]", "bites [target_mob]") ) )
|
||||
|
||||
var/damage = rand(melee_damage_lower, melee_damage_upper)
|
||||
|
||||
if(ishuman(target_mob))
|
||||
var/mob/living/carbon/human/H = target_mob
|
||||
var/dam_zone = pick(BP_TORSO, BP_L_HAND, BP_R_HAND, BP_L_LEG, BP_R_LEG)
|
||||
var/obj/item/organ/external/affecting = H.get_organ(ran_zone(dam_zone))
|
||||
H.apply_damage(damage, BRUTE, affecting, H.run_armor_check(affecting, "melee"), H.get_armor_soak(affecting, "melee"), sharp=1, edge=1)
|
||||
return H
|
||||
else if(isliving(target_mob))
|
||||
var/mob/living/L = target_mob
|
||||
L.adjustBruteLoss(damage)
|
||||
return L
|
||||
else
|
||||
..()
|
||||
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////// SPECIAL ITEMS/REAGENTS !!!! ////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/seed/hardlightseed/typesx //Respawn mechanism for the synx
|
||||
name = "Type-SX Hardlight Generator"
|
||||
seed_name = "Biomechanical Hardlight generator seed SX"
|
||||
display_name = "Biomechanical Hardlight stem SX"//PLant that is part mechanical part biological
|
||||
has_mob_product = /mob/living/simple_animal/retaliate/synx/pet/holo/
|
||||
|
||||
/datum/reagent/inaprovaline/synxchem
|
||||
name = "Alien nerveinhibitor"
|
||||
id = "synxchem"
|
||||
metabolism = REM * 0.1 //Slow metabolization to try and mimic permanent nerve damage without actually being too cruel to people
|
||||
color = "#FFFFFF"
|
||||
overdose = REAGENTS_OVERDOSE * 4 //But takes a lot to OD
|
||||
|
||||
/datum/reagent/inaprovaline/synxchem/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
||||
if(alien != IS_DIONA)
|
||||
if(prob(5))
|
||||
M.custom_pain("You feel no pain despite the clear signs of damage to your body!",60)
|
||||
if(prob(2))
|
||||
M.custom_pain("You suddenly lose control over your body!",60)
|
||||
M.AdjustParalysis(1)
|
||||
M.add_chemical_effect(CE_STABLE, 15)
|
||||
M.add_chemical_effect(CE_PAINKILLER, 50)
|
||||
M.adjustBruteLoss(-0.2)//healing brute
|
||||
M.adjustToxLoss(0.1) //Dealing half of it as tox
|
||||
M.adjustHalLoss(1) //dealing 5 times the amount of brute healed as halo, but we cant feel pain yet
|
||||
// ^ I have no idea what this might cause, my ideal plan is that once the pain killer wears off you suddenly collapse;
|
||||
//Since Halloss is not "real" damage this should not cause death
|
||||
|
||||
/datum/reagent/inaprovaline/synxchem/overdose(var/mob/living/carbon/M, var/alien, var/removed)
|
||||
..()
|
||||
if(alien != IS_DIONA)
|
||||
M.adjustHalLoss(-3)//im too nice
|
||||
M.adjustToxLoss(0.4)
|
||||
M.make_dizzy(10)
|
||||
if(prob(5))
|
||||
M.AdjustStunned(1)
|
||||
if(prob(2))
|
||||
M.AdjustParalysis(1)
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////// PASSIVE POWERS!!!! /////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////////
|
||||
/mob/living/simple_animal/retaliate/synx/DoPunch(var/atom/A)
|
||||
. = ..()
|
||||
if(.) // If we succeeded in hitting.
|
||||
if(isliving(A))
|
||||
var/mob/living/L = A
|
||||
if(L.reagents)
|
||||
var/target_zone = pick(BP_TORSO,BP_TORSO,BP_TORSO,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_HEAD)
|
||||
if(L.can_inject(src, null, target_zone))
|
||||
L.reagents.add_reagent(poison_type, poison_per_bite)
|
||||
if(prob(poison_chance))
|
||||
to_chat(L, "<span class='warning'>You feel a strange substance on you.</span>")
|
||||
L.reagents.add_reagent(poison_type, poison_per_bite)
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////////////// POWERS!!!! /////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/mob/living/simple_animal/proc/contort()
|
||||
set name = "contort"
|
||||
set desc = "Allows to hide beneath tables or certain items. Toggled on or off."
|
||||
set category = "Abilities"
|
||||
|
||||
if(stat == DEAD || paralysis || weakened || stunned || restrained())
|
||||
return
|
||||
|
||||
if(status_flags & HIDING)
|
||||
status_flags &= ~HIDING
|
||||
reset_plane_and_layer()
|
||||
to_chat(src,"<span class='notice'>You have stopped hiding.</span>")
|
||||
speed = -3
|
||||
else
|
||||
status_flags |= HIDING
|
||||
layer = HIDING_LAYER //Just above cables with their 2.44
|
||||
plane = OBJ_PLANE
|
||||
to_chat(src,"<span class='notice'>You are now hiding.</span>")
|
||||
speed = 2
|
||||
|
||||
/mob/living/simple_animal/retaliate/synx/proc/disguise()
|
||||
set name = "Toggle Form"
|
||||
set desc = "Switch between amorphous and humanoid forms."
|
||||
set category = "Abilities"
|
||||
|
||||
if(stat == DEAD || paralysis || weakened || stunned || restrained())
|
||||
return
|
||||
|
||||
// If transform isn't true
|
||||
if(!transformed)
|
||||
to_chat(src,"<span class='warning'>you changed back into your disguise.</span>")
|
||||
icon_living = transformed_state //Switch state to transformed state
|
||||
else // If transformed is true.
|
||||
to_chat(src,"<span class='warning'>now they see your true form.</span>")
|
||||
icon_living = initial(icon_living) //Switch state to what it was originally defined.
|
||||
|
||||
|
||||
transformed = !transformed
|
||||
update_icons()
|
||||
|
||||
|
||||
////////////////////////////////////////
|
||||
////////////////PET VERSION/////////////
|
||||
////////////////////////////////////////
|
||||
/mob/living/simple_animal/retaliate/synx/pet
|
||||
|
||||
|
||||
faction = "Cargonia" //Should not share a faction with those pesky non station synxes.//This is so newspaper has a failchance
|
||||
name = "Bob"
|
||||
desc = "A very regular pet."
|
||||
tt_desc = "synxus pergulus"
|
||||
glow_range = 4
|
||||
glow_toggle = 1
|
||||
player_msg = "You aren't supposed to be in this. Wrong mob."
|
||||
/mob/living/simple_animal/retaliate/synx/pet/init_vore()
|
||||
..()
|
||||
var/obj/belly/B = vore_selected
|
||||
B.vore_verb = "swallow"
|
||||
B.digest_burn = 1
|
||||
B.digest_brute = 0
|
||||
|
||||
/mob/living/simple_animal/retaliate/synx/pet
|
||||
speak_chance = 1.0666
|
||||
speak = list()
|
||||
|
||||
//PET speechcode, simplistic but more than enough for the PET
|
||||
/mob/living/simple_animal/retaliate/synx/pet/hear_say(message)
|
||||
. = ..()
|
||||
if(!message) return
|
||||
if(resting)
|
||||
resting = !resting
|
||||
if(message=="Up up down down left right left right b a select start")//shhh no spoilers yet
|
||||
icon_state = "synx_pet_rainbow"
|
||||
icon_living = "synx_pet_rainbow"
|
||||
playsound(src.loc, 'sound/items/bikehorn.ogg', 50, 1)
|
||||
return
|
||||
if(message=="Shock on"||"shock on")//Voice activated collar//new
|
||||
anchored=1 //Shocked nerd
|
||||
return//dont want the synx to start shocking itself
|
||||
if(message=="shock off"||"Shock off")//new
|
||||
anchored=0
|
||||
return
|
||||
if(message)
|
||||
if(speak.len>=memorysize)
|
||||
speak -= (pick(speak))//making the list more dynamic
|
||||
speak += message
|
||||
return
|
||||
|
||||
|
||||
//Hardcoded pets
|
||||
/mob/living/simple_animal/retaliate/synx/pet/holo
|
||||
//var/HOLO_LIVING = "synx_hardlight_living"
|
||||
//var/HOLO_DEAD = "synx_hardlight_shards"
|
||||
name = "Hardlight synx"
|
||||
desc = "A cold blooded, genderless, space eel.. or a hologram of one. Guess the current synx are undergoing re-training? Either way this one is probably infinitely more friendly.. and less deadly."
|
||||
icon_state = "synx_hardlight_living"
|
||||
icon_living = "synx_hardlight_living"
|
||||
icon_dead = "synx_hardlight_dead"
|
||||
icon_gib = null
|
||||
alpha = 127
|
||||
faction = "Station"//Can be safely bapped with newspaper.
|
||||
melee_damage_lower = 0 //Holos do no damage
|
||||
melee_damage_upper = 0
|
||||
environment_smash = 0
|
||||
destroy_surroundings = 0
|
||||
//Vore Section
|
||||
vore_capacity = 2
|
||||
vore_digest_chance = 0 //Holos cannot digest
|
||||
vore_pounce_chance = 90 //Shouldn't fight
|
||||
vore_bump_chance = 1 //lowered bump chance
|
||||
vore_escape_chance = 30 //Much higher escape chance.. it's a hologram.
|
||||
swallowTime = 10 SECONDS //Much more time to run
|
||||
|
||||
/mob/living/simple_animal/retaliate/synx/pet/holo/New()
|
||||
set_light(2, 2, "#00FFFF") //hologram lighting
|
||||
|
||||
|
||||
/mob/living/simple_animal/retaliate/synx/pet/greed
|
||||
//var/GREED_LIVING = "synx_greed_living"
|
||||
//var/GREED_DEAD = "synx_greed_dead"
|
||||
name = "Greed"
|
||||
desc = "A cold blooded, genderless, parasitic eel from the more distant and stranger areas of the cosmos. Plain, white, perpetually grinning and possessing a hunger as enthusiastic and endless as humanity's sense of exploration.. This one has the name Greed burnt into its back, the burnt in name seems to be luminescent making it harder for it to blend into the dark."
|
||||
//icon= //icon= would just set what DMI we are using, we already have our special one set.
|
||||
icon_state = "synx_greed_living"
|
||||
icon_living = "synx_greed_living"
|
||||
icon_dead = "synx_greed_dead"
|
||||
speak = list("Who is there?")//preset unique words Greed remembers, to be defined more
|
||||
player_msg = "You Hunger."
|
||||
health = 100//Slightly lower health due to being damaged permanently.
|
||||
speak_chance = 5
|
||||
//Vore Section
|
||||
vore_capacity = 4 //What a fat noodle.
|
||||
vore_digest_chance = 1 //Multivore but lower digest chance
|
||||
vore_pounce_chance = 90 //Fighting is effort, engulf them whole.
|
||||
vore_bump_chance = 2 //lowered bump chance
|
||||
vore_escape_chance = 5 //Multivore allows for people to shove eachother out so lower normal escape chance.
|
||||
|
||||
/mob/living/simple_animal/retaliate/synx/pet/diablo
|
||||
//var/diablo_LIVING = "synx_diablo_living"
|
||||
//var/diablo_DEAD = "synx_diablo_dead"
|
||||
name = "diablo"
|
||||
desc = "A cold blooded, genderless, parasitic eel from the more distant and stranger areas of the cosmos. Plain, white, perpetually grinning and possessing a hunger as enthusiastic and endless as humanity's sense of exploration.. This one has a small shock collar on it that reads 'diablo'."
|
||||
icon_state = "synx_diablo_living"
|
||||
icon_living = "synx_diablo_living"
|
||||
icon_dead = "synx_diablo_dead"
|
||||
speak = list( )
|
||||
//Vore Section
|
||||
vore_capacity = 2
|
||||
|
||||
//SPAWNING
|
||||
/obj/random/mob/synx
|
||||
name = "This is synxes"
|
||||
|
||||
/obj/random/mob/synx/item_to_spawn()
|
||||
return pick(prob(50);/mob/living/simple_animal/retaliate/synx/pet/greed,
|
||||
prob(50);/mob/living/simple_animal/retaliate/synx/pet/diablo,
|
||||
prob(1);/mob/living/simple_animal/retaliate/synx/pet/holo,)
|
||||
|
||||
@@ -0,0 +1,155 @@
|
||||
/mob/living/simple_animal/hostile/chungus
|
||||
name = "big chungus"
|
||||
desc = "There's a chungus amongus."
|
||||
tt_desc = "biggus chungus"
|
||||
icon = 'icons/mob/vore64x32.dmi'
|
||||
icon_state = "chungus"
|
||||
icon_living = "chungus"
|
||||
icon_dead = "chungus-dead"
|
||||
icon_rest = "chungus_rest"
|
||||
faction = "mouse"
|
||||
|
||||
maxHealth = 150
|
||||
health = 150
|
||||
|
||||
investigates = TRUE
|
||||
melee_damage_lower = 5
|
||||
melee_damage_upper = 15
|
||||
grab_resist = 100
|
||||
|
||||
speak_chance = 4
|
||||
speak = list("Eenhhhhhhh...","What's up, doc?","Wabbit season?")
|
||||
speak_emote = list("squeeks","squeeks","squiks")
|
||||
emote_hear = list("squeeks","squeaks","squiks")
|
||||
emote_see = list("runs in a circle", "shakes", "scritches at something")
|
||||
say_maybe_target = list("Wabbit season?")
|
||||
say_got_target = list("DUCK SEASON!")
|
||||
response_help = "pets"
|
||||
response_disarm = "bops"
|
||||
response_harm = "hits"
|
||||
attacktext = list("ravaged")
|
||||
friendly = list("nuzzles", "licks", "noses softly at", "noseboops", "headbumps against", "leans on", "nibbles affectionately on")
|
||||
|
||||
old_x = -16
|
||||
old_y = 0
|
||||
default_pixel_x = -16
|
||||
pixel_x = -16
|
||||
pixel_y = 0
|
||||
|
||||
vore_active = TRUE
|
||||
vore_capacity = 1
|
||||
vore_pounce_chance = 45
|
||||
vore_icons = SA_ICON_LIVING | SA_ICON_REST
|
||||
|
||||
var/life_since_foodscan = 0
|
||||
|
||||
/mob/living/simple_animal/hostile/chungus/passive
|
||||
name = "big chungus"
|
||||
desc = "There's a chungus amongus. It seems more interested in food."
|
||||
follow_dist = 1
|
||||
var/mob/living/carbon/human/food
|
||||
var/hunger = 0
|
||||
|
||||
/mob/living/simple_animal/hostile/chungus/passive/Life()
|
||||
. = ..()
|
||||
if(!. || ai_inactive)
|
||||
return
|
||||
|
||||
if(hunger > 0 && life_since_foodscan++ > 5) //Only look for floor food when hungry.
|
||||
life_since_foodscan = 0
|
||||
for(var/obj/item/weapon/reagent_containers/food/snacks/S in oview(src,3)) //Accept thrown offerings and scavenge surroundings.
|
||||
if(get_dist(src,S) <=1)
|
||||
visible_emote("hungrily devours \the [S].")
|
||||
playsound(src.loc,'sound/items/eatfood.ogg', rand(10,50), 1)
|
||||
qdel(S)
|
||||
hunger = 0
|
||||
food = null
|
||||
else
|
||||
WanderTowards(S.loc)
|
||||
break
|
||||
|
||||
if(!food)
|
||||
return
|
||||
|
||||
var/food_dist = get_dist(src,food)
|
||||
|
||||
if(food_dist > world.view) //Lose interest on this person.
|
||||
food = null
|
||||
hunger = Clamp(hunger+5, 0, 25)
|
||||
|
||||
if(food_dist > 1)
|
||||
if(stance == STANCE_IDLE)
|
||||
if(set_follow(food,10 SECONDS))
|
||||
handle_stance(STANCE_FOLLOW)
|
||||
if(resting)
|
||||
lay_down()
|
||||
|
||||
if(food_dist <= 1)
|
||||
if(hunger < 15)
|
||||
if(prob(25))
|
||||
visible_emote(pick("sniffs curiously at [food].",
|
||||
"stares at [food], seeming to want something.",
|
||||
"sniffs at [food]'s hands.",
|
||||
"sniffs curiously at [food]'s pockets.",
|
||||
"sits down for a moment, reaching towards [food] with its paws."))
|
||||
hunger += 5
|
||||
else if(hunger < 30)
|
||||
if(prob(25))
|
||||
visible_emote(pick("sniffs intently against [food], especially their pockets and gear.",
|
||||
"stands up to beg [food] for snacks.",
|
||||
"attempts to burrow into [food]'s pockets.",
|
||||
"leans against [food], licking its chops.",
|
||||
"hungrily nibbles onto [food]."))
|
||||
hunger += 5
|
||||
else if(hunger < 45)
|
||||
if(prob(25))
|
||||
visible_emote(pick("growls at [food], sounding rather hangry!",
|
||||
"aggressively bumps and nudges against [food], trying to make something fall out.",
|
||||
"salivates at [food] in an unsettling manner.",
|
||||
"pushes hard against [food], licking its chops.",
|
||||
"almost sinks its teeth into [food], just stopping to give them another chance."))
|
||||
hunger += 5
|
||||
else if(hunger < 50)
|
||||
visible_emote("appears to have had enough and prepares to strike!")
|
||||
else
|
||||
food.Weaken(5)
|
||||
food.visible_message("<span class='danger'>\the [src] pounces on \the [food]!</span>!")
|
||||
target_mob = food
|
||||
EatTarget()
|
||||
hunger = 0
|
||||
food = null
|
||||
|
||||
/mob/living/simple_animal/hostile/chungus/passive/attackby(var/obj/item/O, var/mob/user) // Feed the chungus your food to satisfy it.
|
||||
if(istype(O, /obj/item/weapon/reagent_containers/food/snacks))
|
||||
qdel(O)
|
||||
playsound(src.loc,'sound/items/eatfood.ogg', rand(10,50), 1)
|
||||
hunger = 0
|
||||
food = null
|
||||
return
|
||||
. = ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/chungus/passive/Found(var/atom/found_atom)
|
||||
if(!SA_attackable(found_atom))
|
||||
return null
|
||||
else if(ishuman(found_atom) && will_eat(found_atom))
|
||||
var/mob/living/carbon/human/H = found_atom
|
||||
for(var/obj/item/weapon/reagent_containers/food/snacks/S in H)
|
||||
if(!food)
|
||||
visible_emote("sniffs around the air intently, seeming to have caught a whiff of food!")
|
||||
if(resting)
|
||||
lay_down()
|
||||
food = H
|
||||
return found_atom
|
||||
break
|
||||
return null
|
||||
|
||||
/mob/living/simple_animal/hostile/chungus/passive/FindTarget()
|
||||
var/atom/T = null
|
||||
for(var/atom/A in ListTargets(view_range))
|
||||
if(A == src)
|
||||
continue
|
||||
var/atom/F = Found(A)
|
||||
if(F)
|
||||
T = F
|
||||
break
|
||||
return T
|
||||
@@ -0,0 +1,329 @@
|
||||
/mob/living/simple_animal/hostile/metroid
|
||||
name = "baby metroid"
|
||||
desc = "The baby the baby the baby the baby."
|
||||
tt_desc = "Minimus Headamus Suckumus"
|
||||
icon = 'icons/mob/vore.dmi'
|
||||
icon_dead = "metroid_dead"
|
||||
icon_living = "metroidbaby"
|
||||
icon_state = "metroidbaby"
|
||||
|
||||
faction = "metroids"
|
||||
maxHealth = 50
|
||||
health = 50
|
||||
|
||||
//Metroids aren't affected by most atmospheres except cold.
|
||||
min_oxy = 0
|
||||
max_oxy = 0
|
||||
min_tox = 0
|
||||
max_tox = 0
|
||||
min_co2 = 0
|
||||
max_co2 = 0
|
||||
min_n2 = 0
|
||||
max_n2 = 0
|
||||
minbodytemp = T0C-30
|
||||
heat_damage_per_tick = 0
|
||||
cold_damage_per_tick = 40
|
||||
|
||||
melee_damage_lower = 1
|
||||
melee_damage_upper = 5
|
||||
|
||||
speak_chance = 2
|
||||
emote_hear = list("makes a wooshing sound")
|
||||
emote_see = list("SKREE's")
|
||||
|
||||
/mob/living/simple_animal/hostile/metroid/death()
|
||||
playsound(src, 'sound/effects/metroiddeath.ogg', 50, 1)
|
||||
..()
|
||||
|
||||
|
||||
/*
|
||||
/mob/living/simple_animal/hostile/metroid/super
|
||||
name = "super metroid"
|
||||
desc = "Some sort of person eaty thing!"
|
||||
icon = 'icons/mob/vore.dmi'
|
||||
icon_dead = "metroid_dead"
|
||||
icon_living = "metroid"
|
||||
icon_state = "metroid"
|
||||
|
||||
faction = "metroids"
|
||||
maxHealth = 200
|
||||
health = 200
|
||||
|
||||
//Metroids aren't affected by most atmospheres except cold.
|
||||
min_oxy = 0
|
||||
max_oxy = 0
|
||||
min_tox = 0
|
||||
max_tox = 0
|
||||
min_co2 = 0
|
||||
max_co2 = 0
|
||||
min_n2 = 0
|
||||
max_n2 = 0
|
||||
minbodytemp = T0C-30
|
||||
heat_damage_per_tick = 0
|
||||
cold_damage_per_tick = 40
|
||||
|
||||
melee_damage_lower = 2
|
||||
melee_damage_upper = 5
|
||||
|
||||
speak_chance = 2
|
||||
emote_hear = list("makes a wooshing sound")
|
||||
emote_see = list("SKREE's")
|
||||
|
||||
/mob/living/simple_animal/hostile/metroid/super
|
||||
vore_active = 1
|
||||
vore_pounce_chance = 75 //Pro Tip: Don't let them touch you.
|
||||
vore_icons = SA_ICON_LIVING
|
||||
swallowTime = 10 SECONDS //Hungry little bastards.
|
||||
*/
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/metroid/mine
|
||||
name = "minetroid"
|
||||
desc = "Some sort of person eaty thing! But weak compared to regular Metroids!"
|
||||
tt_desc = "Headamus Suckumus"
|
||||
icon = 'icons/mob/vore.dmi'
|
||||
icon_dead = "metroid_dead"
|
||||
icon_living = "metroid"
|
||||
icon_state = "metroid"
|
||||
|
||||
faction = "metroids"
|
||||
intelligence_level = SA_ANIMAL
|
||||
hovering = TRUE
|
||||
maxHealth = 25
|
||||
health = 25
|
||||
speed = 4
|
||||
turns_per_move = 5
|
||||
response_help = "pets the"
|
||||
response_disarm = "gently pushes aside the"
|
||||
response_harm = "hits the"
|
||||
|
||||
//Minetroids aren't affected by atmospheres.
|
||||
min_oxy = 0
|
||||
max_oxy = 0
|
||||
min_tox = 0
|
||||
max_tox = 0
|
||||
min_co2 = 0
|
||||
max_co2 = 0
|
||||
min_n2 = 0
|
||||
max_n2 = 0
|
||||
minbodytemp = 0
|
||||
|
||||
|
||||
melee_damage_lower = 10
|
||||
melee_damage_upper = 15
|
||||
attacktext = list("suckulated")
|
||||
attack_sound = 'sound/effects/metroidattack.ogg'
|
||||
|
||||
speak_chance = 2
|
||||
emote_hear = list("makes a wooshing sound")
|
||||
emote_see = list("SKREE's")
|
||||
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat
|
||||
|
||||
/mob/living/simple_animal/hostile/metroid/mine
|
||||
vore_active = 1
|
||||
vore_pounce_chance = 50
|
||||
vore_icons = SA_ICON_LIVING
|
||||
swallowTime = 10 SECONDS //Hungry little bastards.
|
||||
|
||||
/mob/living/simple_animal/hostile/metroid/mine/death()
|
||||
playsound(src, 'sound/effects/metroiddeath.ogg', 50, 1)
|
||||
..()
|
||||
|
||||
|
||||
/*
|
||||
/mob/living/simple_animal/hostile/metroid/alpha
|
||||
name = "super metroid"
|
||||
desc = "Some sort of person rammy thing!"
|
||||
icon = 'icons/mob/vore.dmi'
|
||||
icon_dead = "metroid_dead"
|
||||
icon_living = "metroid"
|
||||
icon_state = "metroid"
|
||||
|
||||
faction = "metroids"
|
||||
maxHealth = 225
|
||||
health = 225
|
||||
|
||||
//Metroids aren't affected by most atmospheres except cold.
|
||||
min_oxy = 0
|
||||
max_oxy = 0
|
||||
min_tox = 0
|
||||
max_tox = 0
|
||||
min_co2 = 0
|
||||
max_co2 = 0
|
||||
min_n2 = 0
|
||||
max_n2 = 0
|
||||
minbodytemp = T0C-30
|
||||
heat_damage_per_tick = 0
|
||||
cold_damage_per_tick = 40
|
||||
|
||||
melee_damage_lower = 10
|
||||
melee_damage_upper = 15
|
||||
|
||||
speak_chance = 2
|
||||
emote_hear = list("makes a wooshing sound")
|
||||
emote_see = list("SKREE's")
|
||||
|
||||
// Activate Noms!
|
||||
/mob/living/simple_animal/hostile/metroid/alpha
|
||||
vore_active = 1
|
||||
vore_pounce_chance = 75 //Pro Tip: Don't let them touch you.
|
||||
vore_icons = SA_ICON_LIVING
|
||||
swallowTime = 10 SECONDS //Hungry little bastards.
|
||||
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/metroid/gamma
|
||||
name = "super metroid"
|
||||
desc = "Some sort of person zappy thing!"
|
||||
icon = 'icons/mob/vore.dmi'
|
||||
icon_dead = "metroid_dead"
|
||||
icon_living = "metroid"
|
||||
icon_state = "metroid"
|
||||
|
||||
faction = "metroids"
|
||||
maxHealth = 275
|
||||
health = 275
|
||||
|
||||
//Evolutions aren't affected by atmospheres.
|
||||
min_oxy = 0
|
||||
max_oxy = 0
|
||||
min_tox = 0
|
||||
max_tox = 0
|
||||
min_co2 = 0
|
||||
max_co2 = 0
|
||||
min_n2 = 0
|
||||
max_n2 = 0
|
||||
minbodytemp = 0
|
||||
|
||||
melee_damage_lower = 0
|
||||
melee_damage_upper = 0
|
||||
|
||||
speak_chance = 2
|
||||
emote_hear = list("makes a wooshing sound")
|
||||
emote_see = list("SKREE's")
|
||||
|
||||
// Activate Noms!
|
||||
/mob/living/simple_animal/hostile/metroid/gamma
|
||||
vore_active = 1
|
||||
vore_pounce_chance = 75 //Pro Tip: Don't let them touch you.
|
||||
vore_icons = SA_ICON_LIVING
|
||||
swallowTime = 10 SECONDS //Hungry little bastards.
|
||||
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/metroid/zeta
|
||||
name = "super metroid"
|
||||
desc = "Some sort of person stompy thing!"
|
||||
icon = 'icons/mob/vore.dmi'
|
||||
icon_dead = "metroid_dead"
|
||||
icon_living = "metroid"
|
||||
icon_state = "metroid"
|
||||
|
||||
faction = "metroids"
|
||||
maxHealth = 350
|
||||
health = 350
|
||||
|
||||
//Evolutions aren't affected by atmospheres.
|
||||
min_oxy = 0
|
||||
max_oxy = 0
|
||||
min_tox = 0
|
||||
max_tox = 0
|
||||
min_co2 = 0
|
||||
max_co2 = 0
|
||||
min_n2 = 0
|
||||
max_n2 = 0
|
||||
minbodytemp = 0
|
||||
|
||||
melee_damage_lower = 0
|
||||
melee_damage_upper = 0
|
||||
|
||||
speak_chance = 2
|
||||
emote_hear = list("makes a wooshing sound")
|
||||
emote_see = list("SKREE's")
|
||||
|
||||
// Activate Noms!
|
||||
/mob/living/simple_animal/hostile/metroid/zeta
|
||||
vore_active = 1
|
||||
vore_pounce_chance = 75 //Pro Tip: Don't let them touch you.
|
||||
vore_icons = SA_ICON_LIVING
|
||||
swallowTime = 10 SECONDS //Hungry little bastards.
|
||||
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/metroid/omega
|
||||
name = "super metroid"
|
||||
desc = "Some sort of person smashy thing!"
|
||||
icon = 'icons/mob/vore.dmi'
|
||||
icon_dead = "metroid_dead"
|
||||
icon_living = "metroid"
|
||||
icon_state = "metroid"
|
||||
|
||||
faction = "metroids"
|
||||
maxHealth = 450
|
||||
health = 450
|
||||
|
||||
//Evolutions aren't affected by atmospheres.
|
||||
min_oxy = 0
|
||||
max_oxy = 0
|
||||
min_tox = 0
|
||||
max_tox = 0
|
||||
min_co2 = 0
|
||||
max_co2 = 0
|
||||
min_n2 = 0
|
||||
max_n2 = 0
|
||||
minbodytemp = 0
|
||||
|
||||
melee_damage_lower = 0
|
||||
melee_damage_upper = 0
|
||||
|
||||
speak_chance = 2
|
||||
emote_hear = list("makes a wooshing sound")
|
||||
emote_see = list("SKREE's")
|
||||
|
||||
// Activate Noms!
|
||||
/mob/living/simple_animal/hostile/metroid/omega
|
||||
vore_active = 1
|
||||
vore_pounce_chance = 75 //Pro Tip: Don't let them touch you.
|
||||
vore_icons = SA_ICON_LIVING
|
||||
swallowTime = 10 SECONDS //Hungry little bastards.
|
||||
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/metroid/queen
|
||||
name = "super metroid"
|
||||
desc = "How the hell could you let this happen."
|
||||
icon = 'icons/mob/vore.dmi'
|
||||
icon_dead = "metroid_dead"
|
||||
icon_living = "metroid"
|
||||
icon_state = "metroid"
|
||||
|
||||
faction = "metroids"
|
||||
maxHealth = 575
|
||||
health = 575
|
||||
|
||||
//Evolutions aren't affected by atmospheres.
|
||||
min_oxy = 0
|
||||
max_oxy = 0
|
||||
min_tox = 0
|
||||
max_tox = 0
|
||||
min_co2 = 0
|
||||
max_co2 = 0
|
||||
min_n2 = 0
|
||||
max_n2 = 0
|
||||
minbodytemp = 0
|
||||
|
||||
melee_damage_lower = 0
|
||||
melee_damage_upper = 0
|
||||
|
||||
speak_chance = 2
|
||||
emote_hear = list("makes a wooshing sound")
|
||||
emote_see = list("SKREE's")
|
||||
|
||||
// Activate Noms!
|
||||
/mob/living/simple_animal/hostile/metroid/queen
|
||||
vore_active = 1
|
||||
vore_pounce_chance = 75 //Pro Tip: Don't let them touch you.
|
||||
vore_icons = SA_ICON_LIVING
|
||||
swallowTime = 10 SECONDS //Hungry little bastards.
|
||||
*/
|
||||
@@ -298,3 +298,32 @@
|
||||
His walls rolled over your form as you lay trapped in his depths. There wasnt a drop of fluid in sight inside that \
|
||||
stomach. Instead, you could feel your energy slowly draining away over time, like... he was leeching off you."
|
||||
player_msg = "You are Zylas. You enjoy scaring the local population and eating every chicken you find."
|
||||
|
||||
//"Two scarves. No more, No Less." -Muninn
|
||||
/mob/living/simple_animal/shadekin/blue/muninn
|
||||
name ="Muninn"
|
||||
desc = "A gray furred shadekin, a little on the hefty side. Rocks two scarves, one on the neck, one on the tail. \
|
||||
He seems eager to take in the various sights and sounds of the station"
|
||||
icon_state = "muninn"
|
||||
eye_desc = "e_blue"
|
||||
vore_stomach_flavor = "You're stuck in a warm, tight stomach. \
|
||||
A blue glow, as soft as the walls surrounding you, illuminates the cramped chamber. \
|
||||
Muninn's walls gently squeeze over your form, like a tight, yet comfortable hug. \
|
||||
The gut itself was relatively dry, only slightly damp. \
|
||||
As Muninn ambles along, you'd gently sway within. It's quite the nice place to stay for a while."
|
||||
player_msg = "You are Muninn. Today you feel... Curious."
|
||||
|
||||
//"Here's a little lesson in the trickeries" -Muninn
|
||||
/mob/living/simple_animal/shadekin/purple/muninn
|
||||
name ="Muninn"
|
||||
desc = "A gray furred shadekin, a little on the hefty side. Rocks two scarves, one on the neck, one on the tail.\
|
||||
He seems a little mischevious... better keep an eye on him."
|
||||
icon_state = "muninn"
|
||||
eye_desc = "e_purple"
|
||||
vore_stomach_flavor = "You're stuck in a warm, tight stomach. \
|
||||
A purple glow, as soft as the walls surrounding you, illuminates the cramped chamber. \
|
||||
Muninn's walls gently squeeze over your form, like a tight hug. \
|
||||
The gut itself was relatively dry, only slightly damp. \
|
||||
It didn't seem that Muninn was digesting you. More like... sapping your energy and making you feel tired. \
|
||||
A nap in this comfortable chamber wouldn't be the worst thing, would it?"
|
||||
player_msg = "You are Muninn. Today you feel... Mischevious."
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
/obj/item/weapon/cell/high/hightech
|
||||
name = "Self-charging power cell"
|
||||
origin_tech = list(TECH_POWER = 7)
|
||||
icon_state = "hcell"
|
||||
maxcharge = 2000//Trade in charge for recharge
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 1000, "glass" = 100)
|
||||
description_info = "This 'cell' holds a max charge of 1k and self recharges over time."
|
||||
self_recharge = TRUE
|
||||
|
||||
/obj/item/weapon/cell/high/hightech/empty/New()
|
||||
..()
|
||||
charge = 0
|
||||
@@ -134,18 +134,11 @@
|
||||
scannable = 1 // Mechs can scan this ye
|
||||
metabolism = 0.03 //Slow metabolism. This value was plucked out of nowhere. Can be changed.
|
||||
|
||||
/datum/reagent/bullvalene/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) //Credit to Cameron for making my life easier with getFireLoss and such!
|
||||
if(alien == IS_SLIME)
|
||||
/datum/reagent/bullvalene/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
||||
if(alien == IS_SLIME || alien == IS_DIONA)
|
||||
return
|
||||
if(alien != IS_DIONA)
|
||||
return
|
||||
else
|
||||
if(M.getOxyLoss()) //OXYGEN | This check if there is oxygen damage
|
||||
M.adjustOxyLoss(-1) //This remove the oxygen damage
|
||||
M.adjustToxLoss(0.8) //This add toxin damage
|
||||
if(M.getFireLoss()) //BURN
|
||||
M.adjustFireLoss(-1)
|
||||
M.adjustToxLoss(0.8)
|
||||
if(M.getBruteLoss()) //BRUTE
|
||||
M.adjustBruteLoss(-1)
|
||||
M.adjustToxLoss(0.8)
|
||||
if(M.getBruteLoss() || M.getFireLoss() || M.getOxyLoss())
|
||||
M.adjustOxyLoss(-1)
|
||||
M.adjustFireLoss(-1)
|
||||
M.adjustBruteLoss(-1)
|
||||
M.adjustToxLoss(0.8)
|
||||
|
||||
@@ -48,3 +48,62 @@
|
||||
T.add_vomit_floor(src, 1)
|
||||
*/
|
||||
|
||||
//////////////////////////////////////////////
|
||||
////////////////C U B E S////////////////////
|
||||
////////////////////////////////////////////
|
||||
/datum/chemical_reaction/cube/sagaru
|
||||
name = "Saguwu"
|
||||
id = "cubedsagaru"
|
||||
result = null
|
||||
required_reagents = list("cheese" = 1, "blood" = 1, "clonexadone" = 10,)
|
||||
result_amount = 1
|
||||
|
||||
/datum/chemical_reaction/cube/sagaru/on_reaction(var/datum/reagents/holder, var/created_volume)
|
||||
var/location = get_turf(holder.my_atom)
|
||||
for(var/i = 1, i <= created_volume, i++)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/sarucube(location)
|
||||
return
|
||||
////////////////////////////////////
|
||||
////////////That good shit/////////
|
||||
//////////////////////////////////
|
||||
/datum/reagent/claridyl
|
||||
name = "Claridyl Natural Remedy"
|
||||
id = "claridyl"
|
||||
description = "Claridyl is an advanced medicine that cures all of your problems. Notice: Clarydil does not claim to fix marriages, car loans, student debt or insomnia and may cause severe pain."
|
||||
taste_description = "sugar"
|
||||
reagent_state = LIQUID
|
||||
color = "#AAAAFF"
|
||||
overdose = REAGENTS_OVERDOSE * 100
|
||||
metabolism = REM * 0.1
|
||||
scannable = 1
|
||||
|
||||
/datum/reagent/claridyl/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
||||
if(alien != IS_DIONA)
|
||||
M.add_chemical_effect(CE_STABLE, 30)
|
||||
M.add_chemical_effect(CE_PAINKILLER, 40)
|
||||
if(M.getBruteLoss()) //Probably should just do the conversion instead of being such a massive crippling downside
|
||||
M.adjustBruteLoss(-1)
|
||||
M.adjustHalLoss(2) //A single unit could make you bedridden shortly if you have a lot of brute
|
||||
//many many side effects all listed in AS Commercial
|
||||
if(prob(0.0001))//Side effects incluide death, this seems like a good "balanced" inclusion of it
|
||||
M.adjustToxLoss(50)//instant crit for tesh
|
||||
if(prob(0.1))
|
||||
M.AdjustParalysis(0.5)
|
||||
if(prob(0.1))
|
||||
M.AdjustStunned(10)
|
||||
if(prob(5))
|
||||
M.AdjustWeakened(10)
|
||||
if(prob(5))
|
||||
M.make_dizzy(2)
|
||||
if(prob(10))
|
||||
M.add_chemical_effect(CE_ALCOHOL, 5)
|
||||
if(prob(50))
|
||||
M.custom_pain("Your vision becomes blurred!",30)
|
||||
if(prob(10))
|
||||
M.custom_pain("Your mouth feels dry!",30)
|
||||
if(prob(1))
|
||||
M.custom_pain("You suddenly feel inexplicably angry!",30)
|
||||
if(prob(2))
|
||||
M.custom_pain("You suddenly lose your train of thought!",30)
|
||||
if(prob(0.1))
|
||||
M.hallucination = max(M.hallucination, 2)
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
/datum/chemical_reaction/claridyl
|
||||
name = "claridyl"
|
||||
id = "claridyl"
|
||||
result = "claridyl"
|
||||
required_reagents = list("lithium" = 1, "radium" = 1, "sugar" = 1)
|
||||
result_amount = 1
|
||||
@@ -114,6 +114,14 @@
|
||||
result = "myelamine"
|
||||
required_reagents = list("bicaridine" = 1, "iron" = 2, "kelotane" = 1, "bluesap" = 1)
|
||||
result_amount = 1
|
||||
//Old version of above slightly modified
|
||||
/datum/chemical_reaction/myelamineold //This is the clotting agent used by clotting packs.
|
||||
name = "Myelamineold"
|
||||
id = "myelamineold"
|
||||
result = "myelamine"
|
||||
required_reagents = list("bicaridine" = 1, "iron" = 2, "kelotane" = 1, "spidertoxin" = 1)
|
||||
result_amount = 1
|
||||
|
||||
|
||||
/datum/chemical_reaction/hannoa
|
||||
name = "Hannoa"
|
||||
@@ -129,6 +137,12 @@
|
||||
required_reagents = list("dermaline" = 1, "orangesap" = 1, "Copper" = 1)
|
||||
result_amount = 1
|
||||
|
||||
/datum/chemical_reaction/nutrient
|
||||
name = "Nutriment"
|
||||
id = "nutriment"
|
||||
result = "nutriment"
|
||||
required_reagents = list("purplesap" = 1, "orangesap" = 1, "bluesap" = 1)
|
||||
result_amount = 3
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
/// Special drinks
|
||||
|
||||
@@ -260,6 +260,15 @@ other types of metals and chemistry for reagents).
|
||||
category = "Misc"
|
||||
sort_string = "DAAAD"
|
||||
|
||||
/datum/design/item/powercell/high/hightech
|
||||
name = "Self-charging power cell"
|
||||
id = "selfch_cell"
|
||||
req_tech = list(TECH_POWER = 5, TECH_MATERIAL = 4,TECH_BLUESPACE = 4)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 2000,"glass" = 500)
|
||||
build_path = /obj/item/weapon/cell/high/hightech
|
||||
category = "Misc"
|
||||
sort_string = "DAAAE"
|
||||
|
||||
/datum/design/item/powercell/device
|
||||
name = "device"
|
||||
build_type = PROTOLATHE
|
||||
|
||||
@@ -20,4 +20,4 @@
|
||||
name = "medical shuttle control console"
|
||||
shuttle_tag = "Medical"
|
||||
//req_access = list(access_medical)
|
||||
circuit = /obj/item/weapon/circuitboard/medical_shuttle
|
||||
circuit = /obj/item/weapon/circuitboard/medical_shuttle
|
||||
@@ -23,4 +23,9 @@
|
||||
name = "research elevator control console"
|
||||
|
||||
/obj/machinery/computer/shuttle_control/medical
|
||||
name = "medical elevator control console"
|
||||
name = "medical elevator control console"
|
||||
|
||||
/obj/machinery/computer/shuttle_control/casino
|
||||
name = "casino shuttle control console"
|
||||
req_access = list(access_trader)
|
||||
shuttle_tag = "Casino"
|
||||
@@ -51,10 +51,10 @@
|
||||
. = ..()
|
||||
|
||||
/obj/item/weapon/card/id/digest_act(var/atom/movable/item_storage = null)
|
||||
desc = "A partially digested card that has seen better days. The damage appears to be only cosmetic, but the access codes need to be reprogrammed at the HoP office."
|
||||
desc = "A partially digested card that has seen better days. The damage appears to be only cosmetic."
|
||||
icon = 'icons/obj/card_vr.dmi'
|
||||
icon_state = "[initial(icon_state)]_digested"
|
||||
// access = list() // No access /Removing this because everyone thinks it's dumb. -Erik
|
||||
// access = list() // No access /Removing this because everyone thinks it's dumb. -Erik //Fixing description -shark
|
||||
return FALSE
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/digest_act(var/atom/movable/item_storage = null)
|
||||
|
||||
@@ -216,7 +216,29 @@
|
||||
/obj/item/clothing/shoes/fluff/morthighs,
|
||||
/obj/item/clothing/gloves/fluff/morsleeves,
|
||||
/obj/item/clothing/under/fluff/morunder)
|
||||
|
||||
// kazzc: Kassc
|
||||
/obj/item/weapon/storage/box/fluff/Kassc
|
||||
name = ""
|
||||
desc = ""
|
||||
has_items = list(
|
||||
/obj/item/clothing/accessory/medal/silver/valor)
|
||||
|
||||
// keithwinters: Keith Winters
|
||||
/obj/item/weapon/storage/box/fluff/Keith_Winters
|
||||
name = ""
|
||||
desc = ""
|
||||
has_items = list(
|
||||
/obj/item/clothing/accessory/medal/silver/valor)
|
||||
|
||||
// nadyr: Taaa
|
||||
/obj/item/weapon/storage/box/fluff/Taaa
|
||||
name = ""
|
||||
desc = ""
|
||||
has_items = list(
|
||||
/obj/item/clothing/accessory/medal/silver/valor,
|
||||
/obj/item/clothing/accessory/medal/conduct,
|
||||
/obj/item/clothing/accessory/medal/gold/heroism)
|
||||
|
||||
/*
|
||||
Swimsuits, for general use, to avoid arriving to work with your swimsuit.
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
|
||||
// For now as a safety measure we will only save if the name matches.
|
||||
if(prefs.real_name != persister.real_name)
|
||||
log_debug("Persist (P4P): Skipping [persister] becuase ORIG:[persister.real_name] != CURR:[prefs.real_name].")
|
||||
log_debug("Persist (P4P): Skipping [persister] because ORIG:[persister.real_name] != CURR:[prefs.real_name].")
|
||||
return
|
||||
|
||||
return prefs
|
||||
|
||||
Reference in New Issue
Block a user