mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-24 12:37:50 +01:00
Merge pull request #1274 from Erthilo/master
Randomises blob weakness/strengths + removal of customs by request + changelog!
This commit is contained in:
@@ -1,3 +1,6 @@
|
||||
/obj/effect/decal
|
||||
pass_flags = PASSBLOB
|
||||
|
||||
/obj/effect/decal/ash
|
||||
name = "ashes"
|
||||
desc = "Ashes to ashes, dust to dust, and into space."
|
||||
|
||||
@@ -11,10 +11,14 @@
|
||||
anchored = 1
|
||||
var/active = 1
|
||||
var/health = 30
|
||||
var/brute_resist = 4
|
||||
var/fire_resist = 1
|
||||
var/maxhealth = 60
|
||||
var/brute_resist = 3
|
||||
var/fire_resist = 3
|
||||
var/blobtype = "Blob"
|
||||
var/blobdebug = 0
|
||||
var/list/blob_attributes = list("fire","brute","cold","elec","acid")
|
||||
var/weakness = null //What works best
|
||||
var/strength = null //What doesn't/heals them
|
||||
/*Types
|
||||
var/Blob
|
||||
var/Node
|
||||
@@ -26,9 +30,16 @@
|
||||
var/steps_since_action = 1
|
||||
|
||||
|
||||
New(loc, var/h = 30)
|
||||
New(loc, var/h = 30, var/w = "fire", var/s = "brute")
|
||||
blobs += src
|
||||
src.health = h
|
||||
src.weakness = w
|
||||
src.strength = s
|
||||
if(w)
|
||||
if(w == "fire")
|
||||
src.fire_resist = 1
|
||||
if(w == "brute")
|
||||
src.brute_resist = 1
|
||||
src.dir = pick(1,2,4,8)
|
||||
src.update()
|
||||
..(loc)
|
||||
@@ -77,6 +88,16 @@
|
||||
blobtype = "Core"
|
||||
blob_cores += src
|
||||
processing_objects.Add(src)
|
||||
var/list/a = blob_attributes
|
||||
weakness = pick(a)
|
||||
a -= weakness
|
||||
strength = pick(a)
|
||||
var/w = src.weakness
|
||||
if(w)
|
||||
if(w == "fire")
|
||||
src.fire_resist = 1
|
||||
if(w == "brute")
|
||||
src.brute_resist = 1
|
||||
return 1
|
||||
//Nodeblob
|
||||
if((blobdebug == 2))
|
||||
@@ -132,7 +153,7 @@
|
||||
var/turf/T = get_step(src, dirn)
|
||||
var/obj/effect/blob/B = (locate(/obj/effect/blob) in T)
|
||||
if(!B)
|
||||
expand(T)//No blob here so try and expand
|
||||
expand(T, src.weakness, src.strength)//No blob here so try and expand
|
||||
return
|
||||
B.Pulse((pulse+1),get_dir(src.loc,T))
|
||||
return
|
||||
@@ -182,10 +203,29 @@
|
||||
|
||||
temperature_expose(datum/gas_mixture/air, temperature, volume)
|
||||
if(temperature > T0C+200)
|
||||
health -= 0.01 * temperature
|
||||
if(weakness == "fire")
|
||||
health -= 0.01 * temperature
|
||||
if(strength == "fire")
|
||||
health += 0.01 * temperature
|
||||
else
|
||||
health -= 0.005 * temperature
|
||||
update()
|
||||
if(temperature < T0C+20) //Because cold is rather hard to change, it happens at a relatively high temperature
|
||||
if(weakness == "cold")
|
||||
if(temperature >= T0C)
|
||||
health -= 0.1 * (20-temperature)
|
||||
else
|
||||
health -= 0.1 * abs(temperature)
|
||||
update()
|
||||
if(strength == "cold") //Don't want blobs on space to be too hard to kill
|
||||
if(temperature >= T0C)
|
||||
health += 0.01 * (20-temperature)
|
||||
else
|
||||
health += 0.01 * abs(temperature)
|
||||
update()
|
||||
|
||||
proc/expand(var/turf/T = null)
|
||||
|
||||
proc/expand(var/turf/T = null, var/weakness, var/strength)
|
||||
if(!prob(health)) return//TODO: Change this to prob(health + o2 mols or such)
|
||||
if(!T)
|
||||
var/list/dirs = list(1,2,4,8)
|
||||
@@ -198,7 +238,7 @@
|
||||
continue
|
||||
else break
|
||||
if(T)
|
||||
var/obj/effect/blob/B = new /obj/effect/blob(src.loc, min(src.health, 30))
|
||||
var/obj/effect/blob/B = new /obj/effect/blob(src.loc, min(src.health, 30), weakness, strength)
|
||||
if(T.Enter(B,src))
|
||||
B.loc = T
|
||||
else
|
||||
@@ -221,6 +261,8 @@
|
||||
|
||||
|
||||
proc/update()//Needs to be updated with the types
|
||||
if(health > maxhealth)
|
||||
health = maxhealth
|
||||
if(health <= 0)
|
||||
playsound(src.loc, 'splat.ogg', 50, 1)
|
||||
del(src)
|
||||
@@ -236,8 +278,33 @@
|
||||
|
||||
bullet_act(var/obj/item/projectile/Proj)
|
||||
if(!Proj) return
|
||||
src.health -= Proj.damage
|
||||
update()
|
||||
var/damage = 0
|
||||
if(istype(Proj, /obj/item/projectile/energy/electrode))
|
||||
damage = Proj.damage
|
||||
if(src.weakness == "elec")
|
||||
damage += 20
|
||||
src.visible_message("\red \The [src] disintegrates slightly from \the [Proj]!")
|
||||
if(src.strength == "elec")
|
||||
damage -= 10
|
||||
src.visible_message("\red \The [src] absorbs \the [Proj]!")
|
||||
else if(istype(Proj, /obj/item/projectile/beam))
|
||||
damage = Proj.damage
|
||||
if(src.weakness == "fire")
|
||||
damage = damage*2
|
||||
if(src.strength == "fire")
|
||||
damage = -(damage*0.5)
|
||||
src.visible_message("\red \The [src] absorbs \the [Proj]!")
|
||||
else if(istype(Proj, /obj/item/projectile/bullet))
|
||||
damage = Proj.damage
|
||||
if(src.weakness == "brute")
|
||||
damage = damage*2
|
||||
if(src.strength == "brute")
|
||||
damage = damage*0.5
|
||||
src.visible_message("\red \The [src] absorbs \the [Proj]!")
|
||||
else
|
||||
damage = Proj.damage
|
||||
src.health -= damage
|
||||
src.update()
|
||||
return 0
|
||||
|
||||
|
||||
@@ -248,11 +315,35 @@
|
||||
switch(W.damtype)
|
||||
if("fire")
|
||||
damage = (W.force / max(src.fire_resist,1))
|
||||
if(src.weakness == "fire")
|
||||
damage = damage*1.25
|
||||
if(src.strength == "fire")
|
||||
damage = -(damage*0.5)
|
||||
src.visible_message("\red <B>The [src.name] rebuilds itself from the heat!")
|
||||
if(istype(W, /obj/item/weapon/weldingtool))
|
||||
playsound(src.loc, 'Welder.ogg', 100, 1)
|
||||
if("brute")
|
||||
damage = (W.force / max(src.brute_resist,1))
|
||||
|
||||
if(istype(W, /obj/item/weapon/melee/baton))
|
||||
var/obj/item/weapon/melee/baton/T = W
|
||||
if(T.status == 1 && T.charges > 0) //Copied over from stun baton code
|
||||
playsound(src.loc, 'Egloves.ogg', 50, 1, -1)
|
||||
if(isrobot(user))
|
||||
var/mob/living/silicon/robot/R = user
|
||||
R.cell.charge -= 20
|
||||
else
|
||||
T.charges--
|
||||
if(src.weakness == "elec")
|
||||
damage = damage*2
|
||||
src.visible_message("\red <B>The [src.name] disintegrates from the electricity!")
|
||||
if(src.strength == "elec")
|
||||
damage = -(damage*0.5)
|
||||
src.visible_message("\red <B>The [src.name] absorbs the electricity!")
|
||||
if(src.weakness == "brute")
|
||||
damage = damage*1.25
|
||||
if(src.strength == "brute")
|
||||
damage = damage*0.5
|
||||
src.visible_message("\red <B>The [src.name] rebounds the hit!")
|
||||
src.health -= damage
|
||||
src.update()
|
||||
return
|
||||
@@ -278,8 +369,10 @@
|
||||
icon_state = "blobidle0"
|
||||
|
||||
|
||||
New(loc, var/h = 10)
|
||||
New(loc, var/h = 10, var/w = "fire", var/s = "brute")
|
||||
src.health = h
|
||||
src.weakness = w
|
||||
src.strength = s
|
||||
src.dir = pick(1,2,4,8)
|
||||
src.update_idle()
|
||||
|
||||
@@ -298,7 +391,7 @@
|
||||
|
||||
|
||||
Del() //idle blob that spawns a normal blob when killed.
|
||||
var/obj/effect/blob/B = new /obj/effect/blob( src.loc )
|
||||
var/obj/effect/blob/B = new /obj/effect/blob(src.loc, src.weakness, src.strength)
|
||||
spawn(30)
|
||||
B.Life()
|
||||
..()
|
||||
@@ -310,6 +403,17 @@
|
||||
spawn()
|
||||
src.blobdebug = 1
|
||||
src.Life()
|
||||
var/list/a = blob_attributes
|
||||
weakness = pick(a)
|
||||
a -= weakness
|
||||
strength = pick(a)
|
||||
var/w = src.weakness
|
||||
if(w)
|
||||
if(w == "fire")
|
||||
src.fire_resist = 1
|
||||
if(w == "brute")
|
||||
src.brute_resist = 1
|
||||
|
||||
|
||||
/obj/effect/blob/node/New()
|
||||
..()
|
||||
|
||||
@@ -393,6 +393,7 @@ steam.start() -- spawns the effect
|
||||
opacity = 1
|
||||
anchored = 0.0
|
||||
mouse_opacity = 0
|
||||
pass_flags = PASSBLOB
|
||||
var/amount = 6.0
|
||||
var/divisor = 1
|
||||
|
||||
|
||||
@@ -734,6 +734,20 @@ datum
|
||||
M.take_organ_damage(min(15, volume * 2))
|
||||
|
||||
reaction_obj(var/obj/O, var/volume)
|
||||
if(istype(O, /obj/effect/blob))
|
||||
var/obj/effect/blob/B = O
|
||||
if(B.weakness == "acid")
|
||||
B.health -= rand(volume*2,volume*3)
|
||||
B.update()
|
||||
O.visible_message("\red \The [O] sizzles violently!")
|
||||
else if(B.strength == "acid")
|
||||
B.health += rand(volume*0.5,volume*1)
|
||||
B.update()
|
||||
O.visible_message("\red <B>\The [O] strengthens!</B>")
|
||||
else
|
||||
B.health -= rand(volume*1,volume*1.5)
|
||||
O.visible_message("\red \The [O] dissolves slightly.")
|
||||
B.update()
|
||||
if((istype(O,/obj/item) || istype(O,/obj/effect/glowshroom)) && prob(10))
|
||||
if(!O.unacidable)
|
||||
var/obj/effect/decal/cleanable/molten_item/I = new/obj/effect/decal/cleanable/molten_item(O.loc)
|
||||
@@ -801,6 +815,20 @@ datum
|
||||
M.take_organ_damage(min(15, volume * 4))
|
||||
|
||||
reaction_obj(var/obj/O, var/volume)
|
||||
if(istype(O, /obj/effect/blob))
|
||||
var/obj/effect/blob/B = O
|
||||
if(B.weakness == "acid")
|
||||
B.health -= rand(volume*5,volume*6)
|
||||
B.update()
|
||||
O.visible_message("\red \The [O] sizzles violently!")
|
||||
if(B.strength == "acid")
|
||||
B.health += rand(volume*2,volume*3)
|
||||
B.update()
|
||||
O.visible_message("\red <B>\The [O] strengthens!</B>")
|
||||
else
|
||||
B.health -= rand(volume*2,volume*2.5)
|
||||
O.visible_message("\red \The [O] dissolves slightly.")
|
||||
B.update()
|
||||
if((istype(O,/obj/item) || istype(O,/obj/effect/glowshroom)))
|
||||
if(!O.unacidable)
|
||||
var/obj/effect/decal/cleanable/molten_item/I = new/obj/effect/decal/cleanable/molten_item(O.loc)
|
||||
|
||||
@@ -167,13 +167,15 @@
|
||||
icon_state = "serithi_artalis_1"
|
||||
|
||||
//////////// Hats ////////////
|
||||
|
||||
//Removed by request
|
||||
/*
|
||||
/obj/item/clothing/head/helmet/hardhat/fluff/greg_anderson_1 //deusdactyl: Greg Anderson
|
||||
name = "old hard hat"
|
||||
desc = "An old dented hard hat with the nametag \"Anderson\". It seems to be backwards."
|
||||
icon_state = "hardhat0_dblue" //Already an in-game sprite
|
||||
item_state = "hardhat0_dblue"
|
||||
color = "dblue"
|
||||
*/
|
||||
|
||||
/obj/item/clothing/head/secsoft/fluff/swatcap //deusdactyl: James Girard
|
||||
name = "\improper SWAT hat"
|
||||
@@ -287,7 +289,8 @@
|
||||
//////////// Sets ////////////
|
||||
|
||||
////// CDC //deusdactyl: Roger Wiles
|
||||
|
||||
//Removed by request.
|
||||
/*
|
||||
/obj/item/clothing/under/rank/virologist/fluff/cdc_jumpsuit
|
||||
name = "\improper CDC jumpsuit"
|
||||
desc = "A modified standard-issue CDC jumpsuit made of a special fiber that gives special protection against biohazards. It has a biohazard symbol sewn into the back."
|
||||
@@ -300,7 +303,7 @@
|
||||
desc = "A standard-issue CDC labcoat that protects against minor chemical spills. It has the name \"Wiles\" sewn on to the breast pocket."
|
||||
icon = 'custom_items.dmi'
|
||||
icon_state = "labcoat_cdc_open"
|
||||
|
||||
*/
|
||||
////// Short Sleeve Medical Outfit //erthilo: Farah Lants
|
||||
|
||||
/obj/item/clothing/under/rank/medical/fluff/short
|
||||
|
||||
@@ -6,8 +6,6 @@ chinsky: Summer Springfield: /obj/item/weapon/camera_test/fluff/orange
|
||||
compactninja: Ysyr Rylias: /obj/item/weapon/reagent_containers/food/drinks/dry_ramen, /obj/item/weapon/reagent_containers/food/drinks/dry_ramen, /obj/item/weapon/reagent_containers/food/drinks/dry_ramen, /obj/item/weapon/reagent_containers/food/drinks/dry_ramen
|
||||
desiderium: Momiji Inubashiri: /obj/item/clothing/under/fluff/olddressuniform
|
||||
desiderium: Rook Maudlin: /obj/item/clothing/suit/storage/det_suit/fluff/retpolcoat, /obj/item/clothing/head/det_hat/fluff/retpolcap, /obj/item/clothing/under/det/fluff/retpoluniform
|
||||
deusdactyl: Greg Anderson: /obj/item/clothing/head/helmet/hardhat/fluff/greg_anderson_1
|
||||
deusdactyl: Roger Wiles: /obj/item/clothing/under/rank/virologist/fluff/cdc_jumpsuit, /obj/item/clothing/suit/storage/labcoat/fluff/cdc_labcoat
|
||||
deusdactyl: James Girard: /obj/item/clothing/head/secsoft/fluff/swatcap
|
||||
eternal248: Maximilian Haynes: /obj/item/weapon/paper/certificate
|
||||
fastler: Fastler Greay: /obj/item/weapon/card/id/fluff/lifetime
|
||||
|
||||
+10
-1
@@ -41,7 +41,7 @@ Header Section
|
||||
<tr>
|
||||
<td valign='top'>
|
||||
<font size='2'><b>Code:</b> Abi79, Aryn, Cael_Aislinn, Chinsky, cib, CompactNinja, DopeGhoti, Erthilo, Hawk_v3, Head, Ispil, Lexusjjss, Melonstorm, Miniature, Mloc, SkyMarshal, Spectre, Strumpetplaya, Sunfall, Tastyfish, Uristqwerty<br></font>
|
||||
<font size='2'><b>Sprites:</b> Apple_Master, Arcalane, Chinsky, CompactNinja, Deus Dactyl, Erthilo, Flashkirby, Miniature, Xenone<br></font>
|
||||
<font size='2'><b>Sprites:</b> Apple_Master, Arcalane, Chinsky, CompactNinja, Deus Dactyl, Erthilo, Flashkirby, Miniature, Searif, Xenone<br></font>
|
||||
<font size='2'><b>Sounds:</b> Aryn<br></font>
|
||||
<font size='2'><b>Thanks To:</b> /tg/ station, Goonstation, Animus Station, Daedalus, and original Spacestation 13 devs. Skibiliano for the IRC bot.</font>
|
||||
</td>
|
||||
@@ -57,6 +57,15 @@ Stuff which is in development and not yet visible to players or just code relate
|
||||
should be listed in the changelog upon commit though. Thanks. -->
|
||||
|
||||
<!-- To take advantage of the pretty new format (well it was new when I wrote this anyway), open the "add-to-changelog.html" file in any browser and add the stuff and then generate the html code and paste it here -->
|
||||
<div class="commit sansserif">
|
||||
<h2 class="date">09 June 2012</h2>
|
||||
<h3 class="author">Erthilo updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Blobs have evolved! Their weaknesses/strengths are now randomised. Experimentation ahoy!</li>
|
||||
<li class="bugfix">Meteors have been fixed, and will therefore appear again. Meteor mode works too.</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="commit sansserif">
|
||||
<h2 class="date">07 June 2012</h2>
|
||||
<h3 class="author">SkyMarshal updated:</h3>
|
||||
|
||||
Reference in New Issue
Block a user