Skip to content

Commit

Permalink
Merge branch 'master' into movielike_dropships
Browse files Browse the repository at this point in the history
  • Loading branch information
Warfan1815 authored Jan 24, 2025
2 parents 771b8b5 + fb1fd9a commit 6d2d575
Show file tree
Hide file tree
Showing 53 changed files with 614 additions and 197 deletions.
2 changes: 2 additions & 0 deletions code/__DEFINES/conflict.dm
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
#define GRAB_AGGRESSIVE 1
#define GRAB_CARRY 2
#define GRAB_CHOKE 3
/// Alien-specific grab, somewhat between an aggressive and choke. Limited to AI only for the moment.
#define GRAB_XENO 4

//Ammo defines for gun/projectile related things.

Expand Down
5 changes: 5 additions & 0 deletions code/__DEFINES/pain.dm
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,11 @@
#define PAIN_REDUCTION_FULL 80 //oxycodone, neuraline

// Pain amount supplied by the action

/// How much pain is dealt continually to the mob being dragged by the AI as well as when initially grabbing.
#define PAIN_XENO_DRAG 10
/// How much additional pain is dealt when lunging/throat grabbing.
#define PAIN_XENO_GRAB 15
#define PAIN_BONE_BREAK 25
#define PAIN_BONE_BREAK_SPLINTED 15
#define PAIN_DELIMB 40
Expand Down
2 changes: 2 additions & 0 deletions code/__DEFINES/text.dm
Original file line number Diff line number Diff line change
Expand Up @@ -24,3 +24,5 @@
#define MAX_PAPER_MESSAGE_LEN 3072
#define MAX_BOOK_MESSAGE_LEN 9216
#define MAX_NAME_LEN 28
#define MAX_RECORDS_MESSAGE_LEN 10240
#define MAX_FLAVOR_MESSAGE_LEN 3072
5 changes: 3 additions & 2 deletions code/__DEFINES/xeno.dm
Original file line number Diff line number Diff line change
Expand Up @@ -690,8 +690,9 @@
#define XENO_CASTE_HIVELORD "Hivelord"
#define XENO_CASTE_LURKER "Lurker"
#define XENO_CASTE_WARRIOR "Warrior"
#define XENO_CASTE_SOLDIER "Soldier"
#define XENO_CASTE_SPITTER "Spitter"
#define XENO_T2_CASTES list(XENO_CASTE_BURROWER, XENO_CASTE_CARRIER, XENO_CASTE_HIVELORD, XENO_CASTE_LURKER, XENO_CASTE_WARRIOR, XENO_CASTE_SPITTER)
#define XENO_T2_CASTES list(XENO_CASTE_BURROWER, XENO_CASTE_CARRIER, XENO_CASTE_HIVELORD, XENO_CASTE_LURKER, XENO_CASTE_WARRIOR, XENO_CASTE_SPITTER, XENO_CASTE_SOLDIER)
//t3
#define XENO_CASTE_BOILER "Boiler"
#define XENO_CASTE_PRAETORIAN "Praetorian"
Expand All @@ -705,7 +706,7 @@
#define XENO_CASTE_HELLHOUND "Hellhound"
#define XENO_SPECIAL_CASTES list(XENO_CASTE_QUEEN, XENO_CASTE_PREDALIEN, XENO_CASTE_HELLHOUND)

