Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New Race: IPCs #1480

Closed
wants to merge 45 commits into from
Closed

Conversation

Timemaster99
Copy link
Contributor

@Timemaster99 Timemaster99 commented Jul 10, 2024

About the PR

IPC race, ported over from this PR at deep. This includes the race with all old methods and conventions redone to work with our codebase.

Why / Balance

The balance information is at the linked PR, but here is a simple list. There will be some things missed here

Pros:

  • No lungs, immune to asphyxiation
  • Only takes brute and burn since they're made of metal and wires. Immune to rads and genetic
  • Immune to space (balanced out by power requirement below)
  • Cannot go into crit (balanced out by lower death threshold)
  • Uses both borg rechargers and APCs to charge
  • Special sounds, emotes, and text box
  • Encryption keys are installed directly into the IPC (and are removable), no headsets
  • Cannot be defibbed, comes with a handy reboot button
  • Annoying, loud beeping to alert others when battery is dead or removed
  • Customizable body parts (doubles as prosthetic body parts for other races)

Cons:

  • Medical cannot heal IPCs, as they use welders, wires, and glass to repair (if medical is the last thing standing in an emergency, they're out of luck)
  • No bloodstream, no chems (damage healing must be done slowly and manually with the tools mentioned above)
  • Lower death threshold to make up for no crit (120 damage instead of the normal 200 for other mobs)
  • Battery-powered, and very power hungry. IPCs get only a few minutes of charge, so they cannot operate for more than a few minutes in areas without APCs, borg rechargers, or people with extra batteries. No indefinitely floating through space, or staying put in chemistry the entire round
  • EMPs drain power cells
  • Has a maintenance panel that can be unlocked to remove encryption keys and battery. Has a long doafter, but IPCs should still be sure to lock themselves
  • Cannot be psionic (neither can borgs)

Technical details

Adds multiple components exclusive to IPC, including its own SharedSiliconSystem to handle this silicon-type mob. The only thing I had to nuke from the DS14 port was the FlammableComponent's atmosTransferEfficiency, since it doesn't seem to exist anymore in the component.

Media

These are videos taken from the PR at DS14, which are taken from the fork Estação Pirata.

2024-04-10_22-04-33.mp4
2024-04-10_23-28-58.mp4
2024-06-11_18-44-59.mp4
  • I have added screenshots/videos to this PR showcasing its changes ingame, or this PR does not require an ingame showcase

Breaking changes

Changelog

🆑

  • add: Integrated Positronic Chassis' have joined the station workforce!

@github-actions github-actions bot added S: Needs Review Changes: YML Changes any yml files Changes: C# Changes any cs files Changes: Localization Changes any ftl files Changes: Documentation Changes any xml or md files Changes: Sprite Changes any png or json in an rsi and removed S: Needs Review labels Jul 10, 2024
Copy link
Contributor

github-actions bot commented Jul 10, 2024

RSI Diff Bot; head commit c268b95 merging into 913a223
This PR makes changes to 1 or more RSIs. Here is a summary of all changes:

Resources/Textures/DeltaV/Mobs/Customization/cyberlimbs/hesphiastos/hesphiastos_alt1.rsi

State Old New Status
head-1 Added
head-2 Added
head-3 Added

Resources/Textures/DeltaV/Mobs/Customization/cyberlimbs/shellguard/shellguard_alt1.rsi

State Old New Status
head-1 Added
head-2 Added

Resources/Textures/DeltaV/Mobs/Customization/cyberlimbs/xion/xion_alt1.rsi

State Old New Status
head-1 Added
head-2 Added

Resources/Textures/DeltaV/Mobs/Customization/cyberlimbs/xion/xion_monitor.rsi

State Old New Status
head-1 Added
head-2 Added

Resources/Textures/DeltaV/Mobs/Customization/cyberlimbs/zenghu/zenghu_main.rsi

State Old New Status
groin Added
head-1 Added
head-2 Added
l_arm-1 Added
l_arm-2 Added
l_foot-1 Added
l_foot-2 Added
l_hand-1 Added
l_hand-2 Added
l_leg-1 Added
l_leg-2 Added
r_arm-1 Added
r_arm-2 Added
r_foot-1 Added
r_foot-2 Added
r_hand-1 Added
r_hand-2 Added
r_leg-1 Added
r_leg-2 Added
torso-1 Added
torso-2 Added

Resources/Textures/EstacaoPirata/Mobs/Customization/cyberlimbs/bishop/bishop_alt1.rsi

State Old New Status
head Added

Resources/Textures/EstacaoPirata/Mobs/Customization/cyberlimbs/bishop/bishop_main.rsi

State Old New Status
head Added
l_arm-primary Added
l_arm-secondary Added
l_arm-tertiary Added
l_foot Added
l_hand Added
l_leg-primary Added
l_leg-secondary Added
r_arm-primary Added
r_arm-secondary Added
r_arm-tertiary Added
r_foot Added
r_hand Added
r_leg-primary Added
r_leg-secondary Added
torso-primary Added
torso-secondary Added

Resources/Textures/EstacaoPirata/Mobs/Customization/cyberlimbs/bishop/bishop_monitor.rsi

State Old New Status
head-2 Added
head Added

Resources/Textures/EstacaoPirata/Mobs/Customization/cyberlimbs/hesphiastos/hesphiastos_main.rsi

State Old New Status
l_arm-1 Added
l_arm-2 Added
l_foot-1 Added
l_foot-2 Added
l_hand-1 Added
l_hand-2 Added
l_leg-1 Added
l_leg-2 Added
r_arm-1 Added
r_arm-2 Added
r_foot-1 Added
r_foot-2 Added
r_hand-1 Added
r_hand-2 Added
r_leg-1 Added
r_leg-2 Added
torso-1 Added
torso-2 Added

Resources/Textures/EstacaoPirata/Mobs/Customization/cyberlimbs/hesphiastos/hesphiastos_monitor.rsi

State Old New Status
head-1 Added
head-2 Added

Resources/Textures/EstacaoPirata/Mobs/Customization/cyberlimbs/morpheus/morpheus_alt1.rsi

State Old New Status
head Added

Resources/Textures/EstacaoPirata/Mobs/Customization/cyberlimbs/morpheus/morpheus_main.rsi

State Old New Status
head Added
l_arm Added
l_foot Added
l_hand Added
l_leg Added
r_arm Added
r_foot Added
r_hand Added
r_leg Added
torso Added

Resources/Textures/EstacaoPirata/Mobs/Customization/cyberlimbs/shellguard/shellguard_main.rsi

State Old New Status
l_arm-1 Added
l_arm-2 Added
l_foot-1 Added
l_foot-2 Added
l_hand-1 Added
l_hand-2 Added
l_leg-1 Added
l_leg-2 Added
r_arm-1 Added
r_arm-2 Added
r_foot-1 Added
r_foot-2 Added
r_hand-1 Added
r_hand-2 Added
r_leg-1 Added
r_leg-2 Added
torso-1 Added
torso-2 Added

Resources/Textures/EstacaoPirata/Mobs/Customization/cyberlimbs/shellguard/shellguard_monitor.rsi

State Old New Status
head-1 Added
head-2 Added

Resources/Textures/EstacaoPirata/Mobs/Customization/cyberlimbs/wardtakahashi/wardtakahashi_alt1.rsi

State Old New Status
head Added

Resources/Textures/EstacaoPirata/Mobs/Customization/cyberlimbs/wardtakahashi/wardtakahashi_main.rsi

State Old New Status
head Added
l_arm Added
l_foot Added
l_hand Added
l_leg Added
r_arm Added
r_foot Added
r_hand Added
r_leg Added
torso Added

Resources/Textures/EstacaoPirata/Mobs/Customization/cyberlimbs/wardtakahashi/wardtakahashi_monitor.rsi

State Old New Status
head Added

Resources/Textures/EstacaoPirata/Mobs/Customization/cyberlimbs/xion/xion_main.rsi

State Old New Status
l_arm-1 Added
l_arm-2 Added
l_foot-1 Added
l_foot-2 Added
l_hand-1 Added
l_hand-2 Added
l_leg-1 Added
l_leg-2 Added
r_arm-1 Added
r_arm-2 Added
r_foot-1 Added
r_foot-2 Added
r_hand-1 Added
r_hand-2 Added
r_leg-1 Added
r_leg-2 Added
torso-1 Added
torso-2 Added

Resources/Textures/EstacaoPirata/Mobs/Customization/cyberlimbs/xion/xion_monitor.rsi

State Old New Status
head-1 Added
head-2 Added

Resources/Textures/SimpleStation14/Mobs/Customization/ipc_antenna.rsi

State Old New Status
ipc_antenna_antlers Added
ipc_antenna_crowned Added
ipc_antenna_cyberhead Added
ipc_antenna_droneeyes Added
ipc_antenna_light Added
ipc_antenna_lightb Added
ipc_antenna_sidelights Added
ipc_antenna_tesla Added
ipc_antenna_towers Added
ipc_antenna_tv Added

Resources/Textures/SimpleStation14/Mobs/Customization/ipc_screens.rsi

State Old New Status
ipc_screen_blank Added
ipc_screen_blue Added
ipc_screen_breakout Added
ipc_screen_bsod Added
ipc_screen_console Added
ipc_screen_ecgwave Added
ipc_screen_eight Added
ipc_screen_exclaim Added
ipc_screen_eyes Added
ipc_screen_eyesangry Added
ipc_screen_eyestall Added
ipc_screen_frown Added
ipc_screen_glider Added
ipc_screen_goggles Added
ipc_screen_heart Added
ipc_screen_l Added
ipc_screen_loading Added
ipc_screen_monoeye Added
ipc_screen_nature Added
ipc_screen_orange Added
ipc_screen_pink Added
ipc_screen_question Added
ipc_screen_rainbowdiag Added
ipc_screen_rainbowhoriz Added
ipc_screen_redtext Added
ipc_screen_rgb Added
ipc_screen_ring Added
ipc_screen_scroll Added
ipc_screen_shower Added
ipc_screen_sinewave Added
ipc_screen_smile Added

Edit: diff updated after c268b95

@portfiend
Copy link
Contributor

LFG

@NullWanderer NullWanderer self-assigned this Jul 10, 2024
@NullWanderer NullWanderer added the S: Do Not Merge Don't merge this yet label Jul 10, 2024
@VMSolidus
Copy link
Contributor

I can at least confirm that on the DS14 playtest of these, the IPCs have had pretty much all of their known issues fixed. We're actually sufficiently satisfied with IPC, that we're probably going to be putting them on the EE repository after Saturday if nothing comes up during the next playtest.

@DangerRevolution
Copy link
Contributor

really recommend fixing the suicide bug; IPC can kill themselves by accidentally taking out their own battery. Which instantly crits them...

Yes; only idiots would open their own panel and attempt to take shit out of them but this should be fixed to not round-remove IPC's inside maints.

@Timemaster99
Copy link
Contributor Author

really recommend fixing the suicide bug; IPC can kill themselves by accidentally taking out their own battery. Which instantly crits them...

Yes; only idiots would open their own panel and attempt to take shit out of them but this should be fixed to not round-remove IPC's inside maints.

It puts them to sleep, does not crit them. Additionally, they make a loud beeping noise when their charge is low or their battery is removed, which would likely alert anyone involved

@DangerRevolution
Copy link
Contributor

DangerRevolution commented Jul 10, 2024

Just editing the comment to provide more context rather than being rude;

it's up to you whether or not you fix it. It's easy to argue that it's natural selection whether or not an IPC pulls their own battery out. But this does happen on Deepstation, and Delta has lowpop hours too. This is a QOL that should be implemented if you are okay to do so; as this does impact rounds and people aren't as likely to find out-of-charge IPC's as much as you think.

@Timemaster99
Copy link
Contributor Author

Just editing the comment to provide more context rather than being rude;

it's up to you whether or not you fix it. It's easy to argue that it's natural selection whether or not an IPC pulls their own battery out. But this does happen on Deepstation, and Delta has lowpop hours too. This is a QOL that should be implemented if you are okay to do so; as this does impact rounds and people aren't as likely to find out-of-charge IPC's as much as you think.

resolved, they can no longer eject their own battery

@Timemaster99
Copy link
Contributor Author

Updated the description just a bit to reflect more features

@Timemaster99
Copy link
Contributor Author

updated with VM's code review

@Lyndomen
Copy link
Contributor

@DeltaV-Station/maintainers thoughts whenever you can, admins are chatting about it

return true;
}
RaiseLocalEvent(uid, new ElectrocutedEvent(uid, sourceUid, siemensCoefficient, shockDamage), true); // Parkstation-IPC
return true;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

