diff --git a/code/controllers/voting.dm b/code/controllers/voting.dm index 8b1f719bc1..ef1e41dd53 100644 --- a/code/controllers/voting.dm +++ b/code/controllers/voting.dm @@ -163,13 +163,14 @@ datum/controller/vote restart = 1 else master_mode = . - if(!going) - going = 1 - world << "The round will start soon." if("crew_transfer") if(. == "Initiate Crew Transfer") init_shift_change(null, 1) + if(mode == "gamemode") //fire this even if the vote fails. + if(!going) + going = 1 + world << "The round will start soon." if(restart) world << "World restarting due to vote..." diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 917ecfe9a3..47903bbc30 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -317,7 +317,43 @@ its easier to just keep the beam vertical. var/full_print = md5(H.dna.uni_identity) // Add the fingerprints - fingerprints[full_print] = full_print + // + if(fingerprints[full_print]) + switch(stringpercent(fingerprints[full_print])) //tells us how many stars are in the current prints. + + if(28 to 32) + if(prob(1)) + fingerprints[full_print] = full_print // You rolled a one buddy. + else + fingerprints[full_print] = stars(full_print, rand(0,40)) // 24 to 32 + + if(24 to 27) + if(prob(3)) + fingerprints[full_print] = full_print //Sucks to be you. + else + fingerprints[full_print] = stars(full_print, rand(15, 55)) // 20 to 29 + + if(20 to 23) + if(prob(5)) + fingerprints[full_print] = full_print //Had a good run didn't ya. + else + fingerprints[full_print] = stars(full_print, rand(30, 70)) // 15 to 25 + + if(16 to 19) + if(prob(5)) + fingerprints[full_print] = full_print //Welp. + else + fingerprints[full_print] = stars(full_print, rand(40, 100)) // 0 to 21 + + if(0 to 15) + if(prob(5)) + fingerprints[full_print] = stars(full_print, rand(0,50)) // small chance you can smudge. + else + fingerprints[full_print] = full_print + + else + fingerprints[full_print] = stars(full_print, rand(0, 20)) //Initial touch, not leaving much evidence the first time. + return 1 else diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index affdad74d6..726de7ad81 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -187,8 +187,8 @@ var/heat_capacity = gas.heat_capacity() var/energy_used = min( abs( heat_capacity*(gas.temperature - target_temperature) ), MAX_ENERGY_CHANGE) - //Use power. Assuming that each power unit represents 1000 watts.... - use_power(energy_used/1000, ENVIRON) + //Use power. Assuming that each power unit represents 1 watts.... + use_power(energy_used, ENVIRON) //We need to cool ourselves. if(environment.temperature > target_temperature) diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm index a9dcdc537d..7632e9cb6e 100644 --- a/code/game/machinery/cell_charger.dm +++ b/code/game/machinery/cell_charger.dm @@ -10,6 +10,7 @@ power_channel = EQUIP var/obj/item/weapon/cell/charging = null var/chargelevel = -1 + var/efficiency = 0.875 //<1.0 means some power is lost in the charging process, >1.0 means free energy. proc updateicon() icon_state = "ccharger[charging ? 1 : 0]" @@ -91,8 +92,10 @@ //world << "ccpt [charging] [stat]" if(!charging || (stat & (BROKEN|NOPOWER)) || !anchored) return - - use_power(200) //this used to use CELLRATE, but CELLRATE is fucking awful. feel free to fix this properly! - charging.give(175) //inefficiency. - + + var/power_used = 100000 //for 200 units of charge. Yes, thats right, 100 kW. Is something wrong with CELLRATE? + + power_used = charging.give(power_used*CELLRATE*efficiency) + use_power(power_used) + updateicon() diff --git a/code/global.dm b/code/global.dm index b7f6e3e4c0..07eaf211e3 100644 --- a/code/global.dm +++ b/code/global.dm @@ -115,7 +115,8 @@ var/list/reg_dna = list( ) var/mouse_respawn_time = 5 //Amount of time that must pass between a player dying as a mouse and repawning as a mouse. In minutes. -var/CELLRATE = 0.002 // multiplier for watts per tick <> cell storage (eg: 0.02 means if there is a load of 1000 watts, 20 units will be taken from a cell per second) +var/CELLRATE = 0.002 // multiplier for watts per tick <> cell storage (eg: 0.02 means if there is a load of 1000 watts, 20 units will be taken from a cell per second) + //It's a conversion constant. power_used*CELLRATE = charge_provided, or charge_used/CELLRATE = power_provided var/CHARGELEVEL = 0.0005 // Cap for how fast cells charge, as a percentage-per-tick (0.01 means cellcharge is capped to 1% per second) var/shuttle_z = 2 //default diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index 7e1b2cad97..efea3d1609 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -35,7 +35,8 @@ //takes input from cmd_admin_pm_context, cmd_admin_pm_panel or /client/Topic and sends them a PM. //Fetching a message if needed. src is the sender and C is the target client -/client/proc/cmd_admin_pm(var/client/C, var/msg) + +/client/proc/cmd_admin_pm(var/client/C, var/msg = null) if(prefs.muted & MUTE_ADMINHELP) src << "Error: Private-Message: You are unable to use PM-s (muted)." return @@ -45,14 +46,6 @@ else adminhelp(msg) //admin we are replying to left. adminhelp instead return - /*if(C && C.last_pm_recieved + config.simultaneous_pm_warning_timeout > world.time && holder) - //send a warning to admins, but have a delay popup for mods - if(holder.rights & R_ADMIN) - src << "\red Simultaneous PMs warning: that player has been PM'd in the last [config.simultaneous_pm_warning_timeout / 10] seconds by: [C.ckey_last_pm]" - else - if(alert("That player has been PM'd in the last [config.simultaneous_pm_warning_timeout / 10] seconds by: [C.ckey_last_pm]","Simultaneous PMs warning","Continue","Cancel") == "Cancel") - return*/ - //get message text, limit it's length.and clean/escape html if(!msg) msg = input(src,"Message:", "Private message to [key_name(C, 0, holder ? 1 : 0)]") as text|null @@ -85,7 +78,10 @@ else recieve_color = "maroon" send_pm_type = holder.rank + " " - recieve_pm_type = holder.rank + if(!C.holder && holder && holder.fakekey) + recieve_pm_type = "Admin" + else + recieve_pm_type = holder.rank else if(!C.holder) src << "Error: Admin-PM: Non-admin to non-admin PM communication is forbidden." @@ -112,70 +108,15 @@ adminhelp(reply) //sender has left, adminhelp instead return - recieve_message = "[recieve_pm_type] PM from-[get_options_bar(C, 1, C.holder ? 1 : 0, 1)]: [msg]" + recieve_message = "[recieve_pm_type] PM from-[get_options_bar(src, C.holder ? 1 : 0, C.holder ? 1 : 0, 1)]: [msg]" C << recieve_message - src << "[send_pm_type]PM to-[get_options_bar(C, 1, holder ? 1 : 0, 1)]: [msg]" - - /*if(holder && !C.holder) - C.last_pm_recieved = world.time - C.ckey_last_pm = ckey*/ + src << "[send_pm_type]PM to-[get_options_bar(C, holder ? 1 : 0, holder ? 1 : 0, 1)]: [msg]" //play the recieving admin the adminhelp sound (if they have them enabled) //non-admins shouldn't be able to disable this if(C.prefs.toggles & SOUND_ADMINHELP) C << 'sound/effects/adminhelp.ogg' - /* - if(C.holder) - if(holder) //both are admins - if(holder.rank == "Moderator") //If moderator - C << "Mod PM from-[key_name(src, C, 1)]: [msg]" - src << "Mod PM to-[key_name(C, src, 1)]: [msg]" - else - C << "Admin PM from-[key_name(src, C, 1)]: [msg]" - src << "Admin PM to-[key_name(C, src, 1)]: [msg]" - - else //recipient is an admin but sender is not - C << "Reply PM from-[key_name(src, C, 1)]: [msg]" - src << "PM to-Admins: [msg]" - - //play the recieving admin the adminhelp sound (if they have them enabled) - if(C.prefs.toggles & SOUND_ADMINHELP) - C << 'sound/effects/adminhelp.ogg' - - else - if(holder) //sender is an admin but recipient is not. Do BIG RED TEXT - if(holder.rank == "Moderator") - C << "Mod PM from-[key_name(src, C, 0)]: [msg]" - C << "Click on the moderators's name to reply." - src << "Mod PM to-[key_name(C, src, 1)]: [msg]" - else - C << "-- Administrator private message --" - C << "Admin PM from-[key_name(src, C, 0)]: [msg]" - C << "Click on the administrator's name to reply." - src << "Admin PM to-[key_name(C, src, 1)]: [msg]" - - //always play non-admin recipients the adminhelp sound - C << 'sound/effects/adminhelp.ogg' - - //AdminPM popup for ApocStation and anybody else who wants to use it. Set it with POPUP_ADMIN_PM in config.txt ~Carn - if(config.popup_admin_pm) - spawn() //so we don't hold the caller proc up - var/sender = src - var/sendername = key - var/reply = input(C, msg,"Admin PM from-[sendername]", "") as text|null //show message and await a reply - if(C && reply) - if(sender) - C.cmd_admin_pm(sender,reply) //sender is still about, let's reply to them - else - adminhelp(reply) //sender has left, adminhelp instead - return - - else //neither are admins - src << "Error: Admin-PM: Non-admin to non-admin PM communication is forbidden." - return - */ - log_admin("PM: [key_name(src)]->[key_name(C)]: [msg]") //we don't use message_admins here because the sender/receiver might get it too diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index 6198c93daa..b3cdba6030 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -191,6 +191,7 @@ var/DBQuery/query = dbcon.NewQuery("SELECT id, datediff(Now(),firstseen) as age FROM erro_player WHERE ckey = '[sql_ckey]'") query.Execute() var/sql_id = 0 + player_age = 0 // New players won't have an entry so knowing we have a connection we set this to zero to be updated if their is a record. while(query.NextRow()) sql_id = query.item[1] player_age = text2num(query.item[2]) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 1ed36e5634..12ae785a55 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -424,7 +424,7 @@ datum/preferences var/HTML = "" HTML += "
" - HTML += "Choose occupation chances
Unavailable occupations are in red.

