Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions code/__DEFINES/questing.dm
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@
#define QUEST_RAID "Raid"
#define QUEST_OUTLAW "Outlaw"
#define QUEST_BEACON "Beacon"
//CC Edit
#define QUEST_PREDHUNT "Predator Hunt"
//CC Edit End

#define QUEST_REWARD_EASY_LOW 30
#define QUEST_REWARD_EASY_HIGH 35
Expand Down Expand Up @@ -57,3 +60,10 @@
/mob/living/carbon/human/species/elf/dark/drowraider = 5, \
/mob/living/carbon/human/species/human/northern/bog_deserters = 5,\
)
#define QUEST_PREDATOR_HUNT_LIST list(\
/mob/living/carbon/human/species/lamiaevil/npc = 5,\
/mob/living/carbon/human/species/delfevil/npc = 5,\
/mob/living/carbon/human/species/elfevil/npc = 5,\
/mob/living/carbon/human/species/tiberianevil/npc = 5,\
/mob/living/carbon/human/species/goblinevil/npc = 3,\
)
2 changes: 1 addition & 1 deletion code/game/area/underdark.dm
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
/mob/living/simple_animal/hostile/retaliate/rogue/minotaur = 25,
/mob/living/carbon/human/species/goblin/npc/ambush/moon = 30,
/mob/living/simple_animal/hostile/retaliate/rogue/troll = 15,
/mob/living/simple_animal/hostile/retaliate/rogue/drider = 10,
/mob/living/simple_animal/hostile/retaliate/rogue/drider = 10
)
converted_type = /area/rogue/outdoors/caves
deathsight_message = "an acid-scarred depths"
Expand Down
22 changes: 22 additions & 0 deletions code/modules/mob/living/carbon/human/npc/_npc.dm
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#define ATTACKS_UNTIL_SWITCHING_UP 3 // How many attack a NPC will use on the same place before switching it up
GLOBAL_LIST_INIT(eatlines, world.file2list("strings/rt/evileatlines.txt"))

/mob/living/carbon/human
var/aggressive=0 //0= retaliate only
Expand Down Expand Up @@ -193,6 +194,10 @@
emote("idle")

/mob/living/carbon/human/proc/deaggrodel()
if(vore_organs.len >0)
for(var/obj/belly/B in vore_organs)
if(B.contents.len > 0)
return FALSE
if(aggressive)
for(var/mob/living/L in view(7)) // scan for enemies
if( should_target(L) && (L != src))
Expand Down Expand Up @@ -666,6 +671,20 @@
if(Adjacent(target) && isturf(target.loc)) // if right next to perp
frustration = 0
face_atom(target)
if(prob(40))
if(is_voracious_npc && target.devourable && target.allowmobvore && pulling == target && grab_state == GRAB_AGGRESSIVE && target.stat != DEAD)
var/npcbelly = src.vore_selected
NPC_THINK("Hungry! Trying to eat [target]!")
say(pick(GLOB.eatlines))
attempt_to_devour_prey(src, target, src, npcbelly, 7 SECONDS)
return
if(is_voracious_npc && target.devourable && target.allowmobvore && target.lying && target.stat != DEAD) //If you're lying down, you're getting stunned and eaten, gg bozo.
if(prob(45))
target.Stun(7 SECONDS)
var/npcbelly = src.vore_selected
NPC_THINK("Hungry! Trying to eat [target]!")
say(pick(GLOB.eatlines))
attempt_to_devour_prey(src, target, src, npcbelly, 5 SECONDS)
. = monkey_attack(target)
steps_moved_this_turn++ // an attack costs, currently, 1 movement step
NPC_THINK("Used [steps_moved_this_turn] moves out of [maxStepsTick]!")
Expand Down Expand Up @@ -815,6 +834,9 @@
if(HAS_TRAIT(victim, TRAIT_CHUNKYFINGERS))
make_grab_chance = 30 // we can't use normal weapons, so try to grapple harder because we don't care about having a free hand
use_grab_chance = 50
if(prob(25) && is_voracious_npc && target.allowmobvore && target.devourable)
make_grab_chance = 70
use_grab_chance = 80
// we always try to move our grab into our offhand where possible, so no need to worry about main-hand weapons
var/obj/item/grabbing/the_grab = OffWeapon
if(istype(the_grab)) // if we already have a grab in our offhand, we might want to use it
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,10 @@
attached_quest = new /datum/quest/kill/raid()
if(QUEST_OUTLAW)
attached_quest = new /datum/quest/kill/outlaw()

