Compare commits

...

22 Commits

Author SHA1 Message Date
7772f697d2
revert ba3804df2220de6cb62cb498552f311d4d67f9f7
revert Remove unused CSS imports from main stylesheet for cleaner code
2025-03-20 15:34:38 +00:00
ba3804df22
Remove unused CSS imports from main stylesheet for cleaner code
All checks were successful
Deploy Jekyll site to Pages / build (push) Successful in 5m4s
2025-03-20 16:16:39 +01:00
86d7a9215a
Fix character profile data fetching URL to correctly append the character ID and file extension 2025-03-20 16:16:31 +01:00
40ff7f5be7
Refactor character profile component for dynamic ID handling and improve data fetching logic
All checks were successful
Deploy Jekyll site to Pages / build (push) Successful in 5m5s
2025-03-20 15:59:38 +01:00
653b2d53e0
Update character sheet font to Oxanium and apply BlenderProBook globally for improved readability
All checks were successful
Deploy Jekyll site to Pages / build (push) Successful in 4m48s
2025-03-20 15:11:20 +01:00
12840382d4
Update character profile button styling and text for improved clarity and engagement
Some checks failed
Deploy Jekyll site to Pages / build (push) Has been cancelled
2025-03-20 15:07:59 +01:00
a83f2c39fd
Update theme color in manifest for improved visual consistency
All checks were successful
Deploy Jekyll site to Pages / build (push) Successful in 5m41s
2025-03-20 13:29:44 +01:00
60e0818b6d
Enhance character profile component with responsive image handling and navigation button
Some checks failed
Deploy Jekyll site to Pages / build (push) Has been cancelled
2025-03-20 13:27:27 +01:00
c518cbf550
Enhance character profile integration with dynamic data fetching and role identification
All checks were successful
Deploy Jekyll site to Pages / build (push) Successful in 5m31s
2025-03-20 13:18:39 +01:00
344caf5b52
Enhance character sheet layout with dark background and updated styling for details
All checks were successful
Deploy Jekyll site to Pages / build (push) Successful in 5m11s
2025-03-20 13:10:48 +01:00
7857016243
Enhance character sheet layout with responsive styles and improved data binding
All checks were successful
Deploy Jekyll site to Pages / build (push) Successful in 5m22s
2025-03-20 12:28:08 +01:00
ecf64c679f
Add character sheets and guides with layout adjustments and weight properties
All checks were successful
Deploy Jekyll site to Pages / build (push) Successful in 4m58s
2025-03-20 11:30:58 +01:00
f1cf7f2867
Refactor footer scripts into default layout and enhance service worker registration with sync capabilities 2025-03-20 11:30:49 +01:00
63de9a9476
Add sitemap support and enhance service worker caching strategy 2025-03-20 11:30:27 +01:00
f915dad908
Add character data and enhance character sheet layout with dynamic content
All checks were successful
Deploy Jekyll site to Pages / build (push) Successful in 5m10s
2025-03-20 09:30:07 +01:00
448b6db79e Add alignment style to lifepaths page for improved layout
All checks were successful
Deploy Jekyll site to Pages / build (push) Successful in 5m40s
2025-03-18 22:23:51 +01:00
7e5dae0620 Add PWA support: implement service worker, cache assets, and add offline functionality
All checks were successful
Deploy Jekyll site to Pages / build (push) Successful in 5m21s
2025-03-18 22:14:42 +01:00
fae93a92de Implement PWA features: add service worker, manifest, and offline page; enhance footer and header navigation
All checks were successful
Deploy Jekyll site to Pages / build (push) Successful in 5m57s
2025-03-18 21:51:15 +01:00
20b46587ee Add character profiles, new pages, and update layout styles
All checks were successful
Deploy Jekyll site to Pages / build (push) Successful in 4m37s
2025-03-17 18:47:11 +01:00
72158d4464 Add breadcrumb navigation and enhance button functionality
All checks were successful
Deploy Jekyll site to Pages / build (push) Successful in 5m12s
2025-03-17 00:49:38 +01:00
95fdd54d46 Update jekyll-theme-cyberpunk to use local path
All checks were successful
Deploy Jekyll site to Pages / build (push) Successful in 4m40s
2025-03-17 00:24:31 +01:00
4a25e9fadf Automatically deploy page
Some checks failed
Deploy Jekyll site to Pages / build (push) Failing after 4m28s
2025-03-17 00:11:55 +01:00
38 changed files with 815 additions and 127 deletions

View File

@ -0,0 +1,55 @@
name: Deploy Jekyll site to Pages
on:
push:
branches:
- develop
workflow_dispatch:
concurrency:
group: "pages"
cancel-in-progress: true
jobs:
build:
runs-on: ubuntu-22.04
env:
RUBY_VERSION: "3.3.5"
steps:
- name: Checkout
uses: actions/checkout@v4
with:
ref: "develop"
- name: checkout pages
uses: actions/checkout@v4
with:
ref: "pages"
path: "pages"
- name: Setup Ruby
run: |
apt-get update && \
apt-get install curl wget tar build-essential zlib1g-dev gpg -y && \
curl -sSL https://rvm.io/mpapis.asc | gpg --import - && \
curl -sSL https://rvm.io/pkuczynski.asc | gpg --import - && \
curl -sSL https://get.rvm.io | bash -s stable && \
source /etc/profile.d/rvm.sh && \
rvm mount -r https://raw.morlana.space/morlana/rvm-binaries/@binaries/ubuntu/22.04/aarch64/ruby-$RUBY_VERSION.tar.bz2 && \
rvm use $RUBY_VERSION && ruby -v && gem -v && \
gem install bundler jekyll webrick
- name: Build with Jekyll
run: |
source /etc/profile.d/rvm.sh && \
rvm use $RUBY_VERSION && ruby -v && gem -v && \
bundle install && \
bundle exec jekyll build --destination pages
env:
JEKYLL_ENV: production
- name: push pages
run: |
cd pages && \
git config user.name "${{ gitea.actor }}" && \
git config user.email ""${{ gitea.actor }}"@noreply.git.morlana.online" && \
git add . && \
git commit -m "jekyll build from Action ${GITHUB_SHA}" && \
git push

