Energy projectiles work again.

Rewrote the job selection system to use bitflags and the jobs are now objects.
Fixed a path conflict with effect which caused a few things to be unable to be clicked on.
Commented out the job.txt, Urist if you still want it to load from the .txt give me a yell and I can update it to work with the job objects.
Fixed up the bits that were missing the slightly updated mob organ attack code.
Moved the traps file into unused.


git-svn-id: http://tgstation13.googlecode.com/svn/trunk@2340 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
mport2004@gmail.com
2011-10-11 07:52:30 +00:00
parent 59180f83cf
commit 46a7143e3a
138 changed files with 2459 additions and 2361 deletions
+3 -3
View File
@@ -392,10 +392,10 @@ Traitors and the like can also be revived with the previous role mostly intact.
//Now for special roles and equipment.
switch(new_character.mind.special_role)
if("Changeling")
new_character.Equip_Rank(new_character.mind.assigned_role, joined_late=1)
job_master.EquipRank(new_character, new_character.mind.assigned_role, 1)
new_character.make_changeling()
if("traitor")
new_character.Equip_Rank(new_character.mind.assigned_role, joined_late=1)
job_master.EquipRank(new_character, new_character.mind.assigned_role, 1)
ticker.mode.equip_traitor(new_character)
if("Wizard")
new_character.loc = pick(wizardstart)
@@ -433,7 +433,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
call(/datum/game_mode/proc/add_law_zero)(new_character)
//Add aliens.
else
new_character.Equip_Rank(new_character.mind.assigned_role, joined_late=1)//Or we simply equip them.
job_master.EquipRank(new_character, new_character.mind.assigned_role, 1)//Or we simply equip them.
//Announces the character on all the systems, based on the record.
if(!issilicon(new_character))//If they are not a cyborg/AI.
+4 -4
View File
@@ -24,7 +24,7 @@ datum
var/datum/reagent/self = src
src = null //of the reagent to the mob on TOUCHING it.
if(!istype(self.holder.my_atom, /obj/effect/chem_smoke))
if(!istype(self.holder.my_atom, /obj/effect/effect/chem_smoke))
// If the chemicals are in a smoke cloud, do not try to let the chemicals "penetrate" into the mob's system (balance station 13) -- Doohl
if(method == TOUCH)
@@ -644,7 +644,7 @@ datum
return
if(prob(15) && istype(M, /mob/living/carbon/human) && volume >= 30)
var/datum/organ/external/affecting = M:organs["head"]
var/datum/organ/external/affecting = M:get_organ("head")
if(affecting)
affecting.take_damage(25, 0)
M:UpdateDamage()
@@ -691,7 +691,7 @@ datum
del (M:head)
M << "\red Your helmet melts into uselessness!"
return
var/datum/organ/external/affecting = M:organs["head"]
var/datum/organ/external/affecting = M:get_organ("head")
affecting.take_damage(35, 0)
M:UpdateDamage()
M:UpdateDamageIcon()
@@ -706,7 +706,7 @@ datum
M.take_organ_damage(min(15, volume * 4)) // same deal as sulphuric acid
else
if(istype(M, /mob/living/carbon/human))
var/datum/organ/external/affecting = M:organs["head"]
var/datum/organ/external/affecting = M:get_organ("head")
affecting.take_damage(30, 0)
M:UpdateDamage()
M:UpdateDamageIcon()
+9 -9
View File
@@ -28,7 +28,7 @@ datum
result_amount = 2
on_reaction(var/datum/reagents/holder, var/created_volume)
var/location = get_turf(holder.my_atom)
var/datum/effect/system/reagents_explosion/e = new()
var/datum/effect/effect/system/reagents_explosion/e = new()
e.set_up(round (created_volume/10, 1), location, 0, 0)
e.start()
@@ -277,7 +277,7 @@ datum
result_amount = 2
on_reaction(var/datum/reagents/holder, var/created_volume)
var/location = get_turf(holder.my_atom)
var/datum/effect/system/reagents_explosion/e = new()
var/datum/effect/effect/system/reagents_explosion/e = new()
e.set_up(round (created_volume/2, 1), location, 0, 0)
e.start()
@@ -299,7 +299,7 @@ datum
result_amount = null
on_reaction(var/datum/reagents/holder, var/created_volume)
var/location = get_turf(holder.my_atom)
var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(2, 1, location)
s.start()
for(var/mob/living/carbon/M in viewers(world.view, location))
@@ -378,7 +378,7 @@ datum
secondary = 1
on_reaction(var/datum/reagents/holder, var/created_volume)
var/location = get_turf(holder.my_atom)
var/datum/effect/system/chem_smoke_spread/S = new /datum/effect/system/chem_smoke_spread
var/datum/effect/effect/system/chem_smoke_spread/S = new /datum/effect/effect/system/chem_smoke_spread
S.attach(location)
S.set_up(holder, 10, 0, location)
playsound(location, 'smoke.ogg', 50, 1, -3)
@@ -438,7 +438,7 @@ datum
//for(var/datum/reagent/R in holder.reagent_list)
// world << "[R.name] = [R.volume]"
var/datum/effect/system/foam_spread/s = new()
var/datum/effect/effect/system/foam_spread/s = new()
s.set_up(created_volume, location, holder, 0)
s.start()
holder.clear_reagents()
@@ -460,7 +460,7 @@ datum
for(var/mob/M in viewers(5, location))
M << "\red The solution spews out a metalic foam!"
var/datum/effect/system/foam_spread/s = new()
var/datum/effect/effect/system/foam_spread/s = new()
s.set_up(created_volume/2, location, holder, 1)
s.start()
return
@@ -480,7 +480,7 @@ datum
for(var/mob/M in viewers(5, location))
M << "\red The solution spews out a metalic foam!"
var/datum/effect/system/foam_spread/s = new()
var/datum/effect/effect/system/foam_spread/s = new()
s.set_up(created_volume/2, location, holder, 2)
s.start()
return
@@ -537,7 +537,7 @@ datum
required_other = 2
on_reaction(var/datum/reagents/holder, var/created_volume)
var/location = get_turf(holder.my_atom)
var/datum/effect/system/reagents_explosion/e = new()
var/datum/effect/effect/system/reagents_explosion/e = new()
e.set_up(round (created_volume/10, 1), location, 0, 0)
e.start()
@@ -759,7 +759,7 @@ datum
//for(var/datum/reagent/R in holder.reagent_list)
// world << "[R.name] = [R.volume]"
var/datum/effect/system/foam_spread/s = new()
var/datum/effect/effect/system/foam_spread/s = new()
s.set_up(created_volume, location, holder, 0)
s.start()
holder.clear_reagents()
+4 -4
View File
@@ -225,7 +225,7 @@
G.reagents.trans_to(src, G.reagents.total_volume)
if(src.reagents.total_volume) //The possible reactions didnt use up all reagents.
var/datum/effect/system/steam_spread/steam = new /datum/effect/system/steam_spread()
var/datum/effect/effect/system/steam_spread/steam = new /datum/effect/effect/system/steam_spread()
steam.set_up(10, 0, get_turf(src))
steam.attach(src)
steam.start()
@@ -530,12 +530,12 @@
return
if(2.0)
if (prob(50))
new /obj/effect/water(src.loc)
new /obj/effect/effect/water(src.loc)
del(src)
return
if(3.0)
if (prob(5))
new /obj/effect/water(src.loc)
new /obj/effect/effect/water(src.loc)
del(src)
return
else
@@ -543,7 +543,7 @@
blob_act()
if(prob(50))
new /obj/effect/water(src.loc)
new /obj/effect/effect/water(src.loc)
del(src)
+1 -1
View File
@@ -22,7 +22,7 @@
//Important parts of the suit.
mob/living/carbon/affecting = null//The wearer.
obj/item/weapon/cell/cell//Starts out with a high-capacity cell using New().
datum/effect/system/spark_spread/spark_system//To create sparks.
datum/effect/effect/system/spark_spread/spark_system//To create sparks.
reagent_list[] = list("tricordrazine","dexalinp","spaceacillin","anti_toxin","nutriment","radium","hyronalin")//The reagents ids which are added to the suit at New().
stored_research[]//For stealing station research.
obj/item/weapon/disk/tech_disk/t_disk//To copy design onto disk.
+4 -15
View File
@@ -154,24 +154,13 @@
O.show_message("\red <B>[src]</B> [src.attacktext] [src.target]!", 1)
if(ismob(src.target))
var/damage = rand(melee_damage_lower, melee_damage_upper)
if(istype(target, /mob/living/carbon/human))
var/dam_zone = pick("head", "chest", "l_hand", "r_hand", "l_leg", "r_leg", "groin")
if (dam_zone == "chest")
if ((((target:wear_suit && target:wear_suit.body_parts_covered & UPPER_TORSO) || (target:w_uniform && target:w_uniform.body_parts_covered & LOWER_TORSO)) && prob(10)))
if(prob(20))
target:show_message("\blue You have been protected from a hit to the chest.")
return
if (istype(target:organs[text("[]", dam_zone)], /datum/organ/external))
var/datum/organ/external/temp = target:organs[text("[]", dam_zone)]
if (temp.take_damage(damage, 0))
target:UpdateDamageIcon()
else
target:UpdateDamage()
target:updatehealth()
var/mob/living/carbon/human/H = target
var/dam_zone = pick("chest", "l_hand", "r_hand", "l_leg", "r_leg")
var/datum/organ/external/affecting = H.get_organ(ran_zone(dam_zone))
H.apply_damage(damage, BRUTE, affecting, H.run_armor_check(affecting, "melee"))
else
target:bruteloss += damage
+2 -2
View File
@@ -40,7 +40,7 @@
src.visible_message("<b>[src]</b> blows apart!")
var/turf/Ts = get_turf(src)
new /obj/effect/decal/cleanable/robot_debris(Ts)
var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, src)
s.start()
del(src)
@@ -198,7 +198,7 @@
New()
..()
var/datum/effect/system/harmless_smoke_spread/smoke = new /datum/effect/system/harmless_smoke_spread()
var/datum/effect/effect/system/harmless_smoke_spread/smoke = new /datum/effect/effect/system/harmless_smoke_spread()
smoke.set_up(5, 0, src.loc)
smoke.start()
for(var/mob/O in viewers(src, null))
@@ -548,7 +548,7 @@
if (stunned < power)
stunned = power
var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, src)
s.start()
@@ -212,7 +212,7 @@
breath = loc.remove_air(breath_moles)
// Handle chem smoke effect -- Doohl
for(var/obj/effect/chem_smoke/smoke in view(1, src))
for(var/obj/effect/effect/chem_smoke/smoke in view(1, src))
if(smoke.reagents.total_volume)
smoke.reagents.reaction(src, INGEST)
spawn(5)
@@ -193,7 +193,7 @@
breath = loc.remove_air(breath_moles)
// Handle chem smoke effect -- Doohl
for(var/obj/effect/chem_smoke/smoke in view(1, src))
for(var/obj/effect/effect/chem_smoke/smoke in view(1, src))
if(smoke.reagents.total_volume)
smoke.reagents.reaction(src, INGEST)
spawn(5)
+1 -1
View File
@@ -19,7 +19,7 @@
var/d = rand(round(I.force / 4), I.force)
if(istype(src, /mob/living/carbon/human))
var/mob/living/carbon/human/H = src
var/organ = H.organs["chest"]
var/organ = H.get_organ("chest")
if (istype(organ, /datum/organ/external))
var/datum/organ/external/temp = organ
temp.take_damage(d, 0)
+31 -141
View File
@@ -264,107 +264,29 @@
if (prob(50) && !shielded)
paralysis += 10
for(var/organ in organs)
var/datum/organ/external/temp = organs[text("[]", organ)]
if (istype(temp, /datum/organ/external))
switch(temp.name)
if("head")
temp.take_damage(b_loss * 0.2, f_loss * 0.2)
if("chest")
temp.take_damage(b_loss * 0.4, f_loss * 0.4)
if("groin")
temp.take_damage(b_loss * 0.1, f_loss * 0.1)
if("l_arm")
temp.take_damage(b_loss * 0.05, f_loss * 0.05)
if("r_arm")
temp.take_damage(b_loss * 0.05, f_loss * 0.05)
/* if("l_hand")
/ temp.take_damage(b_loss * 0.0225, f_loss * 0.0225)
if("r_hand")
temp.take_damage(b_loss * 0.0225, f_loss * 0.0225)*/
if("l_leg")
temp.take_damage(b_loss * 0.05, f_loss * 0.05)
if("r_leg")
temp.take_damage(b_loss * 0.05, f_loss * 0.05)
/* if("l_foot")
temp.take_damage(b_loss * 0.0225, f_loss * 0.0225)
if("r_foot")
temp.take_damage(b_loss * 0.0225, f_loss * 0.0225)*/
for(var/datum/organ/external/temp in organs)
switch(temp.name)
if("head")
temp.take_damage(b_loss * 0.2, f_loss * 0.2)
if("chest")
temp.take_damage(b_loss * 0.4, f_loss * 0.4)
if("l_arm")
temp.take_damage(b_loss * 0.05, f_loss * 0.05)
if("r_arm")
temp.take_damage(b_loss * 0.05, f_loss * 0.05)
if("l_leg")
temp.take_damage(b_loss * 0.05, f_loss * 0.05)
if("r_leg")
temp.take_damage(b_loss * 0.05, f_loss * 0.05)
UpdateDamageIcon()
/mob/living/carbon/human/blob_act()
if (stat == 2)
return
var/damage = null
if (stat != 2)
damage = rand(30,40)
if(stat == 2) return
show_message("\red The blob attacks you!")
var/list/zones = list("head","chest","chest", "groin", "l_arm", "r_arm", "l_leg", "r_leg")
var/zone = pick(zones)
var/datum/organ/external/temp = organs["[zone]"]
switch(zone)//This really needs an update badly
if ("head")
if ((((head && head.body_parts_covered & HEAD) || (wear_mask && wear_mask.body_parts_covered & HEAD)) && prob(99)))
if (prob(20))
temp.take_damage(damage, 0)
else
show_message("\red You have been protected from a hit to the head.")
return
if (damage > 4.9)
if (weakened < 10)
weakened = rand(10, 15)
for(var/mob/O in viewers(src, null))
O.show_message(text("\red <B>The blob has weakened []!</B>", src), 1, "\red You hear someone fall.", 2)
temp.take_damage(damage)
if ("chest")
if ((((wear_suit && wear_suit.body_parts_covered & UPPER_TORSO) || (w_uniform && w_uniform.body_parts_covered & UPPER_TORSO)) && prob(85)))
show_message("\red You have been protected from a hit to the chest.")
return
if (damage > 4.9)
if (prob(50))
if (weakened < 5)
weakened = 5
for(var/mob/O in viewers(src, null))
O.show_message(text("\red <B>The blob has knocked down []!</B>", src), 1, "\red You hear someone fall.", 2)
else
if (stunned < 5)
stunned = 5
for(var/mob/O in viewers(src, null))
if(O.client) O.show_message(text("\red <B>The blob has stunned []!</B>", src), 1)
if(stat != 2) stat = 1
temp.take_damage(damage)
if ("groin")
if ((((wear_suit && wear_suit.body_parts_covered & LOWER_TORSO) || (w_uniform && w_uniform.body_parts_covered & LOWER_TORSO)) && prob(75)))
show_message("\red You have been protected from a hit to the lower chest.")
return
else
temp.take_damage(damage, 0)
if("l_arm")
temp.take_damage(damage, 0)
if("r_arm")
temp.take_damage(damage, 0)
if("l_hand")
temp.take_damage(damage, 0)
if("r_hand")
temp.take_damage(damage, 0)
if("l_leg")
temp.take_damage(damage, 0)
if("r_leg")
temp.take_damage(damage, 0)
if("l_foot")
temp.take_damage(damage, 0)
if("r_foot")
temp.take_damage(damage, 0)
var/dam_zone = pick("chest", "l_hand", "r_hand", "l_leg", "r_leg")
var/datum/organ/external/affecting = get_organ(ran_zone(dam_zone))
apply_damage(rand(30,40), BRUTE, affecting, run_armor_check(affecting, "melee"))
UpdateDamageIcon()
return
@@ -1137,51 +1059,19 @@
*/
last_b_state = stat
/mob/living/carbon/human/hand_p(mob/M as mob)//update needed
if (M.a_intent == "hurt")
if (istype(M.wear_mask, /obj/item/clothing/mask/muzzle))
return
if (health > 0)
if (istype(wear_suit, /obj/item/clothing/suit/space))
if (prob(25))
for(var/mob/O in viewers(src, null))
O.show_message(text("\red <B>[M.name] has attempted to bite []!</B>", src), 1)
return
else if (istype(wear_suit, /obj/item/clothing/suit/space/santa))
if (prob(25))
for(var/mob/O in viewers(src, null))
O.show_message(text("\red <B>[M.name] has attempted to bite []!</B>", src), 1)
return
else if (istype(wear_suit, /obj/item/clothing/suit/bio_suit))
if (prob(25))
for(var/mob/O in viewers(src, null))
O.show_message(text("\red <B>[M.name] has attempted to bite []!</B>", src), 1)
return
else if (istype(wear_suit, /obj/item/clothing/suit/armor))
if (prob(25))
for(var/mob/O in viewers(src, null))
O.show_message(text("\red <B>[M.name] has attempted to bite []!</B>", src), 1)
return
else
for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded )))
O.show_message(text("\red <B>[M.name] has bit []!</B>", src), 1)
var/damage = rand(1, 3)
var/dam_zone = pick("chest", "l_hand", "r_hand", "l_leg", "r_leg", "groin")
if (istype(organs[text("[]", dam_zone)], /datum/organ/external))
var/datum/organ/external/temp = organs[text("[]", dam_zone)]
if (temp.take_damage(damage, 0))
UpdateDamageIcon()
else
UpdateDamage()
updatehealth()
/mob/living/carbon/human/hand_p(mob/M as mob)
var/dam_zone = pick("chest", "l_hand", "r_hand", "l_leg", "r_leg")
var/datum/organ/external/affecting = get_organ(ran_zone(dam_zone))
var/armor = run_armor_check(affecting, "melee")
apply_damage(rand(1,2), BRUTE, affecting, armor)
if(armor >= 2) return
for(var/datum/disease/D in M.viruses)
if(istype(D, /datum/disease/jungle_fever))
var/mob/living/carbon/human/H = src
src = null
src = H.monkeyize()
contract_disease(D,1,0)
for(var/datum/disease/D in M.viruses)
if(istype(D, /datum/disease/jungle_fever))
var/mob/living/carbon/human/H = src
src = null
src = H.monkeyize()
contract_disease(D,1,0)
return
@@ -1240,7 +1130,7 @@
if (stunned < power)
stunned = power
var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, src)
s.start()
@@ -90,7 +90,6 @@
visible_message("\red <B>[M] has weakened [src]!</B>")
apply_effect(4, WEAKEN, armor_block)
UpdateDamageIcon()
updatehealth()
if("disarm")
@@ -99,7 +98,7 @@
if(w_uniform)
w_uniform.add_fingerprint(M)
var/datum/organ/external/affecting = organs[ran_zone(M.zone_sel.selecting)]
var/datum/organ/external/affecting = get_organ(ran_zone(M.zone_sel.selecting))
var/randn = rand(1, 100)
if (randn <= 25)
apply_effect(2, WEAKEN, run_armor_check(affecting, "melee"))
@@ -10,11 +10,9 @@
O.show_message(text("\red <B>[M.name] has bit []!</B>", src), 1)
var/damage = rand(1, 3)
var/dam_zone = pick("chest", "l_hand", "r_hand", "l_leg", "r_leg", "groin")
var/dam_zone = pick("chest", "l_hand", "r_hand", "l_leg", "r_leg")
var/datum/organ/external/affecting = get_organ(ran_zone(dam_zone))
var/armor_block = run_armor_check(affecting, "melee")
apply_damage(damage, BRUTE, affecting, armor_block)
UpdateDamageIcon()
apply_damage(damage, BRUTE, affecting, run_armor_check(affecting, "melee"))
for(var/datum/disease/D in M.viruses)
if(istype(D, /datum/disease/jungle_fever))
@@ -29,20 +29,14 @@
body_lying = list()
UpdateDamage()
for(var/datum/organ/external/O in organs)
if(istype(O, /datum/organ/external))
var/icon/DI = new /icon('dam_human.dmi', O.damage_state) // the damage icon for whole human
DI.Blend(new /icon('dam_mask.dmi', O.icon_name), ICON_MULTIPLY) // mask with this organ's pixels
// world << "[O.icon_name] [O.damage_state] \icon[DI]"
body_standing += DI
DI = new /icon('dam_human.dmi', "[O.damage_state]-2") // repeat for lying icons
DI.Blend(new /icon('dam_mask.dmi', "[O.icon_name]2"), ICON_MULTIPLY)
// world << "[O.r_name]2 [O.d_i_state]-2 \icon[DI]"
body_lying += DI
var/icon/DI = new /icon('dam_human.dmi', O.damage_state) // the damage icon for whole human
DI.Blend(new /icon('dam_mask.dmi', O.icon_name), ICON_MULTIPLY) // mask with this organ's pixels
// world << "[O.icon_name] [O.damage_state] \icon[DI]"
body_standing += DI
DI = new /icon('dam_human.dmi', "[O.damage_state]-2") // repeat for lying icons
DI.Blend(new /icon('dam_mask.dmi', "[O.icon_name]2"), ICON_MULTIPLY)
// world << "[O.r_name]2 [O.d_i_state]-2 \icon[DI]"
body_lying += DI
/mob/living/carbon/human/proc/get_organ(var/zone)
@@ -28,9 +28,8 @@ emp_act
//If you don't specify a bodypart, it checks ALL your bodyparts for protection, and averages out the values
for(var/datum/organ/external/organ in organs)
if(istype(organ))
armorval += checkarmor(organ, type)
organnum++
armorval += checkarmor(organ, type)
organnum++
return armorval/max(organnum, 1)
@@ -48,14 +47,15 @@ emp_act
/mob/living/carbon/human/proc/check_shields(var/damage = 0, var/attack_text = "the attack")
var/list/hand_held_shields = list("/obj/item/weapon/shield/riot","/obj/item/weapon/melee/energy/sword")
if(l_hand && is_type_in_list(l_hand, hand_held_shields))//Current base is the prob(50-d/3)
if(prob(50 - round(damage / 3)))
show_message("\red You block [attack_text] with your [l_hand.name]!", 4)
if(l_hand && istype(l_hand, /obj/item))//Current base is the prob(50-d/3)
var/obj/item/I = l_hand
if(I.IsShield() && (prob(50 - round(damage / 3))))
visible_message("\red <B>[src] blocks [attack_text] with the [l_hand.name]!</B>")
return 1
if(r_hand && is_type_in_list(r_hand, hand_held_shields))
if(prob(50 - round(damage / 3)))
show_message("\red You block [attack_text] with your [l_hand.name]!", 4)
if(r_hand && istype(r_hand, /obj/item))
var/obj/item/I = r_hand
if(I.IsShield() && (prob(50 - round(damage / 3))))
visible_message("\red <B>[src] blocks [attack_text] with the [r_hand.name]!</B>")
return 1
return 0
+1 -1
View File
@@ -257,7 +257,7 @@
if(!block)
for(var/obj/effect/chem_smoke/smoke in view(1, src))
for(var/obj/effect/effect/chem_smoke/smoke in view(1, src))
if(smoke.reagents.total_volume)
smoke.reagents.reaction(src, INGEST)
spawn(5)
@@ -211,7 +211,7 @@
if(!block)
for(var/obj/effect/chem_smoke/smoke in view(1, src))
for(var/obj/effect/effect/chem_smoke/smoke in view(1, src))
if(smoke.reagents.total_volume)
smoke.reagents.reaction(src, INGEST)
spawn(5)
@@ -364,7 +364,7 @@
if (stunned < power)
stunned = power
var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, src)
s.start()
+2 -5
View File
@@ -22,12 +22,9 @@
return 0
var/mob/living/carbon/human/H = src //make this damage method divide the damage to be done among all the body parts, then burn each body part for that much damage. will have better effect then just randomly picking a body part
var/divided_damage = (burn_amount)/(H.organs.len)
var/datum/organ/external/affecting = null
var/extradam = 0 //added to when organ is at max dam
for(var/A in H.organs)
if(!H.organs[A]) continue
affecting = H.organs[A]
if(!istype(affecting, /datum/organ/external)) continue
for(var/datum/organ/external/affecting in H.organs)
if(!affecting) continue
if(affecting.take_damage(0, divided_damage+extradam))
extradam = 0
else
@@ -1,6 +1,6 @@
/mob/living/silicon/robot/New(loc,var/syndie = 0)
spark_system = new /datum/effect/system/spark_spread()
spark_system = new /datum/effect/effect/system/spark_spread()
spark_system.set_up(5, 0, src)
spark_system.attach(src)
spawn (1)
@@ -584,7 +584,7 @@
flick("noise", flash)
var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, src)
s.start()
+43 -195
View File
@@ -1,7 +1,8 @@
mob/new_player
var/datum/preferences/preferences
var/ready = 0
var/spawning = 0//Referenced when you want to delete the new_player later on in the code.
/mob/new_player
var
datum/preferences/preferences = null
ready = 0
spawning = 0//Referenced when you want to delete the new_player later on in the code.
invisibility = 101
@@ -10,12 +11,8 @@ mob/new_player
canmove = 0
anchored = 1 // don't get pushed around
// var/list/jobs_restricted_by_gamemode
Login()
//Next line is commented out because seem it does nothing helpful and on the other hand it calls mob/new_player/Move() to EACH turf in the world. --rastaf0
//..()
if(!preferences)
preferences = new
@@ -25,8 +22,10 @@ mob/new_player
mind.current = src
var/starting_loc = pick(newplayer_start)
if(!starting_loc) starting_loc = locate(1,1,1)
loc = starting_loc
sight |= SEE_TURFS
var/list/watch_locations = list()
for(var/obj/effect/landmark/landmark in world)
if(landmark.tag == "landmark*new_player")
@@ -103,38 +102,27 @@ mob/new_player
del(src)
return
verb
new_player_panel()
set src = usr
new_player_panel_proc()
proc
verb/new_player_panel()
set src = usr
new_player_panel_proc()
var/output = "<B>New Player Options</B>"
/*output += " | <a href='byond://?src=\ref[src];refresh=1'>Refresh</A><hr>"
output += "<b>Name:</b> [preferences.be_random_name ? "Random" :preferences.real_name]"*/
proc/new_player_panel_proc()
var/output = "<B>New Player Options</B>"
output +="<hr>"
output += "<br><a href='byond://?src=\ref[src];show_preferences=1'>Setup Character</A><BR><BR>"
output +="<hr>"
if(!ticker || ticker.current_state <= GAME_STATE_PREGAME)
if(!ready) output += "<a href='byond://?src=\ref[src];ready=1'>Declare Ready</A><BR>"
else output += "<b>You are ready</b> (<a href='byond://?src=\ref[src];ready=2'>Cancel</A>)<BR>"
/*output += "<b>Preferred jobs:</b><br>"
output += "[preferences.occupation[1]]<br>"
output += "[preferences.occupation[2]]<br>"
output += "[preferences.occupation[3]]<hr>"*/
else
output += "<a href='byond://?src=\ref[src];late_join=1'>Join Game!</A><BR>"
output += "<br><a href='byond://?src=\ref[src];show_preferences=1'>Setup Character</A><BR><BR>"
if(!ticker || ticker.current_state <= GAME_STATE_PREGAME)
if(!ready)
output += "<a href='byond://?src=\ref[src];ready=1'>Declare Ready</A><BR>"
else
output += "<b>You are ready</b> (<a href='byond://?src=\ref[src];ready=2'>Cancel</A>)<BR>"
else
output += "<a href='byond://?src=\ref[src];late_join=1'>Join Game!</A><BR>"
output += "<BR><a href='byond://?src=\ref[src];observe=1'>Observe</A><BR>"
output += "<BR><a href='byond://?src=\ref[src];observe=1'>Observe</A><BR>"
src << browse(output,"window=playersetup;size=250x210;can_close=0")
src << browse(output,"window=playersetup;size=250x210;can_close=0")
return
Stat()
..()
@@ -203,93 +191,37 @@ mob/new_player
LateChoices()
if(href_list["SelectedJob"])
if (!usr.client.authenticated)
if(!usr.client.authenticated)
src << "You are not authorized to enter the game."
return
if (!enter_allowed)
if(!enter_allowed)
usr << "\blue There is an administrative lock on entering the game!"
return
switch(href_list["SelectedJob"])
if ("1")
AttemptLateSpawn("Captain")
if ("2")
AttemptLateSpawn("Head of Security")
if ("3")
AttemptLateSpawn("Head of Personnel")
if ("4")
AttemptLateSpawn("Station Engineer")
if ("5")
AttemptLateSpawn("Bartender")
if ("6")
AttemptLateSpawn("Scientist")
if ("7")
AttemptLateSpawn("Chemist")
if ("8")
AttemptLateSpawn("Geneticist")
if ("9")
AttemptLateSpawn("Security Officer")
if ("10")
AttemptLateSpawn("Medical Doctor")
if ("11")
AttemptLateSpawn("Atmospheric Technician")
if ("12")
AttemptLateSpawn("Detective")
if ("13")
AttemptLateSpawn("Chaplain")
if ("14")
AttemptLateSpawn("Janitor")
if ("15")
AttemptLateSpawn("Clown")
if ("16")
AttemptLateSpawn("Chef")
if ("17")
AttemptLateSpawn("Roboticist")
if ("18")
AttemptLateSpawn("Assistant")
if ("19")
AttemptLateSpawn("Quartermaster")
if ("20")
AttemptLateSpawn("Research Director")
if ("21")
AttemptLateSpawn("Chief Engineer")
if ("22")
AttemptLateSpawn("Botanist")
if ("23")
AttemptLateSpawn("Librarian")
if ("24")
AttemptLateSpawn("Virologist")
if ("25")
AttemptLateSpawn("Lawyer")
if ("26")
AttemptLateSpawn("Cargo Technician")
if ("27")
AttemptLateSpawn("Chief Medical Officer")
if ("28")
AttemptLateSpawn("Warden")
if ("29")
AttemptLateSpawn("Shaft Miner")
if ("30")
AttemptLateSpawn("Mime")
AttemptLateSpawn(href_list["SelectedJob"])
return
if(!ready && href_list["preferences"])
preferences.process_link(src, href_list)
else if(!href_list["late_join"])
new_player_panel()
proc/IsJobAvailable(rank)
if(((jobMax[rank] < 0) || (countJob(rank) < jobMax[rank])) && !jobban_isbanned(src,rank))
/* proc/IsJobAvailable(rank)
if(((occupations[rank] < 0) || (countJob(rank) < occupations[rank])) && !jobban_isbanned(src,rank))
return 1
else
return 0
return 0*/
proc/AttemptLateSpawn(rank, maxAllowed)
if(IsJobAvailable(rank, maxAllowed))
proc/AttemptLateSpawn(rank)
var/datum/job/job = job_master.GetJob(rank)
if(job && ((job.title == "Assistant") || (job.current_positions < job.total_positions)))
var/mob/living/carbon/human/character = create_character()
var/icon/char_icon = getFlatIcon(character,0)//We're creating out own cache so it's not needed.
if (character)
character.Equip_Rank(rank, joined_late=1)
if(job_master.AssignRole(character, rank, 1))
job_master.EquipRank(character, rank, 1)
if(character.mind)
if(character.mind.assigned_role != "Cyborg")
ManifestLateSpawn(character,char_icon)
@@ -305,6 +237,7 @@ mob/new_player
else
src << alert("[rank] is not available. Please try another.")
proc/AnnounceArrival(var/mob/living/carbon/human/character, var/rank)
if (ticker.current_state == GAME_STATE_PLAYING)
var/ailist[] = list()
@@ -336,7 +269,7 @@ mob/new_player
M.fields["id"] = G.fields["id"]
S.fields["name"] = G.fields["name"]
S.fields["id"] = G.fields["id"]
if (H.gender == FEMALE)
if(H.gender == FEMALE)
G.fields["sex"] = "Female"
else
G.fields["sex"] = "Male"
@@ -381,102 +314,17 @@ mob/new_player
data_core.locked += L
return
// This fxn creates positions for assistants based on existing positions. This could be more elegant.
proc/LateChoices()
var/dat = "<html><body>"
dat += "Choose from the following open positions:<br>"
if (IsJobAvailable("Captain"))
dat += "<a href='byond://?src=\ref[src];SelectedJob=1'>Captain</a><br>"
if (IsJobAvailable("Head of Security"))
dat += "<a href='byond://?src=\ref[src];SelectedJob=2'>Head of Security</a><br>"
if (IsJobAvailable("Head of Personnel"))
dat += "<a href='byond://?src=\ref[src];SelectedJob=3'>Head of Personnel</a><br>"
if (IsJobAvailable("Research Director"))
dat += "<a href='byond://?src=\ref[src];SelectedJob=20'>Research Director</a><br>"
if (IsJobAvailable("Chief Engineer"))
dat += "<a href='byond://?src=\ref[src];SelectedJob=21'>Chief Engineer</a><br>"
if (IsJobAvailable("Station Engineer"))
dat += "<a href='byond://?src=\ref[src];SelectedJob=4'>Station Engineer</a><br>"
if (IsJobAvailable("Bartender"))
dat += "<a href='byond://?src=\ref[src];SelectedJob=5'>Bartender</a><br>"
if (IsJobAvailable("Scientist"))
dat += "<a href='byond://?src=\ref[src];SelectedJob=6'>Scientist</a><br>"
if (IsJobAvailable("Chemist"))
dat += "<a href='byond://?src=\ref[src];SelectedJob=7'>Chemist</a><br>"
if (IsJobAvailable("Geneticist"))
dat += "<a href='byond://?src=\ref[src];SelectedJob=8'>Geneticist</a><br>"
if (IsJobAvailable("Security Officer"))
dat += "<a href='byond://?src=\ref[src];SelectedJob=9'>Security Officer</a><br>"
if (IsJobAvailable("Medical Doctor"))
dat += "<a href='byond://?src=\ref[src];SelectedJob=10'>Medical Doctor</a><br>"
if (IsJobAvailable("Atmospheric Technician"))
dat += "<a href='byond://?src=\ref[src];SelectedJob=11'>Atmospheric Technician</a><br>"
if (IsJobAvailable("Detective"))
dat += "<a href='byond://?src=\ref[src];SelectedJob=12'>Detective</a><br>"
if (IsJobAvailable("Chaplain"))
dat += "<a href='byond://?src=\ref[src];SelectedJob=13'>Chaplain</a><br>"
if (IsJobAvailable("Janitor"))
dat += "<a href='byond://?src=\ref[src];SelectedJob=14'>Janitor</a><br>"
if (IsJobAvailable("Clown"))
dat += "<a href='byond://?src=\ref[src];SelectedJob=15'>Clown</a><br>"
if (IsJobAvailable("Mime"))
dat += "<a href='byond://?src=\ref[src];SelectedJob=30'>Mime</a><br>"
if (IsJobAvailable("Chef"))
dat += "<a href='byond://?src=\ref[src];SelectedJob=16'>Chef</a><br>"
if (IsJobAvailable("Roboticist"))
dat += "<a href='byond://?src=\ref[src];SelectedJob=17'>Roboticist</a><br>"
if (IsJobAvailable("Quartermaster"))
dat += "<a href='byond://?src=\ref[src];SelectedJob=19'>Quartermaster</a><br>"
if (IsJobAvailable("Botanist"))
dat += "<a href='byond://?src=\ref[src];SelectedJob=22'>Botanist</a><br>"
if (IsJobAvailable("Librarian"))
dat += "<a href='byond://?src=\ref[src];SelectedJob=23'>Librarian</a><br>"
if (IsJobAvailable("Virologist"))
dat += "<a href='byond://?src=\ref[src];SelectedJob=24'>Virologist</a><br>"
if (IsJobAvailable("Lawyer"))
dat += "<a href='byond://?src=\ref[src];SelectedJob=25'>Lawyer</a><br>"
if (IsJobAvailable("Cargo Technician"))
dat += "<a href='byond://?src=\ref[src];SelectedJob=26'>Cargo Technician</a><br>"
if (IsJobAvailable("Chief Medical Officer"))
dat += "<a href='byond://?src=\ref[src];SelectedJob=27'>Chief Medical Officer</a><br>"
if (IsJobAvailable("Warden"))
dat += "<a href='byond://?src=\ref[src];SelectedJob=28'>Warden</a><br>"
if (IsJobAvailable("Shaft Miner"))
dat += "<a href='byond://?src=\ref[src];SelectedJob=29'>Shaft Miner</a><br>"
if (!jobban_isbanned(src,"Assistant"))
dat += "<a href='byond://?src=\ref[src];SelectedJob=18'>Assistant</a><br>"
for(var/datum/job/job in job_master.occupations)
if(job && ((job.title == "Assistant") || (job.current_positions < job.total_positions)))
dat += "<a href='byond://?src=\ref[src];SelectedJob=[job.title]'>[job.title]</a><br>"
src << browse(dat, "window=latechoices;size=300x640;can_close=0")
proc/create_character()
spawning = 1
var/mob/living/carbon/human/new_character = new(loc)
@@ -489,9 +337,9 @@ mob/new_player
mind.transfer_to(new_character)
mind.original = new_character
return new_character
Move()
return 0
+248 -457
View File
@@ -28,354 +28,83 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set
"infested monkey" = ispath(text2path("/datum/game_mode/monkey")),
)
*/
var/const
BE_TRAITOR =(1<<0)
BE_OPERATIVE =(1<<1)
BE_CHANGELING=(1<<2)
BE_WIZARD =(1<<3)
BE_MALF =(1<<4)
BE_REV =(1<<5)
BE_ALIEN =(1<<6)
BE_CULTIST =(1<<7)
BE_MONKEY =(1<<8)
BE_PAI =(1<<9)
datum/preferences
var/real_name
var/gender = MALE
var/age = 30.0
var/b_type = "A+"
var
real_name
be_random_name = 0
gender = MALE
age = 30.0
b_type = "A+"
var/be_special //bitfields. See defines in setup.dm. --rastaf0
var/midis = 1
var/lastchangelog = 0 // size of last seen changelog file -- rastaf0
var/ooccolor = "#b82e00"
var/be_random_name = 0
var/underwear = 1
var/bubbles = 0 // 0 if the player doesn't want bubbles to appear
//Special role selection
be_special = 0
//Play admin midis
midis = 1
//Saved changlog filesize to detect if there was a change
lastchangelog = 0
var/occupation[length(occupations)]
var/datum/jobs/wanted_jobs = list()
//Just like it sounds
ooccolor = "#b82e00"
underwear = 1
var/h_style = "Short Hair"
var/f_style = "Shaved"
//Hair type
h_style = "Short Hair"
//Hair color
r_hair = 0
g_hair = 0
b_hair = 0
var/r_hair = 0
var/g_hair = 0
var/b_hair = 0
//Face hair type
f_style = "Shaved"
//Face hair color
r_facial = 0
g_facial = 0
b_facial = 0
var/r_facial = 0
var/g_facial = 0
var/b_facial = 0
//Skin color
s_tone = 0
var/s_tone = 0
var/r_eyes = 0
var/g_eyes = 0
var/b_eyes = 0
//Eye color
r_eyes = 0
g_eyes = 0
b_eyes = 0
var/UI = UI_OLD // saving the whole .DMI in preferences is not a good idea. --rastaf0 //'screen1_old.dmi' // Skie
//UI style
UI = UI_OLD
//Mob preview
icon/preview_icon = null
//Jobs, uses bitflags
job_civilian_high = 0
job_civilian_med = 0
job_civilian_low = 0
job_medsci_high = 0
job_medsci_med = 0
job_medsci_low = 0
job_engsec_high = 0
job_engsec_med = 0
job_engsec_low = 0
var/icon/preview_icon = null
New()
randomize_name()
for(var/n in occupation)
n=0
..()
//The mob should have a gender you want before running this proc.
proc/randomize_appearance_for(var/mob/living/carbon/human/H)
if(H.gender == MALE)
gender = MALE
else
gender = FEMALE
randomize_skin_tone()
randomize_hair(gender)
randomize_hair_color("hair")
if(gender == MALE)//only for dudes.
randomize_facial()
randomize_hair_color("facial")
randomize_eyes_color()
underwear = pick(0,1)
b_type = pick("A+", "A-", "B+", "B-", "AB+", "AB-", "O+", "O-")
age = rand(19,35)
copy_to(H,1)
proc/randomize_name()
if (gender == MALE)
real_name = capitalize(pick(first_names_male) + " " + capitalize(pick(last_names)))
else
real_name = capitalize(pick(first_names_female) + " " + capitalize(pick(last_names)))
proc/randomize_hair(var/gender)
//Women are more likely to have longer hair.
var/temp = gender==FEMALE&&prob(80) ? pick(2,6,8) : rand(1,9)
switch(temp)
if(1)
h_style = "Short Hair"
if(2)
h_style = "Long Hair"
if(3)
h_style = "Cut Hair"
if(4)
h_style = "Mohawk"
if(5)
h_style = "Balding"
if(6)
h_style = "Fag"
if(7)
h_style = "Bedhead"
if(8)
h_style = "Dreadlocks"
else
h_style = "bald"
proc/randomize_facial()
var/temp = prob(50) ? 14 : rand(1,13)//50% of not having a beard. Otherwise get a random one.
switch(temp)
if(1)
f_style = "Watson"
if(2)
f_style = "Chaplin"
if(3)
f_style = "Selleck"
if(4)
f_style = "Neckbeard"
if(5)
f_style = "Full Beard"
if(6)
f_style = "Long Beard"
if(7)
f_style = "Van Dyke"
if(8)
f_style = "Elvis"
if(9)
f_style = "Abe"
if(10)
f_style = "Chinstrap"
if(11)
f_style = "Hipster"
if(12)
f_style = "Goatee"
if(13)
f_style = "Hogan"
else
f_style = "bald"
proc/randomize_skin_tone()
var/tone
var/tmp = pickweight ( list ("caucasian" = 55, "afroamerican" = 15, "african" = 10, "latino" = 10, "albino" = 5, "weird" = 5))
switch (tmp)
if ("caucasian")
tone = -45 + 35
if ("afroamerican")
tone = -150 + 35
if ("african")
tone = -200 + 35
if ("latino")
tone = -90 + 35
if ("albino")
tone = -1 + 35
if ("weird")
tone = -(rand (1, 220)) + 35
s_tone = min(max(tone + rand (-25, 25), -185), 34)
proc/randomize_hair_color(var/target = "hair")
if (prob (75) && target == "facial") // Chance to inherit hair color
r_facial = r_hair
g_facial = g_hair
b_facial = b_hair
return
var/red
var/green
var/blue
var/col = pick ("blonde", "black", "chestnut", "copper", "brown", "wheat", "old", "punk")
switch (col)
if ("blonde")
red = 255
green = 255
blue = 0
if ("black")
red = 0
green = 0
blue = 0
if ("chestnut")
red = 153
green = 102
blue = 51
if ("copper")
red = 255
green = 153
blue = 0
if ("brown")
red = 102
green = 51
blue = 0
if ("wheat")
red = 255
green = 255
blue = 153
if ("old")
red = rand (100, 255)
green = red
blue = red
if ("punk")
red = rand (0, 255)
green = rand (0, 255)
blue = rand (0, 255)
red = max(min(red + rand (-25, 25), 255), 0)
green = max(min(green + rand (-25, 25), 255), 0)
blue = max(min(blue + rand (-25, 25), 255), 0)
switch (target)
if ("hair")
r_hair = red
g_hair = green
b_hair = blue
if ("facial")
r_facial = red
g_facial = green
b_facial = blue
proc/randomize_eyes_color()
var/red
var/green
var/blue
var/col = pick ("black", "grey", "brown", "chestnut", "blue", "lightblue", "green", "albino", "weird")
switch (col)
if ("black")
red = 0
green = 0
blue = 0
if ("grey")
red = rand (100, 200)
green = red
blue = red
if ("brown")
red = 102
green = 51
blue = 0
if ("chestnut")
red = 153
green = 102
blue = 0
if ("blue")
red = 51
green = 102
blue = 204
if ("lightblue")
red = 102
green = 204
blue = 255
if ("green")
red = 0
green = 102
blue = 0
if ("albino")
red = rand (200, 255)
green = rand (0, 150)
blue = rand (0, 150)
if ("weird")
red = rand (0, 255)
green = rand (0, 255)
blue = rand (0, 255)
red = max(min(red + rand (-25, 25), 255), 0)
green = max(min(green + rand (-25, 25), 255), 0)
blue = max(min(blue + rand (-25, 25), 255), 0)
r_eyes = red
g_eyes = green
b_eyes = blue
proc/update_preview_icon()
del(preview_icon)
var/g = "m"
if (gender == MALE)
g = "m"
else if (gender == FEMALE)
g = "f"
preview_icon = new /icon('human.dmi', "body_[g]_s")
// Skin tone
if (s_tone >= 0)
preview_icon.Blend(rgb(s_tone, s_tone, s_tone), ICON_ADD)
else
preview_icon.Blend(rgb(-s_tone, -s_tone, -s_tone), ICON_SUBTRACT)
if (underwear > 0)
preview_icon.Blend(new /icon('human.dmi', "underwear[underwear]_[g]_s"), ICON_OVERLAY)
var/icon/eyes_s = new/icon("icon" = 'human_face.dmi', "icon_state" = "eyes_s")
eyes_s.Blend(rgb(r_eyes, g_eyes, b_eyes), ICON_ADD)
var/h_style_r = null
switch(h_style)
if("Short Hair")
h_style_r = "hair_a"
if("Long Hair")
h_style_r = "hair_b"
if("Cut Hair")
h_style_r = "hair_c"
if("Mohawk")
h_style_r = "hair_d"
if("Balding")
h_style_r = "hair_e"
if("Fag")
h_style_r = "hair_f"
if("Bedhead")
h_style_r = "hair_bedhead"
if("Dreadlocks")
h_style_r = "hair_dreads"
else
h_style_r = "bald"
var/f_style_r = null
switch(f_style)
if ("Watson")
f_style_r = "facial_watson"
if ("Chaplin")
f_style_r = "facial_chaplin"
if ("Selleck")
f_style_r = "facial_selleck"
if ("Neckbeard")
f_style_r = "facial_neckbeard"
if ("Full Beard")
f_style_r = "facial_fullbeard"
if ("Long Beard")
f_style_r = "facial_longbeard"
if ("Van Dyke")
f_style_r = "facial_vandyke"
if ("Elvis")
f_style_r = "facial_elvis"
if ("Abe")
f_style_r = "facial_abe"
if ("Chinstrap")
f_style_r = "facial_chin"
if ("Hipster")
f_style_r = "facial_hip"
if ("Goatee")
f_style_r = "facial_gt"
if ("Hogan")
f_style_r = "facial_hogan"
else
f_style_r = "bald"
var/icon/hair_s = new/icon("icon" = 'human_face.dmi', "icon_state" = "[h_style_r]_s")
hair_s.Blend(rgb(r_hair, g_hair, b_hair), ICON_ADD)
var/icon/facial_s = new/icon("icon" = 'human_face.dmi', "icon_state" = "[f_style_r]_s")
facial_s.Blend(rgb(r_facial, g_facial, b_facial), ICON_ADD)
var/icon/mouth_s = new/icon("icon" = 'human_face.dmi', "icon_state" = "mouth_[g]_s")
eyes_s.Blend(hair_s, ICON_OVERLAY)
eyes_s.Blend(mouth_s, ICON_OVERLAY)
eyes_s.Blend(facial_s, ICON_OVERLAY)
preview_icon.Blend(eyes_s, ICON_OVERLAY)
del(mouth_s)
del(facial_s)
del(hair_s)
del(eyes_s)
proc/ShowChoices(mob/user)
update_preview_icon()
@@ -394,7 +123,6 @@ datum/preferences
dat += "<br>"
dat += "<b>UI Style:</b> <a href=\"byond://?src=\ref[user];preferences=1;UI=input\"><b>[UI == UI_NEW ? "New" : "Old"]</b></a><br>"
dat += "<b>Play admin midis:</b> <a href=\"byond://?src=\ref[user];preferences=1;midis=input\"><b>[midis == 1 ? "Yes" : "No"]</b></a><br>"
//dat += "<b>Show chat bubbles:</b> <a href=\"byond://?src=\ref[user];preferences=1;bubbles=input\"><b>[bubbles == 1 ? "Yes" : "No"]</b></a><br>"
if((user.client) && (user.client.holder) && (user.client.holder.rank) && (user.client.holder.rank == "Game Master"))
dat += "<hr><b>OOC</b><br>"
@@ -440,7 +168,7 @@ datum/preferences
src.be_special = 0
dat += "<hr>"
if (!IsGuestKey(user.key))
if(!IsGuestKey(user.key))
dat += "<a href='byond://?src=\ref[user];preferences=1;load=1'>Load Setup</a><br>"
dat += "<a href='byond://?src=\ref[user];preferences=1;save=1'>Save Setup</a><br>"
@@ -453,38 +181,35 @@ datum/preferences
var/HTML = "<body>"
HTML += "<tt><center>"
HTML += "<b>Choose occupation chances</b><br>Unavailable occupations are in red.<br>"
for(var/job in occupations)
if(!occupation[job])
occupation[job] = 0
if(jobban_isbanned(user, job))
HTML += "<font color=red>[job]</font><br>"
for(var/datum/job/job in job_master.occupations)
var/rank = job.title
if(jobban_isbanned(user, rank))
HTML += "<font color=red>[rank]</font><br>"
continue
if((occupation["Assistant"] != 0) && (job != "Assistant"))
HTML += "<font color=orange>[job]</font><br>"
if((job_civilian_low & ASSISTANT) && (rank != "Assistant"))
HTML += "<font color=orange>[rank]</font><br>"
continue
if((job in command_positions) || (job == "AI"))//Bold head jobs
HTML += "<b>[job]<a href=\"byond://?src=\ref[user];preferences=1;occ=1;job=[job]\"></b>"
if((rank in command_positions) || (rank == "AI"))//Bold head jobs
HTML += "<b>[rank]<a href=\"byond://?src=\ref[user];preferences=1;occ=1;job=[rank]\"></b>"
else
HTML += "[job]<a href=\"byond://?src=\ref[user];preferences=1;occ=1;job=[job]\">"
HTML += "[rank]<a href=\"byond://?src=\ref[user];preferences=1;occ=1;job=[rank]\">"
if(job == "Assistant")//Assistant is special
if(occupation[job] != 0)
if(rank == "Assistant")//Assistant is special
if(job_civilian_low & ASSISTANT)
HTML += "<font color=green>\[Yes]</font>"
else
HTML += "<font color=red>\[No]</font>"
HTML += "</a><br>"
continue
switch(occupation[job])
if(0)
HTML += "<font color=red>\[NEVER]</font>"
if(1)
HTML += "<font color=blue>\[High]</font>"
if(2)
HTML += "<font color=green>\[Medium]</font>"
if(3)
HTML += "<font color=orange>\[Low]</font>"
else HTML += "*"+occupation[job]+"*"
if(GetJobDepartment(job, 1) & job.flag)
HTML += "<font color=blue>\[High]</font>"
else if(GetJobDepartment(job, 2) & job.flag)
HTML += "<font color=green>\[Medium]</font>"
else if(GetJobDepartment(job, 3) & job.flag)
HTML += "<font color=orange>\[Low]</font>"
else
HTML += "<font color=red>\[NEVER]</font>"
HTML += "</a><br>"
HTML += "<br>"
@@ -495,37 +220,118 @@ datum/preferences
user << browse(HTML, "window=mob_occupation;size=320x600")
return
proc/SetJob(mob/user, job="Captain")
if((!(occupations.Find(job)) && !(assistant_occupations.Find(job)) && (job != "No Preference")))
proc/SetJob(mob/user, role)
var/datum/job/job = job_master.GetJob(role)
if(!job)
user << browse(null, "window=mob_occupation")
ShowChoices(user)
return
if(job == "Assistant")
if(occupation[job] == 0)
occupation[job] = 4
if(role == "Assistant")
if(job_civilian_low & job.flag)
job_civilian_low &= ~job.flag
else
occupation[job] = 0
job_civilian_low |= job.flag
SetChoices(user)
return 1
if(occupation[job] == 2)//Only one job may be set to "High"
for(var/j in occupation)
if(occupation[j] == 1)
occupation[j] = 2
occupation[job] = (occupation[job]-1)
if(occupation[job] < 0)
occupation[job] = 3
if(GetJobDepartment(job, 1) & job.flag)
SetJobDepartment(job, 1)
else if(GetJobDepartment(job, 2) & job.flag)
SetJobDepartment(job, 2)
else if(GetJobDepartment(job, 3) & job.flag)
SetJobDepartment(job, 3)
else//job = Never
SetJobDepartment(job, 4)
SetChoices(user)
return 1
proc/process_link(mob/user, list/link_tags)
if (link_tags["occ"])
if (link_tags["cancel"])
proc/GetJobDepartment(var/datum/job/job, var/level)
if(!job || !level) return 0
switch(job.department_flag)
if(CIVILIAN)
switch(level)
if(1)
return job_civilian_high
if(2)
return job_civilian_med
if(3)
return job_civilian_low
if(MEDSCI)
switch(level)
if(1)
return job_medsci_high
if(2)
return job_medsci_med
if(3)
return job_medsci_low
if(ENGSEC)
switch(level)
if(1)
return job_engsec_high
if(2)
return job_engsec_med
if(3)
return job_engsec_low
return 0
proc/SetJobDepartment(var/datum/job/job, var/level)
if(!job || !level) return 0
switch(level)
if(1)//Only one of these should ever be active at once so clear them all here
job_civilian_high = 0
job_medsci_high = 0
job_engsec_high = 0
return 1
if(2)//Set current highs to med, then reset them
job_civilian_med |= job_civilian_high
job_medsci_med |= job_medsci_high
job_engsec_med |= job_engsec_high
job_civilian_high = 0
job_medsci_high = 0
job_engsec_high = 0
switch(job.department_flag)
if(CIVILIAN)
switch(level)
if(2)
job_civilian_high = job.flag
job_civilian_med &= ~job.flag
if(3)
job_civilian_med |= job.flag
job_civilian_low &= ~job.flag
else
job_civilian_low |= job.flag
if(MEDSCI)
switch(level)
if(2)
job_medsci_high = job.flag
job_medsci_med &= ~job.flag
if(3)
job_medsci_med |= job.flag
job_medsci_low &= ~job.flag
else
job_medsci_low |= job.flag
if(ENGSEC)
switch(level)
if(2)
job_engsec_high = job.flag
job_engsec_med &= ~job.flag
if(3)
job_engsec_med |= job.flag
job_engsec_low &= ~job.flag
else
job_engsec_low |= job.flag
return 1
proc/process_link(mob/user, list/link_tags)
if(link_tags["occ"])
if(link_tags["cancel"])
user << browse(null, "window=\ref[user]occupation")
return
else if(link_tags["job"])
@@ -535,7 +341,7 @@ datum/preferences
return 1
if (link_tags["real_name"])
if(link_tags["real_name"])
var/new_name
switch(link_tags["real_name"])
@@ -556,135 +362,132 @@ datum/preferences
new_name = copytext(new_name, 1, 26)
real_name = new_name
if (link_tags["age"])
if(link_tags["age"])
switch(link_tags["age"])
if ("input")
if("input")
var/new_age = input(user, "Please select type in age: 20-45", "Character Generation") as num
if(new_age)
age = max(min(round(text2num(new_age)), 45), 20)
if ("random")
if("random")
age = rand (20, 45)
if (link_tags["b_type"])
if(link_tags["b_type"])
switch(link_tags["b_type"])
if ("input")
if("input")
var/new_b_type = input(user, "Please select a blood type:", "Character Generation") as null|anything in list( "A+", "A-", "B+", "B-", "AB+", "AB-", "O+", "O-" )
if (new_b_type)
if(new_b_type)
b_type = new_b_type
if ("random")
if("random")
b_type = pickweight ( list ("A+" = 31, "A-" = 7, "B+" = 8, "B-" = 2, "AB+" = 2, "AB-" = 1, "O+" = 40, "O-" = 9))
if (link_tags["hair"])
if(link_tags["hair"])
switch(link_tags["hair"])
if ("input")
if("input")
var/new_hair = input(user, "Please select hair color.", "Character Generation") as color
if(new_hair)
r_hair = hex2num(copytext(new_hair, 2, 4))
g_hair = hex2num(copytext(new_hair, 4, 6))
b_hair = hex2num(copytext(new_hair, 6, 8))
if ("random")
if("random")
randomize_hair_color("hair")
if (link_tags["facial"])
if(link_tags["facial"])
switch(link_tags["facial"])
if ("input")
if("input")
var/new_facial = input(user, "Please select facial hair color.", "Character Generation") as color
if(new_facial)
r_facial = hex2num(copytext(new_facial, 2, 4))
g_facial = hex2num(copytext(new_facial, 4, 6))
b_facial = hex2num(copytext(new_facial, 6, 8))
if ("random")
if("random")
randomize_hair_color("facial")
if (link_tags["eyes"])
if(link_tags["eyes"])
switch(link_tags["eyes"])
if ("input")
if("input")
var/new_eyes = input(user, "Please select eye color.", "Character Generation") as color
if(new_eyes)
r_eyes = hex2num(copytext(new_eyes, 2, 4))
g_eyes = hex2num(copytext(new_eyes, 4, 6))
b_eyes = hex2num(copytext(new_eyes, 6, 8))
if ("random")
if("random")
randomize_eyes_color()
if (link_tags["s_tone"])
if(link_tags["s_tone"])
switch(link_tags["s_tone"])
if ("random")
if("random")
randomize_skin_tone()
if("input")
var/new_tone = input(user, "Please select skin tone level: 1-220 (1=albino, 35=caucasian, 150=black, 220='very' black)", "Character Generation") as text
if (new_tone)
if(new_tone)
s_tone = max(min(round(text2num(new_tone)), 220), 1)
s_tone = -s_tone + 35
if (link_tags["h_style"])
if(link_tags["h_style"])
switch(link_tags["h_style"])
if ("random")
if (gender == FEMALE)
if("random")
if(gender == FEMALE)
h_style = pickweight ( list ("Cut Hair" = 5, "Short Hair" = 5, "Long Hair" = 5, "Mohawk" = 5, "Balding" = 1, "Fag" = 5, "Bedhead" = 5, "Dreadlocks" = 5, "Bald" = 5))
else
h_style = pickweight ( list ("Cut Hair" = 5, "Short Hair" = 5, "Long Hair" = 5, "Mohawk" = 5, "Balding" = 5, "Fag" = 5, "Bedhead" = 5, "Dreadlocks" = 5, "Bald" = 5))
if("input")
var/new_style = input(user, "Please select hair style", "Character Generation") as null|anything in list( "Cut Hair", "Short Hair", "Long Hair", "Mohawk", "Balding", "Fag", "Bedhead", "Dreadlocks", "Bald" )
if (new_style)
if(new_style)
h_style = new_style
if (link_tags["ooccolor"])
if(link_tags["ooccolor"])
var/ooccolor = input(user, "Please select OOC colour.", "OOC colour") as color
if(ooccolor)
src.ooccolor = ooccolor
if (link_tags["f_style"])
if(link_tags["f_style"])
switch(link_tags["f_style"])
if ("random")
if (gender == FEMALE)
if("random")
if(gender == FEMALE)
f_style = pickweight ( list("Watson" = 1, "Chaplin" = 1, "Selleck" = 1, "Full Beard" = 1, "Long Beard" = 1, "Neckbeard" = 1, "Van Dyke" = 1, "Elvis" = 1, "Abe" = 1, "Chinstrap" = 1, "Hipster" = 1, "Goatee" = 1, "Hogan" = 1, "Shaved" = 100))
else
f_style = pickweight ( list("Watson" = 1, "Chaplin" = 1, "Selleck" = 1, "Full Beard" = 1, "Long Beard" = 1, "Neckbeard" = 1, "Van Dyke" = 1, "Elvis" = 1, "Abe" = 1, "Chinstrap" = 1, "Hipster" = 1, "Goatee" = 1, "Hogan" = 1, "Shaved" = 10))
if("input")
var/new_style = input(user, "Please select facial style", "Character Generation") as null|anything in list("Watson", "Chaplin", "Selleck", "Full Beard", "Long Beard", "Neckbeard", "Van Dyke", "Elvis", "Abe", "Chinstrap", "Hipster", "Goatee", "Hogan", "Shaved")
if (new_style)
if(new_style)
f_style = new_style
if (link_tags["gender"])
if (gender == MALE)
if(link_tags["gender"])
if(gender == MALE)
gender = FEMALE
else
gender = MALE
if (link_tags["UI"])
if (UI == UI_OLD)
if(link_tags["UI"])
if(UI == UI_OLD)
UI = UI_NEW
else
UI = UI_OLD
if (link_tags["midis"])
if(link_tags["midis"])
midis = (midis+1)%2
if (link_tags["bubbles"])
bubbles = !bubbles
if (link_tags["underwear"])
if(link_tags["underwear"])
if(!IsGuestKey(user.key))
switch(link_tags["underwear"])
if ("random")
if (prob (75))
if("random")
if(prob (75))
underwear = 1
else
underwear = 0
if("input")
if (underwear == 1)
if(underwear == 1)
underwear = 0
else
underwear = 1
if (link_tags["be_special"])
if(link_tags["be_special"])
src.be_special^=(1<<text2num(link_tags["be_special"])) //bitwize magic, sorry for that. --rastaf0
if (link_tags["b_random_name"])
if(link_tags["b_random_name"])
be_random_name = !be_random_name
if(!IsGuestKey(user.key))
@@ -692,18 +495,24 @@ datum/preferences
savefile_save(user)
else if(link_tags["load"])
if (!savefile_load(user, 0))
if(!savefile_load(user, 0))
alert(user, "You do not have a savefile.")
if (link_tags["reset_all"])
if(link_tags["reset_all"])
gender = MALE
randomize_name()
age = 30
for(var/o in occupation)
occupation[o] = 0
job_civilian_high = 0
job_civilian_med = 0
job_civilian_low = 0
job_medsci_high = 0
job_medsci_med = 0
job_medsci_low = 0
job_engsec_high = 0
job_engsec_med = 0
job_engsec_low = 0
underwear = 1
//be_syndicate = 0
be_special = 0
be_random_name = 0
r_hair = 0.0
@@ -721,11 +530,10 @@ datum/preferences
b_type = "A+"
UI = UI_OLD
midis = 1
bubbles = 1
ShowChoices(user)
proc/copy_to(mob/living/carbon/human/character, safety = 0)
if(be_random_name)
randomize_name()
@@ -754,9 +562,9 @@ datum/preferences
character.f_style = f_style
switch (UI)
if (UI_OLD)
if(UI_OLD)
character.UI = 'screen1_old.dmi'
if (UI_NEW)
if(UI_NEW)
character.UI = 'screen1.dmi'
switch(h_style)
@@ -780,31 +588,31 @@ datum/preferences
character.hair_icon_state = "bald"
switch(f_style)
if ("Watson")
if("Watson")
character.face_icon_state = "facial_watson"
if ("Chaplin")
if("Chaplin")
character.face_icon_state = "facial_chaplin"
if ("Selleck")
if("Selleck")
character.face_icon_state = "facial_selleck"
if ("Neckbeard")
if("Neckbeard")
character.face_icon_state = "facial_neckbeard"
if ("Full Beard")
if("Full Beard")
character.face_icon_state = "facial_fullbeard"
if ("Long Beard")
if("Long Beard")
character.face_icon_state = "facial_longbeard"
if ("Van Dyke")
if("Van Dyke")
character.face_icon_state = "facial_vandyke"
if ("Elvis")
if("Elvis")
character.face_icon_state = "facial_elvis"
if ("Abe")
if("Abe")
character.face_icon_state = "facial_abe"
if ("Chinstrap")
if("Chinstrap")
character.face_icon_state = "facial_chin"
if ("Hipster")
if("Hipster")
character.face_icon_state = "facial_hip"
if ("Goatee")
if("Goatee")
character.face_icon_state = "facial_gt"
if ("Hogan")
if("Hogan")
character.face_icon_state = "facial_hogan"
else
character.face_icon_state = "bald"
@@ -818,26 +626,9 @@ datum/preferences
spawn(10)
if(character&&character.client)
character.client.midis = midis
character.client.bubbles = bubbles
character.client.ooccolor = ooccolor
character.client.be_alien = be_special&BE_ALIEN
character.client.be_pai = be_special&BE_PAI
/*
if (!M.real_name || M.be_random_name)
if (M.gender == "male")
M.real_name = capitalize(pick(first_names_male) + " " + capitalize(pick(last_names)))
else
M.real_name = capitalize(pick(first_names_female) + " " + capitalize(pick(last_names)))
for(var/mob/living/carbon/human/H in world)
if(cmptext(H.real_name,M.real_name))
usr << "You are using a name that is very similar to a currently used name, please choose another one using Character Setup."
return
if(cmptext("Unknown",M.real_name))
usr << "This name is reserved for use by the game, please choose another one using Character Setup."
return
*/
#undef UI_OLD
#undef UI_NEW
@@ -0,0 +1,306 @@
datum/preferences
//The mob should have a gender you want before running this proc.
proc/randomize_appearance_for(var/mob/living/carbon/human/H)
if(H.gender == MALE)
gender = MALE
else
gender = FEMALE
randomize_skin_tone()
randomize_hair(gender)
randomize_hair_color("hair")
if(gender == MALE)//only for dudes.
randomize_facial()
randomize_hair_color("facial")
randomize_eyes_color()
underwear = pick(0,1)
b_type = pick("A+", "A-", "B+", "B-", "AB+", "AB-", "O+", "O-")
age = rand(19,35)
copy_to(H,1)
proc/randomize_name()
if(gender == MALE)
real_name = capitalize(pick(first_names_male) + " " + capitalize(pick(last_names)))
else
real_name = capitalize(pick(first_names_female) + " " + capitalize(pick(last_names)))
return
proc/randomize_hair(var/gender)
//Women are more likely to have longer hair.
var/temp = gender==FEMALE&&prob(80) ? pick(2,6,8) : rand(1,9)
switch(temp)
if(1)
h_style = "Short Hair"
if(2)
h_style = "Long Hair"
if(3)
h_style = "Cut Hair"
if(4)
h_style = "Mohawk"
if(5)
h_style = "Balding"
if(6)
h_style = "Fag"
if(7)
h_style = "Bedhead"
if(8)
h_style = "Dreadlocks"
else
h_style = "bald"
proc/randomize_facial()
var/temp = prob(50) ? 14 : rand(1,13)//50% of not having a beard. Otherwise get a random one.
switch(temp)
if(1)
f_style = "Watson"
if(2)
f_style = "Chaplin"
if(3)
f_style = "Selleck"
if(4)
f_style = "Neckbeard"
if(5)
f_style = "Full Beard"
if(6)
f_style = "Long Beard"
if(7)
f_style = "Van Dyke"
if(8)
f_style = "Elvis"
if(9)
f_style = "Abe"
if(10)
f_style = "Chinstrap"
if(11)
f_style = "Hipster"
if(12)
f_style = "Goatee"
if(13)
f_style = "Hogan"
else
f_style = "bald"
proc/randomize_skin_tone()
var/tone
var/tmp = pickweight ( list ("caucasian" = 55, "afroamerican" = 15, "african" = 10, "latino" = 10, "albino" = 5, "weird" = 5))
switch (tmp)
if ("caucasian")
tone = -45 + 35
if ("afroamerican")
tone = -150 + 35
if ("african")
tone = -200 + 35
if ("latino")
tone = -90 + 35
if ("albino")
tone = -1 + 35
if ("weird")
tone = -(rand (1, 220)) + 35
s_tone = min(max(tone + rand (-25, 25), -185), 34)
proc/randomize_hair_color(var/target = "hair")
if (prob (75) && target == "facial") // Chance to inherit hair color
r_facial = r_hair
g_facial = g_hair
b_facial = b_hair
return
var/red
var/green
var/blue
var/col = pick ("blonde", "black", "chestnut", "copper", "brown", "wheat", "old", "punk")
switch (col)
if ("blonde")
red = 255
green = 255
blue = 0
if ("black")
red = 0
green = 0
blue = 0
if ("chestnut")
red = 153
green = 102
blue = 51
if ("copper")
red = 255
green = 153
blue = 0
if ("brown")
red = 102
green = 51
blue = 0
if ("wheat")
red = 255
green = 255
blue = 153
if ("old")
red = rand (100, 255)
green = red
blue = red
if ("punk")
red = rand (0, 255)
green = rand (0, 255)
blue = rand (0, 255)
red = max(min(red + rand (-25, 25), 255), 0)
green = max(min(green + rand (-25, 25), 255), 0)
blue = max(min(blue + rand (-25, 25), 255), 0)
switch (target)
if ("hair")
r_hair = red
g_hair = green
b_hair = blue
if ("facial")
r_facial = red
g_facial = green
b_facial = blue
proc/randomize_eyes_color()
var/red
var/green
var/blue
var/col = pick ("black", "grey", "brown", "chestnut", "blue", "lightblue", "green", "albino", "weird")
switch (col)
if ("black")
red = 0
green = 0
blue = 0
if ("grey")
red = rand (100, 200)
green = red
blue = red
if ("brown")
red = 102
green = 51
blue = 0
if ("chestnut")
red = 153
green = 102
blue = 0
if ("blue")
red = 51
green = 102
blue = 204
if ("lightblue")
red = 102
green = 204
blue = 255
if ("green")
red = 0
green = 102
blue = 0
if ("albino")
red = rand (200, 255)
green = rand (0, 150)
blue = rand (0, 150)
if ("weird")
red = rand (0, 255)
green = rand (0, 255)
blue = rand (0, 255)
red = max(min(red + rand (-25, 25), 255), 0)
green = max(min(green + rand (-25, 25), 255), 0)
blue = max(min(blue + rand (-25, 25), 255), 0)
r_eyes = red
g_eyes = green
b_eyes = blue
proc/update_preview_icon()
del(preview_icon)
var/g = "m"
if (gender == MALE)
g = "m"
else if (gender == FEMALE)
g = "f"
preview_icon = new /icon('human.dmi', "body_[g]_s")
// Skin tone
if (s_tone >= 0)
preview_icon.Blend(rgb(s_tone, s_tone, s_tone), ICON_ADD)
else
preview_icon.Blend(rgb(-s_tone, -s_tone, -s_tone), ICON_SUBTRACT)
if (underwear > 0)
preview_icon.Blend(new /icon('human.dmi', "underwear[underwear]_[g]_s"), ICON_OVERLAY)
var/icon/eyes_s = new/icon("icon" = 'human_face.dmi', "icon_state" = "eyes_s")
eyes_s.Blend(rgb(r_eyes, g_eyes, b_eyes), ICON_ADD)
var/h_style_r = null
switch(h_style)
if("Short Hair")
h_style_r = "hair_a"
if("Long Hair")
h_style_r = "hair_b"
if("Cut Hair")
h_style_r = "hair_c"
if("Mohawk")
h_style_r = "hair_d"
if("Balding")
h_style_r = "hair_e"
if("Fag")
h_style_r = "hair_f"
if("Bedhead")
h_style_r = "hair_bedhead"
if("Dreadlocks")
h_style_r = "hair_dreads"
else
h_style_r = "bald"
var/f_style_r = null
switch(f_style)
if ("Watson")
f_style_r = "facial_watson"
if ("Chaplin")
f_style_r = "facial_chaplin"
if ("Selleck")
f_style_r = "facial_selleck"
if ("Neckbeard")
f_style_r = "facial_neckbeard"
if ("Full Beard")
f_style_r = "facial_fullbeard"
if ("Long Beard")
f_style_r = "facial_longbeard"
if ("Van Dyke")
f_style_r = "facial_vandyke"
if ("Elvis")
f_style_r = "facial_elvis"
if ("Abe")
f_style_r = "facial_abe"
if ("Chinstrap")
f_style_r = "facial_chin"
if ("Hipster")
f_style_r = "facial_hip"
if ("Goatee")
f_style_r = "facial_gt"
if ("Hogan")
f_style_r = "facial_hogan"
else
f_style_r = "bald"
var/icon/hair_s = new/icon("icon" = 'human_face.dmi', "icon_state" = "[h_style_r]_s")
hair_s.Blend(rgb(r_hair, g_hair, b_hair), ICON_ADD)
var/icon/facial_s = new/icon("icon" = 'human_face.dmi', "icon_state" = "[f_style_r]_s")
facial_s.Blend(rgb(r_facial, g_facial, b_facial), ICON_ADD)
var/icon/mouth_s = new/icon("icon" = 'human_face.dmi', "icon_state" = "mouth_[g]_s")
eyes_s.Blend(hair_s, ICON_OVERLAY)
eyes_s.Blend(mouth_s, ICON_OVERLAY)
eyes_s.Blend(facial_s, ICON_OVERLAY)
preview_icon.Blend(eyes_s, ICON_OVERLAY)
del(mouth_s)
del(facial_s)
del(hair_s)
del(eyes_s)
+49 -69
View File
@@ -1,5 +1,5 @@
#define SAVEFILE_VERSION_MIN 2
#define SAVEFILE_VERSION_MAX 3
#define SAVEFILE_VERSION_MIN 3
#define SAVEFILE_VERSION_MAX 4
datum/preferences/proc/savefile_path(mob/user)
return "data/player_saves/[copytext(user.ckey, 1, 2)]/[user.ckey]/preferences.sav"
@@ -9,25 +9,31 @@ datum/preferences/proc/savefile_save(mob/user)
return 0
var/savefile/F = new /savefile(src.savefile_path(user))
var/version
F["version"] >> version
if (!isnull(version) && version<=2)
F["be_syndicate"] << null
F["be_alien"] << null
F["UI"] << null
// var/version
// F["version"] >> version
F["version"] << SAVEFILE_VERSION_MAX
F["real_name"] << src.real_name
F["name_is_always_random"] << src.be_random_name
F["gender"] << src.gender
F["age"] << src.age
for(var/job in uniquelist(occupations + assistant_occupations))
//world << src.occupation[job]
F["occupation_"+job] << src.occupation[job]
//F["occupation_1"] << src.occupation[1]
//F["occupation_2"] << src.occupation[2]
//F["occupation_3"] << src.occupation[3]
//Job data
F["job_civilian_high"] << src.job_civilian_high
F["job_civilian_med"] << src.job_civilian_med
F["job_civilian_low"] << src.job_civilian_low
F["job_medsci_high"] << src.job_medsci_high
F["job_medsci_med"] << src.job_medsci_med
F["job_medsci_low"] << src.job_medsci_low
F["job_engsec_high"] << src.job_engsec_high
F["job_engsec_med"] << src.job_engsec_med
F["job_engsec_low"] << src.job_engsec_low
//Body data
F["hair_red"] << src.r_hair
F["hair_green"] << src.g_hair
F["hair_blue"] << src.b_hair
@@ -41,17 +47,13 @@ datum/preferences/proc/savefile_save(mob/user)
F["eyes_green"] << src.g_eyes
F["eyes_blue"] << src.b_eyes
F["blood_type"] << src.b_type
//F["be_syndicate"] << src.be_syndicate
F["be_special"] << src.be_special
F["underwear"] << src.underwear
F["name_is_always_random"] << src.be_random_name
F["UI"] << src.UI // Skie
//world << "DEBUG: saving UI as [UI]"
//F["be_alien"] << src.be_alien // Urist
F["midis"] << src.midis // Urist
F["bubbles"] << src.bubbles // Doohl
F["ooccolor"] << src.ooccolor // Urist
F["lastchangelog"] << src.lastchangelog // rastaf0
F["be_special"] << src.be_special
F["UI"] << src.UI
F["midis"] << src.midis
F["ooccolor"] << src.ooccolor
F["lastchangelog"] << src.lastchangelog
return 1
@@ -61,14 +63,11 @@ datum/preferences/proc/savefile_save(mob/user)
// returns 1 if loaded (or file was incompatible)
// returns 0 if savefile did not exist
datum/preferences/proc/savefile_load(mob/user, var/silent = 1)
if (IsGuestKey(user.key))
return 0
datum/preferences/proc/savefile_load(mob/user)
if(IsGuestKey(user.key)) return 0
var/path = savefile_path(user)
if (!fexists(path))
return 0
if(!fexists(path)) return 0
var/savefile/F = new /savefile(path)
@@ -77,20 +76,13 @@ datum/preferences/proc/savefile_load(mob/user, var/silent = 1)
if (isnull(version) || version < SAVEFILE_VERSION_MIN || version > SAVEFILE_VERSION_MAX)
fdel(path)
// if (!silent)
// alert(user, "Your savefile was incompatible with this version and was deleted.")
alert(user, "Your savefile was incompatible with this version and was deleted.")
return 0
F["real_name"] >> src.real_name
F["gender"] >> src.gender
F["age"] >> src.age
for(var/job in uniquelist(occupations + assistant_occupations))
F["occupation_"+job] >> src.occupation[job]
//F["occupation_1"] >> src.occupation[1]
//F["occupation_2"] >> src.occupation[2]
//F["occupation_3"] >> src.occupation[3]
F["hair_red"] >> src.r_hair
F["hair_green"] >> src.g_hair
F["hair_blue"] >> src.b_hair
@@ -106,37 +98,25 @@ datum/preferences/proc/savefile_load(mob/user, var/silent = 1)
F["blood_type"] >> src.b_type
F["underwear"] >> src.underwear
F["name_is_always_random"] >> src.be_random_name
//F["be_alien"] >> src.be_alien // Urist
F["midis"] >> src.midis // Urist
F["bubbles"] >> src.bubbles // Doohl
F["ooccolor"] >> src.ooccolor // Urist
F["lastchangelog"] >> src.lastchangelog // rastaf0
F["midis"] >> src.midis
F["ooccolor"] >> src.ooccolor
F["lastchangelog"] >> src.lastchangelog
F["UI"] >> src.UI
F["be_special"] >> src.be_special
if(version && (version >= SAVEFILE_VERSION_MAX))
F["job_civilian_high"] >> src.job_civilian_high
F["job_civilian_med"] >> src.job_civilian_med
F["job_civilian_low"] >> src.job_civilian_low
F["job_medsci_high"] >> src.job_medsci_high
F["job_medsci_med"] >> src.job_medsci_med
F["job_medsci_low"] >> src.job_medsci_low
F["job_engsec_high"] >> src.job_engsec_high
F["job_engsec_med"] >> src.job_engsec_med
F["job_engsec_low"] >> src.job_engsec_low
if (version<=2) // migration from old preferences file format --rastaf0
src.UI = 0 // swithing from storing an image file to storing boolean value --rastaf0
//world << "DEBUG: loading legacy UI as [UI]"
var/tmp
F["be_syndicate"] >> tmp
if (tmp)
be_special |= BE_TRAITOR
be_special |= BE_OPERATIVE
be_special |= BE_CHANGELING
be_special |= BE_WIZARD
be_special |= BE_MALF
be_special |= BE_REV
F["be_alien"] >> tmp
F["be_pai"] >> tmp
if (tmp)
be_special |= BE_ALIEN
be_special |= BE_PAI
del(F)
fdel(path)
savefile_save(user)
else // /migration end
F["UI"] >> src.UI
F["be_special"] >> src.be_special
//world << "DEBUG: loading new UI as [UI]"
return 1
+1 -1
View File
@@ -399,7 +399,7 @@
if("hand")
usr:swap_hand()
if("resist")
if (usr.next_move < world.time)
if(usr.next_move < world.time)
return
usr.next_move = world.time + 20
if ((!( usr.stat ) && usr.canmove && !( usr.restrained() )))
+5 -6
View File
@@ -11,8 +11,7 @@
icon = null
invisibility = 101
for(var/t in organs)
//organs[text("[]", t)] = null
del(organs[text("[]", t)])
del(t)
var/atom/movable/overlay/animation = new /atom/movable/overlay( loc )
animation.icon_state = "blank"
animation.icon = 'mob.dmi'
@@ -53,7 +52,7 @@
if (monkeyizing)
return
for(var/t in organs)
del(organs[text("[]", t)])
del(t)
return ..()
/mob/living/carbon/AIize()
@@ -155,7 +154,7 @@
icon = null
invisibility = 101
for(var/t in organs)
del(organs[text("[t]")])
del(t)
if(client)
//client.screen -= main_hud1.contents
client.screen -= hud_used.contents
@@ -218,7 +217,7 @@
icon = null
invisibility = 101
for(var/t in organs)
del(organs[t])
del(t)
var/alien_caste = pick("Hunter","Sentinel","Drone")
var/mob/living/carbon/alien/humanoid/new_xeno
@@ -258,7 +257,7 @@
icon = null
invisibility = 101
for(var/t in organs)
del(organs[t])
del(t)
if(reproduce)
var/number = pick(2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,4)
+7 -7
View File
@@ -327,7 +327,7 @@
var/turf/T = get_turf_loc(src)
var/obj/structure/cable/N = T.get_cable_node()
if (prob(50) && electrocute_mob(usr, N, N))
var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, src)
s.start()
return
@@ -345,7 +345,7 @@
playsound(src.loc, 'Deconstruct.ogg', 50, 1)
if(do_after(user, 50))
if (prob(50) && electrocute_mob(usr, terminal.powernet, terminal))
var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, src)
s.start()
return
@@ -851,11 +851,11 @@
malfai << "Hack complete. The APC is now under your exclusive control. Discharging cell to fuse interface."
updateicon()
var/datum/effect/system/harmless_smoke_spread/smoke = new /datum/effect/system/harmless_smoke_spread()
var/datum/effect/effect/system/harmless_smoke_spread/smoke = new /datum/effect/effect/system/harmless_smoke_spread()
smoke.set_up(3, 0, src.loc)
smoke.attach(src)
smoke.start()
var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, src)
s.start()
for(var/mob/M in viewers(src))
@@ -880,11 +880,11 @@
cell.corrupt()
src.malfhack = 1
updateicon()
var/datum/effect/system/harmless_smoke_spread/smoke = new /datum/effect/system/harmless_smoke_spread()
var/datum/effect/effect/system/harmless_smoke_spread/smoke = new /datum/effect/effect/system/harmless_smoke_spread()
smoke.set_up(3, 0, src.loc)
smoke.attach(src)
smoke.start()
var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, src)
s.start()
for(var/mob/M in viewers(src))
@@ -1160,7 +1160,7 @@
/obj/machinery/power/apc/proc/shock(mob/user, prb)
if(!prob(prb))
return 0
var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, src)
s.start()
if (electrocute_mob(user, src, src))
+1 -1
View File
@@ -193,7 +193,7 @@
if(!prob(prb))
return 0
if (electrocute_mob(user, powernets[src.netnum], src, siemens_coeff))
var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, src)
s.start()
return 1
+3 -3
View File
@@ -222,7 +222,7 @@
else if(status == LIGHT_EMPTY)
user << "You stick \the [W] into the light socket!"
if(has_power() && (W.flags & CONDUCT))
var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, src)
s.start()
//if(!user.mutations & COLD_RESISTANCE)
@@ -282,7 +282,7 @@
else
user << "You try to remove the light [fitting], but you burn your hand on it!"
var/datum/organ/external/affecting = H.organs["[user.hand ? "l" : "r" ]_hand"]
var/datum/organ/external/affecting = H.get_organ("[user.hand ? "l" : "r" ]_arm")
affecting.take_damage( 0, 5 ) // 5 burn damage
@@ -324,7 +324,7 @@
if(status == LIGHT_OK || status == LIGHT_BURNED)
playsound(src.loc, 'Glasshit.ogg', 75, 1)
if(on)
var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, src)
s.start()
status = LIGHT_BROKEN
@@ -55,7 +55,7 @@
del(src)
return 0
if(iscarbon(user))
var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, user.loc)
s.start()
var/shock_damage = min(rand(30,40),rand(30,40))
@@ -72,7 +72,7 @@
user.throw_at(target, 200, 4)
return
else if(issilicon(user))
var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, user.loc)
s.start()
var/shock_damage = rand(15,30)
+1 -1
View File
@@ -90,7 +90,7 @@
A.icon_state = "u_laser"
playsound(src.loc, 'emitter.ogg', 25, 1)
if(prob(35))
var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, src)
s.start()
A.dir = src.dir
+3 -3
View File
@@ -324,7 +324,7 @@
for(var/mob/M in viewers(src))
M.show_message("\red The [src.name] is making strange noises!", 3, "\red You hear sizzling electronics.", 2)
sleep(10*pick(4,5,6,7,10,14))
var/datum/effect/system/harmless_smoke_spread/smoke = new /datum/effect/system/harmless_smoke_spread()
var/datum/effect/effect/system/harmless_smoke_spread/smoke = new /datum/effect/effect/system/harmless_smoke_spread()
smoke.set_up(3, 0, src.loc)
smoke.attach(src)
smoke.start()
@@ -333,7 +333,7 @@
return
if(prob(15)) //Power drain
world << "\red SMES power drain in [src.loc.loc]"
var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, src)
s.start()
if(prob(50))
@@ -342,7 +342,7 @@
emp_act(2)
if(prob(5)) //smoke only
world << "\red SMES smoke in [src.loc.loc]"
var/datum/effect/system/harmless_smoke_spread/smoke = new /datum/effect/system/harmless_smoke_spread()
var/datum/effect/effect/system/harmless_smoke_spread/smoke = new /datum/effect/effect/system/harmless_smoke_spread()
smoke.set_up(3, 0, src.loc)
smoke.attach(src)
smoke.start()
+1 -1
View File
@@ -44,7 +44,7 @@
if(istype(user, /mob/living))
var/mob/living/M = user
if ((M.mutations & CLOWN) && prob(50))
if ((M.mutations & CLUMSY) && prob(50))
M << "\red The [src.name] blows up in your face."
M.take_organ_damage(0,20)
M.drop_item()
+1 -1
View File
@@ -8,7 +8,7 @@
obj/item/weapon/cell/power_supply //What type of power cell this uses
charge_cost = 100 //How much energy is needed to fire.
cell_type = "/obj/item/weapon/cell"
projectile_type = "/obj/item/projectile"
projectile_type = "/obj/item/projectile/energy"
emp_act(severity)
power_supply.use(round(power_supply.maxcharge / severity))
@@ -6,6 +6,7 @@
charge_cost = 100 //How much energy is needed to fire.
projectile_type = "/obj/item/projectile/energy/electrode"
origin_tech = "combat=3;magnets=2"
var
mode = 0 //0 = stun, 1 = kill
+3 -3
View File
@@ -5,7 +5,7 @@
icon_state = "taser"
fire_sound = 'Taser.ogg'
charge_cost = 100
projectile_type = "/obj/item/projectile/electrode"
projectile_type = "/obj/item/projectile/energy/electrode"
cell_type = "/obj/item/weapon/cell/crap"
@@ -30,7 +30,7 @@
fire_sound = 'Gunshot.ogg'
origin_tech = "combat=3;materials=3;powerstorage=2"
charge_cost = 125
projectile_type = "/obj/item/projectile/electrode"
projectile_type = "/obj/item/projectile/energy/electrode"
cell_type = "/obj/item/weapon/cell"
@@ -80,6 +80,6 @@
w_class = 4.0
force = 10
m_amt = 200000
projectile_type = "/obj/item/projectile/largebolt"
projectile_type = "/obj/item/projectile/energy/bolt/large"
@@ -1,16 +1,15 @@
/obj/item/projectile/energy
name = "energy"
icon_state = "spark"
damage = 0
damage_type = BURN
nodamage = 1
flag = "energy"
/obj/item/projectile/energy/electrode
name = "electrode"
icon_state = "spark"
nodamage = 1
stun = 10
weaken = 10
stutter = 10
@@ -19,6 +18,7 @@
/obj/item/projectile/energy/declone
name = "declown"
icon_state = "declone"
nodamage = 1
damage_type = CLONE
irradiate = 40
+1 -1
View File
@@ -40,7 +40,7 @@
return 0
if(!prob(prb))
return 0
var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, src)
s.start()
if (electrocute_mob(user, get_area(src), src, 0.7))