" + HTML += "Choose occupation chances
Unavailable occupations are crossed out.

" HTML += "
\[Done\]

" // Easier to press up here. HTML += "
" // Table within a table for alignment, also allows you to easily add more colomns. HTML += "" @@ -449,11 +449,11 @@ datum/preferences var/rank = job.title lastJob = job if(jobban_isbanned(user, rank)) - HTML += "[rank]" + HTML += "[rank]" continue if(!job.player_old_enough(user.client)) var/available_in_days = job.available_in_days(user.client) - HTML += "[rank]" + HTML += "[rank]" continue if((job_civilian_low & ASSISTANT) && (rank != "Assistant")) HTML += "[rank]" diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm index 066d5a5fd8..32a64a145b 100644 --- a/code/modules/mob/living/carbon/human/say.dm +++ b/code/modules/mob/living/carbon/human/say.dm @@ -14,6 +14,9 @@ if(stat == 2) return say_dead(message) + if (istype(wear_mask, /obj/item/clothing/mask/muzzle)) //Todo: Add this to speech_problem_flag checks. + return + if(copytext(message,1,2) == "*") return emote(copytext(message,2)) diff --git a/code/modules/power/pacman2.dm b/code/modules/power/pacman2.dm index 5136c9dd76..497148bb33 100644 --- a/code/modules/power/pacman2.dm +++ b/code/modules/power/pacman2.dm @@ -1,7 +1,7 @@ //This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:05 -//Baseline portable generator. Has all the default handling. Not intended to be used on it's own (since it generates unlimited power). +//PACMAN variant that can run on the small plasma tanks. /obj/machinery/power/port_gen/pacman2 name = "Pacman II" desc = "P.A.C.M.A.N. type II portable generator. Uses liquid phoron as a fuel source." diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index 7acdf9b560..2af232f371 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -93,6 +93,7 @@ display round(lastgen) and phorontank amount else usr << "\blue The generator is off." +//A power generator that runs on solid plasma sheets. /obj/machinery/power/port_gen/pacman name = "P.A.C.M.A.N.-type Portable Generator" var/sheets = 0 diff --git a/tools/mapmerge/MapPatcher.jar b/tools/mapmerge/MapPatcher.jar index 5cbaad488c..a8bc3560b4 100644 Binary files a/tools/mapmerge/MapPatcher.jar and b/tools/mapmerge/MapPatcher.jar differ
\[BANNED]
\[BANNED]
\[IN [(available_in_days)] DAYS]
\[IN [(available_in_days)] DAYS]