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’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

dropship module given more HP accid only damages not deletes and can be repaired now #6337

Closed
Closed
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
107 changes: 64 additions & 43 deletions code/modules/cm_marines/dropship_equipment.dm
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
var/point_cost = 0 //how many points it costs to build this with the fabricator, set to 0 if unbuildable.
var/skill_required = SKILL_PILOT_TRAINED
var/combat_equipment = TRUE
health = 400


/obj/structure/dropship_equipment/Destroy()
Expand Down Expand Up @@ -47,68 +48,88 @@
update_health(rand(current_xenomorph.melee_damage_lower, current_xenomorph.melee_damage_upper))
return XENO_ATTACK_ACTION

/obj/structure/dropship_equipment/attackby(obj/item/I, mob/user)
if(istype(I, /obj/item/powerloader_clamp))
var/obj/item/powerloader_clamp/PC = I
if(PC.loaded)
/obj/structure/dropship_equipment/attackby(obj/item/item, mob/user)
if(istype(item, /obj/item/powerloader_clamp))
var/obj/item/powerloader_clamp/powerloader_clamp = item
if(powerloader_clamp.loaded)
if(ammo_equipped)
to_chat(user, SPAN_WARNING("You need to unload \the [ammo_equipped] from \the [src] first!"))
return TRUE
if(uses_ammo)
load_ammo(PC, user) //it handles on it's own whether the ammo fits
load_ammo(powerloader_clamp, user) //it handles on it's own whether the ammo fits
return

else
if(uses_ammo && ammo_equipped)
unload_ammo(PC, user)
unload_ammo(powerloader_clamp, user)
else
grab_equipment(PC, user)
grab_equipment(powerloader_clamp, user)
return TRUE

/obj/structure/dropship_equipment/proc/load_ammo(obj/item/powerloader_clamp/PC, mob/living/user)
if(!ship_base || !uses_ammo || ammo_equipped || !istype(PC.loaded, /obj/structure/ship_ammo))
if(iswelder(item))
if(health == initial(health))
to_chat(user, SPAN_WARNING("[src] is in working condition."))
return
if(!HAS_TRAIT(item, TRAIT_TOOL_BLOWTORCH))
to_chat(user, SPAN_WARNING("You need a stronger blowtorch!"))
return
if(user.action_busy)
return
if(!skillcheck(user, SKILL_CONSTRUCTION, SKILL_CONSTRUCTION_TRAINED))
to_chat(user, SPAN_WARNING("You are not trained to fix [src]..."))
return
playsound(src.loc, 'sound/items/Welder.ogg', 25, 1)
if(!do_after(user, 10, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD, src)) return
repair(50);
user.visible_message(SPAN_NOTICE("[user] repairs parts of [src]."),
SPAN_NOTICE("You repair damaged parts of [src]."))

/obj/structure/dropship_equipment/proc/repair(amount)
health = min(initial(health), health+amount)

/obj/structure/dropship_equipment/proc/load_ammo(obj/item/powerloader_clamp/powerloader_clamp, mob/living/user)
if(!ship_base || !uses_ammo || ammo_equipped || !istype(powerloader_clamp.loaded, /obj/structure/ship_ammo))
return
var/obj/structure/ship_ammo/SA = PC.loaded
if(SA.equipment_type != type)
to_chat(user, SPAN_WARNING("[SA] doesn't fit in [src]."))
var/obj/structure/ship_ammo/ship_ammo = powerloader_clamp.loaded
if(ship_ammo.equipment_type != type)
to_chat(user, SPAN_WARNING("[ship_ammo] doesn't fit in [src]."))
return
playsound(src, 'sound/machines/hydraulics_1.ogg', 40, 1)
var/point_loc = ship_base.loc
if(!do_after(user, 30 * user.get_skill_duration_multiplier(SKILL_ENGINEER), INTERRUPT_NO_NEEDHAND|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD))
return
if(!ship_base || ship_base.loc != point_loc)
return
if(!ammo_equipped && PC.loaded == SA && PC.linked_powerloader && PC.linked_powerloader.buckled_mob == user)
SA.forceMove(src)
PC.loaded = null
if(!ammo_equipped && powerloader_clamp.loaded == ship_ammo && powerloader_clamp.linked_powerloader && powerloader_clamp.linked_powerloader.buckled_mob == user)
ship_ammo.forceMove(src)
powerloader_clamp.loaded = null
playsound(src, 'sound/machines/hydraulics_2.ogg', 40, 1)
PC.update_icon()
to_chat(user, SPAN_NOTICE("You load [SA] into [src]."))
ammo_equipped = SA
powerloader_clamp.update_icon()
to_chat(user, SPAN_NOTICE("You load [ship_ammo] into [src]."))
ammo_equipped = ship_ammo
update_equipment()

