help? #4

Closed
sageTheDm wants to merge 2 commits from refs/pull/4/head into main
48 changed files with 470 additions and 861 deletions
Showing only changes of commit 858eb3a599 - Show all commits

1
.gitignore vendored
View file

@ -1,2 +1,3 @@
# Godot 4+ specific ignores
.godot/
content/

View file

@ -208,7 +208,7 @@ If you develop a new program, and you want it to be of the greatest possible use
To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found.
opendnd
FreeTTRPG
Copyright (C) 2024 Patrick_Pluto
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
@ -221,7 +221,7 @@ Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:
opendnd Copyright (C) 2024 Patrick_Pluto
FreeTTRPG Copyright (C) 2024 Patrick_Pluto
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details.

View file

@ -1,62 +0,0 @@
openDND
Character-informations
STR=Strength
DEX=Dexterity
CON=Constitution
INT=Itelligence
WIS=Wisdom
CHA=Charisma
Skillchecks;
1. Acrobatics (Dexterity)
2. Animal Handling (Wisdom)
3. Arcana (Intelligence)
4. Athletics (Strength)
5. Deception (Charisma)
6. History (Intelligence)
7. Insight (Wisdom)
8. Intimidation (Charisma)
9. Investigation (Intelligence)
10. Medicine (Wisdom)
11. Nature (Intelligence)
12. Perception (Wisdom)
13. Performance (Charisma)
14. Persuasion (Charisma)
15. Religion (Intelligence)
16. Sleight of Hand (Dexterity)
17. Stealth (Dexterity)
18. Survival (Wisdom)
Proficency Bonus{
1-4: +2
5-8: +3
9-12: +4
13-16: +5
17-20: +6
}
Calculation Modifier=(stat-10)/2
Armour Class{
Base-AC 10 (can be modified by your class)
Dexterity-bonus plus dex (can by limited by your armour)
Armour-Bonus 0 (if not stated different in the item)
Shield: +2
}
# Example Calculation 10+3+0+2=15 --> AC=15
HP{
Hit-dice (definied by class)
Char-Level multiplier
Con-modifier
}
#Calculation= level*(hitdice+con-modifier)
# spellsave-dc-calculation = (10+level+magic-modifier)

View file

@ -1,39 +0,0 @@
# Will be enbeded in an open source Dynamik online tool later on
ToDo-List
1. Create a test map
1.1 Distance Manager
1.2 Tile creation
1.3 Limit walking per turn
1.4 Dynamik Field
2. Create test character 1-3
2.1 Base Stats
2.2 Race
2.3 Class
2.4 Background
2.5 Skill Checks
2.6 Saving throws
2.7 Dynamic AC
2.8 Dynamic HP
2.9 Inventory
2.10 pdf, odf, html export
3. Simulation Dice (20, 12, 00, 10, 8, 6, 4, 2)
3.1 20: For Attacks, Skill Checks, Saving Throws
3.2 12: Heavy Weapon Damage*
3.3 10: Two handed Weapon Damage*
3.4 00: Combined with 10 1-100, for special effects and loot tables
3.5 8: Weapon Damage*
3.6 6: short weapon damage*
3.7 4: Minor Weapon damage*
3.8 2: Coinflips, Gambling in game etc.
4. combat turns
4.1 Initiative System
4.2 Movement, Action, Bonus-action, reaction
5. Enemies
5.1 Stats
5.2 Attacks
5.3 HP
5.4 AC
5.5 Inventory
6. To be continiued

View file

@ -1,23 +1,22 @@
# Introducing freeTTRPG
# Introducing FreeTTRPG
# A Swiss Quality Project
## A Swiss "Quality" Project
# The Game
## The Game
Tired of the commercialization of tabletop role-playing games, we decided to take matters into our own hands. We're creating an open-source, community-driven TTRPG project that puts creativity and freedom back in the hands of players.
# Our Vision
## Our Goal
Our project offers a game engine with a solid foundation of basic content and story packs to get you started. But that's just the beginning. We're also providing a powerful content creator tool that allows users to craft their own custom content packs. With this tool, you'll be able to create your own rules, characters, items, spells, attacks, and much more.
# Your Content, Your Copyright
The best part? Everything you create with our tool is yours to own and control. We won't claim any copyright or ownership over your creations. You're free to share, modify, or use your content as you see fit.
# A Community-Driven Platform
## A Community-Driven Platform
We're building a platform where users can share their content packs with the community. While sharing is encouraged, it's not required. You can keep your creations private or share them with the world the choice is yours.
# Join the Movement
## Join us
We're excited to share freeTTRPG with the world and hope you'll join us on this journey. Together, let's create a TTRPG ecosystem that's open, inclusive, and driven by the passion of its community.
We're excited to share FreeTTRPG with the world and hope you'll join us on this journey. Together, let's create a TTRPG ecosystem that's open, inclusive, and driven by the passion of its community.
### Copyright Note:
The main game must be distributed as stated in the LICENSE file. Any content made for it can however be freely distributed under any license. Once we make the content creator for this game, any content made there will also be no restrictions on the content you make with that.

View file

@ -1,14 +0,0 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "chrome",
"request": "launch",
"name": "Open index.html",
"file": "c:\\Users\\lucab\\Desktop\\opendnd\\Website-draft\\index.html"
}
]
}

