Kinetic Smasher

This commit is contained in:
Fox-McCloud
2016-08-17 20:31:37 -04:00
parent ab8c26efcc
commit 1f364c1bcf
49 changed files with 221 additions and 76 deletions

View File

@@ -20,6 +20,11 @@
#define CLICK_CD_POINT 10
#define CLICK_CD_RESIST 20
//Sizes of mobs, used by mob/living/var/mob_size
#define MOB_SIZE_TINY 0
#define MOB_SIZE_SMALL 1
#define MOB_SIZE_HUMAN 2
#define MOB_SIZE_LARGE 3
///
#define ROUNDSTART_LOGOUT_REPORT_TIME 6000 //Amount of time (in deciseconds) after the rounds starts, that the player disconnect report is issued.

View File

@@ -1645,8 +1645,3 @@
..()
mind.assigned_role = "Juggernaut"
mind.special_role = SPECIAL_ROLE_CULTIST
/mob/living/simple_animal/vox/armalis/mind_initialize()
..()
mind.assigned_role = "Armalis"
mind.special_role = SPECIAL_ROLE_RAIDER

View File

@@ -160,6 +160,7 @@
minbodytemp = 0
maxbodytemp = 360
force_threshold = 10
mob_size = MOB_SIZE_LARGE
environment_smash = 3
gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE

View File

@@ -76,7 +76,7 @@
attacktext = "nips"
friendly = "prods"
wander = 0
small = 1
mob_size = MOB_SIZE_SMALL
density = 0
pass_flags = PASSTABLE
ventcrawler = 2

View File

@@ -60,6 +60,7 @@
faction = list("swarmer")
projectiletype = /obj/item/projectile/beam/disabler
pass_flags = PASSTABLE
mob_size = MOB_SIZE_TINY
ventcrawler = 2
ranged = 1
ranged_cooldown_cap = 1

View File

@@ -34,6 +34,7 @@
density = 0
flying = 1
anchored = 1
mob_size = MOB_SIZE_TINY
pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
var/essence = 75 //The resource of revenants. Max health is equal to three times this amount

View File

@@ -62,11 +62,11 @@
/obj/machinery/door/Bumped(atom/AM)
if(p_open || operating) return
if(ismob(AM))
var/mob/M = AM
if(isliving(AM))
var/mob/living/M = AM
if(world.time - M.last_bumped <= 10) return //Can bump-open one airlock per second. This is to prevent shock spam.
M.last_bumped = world.time
if(!M.restrained() && !M.small)
if(!M.restrained() && M.mob_size > MOB_SIZE_SMALL)
bumpopen(M)
return

View File

@@ -52,8 +52,8 @@
return
if(!ticker)
return
var/mob/M = AM
if(!M.restrained() && !M.small)
var/mob/living/M = AM
if(!M.restrained() && M.mob_size > MOB_SIZE_SMALL)
bumpopen(M)
return

View File

@@ -64,6 +64,13 @@
duration = 8
randomdir = 0
/obj/effect/overlay/temp/kinetic_blast
name = "kinetic explosion"
icon = 'icons/obj/projectiles.dmi'
icon_state = "kinetic_blast"
layer = 4.1
duration = 4
/obj/effect/overlay/palmtree_r
name = "Palm tree"
icon = 'icons/misc/beach2.dmi'

View File

