Initial commit.

This commit is contained in:
Tanner Van Teeffelen 2025-07-10 05:05:12 +00:00
commit 8ceb9a2dd8
41 changed files with 720 additions and 0 deletions

26
.vscode/launch.json vendored Normal file
View file

@ -0,0 +1,26 @@
{
"version": "0.2.0",
"configurations": [
{
// Use IntelliSense to find out which attributes exist for C# debugging
// Use hover for the description of the existing attributes
// For further information visit https://github.com/dotnet/vscode-csharp/blob/main/debugger-launchjson.md
"name": ".NET Core Launch (console)",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
// If you have changed target frameworks, make sure to update the program path.
"program": "${workspaceFolder}/bin/Debug/net8.0/MiniRPG.dll",
"args": [],
"cwd": "${workspaceFolder}",
// For more information about the 'console' field, see https://aka.ms/VSCode-CS-LaunchJson-Console
"console": "internalConsole",
"stopAtEntry": false
},
{
"name": ".NET Core Attach",
"type": "coreclr",
"request": "attach"
}
]
}

41
.vscode/tasks.json vendored Normal file
View file

@ -0,0 +1,41 @@
{
"version": "2.0.0",
"tasks": [
{
"label": "build",
"command": "dotnet",
"type": "process",
"args": [
"build",
"${workspaceFolder}/MiniRPG.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary;ForceNoAlign"
],
"problemMatcher": "$msCompile"
},
{
"label": "publish",
"command": "dotnet",
"type": "process",
"args": [
"publish",
"${workspaceFolder}/MiniRPG.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary;ForceNoAlign"
],
"problemMatcher": "$msCompile"
},
{
"label": "watch",
"command": "dotnet",
"type": "process",
"args": [
"watch",
"run",
"--project",
"${workspaceFolder}/MiniRPG.csproj"
],
"problemMatcher": "$msCompile"
}
]
}

43
Main.cs Normal file
View file

@ -0,0 +1,43 @@
using System;
using System.Linq;
using System.Collections.Generic;
using Microsoft.VisualBasic;
class Program
{
static void Main()
{
List<Item> allItems = ItemLoader.LoadAllItems("data/items.json");
Player user = new("Tanner", [], 100, 90, 20, 20);
Console.WriteLine($"{user.Name} has {user.CurrentHealth}/{user.MaxHealth} Hit Points.\n");
Console.WriteLine($"{user.Name} has {user.CurrentMPoints}/{user.MaxMPoints} Mana Points.\n");
user.Inventory.Add(allItems.FirstOrDefault(m => m.Name == "Potion"));
user.Inventory.Add(allItems.FirstOrDefault(m => m.Name == "Potion"));
user.Inventory.Add(allItems.FirstOrDefault(m => m.Name == "Potion"));
user.Inventory.Add(allItems.FirstOrDefault(m => m.Name == "Elixir"));
Console.WriteLine($"{user.Name}'s current inventory:");
foreach (var inv in user.RetrieveInventory())
{
Console.WriteLine($"{inv.Key}: {inv.Value}");
}
Console.WriteLine("Do you want to use your Potion? (Y/N)");
string input = Console.ReadLine().ToUpper();
if (input == "Y")
{
user.UseHealingItem((HealingItem)user.Inventory.FirstOrDefault(m => m.Name == "Potion"));
user.Inventory.Remove(user.Inventory.FirstOrDefault(m => m.Name == "Potion"));
}
Console.WriteLine($"{user.Name} has {user.CurrentHealth}/{user.MaxHealth} Hit Points.\n");
Console.WriteLine($"\n{user.Name}'s current inventory:");
foreach (var inv in user.RetrieveInventory())
{
Console.WriteLine($"{inv.Key}: {inv.Value}");
}
}
}

14
MiniRPG.csproj Normal file
View file

@ -0,0 +1,14 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
</ItemGroup>
</Project>