Binary file not shown.

View file

@ -1,73 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>openTTRPG</title>
<link rel="stylesheet" href="style.css" />
</head>
<body>
<header>
<div class="header-content">
<div class="project-name">openTTRPG</div>
<button class="burger-menu" onclick="toggleMenu()"></button>
<ul class="menu">
<li><a href="#section1">open a git console</a></li>
<li><a href="#section2">Go to our codeberg website</a></li>
<li><a href="#section3">git clone</a></li>
<li><a href="#section4">read through our license</a></li>
</ul>
</div>
</header>
<article>
<section id="section1">
<h1>open a git console</h1>
<p class="code-box">$ git init</p>
<p>Initialize an empty Git repository in the current directory.</p>
</section>
<section id="section2">
<h1>Go to our codeberg website</h1>
<a href="https://codeberg.org/Patrick_Pluto/opendnd">
<button type="button">Our source code</button>
</a>
<p class="code-box">
$ git clone https://codeberg.org/Patrick_Pluto/opendnd.git
</p>
<p>
Clone the openTTRPG repository from Codeberg to your local machine.
</p>
</section>
<section id="section3">
<h1>git clone</h1>
<p class="code-box">
$ git clone https://codeberg.org/Patrick_Pluto/opendnd.git
</p>
<p>
Clone the openTTRPG repository from Codeberg to your local machine.
</p>
</section>
<section id="section4">
<h1>move into the repository</h1>
<p class="code-box">$ cd opendnd</p>
<p>Display the contents of the license file (`LICENSE`).</p>
</section>
<section id="section5">
<h1>read through our license</h1>
<p class="code-box">$ cat LICENSE</p>
<p>Move the bash console into the newly created repository</p>
</section>
</article>
<script>
function toggleMenu() {
const menu = document.querySelector(".menu");
menu.classList.toggle("active");
}
</script>
</body>
</html>

View file

@ -1,121 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>freeTTRPG</title>
<link rel="stylesheet" href="style.css" />
</head>
<body>
<header>
<div class="header-content">
<div class="project-name">freeTTRPG</div>
<button class="burger-menu" onclick="toggleMenu()"></button>
<ul class="menu">
<li><a href="#section1">The Game</a></li>
<li><a href="#section2">Our Vision</a></li>
<li><a href="#section3">Copyright</a></li>
<li><a href="#section4">Platform</a></li>
<li><a href="#section5">Join Us</a></li>
<li><a href="#section6">Source Code</a></li>
<li><a href="#section7">Game Assets</a></li>
</ul>
</div>
</header>
<article>
<section id="section1">
<h1>The Game</h1>
<p>
Tired of the commercialization of tabletop role-playing games, we
decided to take matters into our own hands. We're creating an
open-source, community-driven TTRPG project that puts creativity and
freedom back in the hands of players.
</p>
<img src="assets/game.png" alt="current game version" />
<p>Current game version</p>
</section>
<section id="section2">
<h1>Our Vision</h1>
<p>
Our project offers a game engine with a solid foundation of basic
content and story packs to get you started. But that's just the
beginning. We're also providing a powerful content creator tool that
allows users to craft their own custom content packs. With this tool,
you'll be able to create your own rules, characters, items, spells,
attacks, and much more.
</p>
</section>
<section id="section3">
<h1>Copyright</h1>
<p>
The best part? Everything you create with our tool is yours to own and
control. We won't claim any copyright or ownership over your
creations. You're free to share, modify, or use your content as you
see fit.
</p>
</section>
<section id="section4">
<h1>Community-Driven Platform</h1>
<p>
We're building a platform where users can share their content packs
with the community. While sharing is encouraged, it's not required.
You can keep your creations private or share them with the world the
choice is yours.
</p>
</section>
<section id="section5">
<h1>Join Us</h1>
<p>
We're excited to share freeTTRPG with the world and hope you'll join
us on this journey. Together, let's create a TTRPG ecosystem that's
open, inclusive, and driven by the passion of its community.
</p>
</section>
<section id="section6">
<h1>Our Code</h1>
<a href="download.html" target="_blank"
><button type="button">Download</button></a
>
</section>
<section id="section7">
<h1>Our Game Assets</h1>
<ul class="cards flex">
<li class="card">
<img src="assets/gigachad.png" alt="Gigachad" />
<h3>Gigachad</h3>
<p>Our test human paladin on maximum level</p>
</li>
<li class="card">
<img src="assets/tharok.png" alt="Tharok" />
<h3>Tharok</h3>
<p>Our test human fighter on starting level</p>
</li>
<li class="card">
<img src="assets/water.png" alt="Water Texture" />
<h3>Water</h3>
<p>Our water texture that is incomplete</p>
</li>
<li class="card">
<img src="assets/grass.png" alt="Grass Texture" />
<h3>Grass</h3>
<p>Our grass texture that is incomplete</p>
</li>
</ul>
</section>
</article>
<script>
function toggleMenu() {
const menu = document.querySelector(".menu");
menu.classList.toggle("active");
}
</script>
</body>
</html>

View file