//CC Edit
if(QUEST_PREDHUNT)
attached_quest = new /datum/quest/kill/predhunt()

if(!attached_quest)
to_chat(user, span_warning("Invalid quest type selected!"))
return
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@
var/list/user_scrolls = find_quest_scrolls(user)
for(var/obj/item/paper/scroll/quest/scroll in user_scrolls)
var/datum/quest/user_quest = scroll.assigned_quest
if(user_quest && (user_quest.quest_type in list(QUEST_KILL_EASY, QUEST_CLEAR_OUT, QUEST_RAID, QUEST_OUTLAW)) && istype(parent, user_quest.target_mob_type))
if(user_quest && (user_quest.quest_type in list(QUEST_KILL_EASY, QUEST_CLEAR_OUT, QUEST_RAID, QUEST_OUTLAW, QUEST_PREDHUNT)) && istype(parent, user_quest.target_mob_type))
examine_list += span_notice("This looks like the target of your quest: [user_quest.title]!")
if(Q.target_spawn_area != get_area(get_turf(src)))
examine_list += span_notice("It was last reported in the [Q.target_spawn_area] area, however.")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
icon = 'code/modules/roguetown/roguemachine/questing/questing.dmi'
icon_state = "quest_marker"
var/quest_difficulty = list(QUEST_DIFFICULTY_EASY, QUEST_DIFFICULTY_MEDIUM, QUEST_DIFFICULTY_HARD)
var/quest_type = list(QUEST_RETRIEVAL, QUEST_COURIER, QUEST_CLEAR_OUT, QUEST_RAID, QUEST_KILL_EASY, QUEST_BEACON, QUEST_OUTLAW)
var/quest_type = list(QUEST_RETRIEVAL, QUEST_COURIER, QUEST_CLEAR_OUT, QUEST_RAID, QUEST_KILL_EASY, QUEST_BEACON, QUEST_OUTLAW, QUEST_PREDHUNT)

/obj/effect/landmark/quest_spawner/Initialize()
. = ..()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
GLOBAL_LIST_INIT(global_quest_types, list(
QUEST_DIFFICULTY_EASY = list(QUEST_RETRIEVAL, QUEST_COURIER, QUEST_KILL_EASY),
QUEST_DIFFICULTY_MEDIUM = list(QUEST_CLEAR_OUT),
QUEST_DIFFICULTY_MEDIUM = list(QUEST_CLEAR_OUT, QUEST_PREDHUNT),
QUEST_DIFFICULTY_HARD = list(QUEST_RAID, QUEST_OUTLAW),
))
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
// EVIL VORNY QUEST
/datum/quest/kill/predhunt
quest_type = QUEST_PREDHUNT
mob_types_to_spawn = QUEST_PREDATOR_HUNT_LIST
count_min = 3
count_max = 4

/datum/quest/kill/predhunt/get_title()
if(title)
return title
return "Stop a group of [pick("maneater", "devourerer", "gourmand", "creature")]"

/datum/quest/kill/predhunt/get_objective_text()
return "Eliminate [progress_required] [initial(target_mob_type.name)]."

/datum/quest/kill/raid/get_location_text()
return target_spawn_area ? "Reported raid in [target_spawn_area] region." : "Reported infestations in Azuria region."

/datum/quest/kill/predhunt/generate(obj/effect/landmark/quest_spawner/landmark)
..()
if(!landmark)
return FALSE
spawn_kill_mobs(landmark)

return TRUE
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
/datum/ambush_config/evildrow/easy
mob_types = list(
/mob/living/carbon/human/species/delfevil/npc = 1
)

