diff --git a/aurorastation.dme b/aurorastation.dme index 01660573dc9..f59b315202f 100644 --- a/aurorastation.dme +++ b/aurorastation.dme @@ -1635,6 +1635,7 @@ #include "code\modules\heavy_vehicle\components\software.dm" #include "code\modules\heavy_vehicle\equipment\_equipment.dm" #include "code\modules\heavy_vehicle\equipment\combat.dm" +#include "code\modules\heavy_vehicle\equipment\cult.dm" #include "code\modules\heavy_vehicle\equipment\engineering.dm" #include "code\modules\heavy_vehicle\equipment\medical.dm" #include "code\modules\heavy_vehicle\equipment\mining.dm" @@ -1643,6 +1644,7 @@ #include "code\modules\heavy_vehicle\interface\screen_objects.dm" #include "code\modules\heavy_vehicle\premade\_premade.dm" #include "code\modules\heavy_vehicle\premade\combat.dm" +#include "code\modules\heavy_vehicle\premade\cult.dm" #include "code\modules\heavy_vehicle\premade\heavy.dm" #include "code\modules\heavy_vehicle\premade\hoverpod.dm" #include "code\modules\heavy_vehicle\premade\light.dm" @@ -2354,6 +2356,7 @@ #include "code\modules\projectiles\guns\bang\revolver.dm" #include "code\modules\projectiles\guns\energy\blaster.dm" #include "code\modules\projectiles\guns\energy\crank.dm" +#include "code\modules\projectiles\guns\energy\cult.dm" #include "code\modules\projectiles\guns\energy\laser.dm" #include "code\modules\projectiles\guns\energy\lawgiver.dm" #include "code\modules\projectiles\guns\energy\magic.dm" diff --git a/code/datums/outfits/outfit_antag.dm b/code/datums/outfits/outfit_antag.dm index ab363b8ed05..949659cb9d6 100644 --- a/code/datums/outfits/outfit_antag.dm +++ b/code/datums/outfits/outfit_antag.dm @@ -380,4 +380,33 @@ r_pocket = null l_hand = null - backpack_contents = null \ No newline at end of file + backpack_contents = null + +/datum/outfit/admin/syndicate/cultist + name = "Cultist" + allow_backbag_choice = FALSE + + head = /obj/item/clothing/head/culthood/alt + uniform = /obj/item/clothing/under/serviceoveralls + suit = /obj/item/clothing/suit/cultrobes/alt + back = /obj/item/storage/backpack/cultpack + belt = /obj/item/book/tome + gloves = null + shoes = /obj/item/clothing/shoes/cult + l_ear = null + id = null + r_pocket = null + backpack_contents = null + + r_hand = /obj/item/melee/cultblade + +/datum/outfit/admin/syndicate/cultist/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + return + +/datum/outfit/admin/syndicate/cultist/super + name = "Super Cultist" + + head = /obj/item/clothing/head/helmet/space/cult + suit = /obj/item/clothing/suit/space/cult + + suit_store = /obj/item/gun/energy/rifle/cult \ No newline at end of file diff --git a/code/game/gamemodes/cult/cultify/obj.dm b/code/game/gamemodes/cult/cultify/obj.dm index bf713b1607d..78609fb3b62 100644 --- a/code/game/gamemodes/cult/cultify/obj.dm +++ b/code/game/gamemodes/cult/cultify/obj.dm @@ -150,10 +150,4 @@ update_desc() update_connections(1) update_icon() - update_material() - -/obj/structure/table/holotable/cultify() - return - -/obj/structure/window/cult/cultify() - return \ No newline at end of file + update_material() \ No newline at end of file diff --git a/code/game/gamemodes/cult/items/armor.dm b/code/game/gamemodes/cult/items/armor.dm index 10bee734c19..38603e08b0e 100644 --- a/code/game/gamemodes/cult/items/armor.dm +++ b/code/game/gamemodes/cult/items/armor.dm @@ -31,7 +31,7 @@ item_state = "cult_armor" desc = "A bulky armored voidsuit, bristling with menacing spikes. It looks space proof." w_class = ITEMSIZE_NORMAL - allowed = list(/obj/item/book/tome, /obj/item/melee/cultblade, /obj/item/tank, /obj/item/device/suit_cooling_unit) + allowed = list(/obj/item/book/tome, /obj/item/melee/cultblade, /obj/item/gun/energy/rifle/cult, /obj/item/tank, /obj/item/device/suit_cooling_unit) slowdown = 1 armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 30, bio = 30, rad = 30) siemens_coefficient = 0 @@ -39,4 +39,4 @@ flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL|HIDESHOES /obj/item/clothing/suit/space/cult/cultify() - return + return \ No newline at end of file diff --git a/code/game/gamemodes/cult/items/clothes.dm b/code/game/gamemodes/cult/items/clothes.dm index 5dc335daacf..fd6ec2a5292 100644 --- a/code/game/gamemodes/cult/items/clothes.dm +++ b/code/game/gamemodes/cult/items/clothes.dm @@ -37,4 +37,23 @@ /obj/item/clothing/suit/cultrobes/alt icon_state = "cultrobesalt" - item_state = "cultrobesalt" \ No newline at end of file + item_state = "cultrobesalt" + +/obj/item/clothing/shoes/cult + name = "ragged boots" + desc = "A ragged, dusty pair of boots." + icon_state = "cult" + item_state = "cult" + force = 5 + silent = 1 + siemens_coefficient = 0.35 //antags don't get exceptions, it's just heavy armor by magical standards + armor = list(melee = 50, bullet = 30, laser = 50, energy = 20, bomb = 25, bio = 10, rad = 0) + + cold_protection = FEET + min_cold_protection_temperature = SHOE_MIN_COLD_PROTECTION_TEMPERATURE + heat_protection = FEET + max_heat_protection_temperature = SHOE_MAX_HEAT_PROTECTION_TEMPERATURE + species_restricted = null + +/obj/item/clothing/shoes/cult/cultify() + return \ No newline at end of file diff --git a/code/game/gamemodes/cult/items/sword.dm b/code/game/gamemodes/cult/items/sword.dm index 816d3b6b437..b6360fd2b33 100644 --- a/code/game/gamemodes/cult/items/sword.dm +++ b/code/game/gamemodes/cult/items/sword.dm @@ -7,7 +7,7 @@ item_state = "cultblade" contained_sprite = TRUE w_class = 4 - force = 30 + force = 25 throwforce = 10 slot_flags = SLOT_BELT edge = TRUE @@ -16,6 +16,7 @@ drop_sound = 'sound/items/drop/sword.ogg' pickup_sound = /decl/sound_category/sword_pickup_sound equip_sound = /decl/sound_category/sword_equip_sound + var/does_cult_check = TRUE attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") can_embed = FALSE //can't get stuck anymore, because blood magic @@ -24,7 +25,7 @@ return /obj/item/melee/cultblade/attack(mob/living/M, mob/living/user, var/target_zone) - if(iscultist(user)) + if(iscultist(user) || !does_cult_check) return ..() var/zone = (user.hand ? BP_L_ARM:BP_R_ARM) @@ -60,3 +61,8 @@ var/obj/item/material/sword/blade = new(get_turf(src)) blade.force = 15 qdel(src) + +/obj/item/melee/cultblade/mounted + name = "daemon doomblade" + force = 40 + does_cult_check = FALSE diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm index 2297bd4e43a..16a13b8c191 100644 --- a/code/game/objects/effects/decals/Cleanable/humans.dm +++ b/code/game/objects/effects/decals/Cleanable/humans.dm @@ -55,6 +55,11 @@ else if (dries) dry() +/obj/effect/decal/cleanable/attackby(obj/item/I, mob/user) + if(istype(I, /obj/item/gun/energy/rifle/cult)) + return + ..() + /obj/effect/decal/cleanable/blood/update_icon() if(basecolor == "rainbow") basecolor = get_random_colour(1) color = basecolor diff --git a/code/game/objects/effects/decals/remains.dm b/code/game/objects/effects/decals/remains.dm index 7667b9c7d35..51a19a4d544 100644 --- a/code/game/objects/effects/decals/remains.dm +++ b/code/game/objects/effects/decals/remains.dm @@ -27,6 +27,11 @@ desc = "They look like the remains of a small reptile." icon_state = "lizard" +/obj/effect/decal/remains/attackby(obj/item/I, mob/user) + if(istype(I, /obj/item/gun/energy/rifle/cult)) + return + ..() + //Target turns to ash. /obj/effect/decal/remains/proc/crumble() var/turf/simulated/floor/F = get_turf(src) diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index c98083da272..958bb30c54d 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -92,25 +92,6 @@ obj/item/clothing/shoes/sandal/clogs else playsound(src, /decl/sound_category/clown_sound, 50, 1) // Running is louder. -/obj/item/clothing/shoes/cult - name = "ragged boots" - desc = "A ragged, dusty pair of boots." - icon_state = "cult" - item_state = "cult" - force = 5 - silent = 1 - siemens_coefficient = 0.35 //antags don't get exceptions, it's just heavy armor by magical standards - armor = list(melee = 50, bullet = 30, laser = 50,energy = 20, bomb = 25, bio = 10, rad = 0) - - cold_protection = FEET - min_cold_protection_temperature = SHOE_MIN_COLD_PROTECTION_TEMPERATURE - heat_protection = FEET - max_heat_protection_temperature = SHOE_MAX_HEAT_PROTECTION_TEMPERATURE - species_restricted = null - -/obj/item/clothing/shoes/cult/cultify() - return - /obj/item/clothing/shoes/cyborg name = "cyborg boots" desc = "Shoes for a cyborg costume" diff --git a/code/modules/heavy_vehicle/_mech_setup.dm b/code/modules/heavy_vehicle/_mech_setup.dm index e1b533588d6..61794e87f9f 100644 --- a/code/modules/heavy_vehicle/_mech_setup.dm +++ b/code/modules/heavy_vehicle/_mech_setup.dm @@ -16,6 +16,7 @@ var/global/list/mecha_damage_overlay_cache = list() #define MECH_SOFTWARE_MEDICAL "medical support systems" // Sleeper. #define MECH_SOFTWARE_WEAPONS "ballistic weapon systems" // Ballistics. #define MECH_SOFTWARE_ADVWEAPONS "advanced weapon systems" // Railguns, ion rifle, missile launcher. +#define MECH_SOFTWARE_CULT "daemon systems" // Souljavelin, Doomblade #define MECH_SOFTWARE_ENGINEERING "advanced engineering systems" // RCD. // EMP damage points before various effects occur. diff --git a/code/modules/heavy_vehicle/equipment/cult.dm b/code/modules/heavy_vehicle/equipment/cult.dm new file mode 100644 index 00000000000..8ec00d777d2 --- /dev/null +++ b/code/modules/heavy_vehicle/equipment/cult.dm @@ -0,0 +1,27 @@ +/obj/item/mecha_equipment/mounted_system/soul_javelin + name = "mounted soul javelin" + desc = "A heavy duty daemon shardlauncher, not for the faint of heart." + icon_state = "mecha_souljavelin" + holding_type = /obj/item/gun/energy/rifle/cult/mounted + equipment_delay = -2 + restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND) + restricted_software = list(MECH_SOFTWARE_CULT) + +/obj/item/mecha_equipment/doomblade + name = "daemon doomblade" + desc = "A large blade menacing with demonic energy, try to not touch the red parts." + icon_state = "mecha_doomblade" + equipment_delay = 5 + restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND) + restricted_software = list(MECH_SOFTWARE_CULT) + origin_tech = list(TECH_MATERIAL = 2, TECH_ENGINEERING = 2) + var/obj/item/melee/cultblade/doomblade + +/obj/item/mecha_equipment/doomblade/Initialize() + . = ..() + doomblade = new /obj/item/melee/cultblade/mounted(src) + +/obj/item/mecha_equipment/doomblade/attack(mob/living/M, mob/living/user) + if(!owner) + return + doomblade.attack(M, user, user.zone_sel.selecting) \ No newline at end of file diff --git a/code/modules/heavy_vehicle/equipment/utility.dm b/code/modules/heavy_vehicle/equipment/utility.dm index ab0c9643646..42dd506b095 100644 --- a/code/modules/heavy_vehicle/equipment/utility.dm +++ b/code/modules/heavy_vehicle/equipment/utility.dm @@ -190,7 +190,6 @@ name = "floodlight" desc = "An exosuit-mounted light." icon_state = "mech_floodlight" - item_state = "mech_floodlight" restricted_hardpoints = list(HARDPOINT_HEAD) mech_layer = MECH_INTERMEDIATE_LAYER @@ -220,6 +219,7 @@ on = FALSE update_icon() . = ..() + #define CATAPULT_SINGLE 1 #define CATAPULT_AREA 2 diff --git a/code/modules/heavy_vehicle/premade/_premade.dm b/code/modules/heavy_vehicle/premade/_premade.dm index cb3069b4648..9dfddfc9e9f 100644 --- a/code/modules/heavy_vehicle/premade/_premade.dm +++ b/code/modules/heavy_vehicle/premade/_premade.dm @@ -37,16 +37,20 @@ /mob/living/heavy_vehicle/premade/proc/add_parts() if(!head && e_head) head = new e_head(src) - head.color = e_color + if(e_color) + head.color = e_color if(!body && e_body) body = new e_body(src) - body.color = e_color + if(e_color) + body.color = e_color if(!arms && e_arms) arms = new e_arms(src) - arms.color = e_color + if(e_color) + arms.color = e_color if(!legs && e_arms) legs = new e_legs(src) - legs.color = e_color + if(e_color) + legs.color = e_color /mob/living/heavy_vehicle/premade/proc/do_decals() if(arms) diff --git a/code/modules/heavy_vehicle/premade/cult.dm b/code/modules/heavy_vehicle/premade/cult.dm new file mode 100644 index 00000000000..cbd247d593c --- /dev/null +++ b/code/modules/heavy_vehicle/premade/cult.dm @@ -0,0 +1,76 @@ +// adminspawn only +/mob/living/heavy_vehicle/premade/cult + name = "Daemon Exosuit" + desc = "An unholy construction, a mecha ripped from the jaws of the underworld, here to wreak havoc on the living." + icon_state = "durand" + + e_head = /obj/item/mech_component/sensors/cult + e_body = /obj/item/mech_component/chassis/cult + e_arms = /obj/item/mech_component/manipulators/cult + e_legs = /obj/item/mech_component/propulsion/cult + e_color = null // Uses pre-coloured assets + + h_head = /obj/item/mecha_equipment/light/cult + h_back = /obj/item/mecha_equipment/quick_enter + h_r_hand = /obj/item/mecha_equipment/doomblade + +/mob/living/heavy_vehicle/premade/cult/super + h_l_hand = /obj/item/mecha_equipment/mounted_system/soul_javelin + +/obj/item/mech_component/manipulators/cult + name = "daemon arms" + desc = "Forged by the Great Unknown, these arms wield dark weapons gifted by Nar'Sie." + exosuit_desc_string = "bloodpact reinforced manipulators" + icon_state = "cult_arms" + melee_damage = 50 + action_delay = 5 + max_damage = 90 + power_use = 7500 + punch_sound = 'sound/mecha/mech_punch_slow.ogg' + +/obj/item/mech_component/propulsion/cult + name = "daemon legs" + desc = "Moving with purpose, these legs can take a follower of Nar'Sie where judgement must be executed." + exosuit_desc_string = "bloodbound hydraulic legs" + icon_state = "cult_legs" + move_delay = 5 + max_damage = 90 + power_use = 5000 + trample_damage = 45 + +/obj/item/mech_component/sensors/cult + name = "daemon sensors" + desc = "A hard shell to protect those that follow the Great One, these sensors assist in the slaughter." + exosuit_desc_string = "oozing sensor array" + icon_state = "cult_head" + max_damage = 120 + power_use = 0 + +/obj/item/mech_component/sensors/cult/prebuild() + ..() + software = new(src) + software.installed_software = list(MECH_SOFTWARE_WEAPONS, MECH_SOFTWARE_CULT) + +/obj/item/mech_component/chassis/cult + name = "daemon exosuit chassis" + desc = "Despite its looks, this protective chassis provides supreme comfort to its pilot during their conquest." + hatch_descriptor = "bloodied ribcage" + pilot_coverage = 100 + exosuit_desc_string = "a bloodied chassis" + icon_state = "cult_body" + max_damage = 150 + mech_health = 500 + power_use = 5000 + +/obj/item/mech_component/chassis/cult/prebuild() + . = ..() + mech_armor = new /obj/item/robot_parts/robot_component/armor/mech/combat(src) + +/obj/item/mecha_equipment/light/cult + name = "daemon floatlights" + desc = "Levitating floatlamps held aloft by daemon energy. Casts a crimson light." + icon_state = "mecha_bulb" + mech_layer = MECH_GEAR_LAYER + restricted_software = list(MECH_SOFTWARE_CULT) + + light_color = LIGHT_COLOR_EMERGENCY diff --git a/code/modules/projectiles/guns/energy/cult.dm b/code/modules/projectiles/guns/energy/cult.dm new file mode 100644 index 00000000000..4657dc53678 --- /dev/null +++ b/code/modules/projectiles/guns/energy/cult.dm @@ -0,0 +1,78 @@ +/obj/item/gun/energy/rifle/cult + name = "bloodpike" + desc = "A ranged weapon of demonic origin, surely. It menaces with crimson spikes." + desc_info = null + desc_fluff = null + desc_antag = "This weapon can be recharged by clicking on blood or remains with it, remains recharge more than simple blood." + icon = 'icons/obj/guns/bloodpike.dmi' + icon_state = "bloodpike" + item_state = "bloodpike" + fire_sound = 'sound/weapons/laserstrong.ogg' + slot_flags = SLOT_BACK + w_class = ITEMSIZE_LARGE + force = 10 + max_shots = 5 + fire_delay = 25 + accuracy = -1 + can_turret = FALSE + can_switch_modes = FALSE + charge_failure_message = " cannot be rearmed by normal means." + + has_icon_ratio = TRUE + has_item_ratio = FALSE + light_color = COLOR_RED // muzzle flash + + fire_delay_wielded = 1 + accuracy_wielded = 2 + + projectile_type = /obj/item/projectile/bullet/shard + secondary_projectile_type = null + secondary_fire_sound = null + firemodes = list() + modifystate = null + + var/does_process = TRUE + + matter = null + origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 2, TECH_MAGNET = 3, TECH_ARCANE = 2, TECH_ILLEGAL = 3) + + is_wieldable = TRUE // see if i can get a sprite for this + +/obj/item/gun/energy/rifle/cult/Initialize() + . = ..() + if(does_process) + START_PROCESSING(SSprocessing, src) + +/obj/item/gun/energy/rifle/cult/Destroy() + STOP_PROCESSING(SSprocessing, src) + return ..() + +/obj/item/gun/energy/rifle/cult/afterattack(atom/A, mob/living/user, adjacent, params) + if(adjacent && iscultist(user)) + if(istype(A, /obj/effect/decal/remains) || istype(A, /obj/effect/decal/cleanable/blood)) + do_absorb(user, A) + return + ..() + +/obj/item/gun/energy/rifle/cult/proc/do_absorb(var/mob/user, var/atom/A) + var/did_absorb + if(istype(A, /obj/effect/decal/remains)) + power_supply.give(power_supply.maxcharge / 2) // remains are hard to get, so they give a full half-recharge + did_absorb = TRUE + else if(istype(A, /obj/effect/decal/cleanable/blood)) + power_supply.give(charge_cost) + did_absorb = TRUE + + if(did_absorb) + user.visible_message("[user] runs \the [src] over \the [A], which it absorbs!", SPAN_CULT("\The [src] absorbs \the [A], powering it up!")) + playsound(get_turf(src), 'sound/effects/blobattack.ogg', 30, TRUE) + qdel(A) + update_icon() + +/obj/item/gun/energy/rifle/cult/mounted + max_shots = 15 + use_external_power = TRUE + self_recharge = TRUE + has_safety = FALSE + does_process = FALSE + projectile_type = /obj/item/projectile/bullet/shard/heavy diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 81950ab28a1..080d7818dc7 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -390,3 +390,12 @@ new /obj/effect/temp_visual/nuke(A.loc) explosion(A,2,5,9) ..() + +/obj/item/projectile/bullet/shard + name = "shard" + icon_state = "shard" + damage = 15 + muzzle_type = /obj/effect/projectile/muzzle/bolt + +/obj/item/projectile/bullet/shard/heavy + damage = 30 \ No newline at end of file diff --git a/html/changelogs/geeves-cult_additions.yml b/html/changelogs/geeves-cult_additions.yml new file mode 100644 index 00000000000..8087d4a0f91 --- /dev/null +++ b/html/changelogs/geeves-cult_additions.yml @@ -0,0 +1,7 @@ +author: Code by Geeves, Sprites by Kyres + +delete-after: True + +changes: + - tweak: "Reduced the damage cult swords do, 25 down from 30." + - backend: "Added some adminspawn cult things." \ No newline at end of file diff --git a/icons/mecha/mech_equipment.dmi b/icons/mecha/mech_equipment.dmi index fd34780d0cf..f5ac6106ad0 100644 Binary files a/icons/mecha/mech_equipment.dmi and b/icons/mecha/mech_equipment.dmi differ diff --git a/icons/mecha/mech_parts.dmi b/icons/mecha/mech_parts.dmi index f6d6d0f2d4b..b129456e122 100644 Binary files a/icons/mecha/mech_parts.dmi and b/icons/mecha/mech_parts.dmi differ diff --git a/icons/mecha/mecha_weapon_overlays.dmi b/icons/mecha/mecha_weapon_overlays.dmi index 153707afa62..8733e025000 100644 Binary files a/icons/mecha/mecha_weapon_overlays.dmi and b/icons/mecha/mecha_weapon_overlays.dmi differ diff --git a/icons/obj/guns/bloodpike.dmi b/icons/obj/guns/bloodpike.dmi new file mode 100644 index 00000000000..c9119684713 Binary files /dev/null and b/icons/obj/guns/bloodpike.dmi differ diff --git a/icons/obj/projectiles.dmi b/icons/obj/projectiles.dmi index aeb1a85b8c1..367bacafc05 100644 Binary files a/icons/obj/projectiles.dmi and b/icons/obj/projectiles.dmi differ