/obj/structure/dropship_equipment/proc/unload_ammo(obj/item/powerloader_clamp/PC, mob/living/user)
/obj/structure/dropship_equipment/proc/unload_ammo(obj/item/powerloader_clamp/powerloader_clamp, mob/living/user)
playsound(src, 'sound/machines/hydraulics_2.ogg', 40, 1)
var/point_loc = ship_base ? ship_base.loc : null
if(!do_after(user, 30 * user.get_skill_duration_multiplier(SKILL_ENGINEER), INTERRUPT_NO_NEEDHAND|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD))
return
if(point_loc && ship_base.loc != point_loc) //dropship flew away
return
if(!ammo_equipped || !PC.linked_powerloader || PC.linked_powerloader.buckled_mob != user)
if(!ammo_equipped || !powerloader_clamp.linked_powerloader || powerloader_clamp.linked_powerloader.buckled_mob != user)
return
if(!ammo_equipped.ammo_count)
ammo_equipped.moveToNullspace()
to_chat(user, SPAN_NOTICE("You discard the empty [ammo_equipped.name] in \the [src]."))
qdel(ammo_equipped)
else
if(ammo_equipped.ammo_name == "rocket")
PC.grab_object(user, ammo_equipped, "ds_rocket")
powerloader_clamp.grab_object(user, ammo_equipped, "ds_rocket")
else
PC.grab_object(user, ammo_equipped, "ds_ammo")
powerloader_clamp.grab_object(user, ammo_equipped, "ds_ammo")
ammo_equipped = null
update_icon()

/obj/structure/dropship_equipment/proc/grab_equipment(obj/item/powerloader_clamp/PC, mob/living/user)
/obj/structure/dropship_equipment/proc/grab_equipment(obj/item/powerloader_clamp/powerloader_clamp, mob/living/user)
playsound(loc, 'sound/machines/hydraulics_2.ogg', 40, 1)
var/duration_time = 10
var/point_loc
Expand All @@ -119,9 +140,9 @@
return
if(point_loc && ship_base && ship_base.loc != point_loc) //dropship flew away
return
if(!PC.linked_powerloader || PC.loaded || PC.linked_powerloader.buckled_mob != user)
if(!powerloader_clamp.linked_powerloader || powerloader_clamp.loaded || powerloader_clamp.linked_powerloader.buckled_mob != user)
return
PC.grab_object(user, src, "ds_gear", 'sound/machines/hydraulics_1.ogg')
powerloader_clamp.grab_object(user, src, "ds_gear", 'sound/machines/hydraulics_1.ogg')
if(ship_base)
ship_base.installed_equipment = null
ship_base = null
Expand Down Expand Up @@ -668,12 +689,12 @@
var/turf/target_turf = get_turf(selected_target)
if(firing_sound)
playsound(loc, firing_sound, 70, 1)
var/obj/structure/ship_ammo/SA = ammo_equipped //necessary because we nullify ammo_equipped when firing big rockets
var/ammo_max_inaccuracy = SA.max_inaccuracy
var/ammo_accuracy_range = SA.accuracy_range
var/ammo_travelling_time = SA.travelling_time //how long the rockets/bullets take to reach the ground target.
var/ammo_warn_sound = SA.warning_sound
var/ammo_warn_sound_volume = SA.warning_sound_volume
var/obj/structure/ship_ammo/ship_ammo = ammo_equipped //necessary because we nullify ammo_equipped when firing big rockets
var/ammo_max_inaccuracy = ship_ammo.max_inaccuracy
var/ammo_accuracy_range = ship_ammo.accuracy_range
var/ammo_travelling_time = ship_ammo.travelling_time //how long the rockets/bullets take to reach the ground target.
var/ammo_warn_sound = ship_ammo.warning_sound
var/ammo_warn_sound_volume = ship_ammo.warning_sound_volume
deplete_ammo()
last_fired = world.time
if(linked_shuttle)
Expand All @@ -683,7 +704,7 @@
ammo_travelling_time = max(ammo_travelling_time - 20, 10)
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)]")
msg_admin_niche("[key_name(user)] is direct-firing [ship_ammo] onto [selected_target] at ([target_turf.x],[target_turf.y],[target_turf.z]) [ADMIN_JMP(target_turf)]")
if(ammo_travelling_time)
var/total_seconds = max(floor(ammo_travelling_time/10),1)
for(var/i = 0 to total_seconds)
Expand All @@ -700,17 +721,17 @@
playsound(impact, ammo_warn_sound, ammo_warn_sound_volume, 1,15)
new /obj/effect/overlay/temp/blinking_laser (impact)
sleep(10)
SA.source_mob = user
SA.detonate_on(impact, src)
ship_ammo.source_mob = user
ship_ammo.detonate_on(impact, src)

