Files
S.P.L.U.R.T-Station-13/code/citadel/transformation.dm
Poojawa 1308fc7be5 purge the rainbow
renames 'narky' folder to 'citadel'
2016-08-04 22:44:07 -05:00

249 lines
6.4 KiB
Plaintext

/datum/vore_transform_datum
var/tf_path
var/tf_species
var/tf_gender=NEUTER
var/tf_egg=0
proc/apply_transform(var/mob/living/targ)
return //THIS SHIT IS FUBAR -CACTUS
var/old_name=targ.real_name
var/new_gender=tf_gender==NEUTER ? targ.gender : tf_gender
var/transformation_happened=new_gender==targ.gender ? 0 : 1
var/new_path= tf_egg ? /mob/living/egg : tf_path
var/datum/dna/tmp_dna=targ.has_dna()
if(tmp_dna)
targ.last_working_dna=tmp_dna
if(tf_egg&&!tf_path)tf_path=targ.type
if(new_path&&!istype(targ,new_path))//Transform path?
targ.vore_contents_drop(targ.get_last_organ_in())
var/mob/living/new_mob = new new_path(targ.loc)
if(istype(new_mob))
new_mob.a_intent = "harm"
//new_mob.universal_speak = 1
new_mob.languages_spoken = 1
new_mob.languages_understood = 1
new_mob.vore_banned_methods=targ.vore_banned_methods
new_mob.vore_ability=targ.vore_ability
if(targ.mind)
targ.mind.transfer_to(new_mob)
else
new_mob.key = targ.key
if(targ.last_working_dna)
new_mob.last_working_dna=targ.last_working_dna
if(targ.get_last_organ_in())
targ.last_organ_in.add(new_mob)
new_mob.vore_transform_index=-200
qdel(targ)
targ=new_mob
transformation_happened=1
if(istype(targ,/mob/living/carbon)) //handle species and/or dna
var/mob/living/carbon/C=targ
C.has_dna()
if(C.last_working_dna&&C.dna)
C.dna=C.last_working_dna
if(tf_species)
C.real_name=old_name
C.vore_dna_mod(tf_species)
if(transformation_happened)
C.dna.cock=list("has"=C.gender==MALE,"type"="human","color"="900")//TEMP FIX!
C.dna.vagina=C.gender==FEMALE
transformation_happened=1
if(istype(targ,/mob/living/egg)) //handle egg
var/mob/living/egg/E=targ
src.tf_egg=0
E.hatch_tf=src
if(!E.get_last_organ_in())
E.incubate()
targ.gender=new_gender
targ.real_name=old_name
targ.name=old_name
if(transformation_happened&&targ.get_last_organ_in())
targ.vore_transform_index=-200
//targ.last_organ_in.owner<<"You feel a stir. An occupant has changed."
targ.last_organ_in.flavour_text(targ.last_organ_in.FLAVOUR_TRANSFORM)
/mob/living/proc/vore_dna_mod(var/new_dna)
if(!has_dna(src))return
if(!new_dna)return
var/mob/living/carbon/C=src
if(istype(new_dna,/datum/dna))
var/old_name=C.real_name
var/datum/dna/change_dna=new_dna
C.dna.struc_enzymes=change_dna.struc_enzymes
//C.dna.unique_enzymes=change_dna.unique_enzymes
C.dna.uni_identity=change_dna.uni_identity
C.set_mutantrace(change_dna.species.id)
C.dna.mutanttail=change_dna.mutanttail
C.dna.mutantwing=change_dna.mutantwing
C.dna.special_color=change_dna.special_color
C.dna.special_color=change_dna.special_color
C.updateappearance()
C.real_name=old_name
C.name=old_name
else
//C.dna.mutantrace=new_dna
C.set_mutantrace(new_dna)
/*
/mob/living/proc/vore_transform(var/transformpath=null, var/transform_species=null, var/transform_gender=NEUTER, var/datum/vore_organ/new_cont=null)
var/old_name=src.real_name
var/datum/dna/tmp_dna=check_dna_integrity(src)
if(tmp_dna)
last_working_dna=tmp_dna
if(!transformpath)transformpath=src.type
if(src.type==transformpath)
if(istype(src,/mob/living/carbon))
var/mob/living/carbon/humz=src
var/race = humz.dna ? humz.dna.mutantrace : null
if((transform_species&&race==transform_species)&&(gender==transform_gender||transform_gender==NEUTER))
return 0
else
if(humz.dna)
humz.vore_dna_mod(transform_species)
if(transform_gender!=NEUTER)
humz.gender=transform_gender
if(istype(humz,/mob/living/carbon/human))
var/mob/living/carbon/human/H=humz
H.update_body()
if(new_cont)
humz.vore_transform_index=-200
new_cont.owner<<"Your belly stirs. A transformation is complete."
return 1
else
if(transform_gender!=NEUTER&&gender!=transform_gender)
gender=transform_gender
if(new_cont)
vore_transform_index=-200
new_cont.owner<<"Your belly stirs. A transformation is complete."
return 1
return 0
src.vore_contents_drop(new_cont)
var/mob/living/new_mob = new transformpath(src.loc)
if(istype(new_mob))
check_dna_integrity(new_mob)
new_mob.a_intent = "harm"
new_mob.universal_speak = 1
//new_mob.universal_understand = 1
if(src.mind)
src.mind.transfer_to(new_mob)
if(last_working_dna)
new_mob.last_working_dna=last_working_dna
else
new_mob.key = src
if(new_cont)
new_cont.contents.Add(new_mob)
new_cont.owner.stomach_contents.Add(new_mob)
new_mob.vore_transform_index=-200
new_cont.owner<<"Your belly stirs. A transformation is complete."
if(istype(new_mob,/mob/living/carbon))
var/mob/living/carbon/humz=new_mob
humz.dna=humz.last_working_dna
if(transform_species)
humz.vore_dna_mod(transform_species)
if(transform_gender!=NEUTER)
new_mob.gender=transform_gender
if(istype(humz,/mob/living/carbon/human))
var/mob/living/carbon/human/H=humz
H.update_body()
if(transform_gender!=NEUTER)
new_mob.gender=transform_gender
new_mob.real_name=old_name
new_mob.name=old_name
qdel(src)
return 1
*/
/mob/living/egg
name = "egg"
icon = 'icons/mob/animal.dmi'
icon_state = "egg"
health = 50
//max_health = 50
status_flags = CANPUSH
languages_spoken = 1
languages_understood = 1
canmove = 0
var/datum/vore_transform_datum/hatch_tf = null
var/hatch_prog = 0
var/targ_hatch = 80
var/incubating=0
proc/incubate()
incubating=1
update_canmove()
canmove=0
return canmove
New()
..()
icon_state="egg[rand(0,2)]"
Life()
vore_transform_index=-200
if(incubating)
if(get_last_organ_in())
hatch_prog+=2
else
hatch_prog+=1
if(hatch_prog>=targ_hatch&&hatch_tf)
src.visible_message("<span class='notice'>[src]'s egg hatches!</span>")
hatch_tf.apply_transform(src)
attack_hand(mob/living/carbon/human/M as mob)
..()
switch(M.a_intent)
if("help")
if (health > 0)
for(var/mob/O in viewers(src, null))
if ((O.client && !( O.eye_blind )))
O.show_message("\blue [M] hugs [src]'s egg.")
if("grab")
if (M == src || anchored)
return
if (!(status_flags & CANPUSH))
return
LAssailant = M
for(var/mob/O in viewers(src, null))
if ((O.client && !( O.eye_blind )))
O.show_message(text("\red [] has grabbed [] passively!", M, src), 1)
if("harm", "disarm")
for(var/mob/O in viewers(src, null))
if ((O.client && !( O.eye_blind )))
O.show_message("\red [M] taps [src]'s eggshell!")
return