undo these indents

@@ -1,4 +1,4 @@
using Content.Shared.Chat.Prototypes;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

undo BOM change

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Did these have BOM before?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

look at original :trollface:

@@ -13,6 +13,12 @@ public sealed partial class DeathgaspComponent : Component
/// <summary>
/// The emote prototype to use.
/// </summary>
[DataField("prototype", customTypeSerializer:typeof(PrototypeIdSerializer<EmotePrototype>))]
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

no reason to change this, it can be done upstream and use ProtoId too

@@ -1,4 +1,4 @@
using Content.Server.Chat.Systems;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

BOM

/// The minimum and maximum max charge the battery can have.
/// </summary>
[DataField]
public Vector2 BatteryMaxMinMax = new(0.85f, 1.15f);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

use destruction MinMax instead of vector2

args.Cancelled = true;
}

private void OnItemSlotEjectAttempt(EntityUid uid, SiliconComponent component, ref ItemSlotEjectAttemptEvent args)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

move this to a method instead of copy pasting the exact same code for each event

Comment on lines +57 to +58
[ValidatePrototypeId<AlertPrototype>]
public const string ChargeAlertCategory = "BorgBattery";
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is stored on the component so use it instead

if (!args.CanAccess || !args.CanInteract || args.Hands == null)
return;

