|
1335 | 1335 | ..() |
1336 | 1336 | . = 1 |
1337 | 1337 |
|
| 1338 | +/datum/reagent/medicine/burnmix |
| 1339 | + name = "BurnMix" |
| 1340 | + description = "Take in moderation. Heals damage at a snail's pace. Effects increase when used with Epinephrine or Perfluorodecalin. You don't want this in your body for longer than needed." |
| 1341 | + reagent_state = LIQUID |
| 1342 | + color = "#BD328A" // R 189 G 50 B 138 , Medium Red Violet , Hue of Violet |
| 1343 | + overdose_threshold = 12 |
| 1344 | + taste_description = "dixel" |
| 1345 | + glass_name = "glass of ...red?" |
| 1346 | + glass_desc = "Looks like some chunky dark red mix." |
| 1347 | + reagent_weight = 4 |
| 1348 | + addiction_threshold = 40 |
| 1349 | + // Max healing non OD with best rolls + buffs: 0.2 + 0.15 + 0.2 = 0.55 |
| 1350 | + // Max healing with OD + best rolls and all buffs: 0.4 + 0.35 + 0.4 = 1.15 |
| 1351 | + |
| 1352 | +/datum/reagent/medicine/burnmix/on_mob_life(mob/living/carbon/M) |
| 1353 | + var/heal_roll = pick(-0.1,-0.2) // Base heal, Non OD |
| 1354 | + var/slur = 10 // Slur 10 sets up for future slur gains as real effects seem to start at 30 |
| 1355 | + var/jitter = 0 |
| 1356 | + if(M.health <= M.crit_threshold) |
| 1357 | + heal_roll = 0 // Burnmix will not heal anyone inside of crit without epipen or morhpine |
| 1358 | + if(prob(10)) |
| 1359 | + heal_roll = 0 // Burnmix has a chance not to basic heal at all |
| 1360 | + if(holder.has_reagent(/datum/reagent/medicine/epinephrine)) // start IF has Epinephrine in body |
| 1361 | + jitter = jitter + 5 |
| 1362 | + slur = slur + 25 |
| 1363 | + heal_roll = heal_roll - 0.15 |
| 1364 | + if(prob(15)) |
| 1365 | + M.losebreath++ |
| 1366 | + if(prob(80)) |
| 1367 | + M.adjustStaminaLoss(1.25*REM, 0) // end IF has Epinephrine in body |
| 1368 | + |
| 1369 | + if(holder.has_reagent(/datum/reagent/medicine/perfluorodecalin)) // start IF has Perfluorodecalin in body |
| 1370 | + jitter = jitter + 5 |
| 1371 | + slur = slur + 25 |
| 1372 | + M.drowsyness += 0.5 |
| 1373 | + heal_roll = heal_roll - 0.2 // start IF has Perfluorodecalin in body |
| 1374 | + |
| 1375 | + if(prob(10)) // Start of base probability effects |
| 1376 | + var/tox_roll = pick(1,-1) // Rolls for damage or healing |
| 1377 | + if(tox_roll == 1) |
| 1378 | + M.emote("moan") |
| 1379 | + if(tox_roll == -1) |
| 1380 | + M.emote("twitch") |
| 1381 | + if(prob(90)) |
| 1382 | + M.adjustToxLoss(tox_roll*REM, 0) |
| 1383 | + M.Jitter(jitter) |
| 1384 | + if(prob(1)) // Last set of non OD probability effects |
| 1385 | + M.Dizzy(jitter) |
| 1386 | + M.slurring = slur // End of base probability effects |
| 1387 | + if(heal_roll < 0) // Healing payload after calculations |
| 1388 | + if (M.stat == DEAD) // Non OD , if dead , 30% chance to discard healing payload |
| 1389 | + if(prob(70)) |
| 1390 | + M.adjustFireLoss(heal_roll*REM, FALSE, FALSE, BODYPART_ORGANIC) |
| 1391 | + M.adjustBruteLoss(heal_roll*REM, 0) |
| 1392 | + else |
| 1393 | + M.adjustFireLoss(heal_roll*REM, 0) |
| 1394 | + M.adjustBruteLoss(heal_roll*REM, 0) |
| 1395 | + ..() |
| 1396 | + . = 1 |
| 1397 | + |
| 1398 | +/datum/reagent/drug/burnmix/overdose_start(mob/living/M) |
| 1399 | + to_chat(M, "<span class='userdanger'>You feel the BurnMix increase in potency.</span>") |
| 1400 | + |
| 1401 | + |
| 1402 | +/datum/reagent/medicine/burnmix/overdose_process(mob/living/M) |
| 1403 | + var/heal_roll = pick(-0.2,-0.4) |
| 1404 | + var/slur = 20 |
| 1405 | + var/jitter = 2 |
| 1406 | + if(M.health <= M.crit_threshold) |
| 1407 | + heal_roll = heal_roll + 0.2 // Burnmix in overdose will heal inside of crit without epipen or perfluorodecalin. Being in crit means a roll for either no base healing or half reduction to base heal. |
| 1408 | + if(heal_roll > 0 && prob(10)) |
| 1409 | + heal_roll = 0 // Burnmix has a chance not to basic heal at all |
| 1410 | + if(holder.has_reagent(/datum/reagent/medicine/epinephrine)) |
| 1411 | + heal_roll = heal_roll - 0.35 |
| 1412 | + jitter = jitter + 15 |
| 1413 | + slur = slur + 25 |
| 1414 | + if(prob(25)) |
| 1415 | + M.losebreath++ |
| 1416 | + M.adjustStaminaLoss(2.5*REM, 0) |
| 1417 | + if(prob(80)) |
| 1418 | + M.adjustToxLoss(0.5*REM, 0) |
| 1419 | + M.adjustToxLoss(pick(0,-0.25), 0) // gives a chance to negate half epinephrine tox damage |
| 1420 | + |
| 1421 | + if(holder.has_reagent(/datum/reagent/medicine/perfluorodecalin)) |
| 1422 | + heal_roll = heal_roll - 0.4 |
| 1423 | + jitter = jitter + 15 |
| 1424 | + slur = slur + 25 |
| 1425 | + if(prob(25)) |
| 1426 | + M.adjustToxLoss(0.5*REM, 0) |
| 1427 | + M.adjustToxLoss(pick(0,-0.25), 0) // gives a chance to negate half perfluorodecalin tox damage |
| 1428 | + |
| 1429 | + if(holder.has_reagent(holder.has_reagent(/datum/reagent/medicine/epinephrine) && /datum/reagent/medicine/perfluorodecalin)) // start IF both drugs present |
| 1430 | + if(prob(0.5)) // Should be 1 in 200 chance of a 1 in 3 chance to roll for faint if both epinephrine and perfluorodecalin are present |
| 1431 | + M.emote((pick("scream","faint","gasp"))) |
| 1432 | + if(prob(60)) // Original edit did too much brain damage. Moved to both drug effects. Was default OD effect |
| 1433 | + M.adjustOrganLoss(ORGAN_SLOT_BRAIN,pick(1,-1)) |
| 1434 | + if(prob(30)) |
| 1435 | + slur = slur + 25 |
| 1436 | + if(prob(30)) |
| 1437 | + jitter = 50 |
| 1438 | + if(prob(30)) |
| 1439 | + M.drowsyness += 0.5 |
| 1440 | + if(prob(2)) |
| 1441 | + to_chat(M, "<span class ='notice'>Your fingers spasm!</span>") |
| 1442 | + M.drop_all_held_items() // end IF both drugs present |
| 1443 | + |
| 1444 | + if(prob(40)) // start last set of OD probability effects |
| 1445 | + M.emote(pick("twitch","drool","moan","giggle","spin")) |
| 1446 | + if(prob(60)) |
| 1447 | + M.adjustOrganLoss(ORGAN_SLOT_BRAIN, pick(0,1,2,2.5,-1,-2)) |
| 1448 | + if(prob(15)) |
| 1449 | + M.set_drugginess(pick(2,4,6)) |
| 1450 | + M.Jitter(jitter) |
| 1451 | + if(prob(40)) |
| 1452 | + M.adjustToxLoss(pick(1,-1)*REM, 0) |
| 1453 | + if(prob(1)) |
| 1454 | + M.Dizzy(jitter) // end last set of OD probability effects |
| 1455 | + M.Jitter(jitter) // OD slur and jitter after calculations |
| 1456 | + M.slurring = slur |
| 1457 | + if(heal_roll < 0) // OD Healing payload after calculations |
| 1458 | + M.adjustFireLoss(heal_roll*REM, FALSE, FALSE, BODYPART_ORGANIC) |
| 1459 | + M.adjustBruteLoss(heal_roll*REM, 0) |
| 1460 | + ..() |
| 1461 | + . = 1 |
| 1462 | + |
| 1463 | +/datum/reagent/medicine/burnmix/reaction_mob(mob/living/M, method=TOUCH, reac_volume,show_message = 1) |
| 1464 | + if(iscarbon(M)) |
| 1465 | + if (M.stat == DEAD) // If the mob is dead and you apply it via touch. You get to play an RNG healing game. |
| 1466 | + if(method in list(PATCH, TOUCH)) |
| 1467 | + var/RNG_ROLL = pick(-0.5,-0.25,-0.1,0,0.2) |
| 1468 | + var/RNG_TEXT = "no effect" |
| 1469 | + if(RNG_ROLL == -0.5) |
| 1470 | + RNG_TEXT = "had a great effect" |
| 1471 | + if(RNG_ROLL == -0.25) |
| 1472 | + RNG_TEXT = "had a good effect" |
| 1473 | + if(RNG_ROLL == -0.1) |
| 1474 | + RNG_TEXT = "had a somewhat good effect" |
| 1475 | + if(RNG_ROLL == 0.2) |
| 1476 | + RNG_TEXT = "made things worse!" |
| 1477 | + if(RNG_ROLL != 0) |
| 1478 | + SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "painful_medicine", /datum/mood_event/painful_medicine) |
| 1479 | + M.adjustBruteLoss(RNG_ROLL*reac_volume) |
| 1480 | + M.adjustFireLoss(RNG_ROLL*reac_volume) |
| 1481 | + M.visible_message("<span class='warning'>[M]'s body reacts with the Burnmix. It seemed to have [RNG_TEXT]!</span>") |
| 1482 | + ..() |
| 1483 | + |
| 1484 | + |
1338 | 1485 |
|
1339 | 1486 | #undef PERF_BASE_DAMAGE |
0 commit comments