-
Notifications
You must be signed in to change notification settings - Fork 4.9k
/
eldritch_items.dm
440 lines (371 loc) · 17.1 KB
/
eldritch_items.dm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
/obj/item/living_heart
name = "Living Heart"
desc = "A link to the worlds beyond."
icon = 'icons/obj/eldritch.dmi'
icon_state = "living_heart"
w_class = WEIGHT_CLASS_SMALL
///Target
var/mob/living/carbon/human/target
/obj/item/living_heart/attack_self(mob/user)
. = ..()
if(!IS_HERETIC(user))
return
if(!target)
to_chat(user,"<span class='warning'>No target could be found. Put the living heart on a transmutation rune and activate the rune to recieve a target.</span>")
return
var/dist = get_dist(get_turf(user),get_turf(target))
var/dir = get_dir(get_turf(user),get_turf(target))
if(user.z != target.z)
to_chat(user,"<span class='warning'>[target.real_name] is on another plane of existence!</span>")
else
switch(dist)
if(0 to 15)
to_chat(user,"<span class='warning'>[target.real_name] is near you. They are to the [dir2text(dir)] of you!</span>")
if(16 to 31)
to_chat(user,"<span class='warning'>[target.real_name] is somewhere in your vicinity. They are to the [dir2text(dir)] of you!</span>")
if(32 to 127)
to_chat(user,"<span class='warning'>[target.real_name] is far away from you. They are to the [dir2text(dir)] of you!</span>")
else
to_chat(user,"<span class='warning'>[target.real_name] is beyond our reach.</span>")
if(target.stat == DEAD)
to_chat(user,"<span class='warning'>[target.real_name] is dead. Bring them to a transmutation rune!</span>")
/datum/action/innate/heretic_shatter
name = "Shattering Offer"
desc = "By breaking your blade, you will be granted salvation from a dire situation. (Teleports you to a random safe turf on your current z level, but destroys your blade.)"
background_icon_state = "bg_ecult"
button_icon_state = "shatter"
icon_icon = 'icons/mob/actions/actions_ecult.dmi'
check_flags = AB_CHECK_HANDS_BLOCKED|AB_CHECK_IMMOBILE
var/mob/living/carbon/human/holder
var/obj/item/melee/sickly_blade/sword
/datum/action/innate/heretic_shatter/Grant(mob/user, obj/object)
sword = object
holder = user
//i know what im doing
return ..()
/datum/action/innate/heretic_shatter/IsAvailable()
if(IS_HERETIC(holder) || IS_HERETIC_MONSTER(holder))
return TRUE
else
return FALSE
/datum/action/innate/heretic_shatter/Activate()
var/turf/safe_turf = find_safe_turf(zlevels = sword.z, extended_safety_checks = TRUE)
do_teleport(holder,safe_turf,forceMove = TRUE)
to_chat(holder,"<span class='warning'>You feel a gust of energy flow through your body... the Rusted Hills heard your call...</span>")
qdel(sword)
/obj/item/melee/sickly_blade
name = "\improper Sickly Blade"
desc = "A sickly green crescent blade, decorated with an ornamental eye. You feel like you're being watched..."
icon = 'icons/obj/eldritch.dmi'
icon_state = "eldritch_blade"
inhand_icon_state = "eldritch_blade"
lefthand_file = 'icons/mob/inhands/64x64_lefthand.dmi'
righthand_file = 'icons/mob/inhands/64x64_righthand.dmi'
inhand_x_dimension = 64
inhand_y_dimension = 64
flags_1 = CONDUCT_1
sharpness = SHARP_EDGED
w_class = WEIGHT_CLASS_NORMAL
force = 17
throwforce = 10
hitsound = 'sound/weapons/bladeslice.ogg'
attack_verb_continuous = list("attacks", "slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "rends")
attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "rend")
var/datum/action/innate/heretic_shatter/linked_action
/obj/item/melee/sickly_blade/Initialize()
. = ..()
linked_action = new(src)
/obj/item/melee/sickly_blade/attack(mob/living/M, mob/living/user)
if(!(IS_HERETIC(user) || IS_HERETIC_MONSTER(user)))
to_chat(user,"<span class='danger'>You feel a pulse of alien intellect lash out at your mind!</span>")
var/mob/living/carbon/human/human_user = user
human_user.AdjustParalyzed(5 SECONDS)
return FALSE
return ..()
/obj/item/melee/sickly_blade/pickup(mob/user)
. = ..()
linked_action.Grant(user, src)
/obj/item/melee/sickly_blade/dropped(mob/user, silent)
. = ..()
linked_action.Remove(user, src)
/obj/item/melee/sickly_blade/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
. = ..()
var/datum/antagonist/heretic/cultie = user.mind?.has_antag_datum(/datum/antagonist/heretic)
if(!cultie)
return
var/list/knowledge = cultie.get_all_knowledge()
for(var/X in knowledge)
var/datum/eldritch_knowledge/eldritch_knowledge_datum = knowledge[X]
if(proximity_flag)
eldritch_knowledge_datum.on_eldritch_blade(target,user,proximity_flag,click_parameters)
else
eldritch_knowledge_datum.on_ranged_attack_eldritch_blade(target,user,click_parameters)
/obj/item/melee/sickly_blade/rust
name = "\improper Rusted Blade"
desc = "This crescent blade is decrepit, wasting to rust. Yet still it bites, ripping flesh and bone with jagged, rotten teeth."
icon_state = "rust_blade"
inhand_icon_state = "rust_blade"
/obj/item/melee/sickly_blade/ash
name = "\improper Ashen Blade"
desc = "Molten and unwrought, a hunk of metal warped to cinders and slag. Unmade, it aspires to be more than it is, and shears soot-filled wounds with a blunt edge."
icon_state = "ash_blade"
inhand_icon_state = "ash_blade"
/obj/item/melee/sickly_blade/flesh
name = "Flesh Blade"
desc = "A crescent blade born from a fleshwarped creature. Keenly aware, it seeks to spread to others the suffering it has endured from its dreadful origins."
icon_state = "flesh_blade"
inhand_icon_state = "flesh_blade"
/obj/item/melee/sickly_blade/void
name = "Void Blade"
desc = "Devoid of any substance, this blade reflects nothingness. It is a real depiction of purity, and chaos that ensues after its implementation."
icon_state = "void_blade"
inhand_icon_state = "void_blade"
/obj/item/clothing/neck/eldritch_amulet
name = "Warm Eldritch Medallion"
desc = "A strange medallion. Peering through the crystalline surface, the world around you melts away. You see your own beating heart, and the pulsing of a thousand others."
icon = 'icons/obj/eldritch.dmi'
icon_state = "eye_medalion"
w_class = WEIGHT_CLASS_SMALL
///What trait do we want to add upon equipiing
var/trait = TRAIT_THERMAL_VISION
/obj/item/clothing/neck/eldritch_amulet/equipped(mob/user, slot)
. = ..()
if(ishuman(user) && user.mind && slot == ITEM_SLOT_NECK && (IS_HERETIC(user) || IS_HERETIC_MONSTER(user)) )
ADD_TRAIT(user, trait, CLOTHING_TRAIT)
user.update_sight()
/obj/item/clothing/neck/eldritch_amulet/dropped(mob/user)
. = ..()
REMOVE_TRAIT(user, trait, CLOTHING_TRAIT)
user.update_sight()
/obj/item/clothing/neck/eldritch_amulet/piercing
name = "Piercing Eldritch Medallion"
desc = "A strange medallion. Peering through the crystalline surface, the light refracts into new and terrifying spectrums of color. You see yourself, reflected off cascading mirrors, warped into impossible shapes."
trait = TRAIT_XRAY_VISION
/obj/item/clothing/head/hooded/cult_hoodie/eldritch
name = "ominous hood"
icon_state = "eldritch"
desc = "A torn, dust-caked hood. Strange eyes line the inside."
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT
flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF
flash_protect = FLASH_PROTECTION_WELDER
/obj/item/clothing/suit/hooded/cultrobes/eldritch
name = "ominous armor"
desc = "A ragged, dusty set of robes. Strange eyes line the inside."
icon_state = "eldritch_armor"
inhand_icon_state = "eldritch_armor"
flags_inv = HIDESHOES|HIDEJUMPSUIT
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS
allowed = list(/obj/item/melee/sickly_blade, /obj/item/forbidden_book, /obj/item/living_heart)
hoodtype = /obj/item/clothing/head/hooded/cult_hoodie/eldritch
// slightly better than normal cult robes
armor = list(MELEE = 50, BULLET = 50, LASER = 50,ENERGY = 50, BOMB = 35, BIO = 20, RAD = 0, FIRE = 20, ACID = 20)
/obj/item/reagent_containers/glass/beaker/eldritch
name = "flask of eldritch essence"
desc = "Toxic to the closed minded, yet refreshing to those with knowledge of the beyond."
icon = 'icons/obj/eldritch.dmi'
icon_state = "eldrich_flask"
list_reagents = list(/datum/reagent/eldritch = 50)
/obj/item/clothing/head/hooded/cult_hoodie/void
name = "void hood"
icon_state = "void_cloak"
flags_inv = NONE
flags_cover = NONE
desc = "Black like tar, doesn't reflect any light. Runic symbols line the outside, with each flash you loose comprehension of what you are seeing."
item_flags = EXAMINE_SKIP
armor = list(MELEE = 30, BULLET = 30, LASER = 30,ENERGY = 30, BOMB = 15, BIO = 0, RAD = 0, FIRE = 0, ACID = 0)
/obj/item/clothing/suit/hooded/cultrobes/void
name = "void cloak"
desc = "Black like tar, doesn't reflect any light. Runic symbols line the outside, with each flash you loose comprehension of what you are seeing."
icon_state = "void_cloak"
inhand_icon_state = "void_cloak"
allowed = list(/obj/item/melee/sickly_blade, /obj/item/forbidden_book, /obj/item/living_heart)
hoodtype = /obj/item/clothing/head/hooded/cult_hoodie/void
flags_inv = NONE
// slightly worse than normal cult robes
armor = list(MELEE = 30, BULLET = 30, LASER = 30,ENERGY = 30, BOMB = 15, BIO = 0, RAD = 0, FIRE = 0, ACID = 0)
pocket_storage_component_path = /datum/component/storage/concrete/pockets/void_cloak
alternative_mode = TRUE
/obj/item/clothing/suit/hooded/cultrobes/void/RemoveHood()
var/mob/living/carbon/carbon_user = loc
to_chat(carbon_user,"<span class='notice'>The kaleidoscope of colours collapses around you, as the cloak shifts to visibility!</span>")
item_flags &= ~EXAMINE_SKIP
return ..()
/obj/item/clothing/suit/hooded/cultrobes/void/MakeHood()
if(!iscarbon(loc))
CRASH("[src] attempted to make a hood on a non-carbon thing: [loc]")
var/mob/living/carbon/carbon_user = loc
if(IS_HERETIC(carbon_user) || IS_HERETIC_MONSTER(carbon_user))
. = ..()
to_chat(carbon_user,"<span class='notice'>The light shifts around you making the cloak invisible!</span>")
item_flags |= EXAMINE_SKIP
return
to_chat(carbon_user,"<span class='danger'>You can't force the hood onto your head!</span>")
/obj/item/clothing/mask/void_mask
name = "Abyssal Mask"
desc = "Mask created from the suffering of existance, you can look down it's eyes, and notice something gazing back at you."
icon_state = "mad_mask"
inhand_icon_state = "mad_mask"
w_class = WEIGHT_CLASS_SMALL
flags_cover = MASKCOVERSEYES
resistance_flags = FLAMMABLE
flags_inv = HIDEFACE|HIDEFACIALHAIR|HIDESNOUT
///Who is wearing this
var/mob/living/carbon/human/local_user
/obj/item/clothing/mask/void_mask/equipped(mob/user, slot)
. = ..()
if(slot != ITEM_SLOT_MASK)
return
if(ishuman(user) && user.mind && slot == ITEM_SLOT_MASK)
local_user = user
START_PROCESSING(SSobj,src)
if(IS_HERETIC(user) || IS_HERETIC_MONSTER(user))
return
ADD_TRAIT(src, TRAIT_NODROP, CLOTHING_TRAIT)
/obj/item/clothing/mask/void_mask/dropped(mob/M)
local_user = null
STOP_PROCESSING(SSobj,src)
REMOVE_TRAIT(src, TRAIT_NODROP, CLOTHING_TRAIT)
return ..()
/obj/item/clothing/mask/void_mask/process(delta_time)
if(!local_user)
return PROCESS_KILL
if((IS_HERETIC(local_user) || IS_HERETIC_MONSTER(local_user)) && HAS_TRAIT(src,TRAIT_NODROP))
REMOVE_TRAIT(src, TRAIT_NODROP, CLOTHING_TRAIT)
for(var/mob/living/carbon/human/human_in_range in spiral_range(9,local_user))
if(IS_HERETIC(human_in_range) || IS_HERETIC_MONSTER(human_in_range))
continue
SEND_SIGNAL(human_in_range,COMSIG_VOID_MASK_ACT,rand(-2,-20)*delta_time)
if(DT_PROB(60,delta_time))
human_in_range.hallucination += 5
if(DT_PROB(40,delta_time))
human_in_range.Jitter(5)
if(DT_PROB(30,delta_time))
human_in_range.emote(pick("giggle","laugh"))
human_in_range.adjustStaminaLoss(10)
if(DT_PROB(25,delta_time))
human_in_range.Dizzy(5)
/obj/item/melee/rune_carver
name = "Carving Knife"
desc = "Cold Steel, pure, perfect, this knife can carve the floor in many ways, but only few can evoke the dangers that lurk beneath reality."
icon = 'icons/obj/eldritch.dmi'
icon_state = "rune_carver"
flags_1 = CONDUCT_1
sharpness = SHARP_EDGED
w_class = WEIGHT_CLASS_SMALL
wound_bonus = 20
force = 10
throwforce = 20
embedding = list(embed_chance=75, jostle_chance=2, ignore_throwspeed_threshold=TRUE, pain_stam_pct=0.4, pain_mult=3, jostle_pain_mult=5, rip_time=15)
hitsound = 'sound/weapons/bladeslice.ogg'
attack_verb_continuous = list("attacks", "slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "rends")
attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "rend")
///turfs that you cannot draw carvings on
var/static/list/blacklisted_turfs = typecacheof(list(/turf/closed,/turf/open/space,/turf/open/lava))
///A check to see if you are in process of drawing a rune
var/drawing = FALSE
///A list of current runes
var/list/current_runes = list()
///Max amount of runes
var/max_rune_amt = 3
///Linked action
var/datum/action/innate/rune_shatter/linked_action
/obj/item/melee/rune_carver/examine(mob/user)
. = ..()
. += "This item can carve 'Alert carving' - nearly invisible rune that when stepped on gives you a prompt about where someone stood on it and who it was, doesn't get destroyed by being stepped on."
. += "This item can carve 'Grasping carving' - when stepped on it causes heavy damage to the legs and stuns for 5 seconds."
. += "This item can carve 'Mad carving' - when stepped on it causes dizzyness, jiterryness, temporary blindness, confusion , stuttering and slurring."
/obj/item/melee/rune_carver/Initialize()
. = ..()
linked_action = new(src)
/obj/item/melee/rune_carver/Destroy()
. = ..()
QDEL_NULL(linked_action)
/obj/item/melee/rune_carver/pickup(mob/user)
. = ..()
linked_action.Grant(user, src)
/obj/item/melee/rune_carver/dropped(mob/user, silent)
. = ..()
linked_action.Remove(user, src)
/obj/item/melee/rune_carver/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
. = ..()
if(isturf(target) && !is_type_in_typecache(target,blacklisted_turfs) && !drawing && proximity_flag)
carve_rune(target,user,proximity_flag,click_parameters)
///Action of carving runes, gives you the ability to click on floor and choose a rune of your need.
/obj/item/melee/rune_carver/proc/carve_rune(atom/target, mob/user, proximity_flag, click_parameters)
var/obj/structure/trap/eldritch/elder = locate() in range(1,target)
if(elder)
to_chat(user,"<span class='notice'>You can't draw runes that close to each other!</span>")
return
for(var/_rune_ref in current_runes)
var/datum/weakref/rune_ref = _rune_ref
if(!rune_ref.resolve())
current_runes -= rune_ref
if(current_runes.len >= max_rune_amt)
to_chat(user,"<span class='notice'>The blade cannot support more runes!</span>")
return
var/list/pick_list = list()
for(var/E in subtypesof(/obj/structure/trap/eldritch))
var/obj/structure/trap/eldritch/eldritch = E
pick_list[initial(eldritch.name)] = eldritch
drawing = TRUE
var/type = pick_list[input(user,"Choose the rune","Rune") as null|anything in pick_list ]
if(!type)
drawing = FALSE
return
to_chat(user,"<span class='notice'>You start drawing the rune...</span>")
if(!do_after(user,5 SECONDS,target = target))
drawing = FALSE
return
drawing = FALSE
var/obj/structure/trap/eldritch/eldritch = new type(target)
eldritch.set_owner(user)
current_runes += WEAKREF(eldritch)
/datum/action/innate/rune_shatter
name = "Rune break"
desc = "Destroys all runes that were drawn by this blade."
background_icon_state = "bg_ecult"
button_icon_state = "rune_break"
icon_icon = 'icons/mob/actions/actions_ecult.dmi'
check_flags = AB_CHECK_CONSCIOUS
///Reference to the rune knife it is inside of
var/obj/item/melee/rune_carver/sword
/datum/action/innate/rune_shatter/Grant(mob/user, obj/object)
sword = object
return ..()
/datum/action/innate/rune_shatter/Activate()
for(var/_rune_ref in sword.current_runes)
var/datum/weakref/rune_ref = _rune_ref
qdel(rune_ref.resolve())
sword.current_runes.Cut()
/obj/item/eldritch_potion
name = "Brew of Day and Night"
desc = "You should never see this"
icon = 'icons/obj/eldritch.dmi'
///Typepath to the status effect this is supposed to hold
var/status_effect
/obj/item/eldritch_potion/attack_self(mob/user)
. = ..()
to_chat(user,"<span class='notice'>You drink the potion and with the viscous liquid, the glass dematerializes.</span>")
effect(user)
qdel(src)
///The effect of the potion if it has any special one, in general try not to override this and utilize the status_effect var to make custom effects.
/obj/item/eldritch_potion/proc/effect(mob/user)
if(!iscarbon(user))
return
var/mob/living/carbon/carbie = user
carbie.apply_status_effect(status_effect)
/obj/item/eldritch_potion/crucible_soul
name = "Brew of Crucible Soul"
desc = "Allows you to phase through walls for 15 seconds, after the time runs out, you get teleported to your original location."
icon_state = "crucible_soul"
status_effect = /datum/status_effect/crucible_soul
/obj/item/eldritch_potion/duskndawn
name = "Brew of Dusk and Dawn"
desc = "Allows you to see clearly through walls and objects for 60 seconds."
icon_state = "clarity"
status_effect = /datum/status_effect/duskndawn
/obj/item/eldritch_potion/wounded
name = "Brew of Wounded Soldier"
desc = "For the next 60 seconds each wound will heal you, minor wounds heal 1 of it's damage type per second, moderate heal 3 and critical heal 6. You also become immune to damage slowdon."
icon_state = "marshal"
status_effect = /datum/status_effect/marshal