Engines NIFE Roadmap Shatterloop Game Projects
Deprecated Saepes Mundi Other Projects Blog

Shatterloop

[4] Combat Checklist

Posted June 14, 2022 by Xhin

Notes


Hand Weapons

Weapon Damage Hit Range Effect Range
Sword 2-10 3-8 N/A
Spear 7-12 2-3 0-3
Clawarm 5-10 5-10 1-3
Flail 5-10 5-10 1-3
Hammer 7-12 2-3 1-3
Trident 7-12 2-3 1-3


  • (( 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.

  • There are 5 Replies


    Clawarm

  • Add clawarms to the weapons, weapongen, itemgen and shops.

  • Auto pick it in the _init.

  • It should have a flail-style hover.

  • Clicking a tile should only work if there's a mob there. A clawarm sprite will shoot out from you and snag the mob, then run the draw step.

  • Mob movement should move the clawarm as well so you know where it is.

  • The draw step is also your secondary click action. Drawing will move the mob to where it gets drawn to smoothly.

  • Clicking the mob will release the clawarm on them and you'll be able to attach it to something else.

  • (( Polar Stop Checklist ))

  • If there's a solid in the way, the mob stops before it and takes clawarm damage. -- Coded but needs the above to work properly.

  • If the mob is on a solid, it should instead stop at the nearest floor, get pulled faster, and not take damage. Use polar.stop() directly here.

  • Click on *yourself* to release the clawarm instead of the mob tile.

  • Also have a button in the combat menu. It should also say as much.

  • Mobs can't be drawn to your tile -- that'll instead release the claw.

  • Killing a mob should also release the claw in case that entid is reused.

  • August 10, 2022
    Xhin
    Sky's the limit

    Basic Archery

    Basic Stuff

  • 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.

  • August 10, 2022
    Xhin
    Sky's the limit

    Offhand Weapons

    Basic Stuff

  • 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.

  • August 10, 2022
    Xhin
    Sky's the limit

    Hand Weapon Issues

    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.

  • Flails don't work at all.

  • Weapon hovers can't be seen on top of mobs.

  • August 10, 2022
    Xhin
    Sky's the limit

    polar.stop()

    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.

  • August 20, 2022
    Xhin
    Sky's the limit

    Reply to: [4] Combat Checklist

    Username
    Password