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鈥檒l occasionally send you account related emails.

Already on GitHub? Sign in to your account

OT CAS rocket #5957

Closed
wants to merge 36 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
1fdc92e
Update dropship_ammo.dm
iloveloopers Mar 16, 2024
c01a09b
Delete icons/obj/structures/props/almayer_props64.dmi
iloveloopers Mar 16, 2024
d5ee29e
Add files via upload
iloveloopers Mar 16, 2024
ec04eb5
Merge branch 'cmss13-devs:master' into OT-CAS
iloveloopers Mar 16, 2024
c1e3c93
Merge branch 'cmss13-devs:master' into OT-CAS
iloveloopers Mar 16, 2024
0344a13
Update dropship_equipment.dm
iloveloopers Mar 16, 2024
e0f8c02
Merge branch 'cmss13-devs:master' into OT-CAS
iloveloopers Mar 28, 2024
310a12a
Update dropship_ammo.dm
iloveloopers Mar 28, 2024
9cdad87
Merge branch 'cmss13-devs:master' into OT-CAS
iloveloopers Apr 7, 2024
c499b37
Update dropship_equipment.dm
iloveloopers Apr 7, 2024
83d14d7
Update dropship_ammo.dm
iloveloopers Apr 7, 2024
9d53ae3
Update dropship_ammo.dm
iloveloopers Apr 7, 2024
d9da5fe
Merge branch 'master' into OT-CAS
iloveloopers Apr 8, 2024
a259eec
Merge branch 'master' into OT-CAS
iloveloopers Apr 15, 2024
d9153c8
Merge branch 'cmss13-devs:master' into OT-CAS
iloveloopers Apr 15, 2024
10ce2ee
Update dropship_ammo.dm
iloveloopers Apr 15, 2024
ce1f761
Update dropship_ammo.dm
iloveloopers Apr 15, 2024
2d0f595
Merge branch 'cmss13-devs:master' into OT-CAS
iloveloopers Apr 16, 2024
fb68496
Update dropship_ammo.dm
iloveloopers Apr 16, 2024
2484c7b
Merge branch 'master' into OT-CAS
iloveloopers May 1, 2024
36dafcf
Merge branch 'cmss13-devs:master' into OT-CAS
iloveloopers May 8, 2024
2a06ff7
Update dropship_ammo.dm
iloveloopers May 8, 2024
2ac32b8
Update scanners.dm
iloveloopers May 8, 2024
a82de68
Update dropship_ammo.dm
iloveloopers May 8, 2024
b3f2aa6
Update dropship_ammo.dm
iloveloopers May 9, 2024
3b59d1a
Update code/game/objects/items/devices/scanners.dm
iloveloopers May 9, 2024
af17507
Update dropship_ammo.dm
iloveloopers May 9, 2024
d359b46
Update scanners.dm
iloveloopers May 9, 2024
727083c
Update dropship_ammo.dm
iloveloopers May 9, 2024
d9710ad
Update dropship_ammo.dm
iloveloopers May 9, 2024
b23035d
Update dropship_equipment.dm
iloveloopers May 15, 2024
905da91
Merge branch 'master' into OT-CAS
iloveloopers May 15, 2024
2d4c2f9
Merge branch 'cmss13-devs:master' into OT-CAS
iloveloopers May 15, 2024
7b140b0
Update dropship_equipment.dm
iloveloopers May 15, 2024
f7a784e
Merge branch 'cmss13-devs:master' into OT-CAS
iloveloopers May 16, 2024
624c3a8
Update dropship_ammo.dm
iloveloopers May 16, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
18 changes: 16 additions & 2 deletions code/game/objects/items/devices/scanners.dm
Original file line number Diff line number Diff line change
Expand Up @@ -348,22 +348,36 @@ FORENSIC SCANNER
holder = E.reagents
for(var/obj/container in E.containers)
scan(container)
else if(istype(O,/obj/item/ammo_magazine/rocket/custom))
else if(istype(O, /obj/item/ammo_magazine/rocket/custom))
var/obj/item/ammo_magazine/rocket/custom/E = O
if(!E.warhead)
to_chat(user, SPAN_NOTICE("No warhead detected in [E]."))
return
holder = E.warhead.reagents
for(var/obj/container in E.warhead.containers)
scan(container)
else if(istype(O,/obj/item/mortar_shell/custom))
else if(istype(O, /obj/item/mortar_shell/custom))
var/obj/item/mortar_shell/custom/E = O
if(!E.warhead)
to_chat(user, SPAN_NOTICE("No warhead detected in [E]."))
return
holder = E.warhead.reagents
for(var/obj/container in E.warhead.containers)
scan(container)
else if(istype(O, /obj/structure/ship_ammo/rocket/custom_missile))
var/obj/structure/ship_ammo/rocket/custom_missile/missile = O
if (length(missile.containers) < 1)
to_chat(user, SPAN_NOTICE("No containers detected in [missile]."))
return

