Maxposting Posted August 5, 2020 Share Posted August 5, 2020 4 hours ago, Ogrecakes said: Promise may sound like a strong word, but so does: This is honestly THE only thing hamlet didn't live up to. (and the roseate sporkbill, GIMME MY PINK BIRRRRBBB) Link to comment Share on other sites More sharing options...
Hornete Posted August 5, 2020 Share Posted August 5, 2020 On 8/3/2020 at 11:17 AM, Ogrecakes said: When you take a look at the code, and realize that Scorpions have broken target sharing code thats left in, the Hippapotamoose has a huge amount of unfinished reworked code that is left in its file that was replaced with temporary code, the fact that several things use the wrong sound paths and are misaing sounds because of it, the Platapine being labeled as like 5 different names when looking at all of its files, and the HUGE amount of cut and unfinished content... well, it's easy to say they cut development short and kicked the dlc out the door. How ironic. Spoiler Let's take a look at the Uncompromising Mod code. Your mod! It must be so much more amazing than Klei's code amirite?.... Oh, wonderful. There are 31 instances I have found where the Mod replaces functions instead of wrapping the functions(Saving the original function and running it in your new function) Spoiler local function feather_equip(inst, owner) onequip(inst, owner) owner:AddTag("penguin_protection") local attractor = owner.components.birdattractor if attractor then attractor.spawnmodifier:SetModifier(inst, TUNING.BIRD_SPAWN_MAXDELTA_FEATHERHAT, "maxbirds") attractor.spawnmodifier:SetModifier(inst, TUNING.BIRD_SPAWN_DELAYDELTA_FEATHERHAT.MIN, "mindelay") attractor.spawnmodifier:SetModifier(inst, TUNING.BIRD_SPAWN_DELAYDELTA_FEATHERHAT.MAX, "maxdelay") local birdspawner = TheWorld.components.birdspawner if birdspawner ~= nil then birdspawner:ToggleUpdate(true) end end end local function feather_unequip(inst, owner) onunequip(inst, owner) owner:RemoveTag("penguin_protection") local attractor = owner.components.birdattractor if attractor then attractor.spawnmodifier:RemoveModifier(inst) local birdspawner = TheWorld.components.birdspawner if birdspawner ~= nil then birdspawner:ToggleUpdate(true) end end end if inst.components.equippable ~= nil then inst.components.equippable:SetOnEquip(feather_equip) inst.components.equippable:SetOnUnequip(feather_unequip) end Spoiler local function onattack(inst, attacker, target) if target ~= nil and (target:HasTag("shadow") or target:HasTag("shadowminion") or target:HasTag("shadowchesspiece") or target:HasTag("stalker") or target:HasTag("stalkerminion")) and not target.components.health:IsDead() then target.components.health:DoDelta(-12) --print("damage") end --print("hit") inst.components.weapon.attackwear = target ~= nil and target:IsValid() and (target:HasTag("shadow") or target:HasTag("shadowminion") or target:HasTag("shadowchesspiece") or target:HasTag("stalker") or target:HasTag("stalkerminion")) and TUNING.GLASSCUTTER.SHADOW_WEAR or 1 end if inst.components.weapon ~= nil then inst.components.weapon:SetOnAttack(onattack) end And there is so much more. But let's continue.... Ah, look at this! You run and replace the depth worms attack in the caves not once but twice in the mod. But hey the code must get better right? Every mod/game has a little bit of stinky code. it has to get better.... right? In postinits/prefab/cave.lua and init/init_weather/init_harder_weather.lua Spoiler env.AddPrefabPostInit("cave", function(inst) if not TheWorld.ismastersim then return end --inst:AddComponent("cavedeerclopsspawner") --[[ if GetModConfigData("gamemode") == GAMEMODE_UNCOMPROMISING or (GetModConfigData("gamemode") == GAMEMODE_CUSTOM_SETTINGS and GetModConfigData("harder_weather") == true) then inst:AddComponent("hayfever_tracker") end--]] --inst:AddComponent("leechspawner") can reenable this once leeches are finished local newwormspawn = { base_prefab = "worm", winter_prefab = "shockworm", summer_prefab = "shockworm", attack_levels = { intro = { warnduration = function() return 120 end, numspawns = function() return 1 end }, light = { warnduration = function() return 60 end, numspawns = function() return 1 + math.random(0,1) end }, med = { warnduration = function() return 45 end, numspawns = function() return 1 + math.random(0,1) end }, heavy = { warnduration = function() return 30 end, numspawns = function() return 2 + math.random(0,1) end }, crazy = { warnduration = function() return 30 end, numspawns = function() return 3 + math.random(0,2) end }, }, attack_delays = { rare = function() return TUNING.TOTAL_DAY_TIME * 10, math.random() * TUNING.TOTAL_DAY_TIME * 7 end, occasional = function() return TUNING.TOTAL_DAY_TIME * 8, math.random() * TUNING.TOTAL_DAY_TIME * 7 end, frequent = function() return TUNING.TOTAL_DAY_TIME * 6, math.random() * TUNING.TOTAL_DAY_TIME * 5 end, }, warning_speech = "ANNOUNCE_WORMS", --Key = time, Value = sound prefab warning_sound_thresholds = { { time = 30, sound = "LVL4_WORM" }, { time = 60, sound = "LVL3_WORM" }, { time = 90, sound = "LVL2_WORM" }, { time = 500, sound = "LVL1_WORM" }, }, } inst.components.hounded:SetSpawnData(newwormspawn) end) Spoiler env.AddPrefabPostInit("cave", function(inst) if not TheWorld.ismastersim then return end inst:AddComponent("cavedeerclopsspawner") inst:AddComponent("randomnighteventscaves") local newwormspawn = { base_prefab = "worm", winter_prefab = "shockworm", summer_prefab = "shockworm", attack_levels = { intro = { warnduration = function() return 120 end, numspawns = function() return 1 end }, light = { warnduration = function() return 60 end, numspawns = function() return 1 + math.random(0,1) end }, med = { warnduration = function() return 45 end, numspawns = function() return 1 + math.random(0,1) end }, heavy = { warnduration = function() return 30 end, numspawns = function() return 2 + math.random(0,1) end }, crazy = { warnduration = function() return 30 end, numspawns = function() return 3 + math.random(0,2) end }, }, attack_delays = { rare = function() return TUNING.TOTAL_DAY_TIME * 10, math.random() * TUNING.TOTAL_DAY_TIME * 7 end, occasional = function() return TUNING.TOTAL_DAY_TIME * 8, math.random() * TUNING.TOTAL_DAY_TIME * 7 end, frequent = function() return TUNING.TOTAL_DAY_TIME * 6, math.random() * TUNING.TOTAL_DAY_TIME * 5 end, }, warning_speech = "ANNOUNCE_WORMS", --Key = time, Value = sound prefab warning_sound_thresholds = { { time = 30, sound = "LVL4_WORM" }, { time = 60, sound = "LVL3_WORM" }, { time = 90, sound = "LVL2_WORM" }, { time = 500, sound = "LVL1_WORM" }, }, } inst.components.hounded:SetSpawnData(newwormspawn) end) Let's not forget about how you replace crafting recipes to change their ingredients instead of simply changing or adding on to their ingredients table. Breaking compatibility with other mods who dare to change anything to these recipes and breaking the vanilla game if Klei decides to change any of these recipes in any way Spoiler Recipe("catcoonhat", {Ingredient("coontail", 5), Ingredient("silk", 4)}, RECIPETABS.DRESS, TECH.SCIENCE_TWO) Recipe("moonrockidol", {Ingredient("moonrocknugget", GLOBAL.TUNING.DSTU.RECIPE_MOONROCK_IDOL_MOONSTONE_COST), Ingredient("purplegem", 1)}, RECIPETABS.CELESTIAL, TECH.CELESTIAL_ONE, nil, nil, true) Recipe("minifan", {Ingredient("twigs", 3), Ingredient("petals",4)}, RECIPETABS.SURVIVAL, TECH.NONE) Recipe("goggleshat", {Ingredient("goldnugget", 4), Ingredient("pigskin",1), Ingredient("houndstooth", 2)}, RECIPETABS.DRESS, TECH.SCIENCE_ONE) Recipe("deserthat", {Ingredient("goggleshat", 1), Ingredient("pigskin",2)}, RECIPETABS.DRESS, TECH.SCIENCE_TWO) And not to mention the several instances of the mod replacing loot tables and/or tables in the vanilla game, instead of adding onto them. which will have consequences if any mods also change loot tables of the game, or if Klei updates loot tables Spoiler if inst.components.lootdropper ~= nil then inst.components.lootdropper:SetChanceLootTable("toadystool") end -- if inst.components.lootdropper ~= nil then inst.components.lootdropper:SetChanceLootTable("toadystool_dark") end Oh, and this wonderful code. The CheckForSnow function is ran every two seconds on many basic structures, and in that CheckForSnow function the RemovedSnowedTag is set to run in 400 seconds, but oh boy. Your code doesnt check if the RemovedSnowTag function is set to run in 400 seconds and so the game constantly keeps making tasks to run the RemovedSnowTag function everytime the CheckForSnow function is ran, aka every two seconds. Resulting in these tasks building up by tens, even up to hundreds. I sure do love having 100 tasks running on the entities of my structures. Spoiler local function CheckForSnow(inst) local x, y, z = inst.Transform:GetWorldPosition() local ents = TheSim:FindEntities(x, y, z, 1, { "snowpile_basic" }) if #ents > 0 then --if inst.components.container ~= nil then --inst:RemoveComponent("container") local x1, y1, z1 = inst.Transform:GetWorldPosition() local ents2 = TheSim:FindEntities(x1, y1, z1, 1, { "snowpile" }) if #ents2 > 0 then inst:AddTag("INLIMBO") end inst:AddTag("snowpiledin") --end else --if inst.components.container == nil then --inst:AddComponent("container") --end inst:RemoveTag("INLIMBO") end inst:DoTaskInTime(400, RemoveSnowedTag) inst:DoTaskInTime(2, CheckForSnow) end local function AddContainers(prefab) AddPrefabPostInit(prefab, function (inst) if not GLOBAL.TheWorld.ismastersim then return end inst:DoTaskInTime(2, CheckForSnow) end) end How spectacular, broken code that has been left in since Uncompromising Mode has been released and yet it hasnt been fixed yet. Spoiler ----------------------------------------------------------------- --Amulet auto-respawn if worn, like in DS ----------------------------------------------------------------- --TODO: FIx this, not working AddPrefabPostInit("amulet", function (inst) if inst ~= nil and inst.components.inventoryitem ~= nil then inst.components.inventoryitem.keepondeath = true end end) AddPlayerPostInit(function (inst) local function checkamulet(inst) local item = inst.components.inventory:GetEquippedItem(GLOBAL.EQUIPSLOTS.BODY) if item ~= nil and item.prefab == "amulet" then if item ~= nil then inst.sg.statemem.usedamulet = true inst:PushEvent("respawnfromghost", { source = item }) item:Remove() end end end local function hardcoredeath(inst) inst:DoTaskInTime(5, checkamulet) if inst.components.trader ~= nil then inst.components.trader.enabled = false end end inst:ListenForEvent("death", hardcoredeath) end) Good ol files that are left in. Sound familiar? Listen, Im not here to diss your mod, or make you feel bad. But it frustrates me, and its extremely annoying and hypocritical when you rant on Klei and Hamlet, and how terribly coded and unfinished it is. And yet you and your folks act like you are so much better than Klei. And do the same thing, leaving in files, having "terrible" and "unfinished" code. And it's arguably much worse than what Klei has done. Link to comment Share on other sites More sharing options...
SpoonyBardIV Posted August 5, 2020 Share Posted August 5, 2020 4 hours ago, Ogrecakes said: JoeW doesn't clear up why the development was so obviously canceled, and there's no answer as to where all the promised content and bug fixes are. That's what I have a problem with. I would be completely happy and satisfied with Hamlet if everything that was supposed to be included was actually there. But it's hard to support a DLC that had a lot of content cut for no apparent reason. Especially after the devs specifically saying that it will be added. Link to comment Share on other sites More sharing options...
Scrimbles Posted August 5, 2020 Share Posted August 5, 2020 5 minutes ago, Hornete said: How ironic. Hide contents Let's take a look at the Uncompromising Mod code. Your mod! It must be so much more amazing than Klei's code amirite?.... Oh, wonderful. There are 31 instances I have found where the Mod replaces functions instead of wrapping the functions(Saving the original function and running it in your new function) Reveal hidden contents local function feather_equip(inst, owner) onequip(inst, owner) owner:AddTag("penguin_protection") local attractor = owner.components.birdattractor if attractor then attractor.spawnmodifier:SetModifier(inst, TUNING.BIRD_SPAWN_MAXDELTA_FEATHERHAT, "maxbirds") attractor.spawnmodifier:SetModifier(inst, TUNING.BIRD_SPAWN_DELAYDELTA_FEATHERHAT.MIN, "mindelay") attractor.spawnmodifier:SetModifier(inst, TUNING.BIRD_SPAWN_DELAYDELTA_FEATHERHAT.MAX, "maxdelay") local birdspawner = TheWorld.components.birdspawner if birdspawner ~= nil then birdspawner:ToggleUpdate(true) end end end local function feather_unequip(inst, owner) onunequip(inst, owner) owner:RemoveTag("penguin_protection") local attractor = owner.components.birdattractor if attractor then attractor.spawnmodifier:RemoveModifier(inst) local birdspawner = TheWorld.components.birdspawner if birdspawner ~= nil then birdspawner:ToggleUpdate(true) end end end if inst.components.equippable ~= nil then inst.components.equippable:SetOnEquip(feather_equip) inst.components.equippable:SetOnUnequip(feather_unequip) end Reveal hidden contents local function onattack(inst, attacker, target) if target ~= nil and (target:HasTag("shadow") or target:HasTag("shadowminion") or target:HasTag("shadowchesspiece") or target:HasTag("stalker") or target:HasTag("stalkerminion")) and not target.components.health:IsDead() then target.components.health:DoDelta(-12) --print("damage") end --print("hit") inst.components.weapon.attackwear = target ~= nil and target:IsValid() and (target:HasTag("shadow") or target:HasTag("shadowminion") or target:HasTag("shadowchesspiece") or target:HasTag("stalker") or target:HasTag("stalkerminion")) and TUNING.GLASSCUTTER.SHADOW_WEAR or 1 end if inst.components.weapon ~= nil then inst.components.weapon:SetOnAttack(onattack) end And there is so much more. But let's continue.... Ah, look at this! You run and replace the depth worms attack in the caves not once but twice in the mod. But hey the code must get better right? Every mod/game has a little bit of stinky code. it has to get better.... right? In postinits/prefab/cave.lua and init/init_weather/init_harder_weather.lua Reveal hidden contents env.AddPrefabPostInit("cave", function(inst) if not TheWorld.ismastersim then return end --inst:AddComponent("cavedeerclopsspawner") --[[ if GetModConfigData("gamemode") == GAMEMODE_UNCOMPROMISING or (GetModConfigData("gamemode") == GAMEMODE_CUSTOM_SETTINGS and GetModConfigData("harder_weather") == true) then inst:AddComponent("hayfever_tracker") end--]] --inst:AddComponent("leechspawner") can reenable this once leeches are finished local newwormspawn = { base_prefab = "worm", winter_prefab = "shockworm", summer_prefab = "shockworm", attack_levels = { intro = { warnduration = function() return 120 end, numspawns = function() return 1 end }, light = { warnduration = function() return 60 end, numspawns = function() return 1 + math.random(0,1) end }, med = { warnduration = function() return 45 end, numspawns = function() return 1 + math.random(0,1) end }, heavy = { warnduration = function() return 30 end, numspawns = function() return 2 + math.random(0,1) end }, crazy = { warnduration = function() return 30 end, numspawns = function() return 3 + math.random(0,2) end }, }, attack_delays = { rare = function() return TUNING.TOTAL_DAY_TIME * 10, math.random() * TUNING.TOTAL_DAY_TIME * 7 end, occasional = function() return TUNING.TOTAL_DAY_TIME * 8, math.random() * TUNING.TOTAL_DAY_TIME * 7 end, frequent = function() return TUNING.TOTAL_DAY_TIME * 6, math.random() * TUNING.TOTAL_DAY_TIME * 5 end, }, warning_speech = "ANNOUNCE_WORMS", --Key = time, Value = sound prefab warning_sound_thresholds = { { time = 30, sound = "LVL4_WORM" }, { time = 60, sound = "LVL3_WORM" }, { time = 90, sound = "LVL2_WORM" }, { time = 500, sound = "LVL1_WORM" }, }, } inst.components.hounded:SetSpawnData(newwormspawn) end) Reveal hidden contents env.AddPrefabPostInit("cave", function(inst) if not TheWorld.ismastersim then return end inst:AddComponent("cavedeerclopsspawner") inst:AddComponent("randomnighteventscaves") local newwormspawn = { base_prefab = "worm", winter_prefab = "shockworm", summer_prefab = "shockworm", attack_levels = { intro = { warnduration = function() return 120 end, numspawns = function() return 1 end }, light = { warnduration = function() return 60 end, numspawns = function() return 1 + math.random(0,1) end }, med = { warnduration = function() return 45 end, numspawns = function() return 1 + math.random(0,1) end }, heavy = { warnduration = function() return 30 end, numspawns = function() return 2 + math.random(0,1) end }, crazy = { warnduration = function() return 30 end, numspawns = function() return 3 + math.random(0,2) end }, }, attack_delays = { rare = function() return TUNING.TOTAL_DAY_TIME * 10, math.random() * TUNING.TOTAL_DAY_TIME * 7 end, occasional = function() return TUNING.TOTAL_DAY_TIME * 8, math.random() * TUNING.TOTAL_DAY_TIME * 7 end, frequent = function() return TUNING.TOTAL_DAY_TIME * 6, math.random() * TUNING.TOTAL_DAY_TIME * 5 end, }, warning_speech = "ANNOUNCE_WORMS", --Key = time, Value = sound prefab warning_sound_thresholds = { { time = 30, sound = "LVL4_WORM" }, { time = 60, sound = "LVL3_WORM" }, { time = 90, sound = "LVL2_WORM" }, { time = 500, sound = "LVL1_WORM" }, }, } inst.components.hounded:SetSpawnData(newwormspawn) end) Let's not forget about how you replace crafting recipes to change their ingredients instead of simply changing or adding on to their ingredients table. Breaking compatibility with other mods who dare to change anything to these recipes and breaking the vanilla game if Klei decides to change any of these recipes in any way Reveal hidden contents Recipe("catcoonhat", {Ingredient("coontail", 5), Ingredient("silk", 4)}, RECIPETABS.DRESS, TECH.SCIENCE_TWO) Recipe("moonrockidol", {Ingredient("moonrocknugget", GLOBAL.TUNING.DSTU.RECIPE_MOONROCK_IDOL_MOONSTONE_COST), Ingredient("purplegem", 1)}, RECIPETABS.CELESTIAL, TECH.CELESTIAL_ONE, nil, nil, true) Recipe("minifan", {Ingredient("twigs", 3), Ingredient("petals",4)}, RECIPETABS.SURVIVAL, TECH.NONE) Recipe("goggleshat", {Ingredient("goldnugget", 4), Ingredient("pigskin",1), Ingredient("houndstooth", 2)}, RECIPETABS.DRESS, TECH.SCIENCE_ONE) Recipe("deserthat", {Ingredient("goggleshat", 1), Ingredient("pigskin",2)}, RECIPETABS.DRESS, TECH.SCIENCE_TWO) And not to mention the several instances of the mod replacing loot tables and/or tables in the vanilla game, instead of adding onto them. which will have consequences if any mods also change loot tables of the game, or if Klei updates loot tables Reveal hidden contents if inst.components.lootdropper ~= nil then inst.components.lootdropper:SetChanceLootTable("toadystool") end -- if inst.components.lootdropper ~= nil then inst.components.lootdropper:SetChanceLootTable("toadystool_dark") end Oh, and this wonderful code. The CheckForSnow function is ran every two seconds on many basic structures, and in that CheckForSnow function the RemovedSnowedTag is set to run in 400 seconds, but oh boy. Your code doesnt check if the RemovedSnowTag function is set to run in 400 seconds and so the game constantly keeps making tasks to run the RemovedSnowTag function everytime the CheckForSnow function is ran, aka every two seconds. Resulting in these tasks building up by tens, even up to hundreds. I sure do love having 100 tasks running on the entities of my structures. local function CheckForSnow(inst) local x, y, z = inst.Transform:GetWorldPosition() local ents = TheSim:FindEntities(x, y, z, 1, { "snowpile_basic" }) if #ents > 0 then --if inst.components.container ~= nil then --inst:RemoveComponent("container") local x1, y1, z1 = inst.Transform:GetWorldPosition() local ents2 = TheSim:FindEntities(x1, y1, z1, 1, { "snowpile" }) if #ents2 > 0 then inst:AddTag("INLIMBO") end inst:AddTag("snowpiledin") --end else --if inst.components.container == nil then --inst:AddComponent("container") --end inst:RemoveTag("INLIMBO") end inst:DoTaskInTime(400, RemoveSnowedTag) inst:DoTaskInTime(2, CheckForSnow) end local function AddContainers(prefab) AddPrefabPostInit(prefab, function (inst) if not GLOBAL.TheWorld.ismastersim then return end inst:DoTaskInTime(2, CheckForSnow) end) end How spectacular, broken code that has been left in since Uncompromising Mode has been released and yet it hasnt been fixed yet. Reveal hidden contents ----------------------------------------------------------------- --Amulet auto-respawn if worn, like in DS ----------------------------------------------------------------- --TODO: FIx this, not working AddPrefabPostInit("amulet", function (inst) if inst ~= nil and inst.components.inventoryitem ~= nil then inst.components.inventoryitem.keepondeath = true end end) AddPlayerPostInit(function (inst) local function checkamulet(inst) local item = inst.components.inventory:GetEquippedItem(GLOBAL.EQUIPSLOTS.BODY) if item ~= nil and item.prefab == "amulet" then if item ~= nil then inst.sg.statemem.usedamulet = true inst:PushEvent("respawnfromghost", { source = item }) item:Remove() end end end local function hardcoredeath(inst) inst:DoTaskInTime(5, checkamulet) if inst.components.trader ~= nil then inst.components.trader.enabled = false end end inst:ListenForEvent("death", hardcoredeath) end) Good ol files that are left in. Sound familiar? Listen, Im not here to diss your mod, or make you feel bad. But it frustrates me, and its extremely annoying and hypocritical when you rant on Klei and Hamlet, and how terribly coded and unfinished it is. And yet you and your folks do the same thing, leaving in files, having "terrible" and "unfinished" code. And it's arguably much worse than what Klei has done. Youre comparing someone that learned all their coding from scratch, with no prior knowledge or real experience, who finished up a project on their own free time for free, that was abandoned and left broken and by yourself and others, to a team of professional coders, artists, and designers who are payed for their work, and are selling their product. You left broken and unfinished code that caused crashes, I dont know what you hope to gain by this arguement. https://cdn.discordapp.com/attachments/623668772196319262/740541423866347589/morshu_confused.png Link to comment Share on other sites More sharing options...
Canis Posted August 5, 2020 Share Posted August 5, 2020 1 hour ago, Ogrecakes said: Youre comparing someone that learned all their coding from scratch, with no prior knowledge or real experience, who finished up a project on their own free time for free, that was abandoned and left broken and by yourself and others, to a team of professional coders, artists, and designers who are payed for their work, and are selling their product. You left broken and unfinished code that caused crashes, I dont know what you hope to gain by this arguement. https://cdn.discordapp.com/attachments/623668772196319262/740541423866347589/morshu_confused.png Putting this in simpler words: Klei: A heavily funded studio full of professionals creating content as a job Uncomp Devs: Individuals (Some not even adults yet, including myself) with little prior experience and 0 funding, making a passion project in their spare time. @Hornete this may seem petty considering both Scrimbles and I are uncomp devs coming to defend uncomp, but frankly your argument sucks. We are never going to have the manpower that Klei has, but that doesn't mean that they are above critique. You going out of your way to look through our mod's code (which again, isn't made by paid professionals) is really petty. This is like comparing an artist (or maybe a group of artists in our case) who has been drawing as a hobby for a year to an artist that has made a living with a 10-year long career under their belt because the former saw an error. In short, we're allowed to "punch up" and critique Klei because they are a studio of paid professionals, and comparing a ragtag team of fans making a passion project is silly. Link to comment Share on other sites More sharing options...
WoodieMain45684 Posted August 5, 2020 Share Posted August 5, 2020 Thanks for the pointers though, looking into all of that asap! Link to comment Share on other sites More sharing options...
inferjus4 Posted August 7, 2020 Share Posted August 7, 2020 On 8/5/2020 at 5:36 PM, Hornete said: How ironic. Hide contents Let's take a look at the Uncompromising Mod code. Your mod! It must be so much more amazing than Klei's code amirite?.... Oh, wonderful. There are 31 instances I have found where the Mod replaces functions instead of wrapping the functions(Saving the original function and running it in your new function) Reveal hidden contents local function feather_equip(inst, owner) onequip(inst, owner) owner:AddTag("penguin_protection") local attractor = owner.components.birdattractor if attractor then attractor.spawnmodifier:SetModifier(inst, TUNING.BIRD_SPAWN_MAXDELTA_FEATHERHAT, "maxbirds") attractor.spawnmodifier:SetModifier(inst, TUNING.BIRD_SPAWN_DELAYDELTA_FEATHERHAT.MIN, "mindelay") attractor.spawnmodifier:SetModifier(inst, TUNING.BIRD_SPAWN_DELAYDELTA_FEATHERHAT.MAX, "maxdelay") local birdspawner = TheWorld.components.birdspawner if birdspawner ~= nil then birdspawner:ToggleUpdate(true) end end end local function feather_unequip(inst, owner) onunequip(inst, owner) owner:RemoveTag("penguin_protection") local attractor = owner.components.birdattractor if attractor then attractor.spawnmodifier:RemoveModifier(inst) local birdspawner = TheWorld.components.birdspawner if birdspawner ~= nil then birdspawner:ToggleUpdate(true) end end end if inst.components.equippable ~= nil then inst.components.equippable:SetOnEquip(feather_equip) inst.components.equippable:SetOnUnequip(feather_unequip) end Reveal hidden contents local function onattack(inst, attacker, target) if target ~= nil and (target:HasTag("shadow") or target:HasTag("shadowminion") or target:HasTag("shadowchesspiece") or target:HasTag("stalker") or target:HasTag("stalkerminion")) and not target.components.health:IsDead() then target.components.health:DoDelta(-12) --print("damage") end --print("hit") inst.components.weapon.attackwear = target ~= nil and target:IsValid() and (target:HasTag("shadow") or target:HasTag("shadowminion") or target:HasTag("shadowchesspiece") or target:HasTag("stalker") or target:HasTag("stalkerminion")) and TUNING.GLASSCUTTER.SHADOW_WEAR or 1 end if inst.components.weapon ~= nil then inst.components.weapon:SetOnAttack(onattack) end And there is so much more. But let's continue.... Ah, look at this! You run and replace the depth worms attack in the caves not once but twice in the mod. But hey the code must get better right? Every mod/game has a little bit of stinky code. it has to get better.... right? In postinits/prefab/cave.lua and init/init_weather/init_harder_weather.lua Reveal hidden contents env.AddPrefabPostInit("cave", function(inst) if not TheWorld.ismastersim then return end --inst:AddComponent("cavedeerclopsspawner") --[[ if GetModConfigData("gamemode") == GAMEMODE_UNCOMPROMISING or (GetModConfigData("gamemode") == GAMEMODE_CUSTOM_SETTINGS and GetModConfigData("harder_weather") == true) then inst:AddComponent("hayfever_tracker") end--]] --inst:AddComponent("leechspawner") can reenable this once leeches are finished local newwormspawn = { base_prefab = "worm", winter_prefab = "shockworm", summer_prefab = "shockworm", attack_levels = { intro = { warnduration = function() return 120 end, numspawns = function() return 1 end }, light = { warnduration = function() return 60 end, numspawns = function() return 1 + math.random(0,1) end }, med = { warnduration = function() return 45 end, numspawns = function() return 1 + math.random(0,1) end }, heavy = { warnduration = function() return 30 end, numspawns = function() return 2 + math.random(0,1) end }, crazy = { warnduration = function() return 30 end, numspawns = function() return 3 + math.random(0,2) end }, }, attack_delays = { rare = function() return TUNING.TOTAL_DAY_TIME * 10, math.random() * TUNING.TOTAL_DAY_TIME * 7 end, occasional = function() return TUNING.TOTAL_DAY_TIME * 8, math.random() * TUNING.TOTAL_DAY_TIME * 7 end, frequent = function() return TUNING.TOTAL_DAY_TIME * 6, math.random() * TUNING.TOTAL_DAY_TIME * 5 end, }, warning_speech = "ANNOUNCE_WORMS", --Key = time, Value = sound prefab warning_sound_thresholds = { { time = 30, sound = "LVL4_WORM" }, { time = 60, sound = "LVL3_WORM" }, { time = 90, sound = "LVL2_WORM" }, { time = 500, sound = "LVL1_WORM" }, }, } inst.components.hounded:SetSpawnData(newwormspawn) end) Reveal hidden contents env.AddPrefabPostInit("cave", function(inst) if not TheWorld.ismastersim then return end inst:AddComponent("cavedeerclopsspawner") inst:AddComponent("randomnighteventscaves") local newwormspawn = { base_prefab = "worm", winter_prefab = "shockworm", summer_prefab = "shockworm", attack_levels = { intro = { warnduration = function() return 120 end, numspawns = function() return 1 end }, light = { warnduration = function() return 60 end, numspawns = function() return 1 + math.random(0,1) end }, med = { warnduration = function() return 45 end, numspawns = function() return 1 + math.random(0,1) end }, heavy = { warnduration = function() return 30 end, numspawns = function() return 2 + math.random(0,1) end }, crazy = { warnduration = function() return 30 end, numspawns = function() return 3 + math.random(0,2) end }, }, attack_delays = { rare = function() return TUNING.TOTAL_DAY_TIME * 10, math.random() * TUNING.TOTAL_DAY_TIME * 7 end, occasional = function() return TUNING.TOTAL_DAY_TIME * 8, math.random() * TUNING.TOTAL_DAY_TIME * 7 end, frequent = function() return TUNING.TOTAL_DAY_TIME * 6, math.random() * TUNING.TOTAL_DAY_TIME * 5 end, }, warning_speech = "ANNOUNCE_WORMS", --Key = time, Value = sound prefab warning_sound_thresholds = { { time = 30, sound = "LVL4_WORM" }, { time = 60, sound = "LVL3_WORM" }, { time = 90, sound = "LVL2_WORM" }, { time = 500, sound = "LVL1_WORM" }, }, } inst.components.hounded:SetSpawnData(newwormspawn) end) Let's not forget about how you replace crafting recipes to change their ingredients instead of simply changing or adding on to their ingredients table. Breaking compatibility with other mods who dare to change anything to these recipes and breaking the vanilla game if Klei decides to change any of these recipes in any way Reveal hidden contents Recipe("catcoonhat", {Ingredient("coontail", 5), Ingredient("silk", 4)}, RECIPETABS.DRESS, TECH.SCIENCE_TWO) Recipe("moonrockidol", {Ingredient("moonrocknugget", GLOBAL.TUNING.DSTU.RECIPE_MOONROCK_IDOL_MOONSTONE_COST), Ingredient("purplegem", 1)}, RECIPETABS.CELESTIAL, TECH.CELESTIAL_ONE, nil, nil, true) Recipe("minifan", {Ingredient("twigs", 3), Ingredient("petals",4)}, RECIPETABS.SURVIVAL, TECH.NONE) Recipe("goggleshat", {Ingredient("goldnugget", 4), Ingredient("pigskin",1), Ingredient("houndstooth", 2)}, RECIPETABS.DRESS, TECH.SCIENCE_ONE) Recipe("deserthat", {Ingredient("goggleshat", 1), Ingredient("pigskin",2)}, RECIPETABS.DRESS, TECH.SCIENCE_TWO) And not to mention the several instances of the mod replacing loot tables and/or tables in the vanilla game, instead of adding onto them. which will have consequences if any mods also change loot tables of the game, or if Klei updates loot tables Reveal hidden contents if inst.components.lootdropper ~= nil then inst.components.lootdropper:SetChanceLootTable("toadystool") end -- if inst.components.lootdropper ~= nil then inst.components.lootdropper:SetChanceLootTable("toadystool_dark") end Oh, and this wonderful code. The CheckForSnow function is ran every two seconds on many basic structures, and in that CheckForSnow function the RemovedSnowedTag is set to run in 400 seconds, but oh boy. Your code doesnt check if the RemovedSnowTag function is set to run in 400 seconds and so the game constantly keeps making tasks to run the RemovedSnowTag function everytime the CheckForSnow function is ran, aka every two seconds. Resulting in these tasks building up by tens, even up to hundreds. I sure do love having 100 tasks running on the entities of my structures. Reveal hidden contents local function CheckForSnow(inst) local x, y, z = inst.Transform:GetWorldPosition() local ents = TheSim:FindEntities(x, y, z, 1, { "snowpile_basic" }) if #ents > 0 then --if inst.components.container ~= nil then --inst:RemoveComponent("container") local x1, y1, z1 = inst.Transform:GetWorldPosition() local ents2 = TheSim:FindEntities(x1, y1, z1, 1, { "snowpile" }) if #ents2 > 0 then inst:AddTag("INLIMBO") end inst:AddTag("snowpiledin") --end else --if inst.components.container == nil then --inst:AddComponent("container") --end inst:RemoveTag("INLIMBO") end inst:DoTaskInTime(400, RemoveSnowedTag) inst:DoTaskInTime(2, CheckForSnow) end local function AddContainers(prefab) AddPrefabPostInit(prefab, function (inst) if not GLOBAL.TheWorld.ismastersim then return end inst:DoTaskInTime(2, CheckForSnow) end) end How spectacular, broken code that has been left in since Uncompromising Mode has been released and yet it hasnt been fixed yet. Reveal hidden contents ----------------------------------------------------------------- --Amulet auto-respawn if worn, like in DS ----------------------------------------------------------------- --TODO: FIx this, not working AddPrefabPostInit("amulet", function (inst) if inst ~= nil and inst.components.inventoryitem ~= nil then inst.components.inventoryitem.keepondeath = true end end) AddPlayerPostInit(function (inst) local function checkamulet(inst) local item = inst.components.inventory:GetEquippedItem(GLOBAL.EQUIPSLOTS.BODY) if item ~= nil and item.prefab == "amulet" then if item ~= nil then inst.sg.statemem.usedamulet = true inst:PushEvent("respawnfromghost", { source = item }) item:Remove() end end end local function hardcoredeath(inst) inst:DoTaskInTime(5, checkamulet) if inst.components.trader ~= nil then inst.components.trader.enabled = false end end inst:ListenForEvent("death", hardcoredeath) end) Good ol files that are left in. Sound familiar? Listen, Im not here to diss your mod, or make you feel bad. But it frustrates me, and its extremely annoying and hypocritical when you rant on Klei and Hamlet, and how terribly coded and unfinished it is. And yet you and your folks act like you are so much better than Klei. And do the same thing, leaving in files, having "terrible" and "unfinished" code. And it's arguably much worse than what Klei has done. The whole problem with this argument is Klei is here making games professionally and Ogrecakes is just a player that makes mods in their free time. When someone who is less experienced in coding can point out so many proffesionall coders' mistakes, it says something. And your argument is just awfully bad, because it's like saying to some casual cook that they shouldn't express their negative opinion on cake made by professionall chef because they are less experienced. So no, it's not ironic that Ogrecakes is "bad" at coding too. They are not obligated to be good at it, Klei is. Link to comment Share on other sites More sharing options...
ArubaroBeefalo Posted August 8, 2020 Share Posted August 8, 2020 On 8/5/2020 at 8:40 AM, TimothyCarter said: I know a lot of people are upset with Ham, but like, I really love it. Yeah, the bugs are annoying sometimes, but I can't help but laugh at them a lot of times. Hamlet isn't perfect, but for me, it added a lot to the game that I really love. Crafting finally being integrated between DLCs opened the game up to so much, the interiors are so fun to decorate and add to. Hell, even just storing stuff in a very small location on your base makes interiors amazing. The End's Well made teleportation very viable. The iron man suit is so much fun when you want/need to destroy some annoying enemy infested areas. O B S I D E A N F I R E P I T I N R O G. Shops that sell volt goat horns and ox horns. I can actually craft morning stars and weather pains and the ox horn helmet. The root trunk is such a great way to store common things you need in worlds like money and key to the city. People on this message board are so sour and I feel like I can never really express my opinion here about how much I like Hamlet. Yeah, I get it, the aporkalypse feels a bit empty, the weather seems like more could have been done, but the game is so different now due to Hamlet, and for me, it so perfect and distinct from DST. Aight rant over, ya'll can leave i lovee the mechanics you said, i really like hamlet and i think is worth to buy it and more being so cheap as it is but i would pay more if the lacks that it has were covered and the bugs fixed single player ds has a lot of potential dlcs with differents kind of worlds but its sad to see that we were stuck on the map of rog forever since klei doesnt want to continue singleplayer and dst cant affort multiple worlds Link to comment Share on other sites More sharing options...
Scrimbles Posted August 14, 2020 Share Posted August 14, 2020 On 8/7/2020 at 5:23 PM, inferjus4 said: The whole problem with this argument is Klei is here making games professionally and Ogrecakes is just a player that makes mods in their free time. When someone who is less experienced in coding can point out so many proffesionall coders' mistakes, it says something. And your argument is just awfully bad, because it's like saying to some casual cook that they shouldn't express their negative opinion on cake made by professionall chef because they are less experienced. So no, it's not ironic that Ogrecakes is "bad" at coding too. They are not obligated to be good at it, Klei is. Also Hornet is a former dev that left unfinished code that caused crashes in the mod, I had to fix that stuff too. We're on good terms over all, but what a dummy :^) Link to comment Share on other sites More sharing options...
JosePapp Posted August 15, 2020 Share Posted August 15, 2020 Look, i get not being completely satisfied with Hamlet, just yesterday no joke i spent around 15 minutes thinking on how you could tie things together in the dlc, even if cutting it's scope a little. But is it really worth it to dabble on it over and over until the end of time? i mean Klei IS a game dev studio,and they SHOULD have tried to polish Hamlet to the best it could be, but they're bound to make mistakes too because, they're human. I'm not excusing them mind you, and i guess it would have sucked to get a less complete dlc for 2 more bucks than the other two, but just BECAUSE they're game devs, that means that they likely use those jobs to provide for their homesteads and whatnot, and Hamlet just didn't and doesn't sell how they hoped it would.Maybe it was due to lack of planning or other behind the scenes stuff, but it's heavily implied that they cut it because they went overbudget. (and please, let's not dabble on the free copies gift event people use to blame Hamlet's cut dev time on). Hamlet's situation sucks and i can think of a bajillion ways to make Hamlet less broad, more compact and therefore a more complete product, but, no budget means no development and let's not forget that Klei is a business too. i get that complaining is the only thing we could do but it's been over a year and it's fruitless, so why not focus somewhere else instead of crying over spilled milk? Also, @Ogrecakes (hope you don't mind me tagging you), a bit of constructive criticism, a lot of people are somewhat edgy or hostile regarding uncompromising not because of the mod itself but the community surrounding it. Sometimes you give the impression that you're completely and utterly disatisfied at whatever Klei throws into dst (which is fine, you have free will and the right to be entitled to your opinions) but the way you approach to criticize them sometimes pointing all of their flaws out while claiming that such design issues are fixed in your mod sort of makes you, and the members of your community that are like that, seem stuck up, proud and a bit edgy or unfriendly, which i don't think it's the intention. Not trying to call you out or anything, just pointing that out in a friendly manner Link to comment Share on other sites More sharing options...
Rellimarual Posted August 27, 2020 Share Posted August 27, 2020 I guess I am unusual, but despite all the new content in DST right now, including a lot of stuff I haven’t even really experienced myself yet, I still find myself playing Shipwrecked and Hamlet a lot more than DST. I love both of these DLC ‘s, and I especially appreciate a break from the sepia tone color palette and too-familiar biomes of ROG. I know multiplayer games are what everyone seems to want right now, but it’s too hard to find friends to play with and ultimately I just don’t care about that. I would happily buy more single player DLCs on the order of Hamlet. I love what was added in terms of mechanics and interiors and biomes, and the ability to bring Hamlet structures into SW, my all-time favorite, is fantastic. I really don’t get all this griping. Hamlet expanded on the existing base game and DLCs exponentially. It just saddens me to think that there won’t be more DLCs for single-player. I would happily pay four times what they charge for them, or pay for events and add-ons if that were possible. Link to comment Share on other sites More sharing options...
chirsg Posted September 8, 2020 Share Posted September 8, 2020 Hamlet together. PLZ bro PLZ I want hamlet together bad. REAL bad. I want neighbors. I want to borrow gears, bro. I want to set fire to manure in front of their houses, watch the stamp it out and get smelly shoes, bro. I want to steal a froggle bunwich and blame it on my neighbor and laugh as he gets chased by guards, bro. I want it. I NEED it. I want city planning but with friends and enemies. PLZ BRO Link to comment Share on other sites More sharing options...
Shildorien Posted September 15, 2020 Share Posted September 15, 2020 Oh man, that is can be really awesome but I can not see any updates in future and that makes me really sad. Link to comment Share on other sites More sharing options...
SilverBisexual Posted September 29, 2020 Share Posted September 29, 2020 On 8/15/2020 at 8:08 AM, JosePapp said: Also, @Ogrecakes (hope you don't mind me tagging you), a bit of constructive criticism, a lot of people are somewhat edgy or hostile regarding uncompromising not because of the mod itself but the community surrounding it. Sometimes you give the impression that you're completely and utterly disatisfied at whatever Klei throws into dst (which is fine, you have free will and the right to be entitled to your opinions) but the way you approach to criticize them sometimes pointing all of their flaws out while claiming that such design issues are fixed in your mod sort of makes you, and the members of your community that are like that, seem stuck up, proud and a bit edgy or unfriendly, which i don't think it's the intention. Not trying to call you out or anything, just pointing that out in a friendly manner Yeah, that's my biggest problem too. In no way do I think the mod "fixes" things. It makes them different, and some people like that. Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.
Please be aware that the content of this thread may be outdated and no longer applicable.