int SetupGoro(short SpriteNum) { SPRITEp sp = &sprite[SpriteNum]; USERp u; ANIMATOR DoActorDecide; if (TEST(sp->cstat, CSTAT_SPRITE_RESTORE)) { u = User[SpriteNum]; ASSERT(u); } else { User[SpriteNum] = u = SpawnUser(SpriteNum,GORO_RUN_R0,s_GoroRun[0]); u->Health = HEALTH_GORO; } ChangeState(SpriteNum, s_GoroRun[0]); u->Attrib = &GoroAttrib; DoActorSetSpeed(SpriteNum, NORM_SPEED); u->StateEnd = s_GoroDie; u->Rot = sg_GoroRun; EnemyDefaults(SpriteNum, &GoroActionSet, &GoroPersonality); sp->clipdist = 512 >> 2; SET(u->Flags, SPR_XFLIP_TOGGLE); return(0); }
int SetupSerp(short SpriteNum) { SPRITEp sp = &sprite[SpriteNum]; USERp u; ANIMATOR DoActorDecide; if (TEST(sp->cstat, CSTAT_SPRITE_RESTORE)) { u = User[SpriteNum]; ASSERT(u); } else { User[SpriteNum] = u = SpawnUser(SpriteNum,SERP_RUN_R0,s_SerpRun[0]); u->Health = HEALTH_SERP_GOD; } if (Skill == 0) u->Health = 1100; if (Skill == 1) u->Health = 2200; ChangeState(SpriteNum, s_SerpRun[0]); u->Attrib = &SerpAttrib; DoActorSetSpeed(SpriteNum, NORM_SPEED); u->StateEnd = s_SerpDie; u->Rot = sg_SerpRun; EnemyDefaults(SpriteNum, &SerpActionSet, &SerpPersonality); // Mini-Boss Serp if (sp->pal == 16) { u->Health = 1000; sp->yrepeat = 74; sp->xrepeat = 74; } else { sp->yrepeat = 100; sp->xrepeat = 128; } sp->clipdist = (512) >> 2; SET(u->Flags, SPR_XFLIP_TOGGLE|SPR_ELECTRO_TOLERANT); u->loz = sp->z; // amount to move up for clipmove u->zclip = Z(80); // size of step can walk off of u->lo_step = Z(40); u->floor_dist = u->zclip - u->lo_step; u->ceiling_dist = SPRITEp_SIZE_Z(sp) - u->zclip; return 0; }
int SetupBunny(short SpriteNum) { SPRITEp sp = &sprite[SpriteNum]; USERp u; ANIMATOR DoActorDecide; if (TEST(sp->cstat, CSTAT_SPRITE_RESTORE)) { u = User[SpriteNum]; ASSERT(u); } else { User[SpriteNum] = u = SpawnUser(SpriteNum, BUNNY_RUN_R0, s_BunnyRun[0]); u->Health = 10; } Bunny_Count++; //if(Bunny_Count > 20) // { // KillSprite(SpriteNum); // Bunny_Count--; // return(0); // } ChangeState(SpriteNum, s_BunnyRun[0]); u->StateEnd = s_BunnyDie; u->Rot = sg_BunnyRun; //sp->xrepeat = 64; //sp->yrepeat = 64; u->ShellNum = 0; // Not Pregnant right now u->FlagOwner = 0; sp->clipdist = (150) >> 2; if (sp->pal == PALETTE_PLAYER1) { EnemyDefaults(SpriteNum, &BunnyWhiteActionSet, &WhiteBunnyPersonality); u->Attrib = &WhiteBunnyAttrib; sp->xrepeat = 96; sp->yrepeat = 90; sp->clipdist = 200>>2; if (!TEST(sp->cstat, CSTAT_SPRITE_RESTORE)) u->Health = 60; }
int SetupZilla(short SpriteNum) { SPRITEp sp = &sprite[SpriteNum]; USERp u; ANIMATOR DoActorDecide; if (TEST(sp->cstat, CSTAT_SPRITE_RESTORE)) { u = User[SpriteNum]; ASSERT(u); } else { User[SpriteNum] = u = SpawnUser(SpriteNum,ZILLA_RUN_R0,s_ZillaRun[0]); u->Health = 6000; } if (Skill == 0) u->Health = 2000; if (Skill == 1) u->Health = 4000; ChangeState(SpriteNum,s_ZillaRun[0]); u->Attrib = &ZillaAttrib; DoActorSetSpeed(SpriteNum, NORM_SPEED); u->StateEnd = s_ZillaDie; u->Rot = sg_ZillaRun; EnemyDefaults(SpriteNum, &ZillaActionSet, &ZillaPersonality); sp->clipdist = (512) >> 2; sp->xrepeat = 97; sp->yrepeat = 79; //SET(u->Flags, SPR_XFLIP_TOGGLE); return 0; }
///////////////////////////////////////////////////// // Initialize any of my special use sprites ///////////////////////////////////////////////////// void JS_SpriteSetup(void) { SPRITEp sp; short SpriteNum = 0, NextSprite, ndx; USERp u; short i, num; int handle; TRAVERSE_SPRITE_STAT(headspritestat[0], SpriteNum, NextSprite) { short tag; short bit; sp = &sprite[SpriteNum]; tag = sp->hitag; // Non static camera. Camera sprite will be drawn! if (tag == MIRROR_CAM && sprite[SpriteNum].picnum != ST1) { // Just change it to static, sprite has all the info I need // u = SpawnUser(SpriteNum, sp->picnum, NULL); // RESET(sp->cstat, CSTAT_SPRITE_BLOCK); // SET(sp->cstat, CSTAT_SPRITE_BLOCK_HITSCAN); change_sprite_stat(SpriteNum, STAT_SPAWN_SPOT); } switch (sprite[SpriteNum].picnum) { case ST1: if (tag == MIRROR_CAM) { // Just change it to static, sprite has all the info I need // ST1 cameras won't move with SOBJ's! change_sprite_stat(SpriteNum, STAT_ST1); } else if (tag == MIRROR_SPAWNSPOT) { // Just change it to static, sprite has all the info I need change_sprite_stat(SpriteNum, STAT_ST1); } else if (tag == AMBIENT_SOUND) { change_sprite_stat(SpriteNum, STAT_AMBIENT); // PlaySound(sp->lotag, &sp->x, &sp->y, &sp->z, v3df_ambient // | v3df_init | v3df_doppler); } else if (tag == TAG_ECHO_SOUND) { change_sprite_stat(SpriteNum, STAT_ECHO); } else if (tag == TAG_DRIPGEN) { ANIMATOR GenerateDrips; u = SpawnUser(SpriteNum, 0, NULL); ASSERT(u != NULL); u->RotNum = 0; u->WaitTics = sp->lotag * 120; u->ActorActionFunc = GenerateDrips; change_sprite_stat(SpriteNum, STAT_NO_STATE); SET(sp->cstat, CSTAT_SPRITE_INVISIBLE); } break; // Sprites in editart that should play ambient sounds // automatically case 380: case 396: case 430: case 443: case 512: case 521: case 541: case 2720: case 3143: case 3157: handle = PlaySound(DIGI_FIRE1, &sp->x, &sp->y, &sp->z, v3df_follow|v3df_dontpan|v3df_doppler); if (handle != -1) Set3DSoundOwner(SpriteNum); break; case 795: case 880: handle = PlaySound(DIGI_WATERFLOW1, &sp->x, &sp->y, &sp->z, v3df_follow|v3df_dontpan|v3df_doppler); if (handle != -1) Set3DSoundOwner(SpriteNum); break; case 460: // Wind Chimes handle = PlaySound(79, &sp->x, &sp->y, &sp->z, v3df_ambient | v3df_init | v3df_doppler | v3df_follow); if (handle != -1) Set3DSoundOwner(SpriteNum); break; } }