diff --git a/aurorastation.dme b/aurorastation.dme index 667049f7c69..5c685084c04 100644 --- a/aurorastation.dme +++ b/aurorastation.dme @@ -1898,6 +1898,7 @@ #include "code\modules\mob\living\simple_animal\constructs\soulstone.dm" #include "code\modules\mob\living\simple_animal\familiars\familiars.dm" #include "code\modules\mob\living\simple_animal\friendly\adhomai.dm" +#include "code\modules\mob\living\simple_animal\friendly\carp.dm" #include "code\modules\mob\living\simple_animal\friendly\cat.dm" #include "code\modules\mob\living\simple_animal\friendly\corgi.dm" #include "code\modules\mob\living\simple_animal\friendly\crab.dm" diff --git a/code/game/objects/random/random.dm b/code/game/objects/random/random.dm index 94a1fde88c8..c896e793788 100644 --- a/code/game/objects/random/random.dm +++ b/code/game/objects/random/random.dm @@ -715,6 +715,7 @@ /obj/item/clothing/mask/pig = 0.3, /obj/item/clothing/mask/smokable/cigarette/cigar/cohiba = 0.7, /obj/item/clothing/mask/smokable/pipe/cobpipe = 0.5, + /obj/item/clothing/shoes/carp = 0.5, /obj/item/clothing/shoes/clown_shoes = 0.1, /obj/item/clothing/shoes/combat = 0.2, /obj/item/clothing/shoes/cyborg = 0.4, @@ -1081,6 +1082,7 @@ /obj/item/clothing/mask/fakemoustache = 11, /obj/item/clothing/mask/gas/clown_hat = 11, /obj/item/clothing/mask/gas/mime = 11, + /obj/item/clothing/shoes/carp = 9, /obj/item/weapon/gun/energy/wand/toy = 5, /obj/item/device/binoculars = 11, /obj/item/device/megaphone = 11, diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index 850042c8a2b..5ea4792ed0f 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -248,3 +248,14 @@ icon_state = "eelcaligae" armor = list(melee = 40, bullet = 0, laser = 0, energy = 15, bomb = 20, bio = 0, rad = 20) siemens_coefficient = 0.75 + +/obj/item/clothing/shoes/carp + name = "carp slippers" + desc = "Slippers made to look like baby carp, but on your feet! Squeeeeeee!!" + item_state = "carpslippers" + icon_state = "carpslippers" + species_restricted = null + silent = TRUE + + cold_protection = FEET + min_cold_protection_temperature = SHOE_MIN_COLD_PROTECTION_TEMPERATURE \ No newline at end of file diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm index 7cbdcc19477..b16507fb3b6 100644 --- a/code/modules/mob/holder.dm +++ b/code/modules/mob/holder.dm @@ -430,6 +430,15 @@ var/list/holder_mob_icon_cache = list() item_state = "penny" contained_sprite = 1 +/obj/item/weapon/holder/carp/baby + name = "baby space carp" + desc = "Awfully cute! Looks friendly!" + icon_state = "babycarp" + item_state = "babycarp" + slot_flags = SLOT_HEAD + flags_inv = HIDEEARS|BLOCKHEADHAIR // carp wings blocks stuff - geeves + w_class = 1 + contained_sprite = TRUE /obj/item/weapon/holder/borer name = "cortical borer" diff --git a/code/modules/mob/living/simple_animal/friendly/carp.dm b/code/modules/mob/living/simple_animal/friendly/carp.dm new file mode 100644 index 00000000000..f65c8c35b7b --- /dev/null +++ b/code/modules/mob/living/simple_animal/friendly/carp.dm @@ -0,0 +1,153 @@ +/mob/living/simple_animal/carp + name = "space carp" + desc = "A domesticated, floating space carp. Careful around the teeth." + icon = 'icons/mob/npc/animal.dmi' + icon_state = "carp" + item_state = "carp" + icon_living = "carp" + icon_dead = "carp_dead" + icon_gib = "carp_gib" + icon_rest = "carp_rest" + can_nap = TRUE + speak = list("Glub!") + speak_emote = list("glubs", "glibs") + emote_hear = list("glubs","glibs") + emote_see = list("floats steadily", "inflates its gills") + speak_chance = 1 + turns_per_move = 5 + see_in_dark = 6 + meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat + response_help = "brushes" + response_disarm = "attempts to push" + response_harm = "injures" + gender = NEUTER + + //Space carp aren't affected by atmos. + 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 = 4 + metabolic_factor = 0 // NEVER EAT HA HA HA - geeves + + density = TRUE + pass_flags = PASSTABLE + + possession_candidate = TRUE + +/mob/living/simple_animal/carp/fall_impact() + src.visible_message(span("notice","\The [src] gently floats to a stop.")) + return FALSE + +//Basic friend AI +/mob/living/simple_animal/carp/fluff + var/mob/living/carbon/human/friend + var/befriend_job = null + +/mob/living/simple_animal/carp/fluff/think() + ..() + if(!stat && !buckled && (turns_since_move > 5)) + walk_to(src,0) + turns_since_move = 0 + handle_movement_target() + if(!movement_target && (turns_since_move > 5)) + walk_to(src,0) + +/mob/living/simple_animal/carp/fluff/proc/handle_movement_target() + if(!QDELETED(friend)) + var/follow_dist = 5 + if(friend.stat >= DEAD || friend.health <= config.health_threshold_softcrit) //danger + follow_dist = 1 + else if(friend.stat || friend.health <= 50) //danger or just sleeping + follow_dist = 2 + var/near_dist = max(follow_dist - 2, 1) + var/current_dist = get_dist(src, friend) + + if(movement_target != friend) + if(current_dist > follow_dist && friend in oview(src)) + //stop existing movement + walk_to(src,0) + turns_since_scan = 0 + + //walk to friend + stop_automated_movement = 1 + movement_target = friend + walk_to(src, movement_target, near_dist, DS2TICKS(seek_move_delay)) + + //already following and close enough, stop + else if(current_dist <= near_dist) + walk_to(src,0) + movement_target = null + stop_automated_movement = 0 + if(prob(10)) + say("Glub!") + + if(!friend || movement_target != friend) + ..() + +/mob/living/simple_animal/carp/fluff/verb/friend(var/mob/user) + set name = "Become Friends" + set category = "IC" + set src in view(1) + + if(friend && usr == friend) + set_dir(get_dir(src, friend)) + say("Glubglub!") + return + + if(!(ishuman(usr) && befriend_job && usr.job == befriend_job)) + to_chat(user, "[src] ignores you.") + return + + friend = user + + set_dir(get_dir(src, friend)) + say("Glubglub!") + +// ENGINEERING HAS AN ACTUAL PET, WHAAAAAAAAAAAAAT? - geeves +/mob/living/simple_animal/carp/fluff/ginny + name = "Ginny" + desc = "Rough scales adorn the body of this baby space carp. She looks ready to fire up an emitter!" + icon_state = "babycarp" + item_state = "babycarp" + icon_living = "babycarp" + icon_dead = "babycarp_dead" + icon_rest = "babycarp_rest" + icon_gib = null + + gender = FEMALE + + emote_see = list("floats steadily", "inflates her gills") + + can_nap = TRUE + mob_size = 3.5 + + befriend_job = "Chief Engineer" + holder_type = /obj/item/weapon/holder/carp/baby + +/mob/living/simple_animal/carp/fluff/ginny/death() + .=..() + desc = "WHO KILLED GINNY?!" + +/mob/living/simple_animal/carp/baby + name = "baby space carp" + desc = "Awfully cute! Looks friendly!" + icon_state = "babycarp" + item_state = "babycarp" + icon_living = "babycarp" + icon_dead = "babycarp_dead" + icon_gib = null + can_nap = TRUE + gender = NEUTER + mob_size = 3.5 + holder_type = /obj/item/weapon/holder/carp/baby + +/mob/living/simple_animal/carp/baby/death() + .=..() + desc = "A dead baby space carp, what a tragedy!" \ No newline at end of file diff --git a/html/changelogs/geeves - carpy.yml b/html/changelogs/geeves - carpy.yml new file mode 100644 index 00000000000..30ad29087cf --- /dev/null +++ b/html/changelogs/geeves - carpy.yml @@ -0,0 +1,6 @@ +author: Geeves, Kyres1 + +delete-after: True + +changes: + - rscadd: "A new mascot has been introduced to Engineering, Ginny, the baby space carp." diff --git a/icons/mob/feet.dmi b/icons/mob/feet.dmi index 9affdbd297b..d78d04e57d1 100644 Binary files a/icons/mob/feet.dmi and b/icons/mob/feet.dmi differ diff --git a/icons/mob/npc/animal.dmi b/icons/mob/npc/animal.dmi index 37317984719..201c735276d 100644 Binary files a/icons/mob/npc/animal.dmi and b/icons/mob/npc/animal.dmi differ diff --git a/icons/mob/npc/held_mobs.dmi b/icons/mob/npc/held_mobs.dmi index a10f965a9e1..0726e4cda68 100644 Binary files a/icons/mob/npc/held_mobs.dmi and b/icons/mob/npc/held_mobs.dmi differ diff --git a/icons/obj/clothing/shoes.dmi b/icons/obj/clothing/shoes.dmi index b5238ab9a50..9206e4dd30b 100644 Binary files a/icons/obj/clothing/shoes.dmi and b/icons/obj/clothing/shoes.dmi differ diff --git a/maps/aurora/aurora-4_mainlevel.dmm b/maps/aurora/aurora-4_mainlevel.dmm index 5b87fc808bc..2fb0ddfd6c4 100644 --- a/maps/aurora/aurora-4_mainlevel.dmm +++ b/maps/aurora/aurora-4_mainlevel.dmm @@ -3254,6 +3254,18 @@ }, /turf/simulated/floor/plating, /area/maintenance/vault) +"agd" = ( +/obj/structure/window/reinforced{ + icon_state = "rwindow"; + dir = 4 + }, +/obj/machinery/door/window/brigdoor/southright{ + req_access = list(56) + }, +/obj/effect/decal/warning_stripes, +/mob/living/simple_animal/carp/fluff/ginny, +/turf/simulated/floor/reinforced, +/area/crew_quarters/heads/chief) "agf" = ( /obj/structure/grille, /turf/simulated/floor/plating, @@ -22043,18 +22055,6 @@ /obj/item/weapon/rfd/construction, /turf/simulated/floor/tiled, /area/crew_quarters/heads/chief) -"aMK" = ( -/obj/structure/window/reinforced{ - icon_state = "rwindow"; - dir = 4 - }, -/obj/machinery/door/window/brigdoor/southright{ - req_access = list(56) - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/mob/living/bot/floorbot/floorbob, -/turf/simulated/floor/tiled, -/area/crew_quarters/heads/chief) "aML" = ( /obj/machinery/power/apc/high{ dir = 1; @@ -87659,7 +87659,7 @@ aFC aHC aJd vHX -aMK +agd aOy aQg aRT