Coder Social home page Coder Social logo

syradar / yxans-klagan Goto Github PK

View Code? Open in Web Editor NEW
11.0 4.0 2.0 165.11 MB

Web tool for Forbidden Lands

Home Page: https://yxans-klagan.vercel.app/

License: MIT License

HTML 0.12% JavaScript 0.26% CSS 0.44% TypeScript 99.17% Shell 0.01%
tailwindcss react forbidden-lands vite vitest rpg-tool

yxans-klagan's Introduction

Yxans Klagan

A tool to help game masters prep and run Forbidden Lands.

Looking for a maintainer/developer

I have too little time to maintain (beyond life support) or develop new features. If you are interrested contact me or open an issue.

Feature requests or bugs

Open an issue.

Develop

yxans-klagan's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

yxans-klagan's Issues

Add notes and icons to map

skulle vilja se att man kunde spara lätt information på kartan,
man vill ju ha så pass mycket text att man kan så man kan spara ett namn på platsen, vad det är för plats och även så man kan länka till egen informations källa, tex onenote, Evernote, Notion, NoteLedge.

för att slippa hålla server och dylikt så spara bara på i läsaren,
en spara knapp så man kan spara informationen till datorn ifall man behöver byta läsare eller ominstallera om datorn.

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

Describe the solution you'd like
A clear and concise description of what you want to happen.

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Additional context
Add any other context or screenshots about the feature request here.

[Bug] Clicking attribute checkbox toggles then one below

Describe the bug
Clicking attribute checkbox toggles then one below

To Reproduce
Steps to reproduce the behavior:

  1. Go to Monster Page
  2. Choose Dragon, large
  3. Click a strength button that has a box under it as well

Expected behavior
The box that I have put my cursor on should be the clicked one

Screenshots
image

Add more gear tables

Instead of adding more gear tables, what about one table but with quick filters and great search.

[Translation] EN version of /src/pages/name-generator.page.tsx

import React from 'react'
import 'twin.macro'
import { KinNameList, PageHeader, Parchment } from '../components'
import {
  getRandomAlderlänningarName,
  getRandomAslenerName,
  getRandomEländerName,
} from '../functions/name.functions'

export const NameGeneratorPage = () => {
  return (
    <div tw="flex flex-col gap-y-8 w-full">
      <PageHeader>Name</PageHeader>

      <div tw="flex flex-wrap xl:(min-w-[600px]) gap-4">
        <div tw=" flex-basis[500px]">
          <Parchment>
            <KinNameList
              tw="p-0"
              title={'Ailander'}
              nameFunc={getRandomEländerName}
            ></KinNameList>
          </Parchment>
        </div>

        <div tw=" flex-basis[500px]">
          <Parchment>
            <KinNameList
              tw="p-0"
              title={'Alderlander'}
              nameFunc={getRandomAlderlänningarName}
            ></KinNameList>
          </Parchment>
        </div>

        <div tw=" flex-basis[500px]">
          <Parchment>
            <KinNameList
              tw="p-0"
              title={'Aslene'}
              nameFunc={getRandomAslenerName}
            ></KinNameList>
          </Parchment>
        </div>
      </div>
    </div>
  )
}

[Feature Request] test

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

Describe the solution you'd like
A clear and concise description of what you want to happen.

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Additional context
Add any other context or screenshots about the feature request here.

[Feature Request]: Map with fog of war

I like the feeling of exploration, and my group of players are playing FL with no knowledge of Ravenland map.

For this reason, I hide all the map and they can only see the explored hexes, like the fog of war. So, if is it possible to add an option in the Map section that can hide (blackout) all the map hexes, and only shows the explored hexes.

One example of this is the Foundry VTT map and how it work the illumination.

Thanks in advance!

Fix Dice Roller

Should be able to make any roll with all modifiers, with some great UX. Special care for mobile to have it handy when playing.