var/obj/item/explosive/temp = new() //this is kinda janky
temp.create_reagents(1000)
for(var/limit in temp.reaction_limits)
temp.reagents.vars[limit] = missile.reaction_limits[limit]
holder = temp.reagents

for(var/obj/container in missile.containers)
scan(container)
else
scan(O)
if(O.reagents)
Expand Down
90 changes: 90 additions & 0 deletions code/modules/cm_marines/dropship_ammo.dm
Original file line number Diff line number Diff line change
Expand Up @@ -292,6 +292,96 @@
addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(cell_explosion), impact, 300, 40, EXPLOSION_FALLOFF_SHAPE_LINEAR, null, create_cause_data(initial(name)), source_mob), 0.5 SECONDS) //Your standard HE splash damage rocket. Good damage, good range, good speed, it's an all rounder
QDEL_IN(src, 0.5 SECONDS)

/obj/structure/ship_ammo/rocket/custom_missile
name = "\improper AIM-224B-C 'Widowmaker Custom'"
desc = "A modified version of the AIM-224B missile, allows for custom reagent mix to be inserted in the receptacle"
icon_state = "custom_missile"
ammo_name = "rocket"
travelling_time = 40
point_cost = 350
fire_mission_delay = 0 //direct bombard only
/// the limits of the custom missile
var/list/reaction_limits = list( "max_ex_power" = 300, "base_ex_falloff" = 60, "max_ex_shards" = 128,
"max_fire_rad" = 8, "max_fire_int" = 60, "max_fire_dur" = 48,
"min_fire_rad" = 3, "min_fire_int" = 5, "min_fire_dur" = 5
)
/// current assembly state of the missile
var/assembly_stage = ASSEMBLY_UNLOCKED
/// the maximum volume allowed in the rocket
var/max_container_volume = 300
/// the current total volume
var/current_container_volume = 0
/// the containers inside the rocket
var/list/obj/item/reagent_container/glass/containers = list()
var/list/allowed_containers = list(/obj/item/reagent_container/glass/beaker, /obj/item/reagent_container/glass/bucket, /obj/item/reagent_container/glass/bottle, /obj/item/reagent_container/glass/bucket/mopbucket)

/obj/structure/ship_ammo/rocket/custom_missile/attackby(obj/item/item as obj, mob/user as mob)
if(HAS_TRAIT(item, TRAIT_TOOL_SCREWDRIVER))
if(assembly_stage == ASSEMBLY_UNLOCKED)
to_chat(user, SPAN_NOTICE("You lock the [name]."))
playsound(loc, 'sound/items/Screwdriver.ogg', 25, 0, 6)
assembly_stage = ASSEMBLY_LOCKED
icon_state = "custom_missile_ready"
else if(assembly_stage == ASSEMBLY_LOCKED)
iloveloopers marked this conversation as resolved.
Show resolved Hide resolved
to_chat(user, SPAN_NOTICE("You unlock the [name]."))
playsound(loc, 'sound/items/Screwdriver.ogg', 25, 0, 6)
assembly_stage = ASSEMBLY_UNLOCKED
icon_state = "custom_missile"
else if(is_type_in_list(item, allowed_containers) && (!assembly_stage || assembly_stage == ASSEMBLY_UNLOCKED))
if(current_container_volume >= max_container_volume)
to_chat(user, SPAN_DANGER("The [name] can not hold more containers."))
else
iloveloopers marked this conversation as resolved.
Show resolved Hide resolved
if(item.reagents.total_volume)
if(item.reagents.maximum_volume + current_container_volume > max_container_volume)
to_chat(user, SPAN_DANGER("\the [item] is too large for [name]."))
return
if(user.temp_drop_inv_item(item))
to_chat(user, SPAN_NOTICE("You add \the [item] to the [name]."))
item.forceMove(src)
containers += item
current_container_volume += item.reagents.maximum_volume
assembly_stage = ASSEMBLY_UNLOCKED
else
to_chat(user, SPAN_DANGER("\the [item] is empty."))
else if(HAS_TRAIT(item, TRAIT_TOOL_CROWBAR))
if(assembly_stage == ASSEMBLY_UNLOCKED)
if(!length(containers))
to_chat(user, SPAN_DANGER("\the [name] has no containers."))
return
for(var/obj/container in containers)
containers -= container
user.put_in_hands(container)
current_container_volume = 0
else return ..()

