a few last minute changes from TG
also changes His Grace from 25 to 10 requirments
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
FROM tgstation/byond:512.1441 as base
|
||||
FROM tgstation/byond:512.1448 as base
|
||||
#above version must be the same as the one in dependencies.sh
|
||||
|
||||
FROM base as build_base
|
||||
@@ -14,9 +14,10 @@ WORKDIR /rust_g
|
||||
|
||||
RUN apt-get install -y --no-install-recommends \
|
||||
libssl-dev \
|
||||
rustc \
|
||||
cargo \
|
||||
pkg-config \
|
||||
curl \
|
||||
gcc-multilib \
|
||||
&& curl https://sh.rustup.rs -sSf | sh -s -- -y --default-host i686-unknown-linux-gnu \
|
||||
&& git init \
|
||||
&& git remote add origin https://github.com/tgstation/rust-g
|
||||
|
||||
@@ -87,4 +88,4 @@ RUN ln -s /tgstation/libBSQL.so /root/.byond/bin/libBSQL.so
|
||||
|
||||
VOLUME [ "/tgstation/config", "/tgstation/data" ]
|
||||
|
||||
ENTRYPOINT [ "DreamDaemon", "tgstation.dmb", "-port", "1337", "-trusted", "-close", "-verbose" ]
|
||||
ENTRYPOINT [ "DreamDaemon", "tgstation.dmb", "-port", "1337", "-trusted", "-close", "-verbose" ]
|
||||
@@ -49,6 +49,7 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204
|
||||
//Movement Types
|
||||
#define GROUND (1<<0)
|
||||
#define FLYING (1<<1)
|
||||
#define VENTCRAWLING (1<<2)
|
||||
|
||||
// Flags for reagents
|
||||
#define REAGENT_NOREACT (1<<0)
|
||||
|
||||
@@ -44,17 +44,33 @@
|
||||
|
||||
//EVENT CODES
|
||||
|
||||
#define TGS_EVENT_PORT_SWAP -2 //before a port change is about to happen, extra parameter is new port
|
||||
#define TGS_EVENT_REBOOT_MODE_CHANGE -1 //before a reboot mode change, extras parameters are the current and new reboot mode enums
|
||||
|
||||
//TODO
|
||||
|
||||
//OTHER ENUMS
|
||||
|
||||
#define TGS_REBOOT_MODE_NORMAL 0
|
||||
#define TGS_REBOOT_MODE_SHUTDOWN 1
|
||||
#define TGS_REBOOT_MODE_RESTART 2
|
||||
|
||||
#define TGS_SECURITY_TRUSTED 0
|
||||
#define TGS_SECURITY_SAFE 1
|
||||
#define TGS_SECURITY_ULTRASAFE 2
|
||||
|
||||
//REQUIRED HOOKS
|
||||
|
||||
//Call this somewhere in /world/New() that is always run
|
||||
//event_handler: optional user defined event handler. The default behaviour is to broadcast the event in english to all connected admin channels
|
||||
/world/proc/TgsNew(datum/tgs_event_handler/event_handler)
|
||||
//minimum_required_security_level: The minimum required security level to run the game in which the DMAPI is integrated
|
||||
/world/proc/TgsNew(datum/tgs_event_handler/event_handler, minimum_required_security_level = TGS_SECURITY_ULTRASAFE)
|
||||
return
|
||||
|
||||
//Call this when your initializations are complete and your game is ready to play before any player interactions happen
|
||||
//This may use world.sleep_offline to make this happen so ensure no changes are made to it while this call is running
|
||||
//Most importantly, before this point, note that any static files or directories may be in use by another server. Your code should account for this
|
||||
//This function should not be called before ..() in /world/New()
|
||||
/world/proc/TgsInitializationComplete()
|
||||
return
|
||||
|
||||
@@ -88,20 +104,22 @@
|
||||
/datum/tgs_chat_channel
|
||||
var/id //internal channel representation
|
||||
var/friendly_name //user friendly channel name
|
||||
var/server_name //server name the channel resides on
|
||||
var/provider_name //chat provider for the channel
|
||||
var/connection_name //the name of the configured chat connection
|
||||
var/is_admin_channel //if the server operator has marked this channel for game admins only
|
||||
var/is_private_channel //if this is a private chat channel
|
||||
var/custom_tag //user defined string associated with channel
|
||||
|
||||
//represents a chat user
|
||||
/datum/tgs_chat_user
|
||||
var/id //Internal user representation
|
||||
var/id //Internal user representation, requires channel to be unique
|
||||
var/friendly_name //The user's public name
|
||||
var/mention //The text to use to ping this user in a message
|
||||
var/datum/tgs_chat_channel/channel //The /datum/tgs_chat_channel this user was from
|
||||
|
||||
//user definable callback for handling events
|
||||
/datum/tgs_event_handler/proc/HandleEvent(event_code)
|
||||
//extra parameters may be specified depending on the event
|
||||
/datum/tgs_event_handler/proc/HandleEvent(event_code, ...)
|
||||
set waitfor = FALSE
|
||||
return
|
||||
|
||||
//user definable chat command
|
||||
@@ -142,6 +160,10 @@
|
||||
/world/proc/TgsRevision()
|
||||
return
|
||||
|
||||
//Get the current BYOND security level
|
||||
/world/proc/TgsSecurityLevel()
|
||||
return
|
||||
|
||||
//Gets a list of active `/datum/tgs_revision_information/test_merge`s
|
||||
/world/proc/TgsTestMerges()
|
||||
return
|
||||
@@ -199,4 +221,4 @@ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
|
||||
ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
*/
|
||||
@@ -19,7 +19,8 @@
|
||||
/obj/effect/temp_visual,
|
||||
/obj/effect/light_emitter/tendril,
|
||||
/obj/effect/collapse,
|
||||
/obj/effect/particle_effect/ion_trails
|
||||
/obj/effect/particle_effect/ion_trails,
|
||||
/obj/effect/dummy/phased_mob
|
||||
))
|
||||
|
||||
/datum/component/chasm/Initialize(turf/target)
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
var/mob/living/LM = parent
|
||||
var/v = volume
|
||||
var/e = e_range
|
||||
if(!T.footstep || LM.lying || !LM.canmove || LM.resting || LM.buckled || LM.throwing)
|
||||
if(!T.footstep || LM.lying || !LM.canmove || LM.resting || LM.buckled || LM.throwing || LM.movement_type & (VENTCRAWLING | FLYING))
|
||||
return
|
||||
if(iscarbon(LM))
|
||||
var/mob/living/carbon/C = LM
|
||||
|
||||
@@ -157,7 +157,7 @@
|
||||
.["admins"] = presentmins.len + afkmins.len //equivalent to the info gotten from adminwho
|
||||
.["gamestate"] = SSticker.current_state
|
||||
|
||||
.["map_name"] = SSmapping.config.map_name
|
||||
.["map_name"] = SSmapping.config?.map_name || "Loading..."
|
||||
|
||||
if(key_valid)
|
||||
.["active_players"] = get_active_player_count()
|
||||
|
||||
@@ -1199,7 +1199,7 @@
|
||||
optionlist = list("Standard", "Public", "Engineering", "Atmospherics", "Security", "Command", "Medical", "Research", "Freezer", "Science", "Virology", "Mining", "Maintenance", "External", "External Maintenance")
|
||||
|
||||
var/paintjob = input(user, "Please select a paintjob for this airlock.") in optionlist
|
||||
if((!in_range(src, usr) && src.loc != usr) || !W.use(user))
|
||||
if((!in_range(src, usr) && src.loc != usr) || !W.use_paint(user))
|
||||
return
|
||||
switch(paintjob)
|
||||
if("Standard")
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
var/prev_bloodthirst = HIS_GRACE_SATIATED
|
||||
var/force_bonus = 0
|
||||
var/ascended = FALSE
|
||||
var/victims_needed = 25
|
||||
var/victims_needed = 10 //Citadel change from 25 to 10
|
||||
var/ascend_bonus = 15
|
||||
|
||||
/obj/item/his_grace/Initialize()
|
||||
|
||||
@@ -101,6 +101,9 @@
|
||||
toolspeed = 0.1
|
||||
random_color = FALSE
|
||||
|
||||
/obj/item/screwdriver/abductor/get_belt_overlay()
|
||||
return mutable_appearance('icons/obj/clothing/belt_overlays.dmi', "screwdriver_nuke")
|
||||
|
||||
/obj/item/screwdriver/power
|
||||
name = "hand drill"
|
||||
desc = "A simple powered hand drill. It's fitted with a screw bit."
|
||||
|
||||
@@ -362,10 +362,6 @@
|
||||
icon_state = "lavarocks"
|
||||
desc = "A pile of rocks."
|
||||
|
||||
/obj/structure/flora/rock/pile/Initialize()
|
||||
. = ..()
|
||||
icon_state = "[icon_state][rand(1,3)]"
|
||||
|
||||
//Jungle grass
|
||||
|
||||
/obj/structure/flora/grass/jungle
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
msg = copytext(sanitize(msg), 1, MAX_MESSAGE_LEN)
|
||||
if(!msg)
|
||||
return
|
||||
|
||||
msg = emoji_parse(msg)
|
||||
mob.log_talk(msg, LOG_ASAY)
|
||||
|
||||
msg = keywords_lookup(msg)
|
||||
|
||||
@@ -251,7 +251,7 @@
|
||||
|
||||
|
||||
/obj/item/antag_spawner/slaughter_demon/spawn_antag(client/C, turf/T, kind = "", datum/mind/user)
|
||||
var/obj/effect/dummy/slaughter/holder = new /obj/effect/dummy/slaughter(T)
|
||||
var/obj/effect/dummy/phased_mob/slaughter/holder = new /obj/effect/dummy/phased_mob/slaughter(T)
|
||||
var/mob/living/simple_animal/slaughter/S = new demon_type(holder)
|
||||
S.holder = holder
|
||||
S.key = C.key
|
||||
|
||||
@@ -219,7 +219,7 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master",
|
||||
H.set_species(/datum/species/human, 1)
|
||||
H.regenerate_icons()
|
||||
give_appropriate_spells()
|
||||
if(istype(owner.current.loc, /obj/effect/dummy/slaughter/))
|
||||
if(istype(owner.current.loc, /obj/effect/dummy/phased_mob/slaughter/))
|
||||
owner.current.forceMove(get_turf(owner.current))//Fixes dying while jaunted leaving you permajaunted.
|
||||
form = BASIC_DEVIL
|
||||
|
||||
@@ -304,7 +304,7 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master",
|
||||
sound_to_playing_players('sound/hallucinations/veryfar_noise.ogg')
|
||||
give_appropriate_spells()
|
||||
D.convert_to_archdevil()
|
||||
if(istype(D.loc, /obj/effect/dummy/slaughter/))
|
||||
if(istype(D.loc, /obj/effect/dummy/phased_mob/slaughter/))
|
||||
D.forceMove(get_turf(D))//Fixes dying while jaunted leaving you permajaunted.
|
||||
var/area/A = get_area(owner.current)
|
||||
if(A)
|
||||
@@ -430,7 +430,7 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master",
|
||||
update_hud()
|
||||
if(body)
|
||||
body.revive(TRUE, TRUE) //Adminrevive also recovers organs, preventing someone from resurrecting without a heart.
|
||||
if(istype(body.loc, /obj/effect/dummy/slaughter/))
|
||||
if(istype(body.loc, /obj/effect/dummy/phased_mob/slaughter/))
|
||||
body.forceMove(get_turf(body))//Fixes dying while jaunted leaving you permajaunted.
|
||||
if(istype(body, /mob/living/carbon/true_devil))
|
||||
var/mob/living/carbon/true_devil/D = body
|
||||
|
||||
@@ -51,8 +51,8 @@
|
||||
..()
|
||||
var/obj/effect/proc_holder/spell/bloodcrawl/bloodspell = new
|
||||
AddSpell(bloodspell)
|
||||
if(istype(loc, /obj/effect/dummy/slaughter))
|
||||
bloodspell.phased = 1
|
||||
if(istype(loc, /obj/effect/dummy/phased_mob/slaughter))
|
||||
bloodspell.phased = TRUE
|
||||
|
||||
/mob/living/simple_animal/slaughter/Life()
|
||||
..()
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
message_admins("No valid spawn locations found, aborting...")
|
||||
return MAP_ERROR
|
||||
|
||||
var/obj/effect/dummy/slaughter/holder = new /obj/effect/dummy/slaughter((pick(spawn_locs)))
|
||||
var/obj/effect/dummy/phased_mob/slaughter/holder = new /obj/effect/dummy/phased_mob/slaughter((pick(spawn_locs)))
|
||||
var/mob/living/simple_animal/slaughter/S = new (holder)
|
||||
S.holder = holder
|
||||
player_mind.transfer_to(S)
|
||||
|
||||
@@ -444,13 +444,13 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache())
|
||||
PLEASE DO NOT REMOVE THIS CODE. the commenting is here only for a performance increase.
|
||||
enabling these checks should be as easy as possible and the fact that they are disabled should be as clear as possible
|
||||
|
||||
var/list/max_reqs = reaction.max_requirements.Copy()
|
||||
var/list/max_reqs = reaction.max_requirements
|
||||
if((max_reqs["TEMP"] && temp > max_reqs["TEMP"]) \
|
||||
|| (max_reqs["ENER"] && ener > max_reqs["ENER"]))
|
||||
continue
|
||||
max_reqs -= "TEMP"
|
||||
max_reqs -= "ENER"
|
||||
for(var/id in max_reqs)
|
||||
if(id == "TEMP" || id == "ENER")
|
||||
continue
|
||||
if(cached_gases[id] && cached_gases[id][MOLES] > max_reqs[id])
|
||||
continue reaction_loop
|
||||
//at this point, all requirements for the reaction are satisfied. we can now react()
|
||||
|
||||
@@ -455,6 +455,7 @@
|
||||
//Replace miasma with oxygen
|
||||
var/cleaned_air = min(cached_gases[/datum/gas/miasma][MOLES], 20 + (air.temperature - FIRE_MINIMUM_TEMPERATURE_TO_EXIST - 70) / 20)
|
||||
cached_gases[/datum/gas/miasma][MOLES] -= cleaned_air
|
||||
ASSERT_GAS(/datum/gas/oxygen,air)
|
||||
cached_gases[/datum/gas/oxygen][MOLES] += cleaned_air
|
||||
|
||||
//Possibly burning a bit of organic matter through maillard reaction, so a *tiny* bit more heat would be understandable
|
||||
|
||||
@@ -480,6 +480,7 @@
|
||||
if("eject")
|
||||
if(holding)
|
||||
if(valve_open)
|
||||
message_admins("[ADMIN_LOOKUPFLW(usr)] removed [holding] from [src] with valve still open at [ADMIN_VERBOSEJMP(src)] releasing contents into the <span class='boldannounce'>air</span><br>.")
|
||||
investigate_log("[key_name(usr)] removed the [holding], leaving the valve open and transferring into the <span class='boldannounce'>air</span><br>", INVESTIGATE_ATMOS)
|
||||
holding.forceMove(get_turf(src))
|
||||
holding = null
|
||||
|
||||
@@ -2039,8 +2039,6 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
|
||||
character.backbag = backbag
|
||||
|
||||
character.dna.features = features.Copy()
|
||||
character.dna.real_name = character.real_name
|
||||
var/datum/species/chosen_species
|
||||
if(!roundstart_checks || (pref_species.id in GLOB.roundstart_races))
|
||||
chosen_species = pref_species.type
|
||||
@@ -2048,7 +2046,17 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
chosen_species = /datum/species/human
|
||||
pref_species = new /datum/species/human
|
||||
save_character()
|
||||
|
||||
character.set_species(chosen_species, icon_update = FALSE, pref_load = TRUE)
|
||||
character.dna.features = features.Copy()
|
||||
character.dna.real_name = character.real_name
|
||||
|
||||
if("tail_lizard" in pref_species.default_features)
|
||||
character.dna.species.mutant_bodyparts |= "tail_lizard"
|
||||
else if("mam_tail" in pref_species.default_features)
|
||||
character.dna.species.mutant_bodyparts |= "mam_tail"
|
||||
else if("xenotail" in pref_species.default_features)
|
||||
character.dna.species.mutant_bodyparts |= "xenotail"
|
||||
|
||||
if(icon_updates)
|
||||
character.update_body()
|
||||
|
||||
@@ -1096,6 +1096,8 @@ GLOBAL_LIST_INIT(hallucination_list, list(
|
||||
|
||||
/obj/effect/hallucination/danger/chasm/Crossed(atom/movable/AM)
|
||||
if(AM == target)
|
||||
if(istype(target, /obj/effect/dummy/phased_mob))
|
||||
return
|
||||
to_chat(target, "<span class='userdanger'>You fall into the chasm!</span>")
|
||||
target.Knockdown(40)
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, target, "<span class='notice'>It's surprisingly shallow.</span>"), 15)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/effect/dummy/slaughter //Can't use the wizard one, blocked by jaunt/slow
|
||||
/obj/effect/dummy/phased_mob/slaughter //Can't use the wizard one, blocked by jaunt/slow
|
||||
name = "water"
|
||||
icon = 'icons/effects/effects.dmi'
|
||||
icon_state = "nothing"
|
||||
@@ -8,15 +8,15 @@
|
||||
invisibility = 60
|
||||
resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
|
||||
|
||||
/obj/effect/dummy/slaughter/relaymove(mob/user, direction)
|
||||
/obj/effect/dummy/phased_mob/slaughter/relaymove(mob/user, direction)
|
||||
forceMove(get_step(src,direction))
|
||||
|
||||
/obj/effect/dummy/slaughter/ex_act()
|
||||
/obj/effect/dummy/phased_mob/slaughter/ex_act()
|
||||
return
|
||||
/obj/effect/dummy/slaughter/bullet_act()
|
||||
/obj/effect/dummy/phased_mob/slaughter/bullet_act()
|
||||
return
|
||||
|
||||
/obj/effect/dummy/slaughter/singularity_act()
|
||||
/obj/effect/dummy/phased_mob/slaughter/singularity_act()
|
||||
return
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
playsound(get_turf(src), 'sound/magic/enter_blood.ogg', 100, 1, -1)
|
||||
// Extinguish, unbuckle, stop being pulled, set our location into the
|
||||
// dummy object
|
||||
var/obj/effect/dummy/slaughter/holder = new /obj/effect/dummy/slaughter(mobloc)
|
||||
var/obj/effect/dummy/phased_mob/slaughter/holder = new /obj/effect/dummy/phased_mob/slaughter(mobloc)
|
||||
src.ExtinguishMob()
|
||||
|
||||
// Keep a reference to whatever we're pulling, because forceMove()
|
||||
|
||||
@@ -91,8 +91,8 @@ Difficulty: Hard
|
||||
return INITIALIZE_HINT_QDEL //There can be only one
|
||||
var/obj/effect/proc_holder/spell/bloodcrawl/bloodspell = new
|
||||
AddSpell(bloodspell)
|
||||
if(istype(loc, /obj/effect/dummy/slaughter))
|
||||
bloodspell.phased = 1
|
||||
if(istype(loc, /obj/effect/dummy/phased_mob/slaughter))
|
||||
bloodspell.phased = TRUE
|
||||
internal = new/obj/item/gps/internal/bubblegum(src)
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/bubblegum/grant_achievement(medaltype,scoretype)
|
||||
|
||||
@@ -99,6 +99,7 @@ GLOBAL_LIST_INIT(ventcrawl_machinery, typecacheof(list(
|
||||
pipes_shown += A.pipe_vision_img
|
||||
if(client)
|
||||
client.images += A.pipe_vision_img
|
||||
movement_type |= VENTCRAWLING
|
||||
|
||||
|
||||
/mob/living/proc/remove_ventcrawl()
|
||||
@@ -106,6 +107,7 @@ GLOBAL_LIST_INIT(ventcrawl_machinery, typecacheof(list(
|
||||
for(var/image/current_image in pipes_shown)
|
||||
client.images -= current_image
|
||||
pipes_shown.len = 0
|
||||
movement_type &= ~VENTCRAWLING
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -525,7 +525,7 @@
|
||||
if(statpanel("Status"))
|
||||
if (client)
|
||||
stat(null, "Ping: [round(client.lastping, 1)]ms (Average: [round(client.avgping, 1)]ms)")
|
||||
stat(null, "Map: [SSmapping.config.map_name]")
|
||||
stat(null, "Map: [SSmapping.config?.map_name || "Loading..."]")
|
||||
var/datum/map_config/cached = SSmapping.next_map_config
|
||||
if(cached)
|
||||
stat(null, "Next Map: [cached.map_name]")
|
||||
|
||||
@@ -75,6 +75,7 @@
|
||||
K = src.key
|
||||
|
||||
var/spanned = src.say_quote(message, get_spans())
|
||||
message = emoji_parse(message)
|
||||
var/rendered = "<span class='game deadsay'><span class='prefix'>DEAD:</span> <span class='name'>[name]</span>[alt_name] <span class='message'>[emoji_parse(spanned)]</span></span>"
|
||||
log_talk(message, LOG_SAY, tag="DEAD")
|
||||
deadchat_broadcast(rendered, follow_target = src, speaker_key = K)
|
||||
|
||||
@@ -344,9 +344,10 @@
|
||||
flag = "magic"
|
||||
var/weld = TRUE
|
||||
var/created = FALSE //prevents creation of more then one locker if it has multiple hits
|
||||
var/locker_suck = TRUE
|
||||
|
||||
/obj/item/projectile/magic/locker/prehit(atom/A)
|
||||
if(ismob(A))
|
||||
if(ismob(A) && locker_suck)
|
||||
var/mob/M = A
|
||||
if(M.anti_magic_check())
|
||||
M.visible_message("<span class='warning'>[src] vanishes on contact with [A]!</span>")
|
||||
@@ -371,6 +372,7 @@
|
||||
return ..()
|
||||
|
||||
/obj/item/projectile/magic/locker/Destroy()
|
||||
locker_suck = FALSE
|
||||
for(var/atom/movable/AM in contents)
|
||||
AM.forceMove(get_turf(src))
|
||||
. = ..()
|
||||
@@ -410,11 +412,6 @@
|
||||
else
|
||||
addtimer(CALLBACK(src, .proc/decay), 15 SECONDS)
|
||||
|
||||
/obj/structure/closet/decay/contents_explosion(severity, target)
|
||||
for(var/atom/A in contents)
|
||||
A.ex_act(severity/2, target) //Difference is it does half the damage to contents from explosion, to make fireball not completely instakill
|
||||
CHECK_TICK
|
||||
|
||||
/obj/structure/closet/decay/proc/unmagify()
|
||||
icon_state = weakened_icon
|
||||
update_icon()
|
||||
@@ -509,6 +506,4 @@
|
||||
return
|
||||
var/turf/T = get_turf(target)
|
||||
for(var/i=0, i<50, i+=10)
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/explosion, T, -1, exp_heavy, exp_light, exp_flash, FALSE, FALSE, exp_fire), i)
|
||||
|
||||
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/explosion, T, -1, exp_heavy, exp_light, exp_flash, FALSE, FALSE, exp_fire), i)
|
||||
@@ -246,6 +246,17 @@
|
||||
if(total_cash >= threshold)
|
||||
break
|
||||
|
||||
if(AM.pulling)
|
||||
if(istype(AM.pulling, /obj/item/coin))
|
||||
var/obj/item/coin/C = AM.pulling
|
||||
total_cash += C.value
|
||||
counted_money += C
|
||||
|
||||
else if(istype(AM.pulling, /obj/item/stack/spacecash))
|
||||
var/obj/item/stack/spacecash/S = AM.pulling
|
||||
total_cash += S.value * S.amount
|
||||
counted_money += S
|
||||
|
||||
if(total_cash >= threshold)
|
||||
for(var/obj/I in counted_money)
|
||||
qdel(I)
|
||||
|
||||
@@ -104,7 +104,7 @@
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/infernal_jaunt/cast(list/targets, mob/living/user = usr)
|
||||
if(istype(user))
|
||||
if(istype(user.loc, /obj/effect/dummy/slaughter/))
|
||||
if(istype(user.loc, /obj/effect/dummy/phased_mob/slaughter/))
|
||||
if(valid_location(user))
|
||||
to_chat(user, "<span class='warning'>You are now phasing in.</span>")
|
||||
if(do_mob(user,user,150))
|
||||
@@ -145,7 +145,7 @@
|
||||
spawn_dust()
|
||||
visible_message("<span class='warning'>[src] disappears in a flashfire!</span>")
|
||||
playsound(get_turf(src), 'sound/magic/enter_blood.ogg', 100, 1, -1)
|
||||
var/obj/effect/dummy/slaughter/holder = new /obj/effect/dummy/slaughter(loc)
|
||||
var/obj/effect/dummy/phased_mob/slaughter/holder = new /obj/effect/dummy/phased_mob/slaughter(loc)
|
||||
ExtinguishMob()
|
||||
forceMove(holder)
|
||||
holder = holder
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/proc/do_jaunt(mob/living/target)
|
||||
target.notransform = 1
|
||||
var/turf/mobloc = get_turf(target)
|
||||
var/obj/effect/dummy/spell_jaunt/holder = new /obj/effect/dummy/spell_jaunt(mobloc)
|
||||
var/obj/effect/dummy/phased_mob/spell_jaunt/holder = new /obj/effect/dummy/phased_mob/spell_jaunt(mobloc)
|
||||
new jaunt_out_type(mobloc, target.dir)
|
||||
target.ExtinguishMob()
|
||||
target.forceMove(holder)
|
||||
@@ -62,7 +62,7 @@
|
||||
steam.set_up(10, 0, mobloc)
|
||||
steam.start()
|
||||
|
||||
/obj/effect/dummy/spell_jaunt
|
||||
/obj/effect/dummy/phased_mob/spell_jaunt
|
||||
name = "water"
|
||||
icon = 'icons/effects/effects.dmi'
|
||||
icon_state = "nothing"
|
||||
@@ -74,13 +74,13 @@
|
||||
invisibility = 60
|
||||
resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
|
||||
|
||||
/obj/effect/dummy/spell_jaunt/Destroy()
|
||||
/obj/effect/dummy/phased_mob/spell_jaunt/Destroy()
|
||||
// Eject contents if deleted somehow
|
||||
for(var/atom/movable/AM in src)
|
||||
AM.forceMove(get_turf(src))
|
||||
return ..()
|
||||
|
||||
/obj/effect/dummy/spell_jaunt/relaymove(var/mob/user, direction)
|
||||
/obj/effect/dummy/phased_mob/spell_jaunt/relaymove(var/mob/user, direction)
|
||||
if ((movedelay > world.time) || reappearing || !direction)
|
||||
return
|
||||
var/turf/newLoc = get_step(src,direction)
|
||||
@@ -97,7 +97,7 @@
|
||||
|
||||
forceMove(newLoc)
|
||||
|
||||
/obj/effect/dummy/spell_jaunt/ex_act(blah)
|
||||
return
|
||||
/obj/effect/dummy/spell_jaunt/bullet_act(blah)
|
||||
/obj/effect/dummy/phased_mob/spell_jaunt/ex_act(blah)
|
||||
return
|
||||
/obj/effect/dummy/phased_mob/spell_jaunt/bullet_act(blah)
|
||||
return
|
||||
@@ -15,8 +15,8 @@
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/shadowwalk/cast(list/targets,mob/living/user = usr)
|
||||
var/L = user.loc
|
||||
if(istype(user.loc, /obj/effect/dummy/shadow))
|
||||
var/obj/effect/dummy/shadow/S = L
|
||||
if(istype(user.loc, /obj/effect/dummy/phased_mob/shadow))
|
||||
var/obj/effect/dummy/phased_mob/shadow/S = L
|
||||
S.end_jaunt(FALSE)
|
||||
return
|
||||
else
|
||||
@@ -28,13 +28,13 @@
|
||||
user.SetStun(0, FALSE)
|
||||
user.SetKnockdown(0, FALSE)
|
||||
user.setStaminaLoss(0, 0)
|
||||
var/obj/effect/dummy/shadow/S2 = new(get_turf(user.loc))
|
||||
var/obj/effect/dummy/phased_mob/shadow/S2 = new(get_turf(user.loc))
|
||||
user.forceMove(S2)
|
||||
S2.jaunter = user
|
||||
else
|
||||
to_chat(user, "<span class='warning'>It isn't dark enough here!</span>")
|
||||
|
||||
/obj/effect/dummy/shadow
|
||||
/obj/effect/dummy/phased_mob/shadow
|
||||
name = "darkness"
|
||||
icon = 'icons/effects/effects.dmi'
|
||||
icon_state = "nothing"
|
||||
@@ -45,7 +45,7 @@
|
||||
invisibility = 60
|
||||
resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
|
||||
|
||||
/obj/effect/dummy/shadow/relaymove(mob/user, direction)
|
||||
/obj/effect/dummy/phased_mob/shadow/relaymove(mob/user, direction)
|
||||
var/turf/newLoc = get_step(src,direction)
|
||||
if(isspaceturf(newLoc))
|
||||
to_chat(user, "<span class='warning'>It really would not be wise to go into space.</span>")
|
||||
@@ -53,7 +53,7 @@
|
||||
forceMove(newLoc)
|
||||
check_light_level()
|
||||
|
||||
/obj/effect/dummy/shadow/proc/check_light_level()
|
||||
/obj/effect/dummy/phased_mob/shadow/proc/check_light_level()
|
||||
var/turf/T = get_turf(src)
|
||||
var/light_amount = T.get_lumcount()
|
||||
if(light_amount > 0.2) // jaunt ends
|
||||
@@ -61,7 +61,7 @@
|
||||
else if (light_amount < 0.2 && (!QDELETED(jaunter))) //heal in the dark
|
||||
jaunter.heal_overall_damage(1,1)
|
||||
|
||||
/obj/effect/dummy/shadow/proc/end_jaunt(forced = FALSE)
|
||||
/obj/effect/dummy/phased_mob/shadow/proc/end_jaunt(forced = FALSE)
|
||||
if(jaunter)
|
||||
if(forced)
|
||||
visible_message("<span class='boldwarning'>[jaunter] is revealed by the light!</span>")
|
||||
@@ -72,27 +72,26 @@
|
||||
jaunter = null
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/dummy/shadow/Initialize(mapload)
|
||||
/obj/effect/dummy/phased_mob/shadow/Initialize(mapload)
|
||||
. = ..()
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/effect/dummy/shadow/Destroy()
|
||||
/obj/effect/dummy/phased_mob/shadow/Destroy()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
. = ..()
|
||||
|
||||
/obj/effect/dummy/shadow/process()
|
||||
/obj/effect/dummy/phased_mob/shadow/process()
|
||||
if(!jaunter)
|
||||
qdel(src)
|
||||
if(jaunter.loc != src)
|
||||
qdel(src)
|
||||
check_light_level()
|
||||
|
||||
/obj/effect/dummy/shadow/ex_act()
|
||||
/obj/effect/dummy/phased_mob/shadow/ex_act()
|
||||
return
|
||||
|
||||
/obj/effect/dummy/shadow/bullet_act()
|
||||
/obj/effect/dummy/phased_mob/shadow/bullet_act()
|
||||
return
|
||||
|
||||
/obj/effect/dummy/shadow/singularity_act()
|
||||
/obj/effect/dummy/phased_mob/shadow/singularity_act()
|
||||
return
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
#note, this also needs to be changed in the Dockerfile's initial FROM command
|
||||
#If someone has an idea for how to set that version within the Dockerfile itself without any other dependencies, feel free to PR it
|
||||
export BYOND_MAJOR=512
|
||||
export BYOND_MINOR=1441
|
||||
export BYOND_MINOR=1448
|
||||
|
||||
#rust_g git tag
|
||||
export RUST_G_VERSION=0.4.1
|
||||
|
||||
@@ -1,7 +1,87 @@
|
||||
#!/bin/sh
|
||||
|
||||
#Basically run deploy.sh, but first
|
||||
set -e
|
||||
|
||||
#load dep exports
|
||||
. "$1/dependencies.sh"
|
||||
|
||||
#find out what we have (+e is important for this)
|
||||
set +e
|
||||
has_git="$(command -v git)"
|
||||
has_cargo="$(command -v ~/.cargo/bin/cargo)"
|
||||
has_sudo="$(command -v sudo)"
|
||||
has_cmake="$(command -v cmake)"
|
||||
has_gpp="$(command -v g++-6)"
|
||||
has_grep="$(command -v grep)"
|
||||
set -e
|
||||
|
||||
#install cargo if needful
|
||||
if ! [ -x "$has_cargo" ]; then
|
||||
echo "Installing rust..."
|
||||
curl https://sh.rustup.rs -sSf | sh -s -- -y --default-host i686-unknown-linux-gnu
|
||||
. ~/.profile
|
||||
fi
|
||||
|
||||
#apt packages
|
||||
if ! { [ -x "$has_git" ] && [ -x "$has_cmake" ] && [ -x "$has_gpp" ] && [ -f "/usr/lib/i386-linux-gnu/libmariadb.so.2" ] && [ -f "/usr/lib/i386-linux-gnu/libssl.so" ] && [ -d "/usr/share/doc/g++-6-multilib" ] && [ -d "/usr/include/mysql" ]; }; then
|
||||
echo "Installing apt dependencies..."
|
||||
if ! [ -x "$has_sudo" ]; then
|
||||
dpkg --add-architecture i386
|
||||
apt-get update
|
||||
apt-get install -y git cmake libmariadb-dev:i386 libssl-dev:i386 grep g++-6 g++-6-multilib
|
||||
ln -s /usr/include/mariadb /usr/include/mysql
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
else
|
||||
sudo dpkg --add-architecture i386
|
||||
sudo apt-get update
|
||||
apt-get install -y git cmake libmariadb-dev:i386 libssl-dev:i386 grep g++-6 g++-6-multilib
|
||||
sudo ln -s /usr/include/mariadb /usr/include/mysql
|
||||
sudo rm -rf /var/lib/apt/lists/*
|
||||
fi
|
||||
fi
|
||||
|
||||
#update rust-g
|
||||
if [ ! -d "rust-g" ]; then
|
||||
echo "Cloning rust-g..."
|
||||
git clone https://github.com/tgstation/rust-g
|
||||
else
|
||||
echo "Fetching rust-g..."
|
||||
cd rust-g
|
||||
git fetch
|
||||
cd ..
|
||||
fi
|
||||
|
||||
#update BSQL
|
||||
if [ ! -d "BSQL" ]; then
|
||||
echo "Cloning BSQL..."
|
||||
git clone https://github.com/tgstation/BSQL
|
||||
else
|
||||
echo "Fetching BSQL..."
|
||||
cd BSQL
|
||||
git fetch
|
||||
cd ..
|
||||
fi
|
||||
|
||||
echo "Deploying rust-g..."
|
||||
cd rust-g
|
||||
git clean -fxd
|
||||
git checkout $RUST_G_VERSION
|
||||
~/.cargo/bin/cargo build --release
|
||||
mv target/release/librust_g.so $1/rust_g
|
||||
cd ..
|
||||
|
||||
echo "Deploying BSQL..."
|
||||
cd BSQL
|
||||
git clean -fxd
|
||||
git checkout $BSQL_VERSION
|
||||
mkdir mysql
|
||||
mkdir artifacts
|
||||
cd artifacts
|
||||
cmake .. -DCMAKE_CXX_COMPILER=g++-6 -DMARIA_LIBRARY=/usr/lib/i386-linux-gnu/libmariadb.so.2
|
||||
make
|
||||
mv src/BSQL/libBSQL.so $1/
|
||||
|
||||
#run deploy.sh
|
||||
echo 'Deploying tgstation compilation...'
|
||||
|
||||
cd $1
|
||||
@@ -14,4 +94,4 @@ shopt -u dotglob
|
||||
|
||||
build/tools/deploy.sh $1 $1/build
|
||||
|
||||
rm -rf build
|
||||
rm -rf build
|
||||
Reference in New Issue
Block a user