diff --git a/.gitignore b/.gitignore index 059cf70e2bb0..6b879cc3ad81 100644 --- a/.gitignore +++ b/.gitignore @@ -22,8 +22,9 @@ info.json /dmis /interface-indented /code-indented +*.new.dmi .metadata /bot/config.yml /bot/data -/analysis +/analysis \ No newline at end of file diff --git a/baystation12.dme b/baystation12.dme index 17914de2334a..2a7b7dc6480e 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -1006,6 +1006,7 @@ #include "code\modules\mob\living\login.dm" #include "code\modules\mob\living\logout.dm" #include "code\modules\mob\living\say.dm" +#include "code\modules\mob\living\carbon\_defines.dm" #include "code\modules\mob\living\carbon\carbon.dm" #include "code\modules\mob\living\carbon\carbon_defines.dm" #include "code\modules\mob\living\carbon\give.dm" @@ -1066,6 +1067,7 @@ #include "code\modules\mob\living\carbon\human\update_icons.dm" #include "code\modules\mob\living\carbon\human\whisper.dm" #include "code\modules\mob\living\carbon\human\catbeast\catbeast.dm" +#include "code\modules\mob\living\carbon\human\plasmaman\species.dm" #include "code\modules\mob\living\carbon\metroid\death.dm" #include "code\modules\mob\living\carbon\metroid\emote.dm" #include "code\modules\mob\living\carbon\metroid\examine.dm" diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index 2e8d6f8b5132..ece06fcb4a34 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -325,6 +325,13 @@ else contents.Add(0) + // ACK ACK ACK Plasmen + if ("plasma") + if(t.air_contents.toxins) + contents.Add(t.air_contents.toxins) + else + contents.Add(0) + else //no tank so we set contents to 0 diff --git a/code/game/objects/items/weapons/tanks/tank_types.dm b/code/game/objects/items/weapons/tanks/tank_types.dm index 1e10b522e2ed..0867f8efa8cf 100644 --- a/code/game/objects/items/weapons/tanks/tank_types.dm +++ b/code/game/objects/items/weapons/tanks/tank_types.dm @@ -96,6 +96,17 @@ src.loc = F return +/obj/item/weapon/tank/plasma/plasmaman + desc = "The lifeblood of plasmamen. Warning: Extremely flammable, do not inhale (unless you're a plasman)." + icon_state = "plasma_fr" + +/obj/item/weapon/tank/plasma/plasmaman/examine() + set src in usr + ..() + if(air_contents.toxins < 0.2 && loc==usr) + usr << text("\red The meter on the [src.name] indicates you are almost out of plasma!") + usr << sound('sound/effects/alert.ogg') + /* * Emergency Oxygen */ diff --git a/code/modules/clothing/spacesuits/alien.dm b/code/modules/clothing/spacesuits/alien.dm index 4f19ed673ffb..2ff38df929fc 100644 --- a/code/modules/clothing/spacesuits/alien.dm +++ b/code/modules/clothing/spacesuits/alien.dm @@ -219,4 +219,55 @@ name = "vox security pressure helmet" icon_state = "vox-pressure-security" item_state = "vox-pressure-security" - desc = "A very alien-looking helmet for Nanotrasen-hired Vox. This one is for shitcurity." \ No newline at end of file + desc = "A very alien-looking helmet for Nanotrasen-hired Vox. This one is for shitcurity." + +// PLASMEN SHIT +// CAN'T WEAR UNLESS YOU'RE A PINK SKELLINGTON +/obj/item/clothing/suit/space/plasmaman + w_class = 3 + allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs,/obj/item/weapon/tank) + slowdown = 2 + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 0) + heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS + flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT + max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECITON_TEMPERATURE + species_restricted = list("Plasmaman") + + icon_state = "plasmaman_suit" + item_state = "plasmaman_suit" + +/obj/item/clothing/head/helmet/space/plasmaman + species_restricted = list("Plasmaman") + + icon_state = "plasmaman_helmet0" + item_state = "plasmaman_helmet0" + var/brightness_on = 4 //luminosity when on + var/on = 0 + var/no_light=0 // Disable the light on the atmos suit + action_button_name = "Toggle Helmet Light" + + attack_self(mob/user) + if(!isturf(user.loc)) + user << "You cannot turn the light on while in this [user.loc]" //To prevent some lighting anomalities. + return + if(no_light) + return + on = !on + icon_state = "plasmaman_helmet[on]" +// item_state = "rig[on]-[_color]" + + if(on) user.SetLuminosity(user.luminosity + brightness_on) + else user.SetLuminosity(user.luminosity - brightness_on) + + pickup(mob/user) + if(on) + user.SetLuminosity(user.luminosity + brightness_on) +// user.UpdateLuminosity() + SetLuminosity(0) + + dropped(mob/user) + if(on) + user.SetLuminosity(user.luminosity - brightness_on) +// user.UpdateLuminosity() + SetLuminosity(brightness_on) \ No newline at end of file diff --git a/code/modules/media/jukebox.dm b/code/modules/media/jukebox.dm index 795cde2bcd54..a333ea81343c 100644 --- a/code/modules/media/jukebox.dm +++ b/code/modules/media/jukebox.dm @@ -497,6 +497,7 @@ var/global/loopModeNames=list( playlist_id="muzak" autoplay = 1 + change_cost = 0 id_tag="DJ Satellite" // For autolink diff --git a/code/modules/media/tapedeck.dm b/code/modules/media/tapedeck.dm index 74b5a8df1871..98f0bf70866b 100644 --- a/code/modules/media/tapedeck.dm +++ b/code/modules/media/tapedeck.dm @@ -7,69 +7,14 @@ #define JUKEMODE_SHUFFLE 1 // Default #define JUKEMODE_REPEAT_SONG 2 #define JUKEMODE_PLAY_ONCE 3 // Play, then stop. -#define JUKEMODE_COUNT 3 - -#define JUKEBOX_SCREEN_MAIN 1 // Default -#define JUKEBOX_SCREEN_PAYMENT 2 -#define JUKEBOX_SCREEN_SETTINGS 3 - -#define JUKEBOX_RELOAD_COOLDOWN 600 // 60s - -// Represents a record returned. -/datum/song_info - var/title = "" - var/artist = "" - var/album = "" - - var/url = "" - var/length = 0 // decaseconds - - var/emagged = 0 - - New(var/list/json) - title = json["title"] - artist = json["artist"] - album = json["album"] - - url = json["url"] - - length = text2num(json["length"]) - - proc/display() - var/str="\"[title]\"" - if(artist!="") - str += ", by [artist]" - if(album!="") - str += ", from '[album]'" - return str - - proc/displaytitle() - if(artist==""&&title=="") - return "\[NO TAGS\]" - var/str="" - if(artist!="") - str += artist+" - " - if(title!="") - str += "\"[title]\"" - else - str += "Untitled" - // Only show album if we have to. - if(album!="" && artist == "") - str += " ([album])" - return str - - -var/global/loopModeNames=list( - JUKEMODE_SHUFFLE = "Shuffle", - JUKEMODE_REPEAT_SONG = "Single", - JUKEMODE_PLAY_ONCE= "Once", -) + + /obj/machinery/media/tapedeck name = "Tape Deck" desc = "What the fuck is \"tape\", anyway?" icon = 'icons/obj/jukebox.dmi' - icon_state = "jukebox2" + icon_state = "tapedeck" density = 1 anchored = 1 @@ -94,33 +39,27 @@ var/global/loopModeNames=list( var/last_reload = 0 // Reload cooldown. var/last_song = 0 // Doubleplay prevention + // Eventually... var/cycletype = TAPEDECK_CYCLE_MUSIC var/adcyc_duration = 2 MINUTES var/last_ad_cyc = 0 // Last world.time of an ad cycle var/list/ad_queue = 0 // Ads queued to play - var/state_base = "jukebox2" - -/obj/machinery/media/jukebox/New(loc) - ..(loc) - if(department) - linked_account = department_accounts[department] - else - linked_account = station_account + var/state_base = "tapedeck" -/obj/machinery/media/jukebox/attack_ai(var/mob/user) +/obj/machinery/media/tapedeck/attack_ai(var/mob/user) attack_hand(user) -/obj/machinery/media/jukebox/attack_paw() +/obj/machinery/media/tapedeck/attack_paw() return -/obj/machinery/media/jukebox/power_change() +/obj/machinery/media/tapedeck/power_change() ..() - if(emagged && !(stat & (NOPOWER|BROKEN))) - playing = 1 + //if(emagged && !(stat & (NOPOWER|BROKEN))) + // playing = 1 update_icon() -/obj/machinery/media/jukebox/update_icon() +/obj/machinery/media/tapedeck/update_icon() overlays = 0 if(stat & (NOPOWER|BROKEN) || !anchored) if(stat & BROKEN) @@ -136,10 +75,10 @@ var/global/loopModeNames=list( else overlays += "[state_base]-running" -/obj/machinery/media/jukebox/proc/check_reload() +/obj/machinery/media/tapedeck/proc/check_reload() return world.time > last_reload + JUKEBOX_RELOAD_COOLDOWN -/obj/machinery/media/jukebox/attack_hand(var/mob/user) +/obj/machinery/media/tapedeck/attack_hand(var/mob/user) if(stat & NOPOWER) usr << "\red You don't see anything to mess with." return @@ -153,12 +92,12 @@ var/global/loopModeNames=list( var/t = "
" t += "Main" - if(allowed(user)) - t += " | Settings" + //if(allowed(user)) + // t += " | Settings" t += "
" switch(screen) if(JUKEBOX_SCREEN_MAIN) t += ScreenMain(user) - if(JUKEBOX_SCREEN_SETTINGS) t += ScreenSettings(user) + //if(JUKEBOX_SCREEN_SETTINGS) t += ScreenSettings(user) user.set_machine(src) var/datum/browser/popup = new (user,"tapedeck",name,420,700) @@ -183,53 +122,49 @@ var/global/loopModeNames=list( else t += "You cannot change the playlist." t += "
" + + //////////////////////////// + // Now here's the cool shit + t += {" + Playlist Tools: + Reload + Add Song + Clear +
"} + // + //////////////////////////// + if(current_song) var/datum/song_info/song=playlist[current_song] t += "Current song: [song.artist] - [song.title]
" if(next_song) var/datum/song_info/song=playlist[next_song] t += "Up next: [song.artist] - [song.title]
" - t += "" + t += "
Artist - TitleAlbum
" var/i var/can_change=1 for(i = 1,i <= playlist.len,i++) var/datum/song_info/song=playlist[i] - t += "" + t += {" + + + + + + "} t += "
Artist - TitleAlbumControls
#[i]" - if(can_change) t += "" - t += song.displaytitle() - if(can_change) t += "" - t += "[song.album]
#[i] + [song.displaytitle()] + [song.album] + Q + X +
" return t -/obj/machinery/media/jukebox/proc/ScreenPayment(var/mob/user) - var/t = "