[Feature Request] Add Rust Brother as Typical Kin

Hey I noticed something today. Rust Bro’s are missing in the typical person section. Probably due to the fact that they are under the Gods part in the GMG. But pretty important addition nonetheless.
— Vandenberg_

[Translation] EN version of /src/models/terrain.model.ts

const terrain = [
  'plains',
  'forest',
  'darkForest',
  'hills',
  'mountain',
  'lake',
  'swamp',
  'mire',
  'ruinCity',
] as const
export type Terrain = typeof terrain[number]

export type TerrainNameMap = { [T in Terrain]: string }

export const getTerrainKeys = (): Terrain[] => [...terrain]

export const terrainNameMap: TerrainNameMap = {
  plains: 'plains',
  forest: 'forest',
  darkForest: 'dark forest',
  hills: 'hills',
  mountain: 'mountains',
  lake: 'lake',
  swamp: 'marshlands',
  mire: 'quagmire',
  ruinCity: 'ruins',
}

[Feature Request] Add notes and icons to map

Is your feature request related to a problem? Please describe.

I'm loving this tool more and more! One thing I'd like to ask you is to have more maneuverability with the map section. Like the ability to add notes/icons to the map so that I can keep track of which adventure sites are where

Describe the solution you'd like

  1. Click on a map tile
  2. Be able to choose an icon in the popup
  3. Be able to write a small note

Describe alternatives you've considered
Keeping notes on each tile in a separate document

Additional context
Concerns: Input validation, Persistence

The automated release is failing 🚨

🚨 The automated release from the main branch failed. 🚨

I recommend you give this issue a high priority, so other packages depending on you can benefit from your bug fixes and new features again.

You can find below the list of errors reported by semantic-release. Each one of them has to be resolved in order to automatically publish your package. I’m sure you can fix this 💪.

Errors are usually caused by a misconfiguration or an authentication problem. With each error reported below you will find explanation and guidance to help you to resolve it.

Once all the errors are resolved, semantic-release will release your package the next time you push a commit to the main branch. You can also manually restart the failed CI job that runs semantic-release.

If you are not sure how to resolve this, here are some links that can help you:

If those don’t help, or if this issue is reporting something you think isn’t right, you can always ask the humans behind semantic-release.


No npm token specified.

An npm token must be created and set in the NPM_TOKEN environment variable on your CI environment.

Please make sure to create an npm token and to set it in the NPM_TOKEN environment variable on your CI environment. The token must allow to publish to the registry https://registry.npmjs.org/.


Good luck with your project ✨

Your semantic-release bot 📦🚀

[Bug] click on Map Hex is not triggered correctly

Describe the bug
When clicking on the Hexes, the parchment is null and therefore not triggering the 'handleHexClick' correctly.

To Reproduce
Steps to reproduce the behavior:

  1. Go to Map
  2. Click on any hex

Expected behavior
Not sure what is suppose to happen. This I guess:
setMapPopover({
hex,
x: rect.left,
y: rect.top,
mapMinX: parchmentRect.x,
mapMaxX: parchmentRect.width,
mapMinY: parchmentRect.y,
mapMaxY: parchmentRect.height,
})

Screenshots
If applicable, add screenshots to help explain your problem.
image

Desktop (please complete the following information):

  • OS: Windows
  • Browser [e.g. chrome, safari]: Firefox and Edge Version
  • Version [e.g. 22]
    : Firefox 108.0.2 (64-bit)
    Edge Version 108.0.1462.76

Smartphone (please complete the following information):

  • Device: [e.g. iPhone6]
  • OS: [e.g. iOS8.1]
  • Browser [e.g. stock browser, safari]
  • Version [e.g. 22]

Additional context
I try to solve it myself but I was to lazy and haven't been working with much SVG. Riktigt jävla bra sida annars!

[Translation] EN version of core.json