#define ALL_XENO_CASTES list(XENO_CASTE_LARVA, XENO_CASTE_PREDALIEN_LARVA, XENO_CASTE_FACEHUGGER, XENO_CASTE_LESSER_DRONE, XENO_CASTE_DRONE, XENO_CASTE_RUNNER, XENO_CASTE_SENTINEL, XENO_CASTE_DEFENDER, XENO_CASTE_BURROWER, XENO_CASTE_CARRIER, XENO_CASTE_HIVELORD, XENO_CASTE_LURKER, XENO_CASTE_WARRIOR, XENO_CASTE_SPITTER, XENO_CASTE_BOILER, XENO_CASTE_PRAETORIAN, XENO_CASTE_CRUSHER, XENO_CASTE_RAVAGER, XENO_CASTE_QUEEN, XENO_CASTE_PREDALIEN, XENO_CASTE_HELLHOUND, XENO_CASTE_KING)
#define ALL_XENO_CASTES list(XENO_CASTE_LARVA, XENO_CASTE_PREDALIEN_LARVA, XENO_CASTE_FACEHUGGER, XENO_CASTE_LESSER_DRONE, XENO_CASTE_DRONE, XENO_CASTE_RUNNER, XENO_CASTE_SENTINEL, XENO_CASTE_DEFENDER, XENO_CASTE_BURROWER, XENO_CASTE_CARRIER, XENO_CASTE_HIVELORD, XENO_CASTE_LURKER, XENO_CASTE_WARRIOR, XENO_CASTE_SPITTER, XENO_CASTE_BOILER, XENO_CASTE_PRAETORIAN, XENO_CASTE_CRUSHER, XENO_CASTE_RAVAGER, XENO_CASTE_QUEEN, XENO_CASTE_PREDALIEN, XENO_CASTE_HELLHOUND, XENO_CASTE_SOLDIER, XENO_CASTE_KING)