@ -1,194 +0,0 @@
/* Reset and global styles */
* {
box-sizing: border-box;
margin: 0;
padding: 0;
font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
transition: 0.5s;
}
/* Body styles */
body {
background-color: #f5f5f5;
background-image: url("img/KSS.jpeg");
background-repeat: no-repeat;
background-size: cover;
background-position: center;
background-attachment: fixed;
display: flex;
flex-direction: column;
align-items: center;
min-height: 100vh;
}
/* Header styles */
header {
background-color: rgba(0, 0, 0, 0.7);
padding: 10px;
width: 100%;
position: fixed;
top: 0;
left: 0;
z-index: 1000;
}
.header-content {
display: flex;
justify-content: space-between;
align-items: center;
max-width: 1200px;
margin: 0 auto;
}
.project-name {
color: white;
font-size: 1.5em;
}
.burger-menu {
background: none;
border: none;
color: white;
font-size: 1.5em;
cursor: pointer;
display: none;
}
.menu {
list-style: none;
display: flex;
justify-content: space-around;
flex-grow: 1;
}
header li {
margin: 0 10px;
}
header a {
color: white;
text-decoration: none;
padding: 10px;
border-radius: 5px;
transition: background-color 0.3s ease;
}
header a:hover {
background-color: rgba(255, 255, 255, 0.2);
}
/* Article styles */
article {
margin-top: 100px;
padding: 20px;
width: 90%;
max-width: 800px;
background: rgba(255, 255, 255, 0.9);
border-radius: 10px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
text-align: center;
}
h1 {
color: #333;
margin-bottom: 20px;
}
p {
color: #666;
line-height: 1.6;
margin-bottom: 20px;
}
img {
max-width: 100%;
height: auto;
margin-bottom: 20px;
}
button {
padding: 10px 20px;
margin: 2em;
border: none;
background-color: #333;
color: white;
border-radius: 5px;
cursor: pointer;
transition: background-color 0.3s ease;
}
button:hover {
background-color: #555;
}
/* Additional CSS for command-line style */
.code-box {
background-color: #f0f0f0;
font-family: "Courier New", Courier, monospace;
padding: 10px;
border-left: 4px solid #555;
margin-left: 20px;
}
.flex {
display: flex;
align-items: center;
}
/* Cards section styles */
section .cards {
margin-top: 50px;
flex-wrap: wrap;
justify-content: space-between;
}
section .card {
width: calc(100% / 3 - 30px);
text-align: center;
list-style: none;
background-color: #fff;
padding: 40px 15px;
border-radius: 5px;
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.04);
margin-bottom: 20px;
}
section .card img {
height: 120px;
width: 120px;
border-radius: 50%;
margin-bottom: 20px;
}
/* Mobile Styles */
@media (max-width: 768px) {
.burger-menu {
display: block;
}
.menu {
display: none;
flex-direction: column;
background-color: rgba(0, 0, 0, 0.7);
position: absolute;
top: 50px;
left: 0;
width: 100%;
z-index: 999; /* Adjusted z-index to ensure dropdown covers article content */
}
.menu.active {
display: flex;
}
header li {
margin: 0;
width: 100%;
}
header a {
padding: 15px;
width: 100%;
display: block;
}
}

View file

@ -1,46 +0,0 @@
Charackter1{
Name: Björn
Race: Dwarf
Class: Mage (Level 1)
Stats{
STR 8 -1
DEX 12 +1
CON 10 -0
INT 16 +3
WIS 14 +2
CHA 12 +1
}
Proficency{Arcana, History, Nature}
Movement: 30
Action: Cast a spell (watch spelllist)
Bonus-action:
Dagger: +dex+prof 1d4 5
Dodge: Damage-halved
Reaction:
Counterspell: Watch Spellist
reduce-harm: Reduce damage taken by a ally by 1d10+level
Race-feature{
Dwarfen-resistance: Poison Damage halved
Healing-Word ability
reduce-harm
}
Spellslots: 3x Longrest
Spelllist{
Level 0 (At Will Spells):
Name Bonus to hit Damage Damagetype reach
Firedagger +int+prof 1d10+int fire 120
Icedagger +int+prof 1d10+int ice 120
Mage-shield - 10 Temporary HP - self
Level 1:
Create-flame Dex-save 3d6 fire 80 / 20 radius
Healing-word - 1d8 heal 30
Counterspell If roll higher than enemy == enemy spells doesn't work 30
}
}

View file

@ -1,44 +0,0 @@
Character2 {
Name: Elara
Race: Elf
Class: Ranger (Level 1)
Stats {
STR 10 +0
DEX 14 +2
CON 12 +1
INT 10 +0
WIS 16 +3
CHA 8 -1
}
Proficiency { Animal Handling, Stealth, Survival }
Movement: 35
Action: Shoot Longbow (watch weaponlist)
Bonus-action:
Dagger: +dex+prof 1d4+2
Hide: Become invisible
Reaction:
Parry: Reduce damage taken by 1d6+level
Race-feature {
Elven-Agility: Advantage on DEX saves
Trance: Elves don't need to sleep and meditate for 4 hours
Fey-Ancestry: Advantage on saving throws against being charmed, and magic can't put you to sleep
}
Spellslots: 2x Longrest
Spelllist {
Level 0 (At Will Spells):
Name Bonus to hit Damage Damagetype reach
Thornwhip +wis+prof 1d6+wis piercing 30
Mage-hand - - - 30
Guidance - 1d4 - touch
Level 1:
Goodberry - 1d4 heal 30
Hunter's-Mark - 1d6 magic 90
Entangle STR-save - Restrained 20 / 20 radius
}
}

