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++)