@@ -82,13 +82,6 @@
user.put_in_inactive_hand(O)
return
/obj/item/weapon/twohanded/mob_can_equip(mob/M, slot)
//Cannot equip wielded items.
if(wielded)
to_chat(M, "<span class='warning'>Unwield the [name] first!</span>")
return 0
return ..()
/obj/item/weapon/twohanded/dropped(mob/user)
..()
//handles unwielding a twohanded weapon when dropped as well as clearing up the offhand
@@ -108,6 +101,12 @@
else //Trying to wield it
wield(user)
/obj/item/weapon/twohanded/equip_to_best_slot(mob/M)
if(..())
unwield(M)
return
///////////OFFHAND///////////////
/obj/item/weapon/twohanded/offhand
w_class = 5
@@ -130,7 +129,7 @@
return
/obj/item/weapon/twohanded/required/mob_can_equip(M as mob, slot)
if(wielded)
if(wielded && !slot_flags)
to_chat(M, "<span class='warning'>[src.name] is too cumbersome to carry with anything but your hands!</span>")
return 0
return ..()
@@ -140,12 +139,18 @@
if(get_dist(src,user) > 1)
return 0
if(H != null)
to_chat(user, "<span class='notice'>[src.name] is too cumbersome to carry in one hand!</span>")
to_chat(user, "<span class='notice'>[src] is too cumbersome to carry in one hand!</span>")
return
var/obj/item/weapon/twohanded/offhand/O = new(user)
user.put_in_inactive_hand(O)
if(src.loc != user)
wield(user)
..()
wielded = 1
/obj/item/weapon/twohanded/required/equipped(mob/user, slot)
..()
if(slot == slot_l_hand || slot == slot_r_hand)
wield(user)
else
unwield(user)
/*
* Fireaxe

View File

@@ -30,6 +30,12 @@
"Vulpkanin" = 'icons/obj/clothing/species/vulpkanin/hats.dmi',
)
/obj/item/clothing/head/helmet/space/rig/equip_to_best_slot(mob/M)
if(rig_restrict_helmet)
to_chat(M, "<span class='warning'>You must fasten the helmet to a hardsuit first. (Target the head and use on a hardsuit)</span>") // Stop RIG helmet equipping
return 0
..()
/obj/item/clothing/head/helmet/space/rig/attack_self(mob/user)
toggle_light(user)

View File

@@ -7,7 +7,7 @@
if(!istype(M))
return
if(!buckled_mob && !M.buckled && !M.anchored && (M.small || prob(round(seed.get_trait(TRAIT_POTENCY)/6))))
if(!buckled_mob && !M.buckled && !M.anchored && ((M.mob_size <= MOB_SIZE_SMALL) || prob(round(seed.get_trait(TRAIT_POTENCY)/6))))
//wait a tick for the Entered() proc that called HasProximity() to finish (and thus the moving animation),
//so we don't appear to teleport from two tiles away when moving into a turf adjacent to vines.
spawn(1)

View File

@@ -331,6 +331,7 @@
new /datum/data/mining_equipment("Drone Melee Upgrade", /obj/item/device/mine_bot_ugprade, 400),
new /datum/data/mining_equipment("Drone Health Upgrade",/obj/item/device/mine_bot_ugprade/health, 400),
new /datum/data/mining_equipment("Drone Ranged Upgrade",/obj/item/device/mine_bot_ugprade/cooldown, 600),
new /datum/data/mining_equipment("Kinetic Crusher", /obj/item/weapon/twohanded/required/mining_hammer, 750),
new /datum/data/mining_equipment("Drone AI Upgrade", /obj/item/slimepotion/sentience/mining, 1000),
new /datum/data/mining_equipment("GAR mesons", /obj/item/clothing/glasses/meson/gar, 500),
new /datum/data/mining_equipment("Brute First-Aid Kit", /obj/item/weapon/storage/firstaid/brute, 600),
@@ -458,7 +459,7 @@
..()
/obj/machinery/mineral/equipment_vendor/proc/RedeemVoucher(obj/item/weapon/mining_voucher/voucher, mob/redeemer)
var/selection = input(redeemer, "Pick your equipment", "Mining Voucher Redemption") as null|anything in list("Kinetic Accelerator", "Resonator", "Mining Drone", "Advanced Scanner")
var/selection = input(redeemer, "Pick your equipment", "Mining Voucher Redemption") as null|anything in list("Kinetic Accelerator", "Resonator", "Mining Drone", "Advanced Scanner", "Crusher")
if(!selection || !Adjacent(redeemer) || voucher.loc != redeemer)
return
switch(selection)
@@ -470,6 +471,8 @@
new /obj/item/weapon/storage/box/drone_kit(src.loc)
if("Advanced Scanner")
new /obj/item/device/t_scanner/adv_mining_scanner(src.loc)
if("Crusher")
new /obj/item/weapon/twohanded/required/mining_hammer(loc)
qdel(voucher)
/obj/machinery/mineral/equipment_vendor/ex_act(severity, target)
@@ -1108,3 +1111,104 @@
C.preserved = 1
to_chat(user, "<span class='notice'>You inject the hivelord core with the stabilizer. It will no longer go inert.</span>")
qdel(src)
/*********************Mining Hammer****************/
/obj/item/weapon/twohanded/required/mining_hammer
icon = 'icons/obj/mining.dmi'
icon_state = "mining_hammer1"
item_state = "mining_hammer1"
name = "proto-kinetic crusher"
desc = "An early design of the proto-kinetic accelerator, it is little more than an combination of various mining tools cobbled together, forming a high-tech club.\
While it is an effective mining tool, it did little to aid any but the most skilled and/or suicidal miners against local fauna. \
\n<span class='info'>Mark a mob with the destabilizing force, then hit them in melee to activate it for extra damage. Extra damage if backstabbed in this fashion. \
This weapon is only particularly effective against large creatures.</span>"
force = 20 //As much as a bone spear, but this is significantly more annoying to carry around due to requiring the use of both hands at all times
w_class = 4
slot_flags = SLOT_BACK
force_unwielded = 20 //It's never not wielded so these are the same
force_wielded = 20
throwforce = 5
throw_speed = 4
light_range = 4
armour_penetration = 10
materials = list(MAT_METAL=1150, MAT_GLASS=2075)
hitsound = 'sound/weapons/bladeslice.ogg'
attack_verb = list("smashes", "crushes", "cleaves", "chops", "pulps")
sharp = 1
edge = 1
var/charged = 1
var/charge_time = 16
var/atom/mark = null
var/marked_image = null
/obj/item/projectile/destabilizer
name = "destabilizing force"
icon_state = "pulse1"
damage = 0 //We're just here to mark people. This is still a melee weapon.
damage_type = BRUTE
flag = "bomb"
range = 6
var/obj/item/weapon/twohanded/required/mining_hammer/hammer_synced = null
/obj/item/projectile/destabilizer/on_hit(atom/target, blocked = 0, hit_zone)
if(hammer_synced)
if(hammer_synced.mark == target)
return ..()
if(isliving(target))
if(hammer_synced.mark && hammer_synced.marked_image)
hammer_synced.mark.underlays -= hammer_synced.marked_image
hammer_synced.marked_image = null
var/mob/living/L = target
if(L.mob_size >= MOB_SIZE_LARGE)
hammer_synced.mark = L
var/image/I = image('icons/effects/effects.dmi', loc = L, icon_state = "shield2",pixel_y = (-L.pixel_y),pixel_x = (-L.pixel_x))
L.underlays += I
hammer_synced.marked_image = I
var/target_turf = get_turf(target)
if(istype(target_turf, /turf/simulated/mineral))
var/turf/simulated/mineral/M = target_turf
new /obj/effect/overlay/temp/kinetic_blast(M)
M.gets_drilled(firer)
..()
/obj/item/weapon/twohanded/required/mining_hammer/afterattack(atom/target, mob/user, proximity_flag)
if(!proximity_flag && charged)//Mark a target, or mine a tile.
var/turf/proj_turf = get_turf(src)
if(!istype(proj_turf, /turf))
return
var/datum/gas_mixture/environment = proj_turf.return_air()
var/pressure = environment.return_pressure()
if(pressure > 50)
playsound(user, 'sound/weapons/empty.ogg', 100, 1)
return
var/obj/item/projectile/destabilizer/D = new /obj/item/projectile/destabilizer(user.loc)
D.preparePixelProjectile(target,get_turf(target), user)
D.hammer_synced = src
playsound(user, 'sound/weapons/plasma_cutter.ogg', 100, 1)
D.fire()
charged = 0
icon_state = "mining_hammer1_uncharged"
spawn(charge_time)
Recharge()
return
if(proximity_flag && target == mark && isliving(target))
var/mob/living/L = target
PoolOrNew(/obj/effect/overlay/temp/kinetic_blast, get_turf(L))
mark = 0
if(L.mob_size >= MOB_SIZE_LARGE)
L.underlays -= marked_image
qdel(marked_image)
marked_image = null
var/backstab = check_target_facings(user, L)
var/def_check = L.getarmor(type = "bomb")
if(backstab == 3 || backstab == 1)
L.apply_damage(80, BRUTE, blocked = def_check)
playsound(user, 'sound/weapons/Kenetic_accel.ogg', 100, 1) //Seriously who spelled it wrong
else
L.apply_damage(50, BRUTE, blocked = def_check)
/obj/item/weapon/twohanded/required/mining_hammer/proc/Recharge()
if(!charged)
charged = 1
icon_state = "mining_hammer1"
playsound(src.loc, 'sound/weapons/kenetic_reload.ogg', 60, 1)

