m_float.c (15620B)
1 /* 2 Copyright (C) 1997-2001 Id Software, Inc. 3 4 This program is free software; you can redistribute it and/or 5 modify it under the terms of the GNU General Public License 6 as published by the Free Software Foundation; either version 2 7 of the License, or (at your option) any later version. 8 9 This program is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 13 See the GNU General Public License for more details. 14 15 You should have received a copy of the GNU General Public License 16 along with this program; if not, write to the Free Software 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 18 19 */ 20 /* 21 ============================================================================== 22 23 floater 24 25 ============================================================================== 26 */ 27 28 #include "g_local.h" 29 #include "m_float.h" 30 31 32 static int sound_attack2; 33 static int sound_attack3; 34 static int sound_death1; 35 static int sound_idle; 36 static int sound_pain1; 37 static int sound_pain2; 38 static int sound_sight; 39 40 41 void floater_sight (edict_t *self, edict_t *other) 42 { 43 gi.sound (self, CHAN_VOICE, sound_sight, 1, ATTN_NORM, 0); 44 } 45 46 void floater_idle (edict_t *self) 47 { 48 gi.sound (self, CHAN_VOICE, sound_idle, 1, ATTN_IDLE, 0); 49 } 50 51 52 //void floater_stand1 (edict_t *self); 53 void floater_dead (edict_t *self); 54 void floater_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point); 55 void floater_run (edict_t *self); 56 void floater_wham (edict_t *self); 57 void floater_zap (edict_t *self); 58 59 60 void floater_fire_blaster (edict_t *self) 61 { 62 vec3_t start; 63 vec3_t forward, right; 64 vec3_t end; 65 vec3_t dir; 66 int effect; 67 68 if ((self->s.frame == FRAME_attak104) || (self->s.frame == FRAME_attak107)) 69 effect = EF_HYPERBLASTER; 70 else 71 effect = 0; 72 AngleVectors (self->s.angles, forward, right, NULL); 73 G_ProjectSource (self->s.origin, monster_flash_offset[MZ2_FLOAT_BLASTER_1], forward, right, start); 74 75 VectorCopy (self->enemy->s.origin, end); 76 end[2] += self->enemy->viewheight; 77 VectorSubtract (end, start, dir); 78 79 monster_fire_blaster (self, start, dir, 1, 1000, MZ2_FLOAT_BLASTER_1, effect); 80 } 81 82 83 mframe_t floater_frames_stand1 [] = 84 { 85 ai_stand, 0, NULL, 86 ai_stand, 0, NULL, 87 ai_stand, 0, NULL, 88 ai_stand, 0, NULL, 89 ai_stand, 0, NULL, 90 ai_stand, 0, NULL, 91 ai_stand, 0, NULL, 92 ai_stand, 0, NULL, 93 ai_stand, 0, NULL, 94 ai_stand, 0, NULL, 95 ai_stand, 0, NULL, 96 ai_stand, 0, NULL, 97 ai_stand, 0, NULL, 98 ai_stand, 0, NULL, 99 ai_stand, 0, NULL, 100 ai_stand, 0, NULL, 101 ai_stand, 0, NULL, 102 ai_stand, 0, NULL, 103 ai_stand, 0, NULL, 104 ai_stand, 0, NULL, 105 ai_stand, 0, NULL, 106 ai_stand, 0, NULL, 107 ai_stand, 0, NULL, 108 ai_stand, 0, NULL, 109 ai_stand, 0, NULL, 110 ai_stand, 0, NULL, 111 ai_stand, 0, NULL, 112 ai_stand, 0, NULL, 113 ai_stand, 0, NULL, 114 ai_stand, 0, NULL, 115 ai_stand, 0, NULL, 116 ai_stand, 0, NULL, 117 ai_stand, 0, NULL, 118 ai_stand, 0, NULL, 119 ai_stand, 0, NULL, 120 ai_stand, 0, NULL, 121 ai_stand, 0, NULL, 122 ai_stand, 0, NULL, 123 ai_stand, 0, NULL, 124 ai_stand, 0, NULL, 125 ai_stand, 0, NULL, 126 ai_stand, 0, NULL, 127 ai_stand, 0, NULL, 128 ai_stand, 0, NULL, 129 ai_stand, 0, NULL, 130 ai_stand, 0, NULL, 131 ai_stand, 0, NULL, 132 ai_stand, 0, NULL, 133 ai_stand, 0, NULL, 134 ai_stand, 0, NULL, 135 ai_stand, 0, NULL, 136 ai_stand, 0, NULL 137 }; 138 mmove_t floater_move_stand1 = {FRAME_stand101, FRAME_stand152, floater_frames_stand1, NULL}; 139 140 mframe_t floater_frames_stand2 [] = 141 { 142 ai_stand, 0, NULL, 143 ai_stand, 0, NULL, 144 ai_stand, 0, NULL, 145 ai_stand, 0, NULL, 146 ai_stand, 0, NULL, 147 ai_stand, 0, NULL, 148 ai_stand, 0, NULL, 149 ai_stand, 0, NULL, 150 ai_stand, 0, NULL, 151 ai_stand, 0, NULL, 152 ai_stand, 0, NULL, 153 ai_stand, 0, NULL, 154 ai_stand, 0, NULL, 155 ai_stand, 0, NULL, 156 ai_stand, 0, NULL, 157 ai_stand, 0, NULL, 158 ai_stand, 0, NULL, 159 ai_stand, 0, NULL, 160 ai_stand, 0, NULL, 161 ai_stand, 0, NULL, 162 ai_stand, 0, NULL, 163 ai_stand, 0, NULL, 164 ai_stand, 0, NULL, 165 ai_stand, 0, NULL, 166 ai_stand, 0, NULL, 167 ai_stand, 0, NULL, 168 ai_stand, 0, NULL, 169 ai_stand, 0, NULL, 170 ai_stand, 0, NULL, 171 ai_stand, 0, NULL, 172 ai_stand, 0, NULL, 173 ai_stand, 0, NULL, 174 ai_stand, 0, NULL, 175 ai_stand, 0, NULL, 176 ai_stand, 0, NULL, 177 ai_stand, 0, NULL, 178 ai_stand, 0, NULL, 179 ai_stand, 0, NULL, 180 ai_stand, 0, NULL, 181 ai_stand, 0, NULL, 182 ai_stand, 0, NULL, 183 ai_stand, 0, NULL, 184 ai_stand, 0, NULL, 185 ai_stand, 0, NULL, 186 ai_stand, 0, NULL, 187 ai_stand, 0, NULL, 188 ai_stand, 0, NULL, 189 ai_stand, 0, NULL, 190 ai_stand, 0, NULL, 191 ai_stand, 0, NULL, 192 ai_stand, 0, NULL, 193 ai_stand, 0, NULL 194 }; 195 mmove_t floater_move_stand2 = {FRAME_stand201, FRAME_stand252, floater_frames_stand2, NULL}; 196 197 void floater_stand (edict_t *self) 198 { 199 if (random() <= 0.5) 200 self->monsterinfo.currentmove = &floater_move_stand1; 201 else 202 self->monsterinfo.currentmove = &floater_move_stand2; 203 } 204 205 mframe_t floater_frames_activate [] = 206 { 207 ai_move, 0, NULL, 208 ai_move, 0, NULL, 209 ai_move, 0, NULL, 210 ai_move, 0, NULL, 211 ai_move, 0, NULL, 212 ai_move, 0, NULL, 213 ai_move, 0, NULL, 214 ai_move, 0, NULL, 215 ai_move, 0, NULL, 216 ai_move, 0, NULL, 217 ai_move, 0, NULL, 218 ai_move, 0, NULL, 219 ai_move, 0, NULL, 220 ai_move, 0, NULL, 221 ai_move, 0, NULL, 222 ai_move, 0, NULL, 223 ai_move, 0, NULL, 224 ai_move, 0, NULL, 225 ai_move, 0, NULL, 226 ai_move, 0, NULL, 227 ai_move, 0, NULL, 228 ai_move, 0, NULL, 229 ai_move, 0, NULL, 230 ai_move, 0, NULL, 231 ai_move, 0, NULL, 232 ai_move, 0, NULL, 233 ai_move, 0, NULL, 234 ai_move, 0, NULL, 235 ai_move, 0, NULL, 236 ai_move, 0, NULL 237 }; 238 mmove_t floater_move_activate = {FRAME_actvat01, FRAME_actvat31, floater_frames_activate, NULL}; 239 240 mframe_t floater_frames_attack1 [] = 241 { 242 ai_charge, 0, NULL, // Blaster attack 243 ai_charge, 0, NULL, 244 ai_charge, 0, NULL, 245 ai_charge, 0, floater_fire_blaster, // BOOM (0, -25.8, 32.5) -- LOOP Starts 246 ai_charge, 0, floater_fire_blaster, 247 ai_charge, 0, floater_fire_blaster, 248 ai_charge, 0, floater_fire_blaster, 249 ai_charge, 0, floater_fire_blaster, 250 ai_charge, 0, floater_fire_blaster, 251 ai_charge, 0, floater_fire_blaster, 252 ai_charge, 0, NULL, 253 ai_charge, 0, NULL, 254 ai_charge, 0, NULL, 255 ai_charge, 0, NULL // -- LOOP Ends 256 }; 257 mmove_t floater_move_attack1 = {FRAME_attak101, FRAME_attak114, floater_frames_attack1, floater_run}; 258 259 mframe_t floater_frames_attack2 [] = 260 { 261 ai_charge, 0, NULL, // Claws 262 ai_charge, 0, NULL, 263 ai_charge, 0, NULL, 264 ai_charge, 0, NULL, 265 ai_charge, 0, NULL, 266 ai_charge, 0, NULL, 267 ai_charge, 0, NULL, 268 ai_charge, 0, NULL, 269 ai_charge, 0, NULL, 270 ai_charge, 0, NULL, 271 ai_charge, 0, NULL, 272 ai_charge, 0, floater_wham, // WHAM (0, -45, 29.6) -- LOOP Starts 273 ai_charge, 0, NULL, 274 ai_charge, 0, NULL, 275 ai_charge, 0, NULL, 276 ai_charge, 0, NULL, 277 ai_charge, 0, NULL, 278 ai_charge, 0, NULL, 279 ai_charge, 0, NULL, // -- LOOP Ends 280 ai_charge, 0, NULL, 281 ai_charge, 0, NULL, 282 ai_charge, 0, NULL, 283 ai_charge, 0, NULL, 284 ai_charge, 0, NULL, 285 ai_charge, 0, NULL 286 }; 287 mmove_t floater_move_attack2 = {FRAME_attak201, FRAME_attak225, floater_frames_attack2, floater_run}; 288 289 mframe_t floater_frames_attack3 [] = 290 { 291 ai_charge, 0, NULL, 292 ai_charge, 0, NULL, 293 ai_charge, 0, NULL, 294 ai_charge, 0, NULL, 295 ai_charge, 0, NULL, 296 ai_charge, 0, NULL, 297 ai_charge, 0, NULL, 298 ai_charge, 0, NULL, 299 ai_charge, 0, floater_zap, // -- LOOP Starts 300 ai_charge, 0, NULL, 301 ai_charge, 0, NULL, 302 ai_charge, 0, NULL, 303 ai_charge, 0, NULL, 304 ai_charge, 0, NULL, 305 ai_charge, 0, NULL, 306 ai_charge, 0, NULL, 307 ai_charge, 0, NULL, 308 ai_charge, 0, NULL, 309 ai_charge, 0, NULL, 310 ai_charge, 0, NULL, 311 ai_charge, 0, NULL, 312 ai_charge, 0, NULL, 313 ai_charge, 0, NULL, 314 ai_charge, 0, NULL, 315 ai_charge, 0, NULL, 316 ai_charge, 0, NULL, 317 ai_charge, 0, NULL, 318 ai_charge, 0, NULL, 319 ai_charge, 0, NULL, // -- LOOP Ends 320 ai_charge, 0, NULL, 321 ai_charge, 0, NULL, 322 ai_charge, 0, NULL, 323 ai_charge, 0, NULL, 324 ai_charge, 0, NULL 325 }; 326 mmove_t floater_move_attack3 = {FRAME_attak301, FRAME_attak334, floater_frames_attack3, floater_run}; 327 328 mframe_t floater_frames_death [] = 329 { 330 ai_move, 0, NULL, 331 ai_move, 0, NULL, 332 ai_move, 0, NULL, 333 ai_move, 0, NULL, 334 ai_move, 0, NULL, 335 ai_move, 0, NULL, 336 ai_move, 0, NULL, 337 ai_move, 0, NULL, 338 ai_move, 0, NULL, 339 ai_move, 0, NULL, 340 ai_move, 0, NULL, 341 ai_move, 0, NULL, 342 ai_move, 0, NULL 343 }; 344 mmove_t floater_move_death = {FRAME_death01, FRAME_death13, floater_frames_death, floater_dead}; 345 346 mframe_t floater_frames_pain1 [] = 347 { 348 ai_move, 0, NULL, 349 ai_move, 0, NULL, 350 ai_move, 0, NULL, 351 ai_move, 0, NULL, 352 ai_move, 0, NULL, 353 ai_move, 0, NULL, 354 ai_move, 0, NULL 355 }; 356 mmove_t floater_move_pain1 = {FRAME_pain101, FRAME_pain107, floater_frames_pain1, floater_run}; 357 358 mframe_t floater_frames_pain2 [] = 359 { 360 ai_move, 0, NULL, 361 ai_move, 0, NULL, 362 ai_move, 0, NULL, 363 ai_move, 0, NULL, 364 ai_move, 0, NULL, 365 ai_move, 0, NULL, 366 ai_move, 0, NULL, 367 ai_move, 0, NULL 368 }; 369 mmove_t floater_move_pain2 = {FRAME_pain201, FRAME_pain208, floater_frames_pain2, floater_run}; 370 371 mframe_t floater_frames_pain3 [] = 372 { 373 ai_move, 0, NULL, 374 ai_move, 0, NULL, 375 ai_move, 0, NULL, 376 ai_move, 0, NULL, 377 ai_move, 0, NULL, 378 ai_move, 0, NULL, 379 ai_move, 0, NULL, 380 ai_move, 0, NULL, 381 ai_move, 0, NULL, 382 ai_move, 0, NULL, 383 ai_move, 0, NULL, 384 ai_move, 0, NULL 385 }; 386 mmove_t floater_move_pain3 = {FRAME_pain301, FRAME_pain312, floater_frames_pain3, floater_run}; 387 388 mframe_t floater_frames_walk [] = 389 { 390 ai_walk, 5, NULL, 391 ai_walk, 5, NULL, 392 ai_walk, 5, NULL, 393 ai_walk, 5, NULL, 394 ai_walk, 5, NULL, 395 ai_walk, 5, NULL, 396 ai_walk, 5, NULL, 397 ai_walk, 5, NULL, 398 ai_walk, 5, NULL, 399 ai_walk, 5, NULL, 400 ai_walk, 5, NULL, 401 ai_walk, 5, NULL, 402 ai_walk, 5, NULL, 403 ai_walk, 5, NULL, 404 ai_walk, 5, NULL, 405 ai_walk, 5, NULL, 406 ai_walk, 5, NULL, 407 ai_walk, 5, NULL, 408 ai_walk, 5, NULL, 409 ai_walk, 5, NULL, 410 ai_walk, 5, NULL, 411 ai_walk, 5, NULL, 412 ai_walk, 5, NULL, 413 ai_walk, 5, NULL, 414 ai_walk, 5, NULL, 415 ai_walk, 5, NULL, 416 ai_walk, 5, NULL, 417 ai_walk, 5, NULL, 418 ai_walk, 5, NULL, 419 ai_walk, 5, NULL, 420 ai_walk, 5, NULL, 421 ai_walk, 5, NULL, 422 ai_walk, 5, NULL, 423 ai_walk, 5, NULL, 424 ai_walk, 5, NULL, 425 ai_walk, 5, NULL, 426 ai_walk, 5, NULL, 427 ai_walk, 5, NULL, 428 ai_walk, 5, NULL, 429 ai_walk, 5, NULL, 430 ai_walk, 5, NULL, 431 ai_walk, 5, NULL, 432 ai_walk, 5, NULL, 433 ai_walk, 5, NULL, 434 ai_walk, 5, NULL, 435 ai_walk, 5, NULL, 436 ai_walk, 5, NULL, 437 ai_walk, 5, NULL, 438 ai_walk, 5, NULL, 439 ai_walk, 5, NULL, 440 ai_walk, 5, NULL, 441 ai_walk, 5, NULL 442 }; 443 mmove_t floater_move_walk = {FRAME_stand101, FRAME_stand152, floater_frames_walk, NULL}; 444 445 mframe_t floater_frames_run [] = 446 { 447 ai_run, 13, NULL, 448 ai_run, 13, NULL, 449 ai_run, 13, NULL, 450 ai_run, 13, NULL, 451 ai_run, 13, NULL, 452 ai_run, 13, NULL, 453 ai_run, 13, NULL, 454 ai_run, 13, NULL, 455 ai_run, 13, NULL, 456 ai_run, 13, NULL, 457 ai_run, 13, NULL, 458 ai_run, 13, NULL, 459 ai_run, 13, NULL, 460 ai_run, 13, NULL, 461 ai_run, 13, NULL, 462 ai_run, 13, NULL, 463 ai_run, 13, NULL, 464 ai_run, 13, NULL, 465 ai_run, 13, NULL, 466 ai_run, 13, NULL, 467 ai_run, 13, NULL, 468 ai_run, 13, NULL, 469 ai_run, 13, NULL, 470 ai_run, 13, NULL, 471 ai_run, 13, NULL, 472 ai_run, 13, NULL, 473 ai_run, 13, NULL, 474 ai_run, 13, NULL, 475 ai_run, 13, NULL, 476 ai_run, 13, NULL, 477 ai_run, 13, NULL, 478 ai_run, 13, NULL, 479 ai_run, 13, NULL, 480 ai_run, 13, NULL, 481 ai_run, 13, NULL, 482 ai_run, 13, NULL, 483 ai_run, 13, NULL, 484 ai_run, 13, NULL, 485 ai_run, 13, NULL, 486 ai_run, 13, NULL, 487 ai_run, 13, NULL, 488 ai_run, 13, NULL, 489 ai_run, 13, NULL, 490 ai_run, 13, NULL, 491 ai_run, 13, NULL, 492 ai_run, 13, NULL, 493 ai_run, 13, NULL, 494 ai_run, 13, NULL, 495 ai_run, 13, NULL, 496 ai_run, 13, NULL, 497 ai_run, 13, NULL, 498 ai_run, 13, NULL 499 }; 500 mmove_t floater_move_run = {FRAME_stand101, FRAME_stand152, floater_frames_run, NULL}; 501 502 void floater_run (edict_t *self) 503 { 504 if (self->monsterinfo.aiflags & AI_STAND_GROUND) 505 self->monsterinfo.currentmove = &floater_move_stand1; 506 else 507 self->monsterinfo.currentmove = &floater_move_run; 508 } 509 510 void floater_walk (edict_t *self) 511 { 512 self->monsterinfo.currentmove = &floater_move_walk; 513 } 514 515 void floater_wham (edict_t *self) 516 { 517 static vec3_t aim = {MELEE_DISTANCE, 0, 0}; 518 gi.sound (self, CHAN_WEAPON, sound_attack3, 1, ATTN_NORM, 0); 519 fire_hit (self, aim, 5 + rand() % 6, -50); 520 } 521 522 void floater_zap (edict_t *self) 523 { 524 vec3_t forward, right; 525 vec3_t origin; 526 vec3_t dir; 527 vec3_t offset; 528 529 VectorSubtract (self->enemy->s.origin, self->s.origin, dir); 530 531 AngleVectors (self->s.angles, forward, right, NULL); 532 //FIXME use a flash and replace these two lines with the commented one 533 VectorSet (offset, 18.5, -0.9, 10); 534 G_ProjectSource (self->s.origin, offset, forward, right, origin); 535 // G_ProjectSource (self->s.origin, monster_flash_offset[flash_number], forward, right, origin); 536 537 gi.sound (self, CHAN_WEAPON, sound_attack2, 1, ATTN_NORM, 0); 538 539 //FIXME use the flash, Luke 540 gi.WriteByte (svc_temp_entity); 541 gi.WriteByte (TE_SPLASH); 542 gi.WriteByte (32); 543 gi.WritePosition (origin); 544 gi.WriteDir (dir); 545 gi.WriteByte (1); //sparks 546 gi.multicast (origin, MULTICAST_PVS); 547 548 T_Damage (self->enemy, self, self, dir, self->enemy->s.origin, vec3_origin, 5 + rand() % 6, -10, DAMAGE_ENERGY, MOD_UNKNOWN); 549 } 550 551 void floater_attack(edict_t *self) 552 { 553 self->monsterinfo.currentmove = &floater_move_attack1; 554 } 555 556 557 void floater_melee(edict_t *self) 558 { 559 if (random() < 0.5) 560 self->monsterinfo.currentmove = &floater_move_attack3; 561 else 562 self->monsterinfo.currentmove = &floater_move_attack2; 563 } 564 565 566 void floater_pain (edict_t *self, edict_t *other, float kick, int damage) 567 { 568 int n; 569 570 if (self->health < (self->max_health / 2)) 571 self->s.skinnum = 1; 572 573 if (level.time < self->pain_debounce_time) 574 return; 575 576 self->pain_debounce_time = level.time + 3; 577 if (skill->value == 3) 578 return; // no pain anims in nightmare 579 580 n = (rand() + 1) % 3; 581 if (n == 0) 582 { 583 gi.sound (self, CHAN_VOICE, sound_pain1, 1, ATTN_NORM, 0); 584 self->monsterinfo.currentmove = &floater_move_pain1; 585 } 586 else 587 { 588 gi.sound (self, CHAN_VOICE, sound_pain2, 1, ATTN_NORM, 0); 589 self->monsterinfo.currentmove = &floater_move_pain2; 590 } 591 } 592 593 void floater_dead (edict_t *self) 594 { 595 VectorSet (self->mins, -16, -16, -24); 596 VectorSet (self->maxs, 16, 16, -8); 597 self->movetype = MOVETYPE_TOSS; 598 self->svflags |= SVF_DEADMONSTER; 599 self->nextthink = 0; 600 gi.linkentity (self); 601 } 602 603 void floater_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point) 604 { 605 gi.sound (self, CHAN_VOICE, sound_death1, 1, ATTN_NORM, 0); 606 BecomeExplosion1(self); 607 } 608 609 /*QUAKED monster_floater (1 .5 0) (-16 -16 -24) (16 16 32) Ambush Trigger_Spawn Sight 610 */ 611 void SP_monster_floater (edict_t *self) 612 { 613 if (deathmatch->value) 614 { 615 G_FreeEdict (self); 616 return; 617 } 618 619 sound_attack2 = gi.soundindex ("floater/fltatck2.wav"); 620 sound_attack3 = gi.soundindex ("floater/fltatck3.wav"); 621 sound_death1 = gi.soundindex ("floater/fltdeth1.wav"); 622 sound_idle = gi.soundindex ("floater/fltidle1.wav"); 623 sound_pain1 = gi.soundindex ("floater/fltpain1.wav"); 624 sound_pain2 = gi.soundindex ("floater/fltpain2.wav"); 625 sound_sight = gi.soundindex ("floater/fltsght1.wav"); 626 627 gi.soundindex ("floater/fltatck1.wav"); 628 629 self->s.sound = gi.soundindex ("floater/fltsrch1.wav"); 630 631 self->movetype = MOVETYPE_STEP; 632 self->solid = SOLID_BBOX; 633 self->s.modelindex = gi.modelindex ("models/monsters/float/tris.md2"); 634 VectorSet (self->mins, -24, -24, -24); 635 VectorSet (self->maxs, 24, 24, 32); 636 637 self->health = 200; 638 self->gib_health = -80; 639 self->mass = 300; 640 641 self->pain = floater_pain; 642 self->die = floater_die; 643 644 self->monsterinfo.stand = floater_stand; 645 self->monsterinfo.walk = floater_walk; 646 self->monsterinfo.run = floater_run; 647 // self->monsterinfo.dodge = floater_dodge; 648 self->monsterinfo.attack = floater_attack; 649 self->monsterinfo.melee = floater_melee; 650 self->monsterinfo.sight = floater_sight; 651 self->monsterinfo.idle = floater_idle; 652 653 gi.linkentity (self); 654 655 if (random() <= 0.5) 656 self->monsterinfo.currentmove = &floater_move_stand1; 657 else 658 self->monsterinfo.currentmove = &floater_move_stand2; 659 660 self->monsterinfo.scale = MODEL_SCALE; 661 662 flymonster_start (self); 663 }