BIN
bin/Debug/net8.0/MiniRPG Executable file

Binary file not shown.

View file

@ -0,0 +1,41 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v8.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v8.0": {
"MiniRPG/1.0.0": {
"dependencies": {
"Newtonsoft.Json": "13.0.3"
},
"runtime": {
"MiniRPG.dll": {}
}
},
"Newtonsoft.Json/13.0.3": {
"runtime": {
"lib/net6.0/Newtonsoft.Json.dll": {
"assemblyVersion": "13.0.0.0",
"fileVersion": "13.0.3.27908"
}
}
}
}
},
"libraries": {
"MiniRPG/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
},
"Newtonsoft.Json/13.0.3": {
"type": "package",
"serviceable": true,
"sha512": "sha512-HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ==",
"path": "newtonsoft.json/13.0.3",
"hashPath": "newtonsoft.json.13.0.3.nupkg.sha512"
}
}
}

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,12 @@
{
"runtimeOptions": {
"tfm": "net8.0",
"framework": {
"name": "Microsoft.NETCore.App",
"version": "8.0.0"
},
"configProperties": {
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
}
}
}

Binary file not shown.

25
data/items.json Normal file
View file

@ -0,0 +1,25 @@
[
{
"Name": "Potion",
"Description": "Restores HP that have been lost in battle by 20 HP.",
"Type": "Healing",
"HealingAmount": 20
},
{
"Name": "Super Potion",
"Description": "Restores HP that have been lost in battle by 50 HP.",
"Type": "Healing",
"HealingAmount": 50
},
{
"Name": "Hyper Potion",
"Description": "Restores HP that have been lost in battle by 200 HP.",
"Type": "Healing",
"HealingAmount": 200
},
{
"Name": "Elixir",
"Description": "A simple potion.",
"Type": "Support"
}
]

24
data/moves.json Normal file
View file

@ -0,0 +1,24 @@
[
{
"Name": "Fireball",
"Description": "A burst of fire that burns the enemy.",
"Power": 40,
"ManaCost": 10,
"Type": "Attack"
},
{
"Name": "Heal",
"Description": "Restores a small amount of HP.",
"Power": 25,
"ManaCost": 5,
"Type": "Heal"
},
{
"Name": "Lightning Bolt",
"Description": "A shocking magical strike.",
"Power": 50,
"ManaCost": 15,
"Type": "Attack"
}
]

View file

@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")]

View file

