Skip to content

Commit 47ec731

Browse files
Bug Fix
Fixed a problem where it would fail to generate a goal position for a person if the fear was high.
1 parent 8a1405a commit 47ec731

File tree

4 files changed

+36
-61
lines changed

4 files changed

+36
-61
lines changed

src/LudumDare32.fla

-21 Bytes
Binary file not shown.

src/LudumDare32.html

Lines changed: 0 additions & 49 deletions
This file was deleted.

src/Main.as

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ package
6060

6161
// game variables
6262
var crowd:Vector.<Rioter> = new Vector.<Rioter>();
63-
var crowdCt:int = 50;
63+
var crowdCt:int = 150;
6464
var cityUnrest:int = 0; // total unhappiness?
6565

6666
// crowd bounding box
@@ -136,6 +136,7 @@ package
136136
personUnderMouse.rage -= 1;
137137
personUnderMouse.timeWaited += 10; // update more frequently
138138
personUnderMouse.heatOverlay.alpha += 0.035;
139+
personUnderMouse.goalX += randomNumber(0, 2);
139140
if (personUnderMouse.heatOverlay.alpha > 1)
140141
{
141142
personUnderMouse.heatOverlay.alpha = 1;

src/Rioter.as

Lines changed: 34 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ package
3232
// decision-making
3333
public var updateDelay:int; // in seconds
3434
public var timeWaited:int;
35+
private var emotionChangeCooldown:int = 0;
3536
private var personalZone:Rectangle;
3637
private var personalZoneSize:int;
3738
private var comfortLevel:int;
@@ -150,18 +151,22 @@ package
150151
{
151152
fear -= 2;
152153
}
154+
155+
fear = stayInBounds(fear, 100, 0);
156+
rage = stayInBounds(rage, 100, 0);
153157
}
154158

155159
private function makeDecisions():void
156160
{
157161
comfortLevel -= 20;
158-
if (rage <= 0)
162+
163+
if (emotionChangeCooldown > 0)
159164
{
160-
rage = 0;
165+
emotionChangeCooldown --;
161166
}
162167

163168
// do a fear check to see if they should run away
164-
if (fear > 80)
169+
if (fear > 80 && emotionChangeCooldown <= 0)
165170
{
166171
var roll1 = randomNumber(0, rage);
167172
var roll2 = randomNumber(0, rage);
@@ -170,12 +175,13 @@ package
170175
var rageResist = (roll1 + roll2 + roll3) / 3;
171176

172177
// fear succeeded, they're running away now
173-
if (rageResist <= 40)
178+
if (rageResist <= 0)
174179
{
175180
maxSpeed = runSpeed;
176181
velocity = runVelocity;
177182
goalX = runAwayZone + 500;
178183
runningAway = true;
184+
emotionChangeCooldown = 10;
179185
}
180186
else // fear failed
181187
{
@@ -184,6 +190,7 @@ package
184190
goalX = randomNumber(movementSpace.x, movementSpace.x + movementSpace.width);
185191
goalY = randomNumber(movementSpace.y, movementSpace.y + movementSpace.height);
186192
runningAway = false;
193+
emotionChangeCooldown = 10;
187194
}
188195
}
189196
/*
@@ -199,22 +206,24 @@ package
199206
//goalY = randomNumber(movementSpace.y, movementSpace.y + movementSpace.height);
200207

201208
// generate new, feasible position
202-
var offsetNorm = 100;
203-
var offsetAmtMin = offsetNorm - fear;
204-
var offsetAmtMax = offsetNorm - rage;
209+
var offsetNorm = 50;
210+
var offsetAmtMin = Math.abs(offsetNorm - fear);
211+
var offsetAmtMax = Math.abs(offsetNorm - rage);
205212
var randomOffsetX = randomNumber( -offsetAmtMin, offsetAmtMax);
206213
var randomOffsetY = randomNumber( -offsetNorm, offsetNorm);
214+
207215
while (goalX + randomOffsetX > movementSpace.x + movementSpace.width ||
208216
goalX + randomOffsetX < movementSpace.x)
209217
{
210218
randomOffsetX = randomNumber( -offsetAmtMin, offsetAmtMax);
211219
}
220+
212221
while (goalY + randomOffsetY > movementSpace.y + movementSpace.height ||
213222
goalY + randomOffsetY < movementSpace.y)
214-
{
215-
randomOffsetY = randomNumber(-offsetNorm, offsetNorm);
216-
}
217-
223+
{
224+
randomOffsetY = randomNumber(-offsetNorm, offsetNorm);
225+
}
226+
218227
goalX += randomOffsetX;
219228
goalY += randomOffsetY;
220229
comfortLevel = 100;
@@ -226,6 +235,20 @@ package
226235
{
227236
return (Math.floor(Math.random() * (maxNum - minNum + 1)) + minNum);
228237
}
238+
239+
private function stayInBounds(value:Number, max:Number, min:Number):Number
240+
{
241+
if (value > max)
242+
{
243+
value = max;
244+
}
245+
else if (value < min)
246+
{
247+
value = min;
248+
}
249+
250+
return value;
251+
}
229252
}
230253

231254
}

0 commit comments

Comments
 (0)