Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions modular_zzz/code/datums/actions/items/toggles.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
/datum/action/item_action/no_drop_toggle
name = "No Drop"
desc = "Предмет не выпадет из рук!"
button_icon = 'icons/obj/weapons/hand.dmi'
button_icon_state = "disintegrate"

/datum/action/item_action/no_drop_toggle/do_effect(trigger_flags)
. = ..()
if(!. || !isitem(target) || !ismob(usr))
return FALSE
var/obj/item/I = target
var/mob/M = usr
if(!M.is_holding(I))
return FALSE
if(HAS_TRAIT_FROM(I, TRAIT_NODROP, REF(src)))
REMOVE_TRAIT(I, TRAIT_NODROP, REF(src))
to_chat(M, "Ты расжимаешь хватку.")
else
ADD_TRAIT(I, TRAIT_NODROP, REF(src))
to_chat(M, "Ты цепляешься к предмету смертной хваткой!")
M.playsound_local(M, 'sound/items/equip/glove_equip.ogg', 100, FALSE)
build_all_button_icons()

/datum/action/item_action/no_drop_toggle/apply_button_background(atom/movable/screen/movable/action_button/current_button, force)
if(!isnull(target) && HAS_TRAIT_FROM(target, TRAIT_NODROP, REF(src)))
background_icon_state = "bg_default_on"
else
background_icon_state = "bg_default"
. = ..()
Binary file not shown.
Binary file not shown.
Binary file not shown.
517 changes: 273 additions & 244 deletions modular_zzz/code/modules/antagonists/hatred/hatred.dm

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions tgstation.dme
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// All manual changes should be made outside the BEGIN_ and END_ blocks.

Check failure on line 1 in tgstation.dme

View workflow job for this annotation

GitHub Actions / Run Linters / linters

Ticked File Enforcement

The include at line 10138 is out of order (#include "modular_zzplurt\code\game\mecha\mecha.dm", expected #include "modular_zzplurt\code\game\area\areas\ruins\shuttle8532.dm")
// New source code should be placed in .dm files: choose File/New --> Code File.

// This should always be the VERY FIRST THING. No exceptions. Read the file for more info, but basically, this needs to be here so that we can ensure specific code is always the very first thing to execute.
Expand Down Expand Up @@ -10736,6 +10736,7 @@
#include "modular_zzz\code\controllers\subsystem\vote.dm"
#include "modular_zzz\code\datums\sprite_accessories.dm"
#include "modular_zzz\code\datums\world_topic.dm"
#include "modular_zzz\code\datums\actions\items\toggles.dm"
#include "modular_zzz\code\datums\components\jukebox.dm"
#include "modular_zzz\code\datums\quirks\negative_quirks\allergic.dm"
#include "modular_zzz\code\datums\quirks\negative_quirks\blood_deficiency.dm"
Expand Down
82 changes: 82 additions & 0 deletions tgui/packages/tgui/interfaces/AntagInfoHatred.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
import { Section, Stack } from 'tgui-core/components';

import { useBackend } from '../backend';
import { Window } from '../layouts';
import { Rules } from './AntagInfoRules'; // BUBBER EDIT ADDITION
import { type Objective, ObjectivePrintout } from './common/Objectives';

type Info = {
antag_name: string;
objectives: Objective[];
pistols: boolean;
belt: boolean;
};

// SKYRAT EDIT increase height from 250 to 500
export const AntagInfoHatred = (props) => {
const { data } = useBackend<Info>();
const { antag_name, objectives } = data;
return (
<Window width={620} height={500}>
<Window.Content>
<Section scrollable fill>
<Stack vertical>
<Stack.Item textColor="red" fontSize="20px">
You are the {antag_name}!
</Stack.Item>
{/* SKYRAT EDIT ADDITION START */}
<Stack.Item>
<Rules />
</Stack.Item>
{/* SKYRAT EDIT ADDITION END */}
<Stack.Item>
<ObjectivePrintout objectives={objectives} />
</Stack.Item>
<Stack.Item>
<Section fill>
Ты - <span style={{color: '#ff0000', fontWeight: 'bold'}}>Безымянный Массшутер</span>. Твое имя совершенно неважно. Твое прошлое даже если и было, оно было незавидным.
<br />Ты испытываешь непреодолимую ненависть, отвращение и презрение ко всем окружающим.
<br />У тебя лишь две цели: <u>убивать</u> и <u>умереть славной смертью</u>.
<br />Твое проклятое снаряжение неразлучно с тобою и подстегивает тебя продолжать соврешать геноцид беззащитных гражданских.
<br />Твоё <span style={{color: '#ff0000'}}>Оружие Ненависти</span> и неутолимая жажда убивать вознаграждают тебя, ибо завершающий выстрел в упор в голову (рот) исцеляет твои раны, нож добивает быстрее и надежнее.
<br /><span style={{color: '#ff0000'}}>Обычная медицина бессильна, а чужое оружие бесполезно для тебя.</span>
<PistolsInfo />
<BeltInfo />
<br /><span style={{color: '#ff0000', fontWeight: 'bold'}}>Убивай и будь убит!</span> Ибо никто сегодня не защищен от твоей Ненависти.
</Section>
</Stack.Item>
</Stack>
</Section>
</Window.Content>
</Window>
);
};

const PistolsInfo = (props) => {
const { data } = useBackend<Info>();
const { pistols } = data;
if (pistols) {
return (
<Section fill>
<span style={{color: '#ff0000'}}>Кобура Ненависти</span> всегда готова предоставить тебе особое парное оружие. <span style={{color: '#ff0000'}}>Стрелять с двух рук - в Харме</span>. После использования можешь просто выбросить их, ибо их цель была выполнена.
</Section>
);
}
return (
<Section fill>
<span style={{color: '#ff0000'}}>Cумка для патронов</span> сама пополняет пустые магазины/картриджи/клипсы для твоего оружия. Никогда не выбрасывай их!
</Section>
)
};

const BeltInfo = (props) => {
const { data } = useBackend<Info>();
const { belt } = data;
if (belt) {
return (
<Section fill>
<span style={{color: '#ff0000'}}>Пояс с гранатами</span> пожирает сердца твоих жертв после их добивания и вознаграждает тебя новой взрывоопасной аммуницией.
</Section>
);
}
};
Loading