Giter VIP home page Giter VIP logo

project-hiros's Introduction

🛠️ Kiril Panayotov Blagoev 🎨

Digital Craftsman

project-hiros's People

Contributors

promtastic avatar tihawk avatar

Watchers

 avatar  avatar

project-hiros's Issues

Implement non-teleporting movement

The movement on the grid has to follow a path-finding algorithm, instead of just flying to an empty cell. Obstacles have to include:

  • any creature
  • terrain obstacles
  • walls turrets and closed gates

Implement terrain

The battlefield should be able to contain terrain tiles, i.e. tiles which are unwalkable and obstruct the range of walking creatures.

Implement flying versus walking creatures

In essence, change the range calculation for flying creatures to be only radius dependent, of course while still excluding populated tiles.

Potential issues:

  • the path-finding algorithm has to not exclude non-empty tiles, while still not allowing for landing on populated tiles.

Add and improve creature sprites

There's only the swordsman creature sprite. Sprites are wrongly centred, resulting in jerky animations. Adding more of these for the new creature classes will be slow and tedious, resulting in the same bad quality animations. Refer to issue #2

Research for featuring sounds

Research topics:

  • whether dynamic sounds in the browser are sustainable in general
  • how are sounds handled in react apps
  • how and where to store these sounds (formats, archives, lazy loading and so on)

This list might be edited.
Post research results and references as comments here.

Enemy unit tiles should not be walkable

Due to enemy unit tiles being walkable, units are able to teleport beyond their range by attacking an enemy unit sitting in one of the furthermost tiles inside the walkable range from outside the range.

Add implementation for the 'Wait' action

WAIT PHASE
Creatures play in increasing order of speed.
If there is a speed tie among opposing units then player's A unit will play first if player's B unit has
played just before and vice versa. Further turn order simply alternates between units of player's A
and B.
If there is a speed tie among units in the same army turn order is determined by left slot rule (so, not
opposite, but the same as in normal phase).
SPECIAL CASE: TOWN SIEGE WHEN FORT, CITADEL OR CASTLE BUILT
Turrets always play before the attacker’s Catapult; Artillery and Ballistics skills are irrelevant.
If the Turret waits it will take its turn in War Machine phase.
If the Catapult waits it will take its turn in War Machine phase.
PECULIARITIES
If the unit is unblinded/resurrected/unpetrified (no matter when it was blinded/killed/petrified) it
will take it’s turn as soon it is of highest speed if it is a normal phase, or of slowest speed if it is a wait
phase. Alternating and left slot rule apply normally.
If a unit makes a move (or gets bad morale) and is killed and resurrected it will not play again in the
same round.
Cloned unit will follow the alternating rule, but it will not follow the left slot rule: if there is a speed
tie between 2 or more stacks in the same army, and Clone is cast on either of them, cloned stack will
play after all other stacks have played.

ref:p31

Rewrite the way action chains are handled

Right now walking, attacking and so on are handled by time-interval promises in the server, after which the new state is send to the clients. This looks a lot like promise hell, and it would be beneficial to refactor this in a way where the responsibility for action chains is shared between server and client.

One option would be to aggregate an action chain in the server, and send it to the client. The client then deals with the action chain by animating the creatures, and finishing an item from the chain as an animation ends. Since it hasn't yet received an updated state, it can freely update its own, without it being overwritten by the server
At the time of finishing the chain, it emits a resolution to the server, and the server sends the new state to the client.
If the client fails to handle the chain withing a time-out period, the server can enforce a state update to that client.

Implement ranged attackers

Creatures with range attack capability would have to be able to perform it, and still use melee attack when adjacent to another creature. Range attackers have a finite amount of shots.
The following penalties apply:

  • When range more than 10 hexes - range penalty (50%)
  • When enemy behind wall (during siege) - obstacle penalty (50%)
  • The two above are cumulative
  • Melee attacks only deal 50%

Ranged attack
Range penalty
Obstacle penalty

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.