1
.prettierignore Normal file
View File

@ -0,0 +1 @@
*.md

View File

@ -9,7 +9,7 @@ source "https://rubygems.org"
# Happy Jekylling!
gem "jekyll", "~> 4.4.1"
# This is the default theme for new Jekyll sites. You may change this to anything you like.
gem "jekyll-theme-cyberpunk", "~> 0.1.0"
gem "jekyll-theme-cyberpunk", path: "."
# If you want to use GitHub Pages, remove the "gem "jekyll"" above and
# uncomment the line below. To upgrade, run `bundle update github-pages`.
# gem "github-pages", group: :jekyll_plugins

View File

@ -1,3 +1,9 @@
PATH
remote: .
specs:
jekyll-theme-cyberpunk (0.1.0)
jekyll (>= 4.4.1)
GEM
remote: https://rubygems.org/
specs:
@ -68,8 +74,6 @@ GEM
jekyll (>= 3.7, < 5.0)
jekyll-sass-converter (3.1.0)
sass-embedded (~> 1.75)
jekyll-theme-cyberpunk (0.1.0)
jekyll (>= 4.4.1)
jekyll-watch (2.2.1)
listen (~> 3.0)
json (2.10.2)
@ -155,7 +159,7 @@ DEPENDENCIES
http_parser.rb (~> 0.6.0)
jekyll (~> 4.4.1)
jekyll-feed (~> 0.12)
jekyll-theme-cyberpunk (~> 0.1.0)
jekyll-theme-cyberpunk!
tzinfo (>= 1, < 3)
tzinfo-data
wdm (~> 0.1)

View File

@ -1,17 +1,5 @@
# Welcome to Jekyll!
#
# This config file is meant for settings that affect your whole blog, values
# which you are expected to set up once and rarely edit after that. If you find
# yourself editing this file very often, consider using Jekyll's data files
# feature for the data you need to update frequently.
#
# For technical reasons, this file is *NOT* reloaded automatically when you use
# 'bundle exec jekyll serve'. If you change this file, please restart the server process.
#
# If you need help with YAML syntax, here are some quick references for you:
# https://learn-the-web.algonquindesign.ca/topics/markdown-yaml-cheat-sheet/#yaml
# https://learnxinyminutes.com/docs/yaml/
#
# Site settings
# These are used to personalize your new site. If you look in the HTML files,
# you will see them accessed via {{ site.title }}, {{ site.email }}, and so on.
@ -22,8 +10,8 @@ title: ThePhoenixDivision
email: contact@morlana.net
description: >-
We will share our adventures in Cyberpunk Red here.
baseurl: "/cpred" # the subpath of your site, e.g. /blog
url: "https://phoenixdivision.morlana.space" # the base hostname & protocol for your site, e.g. http://example.com
baseurl: "/cpred"
url: "https://phoenixdivision.morlana.space"
twitter_username: abc
github_username: abc
@ -40,22 +28,6 @@ collections:
output: true
permalink: /:name/
# Exclude from processing.
# The following items will not be processed, by default.
# Any item listed under the `exclude:` key here will be automatically added to
# the internal "default list".
#
# Excluded items can be processed by explicitly listing the directories or
# their entries' file path in the `include:` list.
#
# exclude:
# - .sass-cache/
# - .jekyll-cache/
# - gemfiles/
# - Gemfile
# - Gemfile.lock
# - node_modules/
# - vendor/bundle/
# - vendor/cache/
# - vendor/gems/
# - vendor/ruby/
footer_links:
- title: "Impressum"
url: "https://legal.thephoenixdi.vision"

View File

@ -0,0 +1,27 @@
<div class="cyber-tile cyber-tile-big {{ include.bg_color }} {{ include.fg_color }} {{ include.class }}" style="min-height: auto;">
{% if include.image %}
<img class="responsive-img" src="{{ include.image | relative_url }}" alt="Character Picture">
{% endif %}
<p><span class="cyberpunk-font">Name:</span>&nbsp;&nbsp;<span id="name-{{ include.id }}"></span></p>
<p><span class="cyberpunk-font">Handle:</span>&nbsp;&nbsp;<span id="streetname-{{ include.id }}"></span></p>
<p><span class="cyberpunk-font">Role:</span>&nbsp;&nbsp;<span id="role-{{ include.id }}"></span></p>
<p><span class="cyberpunk-font">Age:</span>&nbsp;&nbsp;<span id="age-{{ include.id }}"></span></p>
{% if include.page %}
<button class="cyber-button bg-purple fg-white" onclick="window.location.href='{{ include.page | relative_url }}'">
Screamsheet
<span class="glitchtext">teehsmaercS</span>
<span class="tag">NETR</span>
</button>
{% endif %}
</div>
<script>
fetch("{{ '/assets/game-data/characters/' | append: include.id | append: '.json' | relative_url }}")
.then(response => response.json())
.then(character => {
document.getElementById('name-{{ include.id }}').innerText = character.name;
document.getElementById('streetname-{{ include.id }}').innerText = character.handle;
document.getElementById('age-{{ include.id }}').innerText = character.age;
const mainRole = character.roles.find(role => role.main);
document.getElementById('role-{{ include.id }}').innerText = mainRole.name + " Rang: " + mainRole.rank;
});
</script>