if (!TryComp(uid, out MobStateComponent? mobStateComponent) || !_mobState.IsDead(uid, mobStateComponent))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

dont need the trycomp


private void TryStartup(EntityUid user, EntityUid target, DeadStartupButtonComponent comp)
{
if (!_net.IsServer)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

no reason to not predict this

[DataField("cycleDelay")]
public float CycleDelay = 2.0f;

public float AccumulatedFrametime;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

remove

@ghost ghost assigned deltanedas and unassigned NullWanderer Sep 6, 2024
Copy link

@ghost ghost left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Don't have much to say with this review other than what Deltanedas has already caught, but I decided to take a look at the yaml. If you can take everything into account from that, quite frankly giant review, great.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Need to have a extra line at the end of this file if it ends at line seven because that's a standard thing for YAML...

color: "#FFFFFF"
sprites:
- sprite: EstacaoPirata/Mobs/Customization/cyberlimbs/morpheus/morpheus_main.rsi
state: r_foot
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If this is the end of the file, newline.

- sprite: EstacaoPirata/Mobs/Customization/cyberlimbs/shellguard/shellguard_main.rsi
state: r_foot-1
- sprite: EstacaoPirata/Mobs/Customization/cyberlimbs/shellguard/shellguard_main.rsi
state: r_foot-2
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If this is the end of the file, newline.

speciesRestriction: [IPC]
sprites:
- sprite: EstacaoPirata/Mobs/Customization/cyberlimbs/wardtakahashi/wardtakahashi_main.rsi
state: r_foot
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If this is the end of the file, newline.

- sprite: EstacaoPirata/Mobs/Customization/cyberlimbs/xion/xion_main.rsi
state: r_foot-1
- sprite: EstacaoPirata/Mobs/Customization/cyberlimbs/xion/xion_main.rsi
state: r_foot-2
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If this is the end of the file, newline.

Copy link
Contributor

github-actions bot commented Sep 8, 2024

This pull request has conflicts, please resolve those before we can evaluate the pull request.

@github-actions github-actions bot added the S: Merge Conflict Fix your PR! label Sep 8, 2024
@github-actions github-actions bot removed the S: Merge Conflict Fix your PR! label Sep 8, 2024
@ghost
Copy link

ghost commented Sep 8, 2024

MFW merging the mice accidentally caused a conflict here
image

@Timemaster99
Copy link
Contributor Author

MFW merging the mice accidentally caused a conflict here image

causes a conflict for any species PRs, it's fine

@github-actions github-actions bot added the S: Merge Conflict Fix your PR! label Sep 9, 2024
Copy link
Contributor

github-actions bot commented Sep 9, 2024

This pull request has conflicts, please resolve those before we can evaluate the pull request.

@TadJohnson00
Copy link
Contributor

Fuckin ell. Alright, here's the deal: IPCs are cool but having such a mechanically different species is a big deal. I'm gonna wait for Sam to get back from break so we can have a quick chat about this one, and see what the future looks like for synthetics as a whole

@HawkeyeBlade
Copy link
Contributor

Timemaster pleaseeeee get IPC into the game :3

Copy link
Contributor

This pull request has conflicts, please resolve those before we can evaluate the pull request.

Copy link
Contributor

This pull request has conflicts, please resolve those before we can evaluate the pull request.

@MilonPL
Copy link
Member

MilonPL commented Nov 26, 2024

Heya! Since this PR has gotten no commits or activity in the past 2 months, I'm going to close it. If you ever come back to this, feel free to open a new PR.

@MilonPL MilonPL closed this Nov 26, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Changes: C# Changes any cs files Changes: Documentation Changes any xml or md files Changes: Localization Changes any ftl files Changes: Sprite Changes any png or json in an rsi Changes: YML Changes any yml files S: Do Not Merge Don't merge this yet S: Merge Conflict Fix your PR! S: Needs Review
Projects
None yet
Development

Successfully merging this pull request may close these issues.