281 |
281 |
282 if hwRound(Gear^.Y) < cWaterLine then |
282 if hwRound(Gear^.Y) < cWaterLine then |
283 Gear^.doStep:= @doStepHealthTagWork |
283 Gear^.doStep:= @doStepHealthTagWork |
284 else |
284 else |
285 Gear^.doStep:= @doStepHealthTagWorkUnderWater; |
285 Gear^.doStep:= @doStepHealthTagWorkUnderWater; |
286 |
|
287 Gear^.Y:= Gear^.Y - int2hwFloat(Gear^.Tex^.h) |
|
288 end; |
|
289 |
|
290 procedure doStepSpeechBubbleWork(Gear: PGear); |
|
291 begin |
|
292 dec(Gear^.Timer); |
|
293 |
|
294 if (PHedgehog(Gear^.Hedgehog)^.Gear <> nil) then |
|
295 begin |
|
296 Gear^.X:= PHedgehog(Gear^.Hedgehog)^.Gear^.X+int2hwFloat(Gear^.Tex^.w div 2 - Gear^.State); |
|
297 Gear^.Y:= PHedgehog(Gear^.Hedgehog)^.Gear^.Y-int2hwFloat(16+Gear^.Tex^.h); |
|
298 end; |
|
299 |
|
300 if Gear^.Timer = 0 then |
|
301 begin |
|
302 CurrentHedgehog^.SpeechGear:= nil; |
|
303 DeleteGear(Gear) |
|
304 end; |
|
305 end; |
|
306 |
|
307 procedure doStepSpeechBubble(Gear: PGear); |
|
308 begin |
|
309 if (CurrentHedgehog^.SpeechGear <> nil) then DeleteGear(CurrentHedgehog^.SpeechGear); |
|
310 CurrentHedgehog^.SpeechGear:= Gear; |
|
311 |
|
312 Gear^.Timer:= max(Length(Gear^.Text)*150,3000); |
|
313 |
|
314 Gear^.Tex:= RenderSpeechBubbleTex(Gear^.Text, Gear^.State, fnt16); |
|
315 |
|
316 // Arbitrary offsets added to the widths based on shape of current tails |
|
317 case Gear^.State of |
|
318 1: Gear^.State:= SpritesData[sprSpeechTail].Width-28; |
|
319 2: Gear^.State:= SpritesData[sprThoughtTail].Width-20; |
|
320 3: Gear^.State:= SpritesData[sprShoutTail].Width-10; |
|
321 end; |
|
322 |
|
323 Gear^.doStep:= @doStepSpeechBubbleWork; |
|
324 |
286 |
325 Gear^.Y:= Gear^.Y - int2hwFloat(Gear^.Tex^.h) |
287 Gear^.Y:= Gear^.Y - int2hwFloat(Gear^.Tex^.h) |
326 end; |
288 end; |
327 |
289 |
328 //////////////////////////////////////////////////////////////////////////////// |
290 //////////////////////////////////////////////////////////////////////////////// |