diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 7c2a12e1d5..05ce9f4979 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -292,7 +292,7 @@ if("monkey") M.change_mob_type( /mob/living/carbon/monkey , null, null, delmob ) if("robot") M.change_mob_type( /mob/living/silicon/robot , null, null, delmob ) if("cat") M.change_mob_type( /mob/living/simple_animal/cat , null, null, delmob ) - if("runtime") M.change_mob_type( /mob/living/simple_animal/cat/Runtime , null, null, delmob ) + if("runtime") M.change_mob_type( /mob/living/simple_animal/cat/fluff/Runtime , null, null, delmob ) if("corgi") M.change_mob_type( /mob/living/simple_animal/corgi , null, null, delmob ) if("ian") M.change_mob_type( /mob/living/simple_animal/corgi/Ian , null, null, delmob ) if("crab") M.change_mob_type( /mob/living/simple_animal/crab , null, null, delmob ) diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index 4d91497636..9c1f589b2b 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -1436,60 +1436,3 @@ icon_dead = "cat3_dead" holder_type = /obj/item/weapon/holder/cat/fluff/bones bff_name = "Erstatz Vryroxes" - -/mob/living/simple_animal/cat/fluff - var/bff_name - var/mob/living/carbon/human/bff - -/mob/living/simple_animal/cat/fluff/handle_movement_target() - if (!bff) - for (var/mob/living/carbon/human/M in player_list) - if (M.real_name == bff_name) - bff = M - break - - if (bff) - var/follow_dist = 5 - if (bff.stat >= DEAD || bff.health <= config.health_threshold_softcrit) //danger - follow_dist = 1 - else if (bff.stat || bff.health <= 50) //danger or just sleeping - follow_dist = 2 - var/near_dist = max(follow_dist - 3, 1) - var/current_dist = get_dist(src, bff) - - if (movement_target != bff) - if (current_dist > follow_dist && !istype(movement_target, /mob/living/simple_animal/mouse) && (bff in oview(src))) - //stop existing movement - walk_to(src,0) - turns_since_scan = 0 - - //walk to bff - stop_automated_movement = 1 - movement_target = bff - walk_to(src, movement_target, near_dist, 4) - - //already following and close enough, stop - else if (current_dist <= near_dist) - walk_to(src,0) - movement_target = null - stop_automated_movement = 0 - - if (!(bff && movement_target == bff)) - ..() - -/mob/living/simple_animal/cat/fluff/Life() - ..() - if (stat || !bff) - return - if (get_dist(src, bff) <= 1) - if (bff.stat >= DEAD || bff.health <= config.health_threshold_softcrit) - if (prob((bff.stat < DEAD)? 50 : 15)) - audible_emote(pick("meows in distress.", "meows anxiously.")) - else - if (prob(5)) - visible_emote(pick("nuzzles [bff].", - "brushes against [bff].", - "rubs against [bff].", - "purrs.")) - else if (bff.health <= 50) - if (prob(10)) audible_emote("meows anxiously.") diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index 33e6f47c57..300112d113 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -1618,7 +1618,7 @@ proc/populate_seed_list() seed_noun = "data" display_name = "runtimes" packet_icon = "seed-replicapod" - products = list(/mob/living/simple_animal/cat/Runtime) + products = list(/mob/living/simple_animal/cat/fluff/Runtime) plant_icon = "replicapod" requires_nutrients = 0 diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index 642a7df8e4..7d19438f39 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -50,7 +50,7 @@ if(turns_since_scan > 5) walk_to(src,0) turns_since_scan = 0 - + if((movement_target) && !(isturf(movement_target.loc) || ishuman(movement_target.loc) )) movement_target = null stop_automated_movement = 0 @@ -81,8 +81,66 @@ return //since the holder icon looks like a living cat ..() + +/mob/living/simple_animal/cat/fluff + var/bff_name + var/mob/living/carbon/human/bff + +/mob/living/simple_animal/cat/fluff/handle_movement_target() + if (!bff) + for (var/mob/living/carbon/human/M in player_list) + if (M.real_name == bff_name) + bff = M + break + + if (bff) + var/follow_dist = 5 + if (bff.stat >= DEAD || bff.health <= config.health_threshold_softcrit) //danger + follow_dist = 1 + else if (bff.stat || bff.health <= 50) //danger or just sleeping + follow_dist = 2 + var/near_dist = max(follow_dist - 3, 1) + var/current_dist = get_dist(src, bff) + + if (movement_target != bff) + if (current_dist > follow_dist && !istype(movement_target, /mob/living/simple_animal/mouse) && (bff in oview(src))) + //stop existing movement + walk_to(src,0) + turns_since_scan = 0 + + //walk to bff + stop_automated_movement = 1 + movement_target = bff + walk_to(src, movement_target, near_dist, 4) + + //already following and close enough, stop + else if (current_dist <= near_dist) + walk_to(src,0) + movement_target = null + stop_automated_movement = 0 + + if (!(bff && movement_target == bff)) + ..() + +/mob/living/simple_animal/cat/fluff/Life() + ..() + if (stat || !bff) + return + if (get_dist(src, bff) <= 1) + if (bff.stat >= DEAD || bff.health <= config.health_threshold_softcrit) + if (prob((bff.stat < DEAD)? 50 : 15)) + audible_emote(pick("meows in distress.", "meows anxiously.")) + else + if (prob(5)) + visible_emote(pick("nuzzles [bff].", + "brushes against [bff].", + "rubs against [bff].", + "purrs.")) + else if (bff.health <= 50) + if (prob(10)) audible_emote("meows anxiously.") + //RUNTIME IS ALIVE! SQUEEEEEEEE~ -/mob/living/simple_animal/cat/Runtime +/mob/living/simple_animal/cat/fluff/Runtime name = "Runtime" desc = "Her fur has the look and feel of velvet, and her tail quivers occasionally." gender = FEMALE @@ -90,10 +148,29 @@ icon_living = "cat" icon_dead = "cat_dead" +/mob/living/simple_animal/cat/fluff/Runtime/verb/friend() + set name = "Become Friends" + set category = "IC" + set src in view(1) + + if (bff || !(ishuman(usr) && usr.job == "Chief Medical Officer")) + if (usr == bff) + set_dir(get_dir(src, bff)) + say("Meow!") + else + usr << "[src] ignores you." + return + + bff = usr + bff_name = usr.real_name + + set_dir(get_dir(src, bff)) + say("Meow!") + /mob/living/simple_animal/cat/kitten name = "kitten" desc = "D'aaawwww" icon_state = "kitten" icon_living = "kitten" icon_dead = "kitten_dead" - gender = NEUTER \ No newline at end of file + gender = NEUTER