diff --git a/app.vue b/app.vue index ae392f5..f8beda7 100644 --- a/app.vue +++ b/app.vue @@ -4,7 +4,7 @@ const lobby = await login() // import goStore, { oauth2_register_discord, setup_websocket, heron_cookie_login } from "@/netcode"; -// await setup_websocket() +const router = useRouter(); // useHead // ({ diff --git a/assets/shaders/noise.frag b/assets/shaders/noise.frag index 27a6254..adba968 100644 --- a/assets/shaders/noise.frag +++ b/assets/shaders/noise.frag @@ -23,12 +23,12 @@ void main(){ q=q*.5+.5; vec2 r=vec2(0.); - r.x=fbm(st+1.*q+vec2(1.7,9.2)+.00515*u_time); - r.y=fbm(st+1.*q+vec2(8.3,2.8)+.0126*u_time); + r.x=fbm(st+1.*q+vec2(1.7,9.2)+.00215*u_time); + r.y=fbm(st+1.*q+vec2(8.3,2.8)+.00526*u_time); r=r*.5+.5; float f=fbm(st+r); - + f = floor((f+.4)*4.)/4.; vec3 color=mix(u_color_start,u_color_end,f*.3); gl_FragColor=vec4(color,1.); diff --git a/components/CardPreview.vue b/components/CardPreview.vue index d748724..c18ea8a 100644 --- a/components/CardPreview.vue +++ b/components/CardPreview.vue @@ -79,6 +79,7 @@ onMounted(() => { max-width: 256px; position: relative; display: flex; + justify-content: center; margin-bottom: 0px; margin-top: var(--margin-bottom); transition: filter .125s cubic-bezier(0.075, 0.82, 0.165, 1), rotate 0.075s cubic-bezier(1, 1.81, .59, 1.42); @@ -94,6 +95,7 @@ onMounted(() => { .card_image { max-height: var(--max-height); z-index: 1; + height: var(--max-height); } .card_image.outlined { @@ -138,7 +140,12 @@ onMounted(() => { } .card.wrapped { - max-width: 10px; + max-height: 6px; + margin: 0; +} + +.card.wrapped .card_image { + filter: drop-shadow(.5px .5px .5px gray) drop-shadow(-.5px -.5px .5px gray); } #contextMenuButtons { diff --git a/components/CardsGrouped.vue b/components/CardsGrouped.vue index 7f79e11..888b363 100644 --- a/components/CardsGrouped.vue +++ b/components/CardsGrouped.vue @@ -12,41 +12,38 @@ const props = withDefaults(defineProps(), { - - \ No newline at end of file diff --git a/components/MarketCards.vue b/components/MarketCards.vue index 034468b..60ed6c7 100644 --- a/components/MarketCards.vue +++ b/components/MarketCards.vue @@ -2,35 +2,59 @@ import goStore, { buy, useEffect } from '@/netcode'; import { CardEffects, type Effect } from '@/netcode/Effect' import { CardType } from '@/netcode/Card' +import gsap from 'gsap' + + const isTurn = computed(() => goStore.self && goStore.current_game?.started && (goStore.self.team == goStore.current_game.current_turn)) const clientStore = useClientSideStore() const buyableFiregem = computed(() => goStore?.current_game?.gem_stack.at(-1)) + +function onBeforeEnter(el: Element) { + (el as HTMLElement).style.visibility = "hidden" + const element = el as HTMLElement + element.style.top = element.offsetTop + "px" + element.style.left = element.offsetLeft + "px" + element.style.zIndex = "999" +} + +function onEnter(el: any, done: () => unknown) { + console.log("enter") + // setTimeout(() => { + // el.style.visibility = null + // done() + // }, 1000) + done() + +} + + + - \ No newline at end of file diff --git a/components/PlayerSlot.vue b/components/PlayerSlot.vue index 7bdb4b9..647478a 100644 --- a/components/PlayerSlot.vue +++ b/components/PlayerSlot.vue @@ -26,7 +26,7 @@ const props = withDefaults(defineProps(), { hide_stack_and_discard: () => false, }) -const discard_unwrapped = ref(false) + const isPlayerTurn = computed(() => props.player.team === goStore.current_game?.current_turn); const isSelf = computed(() => props.player.uuid === goStore.self?.uuid); const isSelfTurn = computed(() => goStore.self?.team === goStore.current_game?.current_turn) @@ -38,8 +38,8 @@ const make_discard = (target: Player) => clientStore.findUseEffect(CardEffects.MAKE_DISCARD, target); const sacrifice = (target: Card) => clientStore.findUseEffect(CardEffects.SACRIFICE, target); const stun = (target: Card) => clientStore.findUseEffect(CardEffects.STUN, target) -const restack_discarded_champion = (target: Card) => clientStore.findUseEffect(CardEffects.RESTACK_DISCARDED_CHAMPION, target) -const restack_discarded_card = (target: Card) => clientStore.findUseEffect(CardEffects.RESTACK_DISCARDED_CARD, target) +// const restack_discarded_champion = (target: Card) => clientStore.findUseEffect(CardEffects.RESTACK_DISCARDED_CHAMPION, target) +// const restack_discarded_card = (target: Card) => clientStore.findUseEffect(CardEffects.RESTACK_DISCARDED_CARD, target) const prepare_champion = (target: Card) => clientStore.findUseEffect(CardEffects.PREPARE, target) @@ -91,70 +91,19 @@ function check_for_guard(player: Player) { \ No newline at end of file +import { useRuntimeConfig, navigateTo } from 'nuxt/app'; diff --git a/pages/rules.vue b/pages/rules.vue index c9cd031..645e122 100644 --- a/pages/rules.vue +++ b/pages/rules.vue @@ -1,3 +1,319 @@ + + \ No newline at end of file +
+
+
+ pétasse +
+
+
+