/obj/structure/dropship_equipment/weapon/proc/open_fire_firemission(obj/selected_target, mob/user = usr)
set waitfor = 0
var/turf/target_turf = get_turf(selected_target)
if(firing_sound)
playsound(loc, firing_sound, 70, 1)
playsound(target_turf, firing_sound, 70, 1)
var/obj/structure/ship_ammo/SA = ammo_equipped //necessary because we nullify ammo_equipped when firing big rockets
var/ammo_accuracy_range = SA.accuracy_range
var/obj/structure/ship_ammo/ship_ammo = ammo_equipped //necessary because we nullify ammo_equipped when firing big rockets
var/ammo_accuracy_range = ship_ammo.accuracy_range
// no warning sound and no travel time
deplete_ammo()
last_fired = world.time
Expand All @@ -726,8 +747,8 @@
possible_turfs += TU
var/turf/impact = pick(possible_turfs)
sleep(3)
SA.source_mob = user
SA.detonate_on(impact, src)
ship_ammo.source_mob = user
ship_ammo.detonate_on(impact, src)

/obj/structure/dropship_equipment/weapon/heavygun
name = "\improper GAU-21 30mm cannon"
Expand Down Expand Up @@ -1319,8 +1340,8 @@
/obj/structure/dropship_equipment/weapon/proc/open_simulated_fire_firemission(obj/selected_target, mob/user = usr)
set waitfor = FALSE
var/turf/target_turf = get_turf(selected_target)
var/obj/structure/ship_ammo/SA = ammo_equipped //necessary because we nullify ammo_equipped when firing big rockets
var/ammo_accuracy_range = SA.accuracy_range
var/obj/structure/ship_ammo/ship_ammo = ammo_equipped //necessary because we nullify ammo_equipped when firing big rockets
var/ammo_accuracy_range = ship_ammo.accuracy_range
// no warning sound and no travel time
last_fired = world.time

Expand All @@ -1333,5 +1354,5 @@
possible_turfs += TU
var/turf/impact = pick(possible_turfs)
sleep(3)
SA.source_mob = user
SA.detonate_on(impact, src)
ship_ammo.source_mob = user
ship_ammo.detonate_on(impact, src)
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,15 @@
QDEL_IN(A, 20)
return

if(istype(O, /obj/structure/dropship_equipment))
var/obj/structure/dropship_equipment/equipment = O
equipment.update_health(40 / A.acid_delay)
visible_message(SPAN_XENOWARNING("[src] vomits globs of vile stuff at \the [O]. It sizzles under the bubbling mess of acid!"), \
SPAN_XENOWARNING("We vomit globs of vile stuff at [O]. It sizzles under the bubbling mess of acid!"), null, 5)
playsound(loc, "sound/bullets/acid_impact1.ogg", 25)
QDEL_IN(A, 20)
return

if(isturf(O))
A.icon_state += "_wall"

Expand Down
Loading