// Checks if two hives are allied to each other.
// PARAMETERS:
Expand Down
2 changes: 2 additions & 0 deletions code/game/jobs/role_authority.dm
Original file line number Diff line number Diff line change
Expand Up @@ -744,6 +744,8 @@ I hope it's easier to tell what the heck this proc is even doing, unlike previou
M = /mob/living/carbon/xenomorph/predalien
if(XENO_CASTE_HELLHOUND)
M = /mob/living/carbon/xenomorph/hellhound
if(XENO_CASTE_SOLDIER)
M = /mob/living/carbon/xenomorph/soldier
if(XENO_CASTE_KING)
M = /mob/living/carbon/xenomorph/king
return M
Expand Down
20 changes: 10 additions & 10 deletions code/game/machinery/computer/medical.dm
Original file line number Diff line number Diff line change
Expand Up @@ -236,63 +236,63 @@
msg_admin_niche("[key_name_admin(usr)] set the medical record age for [active1.fields["name"]] ([active1.fields["id"]]) to [new_value].")
if("mi_dis")
if (istype(active2, /datum/data/record))
var/new_value = copytext(trim(strip_html(input("Please input minor disabilities list:", "Med. records", active2.fields["mi_dis"], null) as text)),1,MAX_MESSAGE_LEN)
var/new_value = copytext(trim(strip_html(input("Please input minor disabilities list:", "Med. records", active2.fields["mi_dis"], null) as text)),1,MAX_RECORDS_MESSAGE_LEN)
if ((!( new_value ) || !( authenticated ) || usr.stat || usr.is_mob_restrained() || (!in_range(src, usr) && (!isRemoteControlling(usr))) || active2 != a2))
return
active2.fields["mi_dis"] = new_value
msg_admin_niche("[key_name_admin(usr)] set the medical record minor disabilities list for [active1.fields["name"]] ([active1.fields["id"]]) to [new_value].")
if("mi_dis_d")
if (istype(active2, /datum/data/record))
var/new_value = copytext(trim(strip_html(input("Please summarize minor dis.:", "Med. records", active2.fields["mi_dis_d"], null) as message)),1,MAX_MESSAGE_LEN)
var/new_value = copytext(trim(strip_html(input("Please summarize minor dis.:", "Med. records", active2.fields["mi_dis_d"], null) as message)),1,MAX_RECORDS_MESSAGE_LEN)
if ((!( new_value ) || !( authenticated ) || usr.stat || usr.is_mob_restrained() || (!in_range(src, usr) && (!isRemoteControlling(usr))) || active2 != a2))
return
active2.fields["mi_dis_d"] = new_value
msg_admin_niche("[key_name_admin(usr)] set the medical record minor disabilities desc for [active1.fields["name"]] ([active1.fields["id"]]) to [new_value].")
if("ma_dis")
if (istype(active2, /datum/data/record))
var/new_value = copytext(trim(strip_html(input("Please input major diabilities list:", "Med. records", active2.fields["ma_dis"], null) as text)),1,MAX_MESSAGE_LEN)
var/new_value = copytext(trim(strip_html(input("Please input major diabilities list:", "Med. records", active2.fields["ma_dis"], null) as text)),1,MAX_RECORDS_MESSAGE_LEN)
if ((!( new_value ) || !( authenticated ) || usr.stat || usr.is_mob_restrained() || (!in_range(src, usr) && (!isRemoteControlling(usr))) || active2 != a2))
return
active2.fields["ma_dis"] = new_value
msg_admin_niche("[key_name_admin(usr)] set the medical record major disabilities list for [active1.fields["name"]] ([active1.fields["id"]]) to [new_value].")
if("ma_dis_d")
if (istype(active2, /datum/data/record))
var/new_value = copytext(trim(strip_html(input("Please summarize major dis.:", "Med. records", active2.fields["ma_dis_d"], null) as message)),1,MAX_MESSAGE_LEN)
var/new_value = copytext(trim(strip_html(input("Please summarize major dis.:", "Med. records", active2.fields["ma_dis_d"], null) as message)),1,MAX_RECORDS_MESSAGE_LEN)
if ((!( new_value ) || !( authenticated ) || usr.stat || usr.is_mob_restrained() || (!in_range(src, usr) && (!isRemoteControlling(usr))) || active2 != a2))
return
active2.fields["ma_dis_d"] = new_value
msg_admin_niche("[key_name_admin(usr)] set the medical record major disabilities desc for [active1.fields["name"]] ([active1.fields["id"]]) to [new_value].")
if("alg")
if (istype(active2, /datum/data/record))
var/new_value = copytext(trim(strip_html(input("Please state allergies:", "Med. records", active2.fields["alg"], null) as text)),1,MAX_MESSAGE_LEN)
var/new_value = copytext(trim(strip_html(input("Please state allergies:", "Med. records", active2.fields["alg"], null) as text)),1,MAX_RECORDS_MESSAGE_LEN)
if ((!( new_value ) || !( authenticated ) || usr.stat || usr.is_mob_restrained() || (!in_range(src, usr) && (!isRemoteControlling(usr))) || active2 != a2))
return
active2.fields["alg"] = new_value
msg_admin_niche("[key_name_admin(usr)] set the medical record allergies list for [active1.fields["name"]] ([active1.fields["id"]]) to [new_value].")
if("alg_d")
if (istype(active2, /datum/data/record))
var/new_value = copytext(trim(strip_html(input("Please summarize allergies:", "Med. records", active2.fields["alg_d"], null) as message)),1,MAX_MESSAGE_LEN)
var/new_value = copytext(trim(strip_html(input("Please summarize allergies:", "Med. records", active2.fields["alg_d"], null) as message)),1,MAX_RECORDS_MESSAGE_LEN)
if ((!( new_value ) || !( authenticated ) || usr.stat || usr.is_mob_restrained() || (!in_range(src, usr) && (!isRemoteControlling(usr))) || active2 != a2))
return
active2.fields["alg_d"] = new_value
msg_admin_niche("[key_name_admin(usr)] set the medical record allergies desc for [active1.fields["name"]] ([active1.fields["id"]]) to [new_value].")
if("cdi")
if (istype(active2, /datum/data/record))
var/new_value = copytext(trim(strip_html(input("Please state diseases:", "Med. records", active2.fields["cdi"], null) as text)),1,MAX_MESSAGE_LEN)
var/new_value = copytext(trim(strip_html(input("Please state diseases:", "Med. records", active2.fields["cdi"], null) as text)),1,MAX_RECORDS_MESSAGE_LEN)
if ((!( new_value ) || !( authenticated ) || usr.stat || usr.is_mob_restrained() || (!in_range(src, usr) && (!isRemoteControlling(usr))) || active2 != a2))
return
active2.fields["cdi"] = new_value
msg_admin_niche("[key_name_admin(usr)] set the medical record disabilities list for [active1.fields["name"]] ([active1.fields["id"]]) to [new_value].")
if("cdi_d")
if (istype(active2, /datum/data/record))
var/new_value = copytext(trim(strip_html(input("Please summarize diseases:", "Med. records", active2.fields["cdi_d"], null) as message)),1,MAX_MESSAGE_LEN)
var/new_value = copytext(trim(strip_html(input("Please summarize diseases:", "Med. records", active2.fields["cdi_d"], null) as message)),1,MAX_RECORDS_MESSAGE_LEN)
if ((!( new_value ) || !( authenticated ) || usr.stat || usr.is_mob_restrained() || (!in_range(src, usr) && (!isRemoteControlling(usr))) || active2 != a2))
return
active2.fields["cdi_d"] = new_value
msg_admin_niche("[key_name_admin(usr)] set the medical record disabilities desc for [active1.fields["name"]] ([active1.fields["id"]]) to [new_value].")
if("notes")
if (istype(active2, /datum/data/record))
var/new_value = copytext(html_encode(trim(input("Please summarize notes:", "Med. records", html_decode(active2.fields["notes"]), null) as message)),1,MAX_MESSAGE_LEN)
var/new_value = copytext(html_encode(trim(input("Please summarize notes:", "Med. records", html_decode(active2.fields["notes"]), null) as message)),1,MAX_RECORDS_MESSAGE_LEN)
if ((!( new_value ) || !( authenticated ) || usr.stat || usr.is_mob_restrained() || (!in_range(src, usr) && (!isRemoteControlling(usr))) || active2 != a2))
return
active2.fields["notes"] = new_value
Expand Down Expand Up @@ -402,7 +402,7 @@
if (!( istype(active2, /datum/data/record) ))
return
var/a2 = active2
var/new_value = copytext(trim(strip_html(input("Add Comment:", "Med. records", null, null) as message)),1,MAX_MESSAGE_LEN)
var/new_value = copytext(trim(strip_html(input("Add Comment:", "Med. records", null, null) as message)),1,MAX_RECORDS_MESSAGE_LEN)
if ((!( new_value ) || !( authenticated ) || usr.stat || usr.is_mob_restrained() || (!in_range(src, usr) && (!isRemoteControlling(usr))) || active2 != a2))
return
var/counter = 1
Expand Down
2 changes: 1 addition & 1 deletion code/game/machinery/computer/security.dm
Original file line number Diff line number Diff line change
Expand Up @@ -361,7 +361,7 @@ What a mess.*/
if (!(istype(active2, /datum/data/record)))
return
var/a2 = active2
var/new_value = copytext(trim(strip_html(input("Your name and time will be added to this new comment.", "Add a comment", null, null) as message)),1,MAX_MESSAGE_LEN)
var/new_value = copytext(trim(strip_html(input("Your name and time will be added to this new comment.", "Add a comment", null, null) as message)),1,MAX_RECORDS_MESSAGE_LEN)
if((!new_value || usr.stat || usr.is_mob_restrained() || (!in_range(src, usr) && (!isSilicon(usr))) || active2 != a2))
return
var/created_at = text("[]  []  []", time2text(world.realtime, "MMM DD"), time2text(world.time, "[worldtime2text()]:ss"), GLOB.game_year)
Expand Down
4 changes: 4 additions & 0 deletions code/game/machinery/doors/airlock_types.dm
Original file line number Diff line number Diff line change
Expand Up @@ -266,6 +266,10 @@
/obj/structure/machinery/door/airlock/strata/mining/autoname
autoname = TRUE