Règles de Héron Realms

+
+

Héron Realms, c'est un jeu de héron building + deck-building.

+

Tout le monde part d'un même deck de base.

+

Le but du jeu est de l'enrichir pour obtenir de quoi gagner.

+

Et comme la violence est une solution universelle, ça se traduit en battre ses adversaires.

+

​

+

Et quoi de mieux pour faire ça que des cartes colorées?

+
+ + + + +
+

​

+
+

​

+

Objectif

+

L'unique objectif du jeu est d'être le dernier en lice. Pour y arriver, il faut descendre les Points + de Vie de vos adversaires à 0 en partant de 50.

+

+ Le moyen principal d'y arriver, c'est de faire des Dégats . Tout le reste des mécaniques du + jeu sont là pour vous faciliter la tâche, + ou pour mettre des bâtons dans les roues de vos adversaires. +

+

​

+
+

Deckbuilding

+

Comme c'est un jeu de "deckbuilding", on va expliquer ce qu'est le "deck" et ce qui nous permet de le + "build".

+
+ +
+

​

+

+ Le deck d'un joueur est-ce qui constitue sa pioche, qui lui permettra ensuite de constituer sa main + (la main est préparée à la fin du tour et permet de jouer le tour d'après). +

+

+ Quand la pioche est vide, elle est recyclée à partir de sa défausse. + +

+

+ La défausse est ce qui contient les cartes déjà jouées. Mais aussi celles qui sont achetées! Elle + finit par être mélangée pour former la nouvelle pioche. +

+

​

+
+

Deck de base

+

+ Tout le monde commence avec 10 cartes divisées en 4 types: +

+
    +
  • 7x Or (1)
  • +
  • 1x Or (2)
  • +
  • 1x Dégats (1)
  • +
  • 1x Dégats (2)
  • +
+
+ + + + +
+

+ La pioche est formée au hasard: on peut donc avoir une main de départ avec 5 or et 2 dégats, ou 3 or + et 4 dégats, ou 4 or et 3 dégats, etc. +

+

+ A partir de sa main, on peut jouer des cartes. Ces cartes peuvent déclencher des effets: on peut + considérer qu'ils vont dans un "pool commun", et qu'on peut les utiliser dans + l'ordre qu'on souhaite. 1 de dégats et 2 de dégats me donnent 3 ressources de dégats que je split + comme je veux ensuite. Pareil pour l'or et pour le soin, qui sont les 3 ressources + principales du jeu. +

+

​

+
+

Types de cartes

+

+ Les cartes sont divisées en 3 catégories: objets, actions et champions. +

+
+ + + +
+

​

+

Objets & actions

+
+ + +
+

+ Par simplicité, disons que les objets et les actions sont pareil: on les joue, ils font un effet + disponible durant le tour actuel, et ils sont défaussés. +

+

Champions (& gardes)

+
+ +
+

+ Les champions sont un peu plus complexes: ils restent sur le terrain, et on peut les utiliser à + chaque tour (en les mobilisant). +

+

Ils ont une défense + indiquée en bas à droite et ils ne sont assommés (défaussés) que si on leur fait des dégats = + défense.

+

Ces dégats doivent être faits d'un coup. Je ne peux pas faire un peu de dégats pendant un tour, et un + peu le tour d'après pour les tuer.

+
+ +
+