View File

@ -1,12 +1,19 @@
<div class="cyber-razor-top bg-black" style="width: 100%"></div>
<script
src="https://code.jquery.com/jquery-3.7.1.min.js"
integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo="
crossorigin="anonymous"></script>
<script src="{{ "/assets/js/materialize.min.js" | relative_url }}"></script>
<script>
document.addEventListener('DOMContentLoaded', function() {
var sidenavElems = document.querySelectorAll('.sidenav');
var sidenavInstances = M.Sidenav.init(sidenavElems, {});
});
</script>
<footer class="cyber-razor-top bg-black">
<ul class="tabs mobile-tabs">
<li class="tab col s1 {% if page.url == "/" %}bg-red{% else %}bg-dark{% endif %}"><a href="{{ "/" | relative_url }}" class="cyber-a"><i class="material-icons">home</i></a></li>
{% for tab in sorted_pages %}
{% if tab.title and tab.permalink and tab.nav != false %}
<li class="tab col s1 {% if page.url == tab.url %}bg-red{% else %}bg-dark{% endif %}">
<a href="{{ tab.url | relative_url }}" target="_self" class="cyber-a">
{% if tab.icon %}
<i class="material-icons">{{ tab.icon }}</i>
{% else %}
{{ tab.title }}
{% endif %}
</a>
</li>
{% endif %}
{% endfor %}
</ul>
<span></span>
</footer>

View File

@ -2,6 +2,9 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{ page.title }} - {{ site.title }}</title>
<link rel="manifest" href="{{ '/assets/manifest.json' | relative_url }}">
<meta name="theme-color" content="#ff003c">
<!-- Stylesheets -->
<link rel="stylesheet" href="{{ "/assets/css/normalize.css" | relative_url }}">
<link rel="stylesheet" href="{{ "/assets/css/main.css" | relative_url }}">

View File

@ -1,36 +1,39 @@
{% assign menu_pages = site.pages | where_exp: "page", "page.path contains 'pages/'" %}
{% assign sorted_pages = menu_pages | sort: "weight" %}
<header>
<nav class="cyber-razor-bottom bg-black">
<div class="nav-wrapper">
<a href="{{ "/" | relative_url }}" class="cyberpunk-font-og f-x2-5">{{ site.title }}</a>
<a href="#" data-target="mobile-menu" class="sidenav-trigger"><i class="material-icons">menu</i></a>
<ul id="nav-mobile" class="right hide-on-med-and-down">
<li><a href="{{ "/" | relative_url }}" class="cyber-a">Home</a></li>
{% for page in sorted_pages %}
{% if page.title and page.permalink and page.nav != false %}
<li><a href="{{ page.url | relative_url }}" class="cyber-a">{{ page.title }}</a></li>
{% endif %}
{% endfor %}
</ul>
</div>
<ul class="sidenav" id="mobile-menu">
<li>
<button class="cyber-button bg-red fg-white m-2 vt-bot">
Home
</button>
</li>
{% for page in sorted_pages %}
{% if page.title and page.permalink and page.nav != false %}
<li>
<button class="cyber-button bg-red fg-white m-2 vt-bot">
{{ page.title }}
<span class="glitchtext">$_glitch;</span>
<span class="tag"></span>
</button>
</li>
{% endif %}
{% endfor %}
</ul>
</nav>
<div class="navbar-fixed">
<nav class="cyber-razor-bottom bg-black">
<div class="nav-wrapper">
<a href="{{ "/" | relative_url }}" class="cyberpunk-font-og f-x2-5">{{ site.title }}</a>
<ul id="nav-mobile" class="right hide-on-med-and-down desktop-only">
<li><a href="{{ "/" | relative_url }}" class="cyber-a{% if page.url == "/" %} fg-yellow{% endif %}">Home</a></li>
{% for tab in sorted_pages %}
{% if tab.title and tab.permalink and tab.nav != false %}
<li><a href="{{ tab.url | relative_url }}" class="cyber-a{% if page.url == tab.url %} fg-yellow{% endif %}">{{ tab.title }}</a></li>
{% endif %}
{% endfor %}
</ul>
</div>
</nav>
</div>
<!-- WIP: Breadcrumb
<div class="cyber-att">
<a href="{{ "/" | relative_url }}">Home</a>
{% assign segments = page.url | split: "/" %}
{% assign path = "" %}
{% for segment in segments offset: 1 %}
{% assign path = path | append: "/" | append: segment %}
{% assign breadcrumb_page = site.pages | where: "url", path | first %}
{% if breadcrumb_page and breadcrumb_page.title %}
<a href="{{ path | relative_url }}">{{ breadcrumb_page.title }}</a>
{% else %}
<span>{{ segment }}</span>
{% endif %}
{% endfor %}
</div>
-->
</header>

View File

