Merge pull request #8844 from Rykka-Stormheart/shep-dev-scree-rabbits

Adds Knights of the Round Table, Rabbits, Killer Rabbits
This commit is contained in:
Novacat
2020-08-27 15:52:54 -04:00
committed by GitHub
19 changed files with 1172 additions and 1700 deletions
+21 -1
View File
@@ -261,4 +261,24 @@
)
cost = 60
containertype = /obj/structure/closet/crate
containername = "Saddlebags crate"
containername = "Saddlebags crate"
/datum/supply_pack/costumes/knights_gear
name = "Knights Gear"
contains = list(
/obj/item/clothing/suit/storage/hooded/knight_costume,
/obj/item/clothing/suit/storage/hooded/knight_costume/galahad,
/obj/item/clothing/suit/storage/hooded/knight_costume/lancelot,
/obj/item/clothing/suit/storage/hooded/knight_costume/robin,
/obj/item/clothing/suit/armor/combat/crusader_costume,
/obj/item/clothing/suit/armor/combat/crusader_costume/bedevere,
/obj/item/clothing/head/helmet/combat/crusader_costume,
/obj/item/clothing/head/helmet/combat/bedevere_costume,
/obj/item/clothing/gloves/combat/knight_costume,
/obj/item/clothing/gloves/combat/knight_costume/brown,
/obj/item/clothing/shoes/knight_costume,
/obj/item/clothing/shoes/knight_costume/black
)
cost = 10
containertype = /obj/structure/closet/crate
containername = "Knights Gear Crate"
+26 -2
View File
@@ -1172,7 +1172,19 @@
/obj/item/clothing/mask/gas/sexyclown = 3,
/obj/item/clothing/under/sexyclown = 3,
/obj/item/clothing/mask/gas/sexymime = 3,
/obj/item/clothing/under/sexymime = 3)
/obj/item/clothing/under/sexymime = 3,
/obj/item/clothing/suit/storage/hooded/knight_costume = 3,
/obj/item/clothing/suit/storage/hooded/knight_costume/galahad = 3,
/obj/item/clothing/suit/storage/hooded/knight_costume/lancelot = 3,
/obj/item/clothing/suit/storage/hooded/knight_costume/robin = 3,
/obj/item/clothing/suit/armor/combat/crusader_costume = 3,
/obj/item/clothing/suit/armor/combat/crusader_costume/bedevere = 3,
/obj/item/clothing/head/helmet/combat/crusader_costume = 3,
/obj/item/clothing/head/helmet/combat/bedevere_costume = 3,
/obj/item/clothing/gloves/combat/knight_costume = 3,
/obj/item/clothing/gloves/combat/knight_costume/brown = 3,
/obj/item/clothing/shoes/knight_costume = 3,
/obj/item/clothing/shoes/knight_costume/black = 3)
prices = list(/obj/item/clothing/suit/storage/hooded/carp_costume = 200,
/obj/item/clothing/suit/storage/hooded/carp_costume = 200,
/obj/item/clothing/suit/chickensuit = 200,
@@ -1225,7 +1237,19 @@
/obj/item/clothing/mask/gas/sexyclown = 600,
/obj/item/clothing/under/sexyclown = 200,
/obj/item/clothing/mask/gas/sexymime = 600,
/obj/item/clothing/under/sexymime = 200)
/obj/item/clothing/under/sexymime = 200,
/obj/item/clothing/suit/storage/hooded/knight_costume = 200,
/obj/item/clothing/suit/storage/hooded/knight_costume/galahad = 200,
/obj/item/clothing/suit/storage/hooded/knight_costume/lancelot = 200,
/obj/item/clothing/suit/storage/hooded/knight_costume/robin = 200,
/obj/item/clothing/suit/armor/combat/crusader_costume = 200,
/obj/item/clothing/suit/armor/combat/crusader_costume/bedevere = 200,
/obj/item/clothing/head/helmet/combat/crusader_costume = 200,
/obj/item/clothing/head/helmet/combat/bedevere_costume = 200,
/obj/item/clothing/gloves/combat/knight_costume = 200,
/obj/item/clothing/gloves/combat/knight_costume/brown = 200,
/obj/item/clothing/shoes/knight_costume = 200,
/obj/item/clothing/shoes/knight_costume/black = 200)
premium = list(/obj/item/clothing/suit/imperium_monk = 3,
/obj/item/clothing/suit/barding/agatha = 2,
/obj/item/clothing/suit/barding/alt_agatha = 2,
@@ -53,6 +53,7 @@
/mob/living/simple_mob/vore/aggressive/mimic,
/mob/living/simple_mob/vore/aggressive/rat,
/mob/living/simple_mob/vore/aggressive/rat/tame,
/mob/living/simple_mob/vore/rabbit,
// /mob/living/simple_mob/otie;0.5
))
return ..()
@@ -2,3 +2,43 @@
desc = "A pair of gloves, they don't look special in any way."
item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white")
icon_state = "latex"
// Armor Versions Here
/obj/item/clothing/gloves/combat/knight
desc = "ye olde armored gauntlets"
name = "knight gauntlets"
icon_state = "black"
item_state = "black"
siemens_coefficient = 2
permeability_coefficient = 0.05
cold_protection = HANDS
min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE
heat_protection = HANDS
max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE
armor = list(melee = 80, bullet = 50, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0)
/obj/item/clothing/gloves/combat/knight/brown
desc = "ye olde armored gauntlets"
name = "knight gauntlets"
icon_state = "brown"
item_state = "brown"
// Costume Versions Here
/obj/item/clothing/gloves/combat/knight_costume
desc = "ye olde armored gauntlets"
name = "knight gauntlets"
icon_state = "black"
item_state = "black"
siemens_coefficient = 2
permeability_coefficient = 0.05
cold_protection = HANDS
min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE
heat_protection = HANDS
max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
/obj/item/clothing/gloves/combat/knight_costume/brown
desc = "ye olde armored gauntlets"
name = "knight gauntlets"
icon_state = "brown"
item_state = "brown"
+114
View File
@@ -27,3 +27,117 @@
icon_state = "ge_helmcent"
icon = 'icons/obj/clothing/hats_vr.dmi'
icon_override = 'icons/mob/head_vr.dmi'
// Armor Versions Here
/obj/item/clothing/head/helmet/combat/crusader
name = "crusader helmet"
desc = "ye olde armored helmet"
icon_state = "crusader"
icon = 'icons/obj/clothing/hats_vr.dmi'
icon_override = 'icons/obj/clothing/hats_vr.dmi'
armor = list(melee = 80, bullet = 50, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0)
siemens_coefficient = 2
/obj/item/clothing/head/helmet/combat/bedevere
name = "bedevere's helmet"
desc = "ye olde armored helmet"
icon_state = "bedevere_helmet"
icon = 'icons/obj/clothing/hats_vr.dmi'
icon_override = 'icons/obj/clothing/hats_vr.dmi'
armor = list(melee = 80, bullet = 50, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0)
tint = TINT_HEAVY
siemens_coefficient = 2
var/base_state
var/up = FALSE
/obj/item/clothing/head/helmet/combat/bedevere/attack_self()
toggle()
/obj/item/clothing/head/helmet/combat/bedevere/verb/toggle()
set category = "Object"
set name = "Adjust helmet visor"
set src in usr
if(!base_state)
base_state = icon_state
if(usr.canmove && !usr.stat && !usr.restrained())
if(src.up)
src.up = !src.up
body_parts_covered |= (EYES|FACE)
flags_inv |= (HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE)
icon_state = base_state
tint = initial(tint)
to_chat(usr, "You flip the [src] down to protect yourself from the horrors of this universe. Narry a creature shall harm you with its beams of light.")
playsound(src, 'sound/machines/hatch_open.ogg', 75, 1)
else
src.up = !src.up
body_parts_covered &= ~(EYES|FACE)
flags_inv &= ~(HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE)
icon_state = "[base_state]_up"
tint = TINT_NONE
to_chat(usr, "You push the [src] up out of your face, ineffectively clearing your vision.")
playsound(src, 'sound/machines/hatch_open.ogg', 75, 1)
update_clothing_icon() //so our mob-overlays
if (ismob(src.loc)) //should allow masks to update when it is opened/closed
var/mob/M = src.loc
M.update_inv_wear_mask()
usr.update_action_buttons()
// Costume Versions Here
/obj/item/clothing/head/helmet/combat/crusader_costume
name = "crusader costume helmet"
desc = "ye olde armored helmet"
icon_state = "crusader"
icon = 'icons/obj/clothing/hats_vr.dmi'
icon_override = 'icons/obj/clothing/hats_vr.dmi'
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
siemens_coefficient = 1
/obj/item/clothing/head/helmet/combat/bedevere_costume
name = "bedevere's costume helmet"
desc = "ye olde armored helmet"
icon_state = "bedevere_helmet"
icon = 'icons/obj/clothing/hats_vr.dmi'
icon_override = 'icons/obj/clothing/hats_vr.dmi'
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
tint = TINT_HEAVY
siemens_coefficient = 1
var/base_state
var/up = FALSE
/obj/item/clothing/head/helmet/combat/bedevere_costume/attack_self()
toggle()
/obj/item/clothing/head/helmet/combat/bedevere_costume/verb/toggle()
set category = "Object"
set name = "Adjust helmet visor"
set src in usr
if(!base_state)
base_state = icon_state
if(usr.canmove && !usr.stat && !usr.restrained())
if(src.up)
src.up = !src.up
body_parts_covered |= (EYES|FACE)
flags_inv |= (HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE)
icon_state = base_state
tint = initial(tint)
to_chat(usr, "You flip the [src] down to protect yourself from the horrors of this universe. Narry a creature shall harm you with its beams of light.")
playsound(src, 'sound/machines/hatch_open.ogg', 75, 1)
else
src.up = !src.up
body_parts_covered &= ~(EYES|FACE)
flags_inv &= ~(HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE)
icon_state = "[base_state]_up"
tint = TINT_NONE
to_chat(usr, "You push the [src] up out of your face, ineffectively clearing your vision.")
playsound(src, 'sound/machines/hatch_open.ogg', 75, 1)
update_clothing_icon() //so our mob-overlays
if (ismob(src.loc)) //should allow masks to update when it is opened/closed
var/mob/M = src.loc
M.update_inv_wear_mask()
usr.update_action_buttons()
+26
View File
@@ -1,3 +1,29 @@
/obj/item/clothing/head/hood/techpriest
name = "techpriest hood"
armor = list(melee = 20, bullet = 10, laser = 10, energy = 10, bomb = 25, bio = 50, rad = 25)
// Armor versions here
/obj/item/clothing/head/hood/galahad
name = "galahad hood"
armor = list(melee = 80, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0)
siemens_coefficient = 2
/obj/item/clothing/head/hood/lancelot
name = "lancelot hood"
armor = list(melee = 80, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0)
siemens_coefficient = 2
/obj/item/clothing/head/hood/robin
name = "robin hood"
armor = list(melee = 80, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0)
siemens_coefficient = 3
// Costume Versions Here
/obj/item/clothing/head/hood/galahad_costume
name = "galahad costume hood"
/obj/item/clothing/head/hood/lancelot_costume
name = "lancelot costume hood"
/obj/item/clothing/head/hood/robin_costume
name = "robin costume hood"
@@ -58,4 +58,35 @@
else if(shoes)
slowdown = shoes.slowdown
else
slowdown = SHOES_SLOWDOWN
slowdown = SHOES_SLOWDOWN
// Armor Versions Here
/obj/item/clothing/shoes/knight
name = "knight boots"
desc = "A pair of olde knight boots."
icon_state = "knight_boots1"
item_state = "knight_boots1"
icon = 'icons/obj/clothing/shoes_vr.dmi'
icon_override = 'icons/obj/clothing/shoes_vr.dmi'
armor = list(melee = 80, bullet = 50, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0)
/obj/item/clothing/shoes/knight/black
name = "knight boots"
desc = "A pair of olde knight boots."
icon_state = "knight_boots2"
item_state = "knight_boots2"
// Costume Versions Here
/obj/item/clothing/shoes/knight_costume
name = "knight boots"
desc = "A pair of olde knight boots."
icon_state = "knight_boots1"
item_state = "knight_boots1"
icon = 'icons/obj/clothing/shoes_vr.dmi'
icon_override = 'icons/obj/clothing/shoes_vr.dmi'
/obj/item/clothing/shoes/knight_costume/black
name = "knight boots"
desc = "A pair of olde knight boots."
icon_state = "knight_boots2"
item_state = "knight_boots2"
+34
View File
@@ -85,3 +85,37 @@
/obj/item/clothing/suit/storage/vest/hoscoat/jensen/alt
icon = 'icons/obj/clothing/suits_vr.dmi'
icon_override = 'icons/mob/suit_vr.dmi'
// Armor Versions Here
/obj/item/clothing/suit/armor/combat/crusader
name = "crusader armor"
desc = "ye olde knight, risen again."
icon_state = "crusader"
icon = 'icons/obj/clothing/knights_vr.dmi'
icon_override = 'icons/obj/clothing/knights_vr.dmi'
body_parts_covered = UPPER_TORSO|LOWER_TORSO
armor = list(melee = 80, bullet = 50, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0)
siemens_coefficient = 2
/obj/item/clothing/suit/armor/combat/crusader/bedevere
name = "bedevere's armor"
desc = "ye olde knight, risen again."
icon_state = "bedevere"
body_parts_covered = UPPER_TORSO|LOWER_TORSO
// Costume Versions Here
/obj/item/clothing/suit/armor/combat/crusader_costume
name = "crusader costume armor"
desc = "ye olde knight, risen again."
icon_state = "crusader"
icon = 'icons/obj/clothing/knights_vr.dmi'
icon_override = 'icons/obj/clothing/knights_vr.dmi'
body_parts_covered = UPPER_TORSO|LOWER_TORSO
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
siemens_coefficient = 1
/obj/item/clothing/suit/armor/combat/crusader_costume/bedevere
name = "bedevere's costume armor"
desc = "ye olde knight, risen again."
icon_state = "bedevere"
body_parts_covered = UPPER_TORSO|LOWER_TORSO
+57
View File
@@ -11,3 +11,60 @@
hoodtype = /obj/item/clothing/head/hood/techpriest
armor = list(melee = 20, bullet = 10, laser = 10, energy = 10, bomb = 25, bio = 50, rad = 25)
item_state_slots = list(slot_r_hand_str = "engspace_suit", slot_l_hand_str = "engspace_suit")
// Regular armor versions here, costumes below
/obj/item/clothing/suit/storage/hooded/knight
name = "crusader's armor"
desc = "ye olde knight, risen again."
icon_state = "galahad"
icon = 'icons/obj/clothing/knights_vr.dmi'
icon_override = 'icons/obj/clothing/knights_vr.dmi'
hoodtype = /obj/item/clothing/head/hood/galahad
armor = list(melee = 80, bullet = 50, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0)
siemens_coefficient = 2
action_button_name = "Toggle Knight Headgear"
/obj/item/clothing/suit/storage/hooded/knight/galahad
name = "crusader's armor"
desc = "ye olde knight, risen again."
icon_state = "galahad"
hoodtype = /obj/item/clothing/head/hood/galahad
/obj/item/clothing/suit/storage/hooded/knight/lancelot
name = "crusader's armor"
desc = "ye olde knight, risen again."
icon_state = "lancelot"
hoodtype = /obj/item/clothing/head/hood/lancelot
/obj/item/clothing/suit/storage/hooded/knight/robin
name = "crusader's armor"
desc = "ye olde knight, risen again. This one seems slightly faster than the rest, but weaker."
icon_state = "robin"
hoodtype = /obj/item/clothing/head/hood/robin
armor = list(melee = 70, bullet = 40, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0)
slowdown = -1
siemens_coefficient = 3
// Costume Knight Gear Here
/obj/item/clothing/suit/storage/hooded/knight_costume
name = "crusader's costume armor"
desc = "ye olde knight, risen again."
icon_state = "galahad"
icon = 'icons/obj/clothing/knights_vr.dmi'
icon_override = 'icons/obj/clothing/knights_vr.dmi'
hoodtype = /obj/item/clothing/head/hood/galahad_costume
action_button_name = "Toggle Knight Headgear"
/obj/item/clothing/suit/storage/hooded/knight_costume/galahad
icon_state = "galahad"
hoodtype = /obj/item/clothing/head/hood/galahad_costume
/obj/item/clothing/suit/storage/hooded/knight_costume/lancelot
icon_state = "lancelot"
hoodtype = /obj/item/clothing/head/hood/lancelot_costume
/obj/item/clothing/suit/storage/hooded/knight_costume/robin
name = "crusader's armor"
desc = "ye olde knight, risen again. This one seems slightly faster than the rest, but weaker."
icon_state = "robin"
hoodtype = /obj/item/clothing/head/hood/robin_costume
@@ -0,0 +1,150 @@
/datum/category_item/catalogue/fauna/rabbit //TODO: VIRGO_LORE_WRITING_WIP
name = "Wildlife - Rabbit"
desc = ""
value = CATALOGUER_REWARD_TRIVIAL
/mob/living/simple_mob/vore/rabbit
name = "rabbit"
desc = "It's a fluffy, smol bunny! Adorable!"
tt_desc = "Vulpes zerda"
icon_state = "rabbit_brown"
icon_living = "rabbit_brown"
icon_dead = "rabbit_brown_dead"
icon_rest = "rabbit_brown_rest"
icon = 'icons/mob/vore.dmi'
faction = "rabbit"
maxHealth = 30
health = 30
response_help = "pats"
response_disarm = "gently pushes aside"
response_harm = "hits"
harm_intent_damage = 5
melee_damage_lower = 1
melee_damage_upper = 3
attacktext = list("nipped")
movement_cooldown = 3
say_list_type = /datum/say_list/rabbit
ai_holder_type = /datum/ai_holder/simple_mob/passive
// Vore vars
vore_active = 1
vore_bump_chance = 10
vore_bump_emote = "playfully lunges at"
vore_pounce_chance = 40
vore_pounce_maxhealth = 100 // They won't pounce by default, as they're passive. This is just so the nom check succeeds. :u
vore_default_mode = DM_HOLD
vore_icons = SA_ICON_LIVING
var/body_color //brown, black and white, leave blank for random
var/grumpiness = 0 // This determines how grumpy we are. Pet us to increase it, leave us alone to decrease.
var/last_pet // This tracks the last time someone patted us.
var/grump_decay = 5 SECONDS // This is how quickly our grumpiness decays.
/mob/living/simple_mob/vore/rabbit/New()
. = ..()
if(!body_color)
body_color = pick( list("brown","black","white") )
icon_state = "rabbit_[body_color]"
item_state = "rabbit_[body_color]"
icon_living = "rabbit_[body_color]"
icon_dead = "rabbit_[body_color]_dead"
icon_rest = "rabbit_[body_color]_rest"
/mob/living/simple_mob/vore/rabbit/Life()
. = ..()
if(grumpiness > 0 && last_pet > (world.time + grump_decay))
grumpiness = max(0, grumpiness-rand(5,10)) // Subtract grumpiness randomly in a range of 5-10 if we've not been PAT in the last 5 seconds.
/mob/living/simple_mob/vore/rabbit/examine(mob/user)
. = ..()
switch(grumpiness)
if(-INFINITY to 25)
. += "They appear calm."
if(26 to 50)
. += "They seem slightly annoyed."
if(51 to 75)
. += "They seem very annoyed, perhaps you should stop petting them."
if(75 to INFINITY)
. += "They are very angry. Petting them will likely result in unpleasant things."
/mob/living/simple_mob/vore/rabbit/attack_hand(mob/user)
. = ..()
if(user.a_intent == I_HELP) // only patpet on help. :p
grumpiness = CLAMP(grumpiness + rand(5, 10), 0, 120)
last_pet = world.time
if(grumpiness > 90) // Annoyed bunbun :U
var/pounce_chance = CanPounceTarget(user)
if(pounce_chance)
PounceTarget(user, pounce_chance)
/datum/say_list/rabbit
speak = list("chrrrs.")
emote_hear = list("screms.")
emote_see = list("earflicks","wiggles it's tail", "wiggles its nose")
/mob/living/simple_mob/vore/rabbit/black
icon_state = "rabbit_black"
icon_living = "rabbit_black"
icon_dead = "rabbit_black_dead"
icon_rest = "rabbit_black_rest"
body_color = "black"
/mob/living/simple_mob/vore/rabbit/white
icon_state = "rabbit_white"
icon_living = "rabbit_white"
icon_dead = "rabbit_white_dead"
icon_rest = "rabbit_white_rest"
body_color = "white"
/mob/living/simple_mob/vore/rabbit/brown
icon_state = "rabbit_brown"
icon_living = "rabbit_brown"
icon_dead = "rabbit_brown_dead"
icon_rest = "rabbit_brown_rest"
body_color = "brown"
/mob/living/simple_mob/vore/rabbit/white/lennie
name = "Lennie"
desc = "A large but somewhat dumb-looking rabbit. Has a little collar that says 'Lennie'!"
/mob/living/simple_mob/vore/rabbit/brown/george
name = "George"
desc = "A small and quick bunny with a restless expression in its eyes. Has a little collar that says 'George'!"
/mob/living/simple_mob/vore/rabbit/killer
icon_state = "rabbit_killer"
icon_living = "rabbit_killer"
icon_dead = "rabbit_killer_dead"
icon_rest = "rabbit_killer_rest"
maxHealth = 2000
health = 2000
harm_intent_damage = 5
melee_damage_lower = 1
melee_damage_upper = 3
attacktext = list("nipped")
movement_cooldown = 0.5 // very fast bunbun.
vore_pounce_chance = 100
vore_pounce_falloff = 0.2
body_color = "killer" // Set this so New() doesn't try to randomize us.
say_list_type = /datum/say_list/rabbit
ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive
/mob/living/simple_mob/vore/rabbit/killer/ex_act()
gib()