From 0bfa325060c057ba30d3ba1634c05cd2035f28ea Mon Sep 17 00:00:00 2001 From: Celtic Minstrel Date: Mon, 30 Jan 2023 00:09:45 -0500 Subject: [PATCH] Refine and fix up numeric response node --- src/game/boe.specials.cpp | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/src/game/boe.specials.cpp b/src/game/boe.specials.cpp index f81b8a83..e5944dde 100644 --- a/src/game/boe.specials.cpp +++ b/src/game/boe.specials.cpp @@ -3512,33 +3512,35 @@ void ifthen_spec(const runtime_state& ctx) { spec.pic = minmax(0,2,spec.pic); switch(spec.pic) { // Comparison mode case 0: // Is in range? - if(spec.ex1a < spec.ex1b && i == minmax(spec.ex1a,spec.ex1b,i)) j += 1; - if(spec.ex2a < spec.ex2b && i == minmax(spec.ex2a,spec.ex2b,i)) j += 2; + if(spec.ex1a >= 0 && spec.ex1a < spec.ex1b && i == minmax(spec.ex1a,spec.ex1b,i)) j += 1; + if(spec.ex2a >= 0 && spec.ex2a < spec.ex2b && i == minmax(spec.ex2a,spec.ex2b,i)) j += 2; break; case 1: // Not in range? - if(spec.ex1a < spec.ex1b && i != minmax(spec.ex1a,spec.ex1b,i)) j += 1; - if(spec.ex2a < spec.ex2b && i != minmax(spec.ex2a,spec.ex2b,i)) j += 2; + if(spec.ex1a >= 0 && spec.ex1a < spec.ex1b && i != minmax(spec.ex1a,spec.ex1b,i)) j += 1; + if(spec.ex2a >= 0 && spec.ex2a < spec.ex2b && i != minmax(spec.ex2a,spec.ex2b,i)) j += 2; break; case 2: // Simple comparison? switch(spec.ex1b) { - case -2: if(i <= spec.ex1a) j += 1; break; - case -1: if(i < spec.ex1a) j += 1; break; - case 0: if(i == spec.ex1a) j += 1; break; - case 1: if(i > spec.ex1a) j += 1; break; - case 2: if(i >= spec.ex1a) j += 1; break; + case -2: if(spec.ex1a >= 0 && i <= spec.ex1a) j += 1; break; + case -1: if(spec.ex1a >= 0 && i < spec.ex1a) j += 1; break; + case 0: if(spec.ex1a >= 0 && i == spec.ex1a) j += 1; break; + case 1: if(spec.ex1a >= 0 && i > spec.ex1a) j += 1; break; + case 2: if(spec.ex1a >= 0 && i >= spec.ex1a) j += 1; break; } switch(spec.ex2b) { - case -2: if(i <= spec.ex2a) j += 1; break; - case -1: if(i < spec.ex2a) j += 1; break; - case 0: if(i == spec.ex2a) j += 1; break; - case 1: if(i > spec.ex2a) j += 1; break; - case 2: if(i >= spec.ex2a) j += 1; break; + case -2: if(spec.ex2a >= 0 && i <= spec.ex2a) j += 2; break; + case -1: if(spec.ex2a >= 0 && i < spec.ex2a) j += 2; break; + case 0: if(spec.ex2a >= 0 && i == spec.ex2a) j += 2; break; + case 1: if(spec.ex2a >= 0 && i > spec.ex2a) j += 2; break; + case 2: if(spec.ex2a >= 0 && i >= spec.ex2a) j += 2; break; } break; } - if(j == 1) ctx.next_spec = spec.ex1c; - if(j == 2) ctx.next_spec = spec.ex2c; - if(j == 3) ctx.next_spec = spec.pictype; + switch(j) { + case 1: ctx.next_spec = spec.ex1c; break; + case 2: ctx.next_spec = spec.ex2c; break; + case 3: ctx.next_spec = spec.pictype; break; + } break; } case eSpecType::IF_SDF_EQ: