diff --git a/LICENSE.txt b/COPYING similarity index 91% rename from LICENSE.txt rename to COPYING index 419cc18b37..5005fcd90f 100644 --- a/LICENSE.txt +++ b/COPYING @@ -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 . \ No newline at end of file +along with this program. If not, see . diff --git a/README.txt b/README.md similarity index 73% rename from README.txt rename to README.md index 30c2d95266..d016900cc3 100644 --- a/README.txt +++ b/README.md @@ -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. \ No newline at end of file +included in the /bot/ folder along with the bot/relay script itself. diff --git a/code/ATMOSPHERICS/components/binary_devices/circulator.dm b/code/ATMOSPHERICS/components/binary_devices/circulator.dm index 26dc82033a..1425ed8d77 100644 --- a/code/ATMOSPHERICS/components/binary_devices/circulator.dm +++ b/code/ATMOSPHERICS/components/binary_devices/circulator.dm @@ -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)]." \ No newline at end of file diff --git a/code/WorkInProgress/Cael_Aislinn/Economy/EFTPOS.dm b/code/WorkInProgress/Cael_Aislinn/Economy/EFTPOS.dm index 590ee66b2f..4d4c28d17a 100644 --- a/code/WorkInProgress/Cael_Aislinn/Economy/EFTPOS.dm +++ b/code/WorkInProgress/Cael_Aislinn/Economy/EFTPOS.dm @@ -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]Incorrect code entered." @@ -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 diff --git a/code/WorkInProgress/Cael_Aislinn/ShieldGen/shield_gen.dm b/code/WorkInProgress/Cael_Aislinn/ShieldGen/shield_gen.dm index d03e8f366f..8463f45e93 100644 --- a/code/WorkInProgress/Cael_Aislinn/ShieldGen/shield_gen.dm +++ b/code/WorkInProgress/Cael_Aislinn/ShieldGen/shield_gen.dm @@ -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 diff --git a/code/WorkInProgress/Mini/ATM.dm b/code/WorkInProgress/Mini/ATM.dm index 9578c3a2a3..15aa916efe 100644 --- a/code/WorkInProgress/Mini/ATM.dm +++ b/code/WorkInProgress/Mini/ATM.dm @@ -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]Funds transfer successful." 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) diff --git a/code/ZAS/Debug.dm b/code/ZAS/Debug.dm index 9cde83e7e3..a72daa4e76 100644 --- a/code/ZAS/Debug.dm +++ b/code/ZAS/Debug.dm @@ -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 diff --git a/code/ZAS/Functions.dm b/code/ZAS/Functions.dm index 3224b50177..eb5a63edba 100644 --- a/code/ZAS/Functions.dm +++ b/code/ZAS/Functions.dm @@ -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) diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index b2972d2ff2..f8b743eb70 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -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 << "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." @@ -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) diff --git a/code/game/jobs/job/captain.dm b/code/game/jobs/job/captain.dm index f705a6cfc6..38cb9d10be 100644 --- a/code/game/jobs/job/captain.dm +++ b/code/game/jobs/job/captain.dm @@ -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) diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index ba17a2bb4b..1dea42fe84 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -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 diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm index a5874f0985..1369bb1575 100644 --- a/code/game/objects/items/weapons/storage/firstaid.dm +++ b/code/game/objects/items/weapons/storage/firstaid.dm @@ -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 diff --git a/code/game/objects/structures/lamarr_cage.dm b/code/game/objects/structures/lamarr_cage.dm index eebe9fb343..83df96a728 100644 --- a/code/game/objects/structures/lamarr_cage.dm +++ b/code/game/objects/structures/lamarr_cage.dm @@ -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 \ No newline at end of file diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 7dd3407ce7..292327ca27 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -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.") diff --git a/code/modules/admin/verbs/check_customitem_activity.dm b/code/modules/admin/verbs/check_customitem_activity.dm index a39ce0fd53..1bda56c6e5 100644 --- a/code/modules/admin/verbs/check_customitem_activity.dm +++ b/code/modules/admin/verbs/check_customitem_activity.dm @@ -55,7 +55,7 @@ var/inactive_keys = "None
" //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] diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index 809302387a..8ef53eb023 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -11,7 +11,7 @@ client/proc/one_click_antag() /datum/admins/proc/one_click_antag() var/dat = {"One-click Antagonist
- Make Tratiors
+ Make Traitors
Make Changlings
Make Revs
Make Cult
@@ -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) diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index 8757ad0d4f..a12672bf52 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -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. /* diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 8a21fc6b6c..4799dcffbc 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -252,6 +252,7 @@ datum/preferences dat += "Blood Type: [b_type]
" dat += "Skin Tone: [-s_tone + 35]/220
" //dat += "Skin pattern: Adjust
" + dat += "Needs Glasses: [disabilities == 0 ? "No" : "Yes"]
" dat += "Limbs: Adjust
" //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 diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index f60a5409da..4a4d49d25f 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -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 diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 751dde212c..88349d2075 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -1,6 +1,7 @@ /obj/item/clothing name = "clothing" + //Ears: currently only used for headsets and earmuffs /obj/item/clothing/ears name = "ears" diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index a662bbdf5c..5795e8c714 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -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 diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 7eca9638fc..a905e5d90a 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -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) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index ae58b2fbcf..5221d77979 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -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 diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index c7aab1d9ed..162a69b49c 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -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() diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 94fc27ba8d..de8f271c6c 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -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 = "Crew RosterCrew Roster:

" - - 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]
" - dat += "" + var/dat + dat += "

Crew Manifest

" + if(data_core) + dat += data_core.get_manifest(0) // make it monochrome + dat += "
" src << browse(dat, "window=airoster") onclose(src, "airoster") @@ -743,4 +739,4 @@ var/list/ai_list = list() anchored = 1 return else - return ..() + return ..() diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm index 139d65765b..27d557c70c 100644 --- a/code/modules/mob/living/silicon/pai/software.dm +++ b/code/modules/mob/living/silicon/pai/software.dm @@ -413,14 +413,9 @@ /mob/living/silicon/pai/proc/softwareManifest() var/dat = "" dat += "

Crew Manifest



" - 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]
" - dat += "" + if(data_core) + dat += data_core.get_manifest(0) // make it monochrome + dat += "
" return dat // Medical Records diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index ff45d97201..774810be30 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -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)) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index b6758bf0f4..253e4ee43d 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -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( \ diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 1e8dd38692..97133deb4c 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -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 diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index 45a6de87f7..fcd55fefe9 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -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) diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm index 7eaf4d1b01..f37e62ac49 100644 --- a/code/modules/power/generator.dm +++ b/code/modules/power/generator.dm @@ -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
" t += "Outlet Pressure: [round(circ1.air2.return_pressure(), 0.1)] kPa
" t += "Outlet Temperature: [round(circ1.air2.temperature, 0.1)] K
" + t += "Turbine Status: [circ1.turbine_pumping ? "Pumping" : "Generating"]

" t += "Secondary Circulator (bottom/left)
" t += "Inlet Pressure: [round(circ2.air1.return_pressure(), 0.1)] kPa
" t += "Inlet Temperature: [round(circ2.air1.temperature, 0.1)] K
" t += "Outlet Pressure: [round(circ2.air2.return_pressure(), 0.1)] kPa
" t += "Outlet Temperature: [round(circ2.air2.temperature, 0.1)] K
" + t += "Turbine Status: [circ2.turbine_pumping ? "Pumping" : "Generating"]
" + else t += "Unable to connect to circulators.
" 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) \ No newline at end of file diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index 0babdc8406..9435fee6a0 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -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())) diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index c8b42e778c..0036ca2333 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -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) diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm index 3ca89a094d..52e7ba9d63 100644 --- a/code/modules/reagents/Chemistry-Recipes.dm +++ b/code/modules/reagents/Chemistry-Recipes.dm @@ -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() diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index fa0c2b3935..b231729fa1 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -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/////// diff --git a/config/admin_ranks.txt b/config/admin_ranks.txt index 1b377e9fd1..3c38a0dbe0 100644 --- a/config/admin_ranks.txt +++ b/config/admin_ranks.txt @@ -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 diff --git a/config/admins.txt b/config/admins.txt index f80ff5334e..b2ff2178a4 100644 --- a/config/admins.txt +++ b/config/admins.txt @@ -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 diff --git a/config/custom_items.txt b/config/custom_items.txt index 9604d19db1..d0d61b1bf9 100644 --- a/config/custom_items.txt +++ b/config/custom_items.txt @@ -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 \ No newline at end of file +mordeth221: Sven Fjeltson: /obj/item/weapon/fluff/sven_fjeltson_1 diff --git a/html/changelog.html b/html/changelog.html index 5c4471354c..5daa157b92 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -46,7 +46,6 @@ Header Section -Visit the bleeding-edge test server at byond://tekkit.fallemmc.com:8000 +
+

17 April 2013

+

SkyMarshal updated:

+
    +
  • ZAS is now more deadly, as per decision by administrative team. May be tweaked, but currently AIRFLOW is the biggest griefer.
  • +
  • World startup optimized, many functions now delayed until a player joins the server. (Reduces server boot time significantly)
  • +
  • Zones will now equalize air more rapidly.
  • +
  • ZAS now respects active magboots when airflow occurs.
  • +
  • Airflow will no longer throw you into doors and open them.
  • +
  • Race condition in zone construction has been fixed, so zones connect properly at round start.
  • +
  • Plasma effects readded.
  • +
  • Fixed runtime involving away mission.
  • +
+
+ +
+

30.04.2013

+

Spamcat updated:

+
    +
  • Pill bottle capacity increased to 14 items.
  • +
  • Fixed Lamarr (it now spawns properly)
  • +
+
+

15.04.2013

Spamcat updated:

diff --git a/icons/mob/eyes.dmi b/icons/mob/eyes.dmi index cde19553cc..99d62141ef 100644 Binary files a/icons/mob/eyes.dmi and b/icons/mob/eyes.dmi differ diff --git a/icons/obj/custom_items.dmi b/icons/obj/custom_items.dmi index aaf47b37a9..f0a310d2e8 100644 Binary files a/icons/obj/custom_items.dmi and b/icons/obj/custom_items.dmi differ