@ -0,0 +1,22 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("MiniRPG")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
[assembly: System.Reflection.AssemblyProductAttribute("MiniRPG")]
[assembly: System.Reflection.AssemblyTitleAttribute("MiniRPG")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
// Generated by the MSBuild WriteCodeFragment class.

View file

@ -0,0 +1 @@
349b459bf4ade14fe01ed0c61903f28e8cbcd46aba882e73f23e247e57494e25

View file

@ -0,0 +1,13 @@
is_global = true
build_property.TargetFramework = net8.0
build_property.TargetPlatformMinVersion =
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property.EnforceExtendedAnalyzerRules =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.RootNamespace = MiniRPG
build_property.ProjectDir = /data/repos/MiniRPG/
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =

View file

@ -0,0 +1,8 @@
// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Threading;
global using global::System.Threading.Tasks;

Binary file not shown.

View file

@ -0,0 +1 @@
552d7776ba252b8ba7a98c694923b3d159470fb983c96ce88fa765b810f80c32

View file

@ -0,0 +1,17 @@
/data/repos/MiniRPG/bin/Debug/net8.0/MiniRPG
/data/repos/MiniRPG/bin/Debug/net8.0/MiniRPG.deps.json
/data/repos/MiniRPG/bin/Debug/net8.0/MiniRPG.runtimeconfig.json
/data/repos/MiniRPG/bin/Debug/net8.0/MiniRPG.dll
/data/repos/MiniRPG/bin/Debug/net8.0/MiniRPG.pdb
/data/repos/MiniRPG/bin/Debug/net8.0/Newtonsoft.Json.dll
/data/repos/MiniRPG/obj/Debug/net8.0/MiniRPG.csproj.AssemblyReference.cache
/data/repos/MiniRPG/obj/Debug/net8.0/MiniRPG.GeneratedMSBuildEditorConfig.editorconfig
/data/repos/MiniRPG/obj/Debug/net8.0/MiniRPG.AssemblyInfoInputs.cache
/data/repos/MiniRPG/obj/Debug/net8.0/MiniRPG.AssemblyInfo.cs
/data/repos/MiniRPG/obj/Debug/net8.0/MiniRPG.csproj.CoreCompileInputs.cache
/data/repos/MiniRPG/obj/Debug/net8.0/MiniRPG.csproj.Up2Date
/data/repos/MiniRPG/obj/Debug/net8.0/MiniRPG.dll
/data/repos/MiniRPG/obj/Debug/net8.0/refint/MiniRPG.dll
/data/repos/MiniRPG/obj/Debug/net8.0/MiniRPG.pdb
/data/repos/MiniRPG/obj/Debug/net8.0/MiniRPG.genruntimeconfig.cache
/data/repos/MiniRPG/obj/Debug/net8.0/ref/MiniRPG.dll

View file

Binary file not shown.

View file

@ -0,0 +1 @@
63738d25709d41611ed29f640f81025116589b3756c1a110496abf35e5d4d7d2

Binary file not shown.

BIN
obj/Debug/net8.0/apphost Executable file

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,72 @@
{
"format": 1,
"restore": {
"/data/repos/MiniRPG/MiniRPG.csproj": {}
},
"projects": {
"/data/repos/MiniRPG/MiniRPG.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "/data/repos/MiniRPG/MiniRPG.csproj",
"projectName": "MiniRPG",
"projectPath": "/data/repos/MiniRPG/MiniRPG.csproj",
"packagesPath": "/config/.nuget/packages/",
"outputPath": "/data/repos/MiniRPG/obj/",
"projectStyle": "PackageReference",
"configFilePaths": [
"/config/.nuget/NuGet/NuGet.Config"
],
"originalTargetFrameworks": [
"net8.0"
],
"sources": {
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net8.0": {
"targetAlias": "net8.0",
"projectReferences": {}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
},
"restoreAuditProperties": {
"enableAudit": "true",
"auditLevel": "low",
"auditMode": "direct"
}
},
"frameworks": {
"net8.0": {
"targetAlias": "net8.0",
"dependencies": {
"Newtonsoft.Json": {
"target": "Package",
"version": "[13.0.3, )"
}
},
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48",
"net481"
],
"assetTargetFallback": true,
"warn": true,
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "/data/dotnet/sdk/8.0.411/PortableRuntimeIdentifierGraph.json"
}
}
}
}
}

View file

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">/config/.nuget/packages/</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">/config/.nuget/packages/</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.11.1</NuGetToolVersion>
</PropertyGroup>
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<SourceRoot Include="/config/.nuget/packages/" />
</ItemGroup>
</Project>

View file

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" />

124
obj/project.assets.json Normal file
View file