View File

@@ -161,6 +161,41 @@
return items
/obj/item/proc/equip_to_best_slot(mob/M)
if(src != M.get_active_hand())
to_chat(M, "<span class='warning'>You are not holding anything to equip!</span>")
return 0
if(M.equip_to_appropriate_slot(src))
if(M.hand)
M.update_inv_l_hand(0)
else
M.update_inv_r_hand(0)
return 1
if(M.s_active && M.s_active.can_be_inserted(src,1)) //if storage active insert there
M.s_active.handle_item_insertion(src)
return 1
var/obj/item/weapon/storage/S = M.get_inactive_hand()
if(istype(S) && S.can_be_inserted(src,1)) //see if we have box in other hand
S.handle_item_insertion(src)
return 1
S = M.get_item_by_slot(slot_belt)
if(istype(S) && S.can_be_inserted(src,1)) //else we put in belt
S.handle_item_insertion(src)
return 1
S = M.get_item_by_slot(slot_back) //else we put in backpack
if(istype(S) && S.can_be_inserted(src,1))
S.handle_item_insertion(src)
playsound(src.loc, "rustle", 50, 1, -5)
return 1
to_chat(M, "<span class='warning'>You are unable to equip that!</span>")
return 0
/mob/proc/get_all_slots()
return list(wear_mask, back, l_hand, r_hand)