View file

@ -1,72 +0,0 @@
Character5 {
Name: Gigachad
Race: Human
Class: Paladin (Level 20)
Stats {
STR 20 +5
DEX 14 +2
CON 18 +4
INT 10 +0
WIS 14 +2
CHA 20 +5
}
Proficiency { Athletics, Intimidation, Persuasion, Religion }
Movement: 30
Action: Attack with Greatsword (watch weaponlist)
Bonus-action:
Divine Smite: Expend a spell slot to deal extra radiant damage
Shield of Faith: +2 AC for 10 minutes
Lay on Hands: Heal up to 100 HP (pool: level x 5)
Reaction:
Divine Sense: Detect celestial, fiend, or undead within 60 feet
Aura of Protection: Allies within 10 feet add +cha to saving throws
Race-feature {
Human-Determination: Gain proficiency in one additional skill
Versatility: Gain one extra feat at Level 1
Resilience: Advantage on saving throws against being frightened
}
Feats:
Great Weapon Master: Bonus attack on critical hit or kill, and can take a -5 penalty to hit for +10 damage
Tough: +2 HP per level
Inspiring Leader: Can spend 10 minutes inspiring allies, granting temporary HP equal to level + cha modifier
Class Features:
Divine Health: Immune to disease
Aura of Courage: Allies within 10 feet are immune to being frightened
Aura of Devotion: Allies within 10 feet are immune to being charmed
Cleansing Touch: End one spell on yourself or an ally within touch range (5 times per long rest)
Improved Divine Smite: +1d8 radiant damage on melee attacks
Lay on Hands: Heal up to 100 HP per long rest
Sacred Oath: Oath of Devotion, Oath Spells: (Protection from Evil and Good, Sanctuary, Lesser Restoration, Zone of Truth, Beacon of Hope, Dispel Magic, Freedom of Movement, Guardian of Faith, Commune, Flame Strike, Circle of Power, Holy Weapon)
Spellslots: 4x 1st, 3x 2nd, 3x 3rd, 3x 4th, 2x 5th (per long rest)
Spelllist {
Level 1:
Bless - - adv on attacks and saves 30
Shield of Faith - +2 AC - 60
Level 2:
Lesser Restoration- - heal conditions touch
Zone of Truth - - - 60
Level 3:
Dispel Magic - - - 120
Beacon of Hope - - heal max 30
Level 4:
Guardian of Faith- 20 radiant - 30
Freedom of Movement- - - touch
Level 5:
Circle of Power - - adv on saves self (30 radius)
Holy Weapon - 2d8 radiant - 30
}
Weaponlist {
Greatsword: +str+prof 2d6+5 slashing
Warhammer: +str+prof 1d8+5 bludgeoning (versatile 1d10)
Javelin: +str+prof 1d6+5 piercing (range 30/120)
}
}

View file

@ -1,45 +0,0 @@
Character4 {
Name: Lyra
Race: Tiefling
Class: Bard (Level 1)
Stats {
STR 8 -1
DEX 14 +2
CON 12 +1
INT 12 +1
WIS 10 +0
CHA 16 +3
}
Proficiency { Performance, Persuasion, Deception }
Movement: 30
Action: Cast a spell (watch spelllist)
Bonus-action:
Inspiration: Grant a d6 to an ally's ability check, attack roll, or saving throw
Dagger: +dex+prof 1d4+2
Healing Word: Restore 1d4+cha HP to an ally within 60 feet
Reaction:
Cutting Words: Use a Bardic Inspiration die to subtract from an enemy's attack roll, ability check, or damage roll
Race-feature {
Hellish Resistance: Resistance to fire damage
Infernal Legacy: Can cast Thaumaturgy cantrip; at 3rd level, can cast Hellish Rebuke once per long rest
Darkvision: See in darkness within 60 feet
}
Spellslots: 2x Longrest
Spelllist {
Level 0 (At Will Spells):
Name Bonus to hit Damage Damagetype reach
Vicious Mockery - 1d4 psychic 60
Mending - - - touch
Prestidigitation- - - 10
Level 1:
Healing Word - 1d4+cha heal 60
Faerie Fire Dex-save - adv on attacks 20 ft cube
Charm Person Wis-save - charmed 30
}
}

View file

