dsa-4th-edition/zig/system.zig

245 lines
5.4 KiB
Zig

const foundry = @import("foundry.zig");
const String = []const u8;
pub const SYSTEM_NAME = "dsa-4th-edition";
pub const SYSTEM_VERSION = "0.1.5";
pub const ItemCompendium = foundry.Compendium(.Item, union(enum) {
const Entry = @This();
Folder: struct {
name: String,
entries: []const Entry,
},
Gegenstand: foundry.Item("Gegenstand", struct {
gewicht: Gewicht = .{ .value = 0, .unit = .stein },
preis: Preis = .{ .value = 0, .unit = .silbertaler },
}),
Ruestung: foundry.Item("Ruestung", struct {
angelegt: bool = false,
gewicht: Gewicht = .{ .value = 0, .unit = .stein },
preis: Preis = .{ .value = 0, .unit = .silbertaler },
kopf: u8 = 0,
brust: u8 = 0,
ruecken: u8 = 0,
bauch: u8 = 0,
linker_arm: u8 = 0,
rechter_arm: u8 = 0,
linkes_bein: u8 = 0,
rechtes_bein: u8 = 0,
gesamt_ruestungsschutz: f64 = 0,
gesamt_behinderung: f64 = 0,
}),
Bewaffnung: foundry.Item("Bewaffnung", struct {
angelegt: bool = false,
gewicht: Gewicht = .{ .value = 0, .unit = .stein },
preis: Preis = .{ .value = 0, .unit = .silbertaler },
nahkampfwaffe: struct {
aktiv: bool = false,
basis: String = "1d4",
schwellenwert: u8 = 0,
schadensschritte: u8 = 0,
modifikator_attacke: i8 = 0,
modifikator_parade: i8 = 0,
initiative: i8 = 0,
bruchfaktor: i8 = 0,
distanzklasse: String = "",
kampftalente: String = "",
laenge: Laenge = .{ .value = 0, .unit = .schritt },
zweihaendig: bool = false,
werfbar: bool = false,
improvisiert: bool = false,
priviligiert: bool = false,
} = .{},
parierwaffe: struct {
aktiv: bool = false,
modifikator_attacke: i8 = 0,
modifikator_parade: i8 = 0,
initiative: i8 = 0,
bruchfaktor: i8 = 0,
} = .{},
schild: struct {
aktiv: bool = false,
groesse: String = "klein",
modifikator_attacke: i8 = 0,
modifikator_parade: i8 = 0,
initiative: i8 = 0,
bruchfaktor: i8 = 0,
} = .{},
fernkampfwaffe: struct {
aktiv: bool = false,
basis: String = "1d6 + 1",
laden: u8 = 0,
reichweite1: u8 = 0,
reichweite2: u8 = 0,
reichweite3: u8 = 0,
reichweite4: u8 = 0,
reichweite5: u8 = 0,
modifikator1: ?i8 = null,
modifikator2: ?i8 = null,
modifikator3: ?i8 = null,
modifikator4: ?i8 = null,
modifikator5: ?i8 = null,
munitionskosten: u8 = 0,
munitionsgewicht: u8 = 0,
} = .{},
}),
Talent: foundry.Item("Talent", struct {
kategorie: enum {
koerperliche,
gesellschaftliche,
natur,
wissens,
handwerks,
} = .koerperliche,
behinderung: String = "",
attribute1: Attribute = .MU,
attribute2: Attribute = .MU,
attribute3: Attribute = .MU,
talentwert: u8 = 0,
}),
Kampftalent: foundry.Item("Kampftalent", struct {
kategorie: enum {
waffenlos,
nahkampf,
fernkampf,
} = .waffenlos,
steigern: enum {
A_Star,
A,
B,
C,
D,
E,
F,
G,
H,
} = .A_Star,
behinderung: String = "",
beschreibung: String = "",
talentwert: u8 = 0,
attacke: u8 = 0,
parade: u8 = 0,
}),
Sonderfertigkeit: foundry.Item("Sonderfertigkeit", struct {
kategorie: enum {
allgemein,
kampf,
magisch,
klerikal,
} = .allgemein,
kosten: u64 = 0,
verbreitung: u64 = 0,
beschreibung: String = "",
}),
VorNachteil: foundry.Item("VorNachteil", struct {
kategorie: enum {
vorteil,
nachteil
} = .vorteil,
kosten: u64 = 0,
beschreibung: String = "",
}),
});
const Attribute = enum {
MU,
KL,
IN,
CH,
FF,
GE,
KO,
KK,
pub fn jsonStringify(self: @This(), out: anytype) !void {
const attribute = switch (self) {
.MU => "courage",
.KL => "cleverness",
.IN => "intuition",
.CH => "charisma",
.FF => "dexterity",
.GE => "agility",
.KO => "constitution",
.KK => "strength",
};
try out.write(attribute);
}
};
const PreisUnit = enum {
kreuzer,
heller,
silbertaler,
dukaten,
};
const Preis = struct {
value: f64,
unit: PreisUnit,
};
const GewichtUnit = enum {
gran,
karat,
skrupel,
unze,
stein,
sack,
quader,
};
const Gewicht = struct {
value: f64,
unit: GewichtUnit,
};
const LaengeUnit = enum {
halbfinger,
finger,
spann,
schritt,
faden,
lot,
meile,
tagesreise,
baryd,
};
const Laenge = struct {
value: f64,
unit: LaengeUnit,
};