View File

@@ -5,6 +5,7 @@
health = 700
icon_state = "alienq_s"
status_flags = CANPARALYSE
mob_size = MOB_SIZE_LARGE
move_delay_add = 3
large = 1
ventcrawler = 0

View File

@@ -3,6 +3,7 @@
real_name = "alien larva"
icon_state = "larva0"
pass_flags = PASSTABLE | PASSMOB
mob_size = MOB_SIZE_SMALL
maxHealth = 30
health = 30

View File

@@ -2,41 +2,9 @@
set name = "quick-equip"
set hidden = 1
if(ishuman(src))
var/mob/living/carbon/human/H = src
var/obj/item/I = H.get_active_hand()
var/obj/item/weapon/storage/S = H.get_inactive_hand()
if(!I)
to_chat(H, "<span class='notice'>You are not holding anything to equip.</span>")
return
if(istype(I, /obj/item/clothing/head/helmet/space/rig)) // If the item to be equipped is a rigid suit helmet
var/obj/item/clothing/head/helmet/space/rig/C = I
if(C.rig_restrict_helmet)
to_chat(src, "\red You must fasten the helmet to a hardsuit first. (Target the head and use on a hardsuit)")// Stop eva helms equipping.
return 0
if(H.equip_to_appropriate_slot(I))
if(hand)
update_inv_l_hand(0)
else
update_inv_r_hand(0)
else if(s_active && s_active.can_be_inserted(I,1)) //if storage active insert there
s_active.handle_item_insertion(I)
else if(istype(S, /obj/item/weapon/storage) && S.can_be_inserted(I,1)) //see if we have box in other hand
S.handle_item_insertion(I)
else
S = H.get_item_by_slot(slot_belt)
if(istype(S, /obj/item/weapon/storage) && S.can_be_inserted(I,1)) //else we put in belt
S.handle_item_insertion(I)
else
S = H.get_item_by_slot(slot_back) //else we put in backpack
if(istype(S, /obj/item/weapon/storage) && S.can_be_inserted(I,1))
S.handle_item_insertion(I)
else
to_chat(H, "\red You are unable to equip that.")
var/obj/item/I = get_active_hand()
if(I)
I.equip_to_best_slot(src)
/mob/living/carbon/human/proc/equip_in_one_of_slots(obj/item/W, list/slots, del_on_fail = 1)
for(var/slot in slots)

View File

@@ -34,6 +34,7 @@
var/implanting = 0 //Used for the mind-slave implant
var/silent = 0 //Can't talk. Value goes down every life proc. //NOTE TO FUTURE CODERS: DO NOT INITIALIZE NUMERICAL VARS AS NULL OR I WILL MURDER YOU.
var/floating = 0
var/mob_size = MOB_SIZE_HUMAN
var/nightvision = 0
var/bloodcrawl = 0 //0 No blood crawling, 1 blood crawling, 2 blood crawling+mob devour

View File

