From 477909d00ff1df3b9823dab1680b660c1bd8018d Mon Sep 17 00:00:00 2001 From: jacob1 Date: Mon, 21 Feb 2022 23:56:52 -0500 Subject: [PATCH] Redo code that makes SOAP float on OIL Rather than hacking velocity, do it directly through can_move. Add a special case to make it slowly float upwards, rather than immediate like most weight differences in TPT. --- src/simulation/Simulation.cpp | 10 ++++++++++ src/simulation/elements/SOAP.cpp | 16 ---------------- 2 files changed, 10 insertions(+), 16 deletions(-) diff --git a/src/simulation/Simulation.cpp b/src/simulation/Simulation.cpp index 2bb286ff4..042e1487d 100644 --- a/src/simulation/Simulation.cpp +++ b/src/simulation/Simulation.cpp @@ -2487,6 +2487,8 @@ void Simulation::init_can_move() can_move[PT_THDR][PT_THDR] = 2; can_move[PT_EMBR][PT_EMBR] = 2; can_move[PT_TRON][PT_SWCH] = 3; + can_move[PT_SOAP][PT_OIL] = 0; + can_move[PT_OIL][PT_SOAP] = 1; } /* @@ -2812,6 +2814,14 @@ int Simulation::try_move(int i, int x, int y, int nx, int ny) return 0; } break; + // SOAP slowly floats up inside OIL + case PT_SOAP: + if (parts[i].type == PT_OIL) + { + if (RNG::Ref().chance(19, 20) || std::abs(parts[i].x - nx) > 3 || std::abs(parts[i].y - ny) > 3) + return 0; + } + break; } switch (parts[i].type) diff --git a/src/simulation/elements/SOAP.cpp b/src/simulation/elements/SOAP.cpp index cb68a1fad..bed250fb7 100644 --- a/src/simulation/elements/SOAP.cpp +++ b/src/simulation/elements/SOAP.cpp @@ -234,22 +234,6 @@ static int update(UPDATE_FUNC_ARGS) parts[i].ctype = 1; parts[i].life = 10; } - for (rx=-2; rx<3; rx++) - for (ry=-2; ry<3; ry++) - if (BOUNDS_CHECK && (rx || ry)) - { - r = pmap[y+ry][x+rx]; - if (!r) - continue; - if (TYP(r) == PT_OIL) - { - float ax, ay; - ax = (parts[i].vx*0.5f + parts[ID(r)].vx)/2; - ay = ((parts[i].vy-0.1f)*0.5f + parts[ID(r)].vy)/2; - parts[i].vx = parts[ID(r)].vx = ax; - parts[i].vy = parts[ID(r)].vy = ay; - } - } } for (rx=-2; rx<3; rx++) for (ry=-2; ry<3; ry++)