Hmm, since it was coded on gunz source, and Vusion done it:
Sooo, going to release it :):Quote:
Classic Gametype.
http://www.youtube.com/watch?v=scuNzpTssSs
- Tripled the damage dealt by any gun to give the FPS feeling to it.
- Zoomed a bit to the gun, can be easily noticed.
- Disabled tumble/dashes.
- No melee.
- HP/AP capped to 100/100 to balance the tripled damage thing.
ZGameInterface.cpp: (Disable All The Weapons except one)
Spoiler:
Copy Paste!
Code:void ZGameInterface::ChangeWeapon(ZChangeWeaponType nType)
{
ZMyCharacter* pChar = ZGetGame()->m_pMyCharacter;
if (pChar->m_pVMesh == NULL) return;
if (pChar->IsDie() ) return;
if (m_pGame->GetMatch()->IsRuleGladiator()) return;
int nParts = -1;
bool bWheel = false;
if ((nType == ZCWT_PREV) || (nType == ZCWT_NEXT))
{
bWheel = true;
int nHasItemCount = 0;
int nPos = -1;
int ItemQueue[MMCIP_END];
for(int i = MMCIP_MELEE; i < MMCIP_CUSTOM2 + 1; i++)
{
if (!pChar->GetItems()->GetItem((MMatchCharItemParts)i)->IsEmpty())
{
if(pChar->GetItems()->GetSelectedWeaponParts() == i)
nPos = nHasItemCount;
ItemQueue[nHasItemCount++] = i;
}
}
if (nPos < 0) return;
if (nType == ZCWT_PREV)
{
if(ZGetGameClient()->GetMatchStageSetting()->GetStageSetting()->bClassic == true)
{
}
else
{
if (nHasItemCount <= 1) return;
int nNewPos = nPos - 1;
int nCount = 0;
if (nNewPos < 0) nNewPos = nHasItemCount-1;
while ( nNewPos != nPos)
{
MMatchCharItemParts nPart = (MMatchCharItemParts)ItemQueue[ nNewPos];
if ( (nPart == MMCIP_CUSTOM1) || (nPart == MMCIP_CUSTOM2) ) {
ZItem* pItem = ZGetGame()->m_pMyCharacter->GetItems()->GetItem(nPart);
if (pItem && pItem->GetBulletCurrMagazine() > 0) { break; }
} else { break; }
nNewPos = nNewPos - 1;
if (nNewPos < 0) nNewPos = nHasItemCount-1;
nCount++;
if ( nCount > (nHasItemCount * 2))
return;
}
nPos = nNewPos;
}
}
else if (nType == ZCWT_NEXT)
{
if(ZGetGameClient()->GetMatchStageSetting()->GetStageSetting()->bClassic == true)
{
}
else
{
if (nHasItemCount <= 1) return;
int nNewPos = nPos + 1;
if (nNewPos >= nHasItemCount) nNewPos = 0;
while(nNewPos != nPos)
{
MMatchCharItemParts nPart = (MMatchCharItemParts)ItemQueue[nNewPos];
if ( (nPart == MMCIP_CUSTOM1) || (nPart == MMCIP_CUSTOM2) ) {
ZItem* pItem = ZGetGame()->m_pMyCharacter->GetItems()->GetItem(nPart);
if (pItem && pItem->GetBulletCurrMagazine() > 0) { break; }
} else { break; }
nNewPos = nNewPos + 1;
if (nNewPos >= nHasItemCount) nNewPos = 0;
}
nPos = nNewPos;
}
}
nParts = ItemQueue[nPos];
}
else
{
if(ZGetGameClient()->GetMatchStageSetting()->GetStageSetting()->bClassic == true)
{
}
else
{
switch (nType)
{
case ZCWT_MELEE: nParts = (int)(MMCIP_MELEE); break;
case ZCWT_PRIMARY: nParts = (int)(MMCIP_PRIMARY); break;
case ZCWT_SECONDARY:nParts = (int)(MMCIP_SECONDARY);break;
case ZCWT_CUSTOM1: nParts = (int)(MMCIP_CUSTOM1); break;
case ZCWT_CUSTOM2: nParts = (int)(MMCIP_CUSTOM2); break;
default: _ASSERT(0); break;
}
if ( (nParts == MMCIP_CUSTOM1) || (nParts == MMCIP_CUSTOM2) )
{
ZItem* pItem = pChar->GetItems()->GetItem((MMatchCharItemParts)nParts);
if (pItem->GetBulletCurrMagazine() <= 0) return;
}
}
}
if (nParts < 0) return;
if (pChar->GetItems()->GetSelectedWeaponParts() == nParts) return;
// ָ·־ µ¹¸±¶§´ֲ ֳכ¼ֱַֿׂצ ¾ֺ´ֲ´
if(bWheel && (pChar->GetStateUpper() == ZC_STATE_UPPER_LOAD && pChar->IsUpperPlayDone() == false ))
return;
//jintriple3 ¸¸נ¸® ֱַ·ֿ½ֳ...÷סֶ® ֶ׀ֵ·..
const ZCharaterStatusBitPacking &uStatus = pChar->m_dwStatusBitPackingValue.Ref();
ZMyCharaterStatusBitPacking & zStatus = pChar->m_statusFlags.Ref();
// ¸ֵ´·ְֱײְ»¶§/½ע¶§/´÷ם¸µ/½÷ֵ³/¸·ְ»¶§/¶ח¿צֱר»ףֲֵ´ֲ ¹«±ג±³ָ¯ְּ ¾ָµָ´.
if (zStatus.m_bWallHang || zStatus.m_bShot || zStatus.m_bShotReturn || uStatus.m_bTumble
|| zStatus.m_bSkill || zStatus.m_bGuard || uStatus.m_bBlast || uStatus.m_bBlastFall
|| uStatus.m_bBlastDrop || uStatus.m_bBlastStand || uStatus.m_bBlastAirmove
|| zStatus.m_bSlash || zStatus.m_bJumpSlash || zStatus.m_bJumpSlashLanding // °÷£±ג ֱ¿¡µµ ±³ָ¯ ¾ָµָ´
// ¼¦ְֱֿ¶§ »ףֳ¼¾ײ´ֿ¸ְּ¼ְַ¸·־ ֶַ÷°
|| (pChar->GetStateUpper() == ZC_STATE_UPPER_SHOT && pChar->IsUpperPlayDone() == false )
/*
// ±׳¸®°ם ¹»חַֿ°ם³×¼ µפ·¹ְּ°¡ ¾ֱֶק ¾ָ³¡³µְ»¶§
|| pChar->m_fNextShotTimeType[pChar->GetItems()->GetSelectedWeaponParts()] > g_pGame->GetTime()
*/
)
{
// ְּ¶§´ֲ ¿¹¾אְ» ַׁ´. (ֶָקַװ)
m_bReservedWeapon = true;
m_ReservedWeapon = nType;
return;
}
/*
// »ףֳ¼¾ײ´ֿ¸ְּ¼ְַּ ְײְ¸¸י ִµ½½.. ¸®·־µו/¼¦ µְ§
if (pChar->GetStateUpper() != ZC_STATE_UPPER_NONE) {
if ( (pChar->GetStateUpper() != ZC_STATE_UPPER_RELOAD) &&
(pChar->IsUpperPlayDone() == false) ) return;
}
*/
m_bReservedWeapon = false;
ZPostChangeWeapon(nParts);
m_pMyCharacter->m_dwStatusBitPackingValue.Ref().m_bSpMotion = false;
// ³» ¹«±ג´ֲ ֱקֱ¢ ¹²´. command¸¦ ֵכַֿ¸י ¼ר¼°¡ ¹²מ´ֲ °ז¿ל°¡ ְײ´.
m_pMyCharacter->ChangeWeapon((MMatchCharItemParts)nParts);
}
ZMyCharacter.cpp: (On ShotMelee)
Spoiler:
Copy Paste!
Code:void ZMyCharacter::OnShotMelee()
{
if(ZGetGameClient()->GetMatchStageSetting()->GetStageSetting()->bClassic == true)
{
}
if(ZGetGameClient()->GetMatchStageSetting()->GetStageSetting()->bClassic == false)
{
ZCharaterStatusBitPacking & uStatus = m_dwStatusBitPackingValue.Ref();
ZMyCharaterStatusBitPacking& zStatus = m_statusFlags.Ref();
if(zStatus.m_bSkill || uStatus.m_bStun || zStatus.m_bShotReturn || zStatus.m_bJumpShot || zStatus.m_bGuard ||
zStatus.m_bSlash || zStatus.m_bJumpSlash || zStatus.m_bJumpSlashLanding ) return; // || m_bTumble
if(zStatus.m_bShot && !uStatus.m_bPlayDone)
return;
// ´°ֻ
if( m_pVMesh->m_SelectWeaponMotionType==eq_wd_dagger ||
m_pVMesh->m_SelectWeaponMotionType==eq_ws_dagger )
{ // dagger
if(m_AniState_Upper.Ref()==ZC_STATE_UPPER_SHOT)
return;
if(m_bCharged->Ref()/* || IsCounterAttackable()*/) //mmemory proxy
{
if(GetVelocity().z>100.f || GetDistToFloor() > 80.f)
JumpChargedShot();
else
ChargedShot();
return;
}
SetAnimationUpper(ZC_STATE_UPPER_SHOT);
uStatus.m_bWallJump=false;
uStatus.m_bWallJump2=false;
#ifdef CHARGE_SHOT
zStatus.m_bEnterCharge=true;
#endif
}
else
{ // katana , sword , blade
// int nShotCount= (m_pVMesh->m_pMesh->m_ani_mgr.GetAnimation("attack5") != NULL) ? 5 : 4; // ַֿµוִµו -_-;
// int nShotCount = 5;//³²³א ¸נµ־ 5´°ט·־ ¹²ס~
if(!zStatus.m_bShot)
m_nShot.Set_CheckCrc(0);
// 5¹רֲ° ִ®ֱת ÷ְְ־
int nShotCount = 4;
// 2005.4.4 ´כ°ֻµµ 4¹רֲ° ִ®ֱתְּ µי¾מ°©´ֿ´.
//if( m_pVMesh->m_SelectWeaponMotionType == eq_wd_sword ) // blade
//{
// nShotCount = 3;
//}
if(m_nShot.Ref()==nShotCount) {
return;
}
// ¾מ´ְֱ₪µµ ³פְּ ְײְ¸¸י °ם°ר÷£±ג°¡ °¡´ֹ.
if( !zStatus.m_bJumpShot && (GetVelocity().z>100.f || GetDistToFloor() > 80.f) )
{
if(m_bCharged->Ref()) //mmemory proxy
{
JumpChargedShot();
return;
}
zStatus.m_bShot=false;
zStatus.m_bShotReturn=false;
uStatus.m_bWallJump=false;
uStatus.m_bWallJump2=false;
zStatus.m_bJumpShot=true;
uStatus.m_bPlayDone=false;
if(IsRunWall() && IsMeleeWeapon() ) {
//m_nJumpShotType = 1;
}
else {
//m_nJumpShotType = 0;
}
MEMBER_SET_CHECKCRC(m_shotTimeInfo, m_fNextShotTimeType[MMCIP_MELEE], ZGetGame()->GetTime() + 0.8f);
}
else
{
// °רְֱּ¸י¼ °ם°ר÷£±ג¸¦ ¸רַֿ´ֲ ֱ¶°ְַּ¸י ִ®ֱת ¾ַָװ
// ¿©ְ ¸¶ֱצ¸· ִ®ֱתְ÷ °רֱ¿¡¼ ַֿ¹ַ·־ ¿¹¿
if(!uStatus.m_bLand && GetDistToFloor()>20.f) {
if(m_nShot.Ref() < 2) {
ReleaseLButtonQueue();
return;
}
}
if(m_bCharged->Ref()/* || IsCounterAttackable()*/) { //mmemory proxy
ChargedShot();
return;
}
zStatus.m_bShot=true;
zStatus.m_bShotReturn=false;
uStatus.m_bPlayDone=false;
#ifdef CHARGE_SHOT
if(m_nShot.Ref()==0)
zStatus.m_bEnterCharge=true;
#endif
m_nShot.Set_CheckCrc( m_nShot.Ref() % nShotCount + 1);
}
}
uStatus.m_bTumble=false;
ReleaseLButtonQueue();
int sel_type = GetItems()->GetSelectedWeaponParts();
// ֳ¹¹רֲ° ִ®ֱתְ÷ µפ·¹ְּ°¡ ְײ´
if(m_nShot.Ref()==1 && !zStatus.m_bJumpShot) {
zStatus.m_b1ShotSended=false;
m_f1ShotTime.Set_CheckCrc( ZGetGame()->GetTime() );
}
else
{
// mlog("zpost_melee !\n");
ZPostShotMelee(/*g_pGame->GetTime(),*/GetPosition(),m_nShot.Ref());
AddDelayedWork(ZGetGame()->GetTime()+0.2f,ZDW_SHOT);
}
}
}
ZMyCharacter.cpp: (No Rocket)
Spoiler:
Copy Paste!
Code:void ZMyCharacter::OnShotRocket()
{
if(ZGetGameClient()->GetMatchStageSetting()->GetStageSetting()->bClassic == true)
{
}
if(ZGetGameClient()->GetMatchStageSetting()->GetStageSetting()->bClassic == false)
{
ZItem* pSelectedItem = GetItems()->GetSelectedWeapon();
if (pSelectedItem==NULL || pSelectedItem->GetBulletCurrMagazine() <= 0) {
return;
}
MPOINT Cp = MPOINT(0, 0);
RBSPPICKINFO bpi;
memset(&bpi,0,sizeof(RBSPPICKINFO));
ZCombatInterface* ci=ZGetCombatInterface();
if (ci) {
Cp = ci->GetCrosshairPoint();
rvector pos,dir;
RGetScreenLine(Cp.x,Cp.y,&pos,&dir);
if(!ZGetGame()->GetWorld()->GetBsp()->Pick(pos,dir,&bpi)) {
bpi.PickPos=pos+dir*10000.f;
}
}
rvector vWeaponPos;
CheckWall(vWeaponPos);
rvector dir = bpi.PickPos - vWeaponPos;
Normalize(dir);
int sel_type = GetItems()->GetSelectedWeaponParts();
ZPostShotSp(/*g_pGame->GetTime(),*/vWeaponPos,dir,ZC_WEAPON_SP_ROCKET,sel_type);
}
}
ZMyCharacter.cpp: (No Tumble)
Spoiler:
Copy Paste!
Code:void ZMyCharacter::OnTumble(int nDir)
{
if(ZGetGameClient()->GetMatchStageSetting()->GetStageSetting()->bClassic == true)
{
}
if(ZGetGameClient()->GetMatchStageSetting()->GetStageSetting()->bClassic == false)
{
#define SWORD_DASH 1000.f
#define GUN_DASH 900.f
//jintriple3 ¸¸נ¸® ֱַ·ֿ½ֳ...÷סֶ® ֶ׀ֵ·..
ZCharaterStatusBitPacking & uStatus = m_dwStatusBitPackingValue.Ref();
ZMyCharaterStatusBitPacking & zStatus = m_statusFlags.Ref();
if(IsDie() || uStatus.m_bWallJump || zStatus.m_bGuard || zStatus.m_bDrop || uStatus.m_bWallJump2 || uStatus.m_bTumble ||
zStatus.m_bWallHang || uStatus.m_bBlast || uStatus.m_bBlastFall || uStatus.m_bBlastDrop || uStatus.m_bBlastStand ||
uStatus.m_bBlastAirmove || m_bCharging->Ref() || zStatus.m_bSlash || zStatus.m_bJumpSlash || zStatus.m_bJumpSlashLanding || //mmemory proxy
uStatus.m_bStun || m_AniState_Lower.Ref() == ZC_STATE_LOWER_UPPERCUT ) return;
if(zStatus.m_bLimitTumble)
return;
rvector right;
rvector forward=RCameraDirection;
forward.z=0;
Normalize(forward);
CrossProduct(&right,rvector(0,0,1),forward);
float fSpeed;
if (GetItems()->GetSelectedWeapon()!=NULL &&
(GetItems()->GetSelectedWeapon()->IsEmpty() == false) &&
GetItems()->GetSelectedWeapon()->GetDesc()->m_nType.Ref()==MMIT_MELEE)
{
fSpeed=SWORD_DASH;
rvector vPos = GetPosition();
rvector vDir = RealSpace2::RCameraDirection;
rvector vRight;
CrossProduct(&vRight,RealSpace2::RCameraUp,RealSpace2::RCameraDirection);
if(nDir==0) {
vDir = -RealSpace2::RCameraDirection;
} else if(nDir==1) {
vDir = RealSpace2::RCameraDirection;
} else if(nDir==2) {
vDir = -vRight;
} else if(nDir==3) {
vDir = vRight;
}
vDir.z = 0.f;
Normalize(vDir);
int sel_type = GetItems()->GetSelectedWeaponParts();
if( !zStatus.m_bWallHang && !zStatus.m_bSkill && !zStatus.m_bShot && !zStatus.m_bShotReturn)
ZPostDash(vPos,vDir,sel_type);
}
else
{
fSpeed=GUN_DASH;
}
switch(nDir)
{
case 0 : SetVelocity(forward*fSpeed);break;
case 1 : SetVelocity(-forward*fSpeed);break;
case 2 : SetVelocity(right*fSpeed);break;
case 3 : SetVelocity(-right*fSpeed);break;
}
uStatus.m_bTumble=true;
m_nTumbleDir=nDir;
uStatus.m_bSpMotion = false;
}
}
ZMyCharacter.cpp: (Tripled Damage)
Spoiler:
Code:void ZMyCharacter::OnDamaged(ZObject* pAttacker, rvector srcPos, ZDAMAGETYPE damageType, MMatchWeaponType weaponType, float fDamage, float fPiercingRatio, int nMeleeType)
{
if(ZGetGameClient()->GetMatchStageSetting()->GetStageSetting()->bClassic == true)
{
ZCharacter::OnDamaged(pAttacker,srcPos,damageType,weaponType,fDamage * 3,fPiercingRatio,nMeleeType);
}
if(ZGetGameClient()->GetMatchStageSetting()->GetStageSetting()->bClassic == false)
{
ZCharacter::OnDamaged(pAttacker,srcPos,damageType,weaponType,fDamage,fPiercingRatio,nMeleeType);
}
ZGetScreenEffectManager()->AddAlert(GetPosition(),m_Direction, srcPos);
if(damageType==ZD_EXPLOSION)
{
if (GetVelocity().z > 0 && pAttacker!=NULL )
SetLastThrower(pAttacker->GetUID(), ZGetGame()->GetTime()+1.0f);
}
}
ZCombatInterface.cpp: (Little Bit Zoom)
Spoiler:
Look for:
Copy Paste under it:Code:if(ZGetGameInterface()->GetCamera()->GetLookMode()==ZCAMERA_DEFAULT)
m_CrossHair.Draw(pDC);
Code:if(ZGetGameClient()->GetMatchStageSetting()->GetStageSetting()->bClassic == true)
{
ZGetGameInterface()->GetCamera()->m_fDist = 100.0f;
}
ZCharacter.cpp: (100/100 HP/AP)
Spoiler:
Look For:
Paste Under:Code:m_Property.fMaxAP.Set_CheckCrc(pCharInfo->nAP + fAddedAP);
Code:if(ZGetGameClient()->GetMatchStageSetting()->GetStageSetting()->bClassic == true)
{
m_Property.fMaxAP.Set_CheckCrc(100);
m_Property.fMaxHP.Set_CheckCrc(100);
m_fPreMaxHP = 100;
m_fPreMaxAP = 100;
}
if(ZGetGameClient()->GetMatchStageSetting()->GetStageSetting()->bClassic == false)
{
m_Property.fMaxAP.Set_CheckCrc(pCharInfo->nAP + fAddedAP);
m_Property.fMaxHP.Set_CheckCrc(pCharInfo->nHP + fAddedHP);
m_fPreMaxHP = pCharInfo->nHP + fAddedHP;
m_fPreMaxAP = pCharInfo->nAP + fAddedAP;
}
*Now this is as a option on game room so here is the define:
Default/StageSettingFrame.xml:Code:#define STAGESETTING_CLASSIC_MAX 2
#define STAGESETTING_CLASSIC_DEFAULT 0
static struct _STAGESETTING_CLASSIC
{
bool Value;
char szText[32];
}
StageSetting_StageCLASSIC[STAGESETTING_CLASSIC_MAX] =
{
{true, "ON"}, {false, "OFF"}
};
Stable\CSCommon\Source\MMatchStageSetting.cpp(48): m_StageSetting.Ref().bClassic = MMATCH_DEFAULT_STAGESETTING_CLASSIC;
Stable\CSCommon\Include\MMatchStageSetting.h(73): bool bClassic;
Stable\CSCommon\Include\MMatchStageSetting.h(186): bool GetClassic() { return m_StageSetting.Ref().bClassic; }
Stable\Gunz\ZStageSetting.cpp(388): BUILD_STAGESETTING_ITEM("classic", pOutNode->bClassic,StageSetting_StageCLASSIC, STAGESETTING_CLASSIC_MAX);
Stable\Gunz\ZStageSetting.cpp(521): SHOWSTAGESETTING_ITEM("classic", pStageSetting->bClassic,STAGESETTING_CLASSIC_MAX, StageSetting_StageCLASSIC);
Stable\Gunz\ZStageSetting.cpp(658): strcpy( StageSetting_StageSUICIDE[0].szText, ZMsg(MSG_WORD_ON));
strcpy( StageSetting_StageSUICIDE[1].szText, ZMsg(MSG_WORD_OFF));
INITSTAGESETTING_ITEM("classic", pStageSetting->bClassic,STAGESETTING_CLASSIC_MAX, StageSetting_StageCLASSIC, STAGESETTING_CLASSIC_DEFAULT);
Simple Photo:PHP Code:<BOUNDS>
<X>20</X>
<Y>264</Y>
<W>150</W>
<H>24</H>
</BOUNDS>
<TEXT>Classic Mode</TEXT>
</LABEL>
<COMBOBOX item="classic" parent="StageSettingFrame">
<LISTBOXLOOK>CustomListBoxLook</LISTBOXLOOK>
<BUTTONLOOK>ListBoxButtonLook</BUTTONLOOK>
<TEXTALIGN>
<HALIGN>left</HALIGN>
<VALIGN>left</VALIGN>
</TEXTALIGN>
<ITEMHEIGHT>18</ITEMHEIGHT>
<BOUNDS>
<X>137</X>
<Y>264</Y>
<W>150</W>
<H>24</H>
</BOUNDS>
<DROPSIZE>210</DROPSIZE>
<COMBOTYPE>1</COMBOTYPE>
<COMBOFIRSTSIZE>51</COMBOFIRSTSIZE>
<ENABLE>true</ENABLE>
</COMBOBOX>
http://img341.imageshack.us/img341/5194/classicv.jpg
I hope I didn't forgot something, if you got errors, post them.
The Reason I made it as option and not new game mode, because if you want to play as team/berserker and shit like that so you can play with all the modes :).

