Merge commit 'c7050671' into udmf-thing-types

This commit is contained in:
MascaraSnake 2022-04-20 19:42:03 +02:00
commit f76b104c4a
6 changed files with 366 additions and 1 deletions

View file

@ -6948,6 +6948,20 @@ thingtypes
}
}
tutorial
{
color = 10; // Green
title = "Tutorial";
799
{
title = "Tutorial Plant";
sprite = "TUPFH0";
width = 40;
height = 144;
parametertext = "Start frame";
}
flickies
{
color = 10; // Green

View file

@ -225,6 +225,8 @@ actionpointer_t actionpointers[] =
{{A_SetObjectFlags2}, "A_SETOBJECTFLAGS2"},
{{A_RandomState}, "A_RANDOMSTATE"},
{{A_RandomStateRange}, "A_RANDOMSTATERANGE"},
{{A_StateRangeByAngle}, "A_STATERANGEBYANGLE"},
{{A_StateRangeByParameter}, "A_STATERANGEBYPARAMETER"},
{{A_DualAction}, "A_DUALACTION"},
{{A_RemoteAction}, "A_REMOTEACTION"},
{{A_ToggleFlameJet}, "A_TOGGLEFLAMEJET"},
@ -1752,6 +1754,56 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi
// The letter
"S_LETTER",
// Tutorial Scenery
"S_TUTORIALLEAF1",
"S_TUTORIALLEAF2",
"S_TUTORIALLEAF3",
"S_TUTORIALLEAF4",
"S_TUTORIALLEAF5",
"S_TUTORIALLEAF6",
"S_TUTORIALLEAF7",
"S_TUTORIALLEAF8",
"S_TUTORIALLEAF9",
"S_TUTORIALLEAF10",
"S_TUTORIALLEAF11",
"S_TUTORIALLEAF12",
"S_TUTORIALLEAF13",
"S_TUTORIALLEAF14",
"S_TUTORIALLEAF15",
"S_TUTORIALLEAF16",
"S_TUTORIALFLOWER1",
"S_TUTORIALFLOWER2",
"S_TUTORIALFLOWER3",
"S_TUTORIALFLOWER4",
"S_TUTORIALFLOWER5",
"S_TUTORIALFLOWER6",
"S_TUTORIALFLOWER7",
"S_TUTORIALFLOWER8",
"S_TUTORIALFLOWER9",
"S_TUTORIALFLOWER10",
"S_TUTORIALFLOWER11",
"S_TUTORIALFLOWER12",
"S_TUTORIALFLOWER13",
"S_TUTORIALFLOWER14",
"S_TUTORIALFLOWER15",
"S_TUTORIALFLOWER16",
"S_TUTORIALFLOWERF1",
"S_TUTORIALFLOWERF2",
"S_TUTORIALFLOWERF3",
"S_TUTORIALFLOWERF4",
"S_TUTORIALFLOWERF5",
"S_TUTORIALFLOWERF6",
"S_TUTORIALFLOWERF7",
"S_TUTORIALFLOWERF8",
"S_TUTORIALFLOWERF9",
"S_TUTORIALFLOWERF10",
"S_TUTORIALFLOWERF11",
"S_TUTORIALFLOWERF12",
"S_TUTORIALFLOWERF13",
"S_TUTORIALFLOWERF14",
"S_TUTORIALFLOWERF15",
"S_TUTORIALFLOWERF16",
// GFZ flowers
"S_GFZFLOWERA",
"S_GFZFLOWERB",
@ -3764,6 +3816,12 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t
// The letter
"MT_LETTER",
// Tutorial Scenery
"MT_TUTORIALPLANT",
"MT_TUTORIALLEAF",
"MT_TUTORIALFLOWER",
"MT_TUTORIALFLOWERF",
// Greenflower Scenery
"MT_GFZFLOWER1",
"MT_GFZFLOWER2",

View file

@ -203,6 +203,10 @@ char sprnames[NUMSPRITES + 1][5] =
// The letter
"LETR",
// Tutorial Scenery
"TUPL",
"TUPF",
// Greenflower Scenery
"FWR1",
"FWR2", // GFZ Sunflower
@ -2117,6 +2121,56 @@ state_t states[NUMSTATES] =
{SPR_LETR, FF_PAPERSPRITE, -1, {NULL}, 0, 0, S_NULL}, // S_LETTER
// Tutorial scenery
{SPR_TUPL, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|0, 3, {NULL}, 0, 0, S_TUTORIALLEAF2}, // S_TUTORIALLEAF1
{SPR_TUPL, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|1, 3, {NULL}, 0, 0, S_TUTORIALLEAF3}, // S_TUTORIALLEAF2
{SPR_TUPL, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|2, 3, {NULL}, 0, 0, S_TUTORIALLEAF4}, // S_TUTORIALLEAF3
{SPR_TUPL, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|3, 3, {NULL}, 0, 0, S_TUTORIALLEAF5}, // S_TUTORIALLEAF4
{SPR_TUPL, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|4, 3, {NULL}, 0, 0, S_TUTORIALLEAF6}, // S_TUTORIALLEAF5
{SPR_TUPL, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|5, 3, {NULL}, 0, 0, S_TUTORIALLEAF7}, // S_TUTORIALLEAF6
{SPR_TUPL, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|6, 3, {NULL}, 0, 0, S_TUTORIALLEAF8}, // S_TUTORIALLEAF7
{SPR_TUPL, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|7, 3, {NULL}, 0, 0, S_TUTORIALLEAF9}, // S_TUTORIALLEAF8
{SPR_TUPL, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|7, 3, {NULL}, 0, 0, S_TUTORIALLEAF10}, // S_TUTORIALLEAF9
{SPR_TUPL, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|6, 3, {NULL}, 0, 0, S_TUTORIALLEAF11}, // S_TUTORIALLEAF10
{SPR_TUPL, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|5, 3, {NULL}, 0, 0, S_TUTORIALLEAF12}, // S_TUTORIALLEAF11
{SPR_TUPL, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|4, 3, {NULL}, 0, 0, S_TUTORIALLEAF13}, // S_TUTORIALLEAF12
{SPR_TUPL, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|3, 3, {NULL}, 0, 0, S_TUTORIALLEAF14}, // S_TUTORIALLEAF13
{SPR_TUPL, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|2, 3, {NULL}, 0, 0, S_TUTORIALLEAF15}, // S_TUTORIALLEAF14
{SPR_TUPL, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|1, 3, {NULL}, 0, 0, S_TUTORIALLEAF16}, // S_TUTORIALLEAF15
{SPR_TUPL, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|0, 3, {NULL}, 0, 0, S_TUTORIALLEAF1}, // S_TUTORIALLEAF16
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|0, 3, {NULL}, 0, 0, S_TUTORIALFLOWER2}, // S_TUTORIALFLOWER1
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|1, 3, {NULL}, 0, 0, S_TUTORIALFLOWER3}, // S_TUTORIALFLOWER2
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|2, 3, {NULL}, 0, 0, S_TUTORIALFLOWER4}, // S_TUTORIALFLOWER3
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|3, 3, {NULL}, 0, 0, S_TUTORIALFLOWER5}, // S_TUTORIALFLOWER4
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|4, 3, {NULL}, 0, 0, S_TUTORIALFLOWER6}, // S_TUTORIALFLOWER5
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|5, 3, {NULL}, 0, 0, S_TUTORIALFLOWER7}, // S_TUTORIALFLOWER6
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|6, 3, {NULL}, 0, 0, S_TUTORIALFLOWER8}, // S_TUTORIALFLOWER7
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|7, 3, {NULL}, 0, 0, S_TUTORIALFLOWER9}, // S_TUTORIALFLOWER8
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|7, 3, {NULL}, 0, 0, S_TUTORIALFLOWER10}, // S_TUTORIALFLOWER9
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|6, 3, {NULL}, 0, 0, S_TUTORIALFLOWER11}, // S_TUTORIALFLOWER10
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|5, 3, {NULL}, 0, 0, S_TUTORIALFLOWER12}, // S_TUTORIALFLOWER11
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|4, 3, {NULL}, 0, 0, S_TUTORIALFLOWER13}, // S_TUTORIALFLOWER12
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|3, 3, {NULL}, 0, 0, S_TUTORIALFLOWER14}, // S_TUTORIALFLOWER13
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|2, 3, {NULL}, 0, 0, S_TUTORIALFLOWER15}, // S_TUTORIALFLOWER14
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|1, 3, {NULL}, 0, 0, S_TUTORIALFLOWER16}, // S_TUTORIALFLOWER15
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|0, 3, {NULL}, 0, 0, S_TUTORIALFLOWER1}, // S_TUTORIALFLOWER16
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_FLOORSPRITE|0, 3, {NULL}, 0, 0, S_TUTORIALFLOWERF2}, // S_TUTORIALFLOWERF1
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_FLOORSPRITE|1, 3, {NULL}, 0, 0, S_TUTORIALFLOWERF3}, // S_TUTORIALFLOWERF2
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_FLOORSPRITE|2, 3, {NULL}, 0, 0, S_TUTORIALFLOWERF4}, // S_TUTORIALFLOWERF3
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_FLOORSPRITE|3, 3, {NULL}, 0, 0, S_TUTORIALFLOWERF5}, // S_TUTORIALFLOWERF4
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_FLOORSPRITE|4, 3, {NULL}, 0, 0, S_TUTORIALFLOWERF6}, // S_TUTORIALFLOWERF5
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_FLOORSPRITE|5, 3, {NULL}, 0, 0, S_TUTORIALFLOWERF7}, // S_TUTORIALFLOWERF6
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_FLOORSPRITE|6, 3, {NULL}, 0, 0, S_TUTORIALFLOWERF8}, // S_TUTORIALFLOWERF7
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_FLOORSPRITE|7, 3, {NULL}, 0, 0, S_TUTORIALFLOWERF9}, // S_TUTORIALFLOWERF8
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_FLOORSPRITE|7, 3, {NULL}, 0, 0, S_TUTORIALFLOWERF10}, // S_TUTORIALFLOWERF9
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_FLOORSPRITE|6, 3, {NULL}, 0, 0, S_TUTORIALFLOWERF11}, // S_TUTORIALFLOWERF10
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_FLOORSPRITE|5, 3, {NULL}, 0, 0, S_TUTORIALFLOWERF12}, // S_TUTORIALFLOWERF11
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_FLOORSPRITE|4, 3, {NULL}, 0, 0, S_TUTORIALFLOWERF13}, // S_TUTORIALFLOWERF12
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_FLOORSPRITE|3, 3, {NULL}, 0, 0, S_TUTORIALFLOWERF14}, // S_TUTORIALFLOWERF13
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_FLOORSPRITE|2, 3, {NULL}, 0, 0, S_TUTORIALFLOWERF15}, // S_TUTORIALFLOWERF14
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_FLOORSPRITE|1, 3, {NULL}, 0, 0, S_TUTORIALFLOWERF16}, // S_TUTORIALFLOWERF15
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_FLOORSPRITE|0, 3, {NULL}, 0, 0, S_TUTORIALFLOWERF1}, // S_TUTORIALFLOWERF16
// GFZ flowers
{SPR_FWR1, FF_ANIMATE, -1, {NULL}, 7, 3, S_NULL}, // S_GFZFLOWERA
{SPR_FWR2, FF_ANIMATE, -1, {NULL}, 19, 3, S_NULL}, // S_GFZFLOWERB
@ -9979,6 +10033,114 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
S_NULL // raisestate
},
{ // MT_TUTORIALPLANT
799, // doomednum
S_NULL, // spawnstate
1000, // spawnhealth
S_NULL, // seestate
sfx_None, // seesound
8, // reactiontime
sfx_None, // attacksound
S_NULL, // painstate
0, // painchance
sfx_None, // painsound
S_NULL, // meleestate
S_NULL, // missilestate
S_NULL, // deathstate
S_NULL, // xdeathstate
sfx_None, // deathsound
0, // speed
32*FRACUNIT, // radius
32*FRACUNIT, // height
0, // display offset
100, // mass
0, // damage
sfx_None, // activesound
MF_NOBLOCKMAP|MF_NOCLIP|MF_NOGRAVITY|MF_SCENERY, // flags
S_NULL // raisestate
},
{ // MT_TUTORIALLEAF
-1, // doomednum
S_TUTORIALLEAF1, // spawnstate
1000, // spawnhealth
S_NULL, // seestate
sfx_None, // seesound
8, // reactiontime
sfx_None, // attacksound
S_NULL, // painstate
0, // painchance
sfx_None, // painsound
S_NULL, // meleestate
S_NULL, // missilestate
S_NULL, // deathstate
S_NULL, // xdeathstate
sfx_None, // deathsound
0, // speed
32*FRACUNIT, // radius
32*FRACUNIT, // height
0, // display offset
100, // mass
0, // damage
sfx_None, // activesound
MF_NOBLOCKMAP|MF_NOCLIP|MF_NOGRAVITY|MF_SCENERY, // flags
S_NULL // raisestate
},
{ // MT_TUTORIALFLOWER
-1, // doomednum
S_TUTORIALFLOWER1, // spawnstate
1000, // spawnhealth
S_NULL, // seestate
sfx_None, // seesound
8, // reactiontime
sfx_None, // attacksound
S_NULL, // painstate
0, // painchance
sfx_None, // painsound
S_NULL, // meleestate
S_NULL, // missilestate
S_NULL, // deathstate
S_NULL, // xdeathstate
sfx_None, // deathsound
0, // speed
32*FRACUNIT, // radius
32*FRACUNIT, // height
0, // display offset
100, // mass
0, // damage
sfx_None, // activesound
MF_NOBLOCKMAP|MF_NOCLIP|MF_NOGRAVITY|MF_SCENERY, // flags
S_NULL // raisestate
},
{ // MT_TUTORIALFLOWERF
-1, // doomednum
S_TUTORIALFLOWERF1, // spawnstate
1000, // spawnhealth
S_NULL, // seestate
sfx_None, // seesound
8, // reactiontime
sfx_None, // attacksound
S_NULL, // painstate
0, // painchance
sfx_None, // painsound
S_NULL, // meleestate
S_NULL, // missilestate
S_NULL, // deathstate
S_NULL, // xdeathstate
sfx_None, // deathsound
0, // speed
32*FRACUNIT, // radius
32*FRACUNIT, // height
0, // display offset
100, // mass
0, // damage
sfx_None, // activesound
MF_NOBLOCKMAP|MF_NOCLIP|MF_NOGRAVITY|MF_SCENERY, // flags
S_NULL // raisestate
},
{ // MT_GFZFLOWER1
800, // doomednum
S_GFZFLOWERA, // spawnstate

View file

@ -178,6 +178,8 @@ enum actionnum
A_SETOBJECTFLAGS2,
A_RANDOMSTATE,
A_RANDOMSTATERANGE,
A_STATERANGEBYANGLE,
A_STATERANGEBYPARAMETER,
A_DUALACTION,
A_REMOTEACTION,
A_TOGGLEFLAMEJET,
@ -445,6 +447,8 @@ void A_SetObjectFlags();
void A_SetObjectFlags2();
void A_RandomState();
void A_RandomStateRange();
void A_StateRangeByAngle();
void A_StateRangeByParameter();
void A_DualAction();
void A_RemoteAction();
void A_ToggleFlameJet();
@ -739,6 +743,10 @@ typedef enum sprite
// The letter
SPR_LETR,
// Tutorial scenery
SPR_TUPL,
SPR_TUPF,
// Greenflower Scenery
SPR_FWR1,
SPR_FWR2, // GFZ Sunflower
@ -2553,6 +2561,56 @@ typedef enum state
// The letter
S_LETTER,
// Tutorial scenery
S_TUTORIALLEAF1,
S_TUTORIALLEAF2,
S_TUTORIALLEAF3,
S_TUTORIALLEAF4,
S_TUTORIALLEAF5,
S_TUTORIALLEAF6,
S_TUTORIALLEAF7,
S_TUTORIALLEAF8,
S_TUTORIALLEAF9,
S_TUTORIALLEAF10,
S_TUTORIALLEAF11,
S_TUTORIALLEAF12,
S_TUTORIALLEAF13,
S_TUTORIALLEAF14,
S_TUTORIALLEAF15,
S_TUTORIALLEAF16,
S_TUTORIALFLOWER1,
S_TUTORIALFLOWER2,
S_TUTORIALFLOWER3,
S_TUTORIALFLOWER4,
S_TUTORIALFLOWER5,
S_TUTORIALFLOWER6,
S_TUTORIALFLOWER7,
S_TUTORIALFLOWER8,
S_TUTORIALFLOWER9,
S_TUTORIALFLOWER10,
S_TUTORIALFLOWER11,
S_TUTORIALFLOWER12,
S_TUTORIALFLOWER13,
S_TUTORIALFLOWER14,
S_TUTORIALFLOWER15,
S_TUTORIALFLOWER16,
S_TUTORIALFLOWERF1,
S_TUTORIALFLOWERF2,
S_TUTORIALFLOWERF3,
S_TUTORIALFLOWERF4,
S_TUTORIALFLOWERF5,
S_TUTORIALFLOWERF6,
S_TUTORIALFLOWERF7,
S_TUTORIALFLOWERF8,
S_TUTORIALFLOWERF9,
S_TUTORIALFLOWERF10,
S_TUTORIALFLOWERF11,
S_TUTORIALFLOWERF12,
S_TUTORIALFLOWERF13,
S_TUTORIALFLOWERF14,
S_TUTORIALFLOWERF15,
S_TUTORIALFLOWERF16,
// GFZ flowers
S_GFZFLOWERA,
S_GFZFLOWERB,
@ -4585,6 +4643,12 @@ typedef enum mobj_type
// The letter
MT_LETTER,
// Tutorial Scenery
MT_TUTORIALPLANT,
MT_TUTORIALLEAF,
MT_TUTORIALFLOWER,
MT_TUTORIALFLOWERF,
// Greenflower Scenery
MT_GFZFLOWER1,
MT_GFZFLOWER2,

View file

@ -202,6 +202,8 @@ void A_SetObjectFlags(mobj_t *actor);
void A_SetObjectFlags2(mobj_t *actor);
void A_RandomState(mobj_t *actor);
void A_RandomStateRange(mobj_t *actor);
void A_StateRangeByAngle(mobj_t *actor);
void A_StateRangeByParameter(mobj_t *actor);
void A_DualAction(mobj_t *actor);
void A_RemoteAction(mobj_t *actor);
void A_ToggleFlameJet(mobj_t *actor);
@ -9321,6 +9323,49 @@ void A_RandomStateRange(mobj_t *actor)
P_SetMobjState(actor, P_RandomRange(locvar1, locvar2));
}
// Function: A_StateRangeByAngle
//
// Description: Chooses a state within the range supplied, depending on the actor's angle.
//
// var1 = Minimum state number to use.
// var2 = Maximum state number to use. The difference will act as a modulo operator.
//
void A_StateRangeByAngle(mobj_t *actor)
{
INT32 locvar1 = var1;
INT32 locvar2 = var2;
if (LUA_CallAction(A_STATERANGEBYANGLE, actor))
return;
if (locvar2 - locvar1 < 0)
return; // invalid range
P_SetMobjState(actor, locvar1 + (AngleFixed(actor->angle)>>FRACBITS % (1 + locvar2 - locvar1)));
}
// Function: A_StateRangeByParameter
//
// Description: Chooses a state within the range supplied, depending on the actor's parameter/extrainfo value.
//
// var1 = Minimum state number to use.
// var2 = Maximum state number to use. The difference will act as a modulo operator.
//
void A_StateRangeByParameter(mobj_t *actor)
{
INT32 locvar1 = var1;
INT32 locvar2 = var2;
UINT8 parameter = (actor->spawnpoint ? actor->spawnpoint->extrainfo : 0);
if (LUA_CallAction(A_STATERANGEBYPARAMETER, actor))
return;
if (locvar2 - locvar1 < 0)
return; // invalid range
P_SetMobjState(actor, locvar1 + (parameter % (1 + locvar2 - locvar1)));
}
// Function: A_DualAction
//
// Description: Calls two actions. Be careful, if you reference the same state this action is called from, you can create an infinite loop.