@ -0,0 +1,55 @@
---
layout: page
---
<div class="row">
{% if page.image %}
<div class="col s6 m4 l1 responsive-img">
<img class="responsive-img" src="{{ page.image | relative_url }}" alt="Picture of {{ page.title }}" />
</div>
{% endif %}
<div class="bg-dark fg-yellow cyber-tile col {% if page.image %}s6 m8 l11{% else %}s12 m12 l12{% endif %}">
<p class="character-details">
<strong class="cyberpunk-font-og character-details-title">Straßenname:</strong>
<span id="streetname" class="oxanium-font character-details-value"></span>
</p>
<p class="character-details">
<strong class="cyberpunk-font-og character-details-title">Alter:</strong>
<span id="age" class="oxanium-font character-details-value"></span>
</p>
<p class="character-details">
<strong class="cyberpunk-font-og character-details-title">Rolle:</strong>
<span id="role" class="oxanium-font character-details-value"></span>
</p>
<p class="character-details">
<strong class="cyberpunk-font-og character-details-title">Rollenfähigkeit:</strong>
<span id="role-ability" class="oxanium-font character-details-value"></span>
</p>
<p class="character-details">
<strong class="cyberpunk-font-og character-details-title">Unterkunft:</strong>
<span id="housing" class="oxanium-font character-details-value"></span>
</p>
<p class="character-details">
<strong class="cyberpunk-font-og character-details-title">Lebensstil:</strong>
<span id="lifestyle" class="oxanium-font character-details-value"></span>
</p>
<p class="character-details">
<strong class="cyberpunk-font-og character-details-title">Lebenskosten:</strong>
<span id="costs" class="oxanium-font character-details-value"></span>
</p>
</div>
</div>
{{ content }}
<script>
fetch("{{ page.datasource | relative_url }}")
.then(response => response.json())
.then(character => {
document.getElementById('streetname').innerText = character.handle;
document.getElementById('age').innerText = character.age;
const mainRole = character.roles.find(role => role.main);
document.getElementById('role').innerText = mainRole.name + " Rang: " + mainRole.rank;
document.getElementById('housing').innerText = character.housing.type;
document.getElementById('lifestyle').innerText = character.lifestyle;
});
</script>

View File

@ -5,9 +5,38 @@
</head>
<body>
{% include header.html %}
<main>
<main class="container">
{{ content }}
</main>
{% include footer.html %}
<script src="{{ "/assets/js/materialize.min.js" | relative_url }}"></script>
<script>
document.addEventListener('DOMContentLoaded', function() {
var sidenavElems = document.querySelectorAll('.sidenav');
var sidenavInstances = M.Sidenav.init(sidenavElems, {});
});
document.querySelectorAll("button").forEach(button => {
const href = button.getAttribute("data-href");
if (!href) return;
button.addEventListener("click", () => {
window.location.href = button.getAttribute("data-href");
});
});
</script>
<script>
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register("{{ '/assets/js/service-worker.js' | relative_url }}")
.then((reg) => {
console.log("✅ Service Worker registriert");
if ('SyncManager' in window) {
reg.sync.register('cache-all-pages')
.then(() => console.log("✅ Alle Seiten werden gecached"))
.catch(err => console.error("❌ Fehler beim Sync:", err));
}
})
.catch(error => console.log("❌ Service Worker Fehler:", error));
}
</script>
</body>
</html>

View File

@ -2,12 +2,20 @@
layout: default
---
{% if site.posts and site.posts.size > 0 %}
{% for post in site.posts %}
<article>
<h1 class="cyber-h" style="margin-bottom: 0;"><a href="{{ post.url | relative_url }}">{{ post.title }}</a></h1>
<p style="margin-top: 0;"><small>{{ post.date | date: "%d.%m.%Y" }}</small></p>
<p>{{ post.excerpt }}</p>
<a href="{{ post.url | relative_url }}">Weiterlesen...</a>
<button class="cyber-button bg-red fg-white m-2 vt-bot" data-href="{{ post.url | relative_url }}">
Weiterlesen...
<span class="glitchtext">$_glitch;</span>
<span class="tag"></span>
</button>
</article>
<hr>
{% endfor %}
{% else %}
<div class="cyber-att-2" style="margin: 32px 0;">Es gibt noch keine Neuigkeiten...</div>
{% endif %}

View File

@ -1,7 +0,0 @@
---
layout: page
title: Charaktere
permalink: /characters/
---
TBD

16
_pages/characters.md Normal file
View File

@ -0,0 +1,16 @@
---
layout: page
title: Charaktere
permalink: /characters/
icon: account_circle
weight: 3
---
<div class="row" style="column-gap: 5px;">
<div class="col s12 l6">
{% include character-profile.html id="chase" page="/characters/chase" image="/assets/img/Netrunner.png" bg_color="bg-red" fg_color="fg-dark" %}
</div>
<div class="col s12 l6">
{% include character-profile.html id="carver" page="/characters/crash" image="/assets/img/Tech.png" bg_color="bg-red" fg_color="fg-purple" %}
</div>
</div>

10
_pages/chase.md Normal file
View File

@ -0,0 +1,10 @@
---
layout: character-sheet
title: Chase Révolte
permalink: /characters/chase
image: /assets/img/Netrunner.png
datasource: /assets/game-data/characters/chase.json
nav: false
---
Test

8
_pages/crash.md Normal file
View File

@ -0,0 +1,8 @@
---
layout: character-sheet
title: Carver Wright
permalink: /characters/crash
image: /assets/img/Tech.png
datasource: /assets/game-data/characters/carver.json
nav: false
---

View File

