This commit is contained in:
Enric Gabriel
2020-08-30 01:42:50 -03:00
14 changed files with 3211 additions and 2631 deletions
+220 -214
View File
@@ -112,7 +112,7 @@
/obj/machinery/light/small{
dir = 8
},
/turf/closed/mineral/random/snow,
/turf/open/floor/plating/asteroid/snow/icemoon,
/area/icemoon/underground/unexplored/rivers)
"eH" = (
/obj/machinery/airalarm{
@@ -581,7 +581,7 @@
desc = "A horn off of a bicycle. This one has been charred to hell and back, yet somehow it still honks.";
name = "charred bike horn"
},
/turf/closed/mineral/random/snow,
/turf/open/floor/plating/asteroid/snow/icemoon,
/area/icemoon/underground/unexplored/rivers)
"nN" = (
/turf/closed/wall/r_wall,
@@ -722,6 +722,9 @@
},
/turf/open/floor/plasteel,
/area/mine/living_quarters)
"rs" = (
/turf/open/floor/plating/asteroid/snow/icemoon,
/area/icemoon/underground/unexplored/rivers)
"ry" = (
/obj/effect/turf_decal/tile/purple{
dir = 8
@@ -809,6 +812,9 @@
},
/turf/open/floor/plasteel/white,
/area/mine/living_quarters)
"sL" = (
/turf/open/transparent/openspace/icemoon,
/area/icemoon/underground/unexplored/rivers)
"sM" = (
/obj/structure/table,
/obj/item/storage/firstaid/toxin{
@@ -2367,7 +2373,7 @@
/obj/machinery/light/small{
dir = 1
},
/turf/closed/mineral/random/snow,
/turf/open/floor/plating/asteroid/snow/icemoon,
/area/icemoon/underground/unexplored/rivers)
"WE" = (
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
@@ -29940,9 +29946,9 @@ ah
ah
ah
ah
rs
ah
ah
ah
rs
ah
ah
ah
@@ -30199,8 +30205,8 @@ ah
ah
ah
ah
ah
ah
rs
rs
ah
ah
ah
@@ -30456,8 +30462,8 @@ ah
ah
ah
ah
ah
ah
rs
rs
ah
ah
ah
@@ -30712,10 +30718,10 @@ ah
ah
ah
nE
ah
ah
ah
ah
rs
sL
sL
rs
ah
ah
ah
@@ -30968,11 +30974,11 @@ ah
ah
ah
ah
ah
ah
ah
ah
ah
rs
rs
rs
sL
rs
ah
ah
ah
@@ -31498,8 +31504,8 @@ ah
ah
ah
ah
ah
ah
rs
rs
ah
ah
ah
@@ -31749,14 +31755,14 @@ ah
ah
ah
ah
rs
rs
rs
rs
ah
ah
ah
ah
ah
ah
ah
ah
rs
rs
rs
ah
ah
ah
@@ -32005,14 +32011,14 @@ Gw
op
nd
ah
ah
ah
ah
ah
ah
ah
ah
ah
sL
rs
rs
rs
rs
rs
rs
rs
ah
ah
ah
@@ -32262,15 +32268,15 @@ GI
Lg
nd
ah
ah
ah
ah
sL
sL
rs
op
WE
op
ah
ah
ah
rs
rs
rs
ah
ah
ah
@@ -32519,17 +32525,17 @@ GN
Lu
nd
ah
ah
ah
ah
rs
rs
rs
op
sa
op
ah
ah
ah
ah
ah
rs
rs
rs
rs
rs
ah
ah
ah
@@ -32782,11 +32788,11 @@ nd
op
WM
op
ah
ah
ah
ah
ah
rs
rs
rs
rs
rs
ah
ah
ah
@@ -33039,10 +33045,10 @@ Rx
ry
WO
op
ah
ah
ah
ah
rs
rs
rs
rs
ah
ah
ah
@@ -33296,9 +33302,9 @@ sa
sa
sa
op
ah
ah
ah
rs
rs
rs
ah
ah
ah
@@ -33553,8 +33559,8 @@ TA
sa
Xf
op
ah
ah
rs
rs
ah
ah
ah
@@ -33810,8 +33816,8 @@ TA
sa
sa
op
ah
ah
rs
rs
ah
ah
ah
@@ -37651,8 +37657,8 @@ ah
ah
ah
ah
ah
ah
rs
rs
op
sa
Ho
@@ -37908,8 +37914,8 @@ ah
ah
ah
ah
ah
ah
rs
rs
op
ET
HY
@@ -38165,18 +38171,18 @@ ah
ah
ah
ah
ah
ah
rs
rs
op
op
Iq
op
op
ah
ah
ah
ah
ah
rs
rs
rs
rs
rs
ah
ah
ah
@@ -38422,19 +38428,19 @@ ah
ah
ah
ah
ah
ah
ah
rs
rs
rs
op
Iv
op
ah
ah
ah
ah
ah
ah
ah
rs
rs
rs
rs
rs
rs
rs
ah
ah
ah
@@ -38680,18 +38686,18 @@ ah
ah
ah
ah
ah
ah
rs
rs
op
Ho
op
ah
ah
ah
ah
ah
ah
ah
rs
rs
sL
rs
rs
rs
rs
ah
ah
ah
@@ -38937,18 +38943,18 @@ ah
ah
ah
ah
ah
ah
sL
rs
op
Ho
op
ah
ah
ah
ah
ah
ah
ah
rs
sL
sL
sL
rs
rs
rs
ah
ah
ah
@@ -39193,21 +39199,21 @@ ah
ah
ah
ah
ah
ah
ah
sL
sL
rs
op
Ho
op
ah
ah
ah
ah
ah
ah
ah
ah
ah
rs
sL
sL
sL
rs
rs
rs
rs
rs
ah
ah
ah
@@ -39444,26 +39450,26 @@ ah
ah
ah
ah
rs
rs
rs
ah
ah
ah
ah
ah
ah
ah
ah
ah
rs
rs
er
IB
er
ah
ah
ah
ah
ah
ah
ah
ah
rs
sL
sL
rs
rs
rs
rs
rs
ah
ah
ah
@@ -39700,24 +39706,24 @@ ah
ah
ah
ah
rs
rs
rs
rs
rs
ah
ah
ah
ah
ah
ah
ah
ah
ah
ah
rs
rs
er
IB
er
ah
ah
ah
ah
ah
rs
sL
sL
rs
rs
ah
ah
ah
@@ -39957,24 +39963,24 @@ ah
ah
ah
ah
ah
rs
eZ
fB
er
rs
ah
ah
ah
ah
ah
ah
rs
rs
er
IB
er
ah
ah
ah
ah
ah
rs
rs
sL
sL
rs
ah
ah
ah
@@ -40213,25 +40219,25 @@ ah
ah
ah
ah
ah
ah
rs
rs
er
fC
er
rs
rs
ah
ah
ah
ah
ah
ah
rs
rs
er
IF
er
ah
ah
ah
ah
ah
rs
rs
sL
sL
rs
ah
ah
ah
@@ -40470,25 +40476,25 @@ ah
ah
ah
ah
ah
rs
er
er
fD
er
er
rs
ah
ah
ah
ah
rs
rs
Be
er
IK
er
er
ah
ah
ah
ah
rs
rs
rs
rs
ah
ah
ah
@@ -40743,8 +40749,8 @@ IM
gS
er
eq
ah
ah
rs
rs
ah
ah
ah
@@ -40983,7 +40989,7 @@ ah
ah
ah
ah
ah
rs
eq
eH
fb
@@ -41000,8 +41006,8 @@ IB
fC
Nt
eq
ah
ah
rs
rs
ah
ah
ah
@@ -41240,7 +41246,7 @@ ah
ah
ah
ah
ah
rs
er
eI
fc
@@ -41497,7 +41503,7 @@ ah
ah
ah
ah
ah
rs
er
eJ
fd
@@ -41774,8 +41780,8 @@ er
Tk
NK
er
ah
ah
rs
rs
ah
ah
ah
@@ -42009,7 +42015,7 @@ ah
ah
ah
ah
ah
rs
dW
ei
es
@@ -42031,9 +42037,9 @@ Rf
Tn
NP
VC
ah
ah
ah
rs
rs
rs
ah
ah
ah
@@ -42265,8 +42271,8 @@ ah
ah
ah
ah
ah
ah
rs
rs
dX
ej
et
@@ -42288,8 +42294,8 @@ er
To
UJ
er
ah
ah
rs
rs
ah
ah
ah
@@ -42522,8 +42528,8 @@ ah
ah
ah
ah
ah
ah
rs
rs
dX
ej
eu
@@ -42780,7 +42786,7 @@ ah
ah
ah
ah
ah
rs
dW
ek
ew
@@ -44069,9 +44075,9 @@ ah
ah
ah
ex
ah
ah
ah
rs
rs
rs
ex
ah
ah
@@ -44324,13 +44330,13 @@ ah
ah
ah
ah
ah
ah
ah
ah
ah
ah
ah
rs
rs
rs
rs
rs
rs
rs
ah
ah
ah
@@ -44581,13 +44587,13 @@ ah
ah
ah
ah
ah
ah
ah
ah
ah
ah
ah
rs
rs
rs
rs
rs
rs
rs
ah
ah
ah
@@ -44839,11 +44845,11 @@ ah
ah
ah
ah
ah
ah
ah
ah
ah
rs
rs
rs
rs
rs
ah
ah
ah
@@ -45097,9 +45103,9 @@ ah
ah
ah
ah
ah
ah
ah
rs
rs
rs
ah
ah
ah
@@ -5,6 +5,9 @@
"b" = (
/turf/closed/mineral/random/high_chance/snow,
/area/icemoon/underground/unexplored/rivers)
"c" = (
/turf/open/floor/plating/asteroid/snow/icemoon,
/area/icemoon/underground/unexplored/rivers)
"d" = (
/turf/closed/wall,
/area/icemoon/underground/explored)
@@ -19,6 +22,9 @@
/obj/item/gps/mining,
/turf/open/floor/plating/asteroid/snow/icemoon,
/area/icemoon/underground/explored)
"G" = (
/turf/open/floor/plating/asteroid/snow/icemoon,
/area/mine/maintenance)
"N" = (
/obj/item/flashlight/lantern{
on = 1
@@ -33,6 +39,22 @@
/obj/structure/ladder,
/turf/open/floor/plating/asteroid/snow/icemoon,
/area/icemoon/underground/explored)
"X" = (
/obj/machinery/telecomms/relay/preset/mining,
/obj/machinery/bluespace_beacon,
/obj/structure/window/reinforced{
dir = 1
},
/obj/structure/window/reinforced{
dir = 4
},
/obj/structure/window/reinforced,
/obj/machinery/door/window/eastright{
dir = 8;
req_access_txt = "48"
},
/turf/open/floor/circuit,
/area/icemoon/underground/explored)
(1,1,1) = {"
a
@@ -39499,9 +39521,9 @@ a
a
a
a
a
a
a
c
c
c
a
a
a
@@ -40011,13 +40033,13 @@ a
a
a
a
a
c
e
i
h
h
e
a
c
a
a
a
@@ -40268,13 +40290,13 @@ a
a
a
a
a
c
h
h
T
h
h
a
c
a
a
a
@@ -40525,13 +40547,13 @@ a
a
a
a
a
c
e
N
h
h
G
e
a
c
a
a
a
@@ -40786,7 +40808,7 @@ a
d
O
h
e
X
d
a
a
@@ -41041,9 +41063,9 @@ a
a
a
a
a
a
a
c
c
c
a
a
a
File diff suppressed because it is too large Load Diff
@@ -200,13 +200,15 @@
/datum/dynamic_ruleset/latejoin/heretic_smuggler
name = "Heretic Smuggler"
antag_datum = /datum/antagonist/heretic
antag_flag = ROLE_HERETIC
antag_flag = "latejoin_heretic"
protected_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster")
restricted_roles = list("AI","Cyborg")
required_candidates = 1
weight = 4
cost = 10
requirements = list(40,30,20,10,10,10,10,10,10,10)
cost = 25
requirements = list(60,60,60,55,50,50,50,50,50,50)
high_population_requirement = 50
property_weights = list("story_potential" = 1, "trust" = -1, "chaos" = 2, "extended" = -1, "valid" = 2)
repeatable = TRUE
//////////////////////////////////////////////
@@ -151,16 +151,18 @@
/datum/dynamic_ruleset/roundstart/heretics
name = "Heretics"
antag_flag = ROLE_HERETIC
antag_flag = "heretic"
antag_datum = /datum/antagonist/heretic
protected_roles = list("Prisoner","Security Officer", "Warden", "Detective", "Head of Security", "Captain")
restricted_roles = list("AI", "Cyborg")
required_candidates = 1
weight = 3
cost = 20
cost = 25
scaling_cost = 15
requirements = list(50,45,45,40,35,20,20,15,10,10)
requirements = list(60,60,60,55,50,50,50,50,50,50)
property_weights = list("story_potential" = 1, "trust" = -1, "chaos" = 2, "extended" = -1, "valid" = 2)
antag_cap = list(1,1,1,1,2,2,2,2,3,3)
high_population_requirement = 50
/datum/dynamic_ruleset/roundstart/heretics/pre_execute()
@@ -22,14 +22,14 @@
var/datum/game_mode/dynamic/mode = null // Cached as soon as it's made, by dynamic.
/**
Property weights are:
Property weights are added to the config weight of the ruleset. They are:
"story_potential" -- essentially how many different ways the antag can be played.
"trust" -- How much it makes the crew trust each other. Negative values means they're suspicious. Team antags are like this.
"chaos" -- How chaotic it makes the round. Has some overlap with "valid" and somewhat contradicts "extended".
"valid" -- How likely the non-antag-enemy crew are to get involved, e.g. nukies encouraging the warden to
let everyone into the armory, wizard moving around and being a nuisance, nightmare busting lights.
"extended" -- How much the antag is conducive to a long round. Nukies and cults are bad for this; Wizard is less bad; and so on.
"conversion" -- Basically a bool. Conversion antags, well, convert. It's its own class for a good reason.
"conversion" -- Basically a bool. Conversion antags, well, convert. It's in its own class 'cause people kinda hate conversion.
*/
/datum/dynamic_storyteller/proc/start_injection_cooldowns()
@@ -126,8 +126,9 @@ Property weights are:
for(var/property in property_weights)
if(property in rule.property_weights) // just treat it as 0 if it's not in there
property_weight += rule.property_weights[property] * property_weights[property]
if(property_weight > 0)
drafted_rules[rule] = rule.get_weight() * property_weight * rule.weight_mult
var/calced_weight = (rule.get_weight() + property_weight) * rule.weight_mult
if(calced_weight > 0) // negatives in the list might cause problems
drafted_rules[rule] = calced_weight
return drafted_rules
/datum/dynamic_storyteller/proc/midround_draft()
@@ -144,21 +145,24 @@ Property weights are:
for(var/property in property_weights)
if(property in rule.property_weights) // just treat it as 0 if it's not in there
property_weight += rule.property_weights[property] * property_weights[property]
if(property_weight > 0)
var/threat_weight = 1
if(!(rule.flags & TRAITOR_RULESET) || (rule.flags & MINOR_RULESET)) // makes the traitor rulesets always possible anyway
var/cost_difference = abs(rule.cost-(mode.threat_level-mode.threat))
/* Basically, the closer the cost is to the current threat-level-away-from-threat, the more likely it is to
pick this particular ruleset.
Let's use a toy example: there's 60 threat level and 10 threat spent.
We want to pick a ruleset that's close to that, so we run the below equation, on two rulesets.
Ruleset 1 has 30 cost, ruleset 2 has 5 cost.
When we do the math, ruleset 1's threat_weight is 0.538, and ruleset 2's is 0.238, meaning ruleset 1
is 2.26 times as likely to be picked, all other things considered.
Of course, we don't want it to GUARANTEE the closest, that's no fun, so it's just a weight.
*/
threat_weight = abs(1-abs(1-LOGISTIC_FUNCTION(2,0.05,cost_difference,0)))
drafted_rules[rule] = rule.get_weight() * property_weight * rule.weight_mult * threat_weight
var/threat_weight = 1
if(!(rule.flags & TRAITOR_RULESET) || (rule.flags & MINOR_RULESET)) // makes the traitor rulesets always possible anyway
var/cost_difference = rule.cost-(mode.threat_level-mode.threat)
/* Basically, the closer the cost is to the current threat-level-away-from-threat, the more likely it is to
pick this particular ruleset.
Let's use a toy example: there's 60 threat level and 10 threat spent.
We want to pick a ruleset that's close to that, so we run the below equation, on two rulesets.
Ruleset 1 has 30 cost, ruleset 2 has 5 cost.
When we do the math, ruleset 1's threat_weight is 0.538, and ruleset 2's is 0.238, meaning ruleset 1
is 2.26 times as likely to be picked, all other things considered.
Of course, we don't want it to GUARANTEE the closest, that's no fun, so it's just a weight.
*/
threat_weight = abs(1-abs(1-LOGISTIC_FUNCTION(2,0.05,abs(cost_difference),0)))
if(cost_difference > 0)
threat_weight /= (1+(cost_difference*0.1))
var/calced_weight = (rule.get_weight() + property_weight) * rule.weight_mult * threat_weight
if(calced_weight > 0)
drafted_rules[rule] = calced_weight
return drafted_rules
/datum/dynamic_storyteller/proc/latejoin_draft(mob/living/carbon/human/newPlayer)
@@ -180,12 +184,15 @@ Property weights are:
for(var/property in property_weights)
if(property in rule.property_weights)
property_weight += rule.property_weights[property] * property_weights[property]
if(property_weight > 0)
var/threat_weight = 1
if(!(rule.flags & TRAITOR_RULESET) || (rule.flags & MINOR_RULESET))
var/cost_difference = abs(rule.cost-(mode.threat_level-mode.threat))
threat_weight = 1-abs(1-(LOGISTIC_FUNCTION(2,0.05,cost_difference,0)))
drafted_rules[rule] = rule.get_weight() * property_weight * rule.weight_mult * threat_weight
var/threat_weight = 1
if(!(rule.flags & TRAITOR_RULESET) || (rule.flags & MINOR_RULESET))
var/cost_difference = rule.cost-(mode.threat_level-mode.threat)
threat_weight = 1-abs(1-(LOGISTIC_FUNCTION(2,0.05,abs(cost_difference),0)))
if(cost_difference > 0)
threat_weight /= (1+(cost_difference*0.1))
var/calced_weight = (rule.get_weight() + property_weight) * rule.weight_mult * threat_weight
if(calced_weight > 0)
drafted_rules[rule] = calced_weight
return drafted_rules
/datum/dynamic_storyteller/proc/event_draft()
@@ -196,8 +203,9 @@ Property weights are:
for(var/property in property_weights)
if(property in rule.property_weights)
property_weight += rule.property_weights[property] * property_weights[property]
if(property_weight > 0)
drafted_rules[rule] = rule.get_weight() + property_weight * rule.weight_mult
var/calced_weight = (rule.get_weight() + property_weight) * rule.weight_mult
if(calced_weight > 0)
drafted_rules[rule] = calced_weight
return drafted_rules
@@ -327,12 +335,6 @@ Property weights are:
flags = USE_PREV_ROUND_WEIGHTS
property_weights = list("story_potential" = 2)
/datum/dynamic_storyteller/story/calculate_threat()
var/current_time = (world.time / SSautotransfer.targettime)*180
mode.threat_level = round((mode.initial_threat_level*(sin(current_time)/2)+0.75),0.1)
return ..()
/datum/dynamic_storyteller/classic
name = "Classic"
config_tag = "classic"
+4 -6
View File
@@ -1,12 +1,10 @@
/obj/mecha/proc/get_armour_facing(relative_dir)
switch(relative_dir)
if(0) // BACKSTAB!
if(180) // BACKSTAB!
return facing_modifiers[BACK_ARMOUR]
if(45, 90, 270, 315)
return facing_modifiers[SIDE_ARMOUR]
if(225, 180, 135)
if(0, 45) // direct or 45 degrees off
return facing_modifiers[FRONT_ARMOUR]
return 1 //always return non-0
return facing_modifiers[SIDE_ARMOUR] //if its not a front hit or back hit then assume its from the side
/obj/mecha/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir)
. = ..()
@@ -43,7 +41,7 @@
break
if(attack_dir)
var/facing_modifier = get_armour_facing(dir2angle(attack_dir) - dir2angle(src))
var/facing_modifier = get_armour_facing(abs(dir2angle(dir) - dir2angle(attack_dir)))
booster_damage_modifier /= facing_modifier
booster_deflection_modifier *= facing_modifier
if(prob(deflect_chance * booster_deflection_modifier))
@@ -251,7 +251,8 @@
var/mob/camera/eminence/E = owner
E.eminence_help()
//Returns to the Ark
/*
//Returns to the Ark - Commented out and replaced with obelisk_jump
/datum/action/innate/eminence/ark_jump
name = "Return to Ark"
desc = "Warps you to the Ark."
@@ -265,6 +266,40 @@
flash_color(owner, flash_color = "#AF0AAF", flash_time = 25)
else
to_chat(owner, "<span class='warning'>There is no Ark!</span>")
*/
//Warps to a chosen Obelisk
/datum/action/innate/eminence/obelisk_jump
name = "Warp to Obelisk"
desc = "Warps to a chosen clockwork obelisk."
button_icon_state = "Abscond"
/datum/action/innate/eminence/obelisk_jump/Activate()
var/list/possible_targets = list()
var/list/warpnames = list()
for(var/obj/structure/destructible/clockwork/powered/clockwork_obelisk/O in GLOB.all_clockwork_objects)
if(!O.Adjacent(owner) && O.anchored)
var/area/A = get_area(O)
var/locname = initial(A.name)
possible_targets[avoid_assoc_duplicate_keys("[locname] [O.name]", warpnames)] = O
if(!possible_targets.len)
to_chat(owner, "<span class='warning'>There are no Obelisks to warp to!</span>")
return
var/target_key = input(owner, "Choose an Obelisk to warp to.", "Obelisk Warp") as null|anything in possible_targets
var/obj/structure/destructible/clockwork/powered/clockwork_obelisk/target = possible_targets[target_key]
if(!target_key || !owner)
return
if(!target)
to_chat(owner, "<span class='warning'>That Obelisk does no longer exist!</span>")
return
owner.forceMove(get_turf(target))
owner.playsound_local(owner, 'sound/magic/magic_missile.ogg', 50, TRUE)
flash_color(owner, flash_color = "#AF0AAF", flash_time = 25)
//Warps to the Station
/datum/action/innate/eminence/station_jump
@@ -6,6 +6,7 @@
job_rank = ROLE_HERETIC
antag_hud_type = ANTAG_HUD_HERETIC
antag_hud_name = "heretic"
threat = 10
var/give_equipment = TRUE
var/list/researched_knowledge = list()
var/total_sacrifices = 0
@@ -208,6 +209,14 @@
/datum/antagonist/heretic/proc/get_all_knowledge()
return researched_knowledge
/datum/antagonist/heretic/threat()
. = ..()
for(var/X in researched_knowledge)
var/datum/eldritch_knowledge/EK = researched_knowledge[X]
. += EK.cost
if(ascended)
. += 20
////////////////
// Objectives //
////////////////
@@ -0,0 +1,4 @@
author: "Putnam3145"
delete-after: True
changes:
- bugfix: "Dynamic storytellers now calculate property weights properly."
@@ -0,0 +1,4 @@
author: "lolman360"
delete-after: True
changes:
- bugfix: "shuttle engine/heater sprites now face the right way"
@@ -0,0 +1,5 @@
author: "DeltaFire15"
delete-after: True
changes:
- rscdel: "teleport-to-ark ability of the eminence, commented out"
- rscadd: "teleport-to-obelisk ability for the eminence"
@@ -0,0 +1,4 @@
author: "Couls, ported by NecromancerAnne"
delete-after: True
changes:
- code_imp: "cleans up mech backstabbing code"
Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 57 KiB