Fixes rendering issues. Adds balls to be rendered

This commit is contained in:
Poojawa
2019-05-26 04:52:31 -05:00
parent 851072ff23
commit 2aa86157e1
16 changed files with 121 additions and 110 deletions
+2 -2
View File
@@ -33,8 +33,8 @@
#define BALLS_VOLUME_MULT 1
#define BALLS_SIZE_MIN 1
#define BALLS_SIZE_DEF 3
#define BALLS_SIZE_MAX 7
#define BALLS_SIZE_DEF 2
#define BALLS_SIZE_MAX 3
#define BALLS_SACK_SIZE_MIN 1
#define BALLS_SACK_SIZE_DEF 8
+17 -53
View File
@@ -58,6 +58,7 @@ GLOBAL_LIST_EMPTY(ipc_antennas_list)
//Genitals and Arousal Lists
GLOBAL_LIST_EMPTY(cock_shapes_list)//global_lists.dm for the list initializations //Now also _DATASTRUCTURES globals.dm
GLOBAL_LIST_EMPTY(cock_shapes_icons) //Associated list for names->icon_states for cockshapes.
GLOBAL_LIST_EMPTY(balls_shapes_list)
GLOBAL_LIST_EMPTY(breasts_size_list)
GLOBAL_LIST_EMPTY(breasts_shapes_list)
GLOBAL_LIST_EMPTY(vagina_shapes_list)
@@ -123,36 +124,36 @@ GLOBAL_VAR_INIT(miscreants_allowed, FALSE)
/mob/living/carbon/proc/has_penis()
if(getorganslot("penis"))//slot shared with ovipositor
if(istype(getorganslot("penis"), /obj/item/organ/genital/penis))
return 1
return 0
return TRUE
return FALSE
/mob/living/carbon/proc/has_balls()
if(getorganslot("balls"))
if(istype(getorganslot("balls"), /obj/item/organ/genital/testicles))
return 1
return 0
return TRUE
return FALSE
/mob/living/carbon/proc/has_vagina()
if(getorganslot("vagina"))
return 1
return 0
return TRUE
return FALSE
/mob/living/carbon/proc/has_breasts()
if(getorganslot("breasts"))
return 1
return 0
return TRUE
return FALSE
/mob/living/carbon/proc/has_ovipositor()
if(getorganslot("penis"))//shared slot
if(istype(getorganslot("penis"), /obj/item/organ/genital/ovipositor))
return 1
return 0
return TRUE
return FALSE
/mob/living/carbon/human/proc/has_eggsack()
if(getorganslot("balls"))
if(istype(getorganslot("balls"), /obj/item/organ/genital/eggsack))
return 1
return 0
return TRUE
return FALSE
/mob/living/carbon/human/proc/is_bodypart_exposed(bodypart)
@@ -161,16 +162,16 @@ GLOBAL_VAR_INIT(miscreants_allowed, FALSE)
L = get_equipped_items()
for(var/obj/item/I in L)
if(I.body_parts_covered & GROIN)
return 0
return 1
return FALSE
return TRUE
/mob/living/carbon/proc/is_chest_exposed(var/list/L)
if(!L)
L = get_equipped_items()
for(var/obj/item/I in L)
if(I.body_parts_covered & CHEST)
return 0
return 1
return FALSE
return TRUE
////////////////////////
//DANGER | DEBUG PROCS//
@@ -191,40 +192,3 @@ GLOBAL_VAR_INIT(miscreants_allowed, FALSE)
H.give_vagina()
H.give_womb()
H.give_breasts()
/client/proc/test_mammal_overlays()
set name = "Mass Give Mammalitus"
set category = "Dangerous"
set desc = "Turns every human into a mammal with tails, ears, etc. WARNING: NOT FOR LIVE SERVER USAGE!!"
log_admin("[src] turned everyone into mammals.")
message_admins("[src] turned everyone into mammals.")
for(var/mob/living/carbon/human/H in GLOB.mob_list)
if(!H.dna)
continue
var/datum/dna/hdna = H.dna
H.set_species(/datum/species/mammal)
var/subspec = pick("Fox","Wolf","Fennec")
switch(subspec)
if("Wolf")
hdna.features["mam_tail"] = "Wolf"
hdna.features["mam_ears"] = "Wolf"
hdna.features["mam_snouts"] = "Wolf"
hdna.features["mam_body_markings"] = "Wolf"
hdna.features["mcolor"] = "555"
hdna.features["mcolor2"] = "999"
hdna.features["mcolor3"] = "999"
if("Fox")
hdna.features["mam_tail"] = "Fox"
hdna.features["mam_ears"] = "Fox"
hdna.features["mam_snouts"] = "Fox, Long"
hdna.features["mam_body_markings"] = "Fox"
hdna.features["mcolor"] = "f60"
hdna.features["mcolor2"] = "fff"
hdna.features["mcolor3"] = "fff"
if("Fennec")
hdna.features["mam_tail"] = "Fennec"
hdna.features["mam_ears"] = "Fennec"
hdna.features["mam_snouts"] = "Fox, Short"
hdna.features["mam_body_markings"] = "Fox"
H.regenerate_icons()
+2
View File
@@ -77,6 +77,8 @@
//CIT CHANGES - genitals and such
if(!GLOB.cock_shapes_list.len)
init_sprite_accessory_subtypes(/datum/sprite_accessory/penis, GLOB.cock_shapes_list)
if(!GLOB.balls_shapes_list.len)
init_sprite_accessory_subtypes(/datum/sprite_accessory/testicles, GLOB.balls_shapes_list)
if(!GLOB.vagina_shapes_list.len)
init_sprite_accessory_subtypes(/datum/sprite_accessory/vagina, GLOB.vagina_shapes_list)
if(!GLOB.breasts_shapes_list.len)
+23 -28
View File
@@ -40,7 +40,7 @@
adjustArousalLoss(arousal_rate * S.arousal_gain_rate)
if(dna.features["exhibitionist"] && client)
var/amt_nude = 0
if(is_chest_exposed() && (gender == FEMALE || getorganslot("breasts")))
if(is_chest_exposed() && (getorganslot("breasts")))
amt_nude++
if(is_groin_exposed())
if(getorganslot("penis"))
@@ -64,14 +64,14 @@
/mob/living/proc/adjustArousalLoss(amount, updating_arousal=1)
if(status_flags & GODMODE || !canbearoused)
return 0
return FALSE
arousalloss = CLAMP(arousalloss + amount, min_arousal, max_arousal)
if(updating_arousal)
updatearousal()
/mob/living/proc/setArousalLoss(amount, updating_arousal=1)
if(status_flags & GODMODE || !canbearoused)
return 0
return FALSE
arousalloss = CLAMP(amount, min_arousal, max_arousal)
if(updating_arousal)
updatearousal()
@@ -99,6 +99,8 @@
switch(G.type)
if(/obj/item/organ/genital/penis)
S = GLOB.cock_shapes_list[G.shape]
if(/obj/item/organ/genital/testicles)
S = GLOB.balls_shapes_list[G.shape]
if(/obj/item/organ/genital/vagina)
S = GLOB.vagina_shapes_list[G.shape]
if(/obj/item/organ/genital/breasts)
@@ -112,54 +114,54 @@
G.update_appearance()
/mob/living/proc/update_arousal_hud()
return 0
return FALSE
/datum/species/proc/update_arousal_hud(mob/living/carbon/human/H)
return 0
return FALSE
/mob/living/carbon/human/update_arousal_hud()
if(!client || !hud_used)
return 0
return FALSE
if(dna.species.update_arousal_hud())
return 0
return FALSE
if(!canbearoused)
hud_used.arousal.icon_state = ""
return 0
return FALSE
else
if(hud_used.arousal)
if(stat == DEAD)
hud_used.arousal.icon_state = "arousal0"
return 1
return TRUE
if(getArousalLoss() == max_arousal)
hud_used.arousal.icon_state = "arousal100"
return 1
return TRUE
if(getArousalLoss() >= (max_arousal / 100) * 90)//M O D U L A R , W O W
hud_used.arousal.icon_state = "arousal90"
return 1
return TRUE
if(getArousalLoss() >= (max_arousal / 100) * 80)//M O D U L A R , W O W
hud_used.arousal.icon_state = "arousal80"
return 1
return TRUE
if(getArousalLoss() >= (max_arousal / 100) * 70)//M O D U L A R , W O W
hud_used.arousal.icon_state = "arousal70"
return 1
return TRUE
if(getArousalLoss() >= (max_arousal / 100) * 60)//M O D U L A R , W O W
hud_used.arousal.icon_state = "arousal60"
return 1
return TRUE
if(getArousalLoss() >= (max_arousal / 100) * 50)//M O D U L A R , W O W
hud_used.arousal.icon_state = "arousal50"
return 1
return TRUE
if(getArousalLoss() >= (max_arousal / 100) * 40)//M O D U L A R , W O W
hud_used.arousal.icon_state = "arousal40"
return 1
return TRUE
if(getArousalLoss() >= (max_arousal / 100) * 30)//M O D U L A R , W O W
hud_used.arousal.icon_state = "arousal30"
return 1
return TRUE
if(getArousalLoss() >= (max_arousal / 100) * 20)//M O D U L A R , W O W
hud_used.arousal.icon_state = "arousal10"
return 1
return TRUE
if(getArousalLoss() >= (max_arousal / 100) * 10)//M O D U L A R , W O W
hud_used.arousal.icon_state = "arousal10"
return 1
return TRUE
else
hud_used.arousal.icon_state = "arousal0"
@@ -171,11 +173,11 @@
/obj/screen/arousal/Click()
if(!isliving(usr))
return 0
return FALSE
var/mob/living/M = usr
if(M.canbearoused)
M.mob_climax()
return 1
return TRUE
else
to_chat(M, "<span class='warning'>Arousal is disabled. Feature is unavailable.</span>")
@@ -196,13 +198,6 @@
"<span class='userdanger'>You have relieved yourself.</span>")
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm)
setArousalLoss(min_arousal)
/*
switch(gender)
if(MALE)
PoolOrNew(/obj/effect/decal/cleanable/semen, loc)
if(FEMALE)
PoolOrNew(/obj/effect/decal/cleanable/femcum, loc)
*/
else
to_chat(src, "<span class='notice'>You aren't aroused enough for that.</span>")
@@ -60,7 +60,5 @@
string = "breasts_[lowertext(shape)]_[size]"
if(ishuman(owner))
var/mob/living/carbon/human/H = owner
icon_state = sanitize_text(string)
H.update_genitals()
icon_state = sanitize_text(string)
@@ -165,7 +165,7 @@
P.Insert(src)
if(P)
if(dna.species.use_skintones && dna.features["genitals_use_skintone"])
P.color = skintone2hex(skin_tone)
P.color = "#[skintone2hex(skin_tone)]"
else
P.color = "#[dna.features["cock_color"]]"
P.length = dna.features["cock_length"]
@@ -181,13 +181,14 @@
if(!getorganslot("testicles"))
var/obj/item/organ/genital/testicles/T = new
T.Insert(src)
// if(dna.species.use_skintones && dna.features["genitals_use_skintone"])
// T.color = skintone2hex(skin_tone)
// else
// T.color = "#[dna.features["balls_color"]]"
if(T)
if(dna.species.use_skintones && dna.features["genitals_use_skintone"])
T.color = "#[skintone2hex(skin_tone)]"
else
T.color = "#[dna.features["balls_color"]]"
T.size = dna.features["balls_size"]
T.sack_size = dna.features["balls_sack_size"]
T.shape = "single"
T.fluid_id = dna.features["balls_fluid"]
T.fluid_rate = dna.features["balls_cum_rate"]
T.fluid_mult = dna.features["balls_cum_mult"]
@@ -204,7 +205,7 @@
B.Insert(src)
if(B)
if(dna.species.use_skintones && dna.features["genitals_use_skintone"])
B.color = skintone2hex(skin_tone)
B.color = "#[skintone2hex(skin_tone)]"
else
B.color = "#[dna.features["breasts_color"]]"
B.size = dna.features["breasts_size"]
@@ -228,7 +229,7 @@
V.Insert(src)
if(V)
if(dna.species.use_skintones && dna.features["genitals_use_skintone"])
V.color = skintone2hex(skin_tone)
V.color = "#[skintone2hex(skin_tone)]"
else
V.color = "[dna.features["vag_color"]]"
V.shape = "[dna.features["vag_shape"]]"
@@ -297,7 +298,9 @@
for(var/obj/item/organ/O in H.internal_organs)
if(isgenital(O))
var/obj/item/organ/genital/G = O
to_chat(world, "checking [G] for exposure")
if(G.is_exposed()) //Checks appropriate clothing slot and if it's through_clothes
to_chat(world, "[G] is [G.is_exposed() ? "true" : "false"]")
genitals_to_add += H.getorganslot(G.slot)
//Now we added all genitals that aren't internal and should be rendered
@@ -308,9 +311,12 @@
var/datum/sprite_accessory/S
size = G.size
aroused_state = G.aroused_state
to_chat(world, "switching [G.type] for sprite loading")
switch(G.type)
if(/obj/item/organ/genital/penis)
S = GLOB.cock_shapes_list[G.shape]
if(/obj/item/organ/genital/testicles)
S = GLOB.balls_shapes_list[G.shape]
if(/obj/item/organ/genital/vagina)
S = GLOB.vagina_shapes_list[G.shape]
if(/obj/item/organ/genital/breasts)
@@ -318,8 +324,10 @@
if(!S || S.icon_state == "none")
continue
var/mutable_appearance/genital_overlay = mutable_appearance(S.icon, layer = -layer)
genital_overlay.icon_state = "[G.slot]_[S.icon_state]_[size]_[aroused_state]_[layertext]"
to_chat(world, "[G.slot]_[S.icon_state]_[size]_[aroused_state]_[layertext] is icon state")
if(S.center)
genital_overlay = center_image(genital_overlay, S.dimension_x, S.dimension_y)
@@ -331,12 +339,15 @@
switch(S.color_src)
if("cock_color")
genital_overlay.color = "#[H.dna.features["cock_color"]]"
if("balls_color")
genital_overlay.color = "#[H.dna.features["balls_color"]]"
if("breasts_color")
genital_overlay.color = "#[H.dna.features["breasts_color"]]"
if("vag_color")
genital_overlay.color = "#[H.dna.features["vag_color"]]"
standing += genital_overlay
if(LAZYLEN(standing))
H.overlays_standing[layer] = standing.Copy()
standing = list()
@@ -55,8 +55,19 @@
center = TRUE //Center the image 'cause 2-tile wide.
dimension_x = 64
//Testicles
//These ones aren't inert
/datum/sprite_accessory/testicles
icon = 'modular_citadel/icons/obj/genitals/penis_onmob.dmi'
icon_state = "testicle"
name = "testicle" //the preview name of the accessory
color_src = "balls_color"
locked = 0
/datum/sprite_accessory/testicles/single
icon_state = "single"
name = "single"
alt_aroused = TRUE
//Vaginas
/datum/sprite_accessory/vagina
@@ -52,15 +52,15 @@
string = "penis_[GLOB.cock_shapes_icons[shape]]_[size]"
if(ishuman(owner))
var/mob/living/carbon/human/H = owner
icon_state = sanitize_text(string)
H.update_genitals()
icon_state = sanitize_text(string)
/obj/item/organ/genital/penis/update_link()
if(owner)
linked_organ = (owner.getorganslot("testicles"))
if(linked_organ)
linked_organ.linked_organ = src
linked_organ.size = size
else
if(linked_organ)
linked_organ.linked_organ = null
@@ -3,15 +3,20 @@
desc = "A male reproductive organ."
icon_state = "testicles"
icon = 'modular_citadel/icons/obj/genitals/penis.dmi'
var/icon_on = 'modular_citadel/icons/obj/genitals/penis_onmob.dmi'
zone = "groin"
slot = "testicles"
w_class = 3
internal = TRUE
size = BALLS_SIZE_DEF
size = BALLS_SIZE_MIN
var/size_name = "Normal"
shape = "single"
var/sack_size = BALLS_SACK_SIZE_DEF
fluid_id = "semen"
producing = TRUE
var/sent_full_message = 1 //defaults to 1 since they're full to start
can_masturbate_with = TRUE
masturbation_verb = "massage"
can_climax = TRUE
var/sent_full_message = TRUE //defaults to 1 since they're full to start
/obj/item/organ/genital/testicles/Initialize()
. = ..()
@@ -23,14 +28,22 @@
if(reagents && producing)
generate_cum()
/obj/item/organ/genital/testicles/update_size()
if(size == 1)
size_name = "Normal"
if(size == 2)
size_name = "Enlarged"
if(size == 3)
size_name = "Engorged"
/obj/item/organ/genital/testicles/proc/generate_cum()
reagents.maximum_volume = fluid_max_volume
if(reagents.total_volume >= reagents.maximum_volume)
if(!sent_full_message)
send_full_message()
sent_full_message = 1
sent_full_message = TRUE
return FALSE
sent_full_message = 0
sent_full_message = FALSE
update_link()
if(!linked_organ)
return FALSE
@@ -42,6 +55,8 @@
linked_organ = (owner.getorganslot("penis"))
if(linked_organ)
linked_organ.linked_organ = src
size = linked_organ.size
update_size()
else
if(linked_organ)
linked_organ.linked_organ = null
@@ -49,6 +64,22 @@
/obj/item/organ/genital/testicles/proc/send_full_message(msg = "Your balls finally feel full, again.")
if(owner && istext(msg))
owner << msg
to_chat(owner, msg)
return TRUE
/obj/item/organ/genital/testicles/update_appearance()
if(owner)
desc = "You see a pair of testicles dangling. They're quite [lowertext(size_name)]."
var/string
if(owner.dna.species.use_skintones && owner.dna.features["genitals_use_skintone"])
if(ishuman(owner)) // Check before recasting type, although someone fucked up if you're not human AND have use_skintones somehow...
var/mob/living/carbon/human/H = owner // only human mobs have skin_tone, which we need.
color = "#[skintone2hex(H.skin_tone)]"
string = "testicles_[size_name]-s"
else
color = "#[owner.dna.features["balls_color"]]"
string = "testicles_[size_name]"
if(ishuman(owner))
var/mob/living/carbon/human/H = owner
icon_state = sanitize_text(string)
H.update_genitals()
@@ -60,10 +60,9 @@
string = "vagina"
if(ishuman(owner))
var/mob/living/carbon/human/H = owner
icon_state = sanitize_text(string)
H.update_genitals()
icon_state = sanitize_text(string)
/obj/item/organ/genital/vagina/update_link()
if(owner)
linked_organ = (owner.getorganslot("womb"))
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 510 B

