diff --git a/code/game/gamemodes/gameticker.dm b/code/game/gamemodes/gameticker.dm index fc853aa3aff..64fb906ef32 100644 --- a/code/game/gamemodes/gameticker.dm +++ b/code/game/gamemodes/gameticker.dm @@ -34,6 +34,8 @@ var/global/datum/controller/gameticker/ticker var/delay_end = 0 //if set to nonzero, the round will not restart on it's own + var/triai = 0//Global holder for Triumvirate + /datum/controller/gameticker/proc/pregame() login_music = pick('title2.ogg') // choose title music! @@ -82,7 +84,6 @@ var/global/datum/controller/gameticker/ticker return 0 //Configure mode and assign player to special mode stuff - job_master.DivideOccupations() //Distribute jobs var/can_continue = src.mode.pre_setup()//Setup special modes if(!can_continue) diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index 6073200122e..09e3345bf8a 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -111,27 +111,28 @@ var/global/datum/controller/occupations/job_master if(!job) return 0 if((job.title == "AI") && (config) && (!config.allow_ai)) return 0 - for(var/level = 1 to 3) - var/list/candidates = list() - if(ticker.mode.name == "AI malfunction")//Make sure they want to malf if its malf - candidates = FindOccupationCandidates(job, level, BE_MALF) - else - candidates = FindOccupationCandidates(job, level) - if(candidates.len) - var/mob/new_player/candidate = pick(candidates) - if(AssignRole(candidate, "AI")) - ai_selected++ - break - //Malf NEEDS an AI so force one if we didn't get a player who wanted it - if((ticker.mode.name == "AI malfunction")&&(!ai_selected)) - unassigned = shuffle(unassigned) - for(var/mob/new_player/player in unassigned) - if(jobban_isbanned(player, "AI")) continue - if(AssignRole(player, "AI")) - ai_selected++ - break - if(ai_selected) return 1 - return 0 + for(var/i = job.total_positions, i > 0, i--) + for(var/level = 1 to 3) + var/list/candidates = list() + if(ticker.mode.name == "AI malfunction")//Make sure they want to malf if its malf + candidates = FindOccupationCandidates(job, level, BE_MALF) + else + candidates = FindOccupationCandidates(job, level) + if(candidates.len) + var/mob/new_player/candidate = pick(candidates) + if(AssignRole(candidate, "AI")) + ai_selected++ + break + //Malf NEEDS an AI so force one if we didn't get a player who wanted it + if((ticker.mode.name == "AI malfunction")&&(!ai_selected)) + unassigned = shuffle(unassigned) + for(var/mob/new_player/player in unassigned) + if(jobban_isbanned(player, "AI")) continue + if(AssignRole(player, "AI")) + ai_selected++ + break + if(ai_selected) return 1 + return 0 /** Proc DivideOccupations @@ -144,6 +145,10 @@ var/global/datum/controller/occupations/job_master SetupOccupations() occupations = shuffle(occupations) //Shuffles job-list at round start so that people don't have their job picks randomized + if(ticker)//Holder for Triumvirate is stored in the ticker, this just processes it + for(var/datum/job/ai/A in occupations) + if(ticker.triai) + A.spawn_positions = 3 //Get the players who are ready for(var/mob/new_player/player in world) diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm index 1030aaa4a7d..c842621b8f6 100644 --- a/code/game/mecha/equipment/tools/tools.dm +++ b/code/game/mecha/equipment/tools/tools.dm @@ -94,6 +94,17 @@ for(var/obj/item/weapon/ore/ore in range(chassis,1)) if(get_dir(chassis,ore)&chassis.dir) ore.Move(ore_box) + else if(istype(target, /turf/simulated/floor/plating/airless/asteroid)) + for(var/turf/simulated/floor/plating/airless/asteroid/M in range(chassis,1)) + if(get_dir(chassis,M)&chassis.dir) + M.gets_dug() + log_message("Drilled through [target]") + if(locate(/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp) in chassis.equipment) + var/obj/structure/ore_box/ore_box = locate(/obj/structure/ore_box) in chassis:cargo + if(ore_box) + for(var/obj/item/weapon/ore/ore in range(chassis,1)) + if(get_dir(chassis,ore)&chassis.dir) + ore.Move(ore_box) else if(target.loc == C) log_message("Drilled through [target]") target.ex_act(2) @@ -146,7 +157,7 @@ if(locate(/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp) in chassis.equipment) var/obj/structure/ore_box/ore_box = locate(/obj/structure/ore_box) in chassis:cargo if(ore_box) - for(var/obj/item/weapon/ore/ore in range(chassis,1)) + for(var/obj/item/weapon/ore/ore in range(target,1)) ore.Move(ore_box) else if(target.loc == C) log_message("Drilled through [target]") diff --git a/code/game/turf.dm b/code/game/turf.dm index d15bd2bca31..e9d3c804fcb 100644 --- a/code/game/turf.dm +++ b/code/game/turf.dm @@ -907,7 +907,7 @@ /turf/simulated/wall/mineral/attackby(obj/item/weapon/W as obj, mob/user as mob) if((mineral == "plasma") && W) - if(is_hot(W) > 300) + if(is_hot(W) > 300)//If the temperature of the object is over 300, then ignite ignite(is_hot(W)) return if(mineral == "uranium") @@ -940,7 +940,7 @@ for(var/obj/machinery/door/airlock/plasma/D in range(3,src)) D.ignite(temperature/4) -/turf/simulated/wall/mineral/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) +/turf/simulated/wall/mineral/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)//Doesn't fucking work because walls don't interact with air :( if(mineral == "plasma") if(exposed_temperature > 300) PlasmaBurn(exposed_temperature) @@ -1003,7 +1003,7 @@ var/list/icons_to_ignore_at_floor_init = list("damaged1","damaged2","damaged3"," "light_on_broken","light_off","wall_thermite","grass1","grass2","grass3","grass4", "asteroid","asteroid_dug", "asteroid0","asteroid1","asteroid2","asteroid3","asteroid4", - "asteroid5","asteroid6","asteroid7","asteroid8", + "asteroid5","asteroid6","asteroid7","asteroid8","asteroid9","asteroid10","asteroid11","asteroid12", "burning","oldburning","light-on-r","light-on-y","light-on-g","light-on-b") var/list/plating_icons = list("plating","platingdmg1","platingdmg2","platingdmg3","asteroid","asteroid_dug") @@ -1321,6 +1321,7 @@ turf/simulated/floor/return_siding_icon_state() /turf/simulated/floor/proc/burn_tile() if(istype(src,/turf/simulated/floor/engine)) return + if(istype(src,/turf/simulated/floor/plating/airless/asteroid)) return//Asteroid tiles don't burn if(broken || burnt) return if(is_plasteel_floor()) src.icon_state = "damaged[pick(1,2,3,4,5)]" diff --git a/code/modules/admin/verbs/tripAI.dm b/code/modules/admin/verbs/tripAI.dm index e3bfd3b5db7..373ca3237e6 100644 --- a/code/modules/admin/verbs/tripAI.dm +++ b/code/modules/admin/verbs/tripAI.dm @@ -5,18 +5,17 @@ if(ticker.current_state > GAME_STATE_PREGAME) usr << "This option is currently only usable during pregame. This may change at a later date." return - if(job_master) + if(job_master && ticker) var/datum/job/job = job_master.GetJob("AI") if(!job) usr << "Unable to locate the AI job" return - - if(job.spawn_positions >= 3) - job.spawn_positions -= 2 + if(ticker.triai) + ticker.triai = 0 usr << "Only one AI will be spawned at round start." message_admins("\blue [key_name_admin(usr)] has toggled off triple AIs at round start.", 1) else - job.spawn_positions += 2 + ticker.triai = 1 usr << "There will be an AI Triumvirate at round start." message_admins("\blue [key_name_admin(usr)] has toggled on triple AIs at round start.", 1) feedback_add_details("admin_verb","CAIT") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!