{
  "Language-Swedish": "Svenska",
  "Language-English": "English",
  "Menu-Session": "Legend Generator",
  "Menu-Encounters": "Encounter Generator",
  "Menu-Map": "Map",
  "Menu-Calendar": "Calendar",
  "Menu-Gear": "Equipment",
  "Menu-Names": "Names",
  "Menu-Dice": "Dice Roller",
  "Menu-Monsters": "Monsters"
}

Add Giant Spider to Monster List

Stats created by Bjorn Heikenberg

Giant Spider

Very territorial, guarding its nest so will not follow.
when possible will always start the fight with a ambush attack on the tallest enemy
STR 11 , AGI 4 , Move 1 armor 2
skills: move 2 stealth 3
Monster attacks:
special rule: after 1st turn gets +1 on the roll as it gets more desperate, until 6 has been rolled.
also, if an enemy is prone the next attack will be "2"

  1. bite, 8 dice, 1 dmg
    2)stab, 9 dice, 2 dmg, paralyze poison str 6
  2. pounce, 9 dice, 1dmg, prone
  3. webshot, all near, 7 dice, no damage but GRAPPLED (vs = 6 dice) and paralyzing poison str 1
  4. piercing schriek: 5 fear dice
  5. call the brood: summons 1d6 offspring to help in the fight.

Giant Spiderling

STR 4, AGI 4 move 1 armor 1
Melee2, stealth3, Move3 bite 1 dmg paralyzing poison str 6

[Bug] Wrong translation

Describe the bug
Stillday is using the Swedish name Stilldag

To Reproduce
Steps to reproduce the behavior:

  1. Go to Calendar Page

Expected behavior
Should be Stillday

Screenshots
If applicable, add screenshots to help explain your problem.
image

[Feature Request] Typical Kin

Is your feature request related to a problem? Please describe.
Easy access to temporary NPCs

Describe the solution you'd like
List of all typical NPCs grouped by Kin

Describe alternatives you've considered
Looking in the GMG

Additional context
image

Alternative Map support (Bitter Reach)

I am a player in a Bitter Reach campaign and my GM would like to use the Map feature to track our progress. Could you make it possible to use the map from Bitter Reach instead of the Ravenland?

For example, the user could upload a map of their own to use instead. Or there could be additional pages with different maps.

I would really love it if this feature became implemented, and I am sure so would others.

[Translation] EN version of /src/app.tsx

import React, { FC } from 'react'
import {
  Link,
  LinkProps,
  useLocation,
  useResolvedPath,
  useRoutes,
} from 'react-router-dom'
import tw from 'twin.macro'
import './App.css'
import { PageHeader, Parchment } from './components'
import { LanguageSwitcher } from './components/language-switcher'
import YxansKlaganLogo from './logo'
import { CalendarPage } from './pages/calendar.page'
import { DiceRollerPage } from './pages/dice-roller.page'
import { EncounterPage } from './pages/encounter.page'
import { GearPage } from './pages/gear.page'
import { MapPage } from './pages/map.page'
import { NameGeneratorPage } from './pages/name-generator.page'
import { SessionPage } from './pages/session.page'
import { useTranslation } from 'react-i18next'
import { MonstersPage } from './pages/monsters.page'

const styles = {
  // Move long class sets out of jsx to keep it scannable
  // container: ({ hasBackground }: { hasBackground: boolean }) => [
  container: () => [
    tw`bg-gray-50 flex-col min-h-screen h-full w-screen max-w-full`,
    // hasBackground && tw`wbg-gradient-to-b from-electric to-ribbon`,
    //tw`bg-yellow-50`,
  ],
}

