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
48 changes: 48 additions & 0 deletions modular_iris/code/datums/cinematics/_cinematic_iris.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
/datum/cinematic/chosm_summon

/datum/cinematic/chosm_summon/play_cinematic()
cleanup_time = 5 SECONDS
screen.icon = 'modular_iris/code/datums/cinematics/delay.dmi'
screen.icon_state = "delay"
play_cinematic_sound(sound('modular_iris/sound/daemons/cinematics/something_is_terribly_wrong.ogg'))
stoplag(3.0 SECONDS)
screen.icon = 'modular_iris/code/datums/cinematics/fading_stars.dmi'
play_cinematic_sound(sound('modular_iris/sound/daemons/cinematics/chosm_summon_rumble.ogg'))
screen.icon_state = "stars_fading"
stoplag(8.0 SECONDS)
play_cinematic_sound(sound('modular_iris/sound/daemons/cinematics/chosm_atmosphere.ogg'))
play_cinematic_sound(sound('modular_iris/sound/daemons/cinematics/chosm_rumbling.ogg'))
screen.icon = 'modular_iris/code/datums/cinematics/chosmic_tide.dmi'
screen.icon_state = "tide"
stoplag(2.0 SECONDS)
screen.icon = 'modular_iris/code/datums/cinematics/chosm_pause.dmi'
screen.icon_state = "pause"


/datum/cinematic/chosm_victory

/datum/cinematic/chosm_victory/play_cinematic()
cleanup_time = 6 SECONDS
screen.icon = 'modular_iris/code/datums/cinematics/chosm_win.dmi'
screen.icon_state = "win"
play_cinematic_sound(sound('modular_iris/sound/daemons/cinematics/chosmwin.ogg'))
play_cinematic_sound(sound('modular_iris/sound/daemons/cinematics/chosm_rumbling.ogg'))


/datum/cinematic/angel_arrive

/datum/cinematic/angel_arrive/play_cinematic()
cleanup_time = 3 SECONDS
screen.icon = 'modular_iris/code/datums/cinematics/angel_arrive.dmi'
screen.icon_state = "arrive"
play_cinematic_sound(sound('modular_iris/sound/daemons/cinematics/emissary_arrival.ogg'))


/datum/cinematic/angel_victory

/datum/cinematic/angel_victory/play_cinematic()
cleanup_time = 8 SECONDS
screen.icon = 'modular_iris/code/datums/cinematics/angel_victory.dmi'
screen.icon_state = "victory"
stoplag(1.0 SECONDS)
play_cinematic_sound(sound('modular_iris/sound/daemons/cinematics/angel_laser.ogg'))
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file added modular_iris/code/datums/cinematics/chosm_win.dmi
Binary file not shown.
Binary file not shown.
Binary file added modular_iris/code/datums/cinematics/delay.dmi
Binary file not shown.
Binary file not shown.
126 changes: 126 additions & 0 deletions modular_iris/code/game/objects/effects/membrane_structures.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
#define SPIDER_WEB_TINT "web_colour_tint"

/obj/structure/chosm
name = "membrane"
icon = 'modular_iris/icons/obj/smooth_structures/sinuous_tissue.dmi'
desc = "A sinuous dark-tyrian mass of interwoven tissue."
anchored = TRUE
density = FALSE
max_integrity = 5

/obj/structure/chosm/Initialize(mapload)
. = ..()
AddElement(/datum/element/atmos_sensitive, mapload)
ADD_TRAIT(src, TRAIT_INVERTED_DEMOLITION, INNATE_TRAIT)
//transform = transform.Scale(0.8, 0.8)

/obj/structure/chosm/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
if(damage_type == BURN)//the stickiness of the membrane mutes all attack sounds except fire damage type
playsound(loc, 'sound/items/tools/welder.ogg', 100, TRUE)

/obj/structure/chosm/run_atom_armor(damage_amount, damage_type, damage_flag = 0, attack_dir)
if(damage_flag == MELEE)
switch(damage_type)
if(BURN)
damage_amount *= 0.25
if(BRUTE)
damage_amount *= 1.25
return ..()

/obj/structure/chosm/should_atmos_process(datum/gas_mixture/air, exposed_temperature)
return exposed_temperature > 350 // Remove

/obj/structure/chosm/atmos_expose(datum/gas_mixture/air, exposed_temperature)
take_damage(5, BURN, 0, 0) // Remove

