gzdoom-gles/src/namedef.h

891 lines
12 KiB
C
Raw Normal View History

2016-03-01 15:47:10 +00:00
// 'None' must always be the first name.
xx(None)
xx(Null)
xx(Super)
xx(Object)
xx(Actor)
xx(Class)
xx(ClassClass)
xx(Untranslated)
xx(Doom)
xx(Heretic)
xx(Hexen)
xx(Strife)
xx(Raven)
// blood spawning
xx(Blood)
xx(BloodSplatter)
xx(AxeBlood)
xx(Spray)
// Invulnerability types
xx(Ghost)
xx(Reflective)
// Invisibility types
xx(Additive)
xx(Cumulative)
xx(Fuzzy)
xx(Opaque)
xx(Stencil)
xx(AddStencil)
// Render styles
xx(Normal)
xx(SoulTrans)
xx(OptFuzzy)
xx(Add)
xx(Shaded)
xx(AddShaded)
xx(TranslucentStencil)
xx(Shadow)
xx(Subtract)
xx(Subtractive)
xx(FillColor)
// Healingradius types
xx(Mana)
xx(Armor)
// Per-actor sound channels
xx(Auto)
xx(Weapon)
xx(Voice)
xx(Item)
xx(Body)
xx(SoundSlot5)
xx(SoundSlot6)
xx(SoundSlot7)
// Hexen sound sequence names
xx(Platform)
xx(PlatformMetal)
xx(Silence)
xx(Lava)
xx(Water)
xx(Ice)
xx(Earth)
xx(PlatformMetal2)
xx(DoorNormal)
xx(DoorHeavy)
xx(DoorMetal)
xx(DoorCreak)
xx(DoorMetal2)
xx(Wind)
xx(PointPusher)
xx(PointPuller)
xx(UpperStackLookOnly)
xx(LowerStackLookOnly)
2017-01-18 19:23:13 +00:00
xx(BasicArmorBonus)
xx(BasicArmorPickup)
xx(SaveAmount)
xx(SavePercent)
xx(MaxAbsorb)
xx(MaxFullAbsorb)
xx(MaxAmount)
xx(ActualSaveAmount)
xx(ArmorType)
2017-01-18 22:42:08 +00:00
xx(HexenArmor)
xx(Slots)
xx(SlotsIncrement)
2017-01-18 19:23:13 +00:00
2016-03-01 15:47:10 +00:00
xx(BulletPuff)
xx(StrifePuff)
xx(MaulerPuff)
// Special bosses A_BossDeath knows about
xx(Fatso)
xx(Arachnotron)
xx(BaronOfHell)
xx(Cyberdemon)
xx(SpiderMastermind)
xx(Ironlich)
xx(Minotaur)
xx(Sorcerer2)
// P_SpawnMapThing checks for these as health items (I smell a FIXME)
xx(Berserk)
xx(Soulsphere)
xx(Megasphere) // also counts as armor for P_SpawnMapThing
// Standard player classes
xx(DoomPlayer)
xx(HereticPlayer)
xx(StrifePlayer)
xx(FighterPlayer)
xx(ClericPlayer)
xx(MagePlayer)
xx(ChexPlayer)
xx(ChickenPlayer)
xx(PigPlayer)
// Flechette names for the different Hexen player classes
xx(ArtiPoisonBag1)
xx(ArtiPoisonBag2)
xx(ArtiPoisonBag3)
// Strife quests
xx(QuestItem)
xx(Sigil)
xx(ScriptedMarine)
xx(GiveSigilPiece)
xx(SetWeapon)
xx(SetSprite)
2016-03-01 15:47:10 +00:00
// Armor
xx(BasicArmor)
// The Wings of Wrath
xx(ArtiFly)
// Doom ammo types
xx(Clip)
xx(Shell)
xx(RocketAmmo)
xx(Cell)
// Hexen Mana
xx(Mana1)
xx(Mana2)
// Hexen's fourth weapons
xx(FWeapQuietus)
xx(CWeapWraithverge)
xx(MWeapBloodscourge)
// Misc Hexen classes
xx(LightningZap)
// Ammo and weapon names for the Strife status bar
xx(ClipOfBullets)
xx(PoisonBolts)
xx(ElectricBolts)
xx(HEGrenadeRounds)
xx(PhosphorusGrenadeRounds)
xx(MiniMissiles)
xx(EnergyPod)
xx(StrifeCrossbow)
xx(AssaultGun)
xx(FlameThrower)
xx(MiniMissileLauncher)
xx(StrifeGrenadeLauncher)
xx(Mauler)
xx(BackpackItem)
xx(PuzzleItem)
xx(PuzzleItemNumber)
2017-01-15 17:46:40 +00:00
xx(HealthPickup)
xx(autousemode)
xx(Ammo)
2017-01-19 13:00:00 +00:00
xx(WeaponGiver)
xx(DehackedPickup)
2017-01-15 18:44:43 +00:00
xx(PowerTargeter)
xx(PowerInvulnerable)
xx(PowerStrength)
xx(PowerInvisibility)
xx(PowerIronFeet)
xx(PowerLightAmp)
xx(PowerWeaponLevel2)
xx(PowerFlight)
xx(PowerSpeed)
xx(PowerTorch)
xx(PowerHighJump)
xx(PowerReflection)
xx(PowerDrain)
xx(Reflection)
xx(CustomInventory)
xx(Inventory)
xx(CallTryPickup)
xx(QuestItem25)
xx(QuestItem28)
xx(QuestItem29)
xx(PowerDoubleFiringSpeed)
xx(PowerInfiniteAmmo)
2016-03-01 15:47:10 +00:00
xx(AcolyteBlue)
xx(SpectralLightningV1)
xx(SpectralLightningV2)
xx(TeleportDest)
xx(TeleportDest2)
// Strife's spectres
xx(AlienSpectre1)
xx(AlienSpectre2)
xx(AlienSpectre3)
xx(AlienSpectre4)
xx(AlienSpectre5)
xx(Oracle)
xx(Chicken)
xx(Pig)
// Standard animator names.
xx(Spawn)
xx(See)
xx(Pain)
xx(Melee)
xx(Missile)
xx(Crash)
xx(Death)
xx(Raise)
xx(Wound)
xx(Heal)
xx(Crush)
xx(Yes)
xx(No)
xx(Greetings)
xx(Idle)
xx(GenericFreezeDeath)
xx(GenericCrush)
// Bounce state names
xx(Bounce)
xx(Wall)
xx(Floor)
xx(Ceiling)
xx(Creature)
// Compatible death names for the decorate parser.
xx(XDeath)
xx(Burn)
//xx(Ice) // already defined above
xx(Disintegrate)
xx(Smash)
2016-03-01 15:47:10 +00:00
// Weapon animator names.
xx(Select)
xx(Deselect)
xx(DeadLowered)
2016-03-01 15:47:10 +00:00
xx(Ready)
xx(Fire)
xx(Hold)
xx(AltFire)
xx(AltHold)
xx(Flash)
xx(AltFlash)
xx(Reload)
xx(Zoom)
xx(User1)
xx(User2)
xx(User3)
xx(User4)
// State names used by ASwitchableDecoration
xx(Active)
xx(Inactive)
// State names used by ACustomInventory
xx(Pickup)
xx(Use)
xx(Drop)
xx(Fist)
//xx(Berserk)
xx(Chainsaw)
xx(Pistol)
xx(Shotgun)
xx(SSG)
xx(Chaingun)
xx(Rocket)
xx(Plasma)
xx(BFG)
//xx(Railgun)
xx(Dagger)
// Damage types
//xx(Fire) already defined above
//xx(Ice)
//xx(Disintegrate)
xx(Drowning)
xx(Slime)
//xx(Crush)
xx(Telefrag)
xx(Falling)
xx(Suicide)
xx(Exit)
xx(Railgun)
xx(Poison)
xx(Electric)
xx(BFGSplash)
xx(DrainLife) // A weapon like the Sigil that drains your life away.
xx(Massacre) // For death by a cheater!
//(Melee) already defined above, so don't define it again
xx(InstantDeath) // Strife "instant death"
xx(PoisonCloud) // makes monsters howl.
xx(Hitscan) // for normal guns and the like
xx(Quake)
2016-03-01 15:47:10 +00:00
// Special death name for getting killed excessively. Could be used as
// a damage type if you wanted to force an extreme death.
xx(Extreme)
xx(MDK)
xx(Cast) // 'damage type' for the cast call
// Special names for thingdef_exp.cpp
xx(Random)
xx(FRandom)
xx(Random2)
xx(RandomPick)
xx(FRandomPick)
xx(GetClass)
xx(GetParentClass)
xx(GetDefaultByType)
2016-03-01 15:47:10 +00:00
xx(Exp)
xx(Log10)
xx(Ceil)
xx(ACos)
xx(ASin)
xx(ATan)
xx(Cos)
xx(Sin)
xx(Tan)
xx(CosH)
xx(SinH)
xx(TanH)
xx(ATan2)
xx(VectorAngle)
xx(New)
2016-03-01 15:47:10 +00:00
xx(Alpha)
xx(Angle)
xx(Args)
xx(CeilingZ)
xx(FloorZ)
xx(Health)
xx(Pitch)
xx(SpecialName)
2016-03-01 15:47:10 +00:00
xx(Special)
xx(TID)
xx(TIDtoHate)
xx(WaterLevel)
xx(X)
xx(Y)
xx(Z)
xx(XY)
2016-03-01 15:47:10 +00:00
xx(MomX)
xx(MomY)
xx(MomZ)
xx(Threshold)
xx(DefThreshold)
xx(Abs)
xx(ACS_NamedExecuteWithResult)
xx(CallACS)
xx(Sqrt)
xx(CheckClass)
xx(IsPointerEqual)
xx(Pick)
xx(Mass)
xx(VelX)
xx(VelY)
xx(VelZ)
xx(Accuracy)
xx(Stamina)
xx(Radius)
xx(ReactionTime)
xx(MeleeRange)
xx(Speed)
xx(FastSpeed)
xx(HowlSound)
2016-03-01 15:47:10 +00:00
xx(Clamp)
2016-09-18 20:07:08 +00:00
xx(VisibleStartAngle)
xx(VisibleStartPitch)
xx(VisibleEndAngle)
xx(VisibleEndPitch)
2017-01-13 19:44:34 +00:00
xx(Format)
xx(PickupMsg)
xx(Respawnable)
xx(ExplosionDamage)
xx(ExplosionRadius)
xx(DontHurtShooter)
2016-03-01 15:47:10 +00:00
// Various actor names which are used internally
xx(MapSpot)
xx(PatrolPoint)
xx(PatrolSpecial)
xx(Communicator)
xx(PowerScanner)
2016-03-01 15:47:10 +00:00
// Textmap properties
//xx(X)
//xx(Y)
xx(ZFloor)
xx(ZCeiling)
xx(Height)
//xx(Tid)
//xx(Angle)
xx(Type)
//xx(Special)
xx(Arg0)
xx(Arg1)
xx(Arg2)
xx(Arg3)
xx(Arg4)
xx(Arg0Str)
xx(Arg1Str)
xx(Id)
xx(MoreIds)
xx(V1)
xx(V2)
xx(Sidefront)
xx(Sideback)
xx(Offsetx)
xx(Offsety)
xx(Texturetop)
xx(Texturebottom)
xx(Texturemiddle)
xx(Sector)
xx(Heightfloor)
xx(Heightceiling)
xx(Lightlevel)
xx(Texturefloor)
xx(Textureceiling)
xx(Nodecals)
xx(Skill1)
xx(Skill2)
xx(Skill3)
xx(Skill4)
xx(Skill5)
xx(Skill6)
xx(Skill7)
xx(Skill8)
xx(Skill9)
xx(Skill10)
xx(Skill11)
xx(Skill12)
xx(Skill13)
xx(Skill14)
xx(Skill15)
xx(Skill16)
xx(Medium)
xx(Hard)
xx(Ambush)
xx(Dormant)
xx(Class0)
xx(Class1)
xx(Class2)
xx(Class3)
xx(Class4)
xx(Class5)
xx(Class6)
xx(Class7)
xx(Class8)
xx(Class9)
xx(Class10)
xx(Class11)
xx(Class12)
xx(Class13)
xx(Class14)
xx(Class15)
xx(Class16)
xx(Single)
xx(Coop)
xx(Dm)
xx(Translucent)
xx(Invisible)
xx(Friend)
xx(Strifeally)
xx(Standing)
xx(Countsecret)
xx(Score)
xx(Roll)
xx(Scale)
xx(ScaleX)
xx(ScaleY)
xx(Floatbobphase)
xx(Target)
xx(Master)
xx(Tracer)
2016-03-01 15:47:10 +00:00
xx(Blocking)
xx(Blockmonsters)
xx(Twosided)
xx(Dontpegtop)
xx(Dontpegbottom)
xx(Secret)
xx(Blocksound)
xx(Dontdraw)
xx(Mapped)
xx(Monsteractivate)
xx(Blockplayers)
xx(Blockeverything)
xx(Zoneboundary)
xx(Jumpover)
xx(Blockfloaters)
xx(Clipmidtex)
xx(Wrapmidtex)
xx(Midtex3d)
xx(Checkswitchrange)
xx(Firstsideonly)
xx(Transparent)
xx(Passuse)
xx(Repeatspecial)
xx(Conversation)
xx(Locknumber)
xx(Midtex3dimpassible)
xx(Playercross)
xx(Playeruse)
xx(Playeruseback)
xx(Monstercross)
xx(Impact)
xx(Playerpush)
xx(Missilecross)
xx(Anycross)
xx(Monsteruse)
xx(Monsterpush)
xx(ZDoom)
xx(ZDoomTranslated)
xx(Vavoom)
xx(Xpanningfloor)
xx(Ypanningfloor)
xx(Xpanningceiling)
xx(Ypanningceiling)
xx(Xscalefloor)
xx(Yscalefloor)
xx(Xscaleceiling)
xx(Yscaleceiling)
xx(Rotationfloor)
xx(Rotationceiling)
xx(Lightfloor)
xx(Lightceiling)
xx(Lightfloorabsolute)
xx(Lightceilingabsolute)
xx(Gravity)
xx(Lightcolor)
xx(Fadecolor)
xx(Color_Floor)
xx(Color_Ceiling)
xx(Color_Walltop)
xx(Color_Wallbottom)
xx(Color_Sprites)
2016-03-01 15:47:10 +00:00
xx(Desaturation)
xx(SoundSequence)
xx(Silent)
xx(Nofallingdamage)
xx(Dropactors)
xx(NoRespawn)
xx(Alphafloor)
xx(Alphaceiling)
xx(Renderstylefloor)
xx(Renderstyleceiling)
xx(Waterzone)
xx(portal_ceil_blocksound)
xx(portal_ceil_disabled)
xx(portal_ceil_nopass)
xx(portal_ceil_norender)
xx(portal_ceil_overlaytype)
xx(portal_ceil_useglobaltex)
xx(portal_floor_blocksound)
xx(portal_floor_disabled)
xx(portal_floor_nopass)
xx(portal_floor_norender)
xx(portal_floor_overlaytype)
xx(portal_floor_useglobaltex)
2016-03-01 15:47:10 +00:00
xx(offsetx_top)
xx(offsety_top)
xx(offsetx_mid)
xx(offsety_mid)
xx(offsetx_bottom)
xx(offsety_bottom)
xx(scalex_top)
xx(scaley_top)
xx(scalex_mid)
xx(scaley_mid)
xx(scalex_bottom)
xx(scaley_bottom)
xx(light)
xx(lightabsolute)
xx(lightfog)
xx(nofakecontrast)
xx(smoothlighting)
xx(blockprojectiles)
xx(blockuse)
xx(hidden)
xx(blocksight)
xx(blockhitscan)
xx(Renderstyle)
xx(ceilingplane_a)
xx(ceilingplane_b)
xx(ceilingplane_c)
xx(ceilingplane_d)
xx(floorplane_a)
xx(floorplane_b)
xx(floorplane_c)
xx(floorplane_d)
xx(damageamount)
xx(damagetype)
xx(damageinterval)
xx(leakiness)
xx(damageterraineffect)
xx(damagehazard)
xx(floorterrain)
xx(ceilingterrain)
xx(floor_reflect)
xx(ceiling_reflect)
xx(floorglowcolor)
xx(floorglowheight)
xx(ceilingglowcolor)
xx(ceilingglowheight)
xx(fogdensity)
2016-03-01 15:47:10 +00:00
// USDF keywords
xx(Amount)
xx(Text)
xx(Displaycost)
xx(Yesmessage)
xx(Nomessage)
xx(Log)
xx(Giveitem)
xx(Nextpage)
xx(Closedialog)
xx(Cost)
xx(Page)
xx(Count)
xx(Name)
xx(Panel)
xx(Dialog)
xx(Ifitem)
xx(Choice)
xx(Link)
xx(Goodbye)
xx(Require)
xx(Exclude)
xx(Userstring)
xx(Sky)
2016-03-01 15:47:10 +00:00
// Special menus
xx(Mainmenu)
xx(Episodemenu)
xx(Playerclassmenu)
xx(HexenDefaultPlayerclassmenu)
xx(Skillmenu)
xx(Startgame)
xx(StartgameConfirm)
xx(StartgameConfirmed)
xx(Loadgamemenu)
xx(Savegamemenu)
xx(Readthismenu)
xx(Optionsmenu)
xx(Quitmenu)
xx(Savemenu)
xx(Playermenu)
xx(EndGameMenu)
2016-03-01 15:47:10 +00:00
xx(Playerbox)
xx(Team)
xx(Color)
xx(Red)
xx(Green)
xx(Blue)
xx(Skin)
xx(Gender)
xx(Autoaim)
xx(Switch)
xx(Playerdisplay)
xx(Controlmessage)
xx(Crosshairs)
xx(Colorpickermenu)
xx(Mididevices)
xx(Aldevices)
xx(CustomizeControls)
xx(MessageOptions)
xx(AutomapOptions)
xx(ScoreboardOptions)
xx(MapColorMenu)
xx(GameplayOptions)
xx(CompatibilityOptions)
xx(MouseOptions)
xx(JoystickOptions)
xx(SoundOptions)
xx(AdvSoundOptions)
xx(ModReplayerOptions)
xx(VideoOptions)
xx(JoystickConfigMenu)
xx(VMEnterText)
xx(VMTestText)
xx(VideoModeMenu)
xx(res_0)
xx(res_1)
xx(res_2)
xx(res_3)
xx(res_4)
xx(res_5)
xx(res_6)
xx(res_7)
xx(res_8)
xx(res_9)
xx(AlwaysRun)
// end sequences
xx(Inter_Chess)
xx(Inter_Strife)
xx(Inter_Strife_Good)
xx(Inter_Strife_Sad)
xx(Inter_Strife_Bad)
xx(Inter_Strife_Lose)
xx(Inter_Strife_MAP03)
xx(Inter_Strife_MAP10)
xx(Multiplayer)
// more stuff
xx(ColorSet)
xx(NeverSwitchOnPickup)
xx(MoveBob)
xx(StillBob)
2016-09-16 07:01:52 +00:00
xx(WBobSpeed)
2016-03-01 15:47:10 +00:00
xx(PlayerClass)
xx(MonsterClass)
xx(MorphedMonster)
2016-03-01 15:47:10 +00:00
xx(Wi_NoAutostartMap)
xx(Duration)
xx(MorphStyle)
xx(MorphFlash)
xx(UnMorphFlash)
xx(Powerup)
xx(EffectTics)
xx(PowerupGiver)
xx(BlendColor)
xx(Strength)
xx(Mode)
xx(PowerupType)
2017-01-18 13:18:17 +00:00
xx(PlayerPawn)
xx(Key)
2016-03-01 15:47:10 +00:00
// Decorate compatibility functions
xx(BuiltinTypeCheck)
xx(BuiltinRandom)
xx(BuiltinFRandom)
xx(BuiltinCallLineSpecial)
xx(BuiltinNameToClass)
xx(BuiltinFindMultiNameState)
xx(BuiltinFindSingleNameState)
xx(BuiltinHandleRuntimeState)
xx(BuiltinGetDefault)
xx(BuiltinClassCast)
xx(BuiltinFormat)
2016-03-01 15:47:10 +00:00
xx(Damage)
xx(Noattack)
2016-03-01 15:47:10 +00:00
// basic type names
xx(Default)
xx(sByte)
xx(Byte)
xx(Short)
xx(uShort)
xx(Int)
xx(uInt)
xx(Bool)
xx(uint8)
xx(int8)
xx(uint16)
xx(int16)
2016-03-01 15:47:10 +00:00
xx(Float)
xx(Float32)
xx(Float64)
xx(Double)
xx(String)
xx(Vector)
xx(Map)
xx(Array)
xx(Include)
2016-03-01 15:47:10 +00:00
xx(Sound)
xx(State)
xx(Fixed)
xx(Vector2)
xx(Vector3)
xx(let)
2016-03-01 15:47:10 +00:00
xx(Min)
xx(Max)
xx(Min_Normal)
xx(Min_Denormal)
xx(Epsilon)
xx(NaN)
xx(Infinity)
xx(Dig)
xx(Min_Exp)
xx(Max_Exp)
xx(Mant_Dig)
xx(Min_10_Exp)
xx(Max_10_Exp)
// implicit function parameters
xx(self)
xx(invoker)
xx(stateinfo)
2016-03-01 15:47:10 +00:00
xx(__decorate_internal_int__)
xx(__decorate_internal_bool__)
xx(__decorate_internal_float__)
- fixed: State labels were resolved in the calling function's context instead of the called function one's. This could cause problems with functions that take states as parameters but use them to set them internally instead of passing them through the A_Jump interface back to the caller, like A_Chase or A_LookEx. This required some quite significant refactoring because the entire state resolution logic had been baked into the compiler which turned out to be a major maintenance problem. Fixed this by adding a new builtin type 'statelabel'. This is an opaque identifier representing a state, with the actual data either directly encoded into the number for single label state or an index into a state information table. The state resolution is now the task of the called function as it should always have remained. Note, that this required giving back the 'action' qualifier to most state jumping functions. - refactored most A_Jump checkers to a two stage setup with a pure checker that returns a boolean and a scripted A_Jump wrapper, for some simpler checks the checker function was entirely omitted and calculated inline in the A_Jump function. It is strongly recommended to use the boolean checkers unless using an inline function invocation in a state as they lead to vastly clearer code and offer more flexibility. - let Min() and Max() use the OP_MIN and OP_MAX opcodes. Although these were present, these function were implemented using some grossly inefficient branching tests. - the DECORATE 'state' cast kludge will now actually call ResolveState because a state label is not a state and needs conversion.
2016-11-14 13:12:27 +00:00
xx(ResolveState)
xx(DamageFunction)
xx(Length)
xx(Unit)
xx(Size)
xx(Copy)
xx(Move)
xx(Voidptr)
- fixed: State labels were resolved in the calling function's context instead of the called function one's. This could cause problems with functions that take states as parameters but use them to set them internally instead of passing them through the A_Jump interface back to the caller, like A_Chase or A_LookEx. This required some quite significant refactoring because the entire state resolution logic had been baked into the compiler which turned out to be a major maintenance problem. Fixed this by adding a new builtin type 'statelabel'. This is an opaque identifier representing a state, with the actual data either directly encoded into the number for single label state or an index into a state information table. The state resolution is now the task of the called function as it should always have remained. Note, that this required giving back the 'action' qualifier to most state jumping functions. - refactored most A_Jump checkers to a two stage setup with a pure checker that returns a boolean and a scripted A_Jump wrapper, for some simpler checks the checker function was entirely omitted and calculated inline in the A_Jump function. It is strongly recommended to use the boolean checkers unless using an inline function invocation in a state as they lead to vastly clearer code and offer more flexibility. - let Min() and Max() use the OP_MIN and OP_MAX opcodes. Although these were present, these function were implemented using some grossly inefficient branching tests. - the DECORATE 'state' cast kludge will now actually call ResolveState because a state label is not a state and needs conversion.
2016-11-14 13:12:27 +00:00
xx(StateLabel)
xx(SpriteID)
xx(TextureID)
xx(Overlay)
xx(IsValid)
xx(IsNull)
xx(Exists)
xx(SetInvalid)
xx(SetNull)
xx(A_Punch)
xx(A_FirePistol)
xx(A_FireShotgun)
xx(A_FireShotgun2)
xx(A_FireCGun)
xx(A_FireMissile)
xx(A_Saw)
xx(A_FirePlasma)
xx(A_FireBFG)
xx(A_FireOldBFG)
xx(A_FireRailgun)
// color channels
xx(a)
xx(r)
xx(g)
xx(b)
// Special translation names
xx(RainPillar1)
xx(RainPillar2)
xx(RainPillar3)
xx(RainPillar4)
xx(RainPillar5)
xx(RainPillar6)
xx(RainPillar7)
xx(RainPillar8)
xx(Player1)
xx(Player2)
xx(Player3)
xx(Player4)
xx(Player5)
xx(Player6)
xx(Player7)
xx(Player8)