+ Par ailleurs, certains champions sont des Gardes (ils ont un bouclier noir), ce qui veut dire qu'on est + obligés de les tuer pour faire des dégats à des champions non-gardes ou au joueur. +

+

+ (J'en profite pour préciser qu'on peut en effet, sans garde, choisir d'attaquer le joueur + directement ou ses champions.) + Incidentellement, ça veut dire qu'avec seulement 2 de dégats, je ne peux rien faire à un joueur avec + un garde à 3 de défense. +

+

​

+
+

Building

+

+ Passons au "building": on peut acheter des cartes pour les ajouter à notre défausse qui, si vous + avez suivi, constituera la prochaine pioche. + Avec le jeu de base, l'or sert exclusivement à accomplir ce but: acheter des cartes. +

+
+ + + + +
+

+ Un marché est mis à disposition de tous les joueurs, mettant à disposition 5 cartes (pas ici parce + que j'ai pas la place). +

+

+ Ces cartes ont chacune un coût indiqué en haut à droite. + Il faut au moins autant d'or que ce qui est indiqué pour acheter une carte. Une carte achetée laisse + la place à une nouvelle carte directement, qu'on peut + décider d'acheter juste après (tant qu'on a l'argent). +

+

+ Il ne nous reste plus qu'à comprendre ce que font les cartes du marché, puisqu'elles sont plus + complexes (et bien plus fortes) que votre deck de base. + Prenons des exemples! +

+
+

Couleurs

+

+ La première chose qui ne vous échappera pas, c'est qu'on a 4 couleurs différentes pour les cartes. +

+

​

+
+ + + +
+

​

+

Les cartes jaunes sont les cartes Empire.

+

Elles font beaucoup de soin, et activent souvent des effets de pioche.

+

​

+
+ + + +
+

​

+

Les cartes rouges sont les cartes Necros.

+

Elles sont les seules à pouvoir sacrifier des cartes pour les sortir de son deck de façon permanente. +

+

​

+
+ + + +
+

​

+

Les cartes vertes sont les cartes Sauvages.

+

Elles font beaucoup de dégats, et forcent vos adversaires à jouer moins de cartes.

+

​

+
+ + + +
+

​

+

Les cartes bleues sont les cartes Guilde.

+

Elles donnent beaucoup d'or, assomment les champions adverses et manipulent votre pioche.

+

​

+
+

Déclencheurs

+

Les effets de cartes peuvent se déclencher pour 3 raisons différentes.

+
+ +
+

Sur cette carte, on peut voir les trois en même temps.

+

La 1ère ligne s'active tout le temps.

+

La 2ème ligne est une capacité Allié: il faut une autre carte de la même couleur en jeu pour pouvoir + en profiter.

+

La 3ème ligne est un Effet Poubelle (différent du sacrifice des cartes rouges): vous pouvez retirer + cette carte de votre jeu pour bénéficier, en plus des autres effets, de l'effet marqué. Mais la + carte sera défaussée à tout jamais.

+

​

+
+

Effets

+

Une variété d'effets peuvent être inclus dans les cartes.

+

Il y en a plein et les expliquer ici serait relou, alors je vous laisse poser la question en vocal si + vous n'en comprenez pas un.

+

​

+
+

Activer les cartes dans la version en ligne

+

Il suffit de cliquer sur la carte que vous voulez activer dans votre main pour la "LOCK".

+

Une carte "LOCKED" est considérée en jeu, & peut activer des effets Allié pour d'autres cartes, etc. +

+

Si vous avez des choix à faire sur la carte, un menu apparaîtra pour vous laisser choisir.

+

Pour faire des dommages, il y aura un bouton "Damage" sur vos ennemis. Pareil sur leurs champions. +

+

Quand vous avez un effet "Sacrifice", vous pouvez fouiller votre défausse pour choisir la carte à + sacrifier. Vous pouvez également sacrifier une carte de la main qui n'est pas encore locked!

+

Zoomer sur les cartes

+

Pour zoomer sur une carte, maintenez votre clic droit.

+
+
+
+ + + \ No newline at end of file diff --git a/public/favicon_niko.ico b/public/favicon_niko.ico new file mode 100644 index 0000000..6bb35de --- /dev/null +++ b/public/favicon_niko.ico @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3349fdee8c4fe0bfaa60db50fd1442f5e4fc323e96ee6ed5e34405fe65b873cf +size 15406 diff --git a/public/images/fuck.svg b/public/images/fuck.svg new file mode 100644 index 0000000..b664308 --- /dev/null +++ b/public/images/fuck.svg @@ -0,0 +1,46 @@ + + + +