/obj/structure/machinery/door/airlock/strata/circular
name = "\improper Secure Airlock"
icon = 'icons/obj/structures/doors/strata/strata_utility.dmi'

//YAUTJA SHIP - CURRENTLY USES STRATA DOORS
/obj/structure/machinery/door/airlock/yautja
name = "\improper Airlock"
Expand Down
7 changes: 7 additions & 0 deletions code/game/machinery/doors/multi_tile.dm
Original file line number Diff line number Diff line change
Expand Up @@ -645,3 +645,10 @@
icon = 'icons/obj/structures/doors/2x1almayerdoor_glass.dmi'
opacity = FALSE
glass = TRUE

/obj/structure/machinery/door/airlock/multi_tile/strata
name = "Secure Airlock"
icon = 'icons/obj/structures/doors/strata/strata_2x1.dmi'
opacity = TRUE
glass = FALSE
openspeed = 4
32 changes: 30 additions & 2 deletions code/game/objects/effects/aliens.dm
Original file line number Diff line number Diff line change
Expand Up @@ -322,6 +322,12 @@
flare_damage = 2250
icon_state = "acid_strong"

//Similar to strong acid, just not quite as strong other than barricade damage.
/obj/effect/xenomorph/acid/spatter
acid_delay = 0.6
barricade_damage = 100
flare_damage = 1000

