mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-22 04:30:44 +01:00
NEW BEPIS: Positronic sphere (#83688)
## About The Pull Request Adds a new positronic brain variant to bepis tech To save materials we took the corners off but now they can roll It can roll around, knock items over and push other posibrains away You can also kick it across the room and it's a lot cheaper because you cut the corners off https://github.com/tgstation/tgstation/assets/7501474/e4f913e8-cf2f-455a-b2eb-1654468df708 ## Why It's Good For The Game A chorus of whining posibrains is like heroine to the ears, now they can aggresively shit around the robotics lab while whining for their DURAND or cyborg shell, but the robo can also punt them into the disposal bin ## Changelog 🆑 add: Adds a positronic sphere to bepis tech and roboticist mail goodies. It can now wreack havoc across the robotics lab while whining for a DURAND body, but you can also punt it! /🆑 --------- Co-authored-by: carlarctg <53100513+carlarctg@users.noreply.github.com> Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Co-authored-by: Jacquerel <hnevard@gmail.com>
This commit is contained in:
co-authored by
carlarctg
MrMelbert
Jacquerel
parent
44437ee66d
commit
fde2eb3177
@@ -26,7 +26,8 @@
|
||||
mail_goodies = list(
|
||||
/obj/item/storage/box/flashes = 20,
|
||||
/obj/item/stack/sheet/iron/twenty = 15,
|
||||
/obj/item/modular_computer/laptop = 5
|
||||
/obj/item/modular_computer/laptop = 5,
|
||||
/obj/item/mmi/posibrain/sphere = 5,
|
||||
)
|
||||
|
||||
family_heirlooms = list(/obj/item/toy/plush/pkplush)
|
||||
|
||||
@@ -14,6 +14,8 @@
|
||||
var/datum/ai_laws/laws = new()
|
||||
var/force_replace_ai_name = FALSE
|
||||
var/overrides_aicore_laws = FALSE // Whether the laws on the MMI, if any, override possible pre-existing laws loaded on the AI core.
|
||||
/// Whether the brainmob can move. Doesnt usually matter but SPHERICAL POSIBRAINSSS
|
||||
var/immobilize = TRUE
|
||||
|
||||
/obj/item/mmi/Initialize(mapload)
|
||||
. = ..()
|
||||
@@ -250,7 +252,7 @@
|
||||
if(new_mecha)
|
||||
if(!. && brainmob) // There was no mecha, there now is, and we have a brain mob that is no longer unaided.
|
||||
brainmob.remove_traits(list(TRAIT_IMMOBILIZED, TRAIT_HANDS_BLOCKED), BRAIN_UNAIDED)
|
||||
else if(. && brainmob) // There was a mecha, there no longer is one, and there is a brain mob that is now again unaided.
|
||||
else if(. && brainmob && immobilize) // There was a mecha, there no longer is one, and there is a brain mob that is now again unaided.
|
||||
brainmob.add_traits(list(TRAIT_IMMOBILIZED, TRAIT_HANDS_BLOCKED), BRAIN_UNAIDED)
|
||||
|
||||
|
||||
|
||||
@@ -14,10 +14,9 @@
|
||||
var/obj/item/organ/internal/brain/OB = new(loc) //we create a new brain organ for it.
|
||||
OB.brainmob = src
|
||||
forceMove(OB)
|
||||
if(!container?.mecha) //Unless inside a mecha, brains are rather helpless.
|
||||
if(!container?.mecha && (!container || container.immobilize)) //Unless inside a mecha, brains are rather helpless.
|
||||
add_traits(list(TRAIT_IMMOBILIZED, TRAIT_HANDS_BLOCKED), BRAIN_UNAIDED)
|
||||
|
||||
|
||||
/mob/living/brain/on_changed_z_level(turf/old_turf, turf/new_turf, same_z_layer, notify_contents)
|
||||
var/obj/item/organ/internal/brain/brain_loc = loc
|
||||
if(brain_loc && isnull(new_turf) && brain_loc.owner) //we're actively being put inside a new body.
|
||||
|
||||
@@ -222,3 +222,63 @@ GLOBAL_VAR(posibrain_notify_cooldown)
|
||||
|
||||
/obj/item/mmi/posibrain/display/is_occupied()
|
||||
return TRUE
|
||||
|
||||
/// Posibrains but spherical. They can roll around and you can kick them
|
||||
/obj/item/mmi/posibrain/sphere
|
||||
name = "positronic sphere"
|
||||
desc = "Recent developments on cost-cutting measures have allowed us to cut positronic brain cubes into twice-as-cheap spheres. \
|
||||
Unfortunately, it also allows them to move around the lab via rolling maneuvers."
|
||||
icon_state = "spheribrain"
|
||||
base_icon_state = "spheribrain"
|
||||
immobilize = FALSE
|
||||
/// Delay between movements
|
||||
var/move_delay = 0.5 SECONDS
|
||||
/// when can we move again?
|
||||
var/can_move
|
||||
|
||||
/obj/item/mmi/posibrain/sphere/Initialize(mapload, autoping)
|
||||
. = ..()
|
||||
|
||||
var/matrix/matrix = matrix()
|
||||
transform = matrix.Scale(0.8, 0.8)
|
||||
|
||||
brainmob.remove_traits(list(TRAIT_IMMOBILIZED, TRAIT_HANDS_BLOCKED), BRAIN_UNAIDED)
|
||||
|
||||
/obj/item/mmi/posibrain/sphere/relaymove(mob/living/user, direction)
|
||||
if(isspaceturf(loc) || !direction || mecha)
|
||||
return
|
||||
|
||||
if(can_move >= world.time)
|
||||
return
|
||||
can_move = world.time + move_delay
|
||||
|
||||
// ESCAPE PRISON
|
||||
if(ismovable(loc) && prob(25))
|
||||
var/obj/item/item = pick(loc.contents)
|
||||
if(istype(loc, /obj/item/storage))
|
||||
item.forceMove(loc.drop_location()) //throw stuff out of the inventory till we free ourselves!
|
||||
playsound(src, SFX_RUSTLE, 30, TRUE)
|
||||
return
|
||||
|
||||
// MOVE US
|
||||
if(isturf(loc))
|
||||
can_move = world.time + move_delay
|
||||
try_step_multiz(direction)
|
||||
SpinAnimation(move_delay, 1, direction == NORTH || direction == EAST)
|
||||
|
||||
/obj/item/mmi/posibrain/sphere/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change)
|
||||
. = ..()
|
||||
if(brainmob && isturf(loc))
|
||||
anchored = TRUE //anchor so we dont broom ourselves.
|
||||
do_sweep(src, brainmob, loc, get_dir(old_loc, loc)) //movement dir doesnt work on objects
|
||||
anchored = FALSE
|
||||
|
||||
/// Punt the shit across the room
|
||||
/obj/item/mmi/posibrain/sphere/attack_hand_secondary(mob/user, list/modifiers)
|
||||
. = ..()
|
||||
if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN)
|
||||
return .
|
||||
throw_at(get_edge_target_turf(src, get_dir(user, src)), 7, 1, user)
|
||||
user.do_attack_animation(src)
|
||||
can_move = world.time + move_delay //pweeze stawp
|
||||
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
|
||||
|
||||
@@ -2605,3 +2605,21 @@
|
||||
category = list(
|
||||
RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_ENGINEERING
|
||||
)
|
||||
|
||||
/datum/design/posisphere
|
||||
name = "Positronic Sphere"
|
||||
desc = "The latest in Artificial Pesterance."
|
||||
id = "posisphere"
|
||||
build_type = MECHFAB
|
||||
materials = list(
|
||||
/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT * 0.85,
|
||||
/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT * 0.65,
|
||||
/datum/material/gold =SMALL_MATERIAL_AMOUNT * 2.5
|
||||
)
|
||||
construction_time = 7.5 SECONDS
|
||||
build_path = /obj/item/mmi/posibrain/sphere
|
||||
category = list(
|
||||
RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_CONTROL_INTERFACES
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
|
||||
@@ -2468,3 +2468,30 @@
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
|
||||
hidden = TRUE
|
||||
experimental = TRUE
|
||||
|
||||
/datum/techweb_node/mod_experimental
|
||||
id = "mod_experimental"
|
||||
display_name = "Experimental Modular Suits"
|
||||
description = "Applications of experimentality when creating MODsuits have created these..."
|
||||
prereq_ids = list("base")
|
||||
design_ids = list(
|
||||
"mod_disposal",
|
||||
"mod_joint_torsion",
|
||||
"mod_recycler",
|
||||
"mod_shooting",
|
||||
)
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
|
||||
hidden = TRUE
|
||||
experimental = TRUE
|
||||
|
||||
/datum/techweb_node/posisphere
|
||||
id = "positronic_sphere"
|
||||
display_name = "Experimental Spherical Positronic Brain"
|
||||
description = "Recent developments on cost-cutting measures have allowed us to cut positronic brain cubes into twice-as-cheap spheres. Unfortunately, it also allows them to move around the lab via rolling maneuvers."
|
||||
prereq_ids = list("base")
|
||||
design_ids = list(
|
||||
"posisphere",
|
||||
)
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
|
||||
hidden = TRUE
|
||||
experimental = TRUE
|
||||
|
||||
Reference in New Issue
Block a user