@@ -41,6 +41,7 @@ var/list/ai_verbs_default = list(
anchored = 1 // -- TLE
density = 1
status_flags = CANSTUN|CANPARALYSE|CANPUSH
mob_size = MOB_SIZE_LARGE
can_strip = 0
var/list/network = list("SS13","Telecomms","Research Outpost","Mining Outpost")
var/obj/machinery/camera/current = null

View File

@@ -5,7 +5,7 @@
robot_talk_understand = 0
emote_type = 2 // pAIs emotes are heard, not seen, so they can be seen through a container (eg. person)
small = 1
mob_size = MOB_SIZE_TINY
pass_flags = PASSTABLE
density = 0
holder_type = /obj/item/weapon/holder/pai

View File

@@ -16,6 +16,7 @@
local_transmit = 1
ventcrawler = 2
magpulse = 1
mob_size = MOB_SIZE_SMALL
// We need to keep track of a few module items so we don't need to do list operations
// every time we need them. These get set in New() after the module is chosen.

View File

@@ -10,6 +10,7 @@
damage_coeff = list(BRUTE = 0.5, BURN = 0.7, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0)
environment_smash = 2 //Walls can't stop THE LAW
mob_size = MOB_SIZE_LARGE
radio_channel = "Security"
bot_type = SEC_BOT

View File

@@ -20,7 +20,7 @@
damage_coeff = list(BRUTE = 0.5, BURN = 0.7, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0)
a_intent = "harm" //No swapping
buckle_lying = 0
mob_size = MOB_SIZE_LARGE
radio_channel = "Supply"
bot_type = MULE_BOT

View File

@@ -91,6 +91,7 @@
environment_smash = 2
attack_sound = 'sound/weapons/punch3.ogg'
status_flags = 0
mob_size = MOB_SIZE_LARGE
construct_spells = list(/obj/effect/proc_holder/spell/aoe_turf/conjure/lesserforcewall)
force_threshold = 11

View File

@@ -17,6 +17,7 @@
density = 0
pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
ventcrawler = 2
mob_size = MOB_SIZE_TINY
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat = 0)
gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY

View File

@@ -14,6 +14,7 @@
speak_chance = 1
turns_per_move = 5
see_in_dark = 6
mob_size = MOB_SIZE_SMALL
simplespecies = /mob/living/simple_animal/pet/cat
childtype = /mob/living/simple_animal/pet/cat/kitten
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat = 3)

View File

@@ -542,6 +542,7 @@
shaved = 0
density = 0
pass_flags = PASSMOB
mob_size = MOB_SIZE_SMALL
//puppies cannot wear anything.
/mob/living/simple_animal/pet/corgi/puppy/Topic(href, href_list)

View File

@@ -5,7 +5,6 @@
icon_state = "crab"
icon_living = "crab"
icon_dead = "crab_dead"
small = 1
speak_emote = list("clicks")
emote_hear = list("clicks")
emote_see = list("clacks")

View File

@@ -11,7 +11,7 @@
icon_dead = "nymph_dead"
icon_resting = "nymph_sleep"
pass_flags = PASSTABLE | PASSMOB
small = 1
mob_size = MOB_SIZE_SMALL
ventcrawler = 2
maxHealth = 50

View File

@@ -179,7 +179,7 @@
ventcrawler = 2
var/amount_grown = 0
pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
small = 1
mob_size = MOB_SIZE_TINY
can_hide = 1
can_collar = 1
gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
@@ -225,7 +225,7 @@ var/global/chicken_count = 0
var/eggsleft = 0
var/chicken_color
pass_flags = PASSTABLE | PASSMOB
small = 1
mob_size = MOB_SIZE_SMALL
can_hide = 1
can_collar = 1
gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY

View File

@@ -5,7 +5,6 @@
icon_state = "lizard"
icon_living = "lizard"
icon_dead = "lizard-dead"
small = 1
speak_emote = list("hisses")
health = 5
maxHealth = 5
@@ -19,6 +18,7 @@
ventcrawler = 2
density = 0
pass_flags = PASSTABLE | PASSMOB
mob_size = MOB_SIZE_SMALL
can_hide = 1
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat = 1)
can_collar = 1

View File

@@ -9,7 +9,6 @@
speak_emote = list("squeeks","squeeks","squiks")
emote_hear = list("squeeks","squeaks","squiks")
emote_see = list("runs in a circle", "shakes", "scritches at something")
small = 1
speak_chance = 1
turns_per_move = 5
see_in_dark = 6
@@ -22,6 +21,7 @@
density = 0
ventcrawler = 2
pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
mob_size = MOB_SIZE_TINY
var/mouse_color //brown, gray and white, leave blank for random
layer = MOB_LAYER
atmos_requirements = list("min_oxy" = 16, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0)