/obj/structure/chosm/membrane
layer = ABOVE_OPEN_TURF_LAYER
plane = FLOOR_PLANE
icon = 'modular_iris/icons/obj/smooth_structures/sinuous_tissue.dmi'
base_icon_state = "tissue"
icon_state = "tissue-0"
smoothing_flags = SMOOTH_BITMASK
smoothing_groups = null
canSmoothWith = SMOOTH_GROUP_WALLS
///Whether or not the web is from the genetics power
var/genetic = FALSE // Definitely Remove probably.
///Whether or not the web is a sealed web
var/sealed = FALSE // Remove
///Do we need to offset this based on a sprite frill?
var/has_frill = TRUE // What? Try to remove I guess?
/// Chance that someone will get stuck when trying to cross this tile
var/stuck_chance = 50
/// Chance that a bullet will hit this instead of flying through it
var/projectile_stuck_chance = 30

/obj/structure/chosm/membrane/Initialize(mapload)
// Offset on init so that they look nice in the map editor
//transform = transform.Scale(0.5, 0.5)
if (has_frill)
pixel_x = -9
pixel_y = -9
return ..()

/obj/structure/chosm/membrane/Destroy()
playsound(src.loc, 'modular_iris/sound/daemons/membrane_death.ogg', 50, TRUE)
return ..()


/obj/structure/chosm/membrane/attack_hand(mob/user, list/modifiers)
.= ..()
if(.)
return
if(!HAS_TRAIT(user, TRAIT_WEB_WEAVER))
return
loc.balloon_alert_to_viewers("spooling...")
if(!do_after(user, 2 SECONDS))
loc.balloon_alert(user, "interrupted!")
return
qdel(src)
var/obj/item/stack/sheet/cloth/woven_cloth = new /obj/item/stack/sheet/cloth
user.put_in_hands(woven_cloth)

/obj/structure/chosm/membrane/CanAllowThrough(atom/movable/mover, border_dir)
. = ..()
if(genetic) // Remove
return
if(sealed)
return FALSE
if(isliving(mover))
if(HAS_TRAIT(mover, TRAIT_WEB_SURFER))
return TRUE
if(mover.pulledby && HAS_TRAIT(mover.pulledby, TRAIT_WEB_SURFER))
return TRUE
if(prob(stuck_chance))
stuck_react(mover)
return FALSE
return .
if(isprojectile(mover))
return prob(projectile_stuck_chance)
return .

/// Show some feedback when you can't pass through something
/obj/structure/chosm/membrane/proc/stuck_react(atom/movable/stuck_guy)
loc.balloon_alert(stuck_guy, "stuck in membrane!")
stuck_guy.Shake(duration = 0.1 SECONDS)

//Actual Tissue that is spawned in-game
/obj/structure/chosm/membrane/sinuous_tissue
layer = ABOVE_OPEN_TURF_LAYER
plane = FLOOR_PLANE
icon = 'modular_iris/icons/obj/smooth_structures/sinuous_tissue.dmi' // Change later
base_icon_state = "tissue"
icon_state = "tissue-0"
smoothing_flags = SMOOTH_BITMASK
smoothing_groups = null
canSmoothWith = SMOOTH_GROUP_WALLS


/obj/structure/chosm/membrane/sinuous_tissue/Initialize(mapload)
// Offset on init so that they look nice in the map editor
if (has_frill)
pixel_x = -9
pixel_y = -9
return ..()


Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
/mob/living/basic/daemons/angel
name = "An Emissary"
desc = "Whatever this is, you cant stop looking at it -- No matter which angle or perspective you perceive it from, it is always facing towards you. A breadth of wings spreads outwards from a coalesced darkness. Light doth not shine where God shies its visage."
icon = 'modular_iris/icons/mob/simple/angel.dmi'
icon_state = "idle"
icon_living = "idle"
icon_dead = "idle"
speed = 0.
maxHealth = 1500
health = 1500
obj_damage = 100
pixel_x = -40
pixel_y = -20
melee_damage_lower = -100
melee_damage_upper = -100
max_grab = GRAB_AGGRESSIVE
faction = list(FACTION_NEUTRAL)
melee_attack_cooldown = CLICK_CD_MELEE
response_help_continuous = "pets"
response_help_simple = "pet"
speak_emote = list("sings")
initial_language_holder = /datum/language_holder/human_basic
damage_coeff = list(BRUTE = 0, BURN = 0, TOX = 0, STAMINA = 0, OXY = 0)
attack_verb_continuous = "strikes"
attack_verb_simple = "strike"
attack_sound = 'modular_iris/sound/daemons/angel_strike.ogg'
unsuitable_cold_damage = 0
unsuitable_heat_damage = 0
attack_vis_effect = ATTACK_EFFECT_VOID
unique_name = FALSE
max_stamina = 500
stamina_crit_threshold = BASIC_MOB_NO_STAMCRIT
stamina_recovery = 5
max_stamina_slowdown = 0
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@


