This commit is contained in:
Shadowfire117
2019-02-10 23:34:53 +01:00
54 changed files with 11964 additions and 10668 deletions
+74
View File
@@ -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)
+4 -1
View File
@@ -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
+9
View File
@@ -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
+1 -1
View File
@@ -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
+6 -1
View File
@@ -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"
+2 -2
View File
@@ -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.
+1 -1
View File
@@ -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