@ -1,43 +0,0 @@
Character3 {
Name: Tharok
Race: Human
Class: Fighter (Level 1)
Stats {
STR 16 +3
DEX 12 +1
CON 14 +2
INT 10 +0
WIS 12 +1
CHA 10 +0
}
Proficiency { Athletics, Intimidation, Perception }
Movement: 30
Action: Attack with Longsword (watch weaponlist)
Bonus-action:
Second Wind: Regain 1d10+level HP
Dagger: +dex+prof 1d4+1
Reaction:
Parry: Reduce damage taken by 1d6+level
Race-feature {
Human-Determination: Gain proficiency in one additional skill
Versatility: Gain one extra feat at Level 1
Resilience: Advantage on saving throws against being frightened
}
Feats:
Great Weapon Fighting: Reroll 1s and 2s on damage dice with melee weapons wielded in two hands
Combat Skills:
Second Wind: Once per short rest, you can use a bonus action to regain 1d10+level HP
Action Surge: Once per short rest, take one additional action on your turn
Weaponlist {
Longsword: +str+prof 1d8+3 slashing
Greatsword: +str+prof 2d6+3 slashing
Dagger: +dex+prof 1d4+1 piercing
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 508 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 461 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 540 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

62
export_presets.cfg Normal file
View file

@ -0,0 +1,62 @@
[preset.0]
name="Windows Desktop"
platform="Windows Desktop"
runnable=true
dedicated_server=false
custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter=""
export_path="../Desktop/debug.exe"
encryption_include_filters=""
encryption_exclude_filters=""
encrypt_pck=false
encrypt_directory=false
[preset.0.options]
custom_template/debug=""
custom_template/release=""
debug/export_console_wrapper=1
binary_format/embed_pck=false
texture_format/bptc=true
texture_format/s3tc=true
texture_format/etc=false
texture_format/etc2=false
binary_format/architecture="x86_64"
codesign/enable=false
codesign/timestamp=true
codesign/timestamp_server_url=""
codesign/digest_algorithm=1
codesign/description=""
codesign/custom_options=PackedStringArray()
application/modify_resources=true
application/icon=""
application/console_wrapper_icon=""
application/icon_interpolation=4
application/file_version=""
application/product_version=""
application/company_name=""
application/product_name=""
application/file_description=""
application/copyright=""
application/trademarks=""
application/export_angle=0
ssh_remote_deploy/enabled=false
ssh_remote_deploy/host="user@host_ip"
ssh_remote_deploy/port="22"
ssh_remote_deploy/extra_args_ssh=""
ssh_remote_deploy/extra_args_scp=""
ssh_remote_deploy/run_script="Expand-Archive -LiteralPath '{temp_dir}\\{archive_name}' -DestinationPath '{temp_dir}'
$action = New-ScheduledTaskAction -Execute '{temp_dir}\\{exe_name}' -Argument '{cmd_args}'
$trigger = New-ScheduledTaskTrigger -Once -At 00:00
$settings = New-ScheduledTaskSettingsSet
$task = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings
Register-ScheduledTask godot_remote_debug -InputObject $task -Force:$true
Start-ScheduledTask -TaskName godot_remote_debug
while (Get-ScheduledTask -TaskName godot_remote_debug | ? State -eq running) { Start-Sleep -Milliseconds 100 }
Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue"
ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue
Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue
Remove-Item -Recurse -Force '{temp_dir}'"

View file

@ -1 +0,0 @@
<svg height="128" width="128" xmlns="http://www.w3.org/2000/svg"><rect x="2" y="2" width="124" height="124" rx="14" fill="#363d52" stroke="#212532" stroke-width="4"/><g transform="scale(.101) translate(122 122)"><g fill="#fff"><path d="M105 673v33q407 354 814 0v-33z"/><path d="m105 673 152 14q12 1 15 14l4 67 132 10 8-61q2-11 15-15h162q13 4 15 15l8 61 132-10 4-67q3-13 15-14l152-14V427q30-39 56-81-35-59-83-108-43 20-82 47-40-37-88-64 7-51 8-102-59-28-123-42-26 43-46 89-49-7-98 0-20-46-46-89-64 14-123 42 1 51 8 102-48 27-88 64-39-27-82-47-48 49-83 108 26 42 56 81zm0 33v39c0 276 813 276 814 0v-39l-134 12-5 69q-2 10-14 13l-162 11q-12 0-16-11l-10-65H446l-10 65q-4 11-16 11l-162-11q-12-3-14-13l-5-69z" fill="#478cbf"/><path d="M483 600c0 34 58 34 58 0v-86c0-34-58-34-58 0z"/><circle cx="725" cy="526" r="90"/><circle cx="299" cy="526" r="90"/></g><g fill="#414042"><circle cx="307" cy="532" r="60"/><circle cx="717" cy="532" r="60"/></g></g></svg>

Before

Width:  |  Height:  |  Size: 949 B

View file

@ -1,37 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://crc6uo0vyn40q"
path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://icon.svg"
dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View file

@ -10,8 +10,8 @@ config_version=5
[application]
config/name="openDND"
run/main_scene="res://scenes/test/map.tscn"
config/name="FreeTTRPG"
run/main_scene="res://scenes/menu/main.tscn"
config/features=PackedStringArray("4.2", "GL Compatibility")
config/icon="res://icon.svg"
@ -44,6 +44,11 @@ down={
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"echo":false,"script":null)
]
}
escape={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194305,"key_label":0,"unicode":0,"echo":false,"script":null)
]
}
[rendering]

30
scenes/map/map.tscn Normal file
View file