After

Width:  |  Height:  |  Size: 626 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 939 B

After

Width:  |  Height:  |  Size: 1.1 KiB

+6 -6
View File
@@ -2502,12 +2502,6 @@
#include "code\modules\research\server.dm"
#include "code\modules\research\stock_parts.dm"
#include "code\modules\research\designs\AI_module_designs.dm"
#include "code\modules\research\designs\autolathe_desings\autolathe_designs_construction.dm"
#include "code\modules\research\designs\autolathe_desings\autolathe_designs_electronics.dm"
#include "code\modules\research\designs\autolathe_desings\autolathe_designs_medical_and_dinnerware.dm"
#include "code\modules\research\designs\autolathe_desings\autolathe_designs_sec_and_hacked.dm"
#include "code\modules\research\designs\autolathe_desings\autolathe_designs_tcomms_and_misc.dm"
#include "code\modules\research\designs\autolathe_desings\autolathe_designs_tools.dm"
#include "code\modules\research\designs\biogenerator_designs.dm"
#include "code\modules\research\designs\bluespace_designs.dm"
#include "code\modules\research\designs\comp_board_designs.dm"
@@ -2527,6 +2521,12 @@
#include "code\modules\research\designs\stock_parts_designs.dm"
#include "code\modules\research\designs\telecomms_designs.dm"
#include "code\modules\research\designs\weapon_designs.dm"
#include "code\modules\research\designs\autolathe_desings\autolathe_designs_construction.dm"
#include "code\modules\research\designs\autolathe_desings\autolathe_designs_electronics.dm"
#include "code\modules\research\designs\autolathe_desings\autolathe_designs_medical_and_dinnerware.dm"
#include "code\modules\research\designs\autolathe_desings\autolathe_designs_sec_and_hacked.dm"
#include "code\modules\research\designs\autolathe_desings\autolathe_designs_tcomms_and_misc.dm"
#include "code\modules\research\designs\autolathe_desings\autolathe_designs_tools.dm"
#include "code\modules\research\machinery\_production.dm"
#include "code\modules\research\machinery\circuit_imprinter.dm"
#include "code\modules\research\machinery\departmental_circuit_imprinter.dm"