Model Skins

Moderator: Graf Zahl

Locked
User avatar
ChupaReaper
Posts: 202
Joined: Fri Jun 15, 2007 16:35
Location: England
Contact:

Model Skins

Post by ChupaReaper »

Basically, S_SKIN could work just like a MODELDEF only replacing each frame already defined; if any new frames are set (aren't set in the origional MODELDEF) they are ignored by GZDoom or an error report is spewed up.

So if someone wanted to replace a Player Class which uses multiple sprite names and a modeldefs, that someone could write up an alternative skin modeldef in an s_skin lump or a new lump like MDLSKIN (which doesn't have to be set inside a wad file).
User avatar
StrikerMan780
Posts: 21
Joined: Fri Nov 23, 2007 10:11
Location: Somewhere in Cyberspace

Post by StrikerMan780 »

This can already be done. Look at my code for a Quake2 Guy Skin:

Marine would be replace with "DoomPlayer", I had a custom player class called "Marine" in this. You can define multiple cases of the class, and make various skin models.

Code: Select all

Model Marine
{
  Path "Models/players"
  Model 0 "q2male.md2"
  Skin 0 "grunt.png"
  Scale 1.4 1.4 1.4
  ZOffset 28.0

  Model 1 "weapon.md2"
  Skin 1 "weapon.pcx"

  Frame Q2MM A 0 "run2"
  Frame Q2MM A 1 "run2"
  Frame Q2MM B 0 "run3"
  Frame Q2MM B 1 "run3"
  Frame Q2MM C 0 "run5"
  Frame Q2MM C 1 "run5"
  Frame Q2MM D 0 "run6"
  Frame Q2MM D 1 "run6"
  
  Frame Q2MM E 0 "attack1"
  Frame Q2MM E 1 "attack1"
  Frame Q2MM F 0 "attack2"
  Frame Q2MM F 1 "attack2"

  Frame Q2MM G 0 "pain101"
  Frame Q2MM G 1 "pain1"

  Frame Q2MM H 0 "death101"
  Frame Q2MM H 1 "death1"
  Frame Q2MM I 0 "death102"
  Frame Q2MM I 1 "death1"
  Frame Q2MM J 0 "death103"
  Frame Q2MM J 1 "death1"
  Frame Q2MM K 0 "death104"
  Frame Q2MM K 1 "death1"
  Frame Q2MM L 0 "death105"
  Frame Q2MM L 1 "death1"
  Frame Q2MM M 0 "death106"
  Frame Q2MM M 1 "death1"
  Frame Q2MM N 0 "death106"
  Frame Q2MM N 1 "death1"
}
User avatar
ChupaReaper
Posts: 202
Joined: Fri Jun 15, 2007 16:35
Location: England
Contact:

Post by ChupaReaper »

So you make a seperate modeldef for a skin -not a subclass (using inheritance). If I were to do this:
:DECORATE:

Code: Select all

Actor	ZMarine : PlayerPawn replaces DoomPlayer
{
	//Status
	Tag			"Marine"
	Player.DisplayName	"ZMarine"
	Health			500
	Player.MaxHealth		1000
	PainChance		255
	Speed			1
	Player.RunHealth		50
	Player.ForwardMove	1 1.5
	Player.SideMove		1 1.5
	Player.JumpZ		8
	Radius			16
	Height			64
	Player.ViewHeight		38
	Mass			100
	Player.ColorRange		0 0
	Player.ScoreIcon		"Marine_Icon"
	Player.InvulnerabilityMode	"Reflective"
	Player.SpawnClass		"any"
	Player.SoundClass		"Marine"

	//Offense
	Player.StartItem		"Fist"
	RadiusDamageFactor	0.25

	+windthrust
	-dontsplash
	+dontgib
	-ghost
	+thrughost

	States
	{
		Spawn:
		IDLE ABCD 4
		loop

		See:
		MOVE ABCDEFGH 1
		loop

		Pain:
		PAIN A 8
		goto spawn

		Melee:
		MISL A 8
		MISL B 8
		goto spawn

		Missile:
		MISL AB 8
		MISL C 8
		goto spawn

		Death:
		DETH A 6
		DETH B 6 A_PlayerScream
		DETH CD 6
		DETH E 6 A_NoBlocking
		DETH F -1
		stop
	}
}
:MODELDEF: (For origional class)

Code: Select all

Model	ZMarine
{
	Model 0 "Marine.md2"
	Skin 0 "Marine.png"
	Model 1 "Marine_Weapon.md2"
	Skin 1 "Marine_Weapon.png"
	Scale 1.0 1.0 1.0

	FrameIndex IDLE A 0 0 //Spawn
	FrameIndex IDLE A 1 0
	FrameIndex IDLE A 2 999
	FrameIndex IDLE B 0 1
	FrameIndex IDLE B 1 1
	FrameIndex IDLE C 0 2
	FrameIndex IDLE C 1 2
	FrameIndex IDLE D 0 3
	FrameIndex IDLE D 1 3

	FrameIndex MOVE A 0 4 //Chase
	FrameIndex MOVE A 1 4
	FrameIndex MOVE B 0 5
	FrameIndex MOVE B 1 5
	FrameIndex MOVE C 0 6
	FrameIndex MOVE C 1 6
	FrameIndex MOVE D 0 7
	FrameIndex MOVE D 1 7
	FrameIndex MOVE E 0 8
	FrameIndex MOVE E 1 8
	FrameIndex MOVE F 0 9
	FrameIndex MOVE F 1 9
	FrameIndex MOVE G 0 10
	FrameIndex MOVE G 1 10
	FrameIndex MOVE H 0 11
	FrameIndex MOVE H 1 11

	FrameIndex PAIN A 0 12 //Pain
	FrameIndex PAIN A 1 12

	FrameIndex MISL A 0 13 //Missile
	FrameIndex MISL A 1 13
	FrameIndex MISL B 0 14
	FrameIndex MISL B 1 14

	FrameIndex DETH A 0 15 //Death
	FrameIndex DETH A 1 15
	FrameIndex DETH B 0 16
	FrameIndex DETH B 1 16
	FrameIndex DETH C 0 17
	FrameIndex DETH C 1 17
	FrameIndex DETH D 0 18
	FrameIndex DETH D 1 18
	FrameIndex DETH E 0 19
	FrameIndex DETH E 1 19
	FrameIndex DETH F 0 20
	FrameIndex DETH F 1 20
}

Model	ZMarine
{
	Model 0 "Marine.md2"
	Skin 0 "Marine.png"
	Model 1 "Marine_Weapon.md2"
	Skin 1 "Marine_Weapon.png"
	Model 2 "Marine_Fire.md2"
	Skin 2 "Marine_Fire.png"
	Scale 1.0 1.0 1.0

	FrameIndex MISL C 0 15 //Emit //Missile
	FrameIndex MISL C 1 15
	FrameIndex MISL C 2 0
}
Would this then work?:
:S_SKIN:

Code: Select all

Name = FatZMarine
:MODELDEF: (For Class Skin)

Code: Select all

Model	FatZMarine
{
	Model 0 "FatMarine.md2"
	Skin 0 "FatMarine.png"
	Model 1 "FatMarine_Weapon.md2"
	Skin 1 "FatMarine_Weapon.png"
	Scale 1.0 1.0 1.0

	FrameIndex IDLE A 0 0 //Spawn
	FrameIndex IDLE A 1 0
	FrameIndex IDLE A 2 999
	FrameIndex IDLE B 0 1
	FrameIndex IDLE B 1 1
	FrameIndex IDLE C 0 2
	FrameIndex IDLE C 1 2
	FrameIndex IDLE D 0 3
	FrameIndex IDLE D 1 3

	FrameIndex MOVE A 0 4 //Chase
	FrameIndex MOVE A 1 4
	FrameIndex MOVE B 0 5
	FrameIndex MOVE B 1 5
	FrameIndex MOVE C 0 6
	FrameIndex MOVE C 1 6
	FrameIndex MOVE D 0 7
	FrameIndex MOVE D 1 7
	FrameIndex MOVE E 0 8
	FrameIndex MOVE E 1 8
	FrameIndex MOVE F 0 9
	FrameIndex MOVE F 1 9
	FrameIndex MOVE G 0 10
	FrameIndex MOVE G 1 10
	FrameIndex MOVE H 0 11
	FrameIndex MOVE H 1 11

	FrameIndex PAIN A 0 12 //Pain
	FrameIndex PAIN A 1 12

	FrameIndex MISL A 0 13 //Missile
	FrameIndex MISL A 1 13
	FrameIndex MISL B 0 14
	FrameIndex MISL B 1 14

	FrameIndex DETH A 0 15 //Death
	FrameIndex DETH A 1 15
	FrameIndex DETH B 0 16
	FrameIndex DETH B 1 16
	FrameIndex DETH C 0 17
	FrameIndex DETH C 1 17
	FrameIndex DETH D 0 18
	FrameIndex DETH D 1 18
	FrameIndex DETH E 0 19
	FrameIndex DETH E 1 19
	FrameIndex DETH F 0 20
	FrameIndex DETH F 1 20
}

Model	FatZMarine
{
	Model 0 "FatMarine.md2"
	Skin 0 "FatMarine.png"
	Model 1 "FatMarine_Weapon.md2"
	Skin 1 "FatMarine_Weapon.png"
	Model 2 "FatMarine_Fire.md2"
	Skin 2 "FatMarine_Fire.png"
	Scale 1.0 1.0 1.0

	FrameIndex MISL C 0 15 //Emit //Missile
	FrameIndex MISL C 1 15
	FrameIndex MISL C 2 0
}
Well that's my largest post yet! -I would test this myself but due to one's nvidia 7600 gs dying I have but a currupted screen with no directx/opengl support at all -I can't even play video files :( but Bebo still works :D !
Locked

Return to “Closed Feature Suggestions”