/obj/effect/xenomorph/acid/Initialize(mapload, atom/target)
. = ..()
acid_t = target
Expand All @@ -334,6 +340,25 @@
RegisterSignal(acid_t, COMSIG_PARENT_QDELETING, PROC_REF(cleanup))
START_PROCESSING(SSoldeffects, src)

/obj/effect/xenomorph/acid/spatter/Initialize(mapload, atom/target)
. = ..()
if(!acid_t)
var/obj/structure/barricade/B = locate() in loc
if(B && !B.unacidable) acid_t = B
else
for(var/obj/O in loc) //Find the first thing.
if(istype(O, /obj/vehicle/multitile))
var/obj/vehicle/multitile/acid_vehicle = O
acid_vehicle.take_damage_type(100 / src.acid_delay, "acid", src)
visible_message(SPAN_XENOWARNING("\the [acid_vehicle] is burnt by the strong acid blood!"))
continue //We just damaged it, to not break proc would completely melt the vehicle.
if(O.unacidable || istype(O, /obj/effect)) continue //Not unacidable things or effects. Don't want to melt xenogibs.
acid_t = O
break
if(acid_t) layer = acid_t.layer
else
acid_t = get_turf(loc)

/obj/effect/xenomorph/acid/Destroy()
acid_t = null
STOP_PROCESSING(SSoldeffects, src)
Expand Down Expand Up @@ -428,8 +453,11 @@
else
for(var/mob/mob in acid_t)
mob.forceMove(loc)
qdel(acid_t)
qdel(src)
animate(acid_t, alpha = 0, 1 SECONDS)
QDEL_IN(acid_t, 1 SECONDS)

animate(src, alpha = 0, 1 SECONDS)
QDEL_IN(src, 1 SECONDS)

/obj/effect/xenomorph/boiler_bombard
name = "???"
Expand Down
8 changes: 2 additions & 6 deletions code/game/objects/items/stacks/predator.dm
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@

/obj/item/stack/yautja_rope
name = "strange rope"
name = "rope"
singular_name = "rope meter"
desc = "This unassuming rope seems to be covered in markings depicting strange humanoid forms."
desc = "Good, strong rope."
icon = 'icons/obj/structures/machinery/power.dmi'
icon_state = "coil"
item_state = "coil"
Expand All @@ -22,10 +22,6 @@
to_chat(user, SPAN_WARNING("[mob_victim] has the wrong body plan to hang up."))
return TRUE

if(!HAS_TRAIT(user, TRAIT_SUPER_STRONG))
to_chat(user, SPAN_WARNING("You're not strong enough to lift [mob_victim] up with a rope. Also, that's kind of fucked up."))
return TRUE

var/mob/living/carbon/human/victim = mob_victim

if(!do_after(user, 1 SECONDS, INTERRUPT_NO_NEEDHAND, BUSY_ICON_HOSTILE, victim))
Expand Down
4 changes: 2 additions & 2 deletions code/game/objects/prop.dm
Original file line number Diff line number Diff line change
Expand Up @@ -303,8 +303,8 @@
desc = "A treatise on war written by Sun Tzu a great general, strategist, and philosopher from ancient Earth. This book is on the Commandant of the United States Colonial Marine Corps reading list and most officers can be found in possession of a copy. Most officers who've read it claim to know a little bit more about fighting than most enlisted but results may vary. "

/obj/item/prop/magazine/book/uppbooklet
name = "UPP Party Doctrine Booklet"
desc = "A booklet provided to every single citizen of the Union of Progressive Peoples. The first page is stamped with the Party's insignia followed by a emphatic dedication to the working class; past, present, and future. Aside from being an easily digestible summary of the collective ideology of the Union, the booklet provides you with an outline of the Union's history and a good chunk is dedicated to listing and summarizing each of the Union's many member states."
name = "\improper The People's Handbook"
desc = "A booklet provided to the broad citizenry of the Union of Progressive Peoples. The first page is stamped with the Union Roundel and a dedication to the unity of its' member states and the collective working class under the State Councils' guidance. While an easily digestible summary of the collective ideology of the Union, the booklet also provides a succinct description of the UPP's history and summaries of its' member states, alongside various universal laws. Because of this, it is commonly distributed to new citizens upon entry into the UPP."
icon_state = "book_upp"

