purge the rainbow

renames 'narky' folder to 'citadel'
This commit is contained in:
Poojawa
2016-08-04 22:44:07 -05:00
parent 3bcdaa22ae
commit 1308fc7be5
13 changed files with 0 additions and 0 deletions
File diff suppressed because it is too large Load Diff
+1
View File
@@ -0,0 +1 @@
//proc/vore_start_normal(var/method,var/mob/living/pred, var/mob/living/prey, var/headfirst=1)
+136
View File
@@ -0,0 +1,136 @@
var/const/COLOUR_LIST_SIZE=4
proc/sanitize_colour_list(var/list/lst=null)
if(!lst||!lst.len)
lst=new/list(COLOUR_LIST_SIZE)
if(lst.len!=COLOUR_LIST_SIZE)
var/new_lst[COLOUR_LIST_SIZE]
for(var/x=1,x<=COLOUR_LIST_SIZE,x++)
new_lst[x]=lst[x]
lst=new_lst
return lst
proc/generate_colour_icon(var/fil_chk=null,var/state=null,var/list/lst=null,var/add_layer=0,var/offset_x=0,var/offset_y=0,var/overlay_only=0,var/human=0)
if(!fil_chk||!state)return null
lst=sanitize_colour_list(lst)
var/icon/chk=new/icon(fil_chk)
var/list/available_states=chk.IconStates()
var/list/rtn_lst = list()
if(!overlay_only&&available_states.Find("[state]"))
rtn_lst += image("icon"=fil_chk, "icon_state"="[state]", "pixel_y"=offset_y, "pixel_x"=offset_x, "layer"=add_layer)
var/chk_len=human ? 1 : lst.len
for(var/x=1,x<=chk_len,x++)
if(!lst[x]&&!human)continue
var/state_check="[state]_[x]"
if(x==1)
if(human)
state_check="[state]_h"
else
if(!available_states.Find("[state_check]"))
state_check="[state]_h"
if(available_states.Find("[state_check]"))
var/image/colourized = image("icon"=fil_chk, "icon_state"="[state_check]", "pixel_y"=offset_y, "pixel_x"=offset_x, "layer"=add_layer)
var/new_color = "#" + "[human ? human : lst[x]]"
colourized.color = new_color
rtn_lst += colourized
return rtn_lst
/mob/living/carbon/human/var/heterochromia=0
/datum/dna
var/mutanttail //Narky code~
var/mutantwing
var/wingcolor="FFF"
var/special_color[COLOUR_LIST_SIZE]
var/global/const/COCK_NONE=0
var/global/const/COCK_NORMAL=1
var/global/const/COCK_HYPER=2
var/global/const/COCK_DOUBLE=3
var/list/cock=list("has"=COCK_NONE,"type"="human","color"="900")
var/vagina=0
var/datum/special_mutant/special
var/taur=0 //TEMP!
var/mob/living/simple_animal/naga_segment/naga=null //ALSO TEMP!
/* proc/generateExtraData()
var/list/EDL=list(
"race"=mutantrace,
"tail"=mutanttail,
"sc"=special_color,
"cock"=cock,
"vagina"=vagina)
return EDL
proc/addExtraData(var/list/EDL, var/setit=0)
if(EDL["race"]||setit)
mutantrace=EDL["race"]
if(EDL["tail"]||setit)
mutanttail=EDL["tail"]
if(EDL["sc"]||setit)
special_color=EDL["sc"]
if(EDL["cock"]||setit)
cock=EDL["cock"]
if(!isnull(EDL["vagina"])||setit)
vagina=EDL["vagina"]*
proc/setExtraData(var/list/EDL)*/
/datum/special_mutant
proc/generate_overlay()
return 0
proc/generate_underlay()
return 0
/datum/dna/proc/mutantrace() //Easy legacy support!
if(species)
return species.id
else
return "human"
/datum/dna/proc/generate_race_block()
var/block_gen="fff"
if(species_list[mutantrace()])
//block_gen = construct_block(species_list.Find(mutantrace), species_list.len+1)
block_gen = construct_block(species_list.Find(species.id), species_list.len+1)
else
block_gen = construct_block(species_list.len+1, species_list.len+1)
return block_gen
/mob/living/proc/set_mutantrace(var/new_mutantrace=null)
new_mutantrace=kpcode_race_san(new_mutantrace)
var/datum/dna/dna=has_dna(src)
if(!dna)return
if(new_mutantrace)
//dna.mutantrace=new_mutantrace
if(species_list.Find(new_mutantrace))
//var/typ=species_list[species_list.Find(dna.species.id)]
//dna.species=new typ()
dna.species=kpcode_race_get(new_mutantrace)
dna.uni_identity = setblock(dna.uni_identity, DNA_MUTANTRACE_BLOCK, dna.generate_race_block())
regenerate_icons()
/datum/dna/proc/generate_cock_block()
var/cock_block=0
if(cock["has"])
cock_block+=1
if(vagina)
cock_block+=2
return construct_block(cock_block+1, 4)
/mob/living/proc/set_cock_block()
var/datum/dna/dna=has_dna(src)
if(!dna)return
dna.uni_identity = setblock(dna.uni_identity, DNA_COCK_BLOCK, dna.generate_cock_block())
/mob/living/proc/is_taur()
if(istype(src,/mob/living/carbon/human)&&src:dna&&src:dna:taur)
if(src:dna:species&&kpcode_cantaur(src:dna:species))
return 1
return 0
+220
View File
@@ -0,0 +1,220 @@
var/const/SIZEPLAY_TINY=1
var/const/SIZEPLAY_MICRO=2
var/const/SIZEPLAY_NORMAL=3
var/const/SIZEPLAY_MACRO=4
var/const/SIZEPLAY_HUGE=5
/mob/living
var/sizeplay_size=SIZEPLAY_NORMAL
proc
sizeplay_set(var/newsize)
if(!istype(src,/mob/living/carbon))
if(newsize<initial(src.sizeplay_size) || newsize>initial(src.sizeplay_size)+1)
return
if(newsize==initial(src.sizeplay_size))
//src.transform=get_matrix_norm()
//src.pixel_y=0
stable_matrix(get_matrix_norm(),0)
src.sizeplay_size=newsize
return
else if(newsize>initial(src.sizeplay_size))
//src.transform=get_matrix_large()
//src.pixel_y=16
stable_matrix(get_matrix_large(),8)
src.sizeplay_size=newsize
return
return //Paranoid returns
else if(newsize==SIZEPLAY_TINY)
//src.transform=get_matrix_smallest()
//src.pixel_y=-8
stable_matrix(get_matrix_smallest(),-8)
src.sizeplay_size=newsize
else if(newsize==SIZEPLAY_MICRO)
//src.transform=get_matrix_small()
//src.pixel_y=-8
stable_matrix(get_matrix_small(),-4)
src.sizeplay_size=newsize
else if(newsize==SIZEPLAY_MACRO)
//src.transform=get_matrix_large()
//src.pixel_y=16
stable_matrix(get_matrix_large(),8)
src.sizeplay_size=newsize
else if(newsize==SIZEPLAY_HUGE) // Huge should be the largest size
// removed these comments
// not being used anyway
stable_matrix(get_matrix_largest(),16)
src.sizeplay_size=newsize
else
//src.transform=get_matrix_norm()
//src.pixel_y=0
stable_matrix(get_matrix_norm(),0)
src.sizeplay_size=SIZEPLAY_NORMAL
// src.updateappearance
sizeplay_shrink()
//if(!istype(src,/mob/living/carbon))
// return
if(sizeplay_size>SIZEPLAY_TINY)
src.sizeplay_set(sizeplay_size-1)
for(var/mob/living/M in src.stomach_contents)
M.sizeplay_shrink()
sizeplay_grow()
//if(!istype(src,/mob/living/carbon))
// return
if(sizeplay_size<SIZEPLAY_HUGE)
src.sizeplay_set(sizeplay_size+1)
for(var/mob/living/M in src.stomach_contents)
M.sizeplay_grow()
stable_matrix(var/matrix/sze,var/pixel_en)
sze.TurnTo(0,lying)
animate(src, transform = sze, time = 4, pixel_y = pixel_en, easing = EASE_IN|EASE_OUT)
/mob/living/simple_animal/lizard/sizeplay_size=SIZEPLAY_MICRO
/mob/living/simple_animal/mouse/sizeplay_size=SIZEPLAY_MICRO
//var/matrix/transform_small=new().Scale(0.5)
//var/matrix/transform_norm=new()
//var/matrix/transform_large=new().Scale(2)
/proc/get_matrix_largest()
var/matrix/mtrx=new()
return mtrx.Scale(2)
/proc/get_matrix_large()
var/matrix/mtrx=new()
return mtrx.Scale(1.5)
/proc/get_matrix_norm()
var/matrix/mtrx=new()
return mtrx
/proc/get_matrix_small()
var/matrix/mtrx=new()
return mtrx.Scale(0.7)
/proc/get_matrix_smallest()
var/matrix/mtrx=new()
return mtrx.Scale(0.5)
/obj/item/projectile/sizeray
name = "mystery beam"
icon_state = "omnilaser"
hitsound = null
damage = 0
damage_type = STAMINA
flag = "laser"
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
/obj/item/projectile/sizeray/shrinkray/icon_state="bluelaser"
/obj/item/projectile/sizeray/growthray/icon_state="laser"
/obj/item/ammo_casing/energy/laser/growthray
projectile_type = /obj/item/projectile/sizeray/growthray
select_name = "redray"
/obj/item/ammo_casing/energy/laser/shrinkray
projectile_type = /obj/item/projectile/sizeray/shrinkray
select_name = "blueray"
/obj/item/projectile/sizeray/shrinkray/on_hit(var/atom/target, var/blocked = 0)
if(istype(target, /mob/living))
var/mob/living/M=target
M.sizeplay_shrink()
return 1
/obj/item/projectile/sizeray/growthray/on_hit(var/atom/target, var/blocked = 0)
if(istype(target, /mob/living))
var/mob/living/M=target
M.sizeplay_grow()
return 1
//Gun here
/obj/item/weapon/gun/energy/laser/sizeray
name = "mystery raygun"
icon_state = "bluetag"
desc = "This will be fun!"
ammo_type = list(/obj/item/ammo_casing/energy/laser/shrinkray)
origin_tech = "combat=1;magnets=2"
clumsy_check = 0
charge_tick = 0
//special_check(var/mob/living/carbon/human/M)
//return 1
New()
..()
SSobj.processing |= src
Destroy()
SSobj.processing.Remove(src)
..()
process()
charge_tick++
if(charge_tick < 4) return 0
charge_tick = 0
if(!power_supply) return 0
power_supply.give(100)
update_icon()
return 1
attackby(obj/item/W, mob/user)
if(W==src)
if(icon_state=="bluetag")
icon_state="redtag"
ammo_type = list(/obj/item/ammo_casing/energy/laser/growthray)
else
icon_state="bluetag"
ammo_type = list(/obj/item/ammo_casing/energy/laser/shrinkray)
return ..()
/obj/item/weapon/gun/energy/laser/sizeray/one
name="shrink ray"
/obj/item/weapon/gun/energy/laser/sizeray/two
name="growth ray"
icon_state = "redtag"
ammo_type = list(/obj/item/ammo_casing/energy/laser/growthray)
///////////////////////
//PIXEL_Y UPDATE PROC//
///////////////////////
/*
/mob/update_pixel_y(mob/living/user)
..()
var/final_pixel_y = null
var/matrix/mtrx=new()
if(mtrx.Scale(0.5))
pixel_y = -8
final_pixel_y = -8
return
if(mtrx.Scale(0.7))
pixel_y = -4
final_pixel_y = -4
return
if(mtrx.Scale(1))
pixel_y = 0
final_pixel_y = 0
return
if(mtrx.Scale(1.5))
pixel_y = 8
final_pixel_y = 8
return
if(mtrx.Scale(2))
pixel_y = 16
final_pixel_y = 16
return
else
pixel_y = 0 //just in case you somehow ended up with some other size we'll put you back to normal
return
*/
+143
View File
@@ -0,0 +1,143 @@
//Ehh, I'll copy some of the worm code. It will need a lot of changes to work right, though.
/mob/living/simple_animal/naga_segment
pixel_x=-16
pixel_y=-16
icon='icons/mob/special/naga.dmi'
icon_state="tail"
name="naga tail"
density = 0
anchored=1
layer=3
stop_automated_movement = 1
animate_movement = NO_STEPS
var/mob/living/simple_animal/naga_segment/previous
var/mob/living/simple_animal/naga_segment/next
var/ticks_away = 0
var/global/next_naga_id=1
var/id=0
var/internal_id=0
var/mob/living/human=null
speed = -1
main
animate_movement = NO_STEPS
New(var/location, var/segments = 6)
..()
id=next_naga_id
next_naga_id++
var/mob/living/simple_animal/naga_segment/current = src
for(var/i = 1 to segments)
var/mob/living/simple_animal/naga_segment/newSegment = new /mob/living/simple_animal/naga_segment/(loc)
current.Attach(newSegment)
current = newSegment
current.id=id
current.internal_id=i
Life()
..()
if(human&&loc!=human.loc)
Move(human.loc)
if(loc!=human.loc)
loc=human.loc
crumple(1)
if(next && !(next in view(src,1)))
ticks_away++
if(ticks_away>2)
crumple()
else
ticks_away=0
if(stat == DEAD)
if(next)
next.previous=null
next=null
//move bulges and digest procs here
update_icon()
return
//Delete()
// if(previous)
// previous.Detach()
// ..()
Move()
var/attachementNextPosition = loc
if(..())
if(previous)
previous.Move(attachementNextPosition)
update_icon()
proc/crumple(var/humhead=0)
if(!humhead)
loc=next.loc
if(previous)
previous.crumple()
proc/update_icon()
//if(stat == CONSCIOUS || stat == UNCONSCIOUS)
if(!istype(loc,/turf/))return
if(!next&&!previous)
icon_state="tailSEVERED"
return
var/next_d=0
if(next&&next.loc!=src.loc)
next_d=get_dir(src,next)
if(previous)
var/prev_d=0
if(previous.loc!=src.loc)
prev_d=get_dir(src,previous)
if(next_d==prev_d)
icon_state="tail0-[prev_d]"
else if(prev_d<next_d)
icon_state="tail[prev_d]-[next_d]"
else
icon_state="tail[next_d]-[prev_d]"
else
icon_state="tail[next_d]" //if 0, blank icon
//and now, move to top of previous parts
var/lowest_id=-1
for(var/mob/living/simple_animal/naga_segment/ns in loc)
if(ns==src)continue
if(ns.id!=src.id)continue
if(lowest_id==-1||ns.internal_id<lowest_id)
lowest_id=ns.internal_id
if(internal_id<lowest_id)
var/turf/T = src.loc
src.loc = null
src.loc = T
return
proc/Attach(var/mob/living/simple_animal/naga_segment/attachement)
if(!attachement)
return
previous = attachement
attachement.next = src
return
proc/Detach(die = 0)
//var/mob/living/simple_animal/naga_segment/newHead = new /mob/living/simple_animal/naga_segment/main(loc,0)
//var/mob/living/simple_animal/naga_segment/newHeadPrevious = previous
if(next)
next.previous=null
next=null
//newHead.Attach(newHeadPrevious)
//if(die)
// newHead.Die()
//del(src)
+642
View File
@@ -0,0 +1,642 @@
obj/vore_preferences
// 0 = current vore mode, 1 = inside view, 2 = vore abilities, 3 = banned vores
var/current_tab = 0
var/tab_mod = 0
var/mob/living/target
var/loop //might as well make this a global list later instead
/obj/vore_preferences/New(client/C)
//Get preferences
loop=src
if(!target) return
for(var/obj/vore_preferences/VP in world)
if(VP!=src&&VP.target==target)
if(target.ckey=="jayehh" && "poojawa" && "nebulacallisto" && "leonleonardo" && "brimcon" && "cyrema" && "mrsebbi" && "subtumaka")
target << "<B>DEBUG:</B> Deleted an old vore panel with a tab of [VP.current_tab]."
//VP.loop=0
return
/obj/vore_preferences
proc/GetOrgan(var/organ)
switch(organ)
if("cock")
return target.vore_cock_datum
if("balls")
return target.vore_balls_datum
if("womb")
return target.vore_womb_datum
if("breast")
return target.vore_breast_datum
if("tail")
return target.vore_tail_datum
if("insole")
return target.vore_insole_datum
if("insuit")
return target.vore_insuit_datum
else
return target.vore_stomach_datum
proc/GenerateMethodSwitcher(var/method,var/alt_name)
var/dat=""
dat += "<a href='?src=\ref[src];preference=current;method=[method]' [target.vore_current_method == method ? "class='linkOn'" : ""]>[alt_name]</a> "
return dat
proc/GenerateAbilitySwitcher(var/method,var/alt_name)
var/dat=""
dat += "<B>[alt_name]:</B> "
if(method!=VORE_METHOD_ORAL)
dat += AbilityHelper(method,VORE_SIZEDIFF_DISABLED,"Disable")
dat += AbilityHelper(method,VORE_SIZEDIFF_TINY,"Tiny")
dat += AbilityHelper(method,VORE_SIZEDIFF_SMALLER,"Smaller")
dat += AbilityHelper(method,VORE_SIZEDIFF_SAMESIZE,"Same-Size")
dat += AbilityHelper(method,VORE_SIZEDIFF_DOUBLE,"Bigger")
if(target.vore_ability[num2text(VORE_METHOD_ORAL)]==VORE_SIZEDIFF_ANY)
dat += AbilityHelper(method,VORE_SIZEDIFF_ANY,"Any")
dat += "<BR>"
return dat
proc/AbilityHelper(var/method,var/size,var/alt_name)
var/dat=""
if(method==VORE_METHOD_ORAL||size<=target.vore_ability[num2text(VORE_METHOD_ORAL)])
dat += "<a href='?src=\ref[src];preference=ability;method=[method];size=[size]' [target.vore_ability[num2text(method)]==size ? "class='linkOn'" : ""]>[alt_name]</a> "
return dat
proc/GenerateBanSwitcher(var/method,var/alt_name)
var/dat=""
dat += "[target.vore_banned_methods&method ? "<B>" : ""]<a href='?src=\ref[src];preference=ban;method=[method]'>[alt_name]</a>[target.vore_banned_methods&method ? "</B>" : ""] "
return dat
proc/GenerateExBanSwitcher(var/method,var/alt_name)
var/dat=""
dat += "[target.vore_extra_bans&method ? "<B>" : ""]<a href='?src=\ref[src];preference=exban;method=[method]'>[alt_name]</a>[target.vore_extra_bans&method ? "</B>" : ""] "
return dat
proc/GenerateDigestionSwitcher(var/organ)
var/dat=""
var/datum/vore_organ/VD=GetOrgan(organ)
var/datum/vore_organ/temp_chk=GetOrgan("stomach")
dat += "<B>Digestion: </B>"
if(temp_chk.factor_offset<0)dat += "<a href='?src=\ref[src];preference=digest_h;organ=[organ]' [VD.healing_factor > 0 ? "class='linkOn'" : ""]>Heal</a> "
if(temp_chk.factor_offset<1)dat += "<a href='?src=\ref[src];preference=digest;speed=[VORE_DIGESTION_SPEED_NONE];organ=[organ]' [(VD.digestion_factor+VD.healing_factor) == VORE_DIGESTION_SPEED_NONE ? "class='linkOn'" : ""]>None</a> "
dat += "<a href='?src=\ref[src];preference=digest;speed=[VORE_DIGESTION_SPEED_SLOW];organ=[organ]' [VD.digestion_factor == VORE_DIGESTION_SPEED_SLOW ? "class='linkOn'" : ""]>Slow</a> "
if(temp_chk.factor_offset>-1)dat += "<a href='?src=\ref[src];preference=digest;speed=[VORE_DIGESTION_SPEED_FAST];organ=[organ]' [VD.digestion_factor == VORE_DIGESTION_SPEED_FAST ? "class='linkOn'" : ""]>Normal</a> "
if(temp_chk.factor_offset>0)dat += "<a href='?src=\ref[src];preference=digest;speed=[VORE_DIGESTION_SPEED_ABNORMAL];organ=[organ]' [VD.digestion_factor == VORE_DIGESTION_SPEED_ABNORMAL ? "class='linkOn'" : ""]>Fast</a> "
dat += "<BR>"
return dat
proc/GenerateRelease(var/organ)
var/dat=""
var/datum/vore_organ/VD=GetOrgan(organ)
dat += "You will <a href='?src=\ref[src];preference=trap;organ=[organ];keep=[VD.escape ? "0" : "1"]'>[VD.escape ? "" : "not "]let</a> people escape. "
dat += "<a href='?src=\ref[src];preference=release;organ=[organ]'>Release</a>"
if(organ=="stomach")
dat += "<a href='?src=\ref[src];preference=release;organ=[organ];extra_info=[VORE_EXTRA_FULLTOUR]'>Fulltour</a>"
if(organ=="cock"||organ=="breast"||organ=="womb")
dat += "<a href='?src=\ref[src];preference=tab;tab=7;mod=[organ]'>Into</a>"
dat+="<BR>"
return dat
proc/ShowChoices(mob/user)
loop=src
if(!user || !user.client) return
if(!target) return //the =="kingpygmy" was alerting me to this.
var/dat = "<center>"
if(istype(target,/datum/preferences))
if(current_tab<2||current_tab>3)
if(current_tab!=8)
current_tab=2
dat += "<a href='?src=\ref[src];preference=tab;tab=2' [current_tab == 2 ? "class='linkOn'" : ""]>\[Ability\]</a> "
dat += "<a href='?src=\ref[src];preference=tab;tab=3' [current_tab == 3 ? "class='linkOn'" : ""]>\[Bans\]</a> "
dat += "<a href='?src=\ref[src];preference=tab;tab=8' [current_tab == 8 ? "class='linkOn'" : ""]>\[Other\]</a>"
else
dat += "<a href='?src=\ref[src];preference=tab;tab=0' [current_tab == 0 ? "class='linkOn'" : ""]>\[Manage\]</a> "
//if(target.get_last_organ_in())
dat += "<a href='?src=\ref[src];preference=tab;tab=1' [current_tab == 1 ? "class='linkOn'" : ""]>\[Inside\]</a> "
dat += "<a href='?src=\ref[src];preference=tab;tab=2' [current_tab == 2 ? "class='linkOn'" : ""]>\[Ability\]</a> "
dat += "<a href='?src=\ref[src];preference=tab;tab=3' [current_tab == 3 ? "class='linkOn'" : ""]>\[Bans\]</a> "
dat += "<a href='?src=\ref[src];preference=tab;tab=8' [current_tab == 8 ? "class='linkOn'" : ""]>\[Other\]</a>"
if(target.ckey=="jayehh")
dat += " <a href='?src=\ref[src];preference=tab;tab=4' [current_tab == 4 ? "class='linkOn'" : ""]>\[Debug\]</a>"
dat += "</center>"
switch(current_tab)
if (0) //Manage Organs
dat += "<BR>"
dat += " <h2>Current Vore Method</h2>"
dat += GenerateMethodSwitcher(VORE_METHOD_ORAL,"Oral")
dat += GenerateMethodSwitcher(VORE_METHOD_ANAL,"Anal")
dat += GenerateMethodSwitcher(VORE_METHOD_COCK,"Cock")
dat += GenerateMethodSwitcher(VORE_METHOD_UNBIRTH,"Unbirth")
dat += GenerateMethodSwitcher(VORE_METHOD_BREAST,"Breast")
dat += GenerateMethodSwitcher(VORE_METHOD_TAIL,"Tail")
dat += "<BR>"
dat += GenerateMethodSwitcher(VORE_METHOD_INSOLE,"Insole")
dat += GenerateMethodSwitcher(VORE_METHOD_INSUIT,"In Suit")
dat += "(These two aren't vore)"
dat += "<BR>"
dat += "On clicking self, <a href='?src=\ref[src];preference=click;mode=[target.vore_mode==VORE_MODE_EAT ? VORE_MODE_FEED : VORE_MODE_EAT]'>[target.vore_mode==VORE_MODE_EAT ? "eat" : "feed"]</a> the grabbed person"
dat += "<a href='?src=\ref[src];preference=headfirst;mode=[!target.vore_head_first]'>[target.vore_head_first ? "head-first" : "feet-first"]</a>."
if(!target.vore_head_first)
dat+="<br>(Foot-first not currently not finsihed. Only works when you are the one eating prey.)"
dat += "<BR><BR>"
dat += "<B>Remains:</B>"
dat += " <a href='?src=\ref[src];preference=set_remains;mode=[VORE_REMAINS_NONE]'[target.vore_remains_mode == VORE_REMAINS_NONE ? "class='linkOn'" : ""]>None</a>"
dat += " <a href='?src=\ref[src];preference=set_remains;mode=[VORE_REMAINS_GENERIC]'[target.vore_remains_mode == VORE_REMAINS_GENERIC ? "class='linkOn'" : ""]>Generic</a>"
dat += " <a href='?src=\ref[src];preference=set_remains;mode=[VORE_REMAINS_NAMED]'[target.vore_remains_mode == VORE_REMAINS_NAMED ? "class='linkOn'" : ""]>Named</a>"
dat += " <h2>Stomach</h2>"
dat += GenerateDigestionSwitcher("stomach")
dat += GenerateRelease("stomach")
if(target.has_vagina())
dat += " <h2>Womb</h2>"
dat += GenerateDigestionSwitcher("womb")
dat += "<B>Transformation: </B><a href='?src=\ref[src];preference=tab;tab=6;mod=womb'>Set</a>[target.vore_womb_datum.tf_factor ? "(On)" : ""]<BR>"
dat += GenerateRelease("womb")
if(target.has_cock())
dat += " <h2>Cock</h2>"
dat += GenerateDigestionSwitcher("cock")
dat += "<B>Balls </B>"
dat += GenerateDigestionSwitcher("balls")
dat += "<B>Cock Transformation: </B><a href='?src=\ref[src];preference=tab;tab=6;mod=cock'>Set</a>[target.vore_cock_datum.tf_factor ? "(On)" : ""]<BR>"
dat += "<B>Balls Transformation: </B><a href='?src=\ref[src];preference=tab;tab=6;mod=balls'>Set</a>[target.vore_balls_datum.tf_factor ? "(On)" : ""]<BR>"
dat += "<B>Move to balls: </B>"
dat += "<a href='?src=\ref[src];preference=transfer;speed=[VORE_TRANSFER_SPEED_NONE];organ=cock;dest=balls' [target.vore_cock_datum.transfer_factor == VORE_TRANSFER_SPEED_NONE ? "class='linkOn'" : ""]>No</a> "
dat += "<a href='?src=\ref[src];preference=transfer;speed=[VORE_TRANSFER_SPEED_FAST];organ=cock;dest=balls' [target.vore_cock_datum.transfer_factor == VORE_TRANSFER_SPEED_FAST ? "class='linkOn'" : ""]>Yes</a> "
dat += "<BR>"
dat += GenerateRelease("cock")
if(target.has_boobs())
dat += " <h2>Breast</h2>"
dat += GenerateDigestionSwitcher("breast")
dat += GenerateRelease("breast")
if(target.kpcode_mob_has_tail())
dat += " <h2>Tail</h2>"
dat += GenerateDigestionSwitcher("tail")
dat += "<B>Move to stomach: </B>"
dat += "<a href='?src=\ref[src];preference=transfer;speed=[VORE_TRANSFER_SPEED_NONE];organ=tail;dest=stomach' [target.vore_tail_datum.transfer_factor == VORE_TRANSFER_SPEED_NONE ? "class='linkOn'" : ""]>No</a> "
dat += "<a href='?src=\ref[src];preference=transfer;speed=[VORE_TRANSFER_SPEED_SLOW];organ=tail;dest=stomach' [target.vore_tail_datum.transfer_factor == VORE_TRANSFER_SPEED_SLOW ? "class='linkOn'" : ""]>Yes</a> "
dat += "<BR>"
dat += GenerateRelease("tail")
else if(target.vore_tail_datum.contents.len)
target.vore_tail_datum.release()
dat += " <h2>Inside your Suit</h2>"
dat += "<a href='?src=\ref[src];preference=release;organ=insuit'>Unzip your suit</a>"
if (1) //Inside View
dat += "<BR>"
var/datum/vore_organ/container=target.get_last_organ_in()
if(!container)
dat += "You are not currently inside someone."
else if(istype(container,/datum/vore_organ/stomach))
dat += "You are in [container.owner]'s stomach. It is soft, wet, and moving.The walls gently squeeze around you from all sides as their heartbeat and breathing echo in your ears. The gurgles of their digestive system rumble all around you."
if(container.digestion_factor==VORE_DIGESTION_SPEED_SLOW)
dat += "You feel a slight, burning tingle on your skin.The walls work at kneading over your form to soften you up. You're being digested! "
else if(container.digestion_factor)
dat += "Your body is quickly digesting and the air is getting more and more thin after that belch! You won't last long! "
if(container.has_people()>1)
dat += "You can feel [container.has_people()-1] other [container.has_people()>2 ? "people" : "person"] in the stomach. "
else if(istype(container,/datum/vore_organ/cock)||istype(container,/datum/vore_organ/balls))
dat += "You are in [container.owner]'s [istype(container,/datum/vore_organ/cock) ? "cock" : "balls"]. "
if(container.digestion_factor==VORE_DIGESTION_SPEED_SLOW)
dat += "You feel a slight, burning tingle on your skin. You're being melted! "
else if(container.digestion_factor)
dat += "Your body is quickly turning into [container.owner] [pick("spooge","cum","semen","batter","seed")] and the air is scarce. You won't last long! "
if(container.has_people()>1)
dat += "You can feel [container.has_people()-1] other [container.has_people()>2 ? "people" : "person"] in your cum-drenched and musky prison. Their forms press up close to your own. "
if(container.digestion_count)
dat += "It seems the cum was once a person or thing... or maybe even multiple? "
else if(istype(container,/datum/vore_organ/womb))
dat += "You are in [container.owner]'s womb. The smooth walls press over you, suspending you in a feeling of almost zero gravity. Their heartbeat and breathing is quieter here, and the gurgles of their digestive system join the internal song."
if(container.digestion_factor==VORE_DIGESTION_SPEED_SLOW||container.tf_factor)
dat += "You feel a slight, odd tingle on your skin. The warmth should make you doze off soon enough. "
else if(container.digestion_factor)
dat += "Your body is quickly digesting within [container.owner]'s womb, the air is thin and you're already having trouble staying awake "
if(container.has_people()>1)
dat += "You can feel [container.has_people()-1] other [container.has_people()>2 ? "people" : "person"] in your fleshy prison. "
else if(istype(container,/datum/vore_organ/breast))
dat += "You are in [container.owner]'s breast. "
if(container.digestion_factor)
dat += "Your body is getting rather milky, you're being melted inside these breasts! "
if(container.has_people()>1)
dat += "You can feel [container.has_people()-1] other [container.has_people()>2 ? "people" : "person"] in your jiggly prison. "
else if(istype(container,/datum/vore_organ/tail))
dat += "You are in [container.owner]'s tail. Each shift of their hips causes your world to move about ever so much. "
if(container.digestion_factor==VORE_DIGESTION_SPEED_SLOW)
dat += "You feel a slight, burning tingle on your skin. The swaying is luring you to just close your eyes and give in. "
else if(container.digestion_factor)
dat += "Your body is quickly digesting as a lump inside [container.owner]'s tail. The air is thin and you won't last much longer! "
if(container.has_people()>1)
dat += "You can feel [container.has_people()-1] other [container.has_people()>2 ? "people" : "person"] in your fleshy prison. "
if(container.transfer_factor)
dat += "The tail's muscles are sliding you somewhere deeper inside of your predator, you can already feel parts of you being squeezed into the wrinkled folds of that stomach."
else if(istype(container,/datum/vore_organ/insole))
dat += "You are pressed against [container.owner]'s foot. Each step they take presses over your form. "
else if(istype(container,/datum/vore_organ/insuit))
dat += "You are pressed against [container.owner]'s form. It is very stuffy, and their scent is all around you. "
else
dat += "You're not sure where you are. "
dat += "<BR>"
dat += "<BR>"
var/datum/vore_organ/orgch
orgch=GetOrgan("stomach")
if(orgch.has_people())
dat += "Your [orgch.digestion_factor ? "gurgly " : ""]stomach [pick("bulges","swells","is distended")] with [orgch.has_people()] [orgch.has_people()>1 ? "people" : "person"]. "
dat += "<BR>"
orgch=GetOrgan("womb")
if(orgch.has_people())
dat += "You have [orgch.digestion_factor ? "kneading " : ""] womb [pick("bulges","swells","is distended")] with [orgch.has_people()] [orgch.has_people()>1 ? "people" : "person"] withing your lower belly. Their weight is liable to be a pleasent addition to your hips. "
dat += "<BR>"
orgch=GetOrgan("cock")
if(orgch.has_people()||orgch.digestion_count)
dat += "Your cock swells with [orgch.has_people()+orgch.digestion_count] [orgch.has_people()+orgch.digestion_count>1 ? "people" : "person"]. "
if(orgch.digestion_count)
dat += "Not that they're not [pick("spooge","batter","seed")] by now. "
dat += "<BR>"
orgch=GetOrgan("balls")
if(orgch.has_people()||orgch.digestion_count)
dat += "Your balls swell with [orgch.has_people()+orgch.digestion_count] [orgch.has_people()+orgch.digestion_count>1 ? "people" : "person"]. "
if(orgch.digestion_count)
dat += "Not that they're not [pick("spooge","batter","seed")] by now. "
dat += "<BR>"
orgch=GetOrgan("breast")
if(orgch.has_people()||orgch.digestion_count)
dat += "Your breasts swell with [orgch.has_people()+orgch.digestion_count] [orgch.has_people()+orgch.digestion_count>1 ? "people" : "person"]. "
if(orgch.digestion_count)
dat += "They may just be milk, though. "
dat += "<BR>"
orgch=GetOrgan("tail")
if(orgch.has_people())
dat += "Your tail has a wriggly lump[orgch.has_people()>1 ? "s" : ""] within it[orgch.transfer_factor ? " that slowly moves toward the base of it, your stomach will swell out soon" : ""]. "
dat += "<BR>"
orgch=GetOrgan("insole")
if(orgch.has_people())
dat += "Your insole[orgch.has_people()>1 ? "s" : ""] fit[orgch.has_people()>1 ? "" : "s"] snugly against your [orgch.has_people()>1 ? "feet" : "foot"]. Each step you make is pressing against them. "
dat += "<BR>"
orgch=GetOrgan("insuit")
if(orgch.has_people())
dat += "[orgch.has_people()>1 ? "Smaller people" : "A smaller person"] squirm[orgch.has_people()>1 ? "" : "s"] in your clothes, against your form."
dat += "<BR>"
if (2) //Vore Abilities
target.vore_ability=sanitize_vore_list(target.vore_ability)
dat += "<BR>"
dat += " <B>Select what size difference you can vore at.</B> As a failsafe, alternative vore can not be raised past oral. To change alternative vores to go higher, please adjust oral.<BR>"
dat += GenerateAbilitySwitcher(VORE_METHOD_ORAL,"Oral")
dat += GenerateAbilitySwitcher(VORE_METHOD_ANAL,"Anal")
dat += GenerateAbilitySwitcher(VORE_METHOD_COCK,"Cock")
dat += GenerateAbilitySwitcher(VORE_METHOD_UNBIRTH,"Unbirth")
dat += GenerateAbilitySwitcher(VORE_METHOD_BREAST,"Breast")
if(istype(target,/datum/preferences)||target.kpcode_mob_has_tail())
dat += GenerateAbilitySwitcher(VORE_METHOD_TAIL,"Tail")
if(istype(target,/datum/preferences))
var/datum/preferences/PD=target
dat += "<BR>"
dat += "<h2>Sex Organs</h2>"
dat += "<B>Cock: </B>"
var/youhavea="no"
switch(PD.p_cock["has"])
if(1)
youhavea="one"
if(2)
youhavea="a huge"
if(3)
youhavea="two"
dat += "You have <a href='?src=\ref[src];preference=cock;change=has'>[youhavea]</a> cock[youhavea=="two" ? "s" : ""]."
dat += "<BR>Type: <a href='?src=\ref[src];preference=cock;change=type'>[PD.p_cock["type"]]</a>"
dat += "<BR>Colour: <span style='border:1px solid #161616; background-color: #[PD.p_cock["color"]];'>&nbsp;&nbsp;&nbsp;</span> "
dat += "<a href='?src=\ref[src];preference=cock;change=color'>(Change)</a><BR>"
dat += "<B>Vagina: </B>"
dat += "<a href='?src=\ref[src];preference=vagina;change=has'>You [PD.p_vagina ? "have" : "don't have"] one.</a><BR>"
//dat += "<BR>Show extra info when examining others? "
//dat += "<a href='?src=\ref[src];preference=showgen'>[PD.show_gen ? "Yes" : "No"]</a><BR>"
if (3) //Vore Bans
dat += "<BR>"
dat += " <B>Click a method to ban it.</B> Banned methods will appear in bold. When banned, you cannot be eaten with this vore type.<BR>"
//dat += GenerateBanSwitcher(VORE_METHOD_ORAL,"Oral") Doesn't work yet
dat += GenerateBanSwitcher(VORE_METHOD_COCK,"Cock")
dat += GenerateBanSwitcher(VORE_METHOD_ANAL,"Anal")
dat += GenerateBanSwitcher(VORE_METHOD_UNBIRTH,"Unbirth")
dat += GenerateBanSwitcher(VORE_METHOD_BREAST,"Breast")
dat += GenerateBanSwitcher(VORE_METHOD_TAIL,"Tail")
dat += "<BR>"
dat += GenerateBanSwitcher(VORE_METHOD_INSOLE,"Insole")
dat += GenerateBanSwitcher(VORE_METHOD_INSUIT,"In Suit")
dat += "<BR>"
dat += " <B>These ones involve release.</B> If you are digested while one of these bans are enabled, the predator will have to use a non-banned release to use the banned method again.<BR>"
dat += GenerateExBanSwitcher(VORE_EXTRA_FULLTOUR,"Fulltour")
dat += GenerateExBanSwitcher(VORE_EXTRA_REMAINS,"Remains")
if (4) //Debug?!
// dat += "<BR>"
// if(target.ckey=="jayehh"|| "poojawa"|| "nebulacallisto"|| "leonleonardo"|| "brimcon"|| "cyrema"|| "mrsebbi"|| "subtumaka")
// dat += "<h2>Debug Options</h2>"
// dat += "<B>Vore Log:</B> <a href='?src=\ref[src];preference=tab;tab=5;mod=vore'>Check</a>"
// dat += "<BR><B>Observe Log:</B> <a href='?src=\ref[src];preference=tab;tab=5;mod=observe'>Check</a>"
// dat += "<BR><B>Whitelist:</B> <a href='?src=\ref[src];preference=tab;tab=5;mod=whitelist'>Check</a>"
// //dat += "<BR><B>World Log:</B> <a href='?src=\ref[src];preference=tab;tab=5;mod=world'>Check</a>"
// dat += "<BR><B>Size: </B>"
// dat += "<a href='?src=\ref[src];preference=grow'>Grow</a>"
// dat += "<a href='?src=\ref[src];preference=shrink'>Shrink</a>"
// dat += "<BR><B>Taur: </B>"
// dat += "<a href='?src=\ref[src];preference=taur'>Toggle</a>"
// //dat += "<BR><B>Naga: </B>"
// //dat += "<a href='?src=\ref[src];preference=naga'>On</a>"
// dat += "<BR><B>Spawn: </B>"
// //dat += "<a href='?src=\ref[src];preference=spawn;item=narky'>Narky Gear</a>"
// dat += "<a href='?src=\ref[src];preference=spawn;item=shrink'>Shrink Ray</a>"
// dat += "<a href='?src=\ref[src];preference=spawn;item=grow'>Growth Ray</a>"
// if (5) //Log menu. Logically, if Poojawa bastardizes enough code, it'll work, right?
// dat += "<BR>"
// if(target.ckey=="jayehh"|| "poojawa"|| "nebulacallisto"|| "leonleonardo"|| "brimcon"|| "cyrema"|| "mrsebbi"|| "subtumaka")
// switch(tab_mod)
// if("observe")
// dat += "<h2>Observe Log</h2>"
// dat += global_observe_log
//if("world")
// dat += "<h2>World Log</h2>"
// if("whitelist")
// dat += "<h2>Whitelist</h2>"
// for(var/txt in whitelist_keys)
// dat+="[txt]<BR>"
// else
// dat += "<h2>Vore Log</h2>"
// dat += global_vore_log
if (6) //Transformation menu.
dat += "<BR>"
dat += "<h2>Transformation Menu</h2>"
var/datum/vore_organ/VO=GetOrgan(tab_mod)
dat += "Transformation for [tab_mod]: <a href='?src=\ref[src];preference=transform;organ=[tab_mod]'>Set</a>[VO.tf_factor ? "(On)" : ""]<BR>"
dat += "Work in progress. This button will be replaced with a full menu here."
if (7) //Transfer menu.
dat += BuildTransfer()
if (8) //Donate menu
dat += "<BR>"
dat += "<h2>Whitelist</h2>"
dat += "Due to issues with griefers, we have whitelisted a few features. This is only to prevent one-shot griefing, and the list will not be difficult to get into."
dat += "<BR><b>Status:</b> "
if(is_whitelisted(target.ckey))
dat +="<img src=large_stamp-deny.png>You are whitelisted. You will be able to respawn and play as head roles."
else
dat +="<img src=large_stamp-ok.png>You are not whitelisted. You will not be able to use head roles while the head whitelisting is toggled on. To become whitelisted, keep playing until we know you're not around just to cause trouble. You can also have someone trusted vouch for you."
dat += "<BR><h2>Donations</h2>"
dat += "In order to keep the server running, payment is required monthly. It is greatly appreciated for even the smallest amount of donations. Without them, it becomes difficult to keep the server afloat."
dat += "By donating you can prevent this issue and allow it to continue running. As well as helping out the server, your name will be added to the donator list and you will be priority in having suggestions, ideas, and <b>certain</b> cosmetics added for personal use."
dat += "<BR>"
dat += {"
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
<input type="hidden" name="cmd" value="_s-xclick">
<input type="hidden" name="encrypted" value="-----BEGIN PKCS7-----MIIHLwYJKoZIhvcNAQcEoIIHIDCCBxwCAQExggEwMIIBLAIBADCBlDCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtQYXlQYWwgSW5jLjETMBEGA1UECxQKbGl2ZV9jZXJ0czERMA8GA1UEAxQIbGl2ZV9hcGkxHDAaBgkqhkiG9w0BCQEWDXJlQHBheXBhbC5jb20CAQAwDQYJKoZIhvcNAQEBBQAEgYBa9x4yJhRp3SKeVGmhId+rO0BDUm/3BsRr5frmkV+Id96TuI8MxRbz8tbMpyGqbPbFL1AdZpkZ8/4Ji7eD91Ypc0YioEolBwwJO6Hu9A/vKzb9l1QqgqgXoFtdpg/iBqm8ebuIbOr9En2irCBD/tRfpQc69cUl1/WKCB3+R105kjELMAkGBSsOAwIaBQAwgawGCSqGSIb3DQEHATAUBggqhkiG9w0DBwQI9P3sbLOEPVSAgYhqiCLcXvYoI9FYL73LsuE1gGp4EVvo6aMNW4ci9OYbW/Si+Qk+lIAMx7KKx8Hxsb3OaGuJ2TvLUaTv0ZDSa7O0w3sJVdynfxWcsmh+hX12LKXlL9yiTVPSeLwinLgKioZcR7QuSX7Jj6WYjo721M01g80N9G36RiPp94Wc5TGVLkFT9s2vIz5poIIDhzCCA4MwggLsoAMCAQICAQAwDQYJKoZIhvcNAQEFBQAwgY4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLUGF5UGFsIEluYy4xEzARBgNVBAsUCmxpdmVfY2VydHMxETAPBgNVBAMUCGxpdmVfYXBpMRwwGgYJKoZIhvcNAQkBFg1yZUBwYXlwYWwuY29tMB4XDTA0MDIxMzEwMTMxNVoXDTM1MDIxMzEwMTMxNVowgY4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLUGF5UGFsIEluYy4xEzARBgNVBAsUCmxpdmVfY2VydHMxETAPBgNVBAMUCGxpdmVfYXBpMRwwGgYJKoZIhvcNAQkBFg1yZUBwYXlwYWwuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDBR07d/ETMS1ycjtkpkvjXZe9k+6CieLuLsPumsJ7QC1odNz3sJiCbs2wC0nLE0uLGaEtXynIgRqIddYCHx88pb5HTXv4SZeuv0Rqq4+axW9PLAAATU8w04qqjaSXgbGLP3NmohqM6bV9kZZwZLR/klDaQGo1u9uDb9lr4Yn+rBQIDAQABo4HuMIHrMB0GA1UdDgQWBBSWn3y7xm8XvVk/UtcKG+wQ1mSUazCBuwYDVR0jBIGzMIGwgBSWn3y7xm8XvVk/UtcKG+wQ1mSUa6GBlKSBkTCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtQYXlQYWwgSW5jLjETMBEGA1UECxQKbGl2ZV9jZXJ0czERMA8GA1UEAxQIbGl2ZV9hcGkxHDAaBgkqhkiG9w0BCQEWDXJlQHBheXBhbC5jb22CAQAwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQCBXzpWmoBa5e9fo6ujionW1hUhPkOBakTr3YCDjbYfvJEiv/2P+IobhOGJr85+XHhN0v4gUkEDI8r2/rNk1m0GA8HKddvTjyGw/XqXa+LSTlDYkqI8OwR8GEYj4efEtcRpRYBxV8KxAW93YDWzFGvruKnnLbDAF6VR5w/cCMn5hzGCAZowggGWAgEBMIGUMIGOMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC1BheVBhbCBJbmMuMRMwEQYDVQQLFApsaXZlX2NlcnRzMREwDwYDVQQDFAhsaXZlX2FwaTEcMBoGCSqGSIb3DQEJARYNcmVAcGF5cGFsLmNvbQIBADAJBgUrDgMCGgUAoF0wGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMTQwNjExMDUxOTIzWjAjBgkqhkiG9w0BCQQxFgQUN4QWza5kaWSdP54QYXSbtBSHnUgwDQYJKoZIhvcNAQEBBQAEgYBNf+DRVc9d9YPCHmzcOj5MihZj2oUORmt9xyE9z0c0OTfMjaapfmHmQo1IBl71caVA6fdrQFHapkvutWxWsrP0KiTUaEy79o3QO9dal2wLg/xIE6gDBf+PNsMHE8/u1p2dwc2n9iyWuLrUdJ7aIUE7idU1Ls2lA8UczMdSuBL00A==-----END PKCS7-----
">
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
<img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
</form>
"}
var/datum/browser/popup = new(user, "voreprefs", "<div align='center'>Vore Panel</div>", 0, 0, src)
popup.set_content(dat)
popup.open(0)
Topic(href, href_list)
if(..())
return
if(istype(target,/mob) && usr!=target)
usr<<"They are not you."
return
if(href_list["preference"] == "tab")
current_tab=text2num(href_list["tab"])
if(href_list["mod"])
tab_mod=href_list["mod"]
if(href_list["preference"] == "current")
target.vore_current_method = text2num(href_list["method"])
if(href_list["preference"] == "click")
target.vore_mode = text2num(href_list["mode"])
if(href_list["preference"] == "headfirst")
target.vore_head_first = text2num(href_list["mode"])
if(href_list["preference"] == "ability")
target.vore_ability[href_list["method"]] = text2num(href_list["size"])
if(text2num(href_list["method"])==VORE_METHOD_ORAL)
var/list/check_methods=list(VORE_METHOD_ANAL,VORE_METHOD_COCK,VORE_METHOD_UNBIRTH,VORE_METHOD_BREAST,VORE_METHOD_TAIL)
for(var/N in check_methods)
if(target.vore_ability[num2text(N)]>text2num(href_list["size"]))
target.vore_ability[num2text(N)]=text2num(href_list["size"])
if(href_list["preference"] == "ban")
var/method=text2num(href_list["method"])
if(target.vore_banned_methods&method)
target.vore_banned_methods &= ~method
else
target.vore_banned_methods |= method
if(href_list["preference"] == "exban")
var/method=text2num(href_list["method"])
if(target.vore_extra_bans&method)
target.vore_extra_bans &= ~method
else
target.vore_extra_bans |= method
if(href_list["preference"] == "digest")
var/datum/vore_organ/VD=GetOrgan(href_list["organ"])
var/set_speed=text2num(href_list["speed"])
if(target.reagents)
if(target.reagents.has_reagent("noantacid")&&set_speed<VD.digestion_factor)
target << "It's not working!"
return
if(target.reagents.has_reagent("antacid")&&set_speed>VD.digestion_factor)
target << "It's not working!"
return
VD.digestion_factor = set_speed
VD.healing_factor = 0
VD.tf_factor = 0
if(VD.has_people())
vore_admins("[VD.owner]'s [VD.type] digestion changed to [VD.digestion_factor].",VD.owner)
if(href_list["preference"] == "digest_h")
if(target.reagents)
if(target.reagents.has_reagent("antacid")||target.reagents.has_reagent("noantacid"))
target << "You can't control your ability to heal."
return
var/datum/vore_organ/VD=GetOrgan(href_list["organ"])
VD.digestion_factor = 0
VD.healing_factor = 1
VD.tf_factor = 0
if(VD.has_people())
vore_admins("[VD.owner]'s [VD.type] set to heal.",VD.owner)
if(href_list["preference"] == "release")
var/datum/vore_organ/VD=GetOrgan(href_list["organ"])
if(href_list["extra_info"])
VD.release(extra_info=text2num(href_list["extra_info"]))
else
VD.release()
if(href_list["preference"] == "set_remains")
target.vore_remains_mode=text2num(href_list["mode"])
if(href_list["preference"] == "dispense")
var/datum/vore_organ/VD=GetOrgan(href_list["organ"])
VD.dispense(text2num(href_list["amount"]),href_list["name"])
if(href_list["preference"] == "trap")
var/datum/vore_organ/VD=GetOrgan(href_list["organ"])
VD.escape=text2num(href_list["keep"])
if(href_list["organ"]=="cock")
VD=GetOrgan("balls")
VD.escape=text2num(href_list["keep"])
if(href_list["preference"] == "transfer")
var/datum/vore_organ/VD=GetOrgan(href_list["organ"])
VD.transfer_factor = text2num(href_list["speed"])
VD.transfer_target = GetOrgan(href_list["dest"])
if(href_list["preference"] == "transform")
target.set_vore_transform(GetOrgan(href_list["organ"]))
//vore_admins("[VD.owner]'s [VD.type] set to transform.",VD.owner)
if(href_list["preference"] == "cock")
var/datum/preferences/PD=target
switch(href_list["change"])
if("has")
var/change_val=input(usr, "Choose your cock:", "Character Preference") as null|anything in list("None","Normal","Hyper","Double")
switch(change_val)
if("None")
PD.p_cock["has"]=0
if("Normal")
PD.p_cock["has"]=1
if("Hyper")
PD.p_cock["has"]=2
if("Double")
PD.p_cock["has"]=3
if("type")
var/change_val=input(usr, "Choose your cock type:", "Character Preference") as null|anything in cock_list+"custom"
if(change_val=="custom")
change_val=input(usr, "Choose your cock type:", "Character Preference") as text
if(change_val)
PD.p_cock["type"]=change_val
if("color")
var/new_color = input(usr, "Choose your cock's colour:", "Character Preference") as null|color
if(new_color)
PD.p_cock["color"] = sanitize_hexcolor(new_color)
if(href_list["preference"] == "vagina")
var/datum/preferences/PD=target
PD.p_vagina=!PD.p_vagina
//if(href_list["preference"] == "showgen")
//var/datum/preferences/PD=target
//PD.show_gen=!PD.show_gen
if(href_list["preference"] == "grow")
target.sizeplay_grow()
if(href_list["preference"] == "shrink")
target.sizeplay_shrink()
if(href_list["preference"] == "taur")
if(target.has_dna())
var/mob/living/carbon/C=target
C.dna.taur=!C.dna.taur
// updateappearance
else
target<<"Not going to work."
/*if(href_list["preference"] == "naga")
if(check_dna_integrity(target))
var/seg_cnt=input("How many segments?", "Naga Time!", "6")
seg_cnt=text2num(seg_cnt)
if(!seg_cnt)
target<<"Invalid."
else
var/mob/living/carbon/C=target
C.dna.naga=new/mob/living/simple_animal/naga_segment/main(target.loc,seg_cnt)
target.pixel_y=8
else
target<<"Not going to work."*/
/*if(href_list["preference"] == "spawn")
if(href_list["item"] == "narky")
new /obj/item/clothing/suit/narkycuff(target.loc)
new /obj/item/clothing/shoes/narkyanklet(target.loc)
new /obj/item/clothing/under/maid/narky(target.loc)
if(href_list["item"] == "grow")
new /obj/item/weapon/gun/energy/laser/sizeray/two(target.loc)
if(href_list["item"] == "shrink")
new /obj/item/weapon/gun/energy/laser/sizeray/one(target.loc)*/
if(usr)
ShowChoices(usr)
//datum/mind/var/vore_admins=""
//var/global_vore_log=""
//proc/vore_admins(var/T,var/mob/living/pred=null,var/mob/living/prey=null)
// global_vore_log+="<B>-</B>"+T+"<BR>"
// if(pred&&pred.mind)
// pred.mind.vore_admins+="-"+T+"\n"
// if(prey&&prey.mind)
// prey.mind.vore_admins+="-"+T+"\n"
//var/global_observe_log=""
//proc/kp_log_observe(var/T)
// global_observe_log+="<B>-</B>"+T+"<BR>"
/proc/vore_admins(var/msg)
msg = "<span class=\"admin\"><span class=\"prefix\">ADMIN LOG:</span> <span class=\"message\">[msg]</span></span>"
admins << msg
proc/sanitize_vore_list(var/list/lst=null)
if(!lst||!lst.len)
lst=list(
"1"=2,
"2"=0,
"4"=0,
"8"=0,
"16"=0,
"32"=0,
"64"=1,
"128"=0,
"256"=2)
lst[num2text(VORE_METHOD_INSOLE)]=1
lst[num2text(VORE_METHOD_INSUIT)]=2
return lst
+727
View File
@@ -0,0 +1,727 @@
datum
species
//specflags = list(EYECOLOR,HAIR,FACEHAIR,LIPS)
var/generic="something"
var/adjective="unknown"
var/restricted=0 //Set to 1 to not allow anyone to choose it, 2 to hide it from the DNA scanner, and text to restrict it to one person
var/tail=0
var/taur=0
human
generic="human"
adjective="ordinary"
taur="horse"
abductor
//name="abductor"
id="abductor"
generic="abductor"
adjective="spooky"
restricted=2
ailurus
name="red panda"
id="ailurus"
generic="ailurus"
adjective="cuddly"
tail=1
alien
name="alien"
id="alien"
say_mod="hisses"
generic="xeno"
adjective="phallic"
tail=1
/* armadillo
name="armadillo"
id="armadillo"
say_mod = "drawls"
generic = "cingulate" // Superorder Xenarthra, Order Cingulata
adjective = "protected"
tail=1
attack_verb = "noms"
attack_sound = 'sound/weapons/bite.ogg' */
attack_verb = "nom" // apparently attack verbs are just the verb, no S. shrug
attack_sound = 'sound/weapons/bite.ogg'
anubis
name="anubis"
id="anubis"
say_mod = "intones"
generic="jackal" // mmm...jackal or canine? i'll leave it for now
adjective="cold"
attack_verb = "claw"
beaver
name="beaver"
id="beaver"
say_mod = "chitters"
generic="rodent"
adjective="damnable"
tail=1
attack_verb = "tailslap"
attack_sound = 'sound/items/dodgeball.ogg'
beholder
name="beholder"
id="beholder"
say_mod = "jibbers"
generic="body part"
adjective="all-seeing"
tail=0
attack_verb = "visually assault"
attack_sound = 'sound/magic/MM_Hit.ogg' // MAGIC MISSILE! MAGIC MISSILE!
boar
name="boar"
id="boar"
generic="pig"
adjective="wild and curly"
tail=1
capra
name="caprine"
id="capra"
generic="goat"
adjective="irritable"
carp
name="carp"
id="carp"
say_mod = "glubs"
generic = "abomination"
adjective = "violently fishy"
tail=1
eyes = "carpeyes"
attack_verb = "nom"
attack_sound = 'sound/weapons/bite.ogg'
corgi
name="corgi"
id="corgi"
say_mod ="yaps"
generic="canine"
adjective="corgalicious"
tail=1
corvid
name="corvid"
id="corvid"
say_mod = "caws"
generic="bird"
adjective="mask-piercing"
tail=1
attack_verb = "whack"
cow
name="cow"
id="cow"
say_mod = "moos"
generic="bovine"
adjective="wise"
tail=1
taur=1
coyote
name="coyote"
id="coyote"
say_mod = "yips"
generic="canine"
adjective="mangy"
tail=1
crocodile
name="crocodile"
id="croc"
generic="water reptile"
adjective="scaled"
tail=1
dalmatian
name="dalmatian"
id="dalmatian"
say_mod = "ruffs"
generic="canine"
adjective="spotty"
tail=1
deer
name="deer"
id="deer"
say_mod = "grunts"
generic = "cervid"
adjective = "skittish"
tail=1 // that's better
attack_verb = "gore"
attack_sound = 'sound/weapons/bladeslice.ogg'
drake
name="drake"
id="drake"
say_mod = "growls"
generic = "reptile"
adjective = "frilly"
tail=1 // i'd use lizard tails but drakes have frills included on the icons
taur=1
drider
name="drider"
id="drider"
generic="humanoid"
adjective="big and hairy"
taur=1
tail=1
eyes="spidereyes"
fennec
name="fennec"
id="fennec"
generic="vulpine"
adjective="foxy"
tail=1
fox
name="fox"
id="fox"
generic="vulpine"
adjective="foxy" // open and shut with this one, huh
tail=1
taur=1
glowfen
name="glowfen"
id="glowfen"
generic="vulpine"
adjective="glowing"
tail=1
gremlin
name="gremlin"
id="gremlin"
generic="creature"
tail=1
attack_verb = "thwack"
gria
name="gria"
id="gria"
generic="reptile"
adjective="scaled"
tail=1
attack_verb = "claw"
attack_sound = 'sound/weapons/bladeslice.ogg'
hawk
name="hawk"
id="hawk"
say_mod = "chirps"
generic="bird"
adjective="feathery"
tail=1
attack_verb = "whack"
hippo
name="hippo"
id="hippo"
generic="hippo"
adjective="buoyant"
tail=1
husky
name="husky"
id="husky"
say_mod = "arfs"
generic="canine"
adjective="derpy"
tail=1
taur=1
jackalope
name="jackalope"
id="jackalope"
generic="leporid"
adjective="hoppy and horny" //hue
attack_verb = "kick"
tail=1
jelly
name="jelly"
id="jelly"
generic="jelly"
adjective="jelly"
kangaroo
name="kangaroo"
id="kangaroo"
generic="marsupial"
adjective="bouncy"
tail=1
attack_verb = "kick"
lab
name="lab"
id="lab"
say_mod = "yaps"
generic="canine"
adjective="sleek"
tail=1
taur=1
leporid
name="leporid"
id="leporid"
generic="leporid"
adjective="hoppy"
tail=1
attack_verb = "kick"
lizard
name="lizard"
id="lizard"
generic="reptile"
adjective="scaled"
taur="naga"
tail=1
murid // i have no idea what this is
name="murid"
id="murid"
say_mod = "squeaks"
generic="rodent"
adjective="squeaky"
tail=1
moth
name="moth"
id="moth"
generic="insect"
adjective="fluttery"
eyes="motheyes" // this SHOULD work after i've updated human_face.dmi -- iska
mushman
name="mushroom"
id="fung"
generic="fungi"
adjective="sporey"
say_mod = "mushes"
tail=0
naga
name="naga"
id="naga"
generic="humanoid"
adjective="noodly"
taur=1
tail=1
otter
name="otter"
id="otter"
say_mod = "squeaks"
generic="mustelid"
adjective="slim"
tail=1
otusian
name="otusian"
id="otie"
say_mod ="growls"
generic="feline-canine"
adjective="chunky" // ??? are otusians fat????
tail=1
taur=1
panther
name="panther"
id="panther"
generic="feline"
adjective="furry"
tail=1
taur=1
attack_verb = "claw"
attack_sound = 'sound/weapons/bladeslice.ogg'
pig
name="pig"
id="pig"
generic="pig"
adjective="curly"
tail=1
plant
generic="plant"
adjective="leafy"
plant/pod
restricted=1
porcupine
name="porcupine"
id="porcupine"
say_mod = "snuffles"
generic = "rodent"
adjective = "quilly"
tail=1
attack_verb = "quill-whack"
attack_sound = 'sound/weapons/slash.ogg'
possum
name="possum"
id="possum"
say_mod = "chitters"
generic = "marsupial"
adjective = "rumaging"
tail=1
attack_verb = "nom"
attack_sound = 'sound/weapons/bite.ogg'
raccoon
name="raccoon"
id="raccoon"
say_mod="churrs"
generic="procyonid" // Family Procyonidae
adjective="stripy"
tail=1
roorat
name="kangaroo rat"
id="roorat"
generic="Heteromyidae" // ...marsupial rat? Have you tried a google search? They're a real thing.
adjective="bouncy"
tail=1
attack_verb = "kick"
saltman
name="salt"
id="salt"
generic="NaCl"
adjective="salty"
restricted=2
seaslug
name="sea slug"
id="seaslug"
generic="slug"
adjective="salty"
tail=1
attack_verb = "smack"
shark
name="shark"
id="shark"
generic="selachimorph" // Superorder Selachimorpha
adjective="fishy"
tail=1
shepherd
name="shepherd"
id="shepherd"
say_mod = "barks"
generic="canine"
adjective="happy"
tail=1
taur=1
skunk
name="skunk"
id="skunk"
say_mod = "snuffles"
generic="mephit"
adjective="stinky"
tail=1
slime
name="slime"
id="slime"
generic="slime"
adjective="slimy"
smilodon
name="smilodon"
id="smilodon"
generic="smilodon"
adjective="toothy"
tail=1
snarby
name="snarby"
id="snarby"
generic="beast"
adjective="snippy and snarly"
tail=1
attack_verb = "chomp"
attack_sound = 'sound/weapons/bite.ogg'
eyes = "snarbyeyes"
squirrel
name="squirrel"
id="squirrel"
generic="rodent"
adjective="nutty"
tail=1
tajaran
name="tajaran"
id="tajaran"
generic="feline"
adjective="furry"
tail=1
taur=1
attack_verb = "claw"
attack_sound = 'sound/weapons/bladeslice.ogg'
turtle
name="turtle"
id="turtle"
generic="reptile"
adjective="hard-shelled"
tail=1
ursine
name="bear"
id="ursine"
generic="ursine"
adjective="husky"
say_mod = "grunts"
tail=1
attack_verb = "claw"
attack_sound = 'sound/weapons/bladeslice.ogg'
wolf
name="wolf"
id="wolf"
say_mod = "howls"
generic="canine"
adjective="shaggy"
tail=1
taur=1
zig
name="zig"
id="zig"
generic="pokémon"
adjective="curious"
tail=1
/*
narky
//name="narwhal kitty"
id="narky"
say_mod="nyars"
generic="abomination"
adjective="fluffy"
restricted=2
tail=1
taur=1
attack_verb = "whack"
//husky/jordy // obsolete with the addition of overlay sprites
//name="husky"
//id="jordy"
//generic="canine"
//adjective="hyper"
//tail=1
//restricted=1
*/
fly
//name="fly"
generic="insect"
adjective="buzzy"
restricted=1
skeleton
//name="skeleton"
generic="human"
adjective="very boney"
restricted=2
attack_verb = "bone"
cosmetic_skeleton
//name="skeleton"
generic="skeleton"
adjective="boney"
restricted=2
attack_verb = "bone"
shadow
//name="shadow"
generic="darkness"
adjective="shady" // Jokes
restricted=2
golem
//name="golem"
generic="golem"
adjective="rocky"
restricted=2
golem/adamantine
//name="adamantine"
generic="golem"
adjective="rocky"
restricted=2
zombie
//name="zombie"
id="zombie"
generic="undead"
adjective="rotten"
restricted=2
cosmetic_zombie // considering renaming to zombie/cosmetic
//name="zombie"
id="zombie"
generic="undead"
adjective="particularly rotten"
restricted=2
plasmaman
//name="Plasmabone"
id="plasmaman"
generic="plasmaman"
adjective="toxic"
restricted=2 // don't comment these out if you don't want the world to burn
plasmaman/skin
//name="Skinbone"
id="plasmaman"
generic="plasmaman"
adjective="toxic"
restricted=2 // but if you do want the world to burn then please, by all means
pepsiman
//name="PEPSI MAAAAAN"
id="PEPSIMAAAN"
generic="beverage"
adjective="refreshing"
restricted=2 // don't want half the station to be running around with soda cans on their heads
cutebold
name="cutebold"
id="cutebold"
say_mod = "yips"
generic = "kobo"
adjective = "cute"
tail=1
attack_verb = "nom"
attack_sound = 'sound/weapons/bite.ogg'
pony // of the "my little" variety
name="pony"
id="pony"
generic="equine"
adjective="little"
tail=1
attack_verb= "kick"
hylotl
name="hylotl"
id="hylotl"
say_mod = "glubs"
generic="amphibian"
adjective="fishy"
tail=0
eyes="jelleyes"
/*var/list/kpcode_race_list
proc/kpcode_race_genlist()
if(!kpcode_race_list)
var/paths = typesof(/datum/species)
kpcode_race_list = new/list()
for(var/path in paths)
var/datum/species/D = new path()
if(D.name!="undefined")
kpcode_race_list[D.name] = D*/
proc/kpcode_race_getlist(var/restrict=0)
var/list/race_options = list()
for(var/r_id in species_list)
var/datum/species/R = kpcode_race_get(r_id)
if(!R.restricted||R.restricted==restrict)
race_options[r_id]=kpcode_race_get(r_id)
return race_options
proc/kpcode_race_get(var/name="human")
name=kpcode_race_san(name)
if(!name||name=="") name="human"
if(species_list[name])
var/type_to_use=species_list[name]
var/datum/species/return_this=new type_to_use()
return return_this
else
return kpcode_race_get()
proc/kpcode_race_san(var/input)
if(!input)input="human"
if(istype(input,/datum/species))
input=input:id
return input
proc/kpcode_race_restricted(var/name="human")
name=kpcode_race_san(name)
if(kpcode_race_get(name))
var/datum/species/D=kpcode_race_get(name)
return D.restricted
return 2
proc/kpcode_race_tail(var/name="human")
name=kpcode_race_san(name)
if(kpcode_race_get(name))
var/datum/species/D=kpcode_race_get(name)
return D.tail
return 0
proc/kpcode_race_taur(var/name="human")
name=kpcode_race_san(name)
if(kpcode_race_get(name))
var/datum/species/D=kpcode_race_get(name)
if(D.taur==1)
return D.id
return D.taur
return 0
proc/kpcode_race_generic(var/name="human")
name=kpcode_race_san(name)
if(kpcode_race_get(name))
var/datum/species/D=kpcode_race_get(name)
return D.generic
return 0
proc/kpcode_race_adjective(var/name="human")
name=kpcode_race_san(name)
if(kpcode_race_get(name))
var/datum/species/D=kpcode_race_get(name)
return D.adjective
return 0
proc/kpcode_get_generic(var/mob/living/M)
if(istype(M,/mob/living/carbon/human))
if(M:dna)
return kpcode_race_generic(M:dna:mutantrace())
else
return kpcode_race_generic("human")
if(istype(M,/mob/living/carbon/monkey))
return "monkey"
if(istype(M,/mob/living/carbon/alien))
return "xeno"
if(istype(M,/mob/living/simple_animal))
return M.name
return "something"
proc/kpcode_get_adjective(var/mob/living/M)
if(istype(M,/mob/living/carbon/human))
if(M:dna)
return kpcode_race_adjective(M:dna:mutantrace())
else
return kpcode_race_adjective("human")
if(istype(M,/mob/living/carbon/monkey))
return "cranky"
if(istype(M,/mob/living/carbon/alien))
return "alien"
if(istype(M,/mob/living/simple_animal))
return "beastly"
return "something"
/*var/list/mutant_races = list(
"human",
"fox",
"fennec",
"lizard",
"tajaran",
"panther",
"husky",
"squirrel",
"otter",
"murid",
"leporid",
"ailurus",
"shark",
"hawk",
"jelly",
"slime",
"plant",
)*/
var/list/mutant_tails = list(
"none"=0,
"tajaran"="tajaran",
"neko"="neko",
"dog"="lab",
"wolf"="wolf",
"fox"="fox",
"mouse"="murid",
"leporid"="leporid",
"panda"="ailurus",
"pig"="pig",
"cow"="cow",
"kangaroo"="kangaroo",
"kangaroo"="kangaroo",
"pony"="pony",
"lizard"="lizard",
"cyborg"="cyborg")
var/list/mutant_wings = list(
"none"=0,
"bat"="bat",
"feathery"="feathery",
"moth"="moth",
"fairy"="fairy",
"tentacle"="tentacle"
)
var/list/cock_list = list(
"human",
"canine",
"feline",
"reptilian",
"equine")
proc/kpcode_hastail(var/S)
//switch(S)
//if("jordy","husky","squirrel","lizard","narky","tajaran","otter","murid","fox","fennec","wolf","leporid","shark","panther","ailurus","glowfen","hawk")
if(kpcode_race_tail(S)==1)
return S
if(kpcode_race_tail(S))
return kpcode_race_tail(S)
/*if("neko")
return "tajaran"
if("mouse")
return "murid"
if("panda")
return "ailurus"*/
if(S in mutant_tails)
return mutant_tails[S]
return 0
proc/kpcode_cantaur(var/S)
return kpcode_race_taur(S)
+40
View File
@@ -0,0 +1,40 @@
datum/design/shrinkray
name = "Shrink Ray"
desc = "Make people small."
id = "shrinkray"
req_tech = list("combat" = 5, "materials" = 3, "engineering" = 2, "biotech" = 3)
build_type = PROTOLATHE
materials = list("$metal" = 5000, "$glass" = 1000, "$diamond" = 1500)
build_path = /obj/item/weapon/gun/energy/laser/sizeray/one
category = list("Weapons")
datum/design/growthray
name = "Growth Ray"
desc = "Make people small... To the person you hit."
id = "growthray"
req_tech = list("combat" = 5, "materials" = 4, "engineering" = 3, "bluespace" = 2)
build_type = PROTOLATHE
materials = list("$metal" = 5000, "$glass" = 1000, "$diamond" = 1500)
build_path = /obj/item/weapon/gun/energy/laser/sizeray/two
category = list("Weapons")
datum/design/stethoscope
name = "Stethoscope"
desc = "An ordinary stethoscope."
id = "stethoscope"
req_tech = list("biotech" = 2)
build_type = PROTOLATHE
materials = list("$metal" = 50)
build_path = /obj/item/clothing/tie/stethoscope
category = list("Medical")
/*
datum/design/stethoscope_advanced
name = "Stethoscope (Advanced)"
desc = "An advanced stethoscope that can read micro-vibrations produced by DNA, or possibly something less silly."
id = "stethoscope_advanced"
req_tech = list("biotech" = 3, "magnets" = 2)
build_type = PROTOLATHE
materials = list("$metal" = 500)
build_path = /obj/item/clothing/tie/stethoscope/advanced
category = list("Medical")*/
+9
View File
@@ -0,0 +1,9 @@
/mob/living/simple_animal/hostile/carp/duck
name = "space duck"
desc = "A ferocious, fang-bearing creature that resembles a rubber ducky."
icon_state = "rubduck"
icon_living = "rubduck"
icon_dead = "rubduck_dead"
icon_gib = "rubduck_gib"
meat_type = /obj/item/weapon/bikehorn
attack_sound = 'sound/items/bikehorn.ogg'
+76
View File
@@ -0,0 +1,76 @@
//Changed var/air_master.current_cycle to SSair.times_fired
/obj/vore_preferences
proc/BuildTransfer()
var/dat= ""
dat += "<BR>"
dat += "<h2>Dispense</h2>"
var/datum/vore_organ/VO=GetOrgan(tab_mod)
dat += "<b>Currently dispensing [VO.milk_type]</b><BR>"
dat += "Generic: "
dat += "<a href='?src=\ref[src];preference=dispense;organ=[tab_mod];amount=5;name=null'>5</a>"
dat += "<a href='?src=\ref[src];preference=dispense;organ=[tab_mod];amount=10;name=null'>10</a>"
dat += "<a href='?src=\ref[src];preference=dispense;organ=[tab_mod];amount=15;name=null'>15</a>"
dat += "<a href='?src=\ref[src];preference=dispense;organ=[tab_mod];amount=20;name=null'>20</a>"
dat += "<BR>"
if(tab_mod=="cock")
VO.milk_list.Add(VO.owner.vore_balls_datum.milk_list)
VO.owner.vore_balls_datum.milk_list=new/list()
for(var/T in VO.milk_list)
dat += "[T]: "
dat += "<a href='?src=\ref[src];preference=dispense;organ=[tab_mod];amount=5;name=[T]'>5</a>"
dat += "<a href='?src=\ref[src];preference=dispense;organ=[tab_mod];amount=10;name=[T]'>10</a>"
dat += "<a href='?src=\ref[src];preference=dispense;organ=[tab_mod];amount=15;name=[T]'>15</a>"
dat += "<a href='?src=\ref[src];preference=dispense;organ=[tab_mod];amount=20;name=[T]'>20</a>"
dat += " ([VO.milk_list[T]["count"]] left)<BR>"
dat += "<BR>"
dat += "Transferring people from person to person coming soon.<BR>"
return dat
/datum/vore_organ
proc/dispense(var/amount=5,var/name=null)
if(!milk_type)return
if(name=="null")name=null
var/obj/item/weapon/reagent_containers/RC=null
if(!owner.get_active_hand())
owner<<"There's nothing in your active hand."
return
if(!istype(owner.get_active_hand(), /obj/item/weapon/reagent_containers))
owner<<"You can't put [milk_type] in [owner.get_active_hand()]!"
return
RC=owner.get_active_hand()
if(!RC||!istype(RC, /obj/item/weapon/reagent_containers))return
if(!(RC.flags&OPENCONTAINER))
owner<<"You can't put [milk_type] in [owner.get_active_hand()]!"
return //No milk for you!
if(RC.reagents.total_volume >= RC.reagents.maximum_volume)
owner<<"[owner.get_active_hand()] is full!"
return //Too full!
amount=min(RC.reagents.maximum_volume-RC.reagents.total_volume,amount)
var/list/data=new/list()
if(name)
amount=min(amount,milk_list[name]["count"])
milk_list[name]["count"]=milk_list[name]["count"]-amount
data=milk_list[name]["data"]
if(milk_list[name]["count"]<=0)
milk_list.Remove(name)
if(amount>0)
if(last_release>SSair.times_fired-amount||owner.stat==2)return
last_release=SSair.times_fired
data["adjective"]=kpcode_get_adjective(owner)
data["type"]=kpcode_get_generic(owner)
//var/ownr_dna=null
if(istype(owner,/mob/living/carbon))
data["donor_DNA"]=owner:dna
//ownr_dna=owner:dna
RC.reagents.add_reagent(milk_type, amount, data)//list("digested"=name,"donor_DNA"=ownr_dna))
if(milk_type=="milk")
owner.visible_message("<span class='notice'>[owner] milks their tits into [RC].</span>")
if(milk_type=="semen")
owner.visible_message("<span class='notice'>[owner] jacks off into [RC].</span>")
if(milk_type=="femjuice")
owner.visible_message("<span class='notice'>[owner] masturbates their vagina over [RC].</span>")
playsound(owner.get_top_level_mob(), 'sound/items/drink.ogg', 50, 1)
+249
View File
@@ -0,0 +1,249 @@
/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
File diff suppressed because it is too large Load Diff
+6
View File
@@ -0,0 +1,6 @@
var/list/whitelist_keys=new()
proc/is_whitelisted(var/keychk)
keychk=ckey(keychk)
if(whitelist_keys.Find(keychk))
return 1
return 0