Pay for Song

" - var/datum/song_info/song=playlist[selected_song] - t += {" -
-

You've selected [song.displaytitle()].

-

Swipe ID card or insert cash to play this song next! ($[num2septext(change_cost)])

- \[ Cancel \] -
"} - return t - /obj/machinery/media/jukebox/proc/ScreenSettings(var/mob/user) var/dat={"

Settings

-
- Banking -
- Payable Account: -
-
-
- Pricing -
- Change Song: $ -
-
Access

Permissions required to change song:

@@ -278,65 +213,13 @@ var/global/loopModeNames=list( playing = emagged update_music() update_icon() - else if(istype(W,/obj/item/weapon/card/id)) - if(!selected_song || screen!=JUKEBOX_SCREEN_PAYMENT) - visible_message("\blue The machine buzzes.","\red You hear a buzz.") - return - var/obj/item/weapon/card/id/I = W - if(!linked_account) - visible_message("\red The machine buzzes, and flashes \"NO LINKED ACCOUNT\" on the screen.","You hear a buzz.") - return - var/datum/money_account/acct = get_card_account(I) - if(!acct) - visible_message("\red The machine buzzes, and flashes \"NO ACCOUNT\" on the screen.","You hear a buzz.") - return - if(credits_needed > acct.money) - visible_message("\red The machine buzzes, and flashes \"NOT ENOUGH FUNDS\" on the screen.","You hear a buzz.") - return - visible_message("\blue The machine beeps happily.","You hear a beep.") - acct.charge(credits_needed,linked_account,"Song selection at [areaMaster.name]'s [name].") - credits_needed = 0 - - successful_purchase() - - attack_hand(user) - else if(istype(W,/obj/item/weapon/spacecash)) - if(!selected_song || screen!=JUKEBOX_SCREEN_PAYMENT) - visible_message("\blue The machine buzzes.","\red You hear a buzz.") - return - if(!linked_account) - visible_message("\red The machine buzzes, and flashes \"NO LINKED ACCOUNT\" on the screen.","You hear a buzz.") - return - var/obj/item/weapon/spacecash/C=W - credits_held += C.worth*C.amount - if(credits_held >= credits_needed) - visible_message("\blue The machine beeps happily.","You hear a beep.") - credits_held -= credits_needed - credits_needed=0 - screen=JUKEBOX_SCREEN_MAIN - if(credits_held) - var/obj/item/weapon/storage/box/B = new(loc) - dispense_cash(credits_held,B) - B.name="change" - B.desc="A box of change." - credits_held=0 - - successful_purchase() - attack_hand(user) - -/obj/machinery/media/jukebox/proc/successful_purchase() - next_song = selected_song - selected_song = 0 - screen = JUKEBOX_SCREEN_MAIN /obj/machinery/media/jukebox/Topic(href, href_list) if(isobserver(usr) && !isAdminGhost(usr)) usr << "\red You can't push buttons when your fingers go right through them, dummy." return + ..() - if(emagged) - usr << "\red You touch the bluescreened menu. Nothing happens. You feel dumber." - return if (href_list["power"]) playing=!playing @@ -362,6 +245,8 @@ var/global/loopModeNames=list( change_access = list() screen=POS_SCREEN_SETTINGS + if (href_list["reload"]) + href_list["playlist"]=playlist_id // Hax if (href_list["playlist"]) if(!check_reload()) @@ -378,20 +263,14 @@ var/global/loopModeNames=list( if (href_list["song"]) selected_song=Clamp(text2num(href_list["song"]),1,playlist.len) - if(!change_cost) - next_song = selected_song - selected_song = 0 - if(!current_song) - update_music() - update_icon() - else - usr << "\red Swipe card or insert $[num2septext(change_cost)] to set this song." - screen = JUKEBOX_SCREEN_PAYMENT - credits_needed=change_cost + next_song = selected_song + selected_song = 0 + if(!current_song) + update_music() + update_icon() - if (href_list["cancelbuy"]) - selected_song=0 - screen = JUKEBOX_SCREEN_MAIN + if (href_list["add_song"]) + var/song_uri= if (href_list["mode"]) loop_mode = (loop_mode % JUKEMODE_COUNT) + 1 diff --git a/code/modules/mob/living/carbon/_defines.dm b/code/modules/mob/living/carbon/_defines.dm new file mode 100644 index 000000000000..10285db54dfb --- /dev/null +++ b/code/modules/mob/living/carbon/_defines.dm @@ -0,0 +1,20 @@ +//NOTE: Breathing happens once per FOUR TICKS, unless the last breath fails. In which case it happens once per ONE TICK! So oxyloss healing is done once per 4 ticks while oxyloss damage is applied once per tick! +#define HUMAN_MAX_OXYLOSS 1 //Defines how much oxyloss humans can get per tick. A tile with no air at all (such as space) applies this value, otherwise it's a percentage of it. +#define HUMAN_CRIT_MAX_OXYLOSS ( (last_tick_duration) /5) //The amount of damage you'll get when in critical condition. We want this to be a 5 minute deal = 300s. There are 100HP to get through, so (1/3)*last_tick_duration per second. Breaths however only happen every 4 ticks. + +#define HEAT_DAMAGE_LEVEL_1 2 //Amount of damage applied when your body temperature just passes the 360.15k safety point +#define HEAT_DAMAGE_LEVEL_2 4 //Amount of damage applied when your body temperature passes the 400K point +#define HEAT_DAMAGE_LEVEL_3 8 //Amount of damage applied when your body temperature passes the 1000K point + +#define COLD_DAMAGE_LEVEL_1 0.5 //Amount of damage applied when your body temperature just passes the 260.15k safety point +#define COLD_DAMAGE_LEVEL_2 1.5 //Amount of damage applied when your body temperature passes the 200K point +#define COLD_DAMAGE_LEVEL_3 3 //Amount of damage applied when your body temperature passes the 120K point + +//Note that gas heat damage is only applied once every FOUR ticks. +#define HEAT_GAS_DAMAGE_LEVEL_1 2 //Amount of damage applied when the current breath's temperature just passes the 360.15k safety point +#define HEAT_GAS_DAMAGE_LEVEL_2 4 //Amount of damage applied when the current breath's temperature passes the 400K point +#define HEAT_GAS_DAMAGE_LEVEL_3 8 //Amount of damage applied when the current breath's temperature passes the 1000K point + +#define COLD_GAS_DAMAGE_LEVEL_1 0.5 //Amount of damage applied when the current breath's temperature just passes the 260.15k safety point +#define COLD_GAS_DAMAGE_LEVEL_2 1.5 //Amount of damage applied when the current breath's temperature passes the 200K point +#define COLD_GAS_DAMAGE_LEVEL_3 3 //Amount of damage applied when the current breath's temperature passes the 120K point \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index f5d5c4d9c284..9f7f5e0e834b 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -32,6 +32,10 @@ h_style = "Bald" ..(new_loc, "Skellington") +/mob/living/carbon/human/plasma/New(var/new_loc) + h_style = "Bald" + ..(new_loc, "Plasmaman") + /mob/living/carbon/human/New(var/new_loc, var/new_species = null, var/delay_ready_dna=0) if(!species) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 7049423b6fc6..85a89aa7f143 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -1,25 +1,5 @@ //This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 -//NOTE: Breathing happens once per FOUR TICKS, unless the last breath fails. In which case it happens once per ONE TICK! So oxyloss healing is done once per 4 ticks while oxyloss damage is applied once per tick! -#define HUMAN_MAX_OXYLOSS 1 //Defines how much oxyloss humans can get per tick. A tile with no air at all (such as space) applies this value, otherwise it's a percentage of it. -#define HUMAN_CRIT_MAX_OXYLOSS ( (last_tick_duration) /5) //The amount of damage you'll get when in critical condition. We want this to be a 5 minute deal = 300s. There are 100HP to get through, so (1/3)*last_tick_duration per second. Breaths however only happen every 4 ticks. - -#define HEAT_DAMAGE_LEVEL_1 2 //Amount of damage applied when your body temperature just passes the 360.15k safety point -#define HEAT_DAMAGE_LEVEL_2 4 //Amount of damage applied when your body temperature passes the 400K point -#define HEAT_DAMAGE_LEVEL_3 8 //Amount of damage applied when your body temperature passes the 1000K point - -#define COLD_DAMAGE_LEVEL_1 0.5 //Amount of damage applied when your body temperature just passes the 260.15k safety point -#define COLD_DAMAGE_LEVEL_2 1.5 //Amount of damage applied when your body temperature passes the 200K point -#define COLD_DAMAGE_LEVEL_3 3 //Amount of damage applied when your body temperature passes the 120K point - -//Note that gas heat damage is only applied once every FOUR ticks. -#define HEAT_GAS_DAMAGE_LEVEL_1 2 //Amount of damage applied when the current breath's temperature just passes the 360.15k safety point -#define HEAT_GAS_DAMAGE_LEVEL_2 4 //Amount of damage applied when the current breath's temperature passes the 400K point -#define HEAT_GAS_DAMAGE_LEVEL_3 8 //Amount of damage applied when the current breath's temperature passes the 1000K point - -#define COLD_GAS_DAMAGE_LEVEL_1 0.5 //Amount of damage applied when the current breath's temperature just passes the 260.15k safety point -#define COLD_GAS_DAMAGE_LEVEL_2 1.5 //Amount of damage applied when the current breath's temperature passes the 200K point -#define COLD_GAS_DAMAGE_LEVEL_3 3 //Amount of damage applied when the current breath's temperature passes the 120K point var/global/list/unconscious_overlays = list("1" = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "passage1"),\ "2" = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "passage2"),\ @@ -55,6 +35,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc var/do_deferred_species_setup=0 var/exposedtimenow = 0 var/firstexposed = 0 + // Doing this during species init breaks shit. /mob/living/carbon/human/proc/DeferredSpeciesSetup() var/mut_update=0 @@ -419,6 +400,15 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc handle_breath(breath) + if(species.name=="Plasmaman") + + // Check if we're wearing our biosuit and mask. + var/cover_flags = get_covered_bodyparts() + if ((cover_flags & FULL_BODY) != FULL_BODY) // We check to see if ALL flags are set. + testing("Plasmaman [src] leakin'. coverflags=[cover_flags]") + // OH FUCK HE LEAKIN'. + environment.adjust(tx = environment.total_moles()*BREATH_PERCENTAGE) // About one breath's worth. (I know we aren't breathing it out, but this should be about the right amount) + if(breath) loc.assume_air(breath) @@ -447,14 +437,13 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc // Health is in deep shit and we're not already dead return health <= config.health_threshold_crit && stat != 2 - - proc/handle_breath(datum/gas_mixture/breath) + proc/handle_breath(var/datum/gas_mixture/breath) if(status_flags & GODMODE) - return + return 0 if(!breath || (breath.total_moles() == 0) || suiciding) if(reagents.has_reagent("inaprovaline")) - return + return 0 if(suiciding) adjustOxyLoss(2)//If you are suiciding, you should die a little bit faster failed_last_breath = 1 @@ -471,156 +460,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc return 0 - var/safe_oxygen_min = 16 // Minimum safe partial pressure of O2, in kPa - //var/safe_oxygen_max = 140 // Maximum safe partial pressure of O2, in kPa (Not used for now) - var/safe_co2_max = 10 // Yes it's an arbitrary value who cares? - var/safe_toxins_max = 0.5 - var/safe_toxins_mask = 5 - var/SA_para_min = 1 - var/SA_sleep_min = 5 - var/oxygen_used = 0 - var/nitrogen_used = 0 - var/breath_pressure = (breath.total_moles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME - var/vox_oxygen_max = 1 // For vox. - - //Partial pressure of the O2 in our breath - var/O2_pp = (breath.oxygen/breath.total_moles())*breath_pressure - // Same, but for the toxins - var/Toxins_pp = (breath.toxins/breath.total_moles())*breath_pressure - // And CO2, lets say a PP of more than 10 will be bad (It's a little less really, but eh, being passed out all round aint no fun) - var/CO2_pp = (breath.carbon_dioxide/breath.total_moles())*breath_pressure // Tweaking to fit the hacky bullshit I've done with atmo -- TLE - //var/CO2_pp = (breath.carbon_dioxide/breath.total_moles())*0.5 // The default pressure value - // Nitrogen, for Vox. - var/Nitrogen_pp = (breath.nitrogen/breath.total_moles())*breath_pressure - - if(O2_pp < safe_oxygen_min && species.name != "Vox") // Too little oxygen - if(prob(20)) - spawn(0) emote("gasp") - if(O2_pp > 0) - var/ratio = safe_oxygen_min/O2_pp - adjustOxyLoss(min(5*ratio, HUMAN_MAX_OXYLOSS)) // Don't fuck them up too fast (space only does HUMAN_MAX_OXYLOSS after all!) - failed_last_breath = 1 - oxygen_used = breath.oxygen*ratio/6 - else - adjustOxyLoss(HUMAN_MAX_OXYLOSS) - failed_last_breath = 1 - oxygen_alert = max(oxygen_alert, 1) - /*else if (O2_pp > safe_oxygen_max) // Too much oxygen (commented this out for now, I'll deal with pressure damage elsewhere I suppose) - spawn(0) emote("cough") - var/ratio = O2_pp/safe_oxygen_max - oxyloss += 5*ratio - oxygen_used = breath.oxygen*ratio/6 - oxygen_alert = max(oxygen_alert, 1)*/ - else if(Nitrogen_pp < safe_oxygen_min && species.name == "Vox") //Vox breathe nitrogen, not oxygen. - - if(prob(20)) - spawn(0) emote("gasp") - if(Nitrogen_pp > 0) - var/ratio = safe_oxygen_min/Nitrogen_pp - adjustOxyLoss(min(5*ratio, HUMAN_MAX_OXYLOSS)) - failed_last_breath = 1 - nitrogen_used = breath.nitrogen*ratio/6 - else - adjustOxyLoss(HUMAN_MAX_OXYLOSS) - failed_last_breath = 1 - oxygen_alert = max(oxygen_alert, 1) - - else // We're in safe limits - failed_last_breath = 0 - adjustOxyLoss(-5) - oxygen_used = breath.oxygen/6 - oxygen_alert = 0 - - breath.oxygen -= oxygen_used - breath.nitrogen -= nitrogen_used - breath.carbon_dioxide += oxygen_used - - //CO2 does not affect failed_last_breath. So if there was enough oxygen in the air but too much co2, this will hurt you, but only once per 4 ticks, instead of once per tick. - if(CO2_pp > safe_co2_max) - if(!co2overloadtime) // If it's the first breath with too much CO2 in it, lets start a counter, then have them pass out after 12s or so. - co2overloadtime = world.time - else if(world.time - co2overloadtime > 120) - Paralyse(3) - adjustOxyLoss(3) // Lets hurt em a little, let them know we mean business - if(world.time - co2overloadtime > 300) // They've been in here 30s now, lets start to kill them for their own good! - adjustOxyLoss(8) - if(prob(20)) // Lets give them some chance to know somethings not right though I guess. - spawn(0) emote("cough") - - else - co2overloadtime = 0 - - if(Toxins_pp > safe_toxins_max) // Too much toxins - var/ratio = (breath.toxins/safe_toxins_max) * 10 - //adjustToxLoss(Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE)) //Limit amount of damage toxin exposure can do per second - if(wear_mask) - if(wear_mask.flags & BLOCK_GAS_SMOKE_EFFECT) - if(breath.toxins > safe_toxins_mask) - ratio = (breath.toxins/safe_toxins_mask) * 10 - else - ratio = 0 - if(ratio) - if(reagents) - reagents.add_reagent("plasma", Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE)) - toxins_alert = max(toxins_alert, 1) - else if(O2_pp > vox_oxygen_max && species.name == "Vox") //Oxygen is toxic to vox. - var/ratio = (breath.oxygen/vox_oxygen_max) * 1000 - adjustToxLoss(Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE)) - toxins_alert = max(toxins_alert, 1) - else - toxins_alert = 0 - - if(breath.trace_gases.len) // If there's some other shit in the air lets deal with it here. - for(var/datum/gas/sleeping_agent/SA in breath.trace_gases) - var/SA_pp = (SA.moles/breath.total_moles())*breath_pressure - if(SA_pp > SA_para_min) // Enough to make us paralysed for a bit - Paralyse(3) // 3 gives them one second to wake up and run away a bit! - if(SA_pp > SA_sleep_min) // Enough to make us sleep as well - sleeping = min(sleeping+2, 10) - else if(SA_pp > 0.15) // There is sleeping gas in their lungs, but only a little, so give them a bit of a warning - if(prob(20)) - spawn(0) emote(pick("giggle", "laugh")) - SA.moles = 0 - - if( (abs(310.15 - breath.temperature) > 50) && !(M_RESIST_HEAT in mutations)) // Hot air hurts :( - if(status_flags & GODMODE) return 1 //godmode - if(breath.temperature < species.cold_level_1) - if(prob(20)) - src << "\red You feel your face freezing and an icicle forming in your lungs!" - else if(breath.temperature > species.heat_level_1) - if(prob(20)) - if(dna.mutantrace == "slime") - src << "\red You feel supercharged by the extreme heat!" - else - src << "\red You feel your face burning and a searing heat in your lungs!" - if(dna.mutantrace == "slime") - if(breath.temperature < species.cold_level_1) - adjustToxLoss(round(species.cold_level_1 - breath.temperature)) - fire_alert = max(fire_alert, 1) - if(dna.mutantrace != "slime") - switch(breath.temperature) - if(-INFINITY to species.cold_level_3) - apply_damage(COLD_GAS_DAMAGE_LEVEL_3, BURN, "head", used_weapon = "Excessive Cold") - fire_alert = max(fire_alert, 1) - if(species.cold_level_3 to species.cold_level_2) - apply_damage(COLD_GAS_DAMAGE_LEVEL_2, BURN, "head", used_weapon = "Excessive Cold") - fire_alert = max(fire_alert, 1) - if(species.cold_level_2 to species.cold_level_1) - apply_damage(COLD_GAS_DAMAGE_LEVEL_1, BURN, "head", used_weapon = "Excessive Cold") - fire_alert = max(fire_alert, 1) - if(species.heat_level_1 to species.heat_level_2) - apply_damage(HEAT_GAS_DAMAGE_LEVEL_1, BURN, "head", used_weapon = "Excessive Heat") - fire_alert = max(fire_alert, 2) - if(species.heat_level_2 to species.heat_level_3) - apply_damage(HEAT_GAS_DAMAGE_LEVEL_2, BURN, "head", used_weapon = "Excessive Heat") - fire_alert = max(fire_alert, 2) - if(species.heat_level_3 to INFINITY) - apply_damage(HEAT_GAS_DAMAGE_LEVEL_3, BURN, "head", used_weapon = "Excessive Heat") - fire_alert = max(fire_alert, 2) - - //Temporary fixes to the alerts. - - return 1 + return species.handle_breath(breath, src) proc/handle_environment(datum/gas_mixture/environment) if(!environment) @@ -951,6 +791,24 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc apply_damage(0.4*discomfort, BURN, "r_arm") */ + proc/get_covered_bodyparts() + var/covered = 0 + + if(head) + covered |= head.body_parts_covered + if(wear_suit) + covered |= wear_suit.body_parts_covered + if(w_uniform) + covered |= w_uniform.body_parts_covered + if(shoes) + covered |= shoes.body_parts_covered + if(gloves) + covered |= gloves.body_parts_covered + if(wear_mask) + covered |= wear_mask.body_parts_covered + + return covered + proc/handle_chemicals_in_body() if(reagents) @@ -1822,6 +1680,6 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc hud_list[SPECIALROLE_HUD] = holder hud_updateflag = 0 - -#undef HUMAN_MAX_OXYLOSS -#undef HUMAN_CRIT_MAX_OXYLOSS +// Need this in species. +//#undef HUMAN_MAX_OXYLOSS +//#undef HUMAN_CRIT_MAX_OXYLOSS diff --git a/code/modules/mob/living/carbon/human/plasmaman/species.dm b/code/modules/mob/living/carbon/human/plasmaman/species.dm new file mode 100644 index 000000000000..2bc47743e9f2 --- /dev/null +++ b/code/modules/mob/living/carbon/human/plasmaman/species.dm @@ -0,0 +1,168 @@ +/datum/species/plasmaman // /vg/ + name = "Plasmaman" + icobase = 'icons/mob/human_races/r_plasmaman_sb.dmi' + deform = 'icons/mob/human_races/r_plasmaman_pb.dmi' // TODO: Need deform. + language = "Clatter" + attack_verb = "punch" + + flags = IS_WHITELISTED /*| HAS_LIPS | HAS_TAIL | NO_EAT | NO_BREATHE | NON_GENDERED*/ | NO_BLOOD + + //default_mutations=list(SKELETON) // This screws things up + + breath_type = "plasma" + +/datum/species/plasmaman/say_filter(mob/M, message, datum/language/speaking) + if(copytext(message, 1, 2) != "*") + message = replacetext(message, "s", stutter("ss")) + return message + +/datum/species/plasmaman/equip(var/mob/living/carbon/human/H) + // Unequip existing suits and hats. + H.u_equip(H.wear_suit) + H.u_equip(H.head) + if(H.mind.assigned_role!="Clown") + H.u_equip(H.wear_mask) + + H.equip_or_collect(new /obj/item/clothing/mask/breath(H), slot_wear_mask) + var/suit=/obj/item/clothing/suit/space/plasmaman + var/helm=/obj/item/clothing/head/helmet/space/plasmaman + var/tank_slot = slot_s_store + var/tank_slot_name = "suit storage" + + switch(H.mind.assigned_role) + /* + if("Research Director","Scientist","Geneticist","Roboticist") + suit=/obj/item/clothing/suit/space/vox/casual/science + helm=/obj/item/clothing/head/helmet/space/vox/casual/science + if("Chief Engineer","Station Engineer","Atmospheric Technician") + suit=/obj/item/clothing/suit/space/vox/casual/engineer + helm=/obj/item/clothing/head/helmet/space/vox/casual/engineer + if("Head of Security","Warden","Detective","Security Officer") + suit=/obj/item/clothing/suit/space/vox/casual/security + helm=/obj/item/clothing/head/helmet/space/vox/casual/security + if("Chief Medical Officer","Medical Doctor","Paramedic","Chemist") + suit=/obj/item/clothing/suit/space/vox/casual/medical + helm=/obj/item/clothing/head/helmet/space/vox/casual/medical + */ // For now. + if("Clown","Mime") + tank_slot=slot_r_hand + tank_slot_name = "hand" + H.equip_or_collect(new suit(H), slot_wear_suit) + H.equip_or_collect(new helm(H), slot_head) + H.equip_or_collect(new/obj/item/weapon/tank/plasma/plasmaman(H), tank_slot) // Bigger plasma tank from Raggy. + H << "\blue You are now running on plasma internals from the [H.s_store] in your [tank_slot_name]. You must breathe plasma in order to survive, and are extremely flammable." + H.internal = H.get_item_by_slot(tank_slot) + if (H.internals) + H.internals.icon_state = "internal1" + +// Plasmamen are so fucking different that they need their own proc. +/datum/species/plasmaman/handle_breath(var/datum/gas_mixture/breath, var/mob/living/carbon/human/H) + var/safe_plasma_min = 16 // Minimum safe partial pressure of PLASMA, in kPa + //var/safe_oxygen_max = 140 // Maximum safe partial pressure of PLASMA, in kPa (Not used for now) + var/safe_co2_max = 10 // Yes it's an arbitrary value who cares? + var/SA_para_min = 1 + var/SA_sleep_min = 5 + var/plasma_used = 0 + var/nitrogen_used = 0 + var/breath_pressure = (breath.total_moles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME + + // Partial pressure of plasma + var/Toxins_pp = (breath.toxins/breath.total_moles())*breath_pressure + // And CO2, lets say a PP of more than 10 will be bad (It's a little less really, but eh, being passed out all round aint no fun) + var/CO2_pp = (breath.carbon_dioxide/breath.total_moles())*breath_pressure // Tweaking to fit the hacky bullshit I've done with atmo -- TLE + + if(Toxins_pp < safe_plasma_min) + if(prob(20)) + spawn(0) + H.emote("gasp") + if(Toxins_pp > 0) + var/ratio = safe_plasma_min/Toxins_pp + H.adjustOxyLoss(min(5*ratio, HUMAN_MAX_OXYLOSS)) // Don't fuck them up too fast (space only does HUMAN_MAX_OXYLOSS after all!) + H.failed_last_breath = 1 + plasma_used = breath.toxins*ratio/6 + else + H.adjustOxyLoss(HUMAN_MAX_OXYLOSS) + H.failed_last_breath = 1 + H.oxygen_alert = max(H.oxygen_alert, 1) + + else // We're in safe limits + H.failed_last_breath = 0 + H.adjustOxyLoss(-5) + plasma_used = breath.toxins/6 + H.oxygen_alert = 0 + + breath.toxins -= plasma_used + breath.nitrogen -= nitrogen_used + breath.carbon_dioxide += plasma_used + + //CO2 does not affect failed_last_breath. So if there was enough oxygen in the air but too much co2, this will hurt you, but only once per 4 ticks, instead of once per tick. + if(CO2_pp > safe_co2_max) + if(!H.co2overloadtime) // If it's the first breath with too much CO2 in it, lets start a counter, then have them pass out after 12s or so. + H.co2overloadtime = world.time + else if(world.time - H.co2overloadtime > 120) + H.Paralyse(3) + H.adjustOxyLoss(3) // Lets hurt em a little, let them know we mean business + if(world.time - H.co2overloadtime > 300) // They've been in here 30s now, lets start to kill them for their own good! + H.adjustOxyLoss(8) + if(prob(20)) // Lets give them some chance to know somethings not right though I guess. + spawn(0) + H.emote("cough") + + else + H.co2overloadtime = 0 + + if(breath.trace_gases.len) // If there's some other shit in the air lets deal with it here. + for(var/datum/gas/sleeping_agent/SA in breath.trace_gases) + var/SA_pp = (SA.moles/breath.total_moles())*breath_pressure + if(SA_pp > SA_para_min) // Enough to make us paralysed for a bit + H.Paralyse(3) // 3 gives them one second to wake up and run away a bit! + if(SA_pp > SA_sleep_min) // Enough to make us sleep as well + H.sleeping = min(H.sleeping+2, 10) + else if(SA_pp > 0.15) // There is sleeping gas in their lungs, but only a little, so give them a bit of a warning + if(prob(20)) + spawn(0) + H.emote(pick("giggle", "laugh")) + SA.moles = 0 + + if( (abs(310.15 - breath.temperature) > 50) && !(M_RESIST_HEAT in H.mutations)) // Hot air hurts :( + if(H.status_flags & GODMODE) + return 1 //godmode + if(breath.temperature < cold_level_1) + if(prob(20)) + src << "\red You feel your face freezing and an icicle forming in your lungs!" + else if(breath.temperature > heat_level_1) + if(prob(20)) + if(H.dna.mutantrace == "slime") + src << "\red You feel supercharged by the extreme heat!" + else + src << "\red You feel your face burning and a searing heat in your lungs!" + if(H.dna.mutantrace == "slime") + if(breath.temperature < cold_level_1) + H.adjustToxLoss(round(cold_level_1 - breath.temperature)) + H.fire_alert = max(H.fire_alert, 1) + else + switch(breath.temperature) + if(-INFINITY to cold_level_3) + H.apply_damage(COLD_GAS_DAMAGE_LEVEL_3, BURN, "head", used_weapon = "Excessive Cold") + H.fire_alert = max(H.fire_alert, 1) + + if(cold_level_3 to cold_level_2) + H.apply_damage(COLD_GAS_DAMAGE_LEVEL_2, BURN, "head", used_weapon = "Excessive Cold") + H.fire_alert = max(H.fire_alert, 1) + + if(cold_level_2 to cold_level_1) + H.apply_damage(COLD_GAS_DAMAGE_LEVEL_1, BURN, "head", used_weapon = "Excessive Cold") + H.fire_alert = max(H.fire_alert, 1) + + if(heat_level_1 to heat_level_2) + H.apply_damage(HEAT_GAS_DAMAGE_LEVEL_1, BURN, "head", used_weapon = "Excessive Heat") + H.fire_alert = max(H.fire_alert, 2) + + if(heat_level_2 to heat_level_3) + H.apply_damage(HEAT_GAS_DAMAGE_LEVEL_2, BURN, "head", used_weapon = "Excessive Heat") + H.fire_alert = max(H.fire_alert, 2) + + if(heat_level_3 to INFINITY) + H.apply_damage(HEAT_GAS_DAMAGE_LEVEL_3, BURN, "head", used_weapon = "Excessive Heat") + H.fire_alert = max(H.fire_alert, 2) + return 1 \ No newline at end of file diff --git a/code/modules/mob/living/carbon/species.dm b/code/modules/mob/living/carbon/species.dm index c7e0285d55b9..ee370ebe89b3 100644 --- a/code/modules/mob/living/carbon/species.dm +++ b/code/modules/mob/living/carbon/species.dm @@ -102,6 +102,157 @@ return +/datum/species/proc/handle_breath(var/datum/gas_mixture/breath, var/mob/living/carbon/human/H) + var/safe_oxygen_min = 16 // Minimum safe partial pressure of O2, in kPa + //var/safe_oxygen_max = 140 // Maximum safe partial pressure of O2, in kPa (Not used for now) + var/safe_co2_max = 10 // Yes it's an arbitrary value who cares? + var/safe_toxins_max = 0.5 + var/safe_toxins_mask = 5 + var/SA_para_min = 1 + var/SA_sleep_min = 5 + var/oxygen_used = 0 + var/nitrogen_used = 0 + var/breath_pressure = (breath.total_moles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME + var/vox_oxygen_max = 1 // For vox. + + //Partial pressure of the O2 in our breath + var/O2_pp = (breath.oxygen/breath.total_moles())*breath_pressure + // Same, but for the toxins + var/Toxins_pp = (breath.toxins/breath.total_moles())*breath_pressure + // And CO2, lets say a PP of more than 10 will be bad (It's a little less really, but eh, being passed out all round aint no fun) + var/CO2_pp = (breath.carbon_dioxide/breath.total_moles())*breath_pressure // Tweaking to fit the hacky bullshit I've done with atmo -- TLE + // Nitrogen, for Vox. + var/Nitrogen_pp = (breath.nitrogen/breath.total_moles())*breath_pressure + + // TODO: Split up into Voxs' own proc. + if(O2_pp < safe_oxygen_min && name != "Vox") // Too little oxygen + if(prob(20)) + spawn(0) + H.emote("gasp") + if(O2_pp > 0) + var/ratio = safe_oxygen_min/O2_pp + H.adjustOxyLoss(min(5*ratio, HUMAN_MAX_OXYLOSS)) // Don't fuck them up too fast (space only does HUMAN_MAX_OXYLOSS after all!) + H.failed_last_breath = 1 + oxygen_used = breath.oxygen*ratio/6 + else + H.adjustOxyLoss(HUMAN_MAX_OXYLOSS) + H.failed_last_breath = 1 + H.oxygen_alert = max(H.oxygen_alert, 1) + else if(Nitrogen_pp < safe_oxygen_min && name == "Vox") //Vox breathe nitrogen, not oxygen. + + if(prob(20)) + spawn(0) H.emote("gasp") + if(Nitrogen_pp > 0) + var/ratio = safe_oxygen_min/Nitrogen_pp + H.adjustOxyLoss(min(5*ratio, HUMAN_MAX_OXYLOSS)) + H.failed_last_breath = 1 + nitrogen_used = breath.nitrogen*ratio/6 + else + H.adjustOxyLoss(HUMAN_MAX_OXYLOSS) + H.failed_last_breath = 1 + H.oxygen_alert = max(H.oxygen_alert, 1) + + else // We're in safe limits + H.failed_last_breath = 0 + H.adjustOxyLoss(-5) + oxygen_used = breath.oxygen/6 + H.oxygen_alert = 0 + + breath.oxygen -= oxygen_used + breath.nitrogen -= nitrogen_used + breath.carbon_dioxide += oxygen_used + + //CO2 does not affect failed_last_breath. So if there was enough oxygen in the air but too much co2, this will hurt you, but only once per 4 ticks, instead of once per tick. + if(CO2_pp > safe_co2_max) + if(!H.co2overloadtime) // If it's the first breath with too much CO2 in it, lets start a counter, then have them pass out after 12s or so. + H.co2overloadtime = world.time + else if(world.time - H.co2overloadtime > 120) + H.Paralyse(3) + H.adjustOxyLoss(3) // Lets hurt em a little, let them know we mean business + if(world.time - H.co2overloadtime > 300) // They've been in here 30s now, lets start to kill them for their own good! + H.adjustOxyLoss(8) + if(prob(20)) // Lets give them some chance to know somethings not right though I guess. + spawn(0) H.emote("cough") + + else + H.co2overloadtime = 0 + + if(Toxins_pp > safe_toxins_max) // Too much toxins + var/ratio = (breath.toxins/safe_toxins_max) * 10 + //adjustToxLoss(Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE)) //Limit amount of damage toxin exposure can do per second + if(H.wear_mask) + if(H.wear_mask.flags & BLOCK_GAS_SMOKE_EFFECT) + if(breath.toxins > safe_toxins_mask) + ratio = (breath.toxins/safe_toxins_mask) * 10 + else + ratio = 0 + if(ratio) + if(H.reagents) + H.reagents.add_reagent("plasma", Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE)) + H.toxins_alert = max(H.toxins_alert, 1) + else if(O2_pp > vox_oxygen_max && name == "Vox") //Oxygen is toxic to vox. + var/ratio = (breath.oxygen/vox_oxygen_max) * 1000 + H.adjustToxLoss(Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE)) + H.toxins_alert = max(H.toxins_alert, 1) + else + H.toxins_alert = 0 + + if(breath.trace_gases.len) // If there's some other shit in the air lets deal with it here. + for(var/datum/gas/sleeping_agent/SA in breath.trace_gases) + var/SA_pp = (SA.moles/breath.total_moles())*breath_pressure + if(SA_pp > SA_para_min) // Enough to make us paralysed for a bit + H.Paralyse(3) // 3 gives them one second to wake up and run away a bit! + if(SA_pp > SA_sleep_min) // Enough to make us sleep as well + H.sleeping = min(H.sleeping+2, 10) + else if(SA_pp > 0.15) // There is sleeping gas in their lungs, but only a little, so give them a bit of a warning + if(prob(20)) + spawn(0) H.emote(pick("giggle", "laugh")) + SA.moles = 0 + + if( (abs(310.15 - breath.temperature) > 50) && !(M_RESIST_HEAT in H.mutations)) // Hot air hurts :( + if(H.status_flags & GODMODE) return 1 //godmode + if(breath.temperature < cold_level_1) + if(prob(20)) + H << "\red You feel your face freezing and an icicle forming in your lungs!" + else if(breath.temperature > heat_level_1) + if(prob(20)) + if(H.dna.mutantrace == "slime") + H << "\red You feel supercharged by the extreme heat!" + else + H << "\red You feel your face burning and a searing heat in your lungs!" + + if(H.dna.mutantrace == "slime") + if(breath.temperature < cold_level_1) + H.adjustToxLoss(round(cold_level_1 - breath.temperature)) + H.fire_alert = max(H.fire_alert, 1) + + if(H.dna.mutantrace != "slime") + switch(breath.temperature) + if(-INFINITY to cold_level_3) + H.apply_damage(COLD_GAS_DAMAGE_LEVEL_3, BURN, "head", used_weapon = "Excessive Cold") + H.fire_alert = max(H.fire_alert, 1) + + if(cold_level_3 to cold_level_2) + H.apply_damage(COLD_GAS_DAMAGE_LEVEL_2, BURN, "head", used_weapon = "Excessive Cold") + H.fire_alert = max(H.fire_alert, 1) + + if(cold_level_2 to cold_level_1) + H.apply_damage(COLD_GAS_DAMAGE_LEVEL_1, BURN, "head", used_weapon = "Excessive Cold") + H.fire_alert = max(H.fire_alert, 1) + + if(heat_level_1 to heat_level_2) + H.apply_damage(HEAT_GAS_DAMAGE_LEVEL_1, BURN, "head", used_weapon = "Excessive Heat") + H.fire_alert = max(H.fire_alert, 2) + + if(heat_level_2 to heat_level_3) + H.apply_damage(HEAT_GAS_DAMAGE_LEVEL_2, BURN, "head", used_weapon = "Excessive Heat") + H.fire_alert = max(H.fire_alert, 2) + + if(heat_level_3 to INFINITY) + H.apply_damage(HEAT_GAS_DAMAGE_LEVEL_3, BURN, "head", used_weapon = "Excessive Heat") + H.fire_alert = max(H.fire_alert, 2) + return 1 + /datum/species/proc/handle_post_spawn(var/mob/living/carbon/C) //Handles anything not already covered by basic species assignment. return @@ -169,7 +320,7 @@ language = "Clatter" attack_verb = "punch" - flags = IS_WHITELISTED | HAS_LIPS | HAS_TAIL /*| NO_EAT*/ | NO_BREATHE /*| NON_GENDERED*/ | NO_BLOOD + flags = IS_WHITELISTED | HAS_LIPS | /*HAS_TAIL | NO_EAT |*/ NO_BREATHE /*| NON_GENDERED*/ | NO_BLOOD default_mutations=list(SKELETON) @@ -179,7 +330,6 @@ message += " ACK ACK!" return message - /datum/species/tajaran name = "Tajaran" icobase = 'icons/mob/human_races/r_tajaran.dmi' diff --git a/html/changelog.html b/html/changelog.html index f151cf0f7aac..634f1959ea5c 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -80,6 +80,10 @@

Duny updated:

+

N3X16 updated:

+

2014.07.28

@@ -97,7 +101,7 @@

IconLeap updated:

2014.07.26

N3X15 updated:

    -
  • HAPPY BIRTHDAY TO ME: Added new radio broadcasting system.
  • +
  • HAPPY BIRTHDAY TO ME: Added new radio broadcasting system.
  • Added radio transmitter and linked Muzak jukebox to DJ station. Autoplay on roundstart. NOTE: Wear a radiation-resistant suit when working near the transmitter, or you will die of radiation.
  • All hallways and arrival shuttle have been outfit with wall-mounted radios that play Muzak.
  • Added portable boomboxes. Most head offices have one, or a wall-mounted sound system (that's turned off).
  • diff --git a/icons/mob/back.dmi b/icons/mob/back.dmi index e33e325d87d5..42bf9a743e7d 100644 Binary files a/icons/mob/back.dmi and b/icons/mob/back.dmi differ diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index b91eb187a28a..094bcbb73f87 100644 Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ diff --git a/icons/mob/human_races/r_plasmaman_pb.dmi b/icons/mob/human_races/r_plasmaman_pb.dmi new file mode 100644 index 000000000000..bdf92252efaa Binary files /dev/null and b/icons/mob/human_races/r_plasmaman_pb.dmi differ diff --git a/icons/mob/human_races/r_plasmaman_sb.dmi b/icons/mob/human_races/r_plasmaman_sb.dmi new file mode 100644 index 000000000000..07e501fac691 Binary files /dev/null and b/icons/mob/human_races/r_plasmaman_sb.dmi differ diff --git a/icons/mob/in-hand/in-hand_sync_report.txt b/icons/mob/in-hand/in-hand_sync_report.txt index 5b933d4e8585..dfdbcaf072e2 100644 --- a/icons/mob/in-hand/in-hand_sync_report.txt +++ b/icons/mob/in-hand/in-hand_sync_report.txt @@ -1,19 +1,19 @@ -# DMITool Difference Report: D:\GitHub\vgstation13\icons\mob\in-hand\left D:\GitHub\vgstation13\icons\mob\in-hand\right ---- D:\GitHub\vgstation13\icons\mob\in-hand\left\cable_stuff.dmi -+++ D:\GitHub\vgstation13\icons\mob\in-hand\right\cable_stuff.dmi +# DMITool Difference Report: C:\Users\Rob\Documents\Projects\vgstation13\icons\mob\in-hand\left C:\Users\Rob\Documents\Projects\vgstation13\icons\mob\in-hand\right +--- C:\Users\Rob\Documents\Projects\vgstation13\icons\mob\in-hand\left\cable_stuff.dmi ++++ C:\Users\Rob\Documents\Projects\vgstation13\icons\mob\in-hand\right\cable_stuff.dmi + cuff_cyan + cuff_orange + cuff_pink + cuff_white ---- D:\GitHub\vgstation13\icons\mob\in-hand\left\guns.dmi -+++ D:\GitHub\vgstation13\icons\mob\in-hand\right\guns.dmi +--- C:\Users\Rob\Documents\Projects\vgstation13\icons\mob\in-hand\left\guns.dmi ++++ C:\Users\Rob\Documents\Projects\vgstation13\icons\mob\in-hand\right\guns.dmi + scythe0 ---- D:\GitHub\vgstation13\icons\mob\in-hand\left\paramedic_eva.dmi -+++ D:\GitHub\vgstation13\icons\mob\in-hand\right\paramedic_eva.dmi +--- C:\Users\Rob\Documents\Projects\vgstation13\icons\mob\in-hand\left\paramedic_eva.dmi ++++ C:\Users\Rob\Documents\Projects\vgstation13\icons\mob\in-hand\right\paramedic_eva.dmi + paramedic-eva + paramedic-eva-helmet ---- D:\GitHub\vgstation13\icons\mob\in-hand\left\swords_axes.dmi -+++ D:\GitHub\vgstation13\icons\mob\in-hand\right\swords_axes.dmi +--- C:\Users\Rob\Documents\Projects\vgstation13\icons\mob\in-hand\left\swords_axes.dmi ++++ C:\Users\Rob\Documents\Projects\vgstation13\icons\mob\in-hand\right\swords_axes.dmi + axe0 + axe1 - dualsaber0 @@ -23,11 +23,11 @@ - katana - scythe0 - unathiknife ---- D:\GitHub\vgstation13\icons\mob\in-hand\left\vox_civvie.dmi -+++ D:\GitHub\vgstation13\icons\mob\in-hand\right\vox_civvie.dmi +--- C:\Users\Rob\Documents\Projects\vgstation13\icons\mob\in-hand\left\vox_civvie.dmi ++++ C:\Users\Rob\Documents\Projects\vgstation13\icons\mob\in-hand\right\vox_civvie.dmi + vox-pressure-security ---- D:\GitHub\vgstation13\icons\mob\in-hand\left\zz_old_items_lefthand.dmi -+++ D:\GitHub\vgstation13\icons\mob\in-hand\right\zz_old_items_lefthand.dmi +--- C:\Users\Rob\Documents\Projects\vgstation13\icons\mob\in-hand\left\zz_old_items_lefthand.dmi ++++ C:\Users\Rob\Documents\Projects\vgstation13\icons\mob\in-hand\right\zz_old_items_lefthand.dmi + DONGS + altair_locket + an_tank diff --git a/icons/mob/in-hand/left/plasmen.dmi b/icons/mob/in-hand/left/plasmen.dmi new file mode 100644 index 000000000000..865f9c8bb691 Binary files /dev/null and b/icons/mob/in-hand/left/plasmen.dmi differ diff --git a/icons/mob/in-hand/right/plasmen.dmi b/icons/mob/in-hand/right/plasmen.dmi new file mode 100644 index 000000000000..b24d95d5cf47 Binary files /dev/null and b/icons/mob/in-hand/right/plasmen.dmi differ diff --git a/icons/mob/items_lefthand.dmi b/icons/mob/items_lefthand.dmi index 3340551dab69..32d5f9db7621 100644 Binary files a/icons/mob/items_lefthand.dmi and b/icons/mob/items_lefthand.dmi differ diff --git a/icons/mob/items_righthand.dmi b/icons/mob/items_righthand.dmi index ba939a792a7e..22c7ac14d17f 100644 Binary files a/icons/mob/items_righthand.dmi and b/icons/mob/items_righthand.dmi differ diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi index fa6980e75a70..a8275d6503b2 100644 Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index c7327ba06606..fcfad558636e 100644 Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index 4967452045bf..8ddd8ac99f68 100644 Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ diff --git a/icons/obj/tank.dmi b/icons/obj/tank.dmi index e35a475b7bdd..e0bcf71928f0 100644 Binary files a/icons/obj/tank.dmi and b/icons/obj/tank.dmi differ