@ -0,0 +1,124 @@
{
"version": 3,
"targets": {
"net8.0": {
"Newtonsoft.Json/13.0.3": {
"type": "package",
"compile": {
"lib/net6.0/Newtonsoft.Json.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net6.0/Newtonsoft.Json.dll": {
"related": ".xml"
}
}
}
}
},
"libraries": {
"Newtonsoft.Json/13.0.3": {
"sha512": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ==",
"type": "package",
"path": "newtonsoft.json/13.0.3",
"files": [
".nupkg.metadata",
".signature.p7s",
"LICENSE.md",
"README.md",
"lib/net20/Newtonsoft.Json.dll",
"lib/net20/Newtonsoft.Json.xml",
"lib/net35/Newtonsoft.Json.dll",
"lib/net35/Newtonsoft.Json.xml",
"lib/net40/Newtonsoft.Json.dll",
"lib/net40/Newtonsoft.Json.xml",
"lib/net45/Newtonsoft.Json.dll",
"lib/net45/Newtonsoft.Json.xml",
"lib/net6.0/Newtonsoft.Json.dll",
"lib/net6.0/Newtonsoft.Json.xml",
"lib/netstandard1.0/Newtonsoft.Json.dll",
"lib/netstandard1.0/Newtonsoft.Json.xml",
"lib/netstandard1.3/Newtonsoft.Json.dll",
"lib/netstandard1.3/Newtonsoft.Json.xml",
"lib/netstandard2.0/Newtonsoft.Json.dll",
"lib/netstandard2.0/Newtonsoft.Json.xml",
"newtonsoft.json.13.0.3.nupkg.sha512",
"newtonsoft.json.nuspec",
"packageIcon.png"
]
}
},
"projectFileDependencyGroups": {
"net8.0": [
"Newtonsoft.Json >= 13.0.3"
]
},
"packageFolders": {
"/config/.nuget/packages/": {}
},
"project": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "/data/repos/MiniRPG/MiniRPG.csproj",
"projectName": "MiniRPG",
"projectPath": "/data/repos/MiniRPG/MiniRPG.csproj",
"packagesPath": "/config/.nuget/packages/",
"outputPath": "/data/repos/MiniRPG/obj/",
"projectStyle": "PackageReference",
"configFilePaths": [
"/config/.nuget/NuGet/NuGet.Config"
],
"originalTargetFrameworks": [
"net8.0"
],
"sources": {
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net8.0": {
"targetAlias": "net8.0",
"projectReferences": {}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
},
"restoreAuditProperties": {
"enableAudit": "true",
"auditLevel": "low",
"auditMode": "direct"
}
},
"frameworks": {
"net8.0": {
"targetAlias": "net8.0",
"dependencies": {
"Newtonsoft.Json": {
"target": "Package",
"version": "[13.0.3, )"
}
},
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48",
"net481"
],
"assetTargetFallback": true,
"warn": true,
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "/data/dotnet/sdk/8.0.411/PortableRuntimeIdentifierGraph.json"
}
}
}
}

10
obj/project.nuget.cache Normal file
View file

@ -0,0 +1,10 @@
{
"version": 2,
"dgSpecHash": "JYcCbyoSKTw=",
"success": true,
"projectFilePath": "/data/repos/MiniRPG/MiniRPG.csproj",
"expectedPackageFiles": [
"/config/.nuget/packages/newtonsoft.json/13.0.3/newtonsoft.json.13.0.3.nupkg.sha512"
],
"logs": []
}

38
scripts/Player.cs Normal file
View file

@ -0,0 +1,38 @@
public class Player
{
public string Name { get; set; }
public List<Item> Inventory { get; set; }
public int MaxHealth { get; set; }
public int CurrentHealth { get; set; }
public int MaxMPoints { get; set; }
public int CurrentMPoints { get; set; }
public Player(string name, List<Item> inventory, int maxhealth, int currenthealth, int maxmpoints, int currentmpoints)
{
Name = name;
Inventory = inventory;
MaxHealth = maxhealth;
CurrentHealth = currenthealth;
MaxMPoints = maxmpoints;
CurrentMPoints = currentmpoints;
}
//Returns the players inventory in a Dictionary.
public Dictionary<string, int> RetrieveInventory()
{
return Inventory
.GroupBy(item => item.Name)
.ToDictionary(group => group.Key, group => group.Count());
}
//For using a healing item. Doesn't allow you to overheal.
public void UseHealingItem(HealingItem item)
{
if ((CurrentHealth + item.HealingAmount) > MaxHealth)
{
CurrentHealth = MaxHealth;
} else {
CurrentHealth += item.HealingAmount;
}
}
}

