Alpha
Summary (a quick, 2-3 sentence summary):
The Napalm chemical formula makes no sense; why is plasma/phoron a component? Aluminum only makes an iota of sense as a reference to aluminum salts in very old napalm compositions.
New chemistry recipes have been added that enable napalm, fuel and plastics manufacturing.
Also it would be preferable if we could use napalm as the basis/universal fuel of all incendiary weapons, including the flamethrower, rather than phoron.
Benefits (How this will benefit the server and game as a whole):
Improved realism. Easier incendiary manufacture that doesn't rely on a precious and extremely limited commodity (phoron), particularly as there is no mining department. Gives chemistry a way to manufacture plastics and replenish fuel and napalm stores.
Details (Description of how you think this would work, the benefits, etc):
Modern napalm is essentially an oil derivative and mixture of hydrocarbons (benzene, gasoline, polystyrene; basically a fuck ton of C and H with the occasional O per certain gasoline compositions). Also it probably should not ignite immediately on mixing; napalm is actually quite stable and requires an igniter.
So, new recipes:
Oil: C + H (Imidazoline synthesis takes priority when Dylovene is present)
Plasticide: Oil + N + S (Already exists as a chem; now it can be synthesized)
Welding Fuel: Oil + O + Ethanol (Already exists as a chem; now it can be synthesized)
Napalm: Welding Fuel + Plasticide; now needs to be heated in order to ignite (such as via an igniting device or high ambient temperatures) instead of autoigniting when synthesized.
Napalm in grenades: Ignites an area upon detonation as though it were subject to the flamethrower. Mobs in the area accumulate several burn stacks and are also ignited. Size of the area depends on the amount of napalm in the grenade.
Oil and welder fuel act in a similar way but burn for a shorter duration and apply fewer burn stacks to mobs caught in the blast.
Implementation (Optional, if you have an idea how to implement it):
Chemistry-Recipes.dm:
Code: Select all
oil
name = "Oil"
id = "oil"
result = "oil"
required_reagents = list("carbon" = 1, "hydrogen" = 1)
result_amount = 2
fuel
name = "Welding fuel"
id = "fuel"
result = "fuel"
required_reagents = list("oil" = 1, "oxygen" = 1, "ethanol" = 1)
result_amount = 3
plasticide
name = "Plasticide"
id = "plasticide"
result = "plasticide"
required_reagents = list("oil" = 1, "nitrogen" = 1, "sulfur" = 1)
result_amount = 3
napalm
name = "Napalm"
id = "napalm"
result = "napalm"
required_reagents = list("fuel" = 1, "plasticide" = 1)
result_amount = 2
Chemistry-Reagents.dm:
Code: Select all
oil
name = "Oil"
id = "oil"
description = "Black gold; the classic hydrocarbon. Flammable."
reagent_state = LIQUID
color = "#660000" // rgb: 102, 0, 0
overdose = REAGENTS_OVERDOSE
glass_icon_state = "dr_gibb_glass"
glass_name = "glass of oil"
glass_desc = "Unless you are chemical synthesizer or machine, this is probably not safe for consumption."
reaction_obj(var/obj/O, var/volume)
var/turf/T = get_turf(O)
if(!T)
return //No sense trying to start a fire if you don't have a turf to set on fire. --NEO
new /obj/effect/decal/cleanable/liquid_fuel(T, volume)
if(ignite)
spawn (0) T.hotspot_expose(700, 400)
reaction_turf(var/turf/T, var/volume)
new /obj/effect/decal/cleanable/liquid_fuel(T, volume)
if(ignite)
spawn (0) T.hotspot_expose(700, 400)
return
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.adjustToxLoss(1)
..()
return
reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with welding fuel to make them easy to ignite!
if(!istype(M, /mob/living))
return
if(method == TOUCH)
M.adjust_fire_stacks(volume / 12) //Not as flammable as welding fuel
if(ignite)
M.IgniteMob()
return
fuel
name = "Welding fuel"
id = "fuel"
description = "Required for welders. Flamable."
reagent_state = LIQUID
color = "#660000" // rgb: 102, 0, 0
overdose = REAGENTS_OVERDOSE
glass_icon_state = "dr_gibb_glass"
glass_name = "glass of welder fuel"
glass_desc = "Unless you are an industrial tool, this is probably not safe for consumption."
reaction_obj(var/obj/O, var/volume)
var/turf/T = get_turf(O)
if(!T)
return //No sense trying to start a fire if you don't have a turf to set on fire. --NEO
new /obj/effect/decal/cleanable/liquid_fuel(T, volume)
if(ignite)
spawn (0) T.hotspot_expose(700, 400)
reaction_turf(var/turf/T, var/volume)
new /obj/effect/decal/cleanable/liquid_fuel(T, volume)
if(ignite)
spawn (0) T.hotspot_expose(700, 400)
return
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.adjustToxLoss(1)
..()
return
reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with welding fuel to make them easy to ignite!
if(!istype(M, /mob/living))
return
if(method == TOUCH)
M.adjust_fire_stacks(volume / 10)
if(ignite)
M.IgniteMob()
return
napalm
name = "Napalm"
id = "napalm"
description = "Jellied napalm; weaponized hydrocarbon. Highly flammable."
reagent_state = LIQUID
color = "#660000" // rgb: 102, 0, 0
overdose = REAGENTS_OVERDOSE
glass_icon_state = "dr_gibb_glass"
glass_name = "glass of napalm"
glass_desc = "Unless you are an incendiary device, this is probably not safe for consumption."
reaction_obj(var/obj/O, var/volume)
var/turf/T = get_turf(O)
if(!T)
return //No sense trying to start a fire if you don't have a turf to set on fire. --NEO
new /obj/effect/decal/cleanable/liquid_fuel(T, volume)
if(ignite)
//world << "reaction_obj: [id] ignited."//Debug notice
spawn (0) T.hotspot_expose(700, 400)
reaction_turf(var/turf/T, var/volume)
new /obj/effect/decal/cleanable/liquid_fuel(T, volume)
if(ignite)
//world << "reaction_turf: [id] ignited."//Debug notice
spawn (0) T.hotspot_expose(700, 400)
return
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.adjustToxLoss(1)
..()
return
reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with welding fuel to make them easy to ignite!
if(!istype(M, /mob/living))
return
if(method == TOUCH)
M.adjust_fire_stacks(volume / 4) //Insanely flammable
//world << "reaction_mob: Fire stacks: [M.fire_stacks]." //Debug notice
if(ignite)
//world << "reaction_mob: [id] ignited." //Debug notice
M.IgniteMob()
return
Code: Select all
reaction(var/atom/A, var/method=TOUCH, var/volume_modifier=0, var/ignite=0)
switch(method)
if(TOUCH)
for(var/datum/reagent/R in reagent_list)
if(ignite)
R.ignite = 1
//world << "reaction: [R.id] Ignite Status: [R.ignite]" //Debug notification
if(ismob(A))
spawn(0)
if(!R) return
else R.reaction_mob(A, TOUCH, R.volume+volume_modifier)
if(isturf(A))
spawn(0)
if(!R) return
else R.reaction_turf(A, R.volume+volume_modifier)
if(isobj(A))
spawn(0)
if(!R) return
else R.reaction_obj(A, R.volume+volume_modifier)
if(INGEST)
for(var/datum/reagent/R in reagent_list)
if(ismob(A) && R)
spawn(0)
if(!R) return
else R.reaction_mob(A, INGEST, R.volume+volume_modifier)
if(isturf(A) && R)
spawn(0)
if(!R) return
else R.reaction_turf(A, R.volume+volume_modifier)
if(isobj(A) && R)
spawn(0)
if(!R) return
else R.reaction_obj(A, R.volume+volume_modifier)
return