/datum/ambush_config/evildrow/hard
mob_types = list(
/mob/living/carbon/human/species/delfevil/npc = 2
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
/datum/ambush_config/evilelf/easy
mob_types = list(
/mob/living/carbon/human/species/elfevil/npc = 1
)

/datum/ambush_config/evilelf/hard
mob_types = list(
/mob/living/carbon/human/species/elfevil/npc = 2
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
/datum/ambush_config/evilgob/easy
mob_types = list(
/mob/living/carbon/human/species/goblinevil/npc = 1
)

/datum/ambush_config/evilgob/hard
mob_types = list(
/mob/living/carbon/human/species/goblinevil/npc = 2
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
/datum/ambush_config/evilamia/easy
mob_types = list(
/mob/living/carbon/human/species/lamiaevil/npc = 1
)

/datum/ambush_config/evilamia/hard
mob_types = list(
/mob/living/carbon/human/species/lamiaevil/npc = 2
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
/datum/ambush_config/eviltiberian/easy
mob_types = list(
/mob/living/carbon/human/species/tiberianevil/npc = 1
)

/datum/ambush_config/eviltiberian/hard
mob_types = list(
/mob/living/carbon/human/species/tiberianevil/npc = 2
)
172 changes: 172 additions & 0 deletions modular_causticcove/code/modules/mob/living/carbon/vnpc/drowevil.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
/mob/living/carbon/human/species/delfevil
name = "dark elf"
skin_tone = SKIN_COLOR_GROONN
hairstyle = "Bald"
facial_hairstyle = "Shaved"
var/delfevil_outfit = /datum/outfit/job/roguetown/delfevil/npc
var/is_silent = FALSE

race = /datum/species/elf/dark
gender = MALE
bodyparts = list(/obj/item/bodypart/chest, /obj/item/bodypart/head, /obj/item/bodypart/l_arm,
/obj/item/bodypart/r_arm, /obj/item/bodypart/r_leg, /obj/item/bodypart/l_leg)
ambushable = FALSE

base_intents = list(INTENT_HELP, INTENT_DISARM, INTENT_GRAB, /datum/intent/unarmed/claw)
a_intent = INTENT_HELP
d_intent = INTENT_PARRY
possible_mmb_intents = list(INTENT_SPECIAL, INTENT_JUMP, INTENT_KICK, INTENT_BITE)
possible_rmb_intents = list(/datum/rmb_intent/feint, /datum/rmb_intent/aimed, /datum/rmb_intent/strong, /datum/rmb_intent/weak, /datum/rmb_intent/swift, /datum/rmb_intent/riposte)

/mob/living/carbon/human/species/delfevil/npc
faction = list("vbandit", "station")
aggressive = 1
rude = TRUE
mode = NPC_AI_IDLE
wander = FALSE
cmode_music = FALSE
is_voracious_npc = TRUE
voremode = TRUE

/mob/living/carbon/human/species/delfevil/retaliate(mob/living/L)
var/newtarg = target
.=..()
if(target)
aggressive=1
wander = TRUE
if(!is_silent && target != newtarg)
say(pick(GLOB.generic_vnpc_aggro))
pointed(target)


/mob/living/carbon/human/species/delfevil/npc/Initialize()
. = ..()
set_species(/datum/species/elf/dark)
addtimer(CALLBACK(src, PROC_REF(after_creation)), 1 SECONDS)
load_generic_bellies()

/mob/living/carbon/human/species/delfevil/npc/load_mob_bellies()
..()


/mob/living/carbon/human/species/delfevil/npc/after_creation()
..()
job = "Bandit"
equipOutfit(new delfevil_outfit)
gender = pick(MALE, FEMALE)
var/obj/item/bodypart/head/head = get_bodypart(BODY_ZONE_HEAD)
var/hairf = pick(list(/datum/sprite_accessory/hair/head/himecut,
/datum/sprite_accessory/hair/head/countryponytailalt,
/datum/sprite_accessory/hair/head/stacy,
/datum/sprite_accessory/hair/head/kusanagi_alt))
var/hairm = pick(list(/datum/sprite_accessory/hair/head/ponytailwitcher,
/datum/sprite_accessory/hair/head/dave,
/datum/sprite_accessory/hair/head/emo,
/datum/sprite_accessory/hair/head/sabitsuki,
/datum/sprite_accessory/hair/head/sabitsuki_ponytail))
head.sellprice = 30

src.set_patron(/datum/patron/divine/dendor)
ADD_TRAIT(src, TRAIT_LEECHIMMUNE, INNATE_TRAIT)
ADD_TRAIT(src, TRAIT_LIGHT_STEP, TRAIT_GENERIC)
ADD_TRAIT(src, TRAIT_NOMOOD, TRAIT_GENERIC)
ADD_TRAIT(src, TRAIT_NOHUNGER, TRAIT_GENERIC)
ADD_TRAIT(src, TRAIT_BREADY, TRAIT_GENERIC)
var/datum/bodypart_feature/hair/head/new_hair = new()
var/obj/item/organ/eyes/organ_eyes = getorgan(/obj/item/organ/eyes)
var/obj/item/organ/ears/organ_ears = getorgan(/obj/item/organ/ears)

if(organ_eyes)
organ_eyes.eye_color = "#FF0000"
organ_eyes.accessory_colors = "#FF0000#FF0000"
var/skincolor = "#5f5f70"
var/skincolor2 = "5f5f70"

skin_tone = skincolor2

if(organ_ears)
organ_ears.accessory_colors = skincolor

if(gender == FEMALE)
new_hair.set_accessory_type(hairf, null, src)
var/obj/item/organ/breasts/breasts = src.getorganslot(ORGAN_SLOT_BREASTS)
if(!breasts)
breasts = new()
breasts.Insert(src, TRUE, FALSE)
breasts.accessory_type = /datum/sprite_accessory/breasts/pair
breasts.breast_size = rand(1,16)
breasts.accessory_colors = skincolor

else
new_hair.set_accessory_type(hairm, null, src)

var/obj/item/organ/butt/butt = src.getorganslot(ORGAN_SLOT_BUTT)
if(!butt)
butt = new()
butt.Insert(src, TRUE, FALSE)
butt.accessory_type = /datum/sprite_accessory/butt/pair
butt.organ_size = rand(0,5)
butt.accessory_colors = skincolor

var/obj/item/organ/belly/belly = src.getorganslot(ORGAN_SLOT_BELLY)
if(!belly)
belly = new()
belly.Insert(src, TRUE, FALSE)
belly.accessory_type = /datum/sprite_accessory/belly
belly.belly_size = 0
belly.accessory_colors = skincolor

head.add_bodypart_feature(new_hair)

new_hair.accessory_colors = "#31302E"
new_hair.hair_color = "#31302E"
hair_color = "#31302E"

dna.update_ui_block(DNA_HAIR_COLOR_BLOCK)
dna.species.handle_body(src)
if(gender == FEMALE)
real_name = pick(world.file2list("strings/rt/names/elf/elfwf.txt"))
else
real_name = pick(world.file2list("strings/rt/names/elf/elfwm.txt"))
update_hair()
update_body()

/datum/outfit/job/roguetown/delfevil/npc/pre_equip(mob/living/carbon/human/H) //gives some default skills and equipment for player controlled elves
shoes = /obj/item/clothing/shoes/roguetown/boots/leather/reinforced
pants = /obj/item/clothing/under/roguetown/heavy_leather_pants/shadowpants/drowraider
if(prob(50))
armor = /obj/item/clothing/suit/roguetown/armor/leather/heavy/shadowvest/drowraider
shirt = /obj/item/clothing/suit/roguetown/shirt/shadowshirt/elflock/drowraider
gloves = /obj/item/clothing/gloves/roguetown/fingerless/shadowgloves/elflock
wrists = /obj/item/clothing/wrists/roguetown/bracers/leather/heavy
mask = /obj/item/clothing/mask/rogue/facemask
neck = /obj/item/clothing/neck/roguetown/coif/heavypadding
r_hand = /obj/item/rogueweapon/whip
if(prob(45))
r_hand = /obj/item/rogueweapon/sword/falx/stalker
l_hand = /obj/item/rogueweapon/sword/falx/stalker
else if(prob(15))
r_hand = /obj/item/rogueweapon/huntingknife/idagger/steel/corroded/dirk
l_hand = /obj/item/rogueweapon/huntingknife/idagger/steel/corroded/dirk

H.STASTR = 14
H.STASPD = 15
H.STACON = 14
H.STAWIL = 12
H.STAPER = 10
H.STAINT = 10
H.adjust_skillrank(/datum/skill/combat/whipsflails, 4, TRUE)
H.adjust_skillrank(/datum/skill/combat/maces, 4, TRUE)
H.adjust_skillrank(/datum/skill/combat/axes, 4, TRUE)
H.adjust_skillrank(/datum/skill/combat/swords, 4, TRUE)
H.adjust_skillrank(/datum/skill/combat/shields, 4, TRUE)
H.adjust_skillrank(/datum/skill/combat/unarmed, 4, TRUE)
H.adjust_skillrank(/datum/skill/combat/wrestling, 4, TRUE)
H.adjust_skillrank(/datum/skill/misc/swimming, 2, TRUE)
H.adjust_skillrank(/datum/skill/misc/climbing, 2, TRUE)

/mob/living/carbon/human/species/delfevil/npc/death(gibbed, nocutscene)
if(vore_organs.len > 0)
for(var/obj/belly/B in vore_organs)
B.release_all_contents(TRUE)
. = ..()
Loading
Loading