View file

@ -0,0 +1,44 @@
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
public class ItemConverter : JsonConverter<Item>
{
//Overrides the ReadJson function.
public override Item ReadJson(JsonReader reader, Type objectType, Item? existingValue, bool hasExistingValue, JsonSerializer serializer)
{
//Load the raw JSON object from the reader.
JObject obj = JObject.Load(reader);
// Read the "Type" field
string? type = obj["Type"]?.ToString();
//Create a temporary item object.
Item item;
//Uses the Type field to determine what kind of object to create, to allow for a mixed list.
switch (type)
{
case "Healing":
item = new HealingItem("", "", 0);
break;
case "Support":
item = new SupportItem("", "");
break;
default:
throw new JsonSerializationException($"Unknown item type: {type}");
}
// Populate the item with values from JSON
serializer.Populate(obj.CreateReader(), item);
return item;
}
//Overrides the default WriteJson method to allow for our different items.
public override void WriteJson(JsonWriter writer, Item? value, JsonSerializer serializer)
{
JObject obj = JObject.FromObject(value, serializer);
obj.WriteTo(writer);
}
}

View file

@ -0,0 +1,38 @@
using System;
using System.Collections.Generic;
using System.IO;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
public static class ItemLoader
{
public static List<Item> LoadAllItems(string path)
{
//Check to see if the file exists. If not, just create a blank List.
if (!File.Exists(path))
{
return new List<Item>();
}
//Dump the entirely of the file into a string.
string json = File.ReadAllText(path);
//Create a new variable with our custom JSON serializer settings that allows us to make mixed Lists.
var settings = new JsonSerializerSettings
{
Converters = { new ItemConverter() }
};
//Return a list with different Items mixed in, or return a blank list.
return JsonConvert.DeserializeObject<List<Item>>(json, settings) ?? new List<Item>();
}
//Returns all the HealingItems in a list.
public static List<HealingItem> LoadHealingItemsFromList(List<Item> input)
{
List<HealingItem> healingitems = input
.OfType<HealingItem>()
.ToList();
return healingitems;
}
}

View file

@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.IO;
using Newtonsoft.Json;
public static class MoveLoader
{
public static List<Move> LoadMoves(string path)
{
if (!File.Exists(path)){
Console.WriteLine("Move data file not found!");
return new List<Move>();
}
string json = File.ReadAllText(path);
List<Move> moves = JsonConvert.DeserializeObject<List<Move>>(json) ?? new List<Move>();
return moves ?? new List<Move>();
}
}

22
scripts/objects/Move.cs Normal file
View file

@ -0,0 +1,22 @@
public class Move
{
public string Name { get; set; }
public string Description { get; set; }
public int Power { get; set; }
public int MPCost { get; set; }
public MoveType Type { get; set; }
public enum MoveType {
Attack,
Heal,
Buff
}
public Move(string name, string description, int power, int mpcost, MoveType type){
Name = name;
Description = description;
Power = power;
MPCost = mpcost;
Type = type;
}
}

View file

@ -0,0 +1,13 @@
public class HealingItem : Item
{
public int HealingAmount { get; set; }
public override string Type => "Healing";
public HealingItem(string name, string description, int healingamount) : base(name, description){
HealingAmount = healingamount;
}
public override void Action()
{
Console.WriteLine("Healing item has been used");
}
}

View file

@ -0,0 +1,17 @@
public class Item
{
public string Name { get; set; }
public string Description { get; set; }
public int Amount { get; set; }
public virtual string Type { get; set; }
public virtual void Action()
{
Console.WriteLine("Item has been used");
}
public Item(string name, string description){
Name = name;
Description = description;
}
}

View file

@ -0,0 +1,13 @@
public class SupportItem : Item
{
public override string Type => "Support";
public SupportItem(string name, string description) : base(name, description)
{
}
public override void Action()
{
Console.WriteLine("Healing item has been used");
}
}