@ -2,8 +2,21 @@
layout: page
title: Lebensweg
permalink: /lifepaths/
icon: merge
weight: 1
---
- [Kulturelle Herkunft](#kulturelle-herkunft)
- [Deine Persönlichkeit](#deine-persönlichkeit)
- [Kleidung und persönlicher Stil](#kleidung-und-persönlicher-stil)
- [Deine Motivation und Beziehungen](#deine-motivation-und-beziehungen)
- [Was du am meisten schätzt](#was-du-am-meisten-schätzt)
- [Deine Familiäre Herkunft](#deine-familiäre-herkunft)
- [Dein Umfeld](#dein-umfeld)
- [Deine Familienkrise](#deine-familienkrise)
- [Deine Lebensziele](#deine-lebensziele)
- [Deine Freunde, Deine Feinde, Deine tragische(n) Liebschaft(en), Süße Rache](#deine-freunde-deine-feinde-deine-tragischen-liebschaften-süße-rache)
## Kulturelle Herkunft
{:.cyber-h}
@ -80,25 +93,134 @@ permalink: /lifepaths/
## Deine Motivation und Beziehungen
{:.cyber-h}
<strong>Wirf 1W10 für jede Spalte oder wähle eine aus jeder Spalte.</strong>
| Wurf | Was schätzt du am meisten? | Was hältst du von den meisten Leuten? |
| ---- | -------------------------- | ------------------------------------------------------------------------------ |
| 1 | Geld | Ich bleibe neutral. |
| 2 | Ehre | Ich bleibe neutral. |
| 3 | Dein Wort | Ich mag so gut wie alle. |
| 4 | Ehrlichkeit | Ich hasse so gut wie alle. |
| 5 | Wissen | Menschen sind Werkzeuge. Benutze sie und wirf sie dann weg. |
| 6 | Rache | Jeder Mensch ist ein wertvolles Individuum. |
| 7 | Liebe | Menschen sind Hindernisse, die vernichtet werden müssen, wenn sie mich nerven. |
| 8 | Macht | Man kann Menschen nicht vertrauen. Verlass dich auf niemanden. |
| 9 | Familie | Lösch sie alle aus - sollen die Kakerlaken die Macht übernehmen. |
| 10 | Freundschaft | Menschen sind wunderbar! |
{:.cyber-table .ac-red style="width: auto;"}
### Was du am meisten schätzt
{:.cyber-h}
<strong>Wirf 1W10 oder wähle eine aus.</strong>
| Wurf | Welche Menschen sind für dich am wertvollsten? |
| ---- | ---------------------------------------------- |
| 1 | Ein Elternteil |
| 2 | Ein Bruder oder eine Schwester |
| 3 | Eine Liebschaft |
| 4 | Ein Freund |
| 5 | Du selbst |
| 6 | Ein Haustier |
| 7 | Ein Lehrer oder Mentor |
| 8 | Eine öffentliche Person |
| 9 | Ein persönliches Held |
| 10 | Niemand |
{:.cyber-table .ac-red style="width: auto;"}
<strong>Wirf 1W10 oder wähle eine aus.</strong>
| Wurf | Was ist dein wertvollster Besitz? |
| ---- | --------------------------------- |
| 1 | Eine Waffe |
| 2 | Ein Werkzeug |
| 3 | Ein Kleidungsstück |
| 4 | Eine Fotografie |
| 5 | Ein Buch oder Tagebuch |
| 6 | Eine Aufnahme |
| 7 | Ein Musikinstrument |
| 8 | Ein Schmuckstück |
| 9 | Ein Spielzeug |
| 10 | Ein Brief |
{:.cyber-table .ac-red style="width: auto;"}
## Deine Familiäre Herkunft
{:.cyber-h}
<strong>Wirf 1W10 oder wähle eine aus.</strong>
| Wurf | Ursprünfliche Herkunft | Beschreibung |
| ---- | ---------------------- | ------------ |
| 1 | Konzerngeschäftsführer | |
| 2 | Konzernmanager | |
| 3 | Konzerntechniker | |
| 4 | Nomadenrudel | |
| 5 | Gang-"Familie" | |
| 6 | Kriegszonenbewohner | |
| 7 | Städtische Obdachlose | |
| 8 | Megabauten | |
| 9 | Reclaimer | |
| 10 | Edgerunner | |
{:.cyber-table .ac-red style="width: auto;"}
## Dein Umfeld
{:.cyber-h}
<strong>Wirf 1W10 oder wähle eine aus.</strong>
| Wurf | Umfeld deiner Herkunft |
| ---- | ---------------------------------------------------------------------------------------------------------------------------------- |
| 1 | Auf der Straße rumgetrieben, ohne Aufsicht durch Erwachsene. |
| 2 | In einer Konzone verbracht, durch Mauern vom Rest der City getrennt. |
| 3 | In einem Nomadenrudel, ständig auf Achse. |
| 4 | In einem Nomadenrudel mit Wurzeln im Transport (Schiffe, Flugzeuge, Wohnwagen). |
| 5 | In einem verfallenden, früher gehobenen Viertel, das zum Überleben jetzt die Booster zurückschlagen muss. |
| 6 | Inmitten einer Kriegszone, Leben in einem zerstörten Gebäude oder in irgendeinem anderen Gemäuer. |
| 7 | In einem riesigen "Megabau", der von einem Konzern oder der City kontrolliert wird. |
| 8 | In den Ruinen einer verlassenen Stadt, die von Reclaimers übernommen wurde. |
| 9 | In einer Schwimmenden Nation (einer treibenden, der Küste vorgelagerten Statd), die ein Treffpunkt für Menschen aller Couleur ist. |
| 10 | In einem luxuriösen "Sternenkratzer" eines Konzerns, hoch über dem Rest des wimmelnden Pöbels. |
{:.cyber-table .ac-red style="width: auto;"}
## Deine Familienkrise
{:.cyber-h}
## Süße Rache
{:.cyber-h}
<strong>Wirf 1W10 oder wähle eine aus.</strong>
| Wurf | Hintergrund |
| ---- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 1 | Deine Familie hat alles durch Verrat verloren. |
| 2 | Deine Familie hat alles durch schlechtes Management verloren. |
| 3 | Deine Familie wurde verbannt oder auf anderem Wege aus ihrer Heimat / ihrer Nation / ihrem Konzern vertrieben. |
| 4 | Deine Familie wurde gefangen genommen und nur du konntest entkommen. |
| 5 | Deine Familie ist verschwunden. Du bist als Einziger übriggeblieben. |
| 6 | Deine Familie wurde getötet und nur du hast überlebt. |
| 7 | Deine Familie ist in eine Langzeitverschwörung, eine Organisation oder Vereinigung verwickelt, beispielsweise eine Verbrecherfamilie oder eine revolutionäre Gruppe. |
| 8 | Aufgrund eines Unglücks ist deine Familie in alle vier Himmelsrichtungen verstreut. |
| 9 | Deine Familie trägt die Last einer Erbfehde, die schon Generationen anhält. |
| 10 | Du bist Erbe der Familienschulden. Du musst die Schuld begleichen, bevor du dein Leben weiterführen kannst. |
{:.cyber-table .ac-red style="width: auto;"}
## Deine Lebensziele
{:.cyber-h}
## Deine Freunde, Deine Feinde, Deine tragische(n) Liebschaft(en)
<strong>Wirf 1W10 oder wähle eine aus.</strong>
| Wurf | Lebensziele |
| ---- | ------------------------------------------------------------------------------------------------ |
| 1 | Einen schlechten Ruf loswerden. |
| 2 | Macht und Kontroller erlangen. |
| 3 | Von der Straße wegkommen, was auch immer es kosten mag. |
| 4 | All jenen Schmerz und Leid zufügen, die dir in die Quere kommen. |
| 5 | Dein altes Leben hinter dir lassen und versuchen, es zu vergessen. |
| 6 | Die für dein mieses Leben Verantwortlichen jagen und sie dafür büßen lassen. |
| 7 | Bekommen, was dir rechtmäßig zusteht. |
| 8 | Wenn möglich, jemanden aus deinem Hintergrund retten, wie eine Liebschaft oder Familienmitglied. |
| 9 | Ruhm und Anerkennung gewinnen. |
| 10 | Gefürchtet und respektiert werden. |
{:.cyber-table .ac-red style="width: auto;"}
## Deine Freunde, Deine Feinde, Deine tragische(n) Liebschaft(en), Süße Rache
{:.cyber-h}
Diese Dinge werden per Zufall ausgewürfelt und müssen Vorort geklärt werden.

View File

@ -0,0 +1,8 @@
---
layout: page
title: Netrunner Guide
permalink: /players-guide/netrunner
nav: false
---
TBD

9
_pages/players-guide.md Normal file
View File

@ -0,0 +1,9 @@
---
layout: page
title: Spielerguide
permalink: /players-guide/
icon: description
weight: 2
---
TBD

View File

@ -2,6 +2,8 @@
layout: page
title: Rollen
permalink: /roles/
icon: manage_accounts
weight: 4
---
TBD

8
_pages/tech-guide.md Normal file
View File

@ -0,0 +1,8 @@
---
layout: page
title: Tech Guide
permalink: /players-guide/tech
nav: false
---
TBD

View File

@ -1,29 +0,0 @@
---
layout: post
title: "Welcome to Jekyll!"
date: 2025-03-16 20:11:55 +0100
categories: jekyll update
---
Youll find this post in your `_posts` directory. Go ahead and edit it and re-build the site to see your changes. You can rebuild the site in many different ways, but the most common way is to run `jekyll serve`, which launches a web server and auto-regenerates your site when a file is updated.
Jekyll requires blog post files to be named according to the following format:
`YEAR-MONTH-DAY-title.MARKUP`
Where `YEAR` is a four-digit number, `MONTH` and `DAY` are both two-digit numbers, and `MARKUP` is the file extension representing the format used in the file. After that, include the necessary front matter. Take a look at the source for this post to get an idea about how it works.
Jekyll also offers powerful support for code snippets:
{% highlight ruby %}
def print_hi(name)
puts "Hi, #{name}"
end
print_hi('Tom')
#=> prints 'Hi, Tom' to STDOUT.
{% endhighlight %}
Check out the [Jekyll docs][jekyll-docs] for more info on how to get the most out of Jekyll. File all bugs/feature requests at [Jekylls GitHub repo][jekyll-gh]. If you have questions, you can ask them on [Jekyll Talk][jekyll-talk].
[jekyll-docs]: https://jekyllrb.com/docs/home
[jekyll-gh]: https://github.com/jekyll/jekyll
[jekyll-talk]: https://talk.jekyllrb.com/

View File

@ -1,12 +1,70 @@
* {
font-family: BlenderProBook, sans-serif;
}
body {
height: 100vh;
min-height: 100vh;
max-height: 100vh;
display: flex;
flex-direction: column;
overflow-y: scroll;
font-family: BlenderProBook, sans-serif;
}
main {
height: calc(100vh - 124px);
overflow-y: scroll;
display: flex;
flex-direction: column;
align-items: center;
flex-grow: 1;
font-family: BlenderProBook, sans-serif;
}
footer {
position: sticky !important;
bottom: 0;
width: 100%;
background: var(--dark, #333);
color: var(--white, #fff);
text-align: center;
padding: 10px;
z-index: 1000;
}
.breadcrumb {
font-size: 14px;
color: #ffcc00;
padding: 5px 10px;
}
.breadcrumb a {
color: #ff003c;
text-decoration: none;
}
.breadcrumb span {
color: #888;
}
.character-details {
display: flex;
}
.character-details-title {}
.character-details-value {
margin: 0px 0px 0px auto;
}
.mobile-tabs {
display: none;
}
/* Ab max. 992px (iPad Hochkant und kleiner) ändert sich das Layout */
@media screen and (max-width: 992px) {
.desktop-only {
display: none;
}
.mobile-tabs {
display: block;
background-color: transparent;
}
}

View File

@ -0,0 +1,54 @@
{
"name": "Carver Wright",
"handle": "Crash",
"age": 45,
"roles": [
{
"name": "Tech",
"rank": 4,
"main": true,
"skills": []
}
],
"attributes": {
"int": 7,
"ref": 8,
"dex": 7,
"tech": 7,
"cool": 5,
"will": 4,
"luck": 7,
"move": 5,
"body": 7,
"emp": 5,
"humanity": 58
},
"skills": [
{ "name": "", "rank": 5 },
{ "name": "", "rank": 3 },
{ "name": "", "rank": 4 },
{ "name": "", "rank": 4 },
{ "name": "", "rank": 4 },
{ "name": "", "rank": 6 },
{ "name": "", "rank": 3 },
{ "name": "Sprache: Streetslang", "rank": 2 },
{ "name": "Sprache: Muttersprache", "rank": 4 },
{ "name": "Ortskunde: zu Hause", "rank": 4 },
{ "name": "", "rank": 3 },
{ "name": "", "rank": 4 },
{ "name": "", "rank": 4 },
{ "name": "", "rank": 4 },
{ "name": "", "rank": 4 },
{ "name": "", "rank": 3 },
{ "name": "", "rank": 5 },
{ "name": "", "rank": 6 },
{ "name": "", "rank": 5 },
{ "name": "", "rank": 4 }
],
"housing": {
"type": "Frachtcontainer",
"location": "Night City",
"owned": false
},
"lifestyle": "Kibble"
}

View File

@ -0,0 +1,53 @@
{
"name": "Chase Révolte",
"handle": null,
"age": 23,
"roles": [
{
"name": "Netrunner",
"rank": 4,
"main": true
}
],
"attributes": {
"int": 6,
"ref": 8,
"dex": 8,
"tech": 5,
"cool": 7,
"will": 4,
"luck": 8,
"move": 5,
"body": 7,
"emp": 4,
"humanity": 46
},
"skills": [
{ "name": "Concentration", "rank": 5 },
{ "name": "Conceal/Reveal Object", "rank": 3 },
{ "name": "Perception", "rank": 4 },
{ "name": "Athletics", "rank": 4 },
{ "name": "Stealth", "rank": 4 },
{ "name": "Cryptography", "rank": 6 },
{ "name": "Education", "rank": 3 },
{ "name": "Sprache: Streetslang", "rank": 2 },
{ "name": "Sprache: Muttersprache", "rank": 4 },
{ "name": "Ortskunde: zu Hause", "rank": 2 },
{ "name": "Brawling", "rank": 3 },
{ "name": "Evasion", "rank": 4 },
{ "name": "Handgun", "rank": 4 },
{ "name": "Conversation", "rank": 4 },
{ "name": "Human Perception", "rank": 4 },
{ "name": "Persuasion", "rank": 3 },
{ "name": "Basic Tech", "rank": 5 },
{ "name": "Cybertech", "rank": 6 },
{ "name": "Electronics/Security Tech", "rank": 5 },
{ "name": "First Aid", "rank": 4 }
],
"housing": {
"type": "Frachtcontainer",
"location": "Night City",
"owned": false
},
"lifestyle": "Kibble"
}

View File

@ -0,0 +1,46 @@
{
"Leben auf der Straße":{
"rent": 0,
"price": 0
},
"Leben auf der Straße in einem Fahrzeug": {
"rent": 0,
"price": 0
},
"Kastenhotel": {
"rent": 500,
"price": 0
},
"Frachtcontainer": {
"rent": 1000,
"price": 15000
},
"Atelierwohung": {
"rent": 1500,
"price": 25000
},
"Dreizimmerwohnung": {
"rent": 2500,
"price": 35000
},
"Konzernwohnung": {
"rent": "bereitgestellt",
"price": 0
},
"Hochwertige Wohnung": {
"rent": 7500,
"price": 85000
},
"Luxus-Penthouse": {
"rent": 15000,
"price": 150000
},
"Konzern-Beaverville-Haus": {
"rent": "bereitgestellt",
"price": 200000
},
"Konzern-Beaverville-McMansion": {
"rent": "bereitgestellt",
"price": 500000
}
}

View File

@ -0,0 +1,18 @@
{
"Kibble": {
"cost": 100,
"description": "Du isst furchtbares Essen, das du nicht einmal für einen Hund kaufen würdest, den du magst. Einmal im Monat kannst du dir einen Film oder einen Braindance ansehen."
},
"Generisches Fertigfutter": {
"cost": 300,
"description": "Du isst Essen, dass vergleichsweise besser schmeckt als Kibble. Du kannst es dir leisten jedes Wochenende in eine gute Bar zu gehen und dort zu feiern oder dich für gutes Essen in ein Restaurant setzen."
},
"Gutes Fertigfutter": {
"cost": 600,
"description": "Dein Essen hat die gleiche Qualität wie die meisten Restaurants, und obwohl es zwar künstlich ist, schmeckt es doch fast wie echtes Essen. Du besuchst hervorragende Bars und Restaurants, wenn du ausgehst. Einmal im Monat kannst du dir ein Live-Konzert oder ein Sportereignis ansehen."
},
"Frischfutter": {
"cost": 1500,
"description": "Du isst richtiges Essen. Einmal im Monat, wenn du müde und fern der Heimat bist, kannst du in ein nahegelegenes Hotel gehen und musst dir keine Sorgen ums Budget machen. Du besuchst eine VIP-Bar. Einmal im Monat kannst du in einem Weltklasse-Restaurant essen gehen."
}
}

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

BIN
assets/img/Netrunner.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
assets/img/Rocker.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
assets/img/Tech.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
assets/img/icon-192.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

BIN
assets/img/icon-512.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

View File

@ -0,0 +1,100 @@
---
permalink: /assets/js/service-worker.js
---
const CACHE_NAME = "cyberpunk-cache-v1";
const OFFLINE_URL = "/offline.html"; // Diese Seite wird angezeigt, wenn offline
const BASE_PATH = "{{ "/" | relative_url }}";
const SITEMAP_URL = BASE_PATH + "sitemap.json";
const urlsToCache = [
BASE_PATH,
BASE_PATH + "/offline.html",
/* CSS-Dateien */
BASE_PATH + "/assets/css/main.css",
BASE_PATH + "/assets/css/normalize.css",
BASE_PATH + "/assets/css/cyberpunk.css",
/* JS-Dateien */
BASE_PATH + "/assets/js/materialize.min.js",
BASE_PATH + "/assets/js/service-worker.js",
/* PWA-Dateien */
BASE_PATH + "/assets/manifest.json",
BASE_PATH + "/assets/img/icon-192.png",
BASE_PATH + "/assets/img/icon-512.png",
/* Bilder, Schriften, etc. */
BASE_PATH + "/assets/fonts/BlenderProBook.woff2",
BASE_PATH + "/assets/fonts/Cyberpunk.otf",
BASE_PATH + "/assets/fonts/Oxanium.woff2",
BASE_PATH + "/assets/img/Netrunner.png",
BASE_PATH + "/assets/img/Tech.png",
/* Game Data */
BASE_PATH + "/assets/game-data/housings.json",
BASE_PATH + "/assets/game-data/lifestyles.json",
BASE_PATH + "/assets/game-data/skills.json",
BASE_PATH + "/assets/game-data/characters/chase.json",
BASE_PATH + "/assets/game-data/characters/carver.json",
];
/**
* Install-Event: Cache Standarddateien
*/
self.addEventListener("install", (event) => {
event.waitUntil(
caches.open(CACHE_NAME).then((cache) => {
return cache.addAll(urlsToCache);
})
);
});
/**
* Fetch-Event: Cache-First Strategie mit Offline-Fallback
*/
self.addEventListener("fetch", (event) => {
event.respondWith(
caches.match(event.request).then((response) => {
return response || fetch(event.request).catch(() => {
return caches.match(OFFLINE_URL);
});
})
);
});
/**
* Wenn die Startseite geladen wird, lade automatisch alle Seiten aus der Sitemap in den Cache
*/
self.addEventListener("sync", (event) => {
if (event.tag === "cache-all-pages") {
event.waitUntil(
fetch(SITEMAP_URL)
.then((response) => response.json())
.then((data) => {
return caches.open(CACHE_NAME).then((cache) => {
return Promise.all(
data.pages.map((page) => {
return fetch(page.url)
.then((response) => cache.put(page.url, response))
.catch((err) => console.error("Fehler beim Cachen:", err));
})
);
});
})
);
}
});
/**
* Aktivierungs-Event: Löscht alten Cache
*/
self.addEventListener("activate", (event) => {
event.waitUntil(
caches.keys().then((cacheNames) => {
return Promise.all(
cacheNames.map((cache) => {
if (cache !== CACHE_NAME) {
return caches.delete(cache);
}
})
);
})
);
});

25
assets/manifest.json.html Normal file
View File

@ -0,0 +1,25 @@
---
permalink: /assets/manifest.json
---
{
"name": "{{ site.title }}",
"short_name": "CPRED",
"start_url": "{{ "/" | relative_url }}",
"display": "standalone",
"background_color": "#f8ef02",
"theme_color": "#000000",
"icons": [
{
"src": "{{ "/assets/img/icon-192.png" | relative_url }}",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "{{ "/assets/img/icon-512.png" | relative_url }}",
"sizes": "512x512",
"type": "image/png"
}
]
}

12
offline.html Normal file
View File

@ -0,0 +1,12 @@
---
title: Currently Offline
permalink: /offline.html
layout: page
---
<div class="container">
<h1>404</h1>
<p><strong>Du bist zur Zeit offline!</strong></p>
<p>Sobald du wieder online bist wird diese Seite gecached.</p>
</div>

11
sitemap.json.html Normal file
View File

@ -0,0 +1,11 @@
---
permalink: /sitemap.json
---
{
"pages": [
{% for page in site.pages %}
{ "url": "{{ page.url | relative_url }}" }{% unless forloop.last %},{% endunless %}
{% endfor %}
]
}