(( There needs to be additional properties based on procgen/customized animations like weapon color, speed and rotation).
Offhand Weapons
Weapon
Damage
Hit Range
Effect Range
Dagger
5-10
1
N/A
Axe
5-10
1
N/A
Shield
20-30
1
1-2
Acrobat Gauntlet
7-12
1
2-4
Grapple Glove
7-12
1
0-2
Spring Shoes
7-12
2-4
N/A
Spike Shoes
20-30
1
1
Archery Stats
Cardinality (O/D/B) -- arrows can be shot either orthogonally, diagonally, or both.
Range (3-10) -- a base range for floor and water tiles. Arrows will usually stop when they hit solid tiles.
Height (0-5) -- arrows with a better height can be shot over solids, with the amount dictating the amount of solids they can pass through.
Damage -- The amount of damage the arrow deals.
Secondary damage percent (20-80%) -- A percentage of the damage dealt by secondary effects. If there aren't any, this is ignored. The branches/bones dictates this.
Secondary effect duration (1-4) -- The number of turns secondary effects take where possible. If there aren't any, this is ignored. The branches/bones dictates this.
Imbuing Stats
Flexible -- Flexible arrows can target individual enemies along a line rather than just shooting the first one within the range. Useful for more precise shots.
Knockback (1-3) -- Enemies hit by these arrows will get knocked back some amount of spaces. If moved into a solid they'll take secondary damage.
Winch (1-3) -- Same as knockback but pulls enemies towards you.
Pierce (1-3) -- Hitting an enemy will also hit this number of enemies directly behind it (if there is one) for the same amount of damage.
Stun percentage (20-80%) -- A percent chance of the enemy being stunned. If stunned, they will be stunned for the secondary effect duration.
Poison percentage (10-50%) -- A percent chance of the enemy being poisoned. If poisoned, they take secondary damage for secondary effect duration turns.
Remaining Tasks
Push 6: Combat Entities
Do the clawarm with generalized flail functionality. Uncomment it from weapons.hands_list[] as well. Make sure it's also loot. -- Checklisted
Actual basic archery mechanics - route archery through the g-activated combat menu. Again, avoid secondary effects -- those will be handled all at once. -- Checklisted
Get offhand weapons working with basic properties. -- Checklisted
Hand weapon issues -- Checklisted
Effects update -- Need to pull anything in the OP here out of the Weapons Brainstorming post and create it. Can focus on better weapons/generalization later.
Push 7: Nests
Nest generation -- hooks into the pre-existing tercos.
Nests spawn mobs
Nests spawn more mobs, stop, etc.
Make nests themselves be static mobs with health. Their death event is to erase the nest and stop all spawning behavior and whatever else is in my notes (loot possibilities?)
Push 8: Mob movement
Mob movement patterns (needs its own higher-level object that parses out enemy data and hooks into mobs{}).
Turn-based mobs, real-time mobs and paused mobs (for Flow)
Rudimentary physics engine to handle stuff like knockback overlaps. Could potentially cause damage to the dominoes based on the weapon .
OOE/Engagement/Flow stuff
Somehow I glossed over this, but mobs need attacks, including potentially ranged and scatter/etc attacks. Will need to explore when I get here. These attacks should also be affected by terrain, so tetrad-shifting can actually block attacks potentially, which is a cool emergent mechanic.
Push 9: Wrapping Up
Combos -- Scrappable
Void sea mobs (currently in mobgroups{})
Cave Enemies
Dungeon Enemies
Delete everything in __old (after archival I guess)
Fix debug entities if relevant to actual systems: Various debug animations aren't working once you move around -- sword men are particularly weird, however crush is using multiple player locations, etc. I can wait on this until I'm actually using animations for something real. I also noticed that trident and hammer effects will sometimes linger. There will probably be additional issues by this point, but I want to get the overarching systems in place before I start fixing bugs, unless they're particularly egregious. Could always just table them until late-game as well, again unless they're particularly game-breaking, in which case the band-aids approach might make the most sense because I'm extraordinarily lazy. Might be fixed
Dead mobs should drop corpses, and these should stack in place. Somehow I forgot this as well.
I like the idea of placeable items that "repeat" attack effects around them, or can fire weapons from themselves, or are traps for enemies. This kind of thing would make the game highly tactical as you could set up arenas and stuff for defense. Maybe they can move too -- also maybe this is the robot summoning system set of mechanics I'm looking for to give the game a kind of pokemon-like system. I guess whenever I get here make it a potential loose end because I would definitely like to wrap this project up. -- Scrappable
The tables here are useful moving forward -- I need a dedicated place to stick them, along with anything that looks useful in deprecated notes (like the furniture table).
Weapons Brainstorming / Generalization -- Might be better off as a loose end or late-game thing.
Bugs (if not fixed by this point)
Health bars need to move as animations do (both animation functions as well).
Tetrad shifts are erasing entities -- need to either alter table rendering so the parent elements aren't being re-rendered on tetrad shift, or alter tetrad shifting so the entities pop out and then come back. Can do this at the end of the Combat megaproject however.
Hook Quivers into the equipment object, and also the combat hook to it.
I guess for now, press H to switch from your hand weapon to your quiver and vice-versa -- this should be a combat hook that trade-offs between the weapons endpoint and the archery endpoint.
Re-equipping a bow should automatically swap to that endpoint, and similarly, re-equipping a hand weapon shoul switch off to that endpoint.
The combat menu open hook should use whichever one was previously selected (stored internally).
For sanity it'll probably make sense to bold either the hand weapon or the archery weapon. Maybe have archery underneath the hand weapon.
Add a note to combos about incorporating a quiver / quiver moves into them.
Archery endpoint
Anyway, onto the actual archery endpoint.
The mouse hover should be a line up to the range stat since you can't pick an arrow spot directly (though you will be able to in the improved weapons update). Whether it's orthogonal, diagonal or both depends on the quiver stat.
Shooting an arrow should chunk-animate an arrow in that direction. It should also take an arrow from the quiver.
It should stop on the Xth solid, where X is the Height stat of the quiver.
It should also stop at its range.
It should also stop if it hits a mob -- this will cause the mob damage.
Alter spears so they also stop on mobs and add a note about looking into all weapon primary effects more closely at the end of the weapons update.
Regardless of what happens, erase the entity.
If there are no arrows in the quiver, don't let you shoot it.
Quivers should indicate both their damage and number of arrows somehow.
However I get that working, weapons with a secondary damage should indicate them in the equipment area.
The above two points are horrible from a UI perspective, but they'll work for now.
There needs to be some kind of flag set when you have the combat menu open, that gets removed when you don't -- this only happens on combat.exit() and combat.enter() by the way.
Make sure there's a weapons.offhand{} datapoint that is as available as weapons.hand{} is.
Create weapons_offhand{}.
On map.move(), wherever the central hooks is (pretty sure it's a different function now), pass relevant starting/ending data to weapons_offhand.move() if the combat flag is set.
Make sure the hit range on all weapons except the spike shoes can't be altered, and then add a note into the mess that's the next checkpoint about allowing them to somehow.
Each weapon is going to act a bit differently.
Dagger
If you walk into a mob, damage the mob the offhand amount and don't let you teleport there.
The animation should be a sword that smooth-moves from you to the mob and back again super quick (probably).
Axe
If you're adjacent to a mob and move to a diagonal position from it or vice-versa, damage the mob the offhand amount. Do this for all adjacent positions so you can damage multiple enemies at once (I think 2 is the max).
The animation should definitely note the swing(s) ideally with a different sym -- will need to trace this out on paper to see what it looks like.
Shield
Table this until I'm doing knockback for all enemies, and indicate as much (and to check the full notes on it) in the mess update. Add a note about doing its animation as well.
Acrobat Gauntlet
Jump over a stack of up to effect_range enemies. If the stack is too big, fail. Deal every enemy in between them the damage amount.
The animation should be a quick smooth move sym to the end of the stack, then you chunky move there, then there's a quick smooth move to where you came from. Should therefore be a kind of "wave" to indicate what exactly just happened, if the damage isn't a good enough indicator.
Grapple Glove
Touch an enemy and they'll smooth-move violently to the other side of you, taking damage accordingly.
Add a note to the mess update about them also getting knockback from the effect_range stat.
The animation should be a sym that smooth moves from you to the enemy then over to the opposite space, then it disappears and the enemy moves there.
Spring Shoes
If you touch a wall, push off from it and go the hit_range amount of spaces. Stop on whichever enemy you hit first and deal them damage.
The sym should go into the wall slowly then should go fast to where you'd land and then you should go there.
Spike Shoes
If you're on a solid tile and the enemy isn't and you move onto the enemy tile, deal it damage. Add a note to the mess update about obligatorily knocking it back a step.
Whenever you land, a bunch of white entities should render on your position simultaneously, indicating spikes. Then they should fade out and erase.
Nevermind, spears are good how they are. They're now balanced with arrows -- arrows stop when they hit a target but have more range, while spears hit all targets in their range though their range is lower. Bows cost ammo, however they can also hit enemies outside of engagement, so they're still balanced.
Spears need to "extend" -- like there's an entity on all the tiles that are hit by the weapon, and this telescopes out and then back in.
Hammers don't do damage where they hit, only the sparks do damage.
Also the sparks should do secondary damage, not primary damage.
Both primary and secondary damage should be noticeable in the equipment pane somehow with hand weapons.
Should simplify this along with upcoming stuff (like arrows or enemy movement).
Put in a start and end coord, and a function that takes in a coord and index and returns either -1 or an index to "stop" at.
Do a line between the two and evaluate the stopping function. Any index received in this way will cancel future function lookups and will also stop the coord indexing at the appropriate index.
Return a list of coords, as well as whether it stopped or not. And maybe what it stopped at.
gen.stop()
This hooks into the above but the stopping function is based on the tile being solid, and it'll stop right before it. Return the same data.
Rehook
Polar.stop() and gen.stop() should both optionally take a range.
This fits in the exact same way weapons_anim.pull() does.
Rebuild the clawarm pull from scratch using this function.