diff --git a/assets/cubyz/blocks/amber_ore.zig.zon b/assets/cubyz/blocks/amber_ore.zig.zon index 1207f88ff9..6a996c534e 100644 --- a/assets/cubyz/blocks/amber_ore.zig.zon +++ b/assets/cubyz/blocks/amber_ore.zig.zon @@ -16,7 +16,7 @@ .modifiers = .{ .{ .id = "light", - .strength = 0.5, + .multStrength = 0.5, .restriction = .{ .id = .encased, .tag = .precious, diff --git a/assets/cubyz/blocks/basalt/_defaults.zig.zon b/assets/cubyz/blocks/basalt/_defaults.zig.zon index a00d0417db..90cf01edb2 100644 --- a/assets/cubyz/blocks/basalt/_defaults.zig.zon +++ b/assets/cubyz/blocks/basalt/_defaults.zig.zon @@ -18,7 +18,7 @@ .modifiers = .{ .{ .id = "good_at", - .strength = 0.5, + .multStrength = 0.5, .tag = .basalt, .restriction = .{ .id = .encased, diff --git a/assets/cubyz/blocks/branch/baobab.zig.zon b/assets/cubyz/blocks/branch/baobab.zig.zon index d4c5f4eab4..55bcf30a4e 100644 --- a/assets/cubyz/blocks/branch/baobab.zig.zon +++ b/assets/cubyz/blocks/branch/baobab.zig.zon @@ -23,7 +23,7 @@ .modifiers = .{ .{ .id = "durable", - .strength = 0.45, + .multStrength = 0.45, }, }, }, diff --git a/assets/cubyz/blocks/branch/birch.zig.zon b/assets/cubyz/blocks/branch/birch.zig.zon index 118e5d8b18..41a21d07b0 100644 --- a/assets/cubyz/blocks/branch/birch.zig.zon +++ b/assets/cubyz/blocks/branch/birch.zig.zon @@ -26,7 +26,7 @@ .modifiers = .{ .{ .id = "durable", - .strength = 0.45, + .multStrength = 0.45, }, }, }, diff --git a/assets/cubyz/blocks/branch/bolete.zig.zon b/assets/cubyz/blocks/branch/bolete.zig.zon index fc1cc50719..94f5d1c69c 100644 --- a/assets/cubyz/blocks/branch/bolete.zig.zon +++ b/assets/cubyz/blocks/branch/bolete.zig.zon @@ -20,7 +20,7 @@ .modifiers = .{ .{ .id = "durable", - .strength = 0.45, + .multStrength = 0.45, }, }, }, diff --git a/assets/cubyz/blocks/branch/cirrus.zig.zon b/assets/cubyz/blocks/branch/cirrus.zig.zon index 9d2818e0a6..687cf6bbb9 100644 --- a/assets/cubyz/blocks/branch/cirrus.zig.zon +++ b/assets/cubyz/blocks/branch/cirrus.zig.zon @@ -23,7 +23,7 @@ .modifiers = .{ .{ .id = "light", - .strength = 0.15, + .multStrength = 0.15, }, }, }, diff --git a/assets/cubyz/blocks/branch/glimmergill.zig.zon b/assets/cubyz/blocks/branch/glimmergill.zig.zon index 33faa94eb0..d4d32722d4 100644 --- a/assets/cubyz/blocks/branch/glimmergill.zig.zon +++ b/assets/cubyz/blocks/branch/glimmergill.zig.zon @@ -20,7 +20,7 @@ .modifiers = .{ .{ .id = "durable", - .strength = 0.50, + .multStrength = 0.50, }, }, }, diff --git a/assets/cubyz/blocks/branch/mahogany.zig.zon b/assets/cubyz/blocks/branch/mahogany.zig.zon index 4c2251f96e..4a769241d1 100644 --- a/assets/cubyz/blocks/branch/mahogany.zig.zon +++ b/assets/cubyz/blocks/branch/mahogany.zig.zon @@ -23,7 +23,7 @@ .modifiers = .{ .{ .id = "durable", - .strength = 0.45, + .multStrength = 0.45, }, }, }, diff --git a/assets/cubyz/blocks/branch/oak.zig.zon b/assets/cubyz/blocks/branch/oak.zig.zon index 5c7a91bb1f..586c3cfa08 100644 --- a/assets/cubyz/blocks/branch/oak.zig.zon +++ b/assets/cubyz/blocks/branch/oak.zig.zon @@ -23,7 +23,7 @@ .modifiers = .{ .{ .id = "durable", - .strength = 0.45, + .multStrength = 0.45, }, }, }, diff --git a/assets/cubyz/blocks/branch/palm.zig.zon b/assets/cubyz/blocks/branch/palm.zig.zon index fda70973f7..b7ef6c1444 100644 --- a/assets/cubyz/blocks/branch/palm.zig.zon +++ b/assets/cubyz/blocks/branch/palm.zig.zon @@ -23,7 +23,7 @@ .modifiers = .{ .{ .id = "durable", - .strength = 0.45, + .multStrength = 0.45, }, }, }, diff --git a/assets/cubyz/blocks/branch/pine.zig.zon b/assets/cubyz/blocks/branch/pine.zig.zon index b158b5f971..fbccbd41f2 100644 --- a/assets/cubyz/blocks/branch/pine.zig.zon +++ b/assets/cubyz/blocks/branch/pine.zig.zon @@ -23,7 +23,7 @@ .modifiers = .{ .{ .id = "durable", - .strength = 0.45, + .multStrength = 0.45, }, }, }, diff --git a/assets/cubyz/blocks/branch/toadstool.zig.zon b/assets/cubyz/blocks/branch/toadstool.zig.zon index a4b366f129..d029c28754 100644 --- a/assets/cubyz/blocks/branch/toadstool.zig.zon +++ b/assets/cubyz/blocks/branch/toadstool.zig.zon @@ -20,7 +20,7 @@ .modifiers = .{ .{ .id = "durable", - .strength = 0.45, + .multStrength = 0.45, }, }, }, diff --git a/assets/cubyz/blocks/branch/willow.zig.zon b/assets/cubyz/blocks/branch/willow.zig.zon index 50ba2c7127..756f59a05a 100644 --- a/assets/cubyz/blocks/branch/willow.zig.zon +++ b/assets/cubyz/blocks/branch/willow.zig.zon @@ -23,7 +23,7 @@ .modifiers = .{ .{ .id = "durable", - .strength = 0.45, + .multStrength = 0.45, }, }, }, diff --git a/assets/cubyz/blocks/diamond_ore.zig.zon b/assets/cubyz/blocks/diamond_ore.zig.zon index 8d9c98208a..92710e3239 100644 --- a/assets/cubyz/blocks/diamond_ore.zig.zon +++ b/assets/cubyz/blocks/diamond_ore.zig.zon @@ -28,7 +28,7 @@ .modifiers = .{ .{ .id = "fragile", - .strength = 0.5, + .multStrength = 0.5, .restriction = .{ .id = .not, .child = .{ @@ -40,7 +40,7 @@ }, .{ .id = "powerful", - .strength = 0.5, + .multStrength = 0.5, .restriction = .{ .id = .encased, .tag = .precious, diff --git a/assets/cubyz/blocks/ferrock/_defaults.zig.zon b/assets/cubyz/blocks/ferrock/_defaults.zig.zon index 854d6bd802..9bbfa7df13 100644 --- a/assets/cubyz/blocks/ferrock/_defaults.zig.zon +++ b/assets/cubyz/blocks/ferrock/_defaults.zig.zon @@ -18,7 +18,7 @@ .modifiers = .{ .{ .id = "good_at", - .strength = 0.5, + .multStrength = 0.5, .tag = .ferrock, .restriction = .{ .id = .encased, diff --git a/assets/cubyz/blocks/glacite/_defaults.zig.zon b/assets/cubyz/blocks/glacite/_defaults.zig.zon index 33c406bff3..6c2225f317 100644 --- a/assets/cubyz/blocks/glacite/_defaults.zig.zon +++ b/assets/cubyz/blocks/glacite/_defaults.zig.zon @@ -18,7 +18,7 @@ .modifiers = .{ .{ .id = "good_at", - .strength = 0.5, + .multStrength = 0.5, .tag = .glacite, .restriction = .{ .id = .encased, diff --git a/assets/cubyz/blocks/jade_ore.zig.zon b/assets/cubyz/blocks/jade_ore.zig.zon index 7dae7ed5e1..25eabb055d 100644 --- a/assets/cubyz/blocks/jade_ore.zig.zon +++ b/assets/cubyz/blocks/jade_ore.zig.zon @@ -16,7 +16,7 @@ .modifiers = .{ .{ .id = "durable", - .strength = 1.5, + .multStrength = 1.5, .restriction = .{ .id = .encased, .tag = .precious, diff --git a/assets/cubyz/blocks/limestone/_defaults.zig.zon b/assets/cubyz/blocks/limestone/_defaults.zig.zon index 95f5cf7cb7..607db8362d 100644 --- a/assets/cubyz/blocks/limestone/_defaults.zig.zon +++ b/assets/cubyz/blocks/limestone/_defaults.zig.zon @@ -18,7 +18,7 @@ .modifiers = .{ .{ .id = "good_at", - .strength = 0.5, + .multStrength = 0.5, .tag = .limestone, .restriction = .{ .id = .encased, diff --git a/assets/cubyz/blocks/marble/_defaults.zig.zon b/assets/cubyz/blocks/marble/_defaults.zig.zon index 8429253d55..b76bc3ceec 100644 --- a/assets/cubyz/blocks/marble/_defaults.zig.zon +++ b/assets/cubyz/blocks/marble/_defaults.zig.zon @@ -17,7 +17,7 @@ .modifiers = .{ .{ .id = "good_at", - .strength = 0.5, + .multStrength = 0.5, .tag = .marble, .restriction = .{ .id = .encased, diff --git a/assets/cubyz/blocks/nimbusite/_defaults.zig.zon b/assets/cubyz/blocks/nimbusite/_defaults.zig.zon index c81b1d29d7..c79703eb1e 100644 --- a/assets/cubyz/blocks/nimbusite/_defaults.zig.zon +++ b/assets/cubyz/blocks/nimbusite/_defaults.zig.zon @@ -18,7 +18,7 @@ .modifiers = .{ .{ .id = "good_at", - .strength = 0.5, + .multStrength = 0.5, .tag = .nimbusite, .restriction = .{ .id = .encased, diff --git a/assets/cubyz/blocks/obsidian.zig.zon b/assets/cubyz/blocks/obsidian.zig.zon index 432fd8753a..12bb9bc582 100644 --- a/assets/cubyz/blocks/obsidian.zig.zon +++ b/assets/cubyz/blocks/obsidian.zig.zon @@ -18,7 +18,7 @@ .modifiers = .{ .{ .id = "fragile", - .strength = 0.33, + .multStrength = 0.33, }, }, }, diff --git a/assets/cubyz/blocks/planks/baobab.zig.zon b/assets/cubyz/blocks/planks/baobab.zig.zon index 79f96ccfb0..629271e315 100644 --- a/assets/cubyz/blocks/planks/baobab.zig.zon +++ b/assets/cubyz/blocks/planks/baobab.zig.zon @@ -11,7 +11,7 @@ .modifiers = .{ .{ .id = "durable", - .strength = 0.4, + .multStrength = 0.4, }, }, }, diff --git a/assets/cubyz/blocks/planks/birch.zig.zon b/assets/cubyz/blocks/planks/birch.zig.zon index a5360840f4..3cf7f727bf 100644 --- a/assets/cubyz/blocks/planks/birch.zig.zon +++ b/assets/cubyz/blocks/planks/birch.zig.zon @@ -12,7 +12,7 @@ .modifiers = .{ .{ .id = "durable", - .strength = 0.4, + .multStrength = 0.4, }, }, }, diff --git a/assets/cubyz/blocks/planks/cirrus.zig.zon b/assets/cubyz/blocks/planks/cirrus.zig.zon index 7deeba7bcb..a4570040d1 100644 --- a/assets/cubyz/blocks/planks/cirrus.zig.zon +++ b/assets/cubyz/blocks/planks/cirrus.zig.zon @@ -12,7 +12,7 @@ .modifiers = .{ .{ .id = "light", - .strength = 0.1, + .multStrength = 0.1, }, }, }, diff --git a/assets/cubyz/blocks/planks/mahogany.zig.zon b/assets/cubyz/blocks/planks/mahogany.zig.zon index 5a81efbff4..b4c48672cf 100644 --- a/assets/cubyz/blocks/planks/mahogany.zig.zon +++ b/assets/cubyz/blocks/planks/mahogany.zig.zon @@ -12,7 +12,7 @@ .modifiers = .{ .{ .id = "durable", - .strength = 0.4, + .multStrength = 0.4, }, }, }, diff --git a/assets/cubyz/blocks/planks/oak.zig.zon b/assets/cubyz/blocks/planks/oak.zig.zon index b1dd19a20f..5f3ca533e7 100644 --- a/assets/cubyz/blocks/planks/oak.zig.zon +++ b/assets/cubyz/blocks/planks/oak.zig.zon @@ -12,7 +12,7 @@ .modifiers = .{ .{ .id = "durable", - .strength = 0.4, + .multStrength = 0.4, }, }, }, diff --git a/assets/cubyz/blocks/planks/palm.zig.zon b/assets/cubyz/blocks/planks/palm.zig.zon index 8f9d8b0fd0..576392542b 100644 --- a/assets/cubyz/blocks/planks/palm.zig.zon +++ b/assets/cubyz/blocks/planks/palm.zig.zon @@ -11,7 +11,7 @@ .modifiers = .{ .{ .id = "durable", - .strength = 0.4, + .multStrength = 0.4, }, }, }, diff --git a/assets/cubyz/blocks/planks/pine.zig.zon b/assets/cubyz/blocks/planks/pine.zig.zon index 3e723206a6..717cdd83b5 100644 --- a/assets/cubyz/blocks/planks/pine.zig.zon +++ b/assets/cubyz/blocks/planks/pine.zig.zon @@ -12,7 +12,7 @@ .modifiers = .{ .{ .id = "durable", - .strength = 0.4, + .multStrength = 0.4, }, }, }, diff --git a/assets/cubyz/blocks/planks/willow.zig.zon b/assets/cubyz/blocks/planks/willow.zig.zon index 7574154cd8..bc19eb51ca 100644 --- a/assets/cubyz/blocks/planks/willow.zig.zon +++ b/assets/cubyz/blocks/planks/willow.zig.zon @@ -12,7 +12,7 @@ .modifiers = .{ .{ .id = "durable", - .strength = 0.4, + .multStrength = 0.4, }, }, }, diff --git a/assets/cubyz/blocks/pyrolite/_defaults.zig.zon b/assets/cubyz/blocks/pyrolite/_defaults.zig.zon index ad667e7363..45fefa7fcd 100644 --- a/assets/cubyz/blocks/pyrolite/_defaults.zig.zon +++ b/assets/cubyz/blocks/pyrolite/_defaults.zig.zon @@ -18,7 +18,7 @@ .modifiers = .{ .{ .id = "good_at", - .strength = 0.5, + .multStrength = 0.5, .tag = .pyrolite, .restriction = .{ .id = .encased, diff --git a/assets/cubyz/blocks/ruby_ore.zig.zon b/assets/cubyz/blocks/ruby_ore.zig.zon index 8065918a32..06ca452540 100644 --- a/assets/cubyz/blocks/ruby_ore.zig.zon +++ b/assets/cubyz/blocks/ruby_ore.zig.zon @@ -16,7 +16,7 @@ .modifiers = .{ .{ .id = "fragile", - .strength = 0.45, + .multStrength = 0.45, .restriction = .{ .id = .not, .child = .{ diff --git a/assets/cubyz/blocks/sandstone/_defaults.zig.zon b/assets/cubyz/blocks/sandstone/_defaults.zig.zon index afb82ce52b..c78e708b3c 100644 --- a/assets/cubyz/blocks/sandstone/_defaults.zig.zon +++ b/assets/cubyz/blocks/sandstone/_defaults.zig.zon @@ -17,7 +17,7 @@ .modifiers = .{ .{ .id = "fragile", - .strength = 0.20, + .multStrength = 0.20, .restriction = .{ .id = .not, .child = .{ @@ -29,7 +29,7 @@ }, .{ .id = "good_at", - .strength = 0.5, + .multStrength = 0.5, .tag = .sandstone, .restriction = .{ .id = .encased, diff --git a/assets/cubyz/blocks/slate/_defaults.zig.zon b/assets/cubyz/blocks/slate/_defaults.zig.zon index b1952ed7c6..e1135dcecd 100644 --- a/assets/cubyz/blocks/slate/_defaults.zig.zon +++ b/assets/cubyz/blocks/slate/_defaults.zig.zon @@ -18,7 +18,7 @@ .modifiers = .{ .{ .id = "good_at", - .strength = 0.5, + .multStrength = 0.5, .tag = .slate, .restriction = .{ .id = .encased, diff --git a/assets/cubyz/blocks/voidstone/_defaults.zig.zon b/assets/cubyz/blocks/voidstone/_defaults.zig.zon index 24a0cd7fcc..f808ed76bb 100644 --- a/assets/cubyz/blocks/voidstone/_defaults.zig.zon +++ b/assets/cubyz/blocks/voidstone/_defaults.zig.zon @@ -18,11 +18,11 @@ .modifiers = .{ .{ .id = "durable", - .strength = 0.1, + .multStrength = 0.1, }, .{ .id = "good_at", - .strength = 0.5, + .multStrength = 0.5, .tag = .voidstone, .restriction = .{ .id = .encased, diff --git a/assets/cubyz/items/uranium_ingot.zig.zon b/assets/cubyz/items/uranium_ingot.zig.zon index fab012dab8..cbbed0d9e0 100644 --- a/assets/cubyz/items/uranium_ingot.zig.zon +++ b/assets/cubyz/items/uranium_ingot.zig.zon @@ -3,12 +3,18 @@ .texture = "uranium_ingot.png", .material = .{ .durability = 1500, - .massDamage = 10.0, - .hardnessDamage = 15.0, + .massDamage = 8.0, + .hardnessDamage = 12.0, .swingSpeed = 0.5, .textureRoughness = 0.3, .colors = .{ 0xff395533, 0xff466e45, 0xff5d8a5f, 0xff6da367, 0xff74c761, }, + .modifiers = .{ + .{ + .id = "powerful", + .flatStrength = 2, + }, + }, }, } diff --git a/src/items.zig b/src/items.zig index 8fe590f816..1a13fe6f45 100644 --- a/src/items.zig +++ b/src/items.zig @@ -157,6 +157,8 @@ const Modifier = struct { pub const VTable = struct { const Data = packed struct(u128) { pad: u128 }; combineModifiers: *const fn (data1: Data, data2: Data) ?Data, + changeProceduralItemParametersFlat: *const fn (proceduralItem: *ProceduralItem, data: Data) void, + changeProceduralItemParametersMult: *const fn (proceduralItem: *ProceduralItem, data: Data) void, changeProceduralItemParameters: *const fn (proceduralItem: *ProceduralItem, data: Data) void, changeBlockDamage: *const fn (damage: f32, block: Block, data: Data) f32, printTooltip: *const fn (outString: *main.ListManaged(u8), data: Data) void, @@ -165,6 +167,8 @@ const Modifier = struct { const Defaults = struct { pub fn changeProceduralItemParameters(_: *ProceduralItem, _: Data) void {} + pub fn changeProceduralItemParametersFlat(_: *ProceduralItem, _: Data) void {} + pub fn changeProceduralItemParametersMult(_: *ProceduralItem, _: Data) void {} pub fn changeBlockDamage(damage: f32, _: Block, _: Data) f32 { return damage; } @@ -172,6 +176,8 @@ const Modifier = struct { inline fn initFromModifierStruct(comptime ModifierStruct: type) VTable { return comptime .{ + .changeProceduralItemParametersFlat = @ptrCast(if (@hasDecl(ModifierStruct, "changeProceduralItemParametersFlat")) &ModifierStruct.changeProceduralItemParametersFlat else &VTable.Defaults.changeProceduralItemParametersFlat), + .changeProceduralItemParametersMult = @ptrCast(if (@hasDecl(ModifierStruct, "changeProceduralItemParametersMult")) &ModifierStruct.changeProceduralItemParametersMult else &VTable.Defaults.changeProceduralItemParametersMult), .changeProceduralItemParameters = @ptrCast(if (@hasDecl(ModifierStruct, "changeProceduralItemParameters")) &ModifierStruct.changeProceduralItemParameters else &VTable.Defaults.changeProceduralItemParameters), .changeBlockDamage = @ptrCast(if (@hasDecl(ModifierStruct, "changeBlockDamage")) &ModifierStruct.changeBlockDamage else &VTable.Defaults.changeBlockDamage), .combineModifiers = @ptrCast(&ModifierStruct.combineModifiers), @@ -191,6 +197,14 @@ const Modifier = struct { }; } + pub fn changeProceduralItemParametersFlat(self: Modifier, proceduralItem: *ProceduralItem) void { + self.vTable.changeProceduralItemParametersFlat(proceduralItem, self.data); + } + + pub fn changeProceduralItemParametersMult(self: Modifier, proceduralItem: *ProceduralItem) void { + self.vTable.changeProceduralItemParametersMult(proceduralItem, self.data); + } + pub fn changeProceduralItemParameters(self: Modifier, proceduralItem: *ProceduralItem) void { self.vTable.changeProceduralItemParameters(proceduralItem, self.data); } @@ -501,6 +515,12 @@ const ProceduralItemPhysics = struct { // MARK: ProceduralItemPhysics } }.lessThan); proceduralItem.modifiers = main.globalAllocator.dupe(Modifier, tempModifiers.items); + for (tempModifiers.items) |mod| { + mod.changeProceduralItemParametersFlat(proceduralItem); + } + for (tempModifiers.items) |mod| { + mod.changeProceduralItemParametersMult(proceduralItem); + } for (tempModifiers.items) |mod| { mod.changeProceduralItemParameters(proceduralItem); } diff --git a/src/proceduralItem/modifiers/bad_at.zig b/src/proceduralItem/modifiers/bad_at.zig index 2d47a9e440..0b45f9285d 100644 --- a/src/proceduralItem/modifiers/bad_at.zig +++ b/src/proceduralItem/modifiers/bad_at.zig @@ -3,26 +3,37 @@ const std = @import("std"); const main = @import("main"); const ProceduralItem = main.items.ProceduralItem; -pub const Data = packed struct(u128) { strength: f32, tag: main.Tag, pad: u64 = undefined }; +pub const Data = packed struct(u128) { multStrength: f32, tag: main.Tag, flatStrength: f32, pad: u32 = undefined }; pub const priority = 1; pub fn loadData(zon: main.ZonElement) Data { - return .{.strength = std.math.clamp(zon.get(f32, "strength") orelse 0, 0, 1), .tag = .find(zon.get([]const u8, "tag") orelse "incorrect")}; + return .{ + .multStrength = std.math.clamp(zon.get(f32, "strength") orelse 0, 0, 1), + .tag = .find(zon.get([]const u8, "tag") orelse "incorrect"), + .flatStrength = @min(zon.get(f32, "strength") orelse 0, 0), + }; } pub fn combineModifiers(data1: Data, data2: Data) ?Data { if (data1.tag != data2.tag) return null; - return .{.strength = 1.0 - 1.0/(1.0 + std.math.hypot(1.0/(1.0 - data1.strength) - 1.0, 1.0/(1.0 - data2.strength) - 1.0)), .tag = data1.tag}; + return .{ + .multStrength = 1.0 - 1.0/(1.0 + std.math.hypot(1.0/(1.0 - data1.multStrength) - 1.0, 1.0/(1.0 - data2.multStrength) - 1.0)), + .tag = data1.tag, + .flatStrength = 1.0 - 1.0/(1.0 + std.math.hypot(1.0/(1.0 - data1.flatStrength) - 1.0, 1.0/(1.0 - data2.flatStrength) - 1.0)), + }; } pub fn changeBlockDamage(damage: f32, block: main.blocks.Block, data: Data) f32 { for (block.tags()) |tag| { - if (tag == data.tag) return damage*(1 - data.strength); + if (tag == data.tag) return @max(damage - data.flatStrength, 0)*(1 - data.multStrength); } return damage; } pub fn printTooltip(outString: *main.ListManaged(u8), data: Data) void { - outString.print("#a00050**Bad at**#808080 *Decreases damage by **{d:.0}%** on \n***#a00050{s}#808080*** blocks", .{data.strength*100, data.tag.getName()}); + if (data.multStrength != 0 and data.flatStrength != 0) outString.print("#a00050**Bad at**#808080 *Decreases damage by **{d:.0}%** and **-{d:.0}** on \n***#a00050{s}#808080*** blocks", .{data.multStrength*100, data.flatStrength, data.tag.getName()}); + if (data.multStrength != 0 and data.flatStrength == 0) outString.print("#a00050**Bad at**#808080 *Decreases damage by **{d:.0}%** on \n***#a00050{s}#808080*** blocks", .{data.multStrength*100, data.tag.getName()}); + if (data.multStrength == 0 and data.flatStrength != 0) outString.print("#a00050**Bad at**#808080 *Decreases damage by **-{d:.0}** on \n***#a00050{s}#808080*** blocks", .{data.flatStrength, data.tag.getName()}); + if (data.multStrength == 0 and data.flatStrength == 0) outString.print("#ff0000**Bad at did not find any multStrength and Flatstrength**", .{}); } diff --git a/src/proceduralItem/modifiers/durable.zig b/src/proceduralItem/modifiers/durable.zig index a491af6a55..578b95d995 100644 --- a/src/proceduralItem/modifiers/durable.zig +++ b/src/proceduralItem/modifiers/durable.zig @@ -3,22 +3,35 @@ const std = @import("std"); const main = @import("main"); const ProceduralItem = main.items.ProceduralItem; -pub const Data = packed struct(u128) { strength: f32, pad: u96 = undefined }; +pub const Data = packed struct(u128) { multStrength: f32, flatStrength: f32, pad: u64 = undefined }; pub const priority = 1; pub fn loadData(zon: main.ZonElement) Data { - return .{.strength = @max(0, zon.get(f32, "strength") orelse 0)}; + return .{ + .multStrength = @max(0, zon.get(f32, "multStrength") orelse 0), + .flatStrength = @max(0, zon.get(f32, "flatStrength") orelse 0), + }; } pub fn combineModifiers(data1: Data, data2: Data) ?Data { - return .{.strength = std.math.hypot(data1.strength, data2.strength)}; + return .{ + .multStrength = std.math.hypot(data1.multStrength, data2.multStrength), + .flatStrength = std.math.hypot(data1.flatStrength, data2.flatStrength), + }; } -pub fn changeProceduralItemParameters(proceduralItem: *ProceduralItem, data: Data) void { - proceduralItem.setProperty(.maxDurability, proceduralItem.getProperty(.maxDurability)*(1 + data.strength)); +pub fn changeProceduralItemParametersFlat(proceduralItem: *ProceduralItem, data: Data) void { + proceduralItem.setProperty(.maxDurability, proceduralItem.getProperty(.maxDurability) + data.flatStrength); +} + +pub fn changeProceduralItemParametersMult(proceduralItem: *ProceduralItem, data: Data) void { + proceduralItem.setProperty(.maxDurability, proceduralItem.getProperty(.maxDurability)*(1 + data.multStrength)); } pub fn printTooltip(outString: *main.ListManaged(u8), data: Data) void { - outString.print("#500090**Durable**#808080 *Increases durability by **{d:.0}%", .{data.strength*100}); + if (data.multStrength != 0 and data.flatStrength != 0) outString.print("#500090**Durable**#808080 *Increases durability by **{d:.0}%** and **+{d:.0}**", .{data.multStrength*100, data.flatStrength}); + if (data.multStrength != 0 and data.flatStrength == 0) outString.print("#500090**Durable**#808080 *Increases durability by **{d:.0}%**", .{data.multStrength*100}); + if (data.multStrength == 0 and data.flatStrength != 0) outString.print("#500090**Durable**#808080 *Increases durability by **+{d:.0}**", .{data.flatStrength}); + if (data.multStrength == 0 and data.flatStrength == 0) outString.print("#ff0000**Durable did not find any multStrength and Flatstrength**", .{}); } diff --git a/src/proceduralItem/modifiers/fragile.zig b/src/proceduralItem/modifiers/fragile.zig index 2450f40109..6ddc1fe82e 100644 --- a/src/proceduralItem/modifiers/fragile.zig +++ b/src/proceduralItem/modifiers/fragile.zig @@ -3,22 +3,35 @@ const std = @import("std"); const main = @import("main"); const ProceduralItem = main.items.ProceduralItem; -pub const Data = packed struct(u128) { strength: f32, pad: u96 = undefined }; +pub const Data = packed struct(u128) { multStrength: f32, flatStrength: f32, pad: u64 = undefined }; pub const priority = 1; pub fn loadData(zon: main.ZonElement) Data { - return .{.strength = std.math.clamp(zon.get(f32, "strength") orelse 0, 0, 1)}; + return .{ + .multStrength = std.math.clamp(zon.get(f32, "multStrength") orelse 0, 0, 1), + .flatStrength = @max(0, zon.get(f32, "flatStrength") orelse 0), + }; } pub fn combineModifiers(data1: Data, data2: Data) ?Data { - return .{.strength = 1.0 - 1.0/(1.0 + std.math.hypot(1.0/(1.0 - data1.strength) - 1.0, 1.0/(1.0 - data2.strength) - 1.0))}; + return .{ + .multStrength = 1.0 - 1.0/(1.0 + std.math.hypot(1.0/(1.0 - data1.multStrength) - 1.0, 1.0/(1.0 - data2.multStrength) - 1.0)), + .flatStrength = 1.0 - 1.0/(1.0 + std.math.hypot(1.0/(1.0 - data1.flatStrength) - 1.0, 1.0/(1.0 - data2.flatStrength) - 1.0)), + }; } -pub fn changeProceduralItemParameters(proceduralItem: *ProceduralItem, data: Data) void { - proceduralItem.setProperty(.maxDurability, proceduralItem.getProperty(.maxDurability)*(1 - data.strength)); +pub fn changeProceduralItemParametersFlat(proceduralItem: *ProceduralItem, data: Data) void { + proceduralItem.setProperty(.maxDurability, proceduralItem.getProperty(.maxDurability) - data.flatStrength); +} + +pub fn changeProceduralItemParametersMult(proceduralItem: *ProceduralItem, data: Data) void { + proceduralItem.setProperty(.maxDurability, proceduralItem.getProperty(.maxDurability)*(1 - data.multStrength)); } pub fn printTooltip(outString: *main.ListManaged(u8), data: Data) void { - outString.print("#ccddff**Fragile**#808080 *Decreases durability by **{d:.0}%", .{data.strength*100}); + if (data.multStrength != 0 and data.flatStrength != 0) outString.print("#ccddff**Fragile**#808080 *Decreases durability by **{d:.0}%** and **-{d:.0}**", .{data.multStrength*100, data.flatStrength}); + if (data.multStrength != 0 and data.flatStrength == 0) outString.print("#ccddff**Fragile**#808080 *Decreases durability by **{d:.0}%**", .{data.multStrength*100}); + if (data.multStrength == 0 and data.flatStrength != 0) outString.print("#ccddff**Fragile**#808080 *Decreases durability by **-{d:.0}**", .{data.flatStrength}); + if (data.multStrength == 0 and data.flatStrength == 0) outString.print("#ff0000**Fragile did not find any multStrength and Flatstrength**", .{}); } diff --git a/src/proceduralItem/modifiers/good_at.zig b/src/proceduralItem/modifiers/good_at.zig index a47b969d06..6799792acb 100644 --- a/src/proceduralItem/modifiers/good_at.zig +++ b/src/proceduralItem/modifiers/good_at.zig @@ -3,26 +3,37 @@ const std = @import("std"); const main = @import("main"); const ProceduralItem = main.items.ProceduralItem; -pub const Data = packed struct(u128) { strength: f32, tag: main.Tag, pad: u64 = undefined }; +pub const Data = packed struct(u128) { multStrength: f32, tag: main.Tag, flatStrength: f32, pad: u32 = undefined }; pub const priority = 1; pub fn loadData(zon: main.ZonElement) Data { - return .{.strength = @max(0, zon.get(f32, "strength") orelse 0), .tag = .find(zon.get([]const u8, "tag") orelse "incorrect")}; + return .{ + .multStrength = @max(0, zon.get(f32, "multStrength") orelse 0), + .tag = .find(zon.get([]const u8, "tag") orelse "incorrect"), + .flatStrength = @max(0, zon.get(f32, "flatStrength") orelse 0), + }; } pub fn combineModifiers(data1: Data, data2: Data) ?Data { if (data1.tag != data2.tag) return null; - return .{.strength = std.math.hypot(data1.strength, data2.strength), .tag = data1.tag}; + return .{ + .multStrength = std.math.hypot(data1.multStrength, data2.multStrength), + .tag = data1.tag, + .flatStrength = std.math.hypot(data1.flatStrength, data2.flatStrength), + }; } pub fn changeBlockDamage(damage: f32, block: main.blocks.Block, data: Data) f32 { for (block.tags()) |tag| { - if (tag == data.tag) return damage*(1 + data.strength); + if (tag == data.tag) return (damage + data.flatStrength)*(1 + data.multStrength); } return damage; } pub fn printTooltip(outString: *main.ListManaged(u8), data: Data) void { - outString.print("#80ff40**Good at**#808080 *Increases damage by **{d:.0}%** on \n***#80ff40{s}#808080*** blocks", .{data.strength*100, data.tag.getName()}); + if (data.multStrength != 0 and data.flatStrength != 0) outString.print("#80ff40**Good at**#808080 *Increases damage by **{d:.0}%** and **+{d:.0}** on \n***#a00050{s}#808080*** blocks", .{data.multStrength*100, data.flatStrength, data.tag.getName()}); + if (data.multStrength != 0 and data.flatStrength == 0) outString.print("#80ff40**Good at**#808080 *Increases damage by **{d:.0}%** on \n***#a00050{s}#808080*** blocks", .{data.multStrength*100, data.tag.getName()}); + if (data.multStrength == 0 and data.flatStrength != 0) outString.print("#80ff40**Good at**#808080 *Increases damage by **+{d:.0}** on \n***#a00050{s}#808080*** blocks", .{data.flatStrength, data.tag.getName()}); + if (data.multStrength == 0 and data.flatStrength == 0) outString.print("#ff0000**Good at did not find any multStrength and Flatstrength**", .{}); } diff --git a/src/proceduralItem/modifiers/heavy.zig b/src/proceduralItem/modifiers/heavy.zig index 033a12cb46..f507b14c24 100644 --- a/src/proceduralItem/modifiers/heavy.zig +++ b/src/proceduralItem/modifiers/heavy.zig @@ -3,22 +3,35 @@ const std = @import("std"); const main = @import("main"); const ProceduralItem = main.items.ProceduralItem; -pub const Data = packed struct(u128) { strength: f32, pad: u96 = undefined }; +pub const Data = packed struct(u128) { multStrength: f32, flatStrength: f32, pad: u64 = undefined }; pub const priority = 1; pub fn loadData(zon: main.ZonElement) Data { - return .{.strength = @max(0, zon.get(f32, "strength") orelse 0)}; + return .{ + .multStrength = std.math.clamp(zon.get(f32, "multStrength") orelse 0, 0, 1), + .flatStrength = @max(0, zon.get(f32, "flatStrength") orelse 0), + }; } pub fn combineModifiers(data1: Data, data2: Data) ?Data { - return .{.strength = 1.0 - 1.0/(1.0 + std.math.hypot(1.0/(1.0 - data1.strength) - 1.0, 1.0/(1.0 - data2.strength) - 1.0))}; + return .{ + .multStrength = 1.0 - 1.0/(1.0 + std.math.hypot(1.0/(1.0 - data1.multStrength) - 1.0, 1.0/(1.0 - data2.multStrength) - 1.0)), + .flatStrength = 1.0 - 1.0/(1.0 + std.math.hypot(1.0/(1.0 - data1.flatStrength) - 1.0, 1.0/(1.0 - data2.flatStrength) - 1.0)), + }; } -pub fn changeProceduralItemParameters(proceduralItem: *ProceduralItem, data: Data) void { - proceduralItem.setProperty(.swingSpeed, proceduralItem.getProperty(.swingSpeed)*(1 - data.strength)); +pub fn changeProceduralItemParametersFlat(proceduralItem: *ProceduralItem, data: Data) void { + proceduralItem.setProperty(.swingSpeed, proceduralItem.getProperty(.swingSpeed) - data.flatStrength); +} + +pub fn changeProceduralItemParametersMult(proceduralItem: *ProceduralItem, data: Data) void { + proceduralItem.setProperty(.swingSpeed, proceduralItem.getProperty(.swingSpeed)*(1 - data.multStrength)); } pub fn printTooltip(outString: *main.ListManaged(u8), data: Data) void { - outString.print("#ffcc30**Heavy**#808080 *Decreases swing speed by **{d:.0}%", .{data.strength*100}); + if (data.multStrength != 0 and data.flatStrength != 0) outString.print("#ffcc30**Heavy**#808080 *Decreases swing speed by **{d:.0}%** and **-{d:.0}**", .{data.multStrength*100, data.flatStrength}); + if (data.multStrength != 0 and data.flatStrength == 0) outString.print("#ffcc30**Heavy**#808080 *Decreases swing speed by **{d:.0}%**", .{data.multStrength*100}); + if (data.multStrength == 0 and data.flatStrength != 0) outString.print("#ffcc30**Heavy**#808080 *Decreases swing speed by **-{d:.0}**", .{data.flatStrength}); + if (data.multStrength == 0 and data.flatStrength == 0) outString.print("#ff0000**Heavy did not find any multStrength and Flatstrength**", .{}); } diff --git a/src/proceduralItem/modifiers/light.zig b/src/proceduralItem/modifiers/light.zig index 319e0bc787..95e9cac655 100644 --- a/src/proceduralItem/modifiers/light.zig +++ b/src/proceduralItem/modifiers/light.zig @@ -3,22 +3,35 @@ const std = @import("std"); const main = @import("main"); const ProceduralItem = main.items.ProceduralItem; -pub const Data = packed struct(u128) { strength: f32, pad: u96 = undefined }; +pub const Data = packed struct(u128) { multStrength: f32, flatStrength: f32, pad: u64 = undefined }; pub const priority = 1; pub fn loadData(zon: main.ZonElement) Data { - return .{.strength = std.math.clamp(zon.get(f32, "strength") orelse 0, 0, 1)}; + return .{ + .multStrength = @max(0, zon.get(f32, "multStrength") orelse 0), + .flatStrength = @max(0, zon.get(f32, "flatStrength") orelse 0), + }; } pub fn combineModifiers(data1: Data, data2: Data) ?Data { - return .{.strength = std.math.hypot(data1.strength, data2.strength)}; + return .{ + .multStrength = std.math.hypot(data1.multStrength, data2.multStrength), + .flatStrength = std.math.hypot(data1.flatStrength, data2.flatStrength), + }; } -pub fn changeProceduralItemParameters(proceduralItem: *ProceduralItem, data: Data) void { - proceduralItem.setProperty(.swingSpeed, proceduralItem.getProperty(.swingSpeed)*(1 + data.strength)); +pub fn changeProceduralItemParametersFlat(proceduralItem: *ProceduralItem, data: Data) void { + proceduralItem.setProperty(.swingSpeed, proceduralItem.getProperty(.swingSpeed) + data.flatStrength); +} + +pub fn changeProceduralItemParametersMult(proceduralItem: *ProceduralItem, data: Data) void { + proceduralItem.setProperty(.swingSpeed, proceduralItem.getProperty(.swingSpeed)*(1 + data.multStrength)); } pub fn printTooltip(outString: *main.ListManaged(u8), data: Data) void { - outString.print("#9fffde**Light**#808080 *Increases swing speed by **{d:.0}%", .{data.strength*100}); + if (data.multStrength != 0 and data.flatStrength != 0) outString.print("#9fffde**Light**#808080 *Increases swing speed by **{d:.0}%** and **+{d:.0}**", .{data.multStrength*100, data.flatStrength}); + if (data.multStrength != 0 and data.flatStrength == 0) outString.print("#9fffde**Light**#808080 *Increases swing speed by **{d:.0}%**", .{data.multStrength*100}); + if (data.multStrength == 0 and data.flatStrength != 0) outString.print("#9fffde**Light**#808080 *Increases swing speed by **+{d:.0}**", .{data.flatStrength}); + if (data.multStrength == 0 and data.flatStrength == 0) outString.print("#ff0000**Light did not find any multStrength and Flatstrength**", .{}); } diff --git a/src/proceduralItem/modifiers/powerful.zig b/src/proceduralItem/modifiers/powerful.zig index 96b5330356..414200cbba 100644 --- a/src/proceduralItem/modifiers/powerful.zig +++ b/src/proceduralItem/modifiers/powerful.zig @@ -3,22 +3,35 @@ const std = @import("std"); const main = @import("main"); const ProceduralItem = main.items.ProceduralItem; -pub const Data = packed struct(u128) { strength: f32, pad: u96 = undefined }; +pub const Data = packed struct(u128) { multStrength: f32, flatStrength: f32, pad: u64 = undefined }; pub const priority = 1; pub fn loadData(zon: main.ZonElement) Data { - return .{.strength = @max(0, zon.get(f32, "strength") orelse 0)}; + return .{ + .multStrength = @max(0, zon.get(f32, "multStrength") orelse 0), + .flatStrength = @max(0, zon.get(f32, "flatStrength") orelse 0), + }; } pub fn combineModifiers(data1: Data, data2: Data) ?Data { - return .{.strength = std.math.hypot(data1.strength, data2.strength)}; + return .{ + .multStrength = std.math.hypot(data1.multStrength, data2.multStrength), + .flatStrength = std.math.hypot(data1.flatStrength, data2.flatStrength), + }; } -pub fn changeProceduralItemParameters(proceduralItem: *ProceduralItem, data: Data) void { - proceduralItem.setProperty(.damage, proceduralItem.getProperty(.damage)*(1 + data.strength)); +pub fn changeProceduralItemParametersFlat(proceduralItem: *ProceduralItem, data: Data) void { + proceduralItem.setProperty(.damage, proceduralItem.getProperty(.damage) + data.flatStrength); +} + +pub fn changeProceduralItemParametersMult(proceduralItem: *ProceduralItem, data: Data) void { + proceduralItem.setProperty(.damage, proceduralItem.getProperty(.damage)*(1 + data.multStrength)); } pub fn printTooltip(outString: *main.ListManaged(u8), data: Data) void { - outString.print("#f84a00**Powerful**#808080 *Increases damage by **{d:.0}%", .{data.strength*100}); + if (data.multStrength != 0 and data.flatStrength != 0) outString.print("#f84a00**Powerful**#808080 *Increases damage by **{d:.0}%** and **+{d:.0}**", .{data.multStrength*100, data.flatStrength}); + if (data.multStrength != 0 and data.flatStrength == 0) outString.print("#f84a00**Powerful**#808080 *Increases damage by **{d:.0}%**", .{data.multStrength*100}); + if (data.multStrength == 0 and data.flatStrength != 0) outString.print("#f84a00**Powerful**#808080 *Increases damage by **+{d:.0}**", .{data.flatStrength}); + if (data.multStrength == 0 and data.flatStrength == 0) outString.print("#ff0000**Powerful did not find any multStrength and Flatstrength**", .{}); } diff --git a/src/proceduralItem/modifiers/weak.zig b/src/proceduralItem/modifiers/weak.zig index 6290f5aa22..564bc5d705 100644 --- a/src/proceduralItem/modifiers/weak.zig +++ b/src/proceduralItem/modifiers/weak.zig @@ -3,22 +3,35 @@ const std = @import("std"); const main = @import("main"); const ProceduralItem = main.items.ProceduralItem; -pub const Data = packed struct(u128) { strength: f32, pad: u96 = undefined }; +pub const Data = packed struct(u128) { multStrength: f32, flatStrength: f32, pad: u64 = undefined }; pub const priority = 1; pub fn loadData(zon: main.ZonElement) Data { - return .{.strength = std.math.clamp(zon.get(f32, "strength") orelse 0, 0, 1)}; + return .{ + .multStrength = std.math.clamp(zon.get(f32, "multStrength") orelse 0, 0, 1), + .flatStrength = @max(0, zon.get(f32, "flatStrength") orelse 0), + }; } pub fn combineModifiers(data1: Data, data2: Data) ?Data { - return .{.strength = 1.0 - 1.0/(1.0 + std.math.hypot(1.0/(1.0 - data1.strength) - 1.0, 1.0/(1.0 - data2.strength) - 1.0))}; + return .{ + .multStrength = 1.0 - 1.0/(1.0 + std.math.hypot(1.0/(1.0 - data1.multStrength) - 1.0, 1.0/(1.0 - data2.multStrength) - 1.0)), + .flatStrength = 1.0 - 1.0/(1.0 + std.math.hypot(1.0/(1.0 - data1.flatStrength) - 1.0, 1.0/(1.0 - data2.flatStrength) - 1.0)), + }; } -pub fn changeProceduralItemParameters(proceduralItem: *ProceduralItem, data: Data) void { - proceduralItem.setProperty(.damage, proceduralItem.getProperty(.damage)*(1 - data.strength)); +pub fn changeProceduralItemParametersFlat(proceduralItem: *ProceduralItem, data: Data) void { + proceduralItem.setProperty(.damage, proceduralItem.getProperty(.damage) + data.flatStrength); +} + +pub fn changeProceduralItemParametersMult(proceduralItem: *ProceduralItem, data: Data) void { + proceduralItem.setProperty(.damage, proceduralItem.getProperty(.damage)*(1 + data.multStrength)); } pub fn printTooltip(outString: *main.ListManaged(u8), data: Data) void { - outString.print("#fcb5e3**Weak**#808080 *Decreases damage by **{d:.0}%", .{data.strength*100}); + if (data.multStrength != 0 and data.flatStrength != 0) outString.print("#fcb5e3**Powerful**#808080 *Decreases damage by **{d:.0}%** and **-{d:.0}**", .{data.multStrength*100, data.flatStrength}); + if (data.multStrength != 0 and data.flatStrength == 0) outString.print("#fcb5e3**Powerful**#808080 *Decreases damage by **{d:.0}%**", .{data.multStrength*100}); + if (data.multStrength == 0 and data.flatStrength != 0) outString.print("#fcb5e3**Powerful**#808080 *Decreases damage by **-{d:.0}**", .{data.flatStrength}); + if (data.multStrength == 0 and data.flatStrength == 0) outString.print("#ff0000**Powerful did not find any multStrength and Flatstrength**", .{}); }