diff --git a/code/__DEFINES/vote.dm b/code/__DEFINES/vote.dm index 88e70b884e..bbe6ddf2b7 100644 --- a/code/__DEFINES/vote.dm +++ b/code/__DEFINES/vote.dm @@ -5,6 +5,9 @@ #define HIGHEST_MEDIAN_VOTING "HIGHEST_MEDIAN" #define INSTANT_RUNOFF_VOTING "IRV" +#define VOTE_TRANSFER "Initiate Crew Transfer" +#define VOTE_CONTINUE "Continue Playing" + #define SHOW_RESULTS (1<<0) #define SHOW_VOTES (1<<1) #define SHOW_WINNER (1<<2) diff --git a/code/controllers/subsystem/vote.dm b/code/controllers/subsystem/vote.dm index df8517464e..71486a8a38 100644 --- a/code/controllers/subsystem/vote.dm +++ b/code/controllers/subsystem/vote.dm @@ -32,6 +32,8 @@ SUBSYSTEM_DEF(vote) var/list/stored_modetier_results = list() // The aggregated tier list of the modes available in secret. + var/transfer_votes_done = 0 + /datum/controller/subsystem/vote/fire() //called by master_controller if(mode) if(end_time < world.time) @@ -248,8 +250,18 @@ SUBSYSTEM_DEF(vote) if(vote_system == SCORE_VOTING) calculate_scores(vote_title_text) if(vote_system == HIGHEST_MEDIAN_VOTING) - calculate_highest_median(vote_title_text) // nothing uses this at the moment - var/list/winners = vote_system == INSTANT_RUNOFF_VOTING ? get_runoff_results() : get_result() + calculate_highest_median(vote_title_text) + var/list/winners = list() + if(mode == "transfer") + var/amount_required = 3 + transfer_votes_done + transfer_votes_done += 1 + text += "\nExtending requires at least [amount_required] votes to win." + if(choices[VOTE_CONTINUE] < amount_required || choices[VOTE_TRANSFER] >= choices[VOTE_CONTINUE]) + winners = list(VOTE_TRANSFER) + else + winners = list(VOTE_CONTINUE) + else + winners = vote_system == INSTANT_RUNOFF_VOTING ? get_runoff_results() : get_result() var/was_roundtype_vote = mode == "roundtype" || mode == "dynamic" if(winners.len > 0) if(was_roundtype_vote) @@ -305,7 +317,7 @@ SUBSYSTEM_DEF(vote) if(vote_system == SCHULZE_VOTING) admintext += "\nIt should be noted that this is not a raw tally of votes (impossible in ranked choice) but the score determined by the schulze method of voting, so the numbers will look weird!" else if(vote_system == HIGHEST_MEDIAN_VOTING) - admintext += "\nIt should be noted that this is not a raw tally of votes but the number of runoffs done by majority judgement!" + admintext += "\nIt should be noted that this is not a raw tally of votes but rather the median score plus a tiebreaker!" for(var/i=1,i<=choices.len,i++) var/votes = choices[choices[i]] admintext += "\n[choices[i]]: [votes]" @@ -339,7 +351,7 @@ SUBSYSTEM_DEF(vote) if(SSmapping.changemap(config.maplist[.])) to_chat(world, "The map vote has chosen [VM.map_name] for next round!") if("transfer") // austation begin -- Crew autotransfer vote - if(. == "Initiate Crew Transfer") + if(. == VOTE_TRANSFER) SSshuttle.autoEnd() var/obj/machinery/computer/communications/C = locate() in GLOB.machines if(C) @@ -446,7 +458,7 @@ SUBSYSTEM_DEF(vote) continue choices |= M if("transfer") // austation begin -- Crew autotranfer vote - choices.Add("Initiate Crew Transfer","Continue Playing") // austation end + choices.Add(VOTE_TRANSFER,VOTE_CONTINUE) // austation end if("roundtype") //CIT CHANGE - adds the roundstart secret/extended vote choices.Add("dynamic", "extended") if("custom") diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index 201200a95d..22ce4e7ce5 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -469,15 +469,20 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) //((((some value between 0.5 and 1 * temp - ((273.15 + 40) * some values between 1 and 10)) * some number between 0.25 and knock your socks off / 150) * 0.25 //Heat and mols account for each other, a lot of hot mols are more damaging then a few //Mols start to have a positive effect on damage after 350 + var/spaced = 0 + for(var/turf/open/space/_space_turf in range(2,src)) + spaced++ damage = max(damage + (max(clamp(removed.total_moles() / 200, 0.5, 1) * removed.return_temperature() - ((T0C + HEAT_PENALTY_THRESHOLD)*dynamic_heat_resistance), 0) * mole_heat_penalty / 150 ) * DAMAGE_INCREASE_MULTIPLIER, 0) //Power only starts affecting damage when it is above 5000 damage = max(damage + (max(power - POWER_PENALTY_THRESHOLD, 0)/500) * DAMAGE_INCREASE_MULTIPLIER, 0) //Molar count only starts affecting damage when it is above 1800 damage = max(damage + (max(combined_gas - MOLE_PENALTY_THRESHOLD, 0)/80) * DAMAGE_INCREASE_MULTIPLIER, 0) + damage = max(damage + spaced * 0.1 * DAMAGE_INCREASE_MULTIPLIER, 0) + //There might be a way to integrate healing and hurting via heat //healing damage - if(combined_gas < MOLE_PENALTY_THRESHOLD) + if(combined_gas < MOLE_PENALTY_THRESHOLD && !spaced) //Only has a net positive effect when the temp is below 313.15, heals up to 2 damage. Psycologists increase this temp min by up to 45 damage = max(damage + (min(removed.return_temperature() - (T0C + HEAT_PENALTY_THRESHOLD), 0) / 150), 0)