Skip to content
This repository has been archived by the owner on Sep 19, 2022. It is now read-only.

Micro-level input #38

Open
erlend-sh opened this issue Jan 21, 2021 · 2 comments
Open

Micro-level input #38

erlend-sh opened this issue Jan 21, 2021 · 2 comments
Assignees
Labels
enhancement New feature or request help wanted Extra attention is needed

Comments

@erlend-sh
Copy link
Contributor

erlend-sh commented Jan 21, 2021

Bring SC-level input (micro-play) to Shotcaller. We’d like to enable this “abstraction of play” as its own module. I.e. controlling an individual Leader unit (and often their summons/copies/..) in the game.

This may not be part of the standard mode of play in Shotcaller, but it’s very useful for enabling alternative modes that more closely resemble the traditional way of playing MOBAs. This will also help us think more carefully about what types and amounts of actions should be available to a bot’s micro-play.

Input still wouldn’t be instant. Playing at the most granular micro-level, controlling a Leader around, all players are subject to the same 2-second latency. As such, you’ll rarely have to rely upon your reaction skills. What really matters is your shortest-term foresight.


Milestone 1

Implement most of text-rts features in Shotcaller:

  • Select units (left click)
  • Deselect units (left click empty space or another unit, or press Esc)
  • M-move (move to destination, ignore enemies)
  • A-move (move to dest., fight if meet enemies)
  • Stop order.
  • Hold position order.
  • Focus order (move to and attack specific unit)
  • Auto-groups & quick-selection (see below).

As an example we have a TreePerson leader who can summon a small group of units. Once that group is summoned, the player should be able to hit Tab to switch control over to that group of units (quick-selection). Hit tab again to switch back.

We do NOT need:

  • drag-selection.
  • build mode
  • select all nearby
  • add units to current selection
  • Control groups (or rather, control groups should be hardcoded. E.g. Lone druid would come with two control groups).
  • Camera movement

Milestone 2

  • Use & targeting of abilities.
  • Moving camera
  • ...
@erlend-sh erlend-sh added enhancement New feature or request help wanted Extra attention is needed labels Jan 21, 2021
@Winsalot
Copy link
Collaborator

Winsalot commented Jan 27, 2021

I believe that Milestone 1 could be further divided into 3 major steps:

  1. Preparation of environment:
  • Resource to set game mode. Options could be "default" and "micro-input". Should be change-able in-game and some systems (eg. Creep spawner, simple ai movement) should check it's value before running. Reason is that if micro-input is to be a separate module, then there will be a lot of systems that will be relevant only to this module, and vice versa.

  • Custom game start/map with no creep spawning and all units idle. Further steps would add unit orders, therefore units should not do anything before any order is given.

  • Add mouse support and cursor to the font-end. (Kinda works, but has some serious issues)

  1. Unit selection:
  • Decide on architecture. What part of the game stores what units are selected? Is this information stored in the unit itself, or are selected entity id's stored in a separate container?
  • Implement selection of single unit
  • Implement deselect by clicking empty space or selecting another unit.
  • Multiple unit selection.
  • Auto control groups (automatically assigned control group for each leader and their summons if available).
  1. Unit orders and unit AI:
  • OrderQueue component and UnitOrder type.
  • Review unit AI (units should behave in different ways depending on what their current Order is)
  • Implement idle order behaviour. Basically unit behaviour when no active UnitOrder is present. At current stage it would be: unit stands in place, moves and attacks enemy if it enters aggression radius.
  • Implement M-move order.
  • Implement stop order (clears OrderQueue of all orders, sets current order to idle)
  • Implement Hold position order.
  • Implement A-move order.
  • Implement focus-fire order

@rodrigocam
Copy link
Collaborator

rodrigocam commented Jan 28, 2021

I'm gonna implement mouse support since I'm also gonna build the item buy system #16 that needs this dependency. I checked and bracket-lib has minimal mouse support with position and clicks data. I'm thinking of having a Selectable tag component attached to every selectable entity so we can iterate over it and check if the mouse position == entity position and then spawn a SelectEvent.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
enhancement New feature or request help wanted Extra attention is needed
Projects
None yet
Development

No branches or pull requests

3 participants