Files
f00535983e [MDB IGNORE] [IDB IGNORE] atom damage (#5235)
## About The Pull Request

adds generic system for atom health / integrity / damage

everything that isn't flagged with not-bludgeonable can, well, now be
bludgeoned.

## Why It's Good For The Game

more interactive game world through the means of making people able to
break Everything.

## Changelog

🆑
add: atom damage - (almost) everything is now breakable.
refactor: new /atom level materials system
refactor: a lot of the combat system / click code
refactor: melee attack styles
/🆑

---------

Co-authored-by: silicons <no@you.cat>
2023-11-11 17:33:57 -07:00

75 lines
4.4 KiB
Plaintext

//* This file is explicitly licensed under the MIT license. *//
//* Copyright (c) 2023 Citadel Station developers. *//
//? master file for balancing / efficiency tuning
//* Efficiency
/// scale a lathe's efficiency to upgrade level
#define MATERIAL_EFFICIENCY_LATHE_SCALE(tier) max(0, 1.1 - tier * 0.1)
//* Attributes - Resistance
/// used to signify an interpolation, with 'HOW_MUCH' being a linear gradient of how far between it is from B1 to B2
#define MATERIAL_RESISTANCE_BETWEEN(B1, B2, HOW_MUCH) (B1 + (B2 - B1) * HOW_MUCH)
/// the level at which vulnerability is comedically high
#define MATERIAL_RESISTANCE_CATASTROPHICALLY_VULNERABLE -800
#define MATERIAL_RESISTANCE_ABOVE_CATASTROPHICALLY_VULNERABLE(HOW_MUCH) MATERIAL_RESISTANCE_BETWEEN(MATERIAL_RESISTANCE_CATASTROPHICALLY_VULNERABLE, MATERIAL_RESISTANCE_SUPER_VULNERABLE, HOW_MUCH)
/// the level at which vulnerability is very high
#define MATERIAL_RESISTANCE_SUPER_VULNERABLE -400
#define MATERIAL_RESISTANCE_ABOVE_SUPER_VULNERABLE(HOW_MUCH) MATERIAL_RESISTANCE_BETWEEN(MATERIAL_RESISTANCE_SUPER_VULNERABLE, MATERIAL_RESISTANCE_VERY_VULNERABLE, HOW_MUCH)
/// the level at which vulnerability is high
#define MATERIAL_RESISTANCE_VERY_VULNERABLE -200
#define MATERIAL_RESISTANCE_ABOVE_VERY_VULNERABLE(HOW_MUCH) MATERIAL_RESISTANCE_BETWEEN(MATERIAL_RESISTANCE_VERY_VULNERABLE, MATERIAL_RESISTANCE_VULNERABLE, HOW_MUCH)
/// the level at which vulnerability is high
#define MATERIAL_RESISTANCE_VULNERABLE -100
#define MATERIAL_RESISTANCE_ABOVE_VULNERABLE(HOW_MUCH) MATERIAL_RESISTANCE_BETWEEN(MATERIAL_RESISTANCE_VULNERABLE, MATERIAL_RESISTANCE_SOMEWHAT_VULNERABLE, HOW_MUCH)
/// the level at which vulnerability is present
#define MATERIAL_RESISTANCE_SOMEWHAT_VULNERABLE -50
#define MATERIAL_RESISTANCE_ABOVE_SOMEWHAT_VULNERABLE(HOW_MUCH) MATERIAL_RESISTANCE_BETWEEN(MATERIAL_RESISTANCE_SOMEWHAT_VULNERABLE, MATERIAL_RESISTANCE_NEGLIGIBLY_VULNERABLE, HOW_MUCH)
/// the level at which vulnerability is slightly there
#define MATERIAL_RESISTANCE_NEGLIGIBLY_VULNERABLE -25
#define MATERIAL_RESISTANCE_ABOVE_NEGLIGIBLY_VULNERABLE(HOW_MUCH) MATERIAL_RESISTANCE_BETWEEN(MATERIAL_RESISTANCE_NEGLIGIBLY_VULNERABLE, MATERIAL_RESISTANCE_NONE, HOW_MUCH)
/// baseline MATERIAL_RESISTANCE for nothing
#define MATERIAL_RESISTANCE_NONE 0
#define MATERIAL_RESISTANCE_ABOVE_NONE(HOW_MUCH) MATERIAL_RESISTANCE_BETWEEN(MATERIAL_RESISTANCE_NONE, MATERIAL_RESISTANCE_NEGLIGIBLE, HOW_MUCH)
/// the level at which resistance is barely there
#define MATERIAL_RESISTANCE_NEGLIGIBLE 25
#define MATERIAL_RESISTANCE_ABOVE_NEGLIGIBLE(HOW_MUCH) MATERIAL_RESISTANCE_BETWEEN(MATERIAL_RESISTANCE_NEGLIGIBLE, MATERIAL_RESISTANCE_LOW, HOW_MUCH)
/// the level at which resistance is workable
#define MATERIAL_RESISTANCE_LOW 50
#define MATERIAL_RESISTANCE_ABOVE_LOW(HOW_MUCH) MATERIAL_RESISTANCE_BETWEEN(MATERIAL_RESISTANCE_LOW, MATERIAL_RESISTANCE_MODERATE, HOW_MUCH)
/// the level at which resistance is good
#define MATERIAL_RESISTANCE_MODERATE 100
#define MATERIAL_RESISTANCE_ABOVE_MODERATE(HOW_MUCH) MATERIAL_RESISTANCE_BETWEEN(MATERIAL_RESISTANCE_MODERATE, MATERIAL_RESISTANCE_HIGH, HOW_MUCH)
/// the level at which resistance is high
#define MATERIAL_RESISTANCE_HIGH 200
#define MATERIAL_RESISTANCE_ABOVE_HIGH(HOW_MUCH) MATERIAL_RESISTANCE_BETWEEN(MATERIAL_RESISTANCE_HIGH, MATERIAL_RESISTANCE_EXTREME, HOW_MUCH)
/// the level at which resistance is very high
#define MATERIAL_RESISTANCE_EXTREME 400
#define MATERIAL_RESISTANCE_ABOVE_EXTREME(HOW_MUCH) MATERIAL_RESISTANCE_BETWEEN(MATERIAL_RESISTANCE_EXTREME, MATERIAL_RESISTANCE_IMPERMEABLE, HOW_MUCH)
/// the level at which resistance is nearly impermeable
#define MATERIAL_RESISTANCE_IMPERMEABLE 800
#define MATERIAL_RESISTANCE_ABOVE_IMPERMEABLE(HOW_MUCH) MATERIAL_RESISTANCE_BETWEEN(MATERIAL_RESISTANCE_IMPERMEABLE, 1600, HOW_MUCH)
//* Conductvitiy
/// relative_conductivity threshold considered NOCONDUCT
#define MATERIAL_CONDUCTIVITY_NOCONDUCT 0.05
//* Opacity
/// threshold for block
#define MATERIAL_OPACITY_THRESHOLD 0.6
/// opacity to alpha; uses quadratic falloff and a constant because we don't want stuff to just be invisible
#define MATERIAL_OPACITY_TO_ALPHA(opacity) max((255 * (1 - (1 - opacity)**2)), 25)
//* Radioactivity
#define MATERIAL_RADIOACTIVITY_MULTIPLIER_WALL 1.5
#define MATERIAL_RADIOACTIVITY_MULTIPLIER_GIRDER 1
#define MATERIAL_RADIOACTIVITY_MULTIPLIER_NORMAL 1
#define MATERIAL_RADIOACTIVITY_MULTIPLIER_GRILLE 0.33
#define MATERIAL_RADIOACTIVITY_MULTIPLIER_ITEM 0.25
#define MATERIAL_RADIOACTIVITY_MULTIPLIER_SHARD 0.25