Files
Bubberstation/code/datums/components/sect_nullrod_bonus.dm
tralezab bc813ab93d Cleans up + Improves bows, Sorts files, Adds the Divine Archer clothing, weapon, rite (#74811)
## About The Pull Request

### Divine Archer 🏹 


![image](https://user-images.githubusercontent.com/40974010/232647927-aace69ea-bda8-4ec9-9bf1-60140034fbb3.png)

Adds a new chaplain weapon and suit of armor, the divine archer. It's an
orderable set of armor, but provides less armor than the rest, but you
get more pieces of armor (boots, bracer, undersuit).

The divine bow comes with a quiver that holds holy arrows. The holy
arrows come with bane support, dealing critical damage to revenants.

### Bow Features  

- arrows can now be dipped in poison

### Bow Improvements 🔧 

- bows now drop their arrow when you put them on your back while nocking
a bow
- bows give feedback for trying to draw without a nocked arrow
- codewise, bows support subtypes much better. They still have
hard-sprited loaded arrows, but one day that'll change.

## Why It's Good For The Game

Yeah, we could add null rod #2342 that does almost the same as the
others, or we could have a unique bow weapon!

Player Dev Project thread:
https://discord.com/channels/326822144233439242/1093521091957370940/1093521091957370940

## Changelog
🆑 tralezab code, Drag for the commission and player project, cre#0484
for their spritework
add: Divine Archer Armor and Weapon
qol: Bows give more feedback when you're doing something wrong, like
trying to draw without a nocked arrow
code: Sorted files, cleaned bow code up to allow subtypes
/🆑
2023-04-29 02:07:44 +00:00

36 lines
1.2 KiB
Plaintext

/**
* sect nullrod bonus component; for sekret rite combos
*
* Good example is the bow and pyre sect. pick the bow, get a special rite in the pyre sect.
*/
/datum/component/sect_nullrod_bonus
/// assoc list of nullrod type -> rites it unlocks
var/list/bonus_rites
/// has this component given the bonus yet
var/bonus_applied = FALSE
/datum/component/sect_nullrod_bonus/Initialize(list/bonus_rites)
if(!istype(parent, /datum/religion_sect))
return COMPONENT_INCOMPATIBLE
src.bonus_rites = bonus_rites
check_bonus_rites()
/datum/component/sect_nullrod_bonus/RegisterWithParent()
RegisterSignal(SSdcs, COMSIG_GLOB_NULLROD_PICKED, PROC_REF(on_nullrod_picked))
/datum/component/sect_nullrod_bonus/UnregisterFromParent()
UnregisterSignal(SSdcs, COMSIG_GLOB_NULLROD_PICKED)
/datum/component/sect_nullrod_bonus/proc/on_nullrod_picked(datum/source)
SIGNAL_HANDLER
check_bonus_rites()
/datum/component/sect_nullrod_bonus/proc/check_bonus_rites()
if(bonus_applied || !GLOB.holy_weapon_type)
return
var/list/unlocked_rites = bonus_rites[GLOB.holy_weapon_type]
if(!unlocked_rites)
return
GLOB.religious_sect.rites_list.Add(unlocked_rites)
bonus_applied = TRUE