Merge remote-tracking branch 'upstream/master' into kk-ships

This commit is contained in:
Killian
2023-03-09 02:00:44 +00:00
35 changed files with 525 additions and 21 deletions
+8
View File
@@ -440,6 +440,14 @@ var/global/datum/controller/subsystem/ticker/ticker
UpdateFactionList(player)
//equip_custom_items(player) //VOREStation Removal
//player.apply_traits() //VOREStation Removal
//VOREStation Addition Start
if(player.client)
if(player.client.prefs.auto_backup_implant)
var/obj/item/weapon/implant/backup/imp = new(src)
if(imp.handle_implant(player,player.zone_sel.selecting))
imp.post_implant(player)
//VOREStation Addition End
if(captainless)
for(var/mob/M in player_list)
if(!istype(M,/mob/new_player))
+4 -1
View File
@@ -291,7 +291,7 @@
if (!steal.select_target())
return
if("download","capture","absorb")
if("download","capture","absorb", "vore")
var/def_num
if(objective&&objective.type==text2path("/datum/objective/[new_obj_type]"))
def_num = objective.target_amount
@@ -310,6 +310,9 @@
if("absorb")
new_objective = new /datum/objective/absorb
new_objective.explanation_text = "Absorb [target_number] compatible genomes."
if("vore")
new_objective = new /datum/objective/vore
new_objective.explanation_text = "Devour [target_number] [target_number == 1 ? "person" : "people"]. What happens to them after you do that is irrelevant."
new_objective.owner = src
new_objective.target_amount = target_number
+1
View File
@@ -4,6 +4,7 @@
var/directory_tag
var/directory_erptag
var/directory_ad
var/vore_prey_eaten = 0
/mob/living/mind_initialize()
. = ..()
+4 -4
View File
@@ -23,10 +23,10 @@
feedback_add_details(feedback_tag,"[O.type]|FAIL")
failed = TRUE
num++
if(failed)
text += "<br><font color='red'><B>The [role_text] has failed.</B></font>"
else
text += "<br><font color='green'><B>The [role_text] was successful!</B></font>"
if(failed)
text += "<br><font color='red'><B>The [role_text] has failed.</B></font>"
else
text += "<br><font color='green'><B>The [role_text] was successful!</B></font>"
if(global_objectives && global_objectives.len)
text += "<BR><FONT size = 2>Their objectives were:</FONT>"
+6
View File
@@ -627,6 +627,12 @@ var/global/list/all_objectives = list()
else
return 0
/datum/objective/vore/check_completion()
if(owner && owner.vore_prey_eaten >= target_amount)
return 1
else
return 0
// Heist objectives.
/datum/objective/heist/proc/choose_target()
return
+55 -1
View File
@@ -249,4 +249,58 @@
prob(2);/obj/random/multiple/minevault,
prob(1);/obj/random/coin,
prob(1);/obj/random/drinkbottle,
prob(1);/obj/random/tool/alien)
prob(1);/obj/random/tool/alien)
//Scug spawner for the picnic!
/obj/random/mob/wildscugs
name = "Random catslug spawner"
desc = "Spawns catslugs with random colours!"
icon_state = "vore"
mob_faction = "vore"
spawn_nothing_percentage = 25
mob_wander_distance = 4
mob_wander = 1
mob_returns_home = 1
var/newname = null
var/newdesc = null
/obj/random/mob/wildscugs/item_to_spawn()
return pick(prob(99); /mob/living/simple_mob/vore/alienanimals/catslug,
prob(1); /mob/living/simple_mob/vore/alienanimals/catslug/suslug/color) //A super rare surprise
/obj/random/mob/wildscugs/spawn_item()
var/build_path = item_to_spawn()
var/mob/living/simple_mob/M = new build_path(src.loc)
if(!istype(M))
return
if(M.has_AI())
var/datum/ai_holder/AI = M.ai_holder
AI.go_sleep() //Don't fight eachother while we're still setting up!
AI.returns_home = mob_returns_home
AI.wander = mob_wander
AI.max_home_distance = mob_wander_distance
if(overwrite_hostility)
AI.hostile = mob_hostile
AI.retaliate = mob_retaliate
AI.go_wake() //Now you can kill eachother if your faction didn't override.
if(pixel_x || pixel_y)
M.pixel_x = pixel_x
M.pixel_y = pixel_y
if(mob_faction)
M.faction = mob_faction
M.color = pick(COLOR_WHITE, COLOR_RED, COLOR_PURPLE, COLOR_YELLOW, COLOR_CYAN_BLUE, COLOR_RED_GRAY, COLOR_BEIGE, COLOR_PINK, COLOR_BLACK)
if(newname)
if(islist(newname))
M.name = pick(newname)
else
M.name = newname
if(newdesc)
if(islist(newdesc))
M.desc = pick(newdesc)
else
M.desc = newdesc
@@ -9,6 +9,7 @@
S["directory_ad"] >> pref.directory_ad
S["sensorpref"] >> pref.sensorpref
S["capture_crystal"] >> pref.capture_crystal
S["auto_backup_implant"] >> pref.auto_backup_implant
/datum/category_item/player_setup_item/vore/misc/save_character(var/savefile/S)
S["show_in_directory"] << pref.show_in_directory
@@ -17,7 +18,7 @@
S["directory_ad"] << pref.directory_ad
S["sensorpref"] << pref.sensorpref
S["capture_crystal"] << pref.capture_crystal
S["auto_backup_implant"] << pref.auto_backup_implant
/datum/category_item/player_setup_item/vore/misc/copy_to_mob(var/mob/living/carbon/human/character)
if(pref.sensorpref > 5 || pref.sensorpref < 1)
@@ -31,6 +32,7 @@
pref.directory_erptag = sanitize_inlist(pref.directory_erptag, GLOB.char_directory_erptags, initial(pref.directory_erptag))
pref.sensorpref = sanitize_integer(pref.sensorpref, 1, sensorpreflist.len, initial(pref.sensorpref))
pref.capture_crystal = sanitize_integer(pref.capture_crystal, 0, 1, initial(pref.capture_crystal))
pref.auto_backup_implant = sanitize_integer(pref.auto_backup_implant, 0, 1, initial(pref.auto_backup_implant))
/datum/category_item/player_setup_item/vore/misc/content(var/mob/user)
. += "<br>"
@@ -39,7 +41,8 @@
. += "<b>Character Directory ERP Tag:</b> <a href='?src=\ref[src];directory_erptag=1'><b>[pref.directory_erptag]</b></a><br>"
. += "<b>Character Directory Advertisement:</b> <a href='?src=\ref[src];directory_ad=1'><b>Set Directory Ad</b></a><br>"
. += "<b>Suit Sensors Preference:</b> <a [pref.sensorpref ? "" : ""] href='?src=\ref[src];toggle_sensor_setting=1'><b>[sensorpreflist[pref.sensorpref]]</b></a><br>"
. += "<b>Capture Crystal Preference</b> <a [pref.capture_crystal ? "class='linkOn'" : ""] href='?src=\ref[src];toggle_capture_crystal=1'><b>[pref.capture_crystal ? "Yes" : "No"]</b></a><br>"
. += "<b>Capture Crystal Preference:</b> <a [pref.capture_crystal ? "class='linkOn'" : ""] href='?src=\ref[src];toggle_capture_crystal=1'><b>[pref.capture_crystal ? "Yes" : "No"]</b></a><br>"
. += "<b>Spawn With Backup Implant:</b> <a [pref.auto_backup_implant ? "class='linkOn'" : ""] href='?src=\ref[src];toggle_implant=1'><b>[pref.auto_backup_implant ? "Yes" : "No"]</b></a><br>"
/datum/category_item/player_setup_item/vore/misc/OnTopic(var/href, var/list/href_list, var/mob/user)
if(href_list["toggle_show_in_directory"])
@@ -71,5 +74,7 @@
else if(href_list["toggle_capture_crystal"])
pref.capture_crystal = pref.capture_crystal ? 0 : 1;
return TOPIC_REFRESH
else if(href_list["toggle_implant"])
pref.auto_backup_implant = pref.auto_backup_implant ? 0 : 1;
return TOPIC_REFRESH
return ..();
+1
View File
@@ -5,6 +5,7 @@
var/directory_ad = "" //Advertisement stuff to show in character directory.
var/sensorpref = 5 //Set character's suit sensor level
var/capture_crystal = 1 //Whether or not someone is able to be caught with capture crystals
var/auto_backup_implant = FALSE //Whether someone starts with a backup implant or not.
var/job_talon_high = 0
var/job_talon_med = 0
@@ -80,6 +80,53 @@
new /datum/stack_recipe("canister", /obj/machinery/portable_atmospherics/canister, 10, time = 15, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
new /datum/stack_recipe("cannon frame", /obj/item/weapon/cannonframe, 10, time = 15, one_per_turf = 0, on_floor = 0, recycle_material = "[name]"),
new /datum/stack_recipe("regular floor tile", /obj/item/stack/tile/floor, 1, 4, 20, recycle_material = "[name]"),
//Eris Floor tiles- Normal
new /datum/stack_recipe_list("eris floors-normal", list(
new /datum/stack_recipe("floor tile", /obj/item/stack/tile/floor/eris/steel, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("panel tile", /obj/item/stack/tile/floor/eris/steel/panels, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("techfloor tile", /obj/item/stack/tile/floor/eris/steel/techfloor, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("techfloor tile with vents", /obj/item/stack/tile/floor/eris/steel/techfloor_grid, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("brown perforated tile", /obj/item/stack/tile/floor/eris/steel/brown_perforated, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("gray perforated tile", /obj/item/stack/tile/floor/eris/steel/gray_perforated, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("cargo tile", /obj/item/stack/tile/floor/eris/steel/cargo, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("brown platform tile", /obj/item/stack/tile/floor/eris/steel/brown_platform, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("gray platform tile", /obj/item/stack/tile/floor/eris/steel/gray_platform, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("danger tile", /obj/item/stack/tile/floor/eris/steel/danger, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("golden tile", /obj/item/stack/tile/floor/eris/steel/golden, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("monofloor tile", /obj/item/stack/tile/floor/eris/steel/monofloor, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("bar flat tile", /obj/item/stack/tile/floor/eris/steel/bar_flat, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("bar dance tile", /obj/item/stack/tile/floor/eris/steel/bar_dance, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("bar light tile", /obj/item/stack/tile/floor/eris/steel/bar_light, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe_list("corner tiles", list(
new /datum/stack_recipe("blue corner tile", /obj/item/stack/tile/floor/eris/steel/bluecorner, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("orange corner tile", /obj/item/stack/tile/floor/eris/steel/orangecorner, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("cyan corner tile", /obj/item/stack/tile/floor/eris/steel/cyancorner, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("violet corner tile", /obj/item/stack/tile/floor/eris/steel/violetcorener, 1, 4, 20, recycle_material = "[name]"),
)),
)),
//Eris Floor tiles- Dark
new /datum/stack_recipe_list("eris floors-dark", list(
new /datum/stack_recipe("dark floor tile", /obj/item/stack/tile/floor/eris/dark, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("dark panel tile", /obj/item/stack/tile/floor/eris/dark/panels, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("dark techfloor tile", /obj/item/stack/tile/floor/eris/dark/techfloor, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("dark techfloor tile with vents", /obj/item/stack/tile/floor/eris/dark/techfloor_grid, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("dark brown perforated tile", /obj/item/stack/tile/floor/eris/dark/brown_perforated, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("dark gray perforated tile", /obj/item/stack/tile/floor/eris/dark/gray_perforated, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("dark cargo tile", /obj/item/stack/tile/floor/eris/dark/cargo, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("dark brown platform tile", /obj/item/stack/tile/floor/eris/dark/brown_platform, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("dark gray platform tile", /obj/item/stack/tile/floor/eris/dark/gray_platform, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("dark danger tile", /obj/item/stack/tile/floor/eris/dark/danger, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("dark golden tile", /obj/item/stack/tile/floor/eris/dark/golden, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("dark monofloor tile", /obj/item/stack/tile/floor/eris/dark/monofloor, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe_list("dark corner tiles", list(
new /datum/stack_recipe("dark blue corner tile", /obj/item/stack/tile/floor/eris/dark/bluecorner, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("dark orange corner tile", /obj/item/stack/tile/floor/eris/dark/orangecorner, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("dark cyan corner tile", /obj/item/stack/tile/floor/eris/dark/cyancorner, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("dark violet corner tile", /obj/item/stack/tile/floor/eris/dark/violetcorener, 1, 4, 20, recycle_material = "[name]"),
)),
)),
new /datum/stack_recipe("roofing tile", /obj/item/stack/tile/roofing, 3, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("metal rod", /obj/item/stack/rods, 1, 2, 60, recycle_material = "[name]"),
new /datum/stack_recipe("frame parts", /obj/item/frame, 5, time = 25, on_floor = 1, recycle_material = "[name]"),
@@ -24,6 +24,29 @@
new /datum/stack_recipe("reagent dispenser cartridge (small)", /obj/item/weapon/reagent_containers/chem_disp_cartridge/small, 1, on_floor=0, pass_stack_color = TRUE, recycle_material = "[name]"), // 100u
new /datum/stack_recipe("white floor tile", /obj/item/stack/tile/floor/white, 1, 4, 20, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("freezer floor tile", /obj/item/stack/tile/floor/freezer, 1, 4, 20, pass_stack_color = TRUE, recycle_material = "[name]"),
//Eris Floor tiles- white
new /datum/stack_recipe_list("eris floors-white", list(
new /datum/stack_recipe("white floor tile", /obj/item/stack/tile/floor/eris/white, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("white panel tile", /obj/item/stack/tile/floor/eris/white/panels, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("white techfloor tile", /obj/item/stack/tile/floor/eris/white/techfloor, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("white techfloor tile with vents", /obj/item/stack/tile/floor/eris/white/techfloor_grid, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("white brown perforated tile", /obj/item/stack/tile/floor/eris/white/brown_perforated, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("white gray perforated tile", /obj/item/stack/tile/floor/eris/white/gray_perforated, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("white cargo tile", /obj/item/stack/tile/floor/eris/white/cargo, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("white brown platform tile", /obj/item/stack/tile/floor/eris/white/brown_platform, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("white gray platform tile", /obj/item/stack/tile/floor/eris/white/gray_platform, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("white danger tile", /obj/item/stack/tile/floor/eris/white/danger, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("white golden tile", /obj/item/stack/tile/floor/eris/white/golden, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("white monofloor tile", /obj/item/stack/tile/floor/eris/white/monofloor, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe_list("white corner tiles", list(
new /datum/stack_recipe("white blue corner tile", /obj/item/stack/tile/floor/eris/white/bluecorner, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("white orange corner tile", /obj/item/stack/tile/floor/eris/white/orangecorner, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("white cyan corner tile", /obj/item/stack/tile/floor/eris/white/cyancorner, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("white violet corner tile", /obj/item/stack/tile/floor/eris/white/violetcorener, 1, 4, 20, recycle_material = "[name]"),
)),
)),
new /datum/stack_recipe("shower curtain", /obj/structure/curtain, 4, time = 15, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("plastic flaps", /obj/structure/plasticflaps, 4, time = 25, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("water-cooler", /obj/structure/reagent_dispensers/water_cooler, 4, time = 10, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]"),
@@ -66,11 +66,15 @@
init_typing_indicator("[cur_bubble_appearance]_typing")
if(state && !typing)
loc.add_overlay(typing_indicator, TRUE)
add_overlay(typing_indicator, TRUE)
typing = TRUE
typing_indicator_active = typing_indicator
else if(typing)
loc.cut_overlay(typing_indicator, TRUE)
cut_overlay(typing_indicator_active, TRUE)
typing = FALSE
if(typing_indicator_active != typing_indicator)
qdel(typing_indicator_active)
typing_indicator_active = null
return state
@@ -43,7 +43,7 @@
organ_names = /decl/mob_organ_names/miningdrone
ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting/threatening
say_list_type = /datum/say_list/malf_drone
say_list_type = /datum/say_list/malf_drone/mining
tame_items = list(
/obj/item/weapon/ore/verdantium = 90,
@@ -66,6 +66,8 @@
var/last_search = 0
var/search_cooldown = 5 SECONDS
var/ignoreunarmed = TRUE
var/allowedtools = list(/obj/item/weapon/pickaxe, /obj/item/weapon/gun/energy/kinetic_accelerator, /obj/item/weapon/gun/magnetic/matfed/phoronbore, /obj/item/weapon/kinetic_crusher)
/mob/living/simple_mob/mechanical/mining_drone/Initialize()
ion_trail = new
@@ -99,12 +101,52 @@
return .
if(!.)
if(ai_holder.check_attacker(H)) //it doesn't care how nicely you're geared if you've attacked it
return FALSE
var/has_tool = FALSE
var/obj/item/I = H.get_active_hand()
if(istype(I,/obj/item/weapon/pickaxe))
has_tool = TRUE
if(!istype(I,/obj/item/weapon))
if(ignoreunarmed)
return TRUE
else //just so they don't attack "miners" for having their mining gear in their offhand
var/obj/item/OH = H.get_inactive_hand()
if(OH)
for (var/path in allowedtools)
if(istype(OH,path))
has_tool = TRUE
break
else
for (var/path in allowedtools)
if(istype(I,path))
has_tool = TRUE
break
if(!has_tool) //if a valid tool not found in main hand, check offhand
var/obj/item/OH = H.get_inactive_hand()
if(OH)
for (var/path in allowedtools)
if(istype(OH,path))
has_tool = TRUE
break
return has_tool
// extra IFF aside from the above - will detect and react to the following attacks from allies (necessary as IIsAlly prevents retaliation if true)
/mob/living/simple_mob/mechanical/mining_drone/attack_hand(mob/living/L)
..()
if(istype(L) && L.a_intent != I_HELP)
if(ai_holder)
ai_holder.add_attacker(L)
/mob/living/simple_mob/mechanical/mining_drone/bullet_act(var/obj/item/projectile/P, var/def_zone)
..()
if(ai_holder && P.firer)
ai_holder.add_attacker(P.firer)
/mob/living/simple_mob/mechanical/mining_drone/hit_with_weapon(obj/item/I, mob/living/user, var/effective_force, var/hit_zone)
..()
if(ai_holder)
ai_holder.add_attacker(user)
/mob/living/simple_mob/mechanical/mining_drone/handle_special()
if(my_storage && (get_AI_stance() in list(STANCE_APPROACH, STANCE_IDLE, STANCE_FOLLOW)) && !is_AI_busy() && isturf(loc) && (world.time > last_search + search_cooldown) && (my_storage.contents.len < my_storage.max_storage_space))
last_search = world.time
@@ -128,4 +170,13 @@
my_storage.remove_from_storage(I, OB)
/decl/mob_organ_names/miningdrone
hit_zones = list("chassis", "comms array", "sensor suite", "left excavator module", "right excavator module", "maneuvering thruster")
hit_zones = list("chassis", "comms array", "sensor suite", "left excavator module", "right excavator module", "maneuvering thruster")
/datum/say_list/malf_drone/mining
say_threaten = list("Armed intruder detected.", "Lay down your weapons.", "Mining personnel only.", "Threat detected.", "Mining gear check: negative.")
/mob/living/simple_mob/mechanical/mining_drone/scavenger //more aggro version for the debris field, with a weaker weapon
name = "scavenger drone"
ignoreunarmed = FALSE
allowedtools = list(/obj/item/weapon/pickaxe)
projectiletype = /obj/item/projectile/energy/excavate/weak
+1
View File
@@ -218,6 +218,7 @@
var/typing
var/obj/effect/decal/typing_indicator
var/obj/effect/decal/typing_indicator_active
var/cur_typing_indicator
var/custom_speech_bubble = "default"
@@ -486,6 +486,12 @@
AnnounceArrival(character, rank, join_message, announce_channel, character.z)
data_core.manifest_inject(character)
ticker.minds += character.mind//Cyborgs and AIs handle this in the transform proc. //TODO!!!!! ~Carn
if(ishuman(character))
if(character.client.prefs.auto_backup_implant)
var/obj/item/weapon/implant/backup/imp = new(src)
if(imp.handle_implant(character,character.zone_sel.selecting))
imp.post_implant(character)
qdel(src) // Delete new_player mob
@@ -900,4 +900,12 @@
/datum/sprite_accessory/ears/syrishroom
name = "Orange Mushroom Cap"
icon = 'icons/mob/vore/ears_vr.dmi'
icon_state = "syrishroom"
icon_state = "syrishroom"
/datum/sprite_accessory/ears/singlesidehorn
name = "Single Side Horn"
desc = ""
icon = 'icons/mob/vore/ears_vr.dmi'
icon_state = "single-side-horn"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
@@ -886,3 +886,19 @@
body_parts = list(BP_L_FOOT,BP_R_FOOT)
hide_body_parts = list(BP_L_FOOT,BP_R_FOOT)
organ_override = TRUE
/datum/sprite_accessory/marking/vr_unathi_blocky_head
name = "Unathi alt head (Blocky)"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "unathi_blocky_head"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
hide_body_parts = list(BP_HEAD)
organ_override = TRUE
/datum/sprite_accessory/marking/vr_unathi_blocky_head_eyes
name = "Unathi alt head eyes (Blocky)"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "unathi_blocky_head_eyes"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
@@ -1321,6 +1321,13 @@
clip_mask_icon = 'icons/mob/vore/taurs_vr.dmi'
clip_mask_state = "taur_clip_mask_def" //Used to clip off the lower part of suits & uniforms.
/datum/sprite_accessory/tail/blade_like_tail
name = "Blade-like Tail"
icon = 'icons/mob/vore/tails_vr.dmi'
icon_state = "blade-like-tail"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
//LONG TAILS ARE NOT TAUR BUTTS >:O
/datum/sprite_accessory/tail/longtail
name = "You should not see this..."
@@ -158,6 +158,13 @@
icon_state = "soghun_dubhorns"
species_allowed = list(SPECIES_UNATHI, SPECIES_XENOCHIMERA, SPECIES_PROTEAN)
/datum/sprite_accessory/hair/una_quinthorns
name = "Quintiple Unathi Horns"
icon = 'icons/mob/human_face_vr.dmi'
icon_add = 'icons/mob/human_face_vr_add.dmi'
icon_state = "unathi_quintiple_horns"
species_allowed = list(SPECIES_UNATHI, SPECIES_XENOCHIMERA, SPECIES_PROTEAN)
/datum/sprite_accessory/hair/taj_ears
name = "Tajaran Ears"
icon_state = "ears_plain"
@@ -296,3 +296,11 @@
desc = ""
icon = 'icons/mob/vore/wings_vr.dmi'
icon_state = "dragonfly_tesh"
/datum/sprite_accessory/wing/snail_shell
name = "snail shell, colorable"
desc = ""
icon_state = "snail_shell"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "snail_shell_markings"
+5 -1
View File
@@ -35,9 +35,13 @@
if(state && !typing)
add_overlay(typing_indicator, TRUE)
typing = TRUE
typing_indicator_active = typing_indicator
else if(typing)
cut_overlay(typing_indicator, TRUE)
cut_overlay(typing_indicator_active, TRUE)
typing = FALSE
if(typing_indicator_active != typing_indicator)
qdel(typing_indicator_active)
typing_indicator_active = null
return state
+9
View File
@@ -89,6 +89,15 @@ var/global/list/limb_icon_cache = list()
mark_s.Blend(markings[M]["color"], mark.color_blend_mode) // VOREStation edit
mob_icon.Blend(mark_s, ICON_OVERLAY) //So when it's on your body, it has icons
icon_cache_key = "[M][markings[M]["color"]]"
for(var/MM in markings)
var/datum/sprite_accessory/marking/mark_style = markings[MM]["datum"]
if(mark_style.organ_override)
continue
var/icon/mark_s_s = new/icon("icon" = mark_style.icon, "icon_state" = "[mark_style.icon_state]-[organ_tag]")
mark_s.Blend(markings[MM]["color"], mark_style.color_blend_mode) // VOREStation edit
add_overlay(mark_s_s) //So when it's not on your body, it has icons
mob_icon.Blend(mark_s_s, ICON_OVERLAY) //So when it's on your body, it has icons
icon_cache_key += "[MM][markings[MM]["color"]]"
dir = EAST
icon = mob_icon
@@ -45,7 +45,7 @@ When editing the list, please try and keep similar probabilities near each other
prob(50); "[info] Lost on the map? You can find In-Character help by speaking on the Common Radio. You can do this by pressing F3 and typing ' ; ' before your message. Your fellow co-workers will likely help. If OOC help is preferred, press F1 for mentorhelp. ",
prob(50); "[info] You may set your suit sensors by clicking on the icon in the bottom left corner, then right click the clothes that appear right above it. It is recommended to turn on suit sensors to 'TRACKING' before doing anything dangerous like mining, and to turn them off before digestion scenes as prey.",
prob(35); "[info] You can insert your I.D into your PDA. This frees up your belt from having to carry your PDA. Furthermore, by clicking and dragging the PDA to game screen, you can use it without holding it!",
prob(35); "[info] It is never a bad idea to visit the medbay if you get injured - small burns and cuts can get infected and become harder to treat! If there is no medical staff, bathrooms and the bar often has a NanoMed on the wall - with ointments to disinfect cuts and burns, bandages to treat bruises and encourage healing.",
prob(35); "[info] It is never a bad idea to visit the medbay if you get injured - small burns and cuts can get infected and become harder to treat! Alternatively, bathrooms and the bar often has a NanoMed on the wall - with ointments to disinfect cuts and burns, bandages to treat bruises and encourage healing.",
prob(35); "[info] Your vore-bellies have multiple add-ons! Muffling is excellent to ensure your prey does not accidentally inform everyone about their predicament, and jam suit sensors is a great courtesy to avoid medical being worried about your prey!",
prob(25); "[info] Two control modes exist for SS13 - hotkey ON and hotkey OFF. You can swap between the two modes by pressing TAB. In hotkey mode, to chat you need to press T to say anything which creates a small talking bubble. You can consult our list of hotkeys at https://wiki.vore-station.net/Keyboard_Shortcuts",
prob(25); "[info] Do you want to shift your character around, for instance to appear as if leaning on the wall? Press CTRL + SHIFT + arrow keys to do so! Moving resets this.",
@@ -59,6 +59,7 @@ When editing the list, please try and keep similar probabilities near each other
var/info = "The following is a roleplay-focused tip to playing on VOREStation \n"
return pick(
prob(45); "[info] Our server has a strong 'Bystander Consent' policy, meaning that scenes are expected to be mindful of the preferences of those around them in public, not just their partners. When in doubt, keep it subtle, and communicate via looc!",
prob(40); "[info] Sometimes, players may possess creatures that look like monsters or wild animals (e.g: defanged xenomorphs). These are called 'maint preds' and if you encounter them - you should avoid drawing attention to their existence over the radio! They're here to create unique vore scenarios, not to be treated as antags.",
prob(40); "[info] Please avoid a character that knows everything. Having only a small set of jobs you are capable of doing can help flesh out your character! It's OK for things to break and fail if nobody is around to fix it - you do not need to do others' jobs.",
prob(40); "[info] Just because you see something doesn't mean your character has to. A courtesy 'missing' of contraband or scene details can go a long way towards preserving everyone's fun!",
prob(40); "[info] Embrace the limits of your character's skillsets! Seeking out other players to help you with a more challenging task might build friendships, or even lead to a scene!",
@@ -131,6 +131,10 @@
combustion = FALSE
hud_state = "plasma_blast"
/obj/item/projectile/energy/excavate/weak
damage = 15
excavation_amount = 100
/obj/item/projectile/energy/dart
name = "dart"
icon_state = "toxin"
+2
View File
@@ -498,6 +498,8 @@
if(prey.ckey)
GLOB.prey_eaten_roundstat++
if(owner.mind)
owner.mind.vore_prey_eaten++
// Get the line that should show up in Examine message if the owner of this belly
// is examined. By making this a proc, we not only take advantage of polymorphism,
@@ -47,7 +47,7 @@
to_chat(user, "<span class='warning'>The slime cannot get any more fertile!</span>")
return ..()
to_chat(user, "<span class='notice'>You feed the slime the infertility agent. It will now have less offspring.</span>")
to_chat(user, "<span class='notice'>You feed the slime the fertility agent. It will now have more offspring.</span>")
M.split_amount = between(2, M.split_amount + 2, 6)
playsound(src, 'sound/effects/bubbles.ogg', 50, 1)
qdel(src)
@@ -192,4 +192,4 @@
if(istype(AI) && justified)
AI.obedience = 10
playsound(src, 'sound/effects/bubbles.ogg', 50, 1)
qdel(src)
qdel(src)
+1
View File
@@ -131,6 +131,7 @@ silvertalismen - Vox
silvertalismen - Xenochimera
sirlionfur - Black-Eyed Shadekin
skylarks - Black-Eyed Shadekin
slovakiani - Black-Eyed Shadekin
slysilentclaw - Black-Eyed Shadekin
smdytb1 - Black-Eyed Shadekin
spirit1299 - Black-Eyed Shadekin
Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 158 KiB

After

Width:  |  Height:  |  Size: 159 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 48 KiB

+6
View File
@@ -13,6 +13,7 @@
#include "pois/outdoors12.dmm"
#include "pois/outdoors13.dmm"
#include "pois/outdoors14.dmm"
#include "pois/outdoors16.dmm"
#include "pois/cave1.dmm"
#include "pois/cave2.dmm"
@@ -220,6 +221,7 @@
mappath = 'pois/outdoors1.dmm'
cost = 10
allow_duplicates = TRUE
/datum/map_template/groundbase/outdoor/thing2
name = "Outdoors2"
mappath = 'pois/outdoors2.dmm'
@@ -267,6 +269,10 @@
name = "Outdoors15"
mappath = 'pois/outdoors15.dmm'
allow_duplicates = FALSE
/datum/map_template/groundbase/outdoor/thing16
name = "Outdoors16"
mappath = 'pois/outdoors16.dmm'
allow_duplicates = FALSE
/datum/map_template/groundbase/maintcaves/cave
name = "Cave 1"
+221
View File
@@ -0,0 +1,221 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/obj/item/weapon/reagent_containers/food/snacks/chip/nacho/cheese,
/turf/simulated/floor/outdoors/grass/seasonal/nomobs,
/area/template_noop)
"b" = (
/obj/item/weapon/reagent_containers/food/snacks/chip/nacho/salsa,
/turf/simulated/floor/outdoors/grass/seasonal/nomobs,
/area/template_noop)
"c" = (
/obj/random/drinkbottle,
/turf/simulated/floor/outdoors/grass/seasonal/nomobs,
/area/template_noop)
"d" = (
/obj/structure/table/wooden_reinforced,
/obj/item/weapon/storage/toolbox/lunchbox/cat/filled{
pixel_y = 8
},
/obj/item/weapon/storage/toolbox/lunchbox/nymph/filled,
/obj/item/clothing/suit/leathercoat{
desc = "Who would use a leather coat as a tablecloth?!";
name = "Tablecloth?!";
pixel_x = 5
},
/obj/item/clothing/suit/greatcoat{
desc = "This great coat appears covered in food! Did... it get stolen and reused as ... ?!";
name = "Tablecloth?";
pixel_x = -9
},
/turf/simulated/floor/outdoors/grass/seasonal/notrees_nomobs_nosnow,
/area/template_noop)
"g" = (
/obj/effect/decal/cleanable/fruit_smudge,
/obj/item/weapon/storage/mre/random,
/turf/simulated/floor/outdoors/grass/seasonal/notrees_nomobs_lowsnow,
/area/template_noop)
"h" = (
/obj/structure/table/bench/wooden,
/obj/effect/decal/cleanable/filth,
/obj/random/mob/wildscugs{
newdesc = "A wild catslug enjoying the simpler things in life: a picnic!";
newname = list("happy catslug", "rotund catslug", "anxious catslug", "angry Catslug", "content Catslug", "sad catslug")
},
/turf/simulated/floor/outdoors/grass/seasonal/notrees_nomobs_nosnow,
/area/template_noop)
"i" = (
/obj/structure/table/wooden_reinforced,
/obj/random/pizzabox,
/obj/item/weapon/storage/toolbox/lunchbox/mars/filled{
pixel_x = -10;
pixel_y = 11
},
/obj/item/weapon/bedsheet/rd{
desc = "Is this Nubbins' doing?!";
name = "Strange tablecloth";
pixel_x = 11;
pixel_y = 12
},
/obj/random/mug,
/turf/simulated/floor/outdoors/grass/seasonal/notrees_nomobs_nosnow,
/area/template_noop)
"k" = (
/obj/random/drinkbottle,
/turf/simulated/floor/outdoors/grass/seasonal/notrees_nomobs_lowsnow,
/area/template_noop)
"m" = (
/obj/random/coin,
/turf/simulated/floor/outdoors/grass/seasonal/nomobs,
/area/template_noop)
"n" = (
/obj/effect/decal/cleanable/filth,
/turf/simulated/floor/outdoors/grass/seasonal/notrees_nomobs_lowsnow,
/area/template_noop)
"p" = (
/obj/random/junk,
/turf/simulated/floor/outdoors/grass/seasonal/nomobs,
/area/template_noop)
"s" = (
/obj/structure/table/bench/wooden,
/obj/random/mob/wildscugs{
newdesc = "A wild catslug enjoying the simpler things in life: a picnic!";
newname = list("happy catslug", "rotund catslug", "anxious catslug", "angry Catslug", "content Catslug", "sad catslug")
},
/obj/item/weapon/ore/diamond{
name = "porl"
},
/turf/simulated/floor/outdoors/grass/seasonal/notrees_nomobs_nosnow,
/area/template_noop)
"t" = (
/obj/item/pizzavoucher,
/turf/simulated/floor/outdoors/grass/seasonal/nomobs,
/area/template_noop)
"w" = (
/obj/item/trash/chipbasket,
/turf/simulated/floor/outdoors/grass/seasonal/nomobs,
/area/template_noop)
"z" = (
/obj/random/drinksoft,
/turf/simulated/floor/outdoors/grass/seasonal/notrees_nomobs_lowsnow,
/area/template_noop)
"A" = (
/turf/simulated/floor/outdoors/grass/seasonal/nomobs,
/area/template_noop)
"F" = (
/obj/structure/table/bench/wooden,
/obj/random/mob/wildscugs{
newdesc = "A wild catslug enjoying the simpler things in life: a picnic!";
newname = list("happy catslug", "rotund catslug", "anxious catslug", "angry Catslug", "content Catslug", "sad catslug")
},
/obj/item/weapon/material/twohanded/spear/foam{
desc = "The only way you can hunt things with this is by tickling them to death.";
name = "squishy foam spear"
},
/turf/simulated/floor/outdoors/grass/seasonal/notrees_nomobs_nosnow,
/area/template_noop)
"J" = (
/obj/structure/table/bench/wooden,
/obj/random/mob/wildscugs{
newdesc = "A wild catslug enjoying the simpler things in life: a picnic!";
newname = list("happy catslug", "rotund catslug", "anxious catslug", "angry Catslug", "content Catslug", "sad catslug")
},
/turf/simulated/floor/outdoors/grass/seasonal/notrees_nomobs_nosnow,
/area/template_noop)
"L" = (
/obj/effect/decal/remains/lizard,
/turf/simulated/floor/outdoors/grass/seasonal/nomobs,
/area/template_noop)
"N" = (
/obj/structure/table/wooden_reinforced,
/obj/item/weapon/bedsheet/hosdouble{
desc = "Odd, this tablecloth looks... suspiciously like the bedsheets NanoTrasen security staff use!";
name = "Picnic Blanket"
},
/obj/item/weapon/bedsheet/hosdouble{
desc = "Odd, this tablecloth looks... suspiciously like the bedsheets NanoTrasen security staff use!";
name = "Picnic Blanket";
pixel_x = 11
},
/obj/item/weapon/storage/toolbox/lunchbox/heart/filled,
/turf/simulated/floor/outdoors/grass/seasonal/notrees_nomobs_nosnow,
/area/template_noop)
"O" = (
/obj/structure/table/bench/wooden,
/obj/random/mob/wildscugs{
newdesc = "A wild catslug enjoying the simpler things in life: a picnic!";
newname = list("happy catslug", "rotund catslug", "anxious catslug", "angry Catslug", "content Catslug", "sad catslug")
},
/obj/random/mug,
/turf/simulated/floor/outdoors/grass/seasonal/notrees_nomobs_nosnow,
/area/template_noop)
"Q" = (
/obj/random/cigarettes,
/turf/simulated/floor/outdoors/grass/seasonal/nomobs,
/area/template_noop)
"S" = (
/obj/structure/table/bench/wooden,
/obj/item/weapon/towel/random,
/obj/random/mob/wildscugs{
newdesc = "A wild catslug enjoying the simpler things in life: a picnic!";
newname = list("happy catslug", "rotund catslug", "anxious catslug", "angry Catslug", "content Catslug", "sad catslug")
},
/turf/simulated/floor/outdoors/grass/seasonal/notrees_nomobs_nosnow,
/area/template_noop)
"T" = (
/obj/effect/decal/cleanable/tomato_smudge,
/turf/simulated/floor/outdoors/grass/seasonal/notrees_nomobs_lowsnow,
/area/template_noop)
"Y" = (
/obj/random/drinksoft,
/turf/simulated/floor/outdoors/grass/seasonal/nomobs,
/area/template_noop)
(1,1,1) = {"
c
A
A
A
A
"}
(2,1,1) = {"
a
T
n
n
Y
"}
(3,1,1) = {"
Q
s
h
J
w
"}
(4,1,1) = {"
L
N
d
i
b
"}
(5,1,1) = {"
t
F
O
S
m
"}
(6,1,1) = {"
L
z
g
k
A
"}
(7,1,1) = {"
A
A
A
A
p
"}
+1 -1
View File
@@ -4190,7 +4190,6 @@
#include "maps\expedition_vr\beach\submaps\mountains.dm"
#include "maps\expedition_vr\beach\submaps\mountains_areas.dm"
#include "maps\gateway_archive_vr\blackmarketpackers.dm"
#include "maps\groundbase\groundbase.dm"
#include "maps\southern_cross\items\clothing\sc_accessory.dm"
#include "maps\southern_cross\items\clothing\sc_suit.dm"
#include "maps\southern_cross\items\clothing\sc_under.dm"
@@ -4206,5 +4205,6 @@
#include "maps\submaps\space_submaps\debrisfield\debrisfield.dm"
#include "maps\submaps\surface_submaps\wilderness\wilderness.dm"
#include "maps\submaps\surface_submaps\wilderness\wilderness_areas.dm"
#include "maps\tether\tether.dm"
#include "maps\~map_system\maps.dm"
// END_INCLUDE