View file

@ -7982,6 +7982,9 @@ static void P_MobjSceneryThink(mobj_t *mobj)
P_SetScale(mobj, mobj->target->scale);
}
break;
case MT_TUTORIALFLOWER:
mobj->angle += FixedAngle(3*FRACUNIT);
break;
case MT_VWREF:
case MT_VWREB:
{
@ -12911,6 +12914,25 @@ static boolean P_SetupSpawnedMapThing(mapthing_t *mthing, mobj_t *mobj, boolean
P_SpawnMobjFromMobj(mobj, -FRACUNIT, 0, 0, MT_THZTREEBRANCH)->angle = mobjangle + ANGLE_270;
}
break;
case MT_TUTORIALPLANT:
{
INT32 i;
mobj_t *segment;
for (i = 0; i < 6; i++)
{
segment = P_SpawnMobjFromMobj(mobj, 0, 0, 0, MT_TUTORIALLEAF);
segment->angle = mobj->angle + FixedAngle(i*60*FRACUNIT);
P_SetMobjState(segment, S_TUTORIALLEAF1 + mthing->extrainfo);
}
for (i = 0; i < 3; i++)
{
segment = P_SpawnMobjFromMobj(mobj, 0, 0, 112*FRACUNIT, MT_TUTORIALFLOWER);
segment->angle = mobj->angle + FixedAngle(i*120*FRACUNIT);
P_SetMobjState(segment, S_TUTORIALFLOWER1 + mthing->extrainfo);
}
P_SetMobjState(P_SpawnMobjFromMobj(mobj, 0, 0, 112*FRACUNIT, MT_TUTORIALFLOWERF), S_TUTORIALFLOWERF1 + mthing->extrainfo);
}
break;
case MT_CEZPOLE1:
case MT_CEZPOLE2:
{ // Spawn the banner