/obj/structure/ship_ammo/rocket/custom_missile/get_examine_text(mob/user)
. = ..()
. += SPAN_NOTICE("Contains [containers.len] container\s.")
switch(assembly_stage)
if(ASSEMBLY_LOCKED)
. += SPAN_NOTICE("It is ready.")
if(ASSEMBLY_UNLOCKED)
. += SPAN_NOTICE("It is unlocked.")

/obj/structure/ship_ammo/rocket/custom_missile/detonate_on(turf/impact, obj/structure/dropship_equipment/weapon/fired_from)
if(assembly_stage == ASSEMBLY_UNLOCKED || containers.len == 0) //shitty explosion if left unlocked or no containers
impact.ceiling_debris_check(3)
addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(cell_explosion), impact, 60, 30, EXPLOSION_FALLOFF_SHAPE_LINEAR, null, create_cause_data(initial(name)), source_mob), 0.5 SECONDS)
else if(assembly_stage == ASSEMBLY_LOCKED)
impact.ceiling_debris_check(3)
var/obj/item/explosive/bomb = new()
bomb.create_reagents(1000)
for(var/limit in bomb.reaction_limits)
bomb.reagents.vars[limit] = reaction_limits[limit]
for(var/obj/container in containers)
container.forceMove(bomb)
bomb.containers += container
bomb.forceMove(impact)
bomb.allow_star_shape = FALSE
bomb.cause_data = create_cause_data(initial(name), source_mob)
bomb.prime(TRUE)
QDEL_IN(src, 0.5 SECONDS)

/obj/structure/ship_ammo/rocket/banshee
name = "\improper AGM-227 'Banshee'"
desc = "The AGM-227 missile is a mainstay of the overhauled dropship fleet against any mobile or armored ground targets. It's earned the nickname of 'Banshee' from the sudden wail that it emits right before hitting a target. Useful to clear out large areas. Can be loaded into the LAU-444 Guided Missile Launcher."
Expand Down
14 changes: 11 additions & 3 deletions code/modules/cm_marines/dropship_equipment.dm
Original file line number Diff line number Diff line change
Expand Up @@ -684,18 +684,26 @@
break

msg_admin_niche("[key_name(user)] is direct-firing [SA] onto [selected_target] at ([target_turf.x],[target_turf.y],[target_turf.z]) [ADMIN_JMP(target_turf)]")
if(ammo_travelling_time)

if(ammo_travelling_time && !istype(SA, /obj/structure/ship_ammo/rocket/custom_missile))
var/total_seconds = max(floor(ammo_travelling_time/10),1)
for(var/i = 0 to total_seconds)
for(var/i in 0 to total_seconds)
sleep(10)
if(!selected_target || !selected_target.loc)//if laser disappeared before we reached the target,
ammo_accuracy_range++ //accuracy decreases

// clamp back to maximum inaccuracy
ammo_accuracy_range = min(ammo_accuracy_range, ammo_max_inaccuracy)

var/list/possible_turfs = RANGE_TURFS(ammo_accuracy_range, target_turf)
var/turf/impact = pick(possible_turfs)

if(ammo_travelling_time && istype(SA, /obj/structure/ship_ammo/rocket/custom_missile))
playsound(impact, ammo_warn_sound, ammo_warn_sound_volume, 1,15)
var/total_seconds = max(floor(ammo_travelling_time/10),1)
for(var/i in 0 to total_seconds)
sleep(10)
new /obj/effect/overlay/temp/blinking_laser (impact) //no decreased accuracy if laser dissapears, it will land where it is telegraphed to land

if(ammo_warn_sound)
playsound(impact, ammo_warn_sound, ammo_warn_sound_volume, 1,15)
new /obj/effect/overlay/temp/blinking_laser (impact)
Expand Down
Binary file modified icons/obj/structures/props/almayer_props64.dmi
Binary file not shown.