Merged master into BEF.

Signed-off-by: Mloc-Argent <colmohici@gmail.com>
This commit is contained in:
Mloc-Argent
2013-05-06 15:43:50 +01:00
41 changed files with 271 additions and 139 deletions

View File

@@ -1,5 +1,5 @@
Baystation12
Copyright (C) 2010-2012 Baystation12 and tgstation13.
Copyright (C) 2010-2013 Baystation12 and tgstation13.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -12,4 +12,4 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
along with this program. If not, see <http://www.gnu.org/licenses/>.

View File

@@ -1,12 +1,10 @@
baystation12
# baystation12
Website: http://baystation12.net/
Code: http://github.com/Baystation12/Baystation12/
IRC: irc://irc.sorcery.net/bs12
[Website](http://baystation12.net/) - [Code](http://github.com/Baystation12/Baystation12/) - [IRC](http://baystation12.net/forums/viewtopic.php?f=12&t=5088)
================================================================================
INSTALLATION
================================================================================
---
### INSTALLATION
First-time installation should be fairly straightforward. First, you'll need
BYOND installed. You can get it from http://www.byond.com/. Once you've done
@@ -16,9 +14,9 @@ Open baystation12.dme by double-clicking it, open the Build menu, and click
compile. This'll take a little while, and if everything's done right you'll get
a message like this:
saving baystation12.dmb (DEBUG mode)
baystation12.dmb - 0 errors, 0 warnings
saving baystation12.dmb (DEBUG mode)
baystation12.dmb - 0 errors, 0 warnings
If you see any errors or warnings, something has gone wrong - possibly a corrupt
download or the files extracted wrong.
@@ -38,7 +36,7 @@ You'll also want to edit admins.txt to remove the default admins and add your
own. "Game Master" is the highest level of access, and the other recommended
admin level for now is "Game Admin". The format is:
byondkey - Rank
byondkey - Rank
where the BYOND key must be in lowercase and the admin rank must be properly
capitalised. There are a bunch more admin ranks, but these two should be
@@ -46,7 +44,7 @@ enough for most servers, assuming you have trustworthy admins.
Additionally, you can set up moderators in moderators.txt, with this format:
byondkey
byondkey
Moderators have access to player notes and a few other low-level commands.
@@ -55,9 +53,9 @@ compiled baystation12.dmb file. Make sure to set the port to the one you
specified in the config.txt, and set the Security box to 'Trusted'. Then press
GO and the server should start up and be ready to join.
================================================================================
UPDATING
================================================================================
---
### UPDATING
To update an existing installation, first back up your /config and /data folders
as these store your server configuration, player preferences and banlist.
@@ -68,19 +66,19 @@ install, overwriting when prompted except if we've specified otherwise, and
recompile the game. Once you start the server up again, you should be running
the new version.
================================================================================
SQL Setup
================================================================================
---
### SQL Setup
The SQL backend for the library and stats tracking requires a
MySQL server. Your server details go in /config/dbconfig.txt, and the SQL
schema is in /SQL/tgstation_schema.sql. More detailed setup instructions are
coming soon, for now ask in our IRC channel.
================================================================================
IRC Bot Setup
================================================================================
---
Included in the SVN is an IRC bot capable of relaying adminhelps to a specified
### IRC Bot Setup
Included in the repo is an IRC bot capable of relaying adminhelps to a specified
IRC channel/server (thanks to Skibiliano). Instructions for bot setup are
included in the /bot/ folder along with the bot/relay script itself.
included in the /bot/ folder along with the bot/relay script itself.

View File

@@ -1,6 +1,14 @@
//node1, air1, network1 correspond to input
//node2, air2, network2 correspond to output
#define CIRCULATOR_MIN_PRESSURE 10 //KPA to move the mechanism
#define CIRCULATOR_VOLUME 100 //Litres
#define CIRCULATOR_EFFICIENCY 0.65 //Out of 1.
#define TURBINE_EFFICIENCY 0.1 //Uses more power than is generated.
#define TURBINE_PRESSURE_DIFFERENCE 20 //Simulates a 20KPa difference
#define GENRATE 800
/obj/machinery/atmospherics/binary/circulator
name = "circulator/heat exchanger"
desc = "A gas circulator pump and heat exchanger."
@@ -11,13 +19,19 @@
//var/side = 1 // 1=left 2=right
var/status = 0
var/datum/gas_mixture/gas_contents
var/last_pressure_delta = 0
var/turbine_pumping = 0 //For when there is not enough pressure difference and we need to induce one or something.
var/last_power_generation = 0
density = 1
/obj/machinery/atmospherics/binary/circulator/New()
..()
desc = initial(desc) + " Its outlet port is to the [dir2text(dir)]."
desc = initial(desc) + " Its outlet port is to the [dir2text(dir)]."
gas_contents = new
gas_contents.volume = CIRCULATOR_VOLUME
/obj/machinery/atmospherics/binary/circulator/proc/return_transfer_air()
if(!anchored)
@@ -25,40 +39,69 @@
var/output_starting_pressure = air2.return_pressure()
var/input_starting_pressure = air1.return_pressure()
var/internal_gas_pressure = gas_contents.return_pressure()
if(output_starting_pressure >= input_starting_pressure-10)
//Need at least 10 KPa difference to overcome friction in the mechanism
last_pressure_delta = 0
return null
var/intake_pressure_delta = input_starting_pressure - internal_gas_pressure
var/output_pressure_delta = internal_gas_pressure - output_starting_pressure
var/pressure_delta = max(intake_pressure_delta, output_pressure_delta, 0)
last_power_generation = 0
//If the turbine is running, we need to consider that.
if(turbine_pumping)
//Make it use powah
if(pressure_delta < TURBINE_PRESSURE_DIFFERENCE)
last_power_generation = (pressure_delta - TURBINE_PRESSURE_DIFFERENCE)*(1/TURBINE_EFFICIENCY)
pressure_delta = TURBINE_PRESSURE_DIFFERENCE
//If the force is already above what the turbine can do, shut it off and generate power instead!
else
turbine_pumping = 0
//Calculate necessary moles to transfer using PV = nRT
if(air1.temperature>0)
var/pressure_delta = (input_starting_pressure - output_starting_pressure)/2
if(air1.temperature > 0)
var/transfer_moles = pressure_delta*air2.volume/(air1.temperature * R_IDEAL_GAS_EQUATION)
var/transfer_moles = pressure_delta*gas_contents.volume/(air1.temperature * R_IDEAL_GAS_EQUATION)
last_pressure_delta = pressure_delta
//world << "pressure_delta = [pressure_delta]; transfer_moles = [transfer_moles];"
//Actually transfer the gas
var/datum/gas_mixture/removed = air1.remove(transfer_moles)
//Internal to output.
air2.merge(gas_contents.remove(transfer_moles))
//Intake to internal.
gas_contents.merge(air1.remove(transfer_moles))
//Update the gas networks.
if(network1)
network1.update = 1
if(network2)
network2.update = 1
return removed
else
last_pressure_delta = 0
//Needs at least 10 KPa difference to move the mechanism and make power
if(pressure_delta < CIRCULATOR_MIN_PRESSURE)
last_pressure_delta = 0
last_power_generation += pressure_delta*CIRCULATOR_EFFICIENCY
return gas_contents
//Used by the TEG to know how much power to use/produce.
/obj/machinery/atmospherics/binary/circulator/proc/ReturnPowerGeneration()
return GENRATE*last_power_generation
/obj/machinery/atmospherics/binary/circulator/process()
..()
update_icon()
/obj/machinery/atmospherics/binary/circulator/update_icon()
if(stat & (BROKEN|NOPOWER) || !anchored)
icon_state = "circ-p"
@@ -105,9 +148,9 @@
else
..()
/obj/machinery/atmospherics/binary/circulator/verb/rotate()
/obj/machinery/atmospherics/binary/circulator/verb/rotate_clockwise()
set category = "Object"
set name = "Rotate Circulator"
set name = "Rotate Circulator (Clockwise)"
set src in view(1)
if (usr.stat || usr.restrained() || anchored)
@@ -115,3 +158,15 @@
src.dir = turn(src.dir, 90)
desc = initial(desc) + " Its outlet port is to the [dir2text(dir)]."
/obj/machinery/atmospherics/binary/circulator/verb/rotate_anticlockwise()
set category = "Object"
set name = "Rotate Circulator (Counterclockwise)"
set src in view(1)
if (usr.stat || usr.restrained() || anchored)
return
src.dir = turn(src.dir, -90)
desc = initial(desc) + " Its outlet port is to the [dir2text(dir)]."

View File

@@ -101,7 +101,11 @@
if("change_code")
var/attempt_code = input("Re-enter the current EFTPOS access code", "Confirm old EFTPOS code") as num
if(attempt_code == access_code)
access_code = input("Enter a new access code for this device", "Enter new EFTPOS code") as num
var/trycode = input("Enter a new access code for this device (4-6 digits, numbers only)", "Enter new EFTPOS code") as num
if(trycode >= 1000 && trycode <= 999999)
access_code = trycode
else
alert("That is not a valid code!")
print_reference()
else
usr << "\icon[src]<span class='warning'>Incorrect code entered.</span>"
@@ -124,7 +128,11 @@
if("trans_purpose")
transaction_purpose = input("Enter reason for EFTPOS transaction", "Transaction purpose")
if("trans_value")
transaction_amount = input("Enter amount for EFTPOS transaction", "Transaction amount") as num
var/try_num = input("Enter amount for EFTPOS transaction", "Transaction amount") as num
if(try_num < 0)
alert("That is not a valid amount!")
else
transaction_amount = try_num
if("toggle_lock")
if(transaction_locked)
var/attempt_code = input("Enter EFTPOS access code", "Reset Transaction") as num

View File

@@ -150,11 +150,10 @@
var/strength_change = target_field_strength - E.strength
if(strength_change > stored_renwicks)
strength_change = stored_renwicks
if(E.strength >= 1)
E.Strengthen(strength_change)
else if(E.strength < 0)
if(E.strength < 0)
E.strength = 0
E.Strengthen(0.1)
else
E.Strengthen(strength_change)
stored_renwicks -= strength_change

View File

@@ -206,10 +206,12 @@ log transactions
switch(href_list["choice"])
if("transfer")
if(authenticated_account && linked_db)
var/target_account_number = text2num(href_list["target_acc_number"])
var/transfer_amount = text2num(href_list["funds_amount"])
var/transfer_purpose = href_list["purpose"]
if(transfer_amount <= authenticated_account.money)
if(transfer_amount <= 0)
alert("That is not a valid amount.")
else if(transfer_amount <= authenticated_account.money)
var/target_account_number = text2num(href_list["target_acc_number"])
var/transfer_purpose = href_list["purpose"]
if(linked_db.charge_to_account(target_account_number, authenticated_account.owner_name, transfer_purpose, machine_id, transfer_amount))
usr << "\icon[src]<span class='info'>Funds transfer successful.</span>"
authenticated_account.money -= transfer_amount
@@ -284,7 +286,9 @@ log transactions
previous_account_number = tried_account_num
if("withdrawal")
var/amount = max(text2num(href_list["funds_amount"]),0)
if(authenticated_account && amount > 0)
if(amount <= 0)
alert("That is not a valid amount.")
else if(authenticated_account && amount > 0)
if(amount <= authenticated_account.money)
playsound(src, 'chime.ogg', 50, 1)

View File

@@ -14,7 +14,7 @@ client/proc/Zone_Info(turf/T as null|turf)
client/proc/Test_ZAS_Connection(var/turf/simulated/T as turf)
client/verb/Test_ZAS_Connection(var/turf/simulated/T as turf)
set category = "Debug"
if(!istype(T))
return

View File

@@ -127,6 +127,8 @@ proc/ZConnect(turf/simulated/A,turf/simulated/B)
if(!A.zone || !B.zone) return
if(A.zone == B.zone) return
if(!A.CanPass(null,B,0,0)) return
if(A.CanPass(null,B,0,1))
return ZMerge(A.zone,B.zone)

View File

@@ -107,7 +107,7 @@ var/list/sacrificed = list()
M.visible_message("\red [M] writhes in pain as the markings below him glow a bloody red.", \
"\red AAAAAAHHHH!.", \
"\red You hear an anguished scream.")
if(is_convertable_to_cult(M.mind))
if(is_convertable_to_cult(M.mind) && !jobban_isbanned(M, "cultist"))//putting jobban check here because is_convertable uses mind as argument
ticker.mode.add_cultist(M.mind)
M.mind.special_role = "Cultist"
M << "<font color=\"purple\"><b><i>Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible truth. The veil of reality has been ripped away and in the festering wound left behind something sinister takes root.</b></i></font>"
@@ -370,6 +370,8 @@ var/list/sacrificed = list()
break
if(!ghost)
return this_rune.fizzle()
if(jobban_isbanned(ghost, "cultist"))
return this_rune.fizzle()
usr.say("Gal'h'rfikk harfrandid mud[pick("'","`")]gib!")
var/mob/living/carbon/human/dummy/D = new(this_rune.loc)

View File

@@ -24,7 +24,6 @@
U.hastie = new /obj/item/clothing/tie/medal/gold/captain(U)
H.equip_to_slot_or_del(U, slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/device/pda/captain(H), slot_belt)
//H.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/captain(H), slot_wear_suit)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/clothing/head/caphat(H), slot_head)
H.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(H), slot_glasses)

View File

@@ -389,6 +389,13 @@ var/global/datum/controller/occupations/job_master
spawnId(H, rank, alt_title)
H.equip_to_slot_or_del(new /obj/item/device/radio/headset(H), slot_ears)
//Gives glasses to the vision impaired
if(H.disabilities & NEARSIGHTED)
var/equipped = H.equip_to_slot_or_del(new /obj/item/clothing/glasses/regular(H), slot_glasses)
if(equipped != 1)
var/obj/item/clothing/glasses/G = H.glasses
G.prescription = 1
// H.update_icons()
return 1

View File

@@ -106,6 +106,7 @@
can_hold = list("/obj/item/weapon/reagent_containers/pill","/obj/item/weapon/dice")
allow_quick_gather = 1
use_to_pickup = 1
storage_slots = 14
/obj/item/weapon/storage/pill_bottle/MouseDrop(obj/over_object as obj) //Quick pillbottle fix. -Agouri

View File

@@ -89,9 +89,16 @@
/obj/structure/lamarr/proc/Break()
if(occupied)
var/obj/item/clothing/mask/facehugger/A = new /obj/item/clothing/mask/facehugger( src.loc )
A.sterile = 1
A.name = "Lamarr"
new /obj/item/clothing/mask/facehugger/lamarr(src.loc)
occupied = 0
update_icon()
return
/obj/item/clothing/mask/facehugger/lamarr
name = "Lamarr"
desc = "The worst she might do is attempt to... couple with your head."//hope we don't get sued over a harmless reference, rite?
sterile = 1
gender = FEMALE
/obj/item/clothing/mask/facehugger/lamarr/New()//to prevent deleting it if aliums are disabled
return

View File

@@ -10,7 +10,7 @@
switch(href_list["makeAntag"])
if("1")
log_admin("[key_name(usr)] has spawned a traitor.")
if(!src.makeTratiors())
if(!src.makeTraitors())
usr << "\red Unfortunatly there were no candidates available"
if("2")
log_admin("[key_name(usr)] has spawned a changeling.")

View File

@@ -55,7 +55,7 @@ var/inactive_keys = "None<br>"
//run a query to get all ckeys inactive for over 2 months
var/list/inactive_ckeys = list()
if(ckeys_with_customitems.len)
var/DBQuery/query_inactive = dbcon.NewQuery("SELECT ckey, lastseen FROM erro_player WHERE datediff(Now(),lastseen) > 2")
var/DBQuery/query_inactive = dbcon.NewQuery("SELECT ckey, lastseen FROM erro_player WHERE datediff(Now(), lastseen) > 60")
query_inactive.Execute()
while(query_inactive.NextRow())
var/cur_ckey = query_inactive.item[1]

View File

@@ -11,7 +11,7 @@ client/proc/one_click_antag()
/datum/admins/proc/one_click_antag()
var/dat = {"<B>One-click Antagonist</B><br>
<a href='?src=\ref[src];makeAntag=1'>Make Tratiors</a><br>
<a href='?src=\ref[src];makeAntag=1'>Make Traitors</a><br>
<a href='?src=\ref[src];makeAntag=2'>Make Changlings</a><br>
<a href='?src=\ref[src];makeAntag=3'>Make Revs</a><br>
<a href='?src=\ref[src];makeAntag=4'>Make Cult</a><br>
@@ -53,7 +53,7 @@ client/proc/one_click_antag()
return 0
/datum/admins/proc/makeTratiors()
/datum/admins/proc/makeTraitors()
var/datum/game_mode/traitor/temp = new
if(config.protect_roles_from_antagonist)

View File

@@ -2,7 +2,7 @@
//SECURITY//
////////////
#define TOPIC_SPAM_DELAY 4 //4 ticks is about 3/10ths of a second
#define UPLOAD_LIMIT 1048576 //Restricts client uploads to the server to 1MB //Could probably do with being lower.
#define UPLOAD_LIMIT 10485760 //Restricts client uploads to the server to 10MB //Boosted this thing. What's the worst that can happen?
#define MIN_CLIENT_VERSION 0 //Just an ambiguously low version for now, I don't want to suddenly stop people playing.
//I would just like the code ready should it ever need to be used.
/*

View File

@@ -252,6 +252,7 @@ datum/preferences
dat += "Blood Type: <a href='byond://?src=\ref[user];preference=b_type;task=input'>[b_type]</a><br>"
dat += "Skin Tone: <a href='?_src_=prefs;preference=s_tone;task=input'>[-s_tone + 35]/220<br></a>"
//dat += "Skin pattern: <a href='byond://?src=\ref[user];preference=skin_style;task=input'>Adjust</a><br>"
dat += "Needs Glasses: <a href='?_src_=prefs;preference=disabilities'><b>[disabilities == 0 ? "No" : "Yes"]</b></a><br>"
dat += "Limbs: <a href='byond://?src=\ref[user];preference=limbs;task=input'>Adjust</a><br>"
//display limbs below
@@ -1008,6 +1009,9 @@ datum/preferences
else
gender = MALE
if("disabilities") //please note: current code only allows nearsightedness as a disability
disabilities = !disabilities//if you want to add actual disabilities, code that selects them should be here
if("hear_adminhelps")
toggles ^= SOUND_ADMINHELP

View File

@@ -237,6 +237,7 @@
S["sec_record"] << sec_record
S["player_alt_titles"] << player_alt_titles
S["be_special"] << be_special
S["disabilities"] << disabilities
S["used_skillpoints"] << used_skillpoints
S["skills"] << skills
S["skill_specialization"] << skill_specialization

View File

@@ -1,6 +1,7 @@
/obj/item/clothing
name = "clothing"
//Ears: currently only used for headsets and earmuffs
/obj/item/clothing/ears
name = "ears"

View File

@@ -19,6 +19,8 @@
vision_flags = SEE_TURFS
/obj/item/clothing/glasses/meson/prescription
name = "prescription mesons"
desc = "Optical Meson Scanner with prescription lenses."
prescription = 1
/obj/item/clothing/glasses/science
@@ -61,6 +63,7 @@
desc = "Made by Nerd. Co."
icon_state = "glasses"
item_state = "glasses"
prescription = 1
/obj/item/clothing/glasses/regular/hipster
name = "Prescription Glasses"
@@ -129,6 +132,7 @@
vision_flags = BLIND
/obj/item/clothing/glasses/sunglasses/prescription
name = "prescription sunglasses"
prescription = 1
/obj/item/clothing/glasses/sunglasses/big

View File

@@ -97,6 +97,7 @@
return
/mob/living/carbon/electrocute_act(var/shock_damage, var/obj/source, var/siemens_coeff = 1.0)
if(status_flags & GODMODE) return 0 //godmode
shock_damage *= siemens_coeff
if (shock_damage<1)
return 0
@@ -384,13 +385,13 @@
item.layer = initial(item.layer)
u_equip(item)
update_icons()
//if(src.client)
//src.client.screen -= item
//item.loc = src.loc
//if(istype(item, /obj/item))
//item:dropped(src) // let it know it's been dropped
if (istype(usr, /mob/living/carbon/monkey)) //Check if a monkey is throwing. Modify/remove this line as required.
item.loc = src.loc
if(src.client)
src.client.screen -= item
if(istype(item, /obj/item))
item:dropped(src) // let it know it's been dropped
//actually throw it!
if (item)

View File

@@ -450,6 +450,7 @@
SA.moles = 0
if( (abs(310.15 - breath.temperature) > 50) && !(COLD_RESISTANCE in mutations)) // Hot air hurts :(
if(status_flags & GODMODE) return 1 //godmode
if(breath.temperature < 260.15)
if(prob(20))
src << "\red You feel your face freezing and an icicle forming in your lungs!"
@@ -518,6 +519,7 @@
if(bodytemperature > BODYTEMP_HEAT_DAMAGE_LIMIT)
//Body temperature is too hot.
fire_alert = max(fire_alert, 1)
if(status_flags & GODMODE) return 1 //godmode
switch(bodytemperature)
if(360 to 400)
apply_damage(HEAT_DAMAGE_LEVEL_1, BURN, used_weapon = "High Body Temperature")
@@ -531,6 +533,7 @@
else if(bodytemperature < BODYTEMP_COLD_DAMAGE_LIMIT)
fire_alert = max(fire_alert, 1)
if(status_flags & GODMODE) return 1 //godmode
if(!istype(loc, /obj/machinery/atmospherics/unary/cryo_cell))
switch(bodytemperature)
if(200 to 260)
@@ -548,6 +551,7 @@
var/pressure = environment.return_pressure()
var/adjusted_pressure = calculate_affecting_pressure(pressure) //Returns how much pressure actually affects the mob.
if(status_flags & GODMODE) return 1 //godmode
switch(adjusted_pressure)
if(HAZARD_HIGH_PRESSURE to INFINITY)
adjustBruteLoss( min( ( (adjusted_pressure / HAZARD_HIGH_PRESSURE) -1 )*PRESSURE_DAMAGE_COEFFICIENT , MAX_HIGH_PRESSURE_DAMAGE) )
@@ -783,8 +787,8 @@
var/total_plasmaloss = 0
for(var/obj/item/I in src)
if(I.contaminated)
total_plasmaloss += vsc.plc.CONTAMINATION_LOSS
total_plasmaloss += vsc.plc.CONTAMINATION_LOSS
if(status_flags & GODMODE) return 0 //godmode
adjustToxLoss(total_plasmaloss)
// if(dna && dna.mutantrace == "plant") //couldn't think of a better place to place it, since it handles nutrition -- Urist
@@ -1223,8 +1227,14 @@
if(blinded) blind.layer = 18
else blind.layer = 0
if( disabilities & NEARSIGHTED && !istype(glasses, /obj/item/clothing/glasses/regular) )
client.screen += global_hud.vimpaired
if(disabilities & NEARSIGHTED) //this looks meh but saves a lot of memory by not requiring to add var/prescription
if(glasses) //to every /obj/item
var/obj/item/clothing/glasses/G = glasses
if(!G.prescription)
client.screen += global_hud.vimpaired
else
client.screen += global_hud.vimpaired
if(eye_blurry) client.screen += global_hud.blurry
if(druggy) client.screen += global_hud.druggy
@@ -1270,6 +1280,7 @@
playsound_local(src,pick(scarySounds),50, 1, -1)
proc/handle_virus_updates()
if(status_flags & GODMODE) return 0 //godmode
if(bodytemperature > 406)
for(var/datum/disease/D in viruses)
D.cure()
@@ -1319,7 +1330,7 @@
handle_shock()
..()
if(status_flags & GODMODE) return 0 //godmode
if(analgesic) return // analgesic avoids all traumatic shock temporarily
if(health < 0)// health 0 makes you immediately collapse

View File

@@ -228,6 +228,7 @@
// damage ONE external organ, organ gets randomly selected from damaged ones.
/mob/living/proc/take_organ_damage(var/brute, var/burn)
if(status_flags & GODMODE) return 0 //godmode
adjustBruteLoss(brute)
adjustFireLoss(burn)
src.updatehealth()
@@ -240,6 +241,7 @@
// damage MANY external organs, in random order
/mob/living/proc/take_overall_damage(var/brute, var/burn, var/used_weapon = null)
if(status_flags & GODMODE) return 0 //godmode
adjustBruteLoss(brute)
adjustFireLoss(burn)
src.updatehealth()

View File

@@ -234,16 +234,12 @@ var/list/ai_list = list()
/mob/living/silicon/ai/proc/ai_roster()
set category = "AI Commands"
set name = "Show Crew Manifest"
var/dat = "<html><head><title>Crew Roster</title></head><body><b>Crew Roster:</b><br><br>"
var/list/L = list()
for (var/datum/data/record/t in data_core.general)
var/R = t.fields["name"] + " - " + t.fields["rank"]
L += R
for(var/R in sortList(L))
dat += "[R]<br>"
dat += "</body></html>"
var/dat
dat += "<h4>Crew Manifest</h4>"
if(data_core)
dat += data_core.get_manifest(0) // make it monochrome
dat += "<br>"
src << browse(dat, "window=airoster")
onclose(src, "airoster")
@@ -743,4 +739,4 @@ var/list/ai_list = list()
anchored = 1
return
else
return ..()
return ..()

View File

@@ -413,14 +413,9 @@
/mob/living/silicon/pai/proc/softwareManifest()
var/dat = ""
dat += "<h2>Crew Manifest</h2><br><br>"
var/list/L = list()
if(!isnull(data_core.general))
for (var/datum/data/record/t in sortRecord(data_core.general))
var/R = t.fields["name"] + " - " + t.fields["rank"]
L += R
for(var/R in sortList(L))
dat += "[R]<br>"
dat += "</body></html>"
if(data_core)
dat += data_core.get_manifest(0) // make it monochrome
dat += "<br>"
return dat
// Medical Records

View File

@@ -74,6 +74,9 @@
// if(!istype(V,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent))
// return
if(src.stat != CONSCIOUS) return
var/obj/machinery/atmospherics/unary/vent_pump/vent_found
var/welded = 0
for(var/obj/machinery/atmospherics/unary/vent_pump/v in range(1,src))

View File

@@ -170,7 +170,7 @@
//This is just a commonly used configuration for the equip_to_slot_if_possible() proc, used to equip people when the rounds tarts and when events happen and such.
/mob/proc/equip_to_slot_or_del(obj/item/W as obj, slot)
equip_to_slot_if_possible(W, slot, 1, 1, 0)
return equip_to_slot_if_possible(W, slot, 1, 1, 0)
//The list of slots by priority. equip_to_appropriate_slot() uses this list. Doesn't matter if a mob type doesn't have a slot.
var/list/slot_equipment_priority = list( \

View File

@@ -365,6 +365,10 @@
new_character.dna.ready_dna(new_character)
new_character.dna.b_type = client.prefs.b_type
if(client.prefs.disabilities)
new_character.dna.struc_enzymes = setblock(new_character.dna.struc_enzymes,GLASSESBLOCK,toggledblock(getblock(new_character.dna.struc_enzymes,GLASSESBLOCK,3)),3)
new_character.disabilities |= NEARSIGHTED
new_character.key = key //Manually transfer the key to log them in
return new_character

View File

@@ -558,6 +558,9 @@ datum/preferences
else if(backbag == 3 || backbag == 4)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
if(disabilities & NEARSIGHTED)
clothes_s.Blend(new /icon('icons/mob/eyes.dmi', "glasses"), ICON_OVERLAY)
preview_icon.Blend(eyes_s, ICON_OVERLAY)
if(clothes_s)
preview_icon.Blend(clothes_s, ICON_OVERLAY)

View File

@@ -5,10 +5,10 @@
desc = "It's a high efficiency thermoelectric generator."
icon_state = "teg"
density = 1
use_power = 0
anchored = 0
idle_power_usage = 50
active_power_usage = 1000
use_power = 1
idle_power_usage = 100 //Watts, I hope. Just enough to do the computer and display things.
var/obj/machinery/atmospherics/binary/circulator/circ1
var/obj/machinery/atmospherics/binary/circulator/circ2
@@ -57,7 +57,7 @@
if(lastgenlev != 0)
overlays += image('icons/obj/power.dmi', "teg-op[lastgenlev]")
#define GENRATE 800 // generator output coefficient from Q
/obj/machinery/power/generator/process()
@@ -87,13 +87,9 @@
//world << "delta_temperature = [delta_temperature]; air1_heat_capacity = [air1_heat_capacity]; air2_heat_capacity = [air2_heat_capacity]"
if(delta_temperature > 0 && air1_heat_capacity > 0 && air2_heat_capacity > 0)
use_power = 2
var/efficiency = 0.65
var/energy_transfer = delta_temperature*air2_heat_capacity*air1_heat_capacity/(air2_heat_capacity+air1_heat_capacity)
var/heat = energy_transfer*(1-efficiency)
lastgen = energy_transfer*efficiency
//world << "lastgen = [lastgen]; heat = [heat]; delta_temperature = [delta_temperature]; air2_heat_capacity = [air2_heat_capacity]; air1_heat_capacity = [air1_heat_capacity];"
if(air2.temperature > air1.temperature)
air2.temperature = air2.temperature - energy_transfer/air2_heat_capacity
@@ -102,28 +98,20 @@
air2.temperature = air2.temperature + heat/air2_heat_capacity
air1.temperature = air1.temperature - energy_transfer/air1_heat_capacity
//world << "POWER: [lastgen] W generated at [efficiency*100]% efficiency and sinks sizes [air1_heat_capacity], [air2_heat_capacity]"
lastgen = circ1.ReturnPowerGeneration() + circ2.ReturnPowerGeneration()
if(lastgen > 0)
add_avail(lastgen)
add_avail(lastgen)
if(air1)
circ1.air2.merge(air1)
if(air2)
circ2.air2.merge(air2)
else
add_load(-lastgen)
// update icon overlays and power usage only if displayed level has changed
var/genlev = max(0, min( round(11*lastgen / 100000), 11))
if(genlev != lastgenlev)
lastgenlev = genlev
active_power_usage = lastgenlev * 1000
if(lastgenlev > 0)
use_power = 2
else
use_power = 1
updateicon()
src.updateDialog()
updateDialog()
/obj/machinery/power/generator/attack_ai(mob/user)
if(stat & (BROKEN|NOPOWER)) return
@@ -162,12 +150,15 @@
t += "Inlet Temperature: [round(circ1.air1.temperature, 0.1)] K<BR>"
t += "Outlet Pressure: [round(circ1.air2.return_pressure(), 0.1)] kPa<BR>"
t += "Outlet Temperature: [round(circ1.air2.temperature, 0.1)] K<BR>"
t += "Turbine Status: <A href='?src=\ref[src];turbine1=1'>[circ1.turbine_pumping ? "Pumping" : "Generating"]</a><br><br>"
t += "<B>Secondary Circulator (bottom/left)</B><BR>"
t += "Inlet Pressure: [round(circ2.air1.return_pressure(), 0.1)] kPa<BR>"
t += "Inlet Temperature: [round(circ2.air1.temperature, 0.1)] K<BR>"
t += "Outlet Pressure: [round(circ2.air2.return_pressure(), 0.1)] kPa<BR>"
t += "Outlet Temperature: [round(circ2.air2.temperature, 0.1)] K<BR>"
t += "Turbine Status: <A href='?src=\ref[src];turbine2=1'>[circ2.turbine_pumping ? "Pumping" : "Generating"]</a><br>"
else
t += "Unable to connect to circulators.<br>"
t += "Ensure both are in position and wrenched into place."
@@ -187,6 +178,15 @@
usr << browse(null, "window=teg")
usr.unset_machine()
return 0
if( href_list["turbine2"] )
if(circ2)
circ2.turbine_pumping = !circ2.turbine_pumping
if( href_list["turbine1"] )
if(circ1)
circ1.turbine_pumping = !circ1.turbine_pumping
updateDialog()
return 1
@@ -196,12 +196,22 @@
updateicon()
/obj/machinery/power/generator/verb/rotate()
/obj/machinery/power/generator/verb/rotate_clock()
set category = "Object"
set name = "Rotate Generator"
set name = "Rotate Generator (Clockwise)"
set src in view(1)
if (usr.stat || usr.restrained() || anchored)
return
src.dir = turn(src.dir, 90)
/obj/machinery/power/generator/verb/rotate_anticlock()
set category = "Object"
set name = "Rotate Generator (Counterclockwise)"
set src in view(1)
if (usr.stat || usr.restrained() || anchored)
return
src.dir = turn(src.dir, -90)

View File

@@ -341,8 +341,9 @@
P.icon_state = "pill"+pillsprite
reagents.trans_to(P,50)
if(src.loaded_pill_bottle)
P.loc = src.loaded_pill_bottle
src.updateUsrDialog()
if(loaded_pill_bottle.contents.len < loaded_pill_bottle.storage_slots)
P.loc = loaded_pill_bottle
src.updateUsrDialog()
else if (href_list["createbottle"])
if(!condi)
var/name = reject_bad_text(input(usr,"Name:","Name your bottle!",reagents.get_master_reagent_name()))

View File

@@ -1136,26 +1136,15 @@ datum
reagent_state = LIQUID
color = "#660000" // rgb: 102, 0, 0
//Commenting this out as it's horribly broken. It's a neat effect though, so it might be worth making a new reagent (that is less common) with similar effects. -Pete
/*
reaction_obj(var/obj/O, var/volume)
src = null
var/turf/the_turf = get_turf(O)
if(!the_turf)
return //No sense trying to start a fire if you don't have a turf to set on fire. --NEO
var/datum/gas_mixture/napalm = new
var/datum/gas/volatile_fuel/fuel = new
fuel.moles = 15
napalm.trace_gases += fuel
the_turf.assume_air(napalm)
new /obj/effect/decal/cleanable/liquid_fuel(the_turf, volume)
reaction_turf(var/turf/T, var/volume)
src = null
var/datum/gas_mixture/napalm = new
var/datum/gas/volatile_fuel/fuel = new
fuel.moles = 15
napalm.trace_gases += fuel
T.assume_air(napalm)
return*/
new /obj/effect/decal/cleanable/liquid_fuel(T, volume)
return
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.adjustToxLoss(1)

View File

@@ -385,8 +385,10 @@ datum
for(var/turf/simulated/floor/target_tile in range(0,location))
var/datum/gas_mixture/napalm = new
var/datum/gas/volatile_fuel/fuel = new
fuel.moles = created_volume
napalm.trace_gases += fuel
napalm.toxins = created_volume*10
napalm.temperature = 400+T0C
napalm.update_values()

View File

@@ -595,7 +595,7 @@ datum/design/posibrain
build_type = PROTOLATHE
materials = list("$metal" = 2000, "$glass" = 1000, "$silver" = 1000, "$gold" = 500, "$plasma" = 500, "$diamond" = 100)
build_path = "/obj/item/device/posibrain"
build_path = "/obj/item/device/mmi/posibrain"
///////////////////////////////////
//////////Mecha Module Disks///////

View File

@@ -28,6 +28,7 @@
# +EVERYTHING (or +HOST or +ALL) = Simply gives you everything without having to type every flag
Admin Observer
Retired Admin +MOD +ADMIN
Moderator +MOD
Admin Candidate +ADMIN
Trial Admin +@ +SPAWN +REJUV +VAREDIT +BAN

View File

@@ -24,7 +24,7 @@ masterofapples - Game Admin
megacaesar - Retired Admin
miniature - Game Master
misterbook - Game Admin
misterfox - Game Admin
misterfox - Retired Admin
mloc - Game Master
skymarshal - Game Master
spaceman96 - Retired Admin

View File

@@ -1,3 +1,4 @@
asanadas: Book Berner: /obj/item/clothing/glasses/meson/fluff/book_berner_1
atomicdog92: Seth Sealis: /obj/item/clothing/suit/det_suit/fluff/leatherjack
botanistpower: Walter Brooks: /obj/item/clothing/gloves/fluff/walter_brooks_1
bountylord13: Norah Briggs: /obj/item/clothing/head/welding/fluff/norah_briggs_1
@@ -8,8 +9,6 @@ compactninja: Lister Black: /obj/item/weapon/storage/pill_bottle/fluff/listermed
crazy2455: Murad Hassim: /obj/item/clothing/gloves/fluff/murad_hassim_1
cubejackal: Barry Sharke: /obj/item/clothing/mask/fluff/electriccig
daaneesh: Zelda Creedy: /obj/item/weapon/crowbar/fluff/zelda_creedy_1
desiderium: Momiji Inubashiri: /obj/item/clothing/under/fluff/olddressuniform
desiderium: Rook Maudlin: /obj/item/clothing/suit/det_suit/fluff/retpolcoat, /obj/item/clothing/head/det_hat/fluff/retpolcap, /obj/item/clothing/under/det/fluff/retpoluniform
deusdactyl: James Girard: /obj/item/clothing/head/secsoft/fluff/swatcap, /obj/item/clothing/suit/armor/vest/fluff/deus_blueshield
donofnyc3: Oen'g Issek: /obj/item/weapon/melee/baton/fluff/oeng_baton
eternal248: Maximilian Haynes: /obj/item/weapon/paper/certificate
@@ -75,4 +74,4 @@ vinceluk: Seth Sealis: /obj/item/clothing/suit/det_suit/fluff/graycoat
whitellama: Ethan Way: /obj/item/fluff/ethan_way_1
whitewolf41: Jeremy Wolf: /obj/item/clothing/under/rank/security/fluff/jeremy_wolf_1
zuhayr: Jane Doe: /obj/item/clothing/under/fluff/jane_sidsuit
mordeth221: Sven Fjeltson: /obj/item/weapon/fluff/sven_fjeltson_1
mordeth221: Sven Fjeltson: /obj/item/weapon/fluff/sven_fjeltson_1

View File

@@ -46,7 +46,6 @@ Header Section
</td>
</tr>
</table>
<font size='4' color='red'><b>Visit the bleeding-edge test server at <a href="byond://tekkit.fallemmc.com:8000">byond://tekkit.fallemmc.com:8000</a></b></font>
<!--
Changelog Section
@@ -139,6 +138,30 @@ should be listed in the changelog upon commit though. Thanks. -->
</ul>
</div>
<div class="commit sansserif">
<h2 class="date">17 April 2013</h2>
<h3 class="author">SkyMarshal updated:</h3>
<ul class="changes bgimages16">
<li class="experiment">ZAS is now more deadly, as per decision by administrative team. May be tweaked, but currently AIRFLOW is the biggest griefer.</li>
<li class="experiment">World startup optimized, many functions now delayed until a player joins the server. (Reduces server boot time significantly)</li>
<li class="tweak">Zones will now equalize air more rapidly.</li>
<li class="bugfix">ZAS now respects active magboots when airflow occurs.</li>
<li class="bugfix">Airflow will no longer throw you into doors and open them.</li>
<li class="bugfix">Race condition in zone construction has been fixed, so zones connect properly at round start.</li>
<li class="bugfix">Plasma effects readded.</li>
<li class="bugfix">Fixed runtime involving away mission.</li>
</ul>
</div>
<div class="commit sansserif">
<h2 class="date">30.04.2013</h2>
<h3 class="author">Spamcat updated:</h3>
<ul class="changes bgimages16">
<li class="tweak">Pill bottle capacity increased to 14 items.</li>
<li class="bugfix">Fixed Lamarr (it now spawns properly)</li>
</ul>
</div>
<div class="commit sansserif">
<h2 class="date">15.04.2013</h2>
<h3 class="author">Spamcat updated:</h3>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.3 KiB

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 41 KiB