245 lines
5.4 KiB
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,
|
|
};
|