// Fires a Shotgun-Esque Blast of the Angel Proj
/datum/action/cooldown/mob_cooldown/projectile_attack/angel_shotgun
name = "Deliver Upon Them Divine Absolution"
button_icon = 'icons/obj/weapons/guns/ballistic.dmi'
button_icon_state = "shotgun"
desc = "Fires Absolution in a shotgun pattern."
cooldown_time = 2 SECONDS
projectile_type = /obj/projectile/angel
projectile_sound = 'modular_iris/sound/daemons/angel_deep_strike.ogg'
var/list/shot_angles = list(12.5, 7.5, 2.5, -2.5, -7.5, -12.5)

/datum/action/cooldown/mob_cooldown/projectile_attack/angel_shotgun/attack_sequence(mob/living/firer, atom/target)
fire_shotgun(firer, target, shot_angles)

/datum/action/cooldown/mob_cooldown/projectile_attack/angel_shotgun/proc/fire_shotgun(mob/living/firer, atom/target, list/chosen_angles)
playsound(firer, projectile_sound, 200, TRUE, 2)
for(var/spread in chosen_angles)
shoot_projectile(firer, target, null, firer, spread, null)
owner.icon_state = "hostile" // This definitely needs a check to make sure you are the proper mob for this, otherwise it breaks everyone else.



/obj/projectile/angel
name = "absolution bolt"
icon = 'modular_iris/icons/mob/simple/angel_projectiles.dmi'
icon_state = "divine_bolt"
damage = 50
armour_penetration = 100
speed = 0.5
damage_type = BURN
pass_flags = PASSTABLE
plane = GAME_PLANE
immobilize = 1 SECONDS

/obj/projectile/angel/can_hit_target(atom/target, direct_target = FALSE, ignore_loc = FALSE, cross_failed = FALSE)
if(isliving(target) && target != firer)
direct_target = TRUE
return ..(target, direct_target, ignore_loc, cross_failed)

// Fires a Resurrection Bolt
/datum/action/cooldown/mob_cooldown/projectile_attack/angel_grace
name = "Divine Essence"
button_icon = 'icons/obj/weapons/guns/projectiles.dmi'
button_icon_state = "blastwave"
desc = "Deliver Divine Essence upon a target to heal them for full."
cooldown_time = 1.5 SECONDS
projectile_type = /obj/projectile/magic/resurrection
projectile_sound = 'modular_iris/sound/daemons/angel_revival.ogg'

/datum/action/cooldown/mob_cooldown/projectile_attack/angel_grace/Activate(atom/target_atom)
. = ..()
playsound(owner, projectile_sound, 200, TRUE, 2)
owner.visible_message(span_danger("[owner] delivers Divine Grace!"))
owner.face_atom(target_atom)
owner.icon_state = "idle"




// Fires repeatedly many Angel Bolts
/datum/action/cooldown/mob_cooldown/projectile_attack/blind_rage
name = "Divine Wrath"
button_icon = 'icons/obj/weapons/guns/energy.dmi'
button_icon_state = "kineticgun"
desc = "Fires projectiles repeatedly at a given target."
cooldown_time = 1.5 SECONDS
projectile_type = /obj/projectile/angel
projectile_sound = 'modular_iris/sound/daemons/angel_wrath.ogg'
default_projectile_spread = 45
/// Total shot count
var/shot_count = 10
/// Delay between shots
var/shot_delay = 0.1 SECONDS

/datum/action/cooldown/mob_cooldown/projectile_attack/blind_rage/Activate(atom/target_atom)
. = ..()
playsound(owner, projectile_sound, 200, TRUE, 2)
owner.icon_state = "hostile"

/datum/action/cooldown/mob_cooldown/projectile_attack/blind_rage/attack_sequence(mob/living/firer, atom/target)
for(var/i in 1 to shot_count)
shoot_projectile(firer, target, null, firer, rand(-default_projectile_spread, default_projectile_spread), null)
SLEEP_CHECK_DEATH(shot_delay, src)
playsound(owner, projectile_sound, 150, TRUE, 2)
Loading
Loading