@ -0,0 +1,30 @@
[gd_scene load_steps=3 format=3 uid="uid://mie5ckydb8k5"]
[ext_resource type="PackedScene" uid="uid://brmtkn1ddxrp1" path="res://testing/test/level.tscn" id="1_sw0jh"]
[ext_resource type="PackedScene" uid="uid://btl7r0wvecyd3" path="res://scenes/menu/view.tscn" id="2_7des0"]
[node name="map" type="Node2D"]
[node name="level" parent="." instance=ExtResource("1_sw0jh")]
[node name="characterViewer" parent="." instance=ExtResource("2_7des0")]
visible = false
anchors_preset = 0
anchor_right = 0.0
anchor_bottom = 0.0
offset_right = 800.0
offset_bottom = 500.0
grow_horizontal = 1
grow_vertical = 1
[node name="back" type="Button" parent="."]
visible = false
offset_left = 512.0
offset_top = 400.0
offset_right = 638.0
offset_bottom = 435.0
scale = Vector2(2, 2)
disabled = true
text = "Back to game"
[connection signal="pressed" from="back" to="level" method="_on_back_pressed"]

39
scenes/menu/create.tscn Normal file
View file

@ -0,0 +1,39 @@
[gd_scene load_steps=2 format=3 uid="uid://b6t6yd7qnid1i"]
[ext_resource type="Script" path="res://scripts/createStats.gd" id="1_xsj3b"]
[node name="characterCreator" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_xsj3b")
[node name="button" type="Button" parent="."]
layout_mode = 0
offset_left = 512.0
offset_top = 400.0
offset_right = 638.0
offset_bottom = 435.0
scale = Vector2(2, 2)
text = "Send"
[node name="ScrollContainer" type="ScrollContainer" parent="."]
layout_mode = 1
anchors_preset = 13
anchor_left = 0.5
anchor_right = 0.5
anchor_bottom = 1.0
offset_left = -400.0
offset_right = 104.0
grow_horizontal = 2
grow_vertical = 2
[node name="VBoxContainer" type="VBoxContainer" parent="ScrollContainer"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
[connection signal="pressed" from="button" to="." method="_on_button_pressed"]

View file

@ -0,0 +1,6 @@
[gd_scene format=3 uid="uid://rkl6u7cdusys"]
[node name="Input-output" type="TextEdit"]
offset_right = 168.0
offset_bottom = 40.0
scale = Vector2(2, 2)

View file

@ -2,22 +2,48 @@
[ext_resource type="Script" path="res://scripts/menu.gd" id="1_xc6y7"]
[node name="Control" type="Control"]
[node name="mainMenu" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_xc6y7")
[node name="Button" type="Button" parent="."]
layout_mode = 0
offset_left = 3.05176e-05
offset_top = 1.52588e-05
offset_right = 90.0
offset_right = 96.0
offset_bottom = 32.0
scale = Vector2(5, 5)
text = "Test"
script = ExtResource("1_xc6y7")
scale = Vector2(4, 4)
text = "Play"
[connection signal="pressed" from="Button" to="Button" method="_on_pressed"]
[node name="Button2" type="Button" parent="."]
layout_mode = 0
offset_top = 184.0
offset_right = 96.0
offset_bottom = 216.0
scale = Vector2(4, 4)
text = "View
"
[node name="Button3" type="Button" parent="."]
layout_mode = 0
offset_top = 368.0
offset_right = 96.0
offset_bottom = 400.0
scale = Vector2(4, 4)
text = "Creator"
[node name="Label" type="Label" parent="."]
layout_mode = 0
offset_left = 488.0
offset_top = 432.0
offset_right = 592.0
offset_bottom = 455.0
scale = Vector2(3, 3)
text = "Version: 0.0.4"
[connection signal="pressed" from="Button" to="." method="_on_button_pressed"]
[connection signal="pressed" from="Button2" to="." method="_on_button_2_pressed"]
[connection signal="pressed" from="Button3" to="." method="_on_button_3_pressed"]

39
scenes/menu/view.tscn Normal file
View file

@ -0,0 +1,39 @@
[gd_scene load_steps=2 format=3 uid="uid://btl7r0wvecyd3"]
[ext_resource type="Script" path="res://scripts/getStats.gd" id="1_dcehj"]
[node name="characterViewer" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_dcehj")
[node name="button" type="Button" parent="."]
layout_mode = 2
offset_left = 512.0
offset_top = 400.0
offset_right = 638.0
offset_bottom = 435.0
scale = Vector2(2, 2)
text = "Get"
[node name="ScrollContainer" type="ScrollContainer" parent="."]
layout_mode = 1
anchors_preset = 13
anchor_left = 0.5
anchor_right = 0.5
anchor_bottom = 1.0
offset_left = -400.0
offset_right = 104.0
grow_horizontal = 2
grow_vertical = 2
[node name="VBoxContainer" type="VBoxContainer" parent="ScrollContainer"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
[connection signal="pressed" from="button" to="." method="_on_button_pressed"]

View file

@ -1,18 +0,0 @@
[gd_scene load_steps=4 format=3 uid="uid://dv67vdgb4h44q"]
[ext_resource type="Texture2D" uid="uid://dheqglouhkis6" path="res://assets/test/player.png" id="1_cujcj"]
[ext_resource type="Script" path="res://scripts/player.gd" id="1_oik63"]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_kf6qt"]
size = Vector2(20, 18)
[node name="CharacterBody2D" type="CharacterBody2D"]
script = ExtResource("1_oik63")
[node name="Sprite2D" type="Sprite2D" parent="."]
texture = ExtResource("1_cujcj")
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
shape = SubResource("RectangleShape2D_kf6qt")
[node name="Camera2D" type="Camera2D" parent="."]

54
scripts/createStats.gd Normal file
View file

@ -0,0 +1,54 @@
extends Node
var field = preload("res://scenes/menu/inputOutput.tscn")
var data:Dictionary
func loadJSON(savePath):
if not FileAccess.file_exists(savePath):
return false
var fileAccess = FileAccess.open(savePath, FileAccess.READ)
var jsonString = fileAccess.get_line()
fileAccess.close()
var json = JSON.new()
var error = json.parse(jsonString)
if error:
print("JSON Parse Error: ", json.get_error_message(), " in ", jsonString, " at line ", json.get_error_line())
return false
data = json.data
return true
func _ready():
if loadJSON("res://content/stats.json"):
for i in range(int(data.get("amount"))):
var fieldInstance = field.instantiate()
$"ScrollContainer/VBoxContainer".add_child(fieldInstance)
$"ScrollContainer/VBoxContainer".get_child(i).position = Vector2(16,(16+i*88))
$"ScrollContainer/VBoxContainer".get_child(i).placeholder_text = data.get(str(i))
$"ScrollContainer/VBoxContainer".get_child(i).custom_minimum_size.y = 40
func saveJSON(savePath):
var saveData = {}
for i in range(int(data.get("amount"))):
if i > 0:
saveData[data.get(str(i))] = $"ScrollContainer/VBoxContainer".get_child(i).text
var jsonString = JSON.stringify(saveData)
var fileAccess = FileAccess.open(savePath, FileAccess.WRITE)
if not fileAccess:
print("An error happened while saving data: ", FileAccess.get_open_error())
return
fileAccess.store_line(jsonString)
fileAccess.close()
func _on_button_pressed():
var savePath = str("user://player_data"+$"ScrollContainer/VBoxContainer".get_child(0).text+".json")
saveJSON(savePath)
func _process(delta):
if Input.is_action_pressed("escape"):
get_tree().change_scene_to_file("res://scenes/menu/main.tscn")

46
scripts/getStats.gd Normal file
View file

@ -0,0 +1,46 @@
extends Node
var field = preload("res://scenes/menu/inputOutput.tscn")
var data:Dictionary
var amount
func loadJSON(savePath):
if not FileAccess.file_exists(savePath):
return false
var fileAccess = FileAccess.open(savePath, FileAccess.READ)
var json_string = fileAccess.get_line()
fileAccess.close()
var json = JSON.new()
var error = json.parse(json_string)
if error:
print("JSON Parse Error: ", json.get_error_message(), " in ", json_string, " at line ", json.get_error_line())
return false
data = json.data
return true
func _ready():
if loadJSON("res://content/stats.json"):
for i in range(int(data.get("amount"))):
var fieldInstance = field.instantiate()
$"ScrollContainer/VBoxContainer".add_child(fieldInstance)
$"ScrollContainer/VBoxContainer".get_child(i).placeholder_text = data.get(str(i))
$"ScrollContainer/VBoxContainer".get_child(i).custom_minimum_size.y = 40
if i > 0:
$"ScrollContainer/VBoxContainer".get_child(i).editable = false
amount = data.get("amount")
func _on_button_pressed():
var savePath = str("user://player_data"+$"ScrollContainer/VBoxContainer".get_child(0).text+".json")
if loadJSON(savePath):
for i in range(int(amount)-1):
$"ScrollContainer/VBoxContainer".get_child(i+1).text = data.get(str($"ScrollContainer/VBoxContainer".get_child(i+1).placeholder_text))
func _process(_delta):
if Input.is_action_pressed("escape"):
get_tree().change_scene_to_file("res://scenes/menu/main.tscn")
func hideGet():
$button.visible = false
$button.disabled = true

37
scripts/mapscript.gd Normal file
View file

@ -0,0 +1,37 @@
extends Node2D
var playerAmount=2
var playerIndex=0
var objectName
func _ready():
$"../characterViewer".hideGet()
next()
func next():
if playerIndex >= playerAmount:
playerIndex = 0
objectName= "player%d" % playerIndex
print(objectName)
get_node(objectName).start()
playerIndex += 1
func stats():
visible = false
$"../characterViewer".visible = true
get_node(objectName).stop()
$"../back".disabled = false
$"../back".visible = true
$"../characterViewer/ScrollContainer/VBoxContainer".get_child(0).text = str(playerIndex-1)
$"../characterViewer/ScrollContainer/VBoxContainer".get_child(0).editable = false
$"../characterViewer"._on_button_pressed()
func restart():
visible = true
$"../characterViewer".visible = false
get_node(objectName).start()
$"../back".disabled = true
$"../back".visible = false
func _on_back_pressed():
restart()

View file

@ -1,4 +1,14 @@
extends Node
func _on_pressed():
get_tree().change_scene_to_file("res://scenes/test/map.tscn")
func _on_button_pressed():
get_tree().change_scene_to_file("res://scenes/map/map.tscn")
func _on_button_2_pressed():
get_tree().change_scene_to_file("res://scenes/menu/view.tscn")
func _on_button_3_pressed():
get_tree().change_scene_to_file("res://scenes/menu/create.tscn")

View file

@ -1,11 +1,39 @@
extends CharacterBody2D
@export var speed = 200
var distanceTo = 0
var active = false
func get_input():
if Input.is_action_pressed("escape"):
get_tree().change_scene_to_file("res://scenes/menu/main.tscn")
var input_direction = Input.get_vector("left", "right", "up", "down")
velocity = input_direction * speed
func _physics_process(delta):
get_input()
move_and_slide()
var toCalculate = position
if active:
get_input()
move_and_slide()
distanceTo += position.distance_to(toCalculate)
print(distanceTo)
if distanceTo > 500 and active:
stop()
distanceTo = 0
get_parent().next()
func start():
$camera.enabled = true
active = true
$stats.disabled = false
$stats.visible = true
func stop():
$camera.enabled = false
active = false
$stats.disabled = true
$stats.visible = false
func _on_stats_pressed():
get_parent().stats()

File diff suppressed because one or more lines are too long

31
testing/test/player.tscn Normal file
View file

@ -0,0 +1,31 @@
[gd_scene load_steps=4 format=3 uid="uid://dv67vdgb4h44q"]
[ext_resource type="Texture2D" uid="uid://dheqglouhkis6" path="res://testing/testAssets/player.png" id="1_cujcj"]
[ext_resource type="Script" path="res://scripts/player.gd" id="1_oik63"]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_kf6qt"]
size = Vector2(20, 18)
[node name="player" type="CharacterBody2D"]
script = ExtResource("1_oik63")
[node name="sprite" type="Sprite2D" parent="."]
texture = ExtResource("1_cujcj")
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
shape = SubResource("RectangleShape2D_kf6qt")
[node name="camera" type="Camera2D" parent="."]
enabled = false
[node name="stats" type="Button" parent="."]
visible = false
offset_left = 112.0
offset_top = 152.0
offset_right = 238.0
offset_bottom = 187.0
scale = Vector2(2, 2)
disabled = true
text = "Stats"
[connection signal="pressed" from="stats" to="." method="_on_stats_pressed"]

View file

After

Width:  |  Height:  |  Size: 508 B

View file

@ -2,16 +2,16 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://cjt5fedr54w6u"
path="res://.godot/imported/gigachad.png-0332640cb704dbcf450ac0f1e305a5f8.ctex"
uid="uid://slau07w56ipp"
path="res://.godot/imported/gigachad.png-950f249fad71ecb8cb5ffe1b8e0aaa85.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/test/gigachad.png"
dest_files=["res://.godot/imported/gigachad.png-0332640cb704dbcf450ac0f1e305a5f8.ctex"]
source_file="res://testing/testAssets/gigachad.png"
dest_files=["res://.godot/imported/gigachad.png-950f249fad71ecb8cb5ffe1b8e0aaa85.ctex"]
[params]

View file

After

Width:  |  Height:  |  Size: 1.8 KiB

View file

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bgdgd23qgi52x"
path="res://.godot/imported/grass.png-bb6d7e2a4e3a4ad0eb76f57232766d96.ctex"
path="res://.godot/imported/grass.png-9d67070b94003a4c9ef0fabcfb53d979.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/test/grass.png"
dest_files=["res://.godot/imported/grass.png-bb6d7e2a4e3a4ad0eb76f57232766d96.ctex"]
source_file="res://testing/testAssets/grass.png"
dest_files=["res://.godot/imported/grass.png-9d67070b94003a4c9ef0fabcfb53d979.ctex"]
[params]

View file

After

Width:  |  Height:  |  Size: 461 B

View file

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://dheqglouhkis6"
path="res://.godot/imported/player.png-40bc1da34d1da22b834e701c7257e718.ctex"
path="res://.godot/imported/player.png-a3dc637dcfcac9b2cc12965322007c1c.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/test/player.png"
dest_files=["res://.godot/imported/player.png-40bc1da34d1da22b834e701c7257e718.ctex"]
source_file="res://testing/testAssets/player.png"
dest_files=["res://.godot/imported/player.png-a3dc637dcfcac9b2cc12965322007c1c.ctex"]
[params]

BIN
testing/testAssets/sand.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 326 B

View file

After

Width:  |  Height:  |  Size: 540 B

View file

@ -2,16 +2,16 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://jdhx6w38ifh7"
path="res://.godot/imported/tharok.png-154bb81c083d35fa46f266b3cfa46578.ctex"
uid="uid://bgwtew3kupb5c"
path="res://.godot/imported/tharok.png-60f89b581d56d7a95618ce50dd583112.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/test/tharok.png"
dest_files=["res://.godot/imported/tharok.png-154bb81c083d35fa46f266b3cfa46578.ctex"]
source_file="res://testing/testAssets/tharok.png"
dest_files=["res://.godot/imported/tharok.png-60f89b581d56d7a95618ce50dd583112.ctex"]
[params]

View file

After

Width:  |  Height:  |  Size: 2.6 KiB

View file

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://chgkgpiiy1yui"
path="res://.godot/imported/water.png-294f741d71b412e0a6039d5110937f78.ctex"
path="res://.godot/imported/water.png-455790e486e896b50dab7d58df164d3a.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/test/water.png"
dest_files=["res://.godot/imported/water.png-294f741d71b412e0a6039d5110937f78.ctex"]
source_file="res://testing/testAssets/water.png"
dest_files=["res://.godot/imported/water.png-455790e486e896b50dab7d58df164d3a.ctex"]
[params]