[READY]] FLIGHTPACKS (AKA cooler, better, and technological wings with a unique gimmick!) (#20860)

* vroom

* wew

* a

* b

* morestuff

* .

* a

* .

* .

* basicsprites+extend/retract

* ...

* .

* thanks travis

* woops

* thankstravisv2

* redundence

* ishouldstopmakingsomanygoddamncommits+empdamage

* stuff

* ..

* ion_trails

* fixes_conflict_1

* fix

* compilesnow

* .

* fuck

* WIP: Multi Step Assembly

* thismightfixitthismightnot

* shoe-attachment

* noselfremoval

* wooops

* tweaksandcrashing

* runtimes

* runtimesfuntimes+crash update 1

* thisprobablywontcompile

* stillwip

* githubPLEASEWORK

* fixes conflicts 3/3

* REFACTORSUNTESTED

* fixingconflicts2

* fixingconflicts3/3

* updates

* stuffs

* ...

* stillWIP

* stufffs

* .

* ..

* runtimesfuntimes2

* stuffs2

* conflictfix

* ...

* fuck

* fix

* bah merge conflicts

* knockback_testing1

* conflictfixing...

* mergeconflicts

* plop

* socloseyetsofar

* tweaksandfixes

* conflicts

* fix

* fixes

* fix

* woops

* woops2

* hotfix

* ...

* flufftextandfixes

* test

* ..

* fix1/2

* stuff

* finallysomeoneteachesmehowtofixthisshit

* FIX

* why

* .

* bitflagsshitflags1

* bitflags-shitflags2

* bitflags-shitflags2

* bitflags_shitflags_4

* autofloating

* minerbuffgetthepun?

* notouchingfloors

* ...

* .

* f l o a t

* kek

* kek

* fixes

* fixes2

* sprites
This commit is contained in:
kevinz000
2016-11-24 16:26:43 -08:00
committed by oranges
parent f30e2415fe
commit 87dbd65811
57 changed files with 1432 additions and 126 deletions
+9 -10
View File
@@ -104,16 +104,15 @@
/obj/item/device/assembly/mousetrap/Crossed(atom/movable/AM as mob|obj)
if(armed)
if(ishuman(AM))
var/mob/living/carbon/H = AM
if(H.m_intent == "run")
triggered(H)
H.visible_message("<span class='warning'>[H] accidentally steps on [src].</span>", \
"<span class='warning'>You accidentally step on [src]</span>")
else if(isanimal(AM))
var/mob/living/simple_animal/SA = AM
if(!SA.flying)
triggered(AM)
if(ismob(AM))
var/mob/MM = AM
if(!(MM.movement_type & FLYING))
if(ishuman(AM))
var/mob/living/carbon/H = AM
if(H.m_intent == "run")
triggered(H)
H.visible_message("<span class='warning'>[H] accidentally steps on [src].</span>", \
"<span class='warning'>You accidentally step on [src]</span>")
else if(AM.density) // For mousetrap grenades, set off by anything heavy
triggered(AM)
..()
File diff suppressed because it is too large Load Diff
@@ -1,15 +1,23 @@
/mob/living/carbon/movement_delay()
. = ..()
. += grab_state * 3 //can't go fast while grabbing something.
var/FP
if(iscarbon(src))
var/mob/living/carbon/C = src
var/obj/item/device/flightpack/F = C.get_flightpack()
if(istype(F) && F.flight)
FP = 1
. = ..(FP)
if(!FP)
. += grab_state * 1 //Flightpacks are too powerful to be slowed too much by the weight of a corpse.
else
. += grab_state * 3 //can't go fast while grabbing something.
if(!get_leg_ignore()) //ignore the fact we lack legs
var/leg_amount = get_num_legs()
. += 6 - 3*leg_amount //the fewer the legs, the slower the mob
if(!leg_amount)
. += 6 - 3*get_num_arms() //crawling is harder with fewer arms
if(legcuffed)
. += legcuffed.slowdown
if(legcuffed)
. += legcuffed.slowdown
var/const/NO_SLIP_WHEN_WALKING = 1
@@ -18,6 +26,8 @@ var/const/GALOSHES_DONT_HELP = 4
var/const/SLIDE_ICE = 8
/mob/living/carbon/slip(s_amount, w_amount, obj/O, lube)
if(movement_type & FLYING)
return 0
if(!(lube&SLIDE_ICE))
add_logs(src,, "slipped",, "on [O ? O.name : "floor"]")
return loc.handle_slip(src, s_amount, w_amount, O, lube)
@@ -29,6 +39,10 @@ var/const/SLIDE_ICE = 8
if(!isturf(loc))
return 0
var/obj/item/device/flightpack/F = get_flightpack()
if(istype(F) && (F.flight) && F.allow_thrust(0.01, src))
return 1
// Do we have a jetpack implant (and is it on)?
var/obj/item/organ/cyberimp/chest/thrusters/T = getorganslot("thrusters")
if(istype(T) && movement_dir && T.allow_thrust(0.01))
@@ -38,8 +52,6 @@ var/const/SLIDE_ICE = 8
if(istype(J) && (movement_dir || J.stabilizers) && J.allow_thrust(0.01, src))
return 1
/mob/living/carbon/Move(NewLoc, direct)
. = ..()
if(.)
@@ -911,3 +911,9 @@
Weaken(10)
return 1
..()
/mob/living/carbon/human/Bump(atom/A)
..()
var/obj/item/device/flightpack/FP = get_flightpack()
if(FP)
FP.flight_impact(A)
@@ -3,7 +3,6 @@
. += ..()
. += config.human_delay
/mob/living/carbon/human/slip(s_amount, w_amount, obj/O, lube)
if(isobj(shoes) && (shoes.flags&NOSLIP) && !(lube&GALOSHES_DONT_HELP))
return 0
@@ -60,4 +59,4 @@
/mob/living/carbon/human/Process_Spacemove(movement_dir = 0) //Temporary laziness thing. Will change to handles by species reee.
if(..())
return 1
return dna.species.space_move()
return dna.species.space_move(src)
+35 -21
View File
@@ -864,15 +864,23 @@
/datum/species/proc/movement_delay(mob/living/carbon/human/H)
. = 0
var/obj/item/device/flightpack/F = H.get_flightpack()
var/flightpack = 0
if(istype(F) && F.flight)
flightpack = 1
var/flight = 0
if(H.movement_type & FLYING)
flight = 1
if(H.status_flags & GOTTAGOFAST)
. -= 1
if(H.status_flags & GOTTAGOREALLYFAST)
. -= 2
if(!flightpack)
if(H.status_flags & GOTTAGOFAST)
. -= 1
if(H.status_flags & GOTTAGOREALLYFAST)
. -= 2
if(!(H.status_flags & IGNORESLOWDOWN))
if(!H.has_gravity())
if(FLYING in specflags)
if((H.movement_type & FLYING) && !flightpack) //No hyperstacking angel wings!
. += speedmod
return
// If there's no gravity we have the sanic speed of jetpack.
@@ -888,30 +896,36 @@
if(istype(T) && T.allow_thrust(0.01, H))
. -= 2
else
else if(flightpack && F.allow_thrust(0.01, src)) //No jetpack/flightsuit hyperstacking!
. -= 1
if(H.wear_suit)
. += H.wear_suit.slowdown
if(H.shoes)
. += H.shoes.slowdown
if(H.back)
. += H.back.slowdown
for(var/obj/item/I in H.held_items)
if(I.flags & HANDSLOW)
. += I.slowdown
if(!(flightpack))
var/health_deficiency = (100 - H.health + H.staminaloss)
if(health_deficiency >= 40)
. += (health_deficiency / 25)
if(flight)
. += (health_deficiency / 75)
else
. += (health_deficiency / 25)
var/hungry = (500 - H.nutrition) / 5 // So overeat would be 100 and default level would be 80
if(hungry >= 70)
if((hungry >= 70) && !flight) //Being hungry won't stop you from using flightpack controls/flapping your wings although it probably will in the wing case but who cares.
. += hungry / 50
if(H.wear_suit)
. += H.wear_suit.slowdown
if(H.shoes)
. += H.shoes.slowdown
if(H.back)
. += H.back.slowdown
for(var/obj/item/I in H.held_items)
if(I.flags & HANDSLOW)
. += I.slowdown
if((H.disabilities & FAT))
. += 1.5
. += (1.5 - flight)
if(H.bodytemperature < BODYTEMP_COLD_DAMAGE_LIMIT)
. += (BODYTEMP_COLD_DAMAGE_LIMIT - H.bodytemperature) / COLD_SLOWDOWN_FACTOR
. += speedmod
. += speedmod
//////////////////
// ATTACK PROCS //
@@ -1335,10 +1349,10 @@
//Space Move//
//////////////
/datum/species/proc/space_move()
/datum/species/proc/space_move(mob/living/carbon/human/H)
return 0
/datum/species/proc/negates_gravity()
/datum/species/proc/negates_gravity(mob/living/carbon/human/H)
return 0
@@ -15,7 +15,7 @@
/datum/species/human/qualifies_for_rank(rank, list/features)
if((!features["tail_human"] || features["tail_human"] == "None") && (!features["ears"] || features["ears"] == "None"))
return 1 //Pure humans are always allowed in all roles.
return TRUE //Pure humans are always allowed in all roles.
return ..()
//Curiosity killed the cat's wagging tail.
@@ -23,6 +23,10 @@
if(H)
H.endTailWag()
/datum/species/human/space_move(mob/living/carbon/human/H)
var/obj/item/device/flightpack/F = H.get_flightpack()
if(istype(F) && (F.flight) && F.allow_thrust(0.01, src))
return TRUE
/*
LIZARDPEOPLE
*/
@@ -1003,8 +1007,8 @@ SYNDICATE BLACK OPS
/datum/species/angel/on_species_loss(mob/living/carbon/human/H)
if(fly)
fly.Remove(H)
if(FLYING in specflags)
specflags -= FLYING
if(H.movement_type & FLYING)
H.movement_type &= ~FLYING
ToggleFlight(H,0)
if(H.dna && H.dna.species &&((H.dna.features["wings"] != "None") && ("wings" in H.dna.species.mutant_bodyparts)))
H.dna.features["wings"] = "None"
@@ -1015,15 +1019,12 @@ SYNDICATE BLACK OPS
HandleFlight(H)
/datum/species/angel/proc/HandleFlight(mob/living/carbon/human/H)
if(FLYING in specflags)
if(H.movement_type & FLYING)
if(!CanFly(H))
ToggleFlight(H,0)
H.float(0)
return 0
H.float(1)
return 1
else
H.float(0)
return 0
/datum/species/angel/proc/CanFly(mob/living/carbon/human/H)
@@ -1052,7 +1053,7 @@ SYNDICATE BLACK OPS
var/mob/living/carbon/human/H = owner
var/datum/species/angel/A = H.dna.species
if(A.CanFly(H))
if(FLYING in A.specflags)
if(H.movement_type & FLYING)
H << "<span class='notice'>You settle gently back onto the ground...</span>"
A.ToggleFlight(H,0)
H.update_canmove()
@@ -1089,31 +1090,31 @@ SYNDICATE BLACK OPS
/datum/species/angel/spec_stun(mob/living/carbon/human/H,amount)
if(FLYING in specflags)
if(H.movement_type & FLYING)
ToggleFlight(H,0)
flyslip(H)
. = ..()
/datum/species/angel/negates_gravity()
if(FLYING in specflags)
/datum/species/angel/negates_gravity(mob/living/carbon/human/H)
if(H.movement_type & FLYING)
return 1
/datum/species/angel/space_move()
if(FLYING in specflags)
/datum/species/angel/space_move(mob/living/carbon/human/H)
if(H.movement_type & FLYING)
return 1
/datum/species/angel/proc/ToggleFlight(mob/living/carbon/human/H,flight)
if(flight && CanFly(H))
stunmod = 2
speedmod = -1
specflags += FLYING
H.movement_type |= FLYING
override_float = 1
H.pass_flags |= PASSTABLE
H.OpenWings()
else
stunmod = 1
speedmod = 0
specflags -= FLYING
H.movement_type &= ~FLYING
override_float = 0
H.pass_flags &= ~PASSTABLE
H.CloseWings()
+6 -1
View File
@@ -50,10 +50,15 @@
if(stat != DEAD)
handle_status_effects() //all special effects, stunned, weakened, jitteryness, hallucination, sleeping, etc
if(floating && (!(movement_type & FLYING)))
float(0)
if(movement_type & FLYING)
float(1)
if(stat != DEAD)
return 1
/mob/living/proc/handle_breathing()
return
+14 -9
View File
@@ -438,18 +438,21 @@
if (s_active && !(s_active.ClickAccessible(src, depth=STORAGE_VIEW_DEPTH) || s_active.Adjacent(src)))
s_active.close(src)
/mob/living/movement_delay()
/mob/living/movement_delay(ignorewalk = 0)
. = ..()
if(isopenturf(loc))
if(isopenturf(loc) && !is_flying())
var/turf/open/T = loc
. += T.slowdown
switch(m_intent)
if("run")
if(drowsyness > 0)
. += 6
. += config.run_speed
if("walk")
. += config.walk_speed
if(!ignorewalk)
. += config.run_speed
else
switch(m_intent)
if("run")
if(drowsyness > 0)
. += 6
. += config.run_speed
if("walk")
. += config.walk_speed
/mob/living/proc/makeTrail(turf/T)
if(!has_gravity())
@@ -603,6 +606,8 @@
fixed = 1
if(on && !floating && !fixed)
animate(src, pixel_y = pixel_y + 2, time = 10, loop = -1)
sleep(10)
animate(src, pixel_y = pixel_y - 2, time = 10, loop = -1)
floating = 1
else if(((!on || fixed) && floating))
animate(src, pixel_y = get_standard_pixel_y_offset(lying), time = 10)
@@ -21,7 +21,7 @@
maxbodytemp = INFINITY
healable = 0
faction = list("cult")
flying = 1
movement_type = FLYING
pressure_resistance = 100
unique_name = 1
AIStatus = AI_OFF //normal constructs don't have AI
@@ -14,7 +14,7 @@
harm_intent_damage = 1
friendly = "nudges"
density = 0
flying = 1
movement_type = FLYING
pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
ventcrawler = 2
mob_size = MOB_SIZE_TINY
@@ -21,7 +21,7 @@ var/global/list/parasites = list() //all currently existing/living guardians
speed = 0
a_intent = "harm"
stop_automated_movement = 1
flying = 1 // Immunity to chasms and landmines, etc.
movement_type = FLYING // Immunity to chasms and landmines, etc.
attack_sound = 'sound/weapons/punch1.ogg'
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
@@ -35,7 +35,7 @@
mouse_opacity = 2
pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
mob_size = MOB_SIZE_TINY
flying = 1
movement_type = FLYING
gold_core_spawnable = 1
search_objects = 1 //have to find those plant trays!
@@ -31,7 +31,7 @@
maxbodytemp = 1500
faction = list("carp")
flying = 1
movement_type = FLYING
pressure_resistance = 200
gold_core_spawnable = 1
@@ -22,7 +22,7 @@
melee_damage_upper = 25
attacktext = "blinks at"
attack_sound = 'sound/weapons/pierce.ogg'
flying = 1
movement_type = FLYING
faction = list("spooky")
del_on_death = 1
@@ -606,7 +606,7 @@ Difficulty: Very Hard
harm_intent_damage = 1
friendly = "mends"
density = 0
flying = 1
movement_type = FLYING
pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
ventcrawler = 2
mob_size = MOB_SIZE_TINY
@@ -622,6 +622,7 @@ Difficulty: Very Hard
languages_understood = ALL
del_on_death = 1
unsuitable_atmos_damage = 0
movement_type = FLYING
minbodytemp = 0
maxbodytemp = 1500
obj_damage = 0
@@ -13,7 +13,7 @@
luminosity = 3
faction = list("mining", "boss")
weather_immunities = list("lava","ash")
flying = 1
movement_type = FLYING
robust_searching = 1
ranged_ignores_vision = TRUE
stat_attack = 2
@@ -322,7 +322,7 @@
speed = 3
maxHealth = 1
health = 1
flying = 1
movement_type = FLYING
harm_intent_damage = 5
melee_damage_lower = 2
melee_damage_upper = 2
@@ -713,7 +713,7 @@
speak_emote = list("telepathically cries")
attack_sound = 'sound/weapons/bladeslice.ogg'
stat_attack = 1
flying = TRUE
movement_type = FLYING
robust_searching = 1
loot = list()
butcher_results = list(/obj/item/weapon/ore/diamond = 2, /obj/item/stack/sheet/sinew = 2, /obj/item/stack/sheet/bone = 1)
@@ -25,7 +25,7 @@
environment_smash = 0
ventcrawler = 2
mob_size = MOB_SIZE_TINY
flying = 1
movement_type = FLYING
speak_emote = list("squeaks")
var/max_co2 = 0 //to be removed once metastation map no longer use those for Sgt Araneus
var/min_oxy = 0
@@ -27,7 +27,7 @@
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
maxbodytemp = 1500
flying = 1
movement_type = FLYING
pressure_resistance = 300
gold_core_spawnable = 0 //too spooky for science
var/ghost_hair_style
@@ -163,7 +163,7 @@
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
mob_size = MOB_SIZE_TINY
flying = 1
movement_type = FLYING
limb_destroyer = 1
speak_emote = list("states")
bubble_icon = "syndibot"
@@ -57,7 +57,7 @@
attacktext = "chomps"
friendly = "grooms"
mob_size = MOB_SIZE_SMALL
flying = 1
movement_type = FLYING
gold_core_spawnable = 2
var/parrot_damage_upper = 10
@@ -26,7 +26,7 @@
status_flags = 0
faction = list("cult")
status_flags = CANPUSH
flying = 1
movement_type = FLYING
loot = list(/obj/item/weapon/ectoplasm)
del_on_death = 1
@@ -62,7 +62,6 @@
//simple_animal access
var/obj/item/weapon/card/id/access_card = null //innate access uses an internal ID card
var/flying = 0 //whether it's flying or touching the ground.
var/buffed = 0 //In the event that you want to have a buffing effect on the mob, but don't want it to stack with other effects, any outside force that applies a buff to a simple mob should at least set this to 1, so we have something to check against
var/gold_core_spawnable = 0 //if 1 can be spawned by plasma with gold core, 2 are 'friendlies' spawned with blood
+2 -1
View File
@@ -69,4 +69,5 @@
AA.display_to(list(src))
update_client_colour()
client.click_intercept = null
if(client)
client.click_intercept = null
+1
View File
@@ -30,6 +30,7 @@
var/obj/machinery/machine = null
var/other_mobs = null
var/disabilities = 0 //Carbon
var/movement_type = GROUND //Incase you have multiple types, you automatically use the most useful one. IE: Skating on ice, flippers on water, flying over chasm/space, etc.
var/atom/movable/pulling = null
var/grab_state = 0
+5
View File
@@ -483,3 +483,8 @@ It's fairly easy to fix if dealing with single letters but not so much with comp
for(var/obj/screen/wheel/talk/TW in L.hud_used.wheels)
TW.Click()
/mob/proc/is_flying(mob/M = src)
if(M.movement_type & FLYING)
return 1
else
return 0
+3
View File
@@ -175,6 +175,9 @@
if(mob && .)
mob.throwing = 0
for(var/obj/O in mob)
O.on_mob_move(direct, src)
return .
@@ -709,3 +709,33 @@
construction_time = 100
build_path = /obj/item/device/assembly/flash/handheld
category = list("Misc")
/datum/design/flightsuit //Multi step build process/redo WIP
name = "Flight Suit"
desc = "A specialized hardsuit that is able to attach a flightpack and accessories.."
id = "flightsuit"
build_type = MECHFAB
build_path = /obj/item/clothing/suit/space/hardsuit/flightsuit
materials = list(MAT_METAL=20000, MAT_GLASS = 10000, MAT_DIAMOND = 200, MAT_GOLD = 3000, MAT_SILVER = 3000, MAT_TITANIUM = 20000) //This expensive enough for you?
construction_time = 250
category = list("Misc")
/datum/design/flightpack
name = "Flight Pack"
desc = "An advanced back-worn system that has dual ion engines powerful enough to grant a humanoid flight. Contains an internal self-recharging high-current capacitor for short, powerful boosts."
id = "flightpack"
build_type = MECHFAB
build_path = /obj/item/device/flightpack
materials = list(MAT_METAL=20000, MAT_GLASS = 10000, MAT_DIAMOND = 5000, MAT_GOLD = 15000, MAT_SILVER = 15000, MAT_URANIUM = 25000, MAT_PLASMA = 20000, MAT_TITANIUM = 20000) //This expensive enough for you?
construction_time = 250
category = list("Misc")
/datum/design/flightshoes
name = "Flight Shoes"
desc = "Flight shoes, attachable to a flight suit to provide additional functions."
id = "flightshoes"
build_type = MECHFAB
build_path = /obj/item/clothing/shoes/flightshoes
materials = list(MAT_METAL = 5000, MAT_GLASS = 5000, MAT_GOLD = 1500, MAT_SILVER = 1500, MAT_PLASMA = 2000, MAT_TITANIUM = 2000) //They're just shoes.
construction_time = 100
category = list("Misc")
+1 -1
View File
@@ -89,7 +89,7 @@
return 1
/mob/living/carbon/human/get_leg_ignore()
if(FLYING in dna.species.specflags)
if(movement_type & FLYING)
return 1
/mob/living/proc/get_missing_limbs()