/obj/item/prop/magazine/book/warisaracket
Expand Down
14 changes: 12 additions & 2 deletions code/game/objects/structures/signs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,10 @@
name = "\improper United Americas flag"
desc = "A flag of the United Americas. Inspires patriotism, fear, or revulsion depending on the viewer's political leanings."
icon_state = "uaflag"

/obj/structure/sign/banners/united_americas_worn
name = "\improper United Americas flag"
desc = "A very worn flag of the United Americas. Inspires patriotism, fear, or revulsion depending on the viewer's political leanings."
icon_state = "uaflag_worn"
//============//
// Flags //
//==========//
Expand Down Expand Up @@ -149,7 +152,14 @@
name = "\improper Worn Union of Progressive Peoples flag"
desc = "A very worn flag of the Union of Progressive Peoples. Inspires patriotism, fear, or revulsion depending on the viewer's political leanings."
icon_state = "uppflag_worn"

/obj/structure/sign/banners/usa_flag
name = "\improper Worn United States of America flag"
desc = "A flag of the United States of America. Inspires patriotism, fear, or revulsion depending on the viewer's political leanings."
icon_state = "usaflag"
/obj/structure/sign/banners/usa_worn
name = "\improper Worn United States of America flag"
desc = "A very worn flag of the United States of America. Inspires patriotism, fear, or revulsion depending on the viewer's political leanings."
icon_state = "usaflag_worn"
//=====================//
// SEMIOTIC STANDARD //
//===================//
Expand Down
2 changes: 1 addition & 1 deletion code/modules/admin/game_master/game_master.dm
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ GLOBAL_VAR_INIT(radio_communication_clarity, 100)

// Spawn stuff
#define DEFAULT_SPAWN_XENO_STRING XENO_CASTE_DRONE
#define GAME_MASTER_AI_XENOS list(XENO_CASTE_DRONE, XENO_CASTE_RUNNER, XENO_CASTE_LURKER, XENO_CASTE_CRUSHER, XENO_CASTE_FACEHUGGER)
#define GAME_MASTER_AI_XENOS list(XENO_CASTE_DRONE, XENO_CASTE_SOLDIER, XENO_CASTE_RUNNER, XENO_CASTE_LURKER, XENO_CASTE_CRUSHER, XENO_CASTE_FACEHUGGER)
#define DEFAULT_SPAWN_HIVE_STRING XENO_HIVE_NORMAL

#define DEFAULT_XENO_AMOUNT_TO_SPAWN 1
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@

#define DEFAULT_SPAWN_XENO_STRING XENO_CASTE_DRONE
#define GAME_MASTER_AMBUSH_AI_XENOS list(XENO_CASTE_DRONE, XENO_CASTE_RUNNER, XENO_CASTE_LURKER, XENO_CASTE_FACEHUGGER)
#define GAME_MASTER_AMBUSH_AI_XENOS list(XENO_CASTE_DRONE, XENO_CASTE_SOLDIER, XENO_CASTE_RUNNER, XENO_CASTE_LURKER, XENO_CASTE_FACEHUGGER)
#define DEFAULT_SPAWN_HIVE_STRING XENO_HIVE_NORMAL

#define DEFAULT_XENO_AMOUNT_TO_SPAWN 1
Expand Down
2 changes: 1 addition & 1 deletion code/modules/admin/holder2.dm
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ you will have to do something like if(client.admin_holder.rights & R_ADMIN) your
if(!other)
return FALSE
if(rights_required && other.admin_holder?.rank)
if(check_client_rights(usr.client, rights_required, show_msg))
if(check_client_rights(other, rights_required, show_msg))
return TRUE
else if(show_msg)
to_chat(usr, SPAN_WARNING("You do not have sufficient rights to do that. You require one of the following flags:[rights2text(rights_required," ")]."))
Expand Down
Loading

0 comments on commit 6d2d575

Please sign in to comment.