purge the rainbow
renames 'narky' folder to 'citadel'
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1 @@
|
||||
//proc/vore_start_normal(var/method,var/mob/living/pred, var/mob/living/prey, var/headfirst=1)
|
||||
@@ -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
|
||||
@@ -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
|
||||
*/
|
||||
@@ -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)
|
||||
@@ -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"]];'> </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
|
||||
@@ -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)
|
||||
@@ -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")*/
|
||||
@@ -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'
|
||||
@@ -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)
|
||||
@@ -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
@@ -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
|
||||
Reference in New Issue
Block a user