View File

@@ -1,6 +1,7 @@
/mob/living/simple_animal/pet
icon = 'icons/mob/pets.dmi'
can_collar = 1
mob_size = MOB_SIZE_SMALL
/mob/living/simple_animal/pet/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
if(istype(O, /obj/item/weapon/newspaper))

View File

@@ -36,7 +36,7 @@
var/syndie = 0 //IS WE SYNDICAT? (currently unused)
speed = -1 //Spiderbots gotta go fast.
//pass_flags = PASSTABLE //Maybe griefy?
small = 1
mob_size = MOB_SIZE_SMALL
speak_emote = list("beeps","clicks","chirps")
can_hide = 1
ventcrawler = 2

View File

@@ -129,6 +129,7 @@
move_to_delay = 4
maxHealth = 400
health = 400
mob_size = MOB_SIZE_LARGE
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
/obj/item/projectile/neurotox

View File

@@ -15,7 +15,7 @@
speed = 4
maxHealth = 20
health = 20
mob_size = MOB_SIZE_TINY
harm_intent_damage = 8
melee_damage_lower = 10
melee_damage_upper = 10

View File

@@ -34,7 +34,7 @@
flying = 1
search_objects = 1 //have to find those plant trays!
density = 0
small = 1
mob_size = MOB_SIZE_TINY
//Spaceborn beings don't get hurt by space
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)

View File

@@ -69,6 +69,7 @@
maxHealth = 65
health = 65
pixel_x = -16
mob_size = MOB_SIZE_LARGE
melee_damage_lower = 20
melee_damage_upper = 20

View File

@@ -15,6 +15,7 @@
var/icon_aggro = null // for swapping to when we get aggressive
see_in_dark = 8
see_invisible = SEE_INVISIBLE_MINIMUM
mob_size = MOB_SIZE_LARGE
/mob/living/simple_animal/hostile/asteroid/Aggro()
..()

View File

@@ -118,6 +118,7 @@
faction = list("syndicate")
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
mob_size = MOB_SIZE_TINY
flying = 1
gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
del_on_death = 1

View File

@@ -14,6 +14,7 @@
speed = 1
maxHealth = 250
health = 250
mob_size = MOB_SIZE_LARGE
pixel_x = -16

View File

@@ -33,7 +33,6 @@
icon_living = "parrot_fly"
icon_dead = "parrot_dead"
pass_flags = PASSTABLE
small = 1
can_collar = 1
var/list/clean_speak = list(
@@ -54,6 +53,7 @@
response_harm = "swats the"
stop_automated_movement = 1
universal_speak = 1
mob_size = MOB_SIZE_SMALL
var/parrot_state = PARROT_WANDER //Hunt for a perch when created
var/parrot_sleep_max = 25 //The time the parrot sits while perched before looking around. Mosly a way to avoid the parrot's AI in process_ai() being run every single tick.

View File

@@ -866,7 +866,10 @@ var/list/slot_equipment_priority = list( \
/mob/MouseDrop(mob/M as mob)
..()
if(M != usr) return
if(M.small) return // Stops pAI drones and small mobs (borers, parrots, crabs) from stripping people. --DZD
if(isliving(M)) // Ewww
var/mob/living/L = M
if(L.mob_size <= MOB_SIZE_SMALL)
return // Stops pAI drones and small mobs (borers, parrots, crabs) from stripping people. --DZD
if(!M.can_strip) return
if(usr == src) return
if(!Adjacent(usr)) return

View File

@@ -63,7 +63,6 @@
var/canmove = 1
var/lastpuke = 0
var/unacidable = 0
var/small = 0
var/can_strip = 1
var/list/pinned = list() //List of things pinning this creature to walls (see living_defense.dm)
var/list/embedded = list() //Embedded items, since simple mobs don't have organs.

View File

@@ -824,7 +824,7 @@
return 1
var/mob/living/M = caller
if(!M.ventcrawler && !M.small)
if(!M.ventcrawler && M.mob_size > MOB_SIZE_SMALL)
return 0
return 1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 89 KiB

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 172 KiB

After

Width:  |  Height:  |  Size: 172 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 170 KiB

After

Width:  |  Height:  |  Size: 170 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 52 KiB