const App = () => {
  const routes = useRoutes([
    {
      path: '/',
      element: <HomePage />,
    },
    {
      path: '/dice',
      element: <DiceRollerPage />,
    },
    {
      path: '/names',
      element: <NameGeneratorPage />,
    },
    {
      path: '/gear',
      element: <GearPage />,
    },
    {
      path: '/calendar',
      element: <CalendarPage />,
    },
    {
      path: '/session',
      element: <SessionPage />,
    },
    {
      path: '/map',
      element: <MapPage />,
    },
    {
      path: '/encounter',
      element: <EncounterPage />,
    },
    {
      path: '/monsters',
      element: <MonstersPage />,
    },
  ])

  const { t } = useTranslation('core')

  return (
    <div className="App" css={styles.container()}>
      <div tw="flex flex-col h-full lg:(flex-row)">
        <div tw="flex flex-col bg-gray-200 lg:(h-full fixed w-48 )">
          <div tw="p-2 mb-4">
            <Link to="/" tw="block w-full">
              <YxansKlaganLogo />
            </Link>
          </div>
          <div tw="h-full flex flex-col justify-between pb-4">
            <nav tw="text-lg w-full flex flex-col gap-y-1">
              <MenuLink to="/session">{t('Menu-Session')}</MenuLink>
              <MenuLink to="/encounter">{t('Menu-Encounters')}</MenuLink>
              <MenuLink to="/monsters">{t('Menu-Monsters')}</MenuLink>
              <MenuLink to="/map">{t('Menu-Map')}</MenuLink>
              <MenuLink to="/calendar">{t('Menu-Calendar')}</MenuLink>
              <MenuLink to="/gear">{t('Menu-Gear')}</MenuLink>
              <MenuLink to="/names">{t('Menu-Names')}</MenuLink>
              {/* <MenuLink to="/dice">{t('Menu-Dice')}</MenuLink> */}
            </nav>
            <LanguageSwitcher></LanguageSwitcher>
          </div>
        </div>

        <main tw="w-full mt-4 lg:(ml-48)">{routes}</main>
      </div>
    </div>
  )
}

export default App

const HomePage = () => (
  <div tw="flex flex-col gap-y-8 max-w-prose">
    <PageHeader>Forbidden Lands</PageHeader>
    <Parchment>
      <p className="yx-prose">
        Welcome to Forbidden Lands. In this tabletop roleplaying game, you are not heroes sent on missions dictated by others – instead, you are raiders and rogues bent on making your own mark on a cursed world. You will wander the wild lands, discover lost tombs, fight monsters, and, if you live long enough, build your own stronghold to defend. During your ad- ventures, you will uncover the secrets of dark powers lurking in the shadows and, in the end, you can be the ones to decide the fate of the Forbidden Lands.
      </p>
    </Parchment>
    <Parchment>
      <div tw="flex flex-col gap-4">
        <h2 tw="text-4xl text-center flex" className="yx-heading">
          Tack
        </h2>
        <p className="yx-prose">
          Tack till{' '}
          <a
            tw=" hover:text-yellow-500 underline"
            href="https://freeleaguepublishing.com/sv/"
          >
            Free League
          </a>{' '}
          for a fantastic game.
        </p>
        <p className="yx-prose">
          Thanks to the Forbidden Lands community for the inspiration and others generators.
        </p>
      </div>
    </Parchment>
    <div></div>
  </div>
)

const MenuLink: FC<LinkProps> = ({ to, children }: LinkProps) => {
  const { pathname } = useLocation()
  const { pathname: toPathname } = useResolvedPath(to)

  const isLinkActive = pathname === toPathname

  return (
    <Link
      tw="px-4 py-1 w-full font-medium hover:bg-yellow-500"
      css={[
        isLinkActive &&
          tw`bg-black text-white font-semibold hover:bg-black hover:text-yellow-500`,
      ]}
      to={to}
    >
      {children}
    </Link>
  )
}

Select monster based on Hex Terrain

Is your feature request related to a problem? Please describe.
It's hard to select a monster that is appropriate for the terrain my players are in.

Describe the solution you'd like
Categorise the monsters and allow my to select the terrain and see which monsters that are appropriate.

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.