GithubHelp home page GithubHelp logo

hearthsim / joust Goto Github PK

View Code? Open in Web Editor NEW
114.0 16.0 19.0 14.92 MB

🍿 Hearthstone replays in your browser.

Home Page: https://hearthsim.info/joust/

JavaScript 3.49% HTML 0.43% TypeScript 87.88% Less 8.19%
hearthstone replays hsreplay

joust's People

Contributors

andburn avatar azeier avatar beheh avatar dzannotti avatar emilianocenizo avatar jleclanche avatar kadavr95 avatar yuntianzhang avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

joust's Issues

Add support for player emotes

To use Joust as a kettle frontend, we'll need support for sending and receiving emotes. I'm also thinking of adventure boss emotes.

For now let's not worry about the actual packets, but I'd like us to add support for a speech bubble + sound accompanying it.

Status of card rendering

Thoughts on card rendering and game tags

"Full" card frame (Sunwell)

  • CLASS (frame color)
  • PREMIUM (golden cards - "real" golden mode + "simple" golden mode, eg. golden frame with no animations) - HearthSim/Sunwell#6
  • RARITY (gem)
  • CARD_SET (CORE is no gem)
  • RACE
  • COST
  • ATK, HEALTH, DURABILITY
  • SILENCED(text crossed out)
  • ELITE (dragon)
  • SPELLS_COST_HEALTH - HearthSim/Sunwell#5
  • SHIFTING (Shifter Zerus) - HearthSim/Sunwell#11

Card text

  • CURRENT_HEROPOWER_DAMAGE_BONUS (from Fallen Hero)
  • HERO_POWER_DOUBLE
  • SPELLPOWER_DOUBLE
  • RECEIVES_DOUBLE_SPELLDAMAGE_BONUS (Arcane Blast)

Card Glows

  • Playable
  • COMBO (with COMBO_ACTIVE on the player)
  • POWERED_UP (orange glow)
  • EVIL_GLOW (Chromaggus/Rafaam... player + opponent)

In-play

Tracking in #7

Misc

  • How to attach buffs?
  • Buff text?
  • Copied deathrattles modify the buff text
  • "green" / "red" text for buffed/damaged minions (eg. reference defaults)
  • DISPLAYED_CREATOR is a thing

Custom hooks?

  • Could do custom things eg. display a skull on TO_BE_DESTROYED cards

Implement viewing multiple games as one game

This will implement "reconnect" feature for replays. If there is more than one game in a replay, and the second game has the same id attribute as the first game, the second game is considered to "continue" the first one.

Redesign End Turn button

The button should be larger, have more padding and be styled a little more like Hearthstone (bold black on yellow/green? Experimentation needed)

Add keyboard bindings

  • Play/Pause: Space/K
  • Swap perspective: C
  • Scrub forwards/backwards: J/L left/right
  • Reveal/Hide cads: X
  • other wishes?

Add basic UI zone delimitations

  • Add a border between the two sides of the battlefield
  • Add a border between the battlefield and the hero box
  • Add borders between hand and hero box

Once we have clearer delimitations between the zones we can prototype with various styles (eg. different background colors for the hand so it's clearly "outside" the rest of the field).

Refactor various CardArt components to use inheritance

Using TypeScript we can actually make the card art components extend from the base component. This would also mean we have a decent place for the texture lookup, which is currently in InPlayCardArt (it can't go into CardArt because of the dimensions wrapping).

There's a bit too much prop passing going on right now in those components.

Skip to previous turn: behaviour depending on turn progress

Instead of always skipping to the start of the previous turn, skip to the start of the current one if the progress (of the current turn) is above a certain threshold.

The threshold might need to be time, rather than percent based. Otherwise you might get stuck on a turn that only has very few actions. I.e. the replay progresses past the threshold before the user has had time to click a second time.

Switch to ES6/Babel

  • Require babel-loader, babel-preset-react (what about babel-preset-es2015?)
  • Add babel-loader to webpack.config.js
  • Switch es5→es6 and remove commonjs module resolution in tsconfig.json
  • Rewrite import statements

Highlight combo

Not working with Kidnapper - I thought I had implemented this?

Implement DISPLAYED_CREATOR

"Created by Unstable Portal"

Should appear in two cases:

  • When the card is played (Depends on #5)
  • When hovering the card (wherever it is)

Handle TRIGGER_VISUAL

The way the TRIGGER_VISUAL tag works:

  • It shows a lightning bolt on the minion Tracked in #7
  • Upon actions of block type TRIGGER, the lightning bolt flashes

Add an event log

Joust needs to be able to provide a way to easily query an event log and progress through it.

Looking at this for example: https://hsreplay.net/joust/replay/c6d5b2f2-2591-4c67-aa07-97726df2888c

We could see:

  • BehEh goes first.
  • BehEh's initial hand is: (a), (b), (c)
  • The Innkeeper's initial hand is: (a), (b), (c), (d)
  • The Innkeeper keeps the entire hand.
  • BehEh mulligans Dr. Boom, Holy Nova
  • The Innkeeper's turn begins
  • The Innkeeper plays Murloc Raider
  • BehEh's turn begins
    ...

There's a lot more we can do but the basic log would be good first.

Missing TypeScript bindings

$ gulp compile
[15:13:19] Using gulpfile ~/git_projects/joust/gulpfile.js
[15:13:19] Starting 'compile:scripts'...
[15:13:19] Finished 'compile:scripts' after 21 ms
[15:13:19] Starting 'compile:styles'...
[15:13:19] Finished 'compile:styles' after 6.43 ms
[15:13:19] Starting 'html'...
[15:13:19] Finished 'html' after 1.49 ms
[15:13:19] Starting 'compile'...
[15:13:19] Finished 'compile' after 2.1 μs
ts/components/TwoPlayerGame.tsx(17,31): error TS2307: Cannot find module 'react-dnd-html5-backend'.
ts/components/welcome/HSReplay.tsx(4,35): error TS2307: Cannot find module 'filereader-stream'.
ts/components/welcome/Kettle.tsx(4,25): error TS2307: Cannot find module 'is-node'.
[15:13:21] TypeScript: 3 semantic errors
[15:13:21] TypeScript: emit succeeded (with errors)

Style animation for mana update

New crystals, removed crystals should transition by opacity as they appear/disappear.

Locked crystals should transition from/to grey to their new color when they update (#22)

Add character state graphics

Minion

  • CANT_BE_DAMAGED (immune)
  • ELITE (dragon)
  • NUM_TURNS_IN_PLAY + CHARGE (for summoning sickness)
  • DIVINE_SHIELD
  • FROZEN
  • TAUNT
  • STEALTH
  • TAUNT + STEALTH (#99)
  • SILENCED
  • ENRAGED
  • CANT_BE_TARGETED_BY_ABILITIES (Chromatic Dragonkin)
  • HEAVILY_ARMORED (Animated Armor effect for League adventure)

Icons

  • TRIGGER_VISUAL
    • flashing upon trigger
  • DEATHRATTLE
  • INSPIRE
  • POISONOUS

Hero

  • FROZEN (#156)
  • TAUNT (#37)
  • HEAVILY_ARMORED (Animated Armor)
  • IMMUNE

Misc

  • Windfury
  • Negative buff
  • Positive buff
  • Aura

Add deck graphics

Like Hearthstone, the deck should appear as a thick stack of cards that gets thinner as the deck itself thins.

Add a way to display the graveyard

There should be a skull-like graveyard button near where the name of the player is right now. Clicking it would display the graveyard as a popup list of cards over the rest of the board state, graying out the rest of the game (like how the sidebar hovers work in hearthstone).

Allow exploring known entities

If an entity is known, even if it's unrevealed (eg. in the deck or in the opponent's hand), we should have some form of interaction which lets the user see those.

This abuses the fact that by the end of the game, we know more entities than at the beginning of the game. It also abuses various info leaks from the nature of the protocol. For the hand it's straightforward, for the deck, not so much. I'm thinking, when exploring the deck, we see a list of known cards and a "+ 20 more unknown cards".

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.