Important information: this site is currently scheduled to go offline indefinitely by end of the year.

Metal Gear Solid 5 Ground Zeroes/Phantom Pain g0s archive

The Original Forum. Game archives, full of resources. How to open them? Get help here.
Wormheart
ultra-n00b
Posts: 8
Joined: Tue Oct 06, 2015 9:28 pm
Has thanked: 1 time

Re: Metal Gear Solid 5 Ground Zeroes/Phantom Pain g0s archiv

Post by Wormheart »

caplagrobin wrote:
Wormheart wrote:Off the beaten path, but has anyone found out where Quiet's boss model is?
Assets\tpp\pack\mission2\common\mis_com_quiet.fpk works for me
Thanx!
That means any model swap for Assets\tpp\pack\mission2\common\mis_com_quiet.fpk will appear in Mission 11, right?
Gonna try it out.
caplagrobin
ultra-n00b
Posts: 9
Joined: Thu Oct 06, 2016 7:17 pm
Has thanked: 4 times
Been thanked: 1 time

Re: Metal Gear Solid 5 Ground Zeroes/Phantom Pain g0s archiv

Post by caplagrobin »

Wormheart wrote:
caplagrobin wrote:
Wormheart wrote:Off the beaten path, but has anyone found out where Quiet's boss model is?
Assets\tpp\pack\mission2\common\mis_com_quiet.fpk works for me
Thanx!
That means any model swap for Assets\tpp\pack\mission2\common\mis_com_quiet.fpk will appear in Mission 11, right?
Gonna try it out.
Not in the Helispace/Mother Base cutscenes after Mission 11.
User avatar
Jonathan Ingram
n00b
Posts: 11
Joined: Sun Jun 21, 2015 11:20 pm
Been thanked: 2 times

Re: Metal Gear Solid 5 Ground Zeroes/Phantom Pain g0s archiv

Post by Jonathan Ingram »

BobDoleOwndU wrote:There appears to be two separate types of data chunks stored in .fsm files. DEMO chunks and SND chunks. I think the DEMO chunks are the animation data and SND chunks appear to be Wwise Vorbis audio files cut into chunks. I haven't tried patching the SND chunks back together to see if they make a complete audio file yet.
You should be able to make a complete stream out of the sound chunks. I wish I remember who wrote it, but I found a tool for extracting the wwise streams and its source on Reddit a while back. https://dl.dropboxusercontent.com/u/884 ... xtract.zip
Wormheart
ultra-n00b
Posts: 8
Joined: Tue Oct 06, 2015 9:28 pm
Has thanked: 1 time

Re: Metal Gear Solid 5 Ground Zeroes/Phantom Pain g0s archiv

Post by Wormheart »

All these tutorials on how to swap Snake, but very little in the way of swapping other characters (I know, multiple versions for this quest and that make it more difficult).

Mewants to swapz which keep the new model on Quiets Motherbase versions (mtbs cutscenes, medbay) AND her boss model. So far only been successful with her basic buddy model, but she turns back to original model once off the helicopter at motherbase (so she's scripted to switch to another model after going invisible at the helipad).

So far found these on Quiet (as in the fpk/fpkd/ptfxs set).

Chunk0/Assets/tpp/pack/mission2/common>mis_com_quiet (where is this one used?)
Chunk1/Assets/tpp/pack/buddy/quiet (yuge bundle of buddy versions. I guess it does what is says on the can)
Chunk1/Assets/tpp/pack/mission2/quest/battle/bossQuiet (this must be her mission11 model, QARTools crashes when repacking with swaps on this one)
Chunk3/Assets/tpp/pack/mission2/free/f30050>f30050_mbQuiet (motherbase version? Is this the model used in her Motherbase roaming, medbay cell and motherbase cutscenes-rain, shower, stinky Snake?)

Shamelessly asking for it.
unknown123
advanced
Posts: 75
Joined: Sat Apr 09, 2016 5:36 pm
Has thanked: 4 times
Been thanked: 13 times

Re: Metal Gear Solid 5 Ground Zeroes/Phantom Pain g0s archiv

Post by unknown123 »

Wormheart wrote:quiet models

Code: Select all

0/00/s10050_area_fpk\Assets\tpp\chara\qui\Scenes\qui5_main0_def.fmdl
chunk0/mis_com_quiet_fpk\Assets\tpp\chara\qui\Scenes\qui0_main0_def.fmdl
chunk0/s10010_d01_fpk\Assets\tpp\chara\qui\Scenes\qui1_main0_def.fmdl
chunk0/s10280_d01_fpk\Assets\tpp\chara\qui\Scenes\qui1_main0_def.fmdl
chunk1/buddy_quiet2_00_fpk\Assets\tpp\chara\qui\Scenes\qui0_main0_def.fmdl
chunk1/buddy_quiet2_01_fpk\Assets\tpp\chara\qui\Scenes\qui0_main0_bld.fmdl
chunk1/buddy_quiet2_02_fpk\Assets\tpp\chara\qui\Scenes\qui0_main0_slv.fmdl
chunk1/buddy_quiet2_03_fpk\Assets\tpp\chara\qui\Scenes\qui0_main0_gld.fmdl
chunk1/buddy_quiet2_04_fpk\Assets\tpp\chara\qui\Scenes\qui4_main0_def.fmdl
chunk1/buddy_quiet2_05_fpk\Assets\tpp\chara\qui\Scenes\qui5_main0_def.fmdl
chunk1/qest_bossQuiet_00_fpk\Assets\tpp\chara\qui\Scenes\qui0_main0_def.fmdl
chunk2/s10050_area_fpk\Assets\tpp\chara\qui\Scenes\qui5_main0_def.fmdl
chunk2/s10050_d01_fpk\Assets\tpp\chara\qui\Scenes\qui0_eqhd0_cov.fmdl
chunk2/s10050_d01_fpk\Assets\tpp\chara\qui\Scenes\qui0_eqpd0_def.fmdl
chunk2/s10050_d02_fpk\Assets\tpp\chara\qui\Scenes\qui0_main0_def.fmdl
chunk2/s10050_d02_fpk\Assets\tpp\chara\qui\Scenes\qui0_slng0_cov.fmdl
chunk2/s10151_d04_fpk\Assets\tpp\chara\qui\Scenes\qui0_main0_def.fmdl
chunk2/s10151_d06_fpk\Assets\tpp\chara\qui\Scenes\qui0_main0_def.fmdl
chunk2/s10260_d01_fpk\Assets\tpp\chara\qui\Scenes\qui3_main0_def.fmdl
chunk2/s10050_area_fpk\Assets\tpp\chara\qui\Scenes\qui5_main0_def.fmdl
chunk2/s10050_d01_fpk\Assets\tpp\chara\qui\Scenes\qui0_eqhd0_cov.fmdl
chunk2/s10050_d01_fpk\Assets\tpp\chara\qui\Scenes\qui0_eqpd0_def.fmdl
chunk2/s10050_d02_fpk\Assets\tpp\chara\qui\Scenes\qui0_main0_def.fmdl
chunk2/s10050_d02_fpk\Assets\tpp\chara\qui\Scenes\qui0_slng0_cov.fmdl
chunk2/s10151_d04_fpk\Assets\tpp\chara\qui\Scenes\qui0_main0_def.fmdl
chunk2/s10151_d06_fpk\Assets\tpp\chara\qui\Scenes\qui0_main0_def.fmdl
chunk2/s10260_d01_fpk\Assets\tpp\chara\qui\Scenes\qui3_main0_def.fmdl
chunk3/f30050_d021_fpk\Assets\tpp\chara\qui\Scenes\qui0_main0_def.fmdl
chunk3/f30050_d022_fpk\Assets\tpp\chara\qui\Scenes\qui2_main0_def.fmdl
chunk3/f30050_d031_fpk\Assets\tpp\chara\qui\Scenes\qui0_main0_def.fmdl
chunk3/f30050_d040_fpk\Assets\tpp\chara\qui\Scenes\qui0_main0_def.fmdl
chunk3/f30050_d050_fpk\Assets\tpp\chara\qui\Scenes\qui0_main0_def.fmdl
chunk3/f30050_d080_fpk\Assets\tpp\chara\qui\Scenes\qui0_main0_def.fmdl
chunk3/f30050_d090_fpk\Assets\tpp\chara\qui\Scenes\qui0_hood0_cov.fmdl
chunk3/f30050_d090_fpk\Assets\tpp\chara\qui\Scenes\qui0_hood1_cov.fmdl
chunk3/f30050_d090_fpk\Assets\tpp\chara\qui\Scenes\qui0_main0_def.fmdl
chunk3/f30050_d090_fpk\Assets\tpp\chara\qui\Scenes\qui0_rope0_cov.fmdl
chunk3/f30050_d100_fpk\Assets\tpp\chara\qui\Scenes\qui0_eqit0_def.fmdl
chunk3/f30050_d100_fpk\Assets\tpp\chara\qui\Scenes\qui0_eqit1_def.fmdl
chunk3/f30050_d100_fpk\Assets\tpp\chara\qui\Scenes\qui0_main1_def.fmdl
chunk3/f30050_d1000_fpk\Assets\tpp\chara\qui\Scenes\qui0_main0_def.fmdl
chunk3/f30050_d101_fpk\Assets\tpp\chara\qui\Scenes\qui0_main0_def.fmdl
chunk3/f30050_mbQuiet_fpk\Assets\tpp\chara\qui\Scenes\qui2_main0_def.fmdl
CantStoptheBipBop
advanced
Posts: 53
Joined: Sat Aug 27, 2016 9:43 am
Has thanked: 7 times
Been thanked: 7 times

Re: Metal Gear Solid 5 Ground Zeroes/Phantom Pain g0s archiv

Post by CantStoptheBipBop »

nasanhak wrote:Has anyone figured out what all the params in ReloadDamageParameter in DamageParameterTables.lua are for.

The 3rd and 2nd last are Lethal and Non-Lethal damage.
Nah, last one is impact force though. My guess is the lethal and NL dmg varies across the weapons in-game based on the receiver. So those are probably base damages. As for the rest of the settings I put together a spreadsheet with what patterns I could find a while back if you haven't seen it already. You can click on the one of the cells below the parameter row if you want more info on a p value.

@Tex
thanks man, exactly why I was looking for. I wasn't expecting the messages the be able to reference functions that hadn't been created in the file yet. That clears up a lot of things. Also apparently putting in random strings for the messages doesn't negatively affect the game in any way, so that opens the door for brute-forcing strings or just mass-testing known ones, albeit the pita way. No dice trying to get player illumination from that, but I'm assuming that's because the ATK has to actually damage the player to trigger the message. As for the items that function just kept returning 17 (TppEquip.EQP_TYPE_Item ?) but I found the next best thing with a combination of onHudClosed and part of a line from TppDebug.lua.

Code: Select all

function e.Messages()
	return Tpp.StrCode32Table{
		Player={
    		{msg="OnEquipHudClosed",func=e.OnEquipHudClosed()}
		}
	}
end

function e.OnEquipHudClosed()
	for o=0,8 do
		TppUiCommand.AnnounceLogView(string.format("Slot:%d : vars.items = %04d, vars.initItems = %04d, gvars.ply_lastItemsUsingTemp = %04d",o,vars.items[o],vars.initItems[o],gvars.ply_lastItemsUsingTemp[o]))
	end
end
I guess vars.items is the table I'd want. After specifying a slot index with it, it returns a 4 digit itemId. I also came across Player.IsVarsCurrentItemCBox() which returns a boolean. Not that useful in itself but I can probably remove some lines from Update() function calls since messages and existing KJP functions essentially auto-handle them. Still haven't found a way to check if a drug/stealth camo/ability is active though. The closest thing would be

Code: Select all

function e.checkItem(guardPhase)
	if not guardPhase or guardPhase==_.PHASE_ALERT then return 0 end
	local n=e.index.points.item
	if (bit.band(vars.playerPlayFlag,PlayerPlayFlag.USE_STEALTH)==PlayerPlayFlag.USE_STEALTH) or (bit.band(vars.playerPlayFlag,PlayerPlayFlag.USE_INSTANT_STEALTH)==PlayerPlayFlag.USE_INSTANT_STEALTH) then
		return n.stealthCamo
	end
	if (bit.band(vars.playerPlayFlag,PlayerPlayFlag.USE_PARASITE_CAMO)==PlayerPlayFlag.USE_PARASITE_CAMO) then
		return n.parasiteCamo
	end
	return 0
end
But that's a one-time thing since it's essentially just for checking if a player disqualified themselves from an S rank or No Traces bonus. I mean you could reset it to 0 or whatever the default value is I guess but creative resets and variable tracking to avoid interfering with gameplay aside I don't think it would be too useful since it would border on being convoluted for a workaround. Then again I haven't checked vars.playerPlayFlag on its own so I might try that later.
unknown123
advanced
Posts: 75
Joined: Sat Apr 09, 2016 5:36 pm
Has thanked: 4 times
Been thanked: 13 times

Re: Metal Gear Solid 5 Ground Zeroes/Phantom Pain g0s archiv

Post by unknown123 »

CantStoptheBipBop wrote:so that opens the door for brute-forcing strings or just mass-testing known ones
https://github.com/unknown321/mgsvdump/ ... /sequences
I had these parsed like months ago, but occasionaly removed them with cleanup script. These are tpp only, I never bothered with mgo.
messages = msg
commands = commands used with SendCommand function
BobDoleOwndU
advanced
Posts: 68
Joined: Thu Dec 24, 2015 7:45 am
Has thanked: 10 times
Been thanked: 10 times

Re: Metal Gear Solid 5 Ground Zeroes/Phantom Pain g0s archiv

Post by BobDoleOwndU »

Jonathan Ingram wrote:You should be able to make a complete stream out of the sound chunks. I wish I remember who wrote it, but I found a tool for extracting the wwise streams and its source on Reddit a while back. https://dl.dropboxusercontent.com/u/884 ... xtract.zip
Cool! I didn't even know anyone had already written a tool with this functionality.
CantStoptheBipBop
advanced
Posts: 53
Joined: Sat Aug 27, 2016 9:43 am
Has thanked: 7 times
Been thanked: 7 times

Re: Metal Gear Solid 5 Ground Zeroes/Phantom Pain g0s archiv

Post by CantStoptheBipBop »

unknown123 wrote:
CantStoptheBipBop wrote:so that opens the door for brute-forcing strings or just mass-testing known ones
https://github.com/unknown321/mgsvdump/ ... /sequences
I had these parsed like months ago, but occasionaly removed them with cleanup script. These are tpp only, I never bothered with mgo.
messages = msg
commands = commands used with SendCommand function
Awesome, thanks dude. I tested out all of the messages under both Player and GameObject and took some notes. Most of these are obvious but I figured I may as well include them.

Code: Select all

msg={
	Player={
		CBoxSlideEnd={freq='once', info='after cbox slide end'},
		CalcFultonPercent={freq='continuous', info='on player next to fultonable object'},
		CallMenuMessage_HideCallMenu={freq='once', info='on call menu close'},
		CallMenuMessage_ShowCallMenu={freq='once', info='on call menu open'},
		EnableCQC={freq='once', info='on CQC icon popup'},
		FinishOpeningDemoOnHeli={freq='once', info='on control given back to player after init heli door open'},
		IconCrawlStealthShown={freq='once', info='on prone stealth icon popup'},
		IconFultonShown={freq='once', info='on fulton icon popup'},
		IconMBCBoxShown={freq='once', info='on player next to supply drop box'},
		IconTBoxOnShown={freq='once', info='on trash box icon popup'},
		IconToiletOnShown={freq='once', info='on toilet icon popup'},
		LandingFromHeli={freq='once', info='on player exit heli'},
		OnAmmoLessInMagazine={freq='once', info='on trigger pull on empty mag'},
		OnBehind={freq='once', info='on player start press against cover'},
		OnBinocularsMode={freq='varies', info='fires once while using binos or continuous while in first-person vehicle primary turret'},
		OnComeOutSupplyCbox={freq='once', info='on finish supply box'},
		OnCrawl={freq='once', info='on entering prone stance'},
		OnElude={freq='once', info='on hang ledge'},
		OnEquipHudClosed={freq='once', info='on closing equipment slot ui'},
		OnEquipItem={freq='once', info='on active item change'},
		OnEquipWeapon={freq='once', info='on weapon/support slot change'},
		OnPickUpCollection={freq='once', info='on player picked plant, small container, etc.'},
		OnPickUpSupplyCbox={freq='once', info='on start supply box'},
		OnPlayerElude={freq='once', info='on player hang ledge'},
		OnPlayerGatling={freq='once', info='on player enter stationary AA gun'},--didn't test
		OnPlayerHeliHatchOpen={freq='once', info='on control given back to player after init heli door open'},
		OnPlayerMachineGun={freq='once', info='on player enter stationary MG'},--does not include vehicle MG
		OnPlayerMortar={freq='once', info='on player enter statonary mortar'},
		OnPlayerSearchlight={freq='once', info='on player use searchlight'},
		OnPlayerToilet={freq='once', info='player in toilet'},
		OnVehicleDrive={freq='once', info='fires after getting in vehicles'},
		OnVehicleRide_Start={freq='once', info='on player in/out vehicle or pilotable object'},
		PlayerDamaged={freq='once', args={'playerIndex','attackId','attackerId'}, info='on player damage'},
		PlayerHeliGetOff={freq='once', info='on player exit heli'},
		PlayerHoldWeapon={freq='once', info='on player weapon aim'},
		PressedCarryIcon={freq='once', info='player start/stop carry or left ene veh'},
		PutMarkerWithBinocle={freq='once', info='manual marker placement with binos'},
		SetMarkerBySearch={freq='once', info='marker autoplacement via binos or zoom'},
		StartPlayerBrainFilter={freq='once', info='on heavy damage that obscures vision with blood'},
		SuppressorIsBroken={freq='once', info='on suprressor break'},
		WarpEnd={freq='once', info='on control given back to player after init heli door open'}    
	},

	Object={
		BreakGimmick={freq='once', info='stationary enemy equip destroy (weapons, guard tower}'},
		ChangePhase={freq='varies', args={'gameObjectId','newPhase','oldPhase'}, info='once on phase change or multiple if patrol truck passes from alert base to another'},
		CommandPostAnnihilated={freq='once', info='on base or guard post capture'},--use with TppEnemy.IsBaseCp(arg0) & TppEnemy.IsOuterBaseCp(arg0)
		Concious={freq='once', info='transition from unconcious -> concious'},
		ConversationEnd={freq='once', info='conversation stopped naturally or interrupted by player or prevented from starting'},
		Damage={freq='once', args={'gameId','attackId','attackerId'}, info='AI recieved damage'},--apparently needs to be something that can "report" damage to engine, not empty vehicle or random object
		Down={freq='once', info='AI knocked to ground (bleed out, CQC, etc)'},
		EndInvestigate={freq='once', info='on AI player search end'},
		Fulton={freq='once', info='on object fultoned'},
		HeadShot={freq='once', info='on neutralize with headshot'},
		HeadShotDistance={freq='once', info='on neutralize with headshot'},
		Holdup={freq='once', info='player heldup AI'},
		InAnimalLocator={freq='once', info='entered spawn area of animal pack/herd'},
		Interrogate={freq='once', info='on player interrogate soldier'},
		InterrogateEnd={freq='once', info='interrogation failure'},
		InterrogateSetMarker={freq='once', info='interrogation success, enemy gave asset position'},
		InterrogateUpHero={freq='once', info='interrogation earned heroism'},
		MapUpdate={freq='once', info='on map update announce'},
		Neutralize={freq='once', info='on dead, unconcious, destroyed, or held up'},
		PlayerHideHorse={freq='once', info='on player start horse hide'},
		RadioEnd={freq='once', info='on AI radio end'},
		Restraint={freq='once', info='object is being restrained (player CQC hold)'},
		RouteEventFaild={freq='once', info='apparently error feedback if AI route fails'},
		SpecialActionEnd={freq='once', info='triggers every few seconds in ACC'},
		TapCqc={freq='once', info='on neutralize with CQC in valid way for tactical action point.'},
		TapHoldup={freq='once', info='holdup qualifies for mission tactical action point bonus'},
		TapRocketArm={freq='once', info='on neutralize with rocket arm in valid way for tactical action point'},
		Unconcious={freq='once', info='AI knocked unconcious'},
		VehicleAction={freq='once', info='on misc AI actions with vehicle including in/out'},
		VehicleBroken={freq='once', info='vehicle engine fire start (blowup countdown) and after second explosion'}
	}
}
Messages like OnPlayerMortar only fire once but I guess player status and the message IconFultonShown could be monitored easily enough to check if the player left a stationary weapon. SpecialActionEnd is a weird one. It just kind of triggers every few seconds if you're in the ACC. I'm not sure exactly what triggers RouteEventFaild but that might be a useful debug message for anyone toying with AI routes.

I got around to messing with vars.playerPlayFlag. It only updates on mission completion or new flag activation. Meaning you can reset it to 256 or 0 to keep track of when stealth camo is used again but the flag doesn't update while the item is active, only at the start of each use.

Code: Select all

playerPlayFlag={--stays constant until mission complete or until overruled by higher flag
	[0]='no disqualifications',
	[256]='spent ammo/resupply/support fire/dmg to enemy (disqualified from no traces bonus)',--FAILED_NO_TRACE_PLAY
	[264]='used consumable prototype stealth camo during mission',--USE_INSTANT_STEALTH
	[288]='used parasite stealth camo during mission',--USE_PARASITE_CAMO
	[296]='used both consumable prototype stealth camo and parasite stealth camo during mission'--?
}
--[[
USE_CHICK_CAP
USE_CHICKEN_CAP
USE_STEALTH
USE_FULTON_MISSILE
USE_MUGEN_BANDANA
USE_HIGHGRADE_EQUIP
]]
Things that apparently don't negate the No Traces bonus based on that: killing/CQCing animals and driving into exploding barrels.

edit: here's how I ended up checking cbox and stealth camo items in case anyone was curious:

Code: Select all

function e.isCboxCamo(cbox)
	local t={TppEquip.EQP_IT_CBox_WR,TppEquip.EQP_IT_CBox_SMK}
	for i=1,#t do
		if cbox==t[i] then
			return false
		end
	end
	return true
end

function e.cboxCamoType(cbox)
	local boxType={
		desert={TppEquip.EQP_IT_CBox_DSR,TppEquip.EQP_IT_CBox_DSR_G01,TppEquip.EQP_IT_CBox_DSR_G02},
		green={TppEquip.EQP_IT_CBox_FRST,TppEquip.EQP_IT_CBox_FRST_G01},
		red={TppEquip.EQP_IT_CBox_BOLE,TppEquip.EQP_IT_CBox_BOLE_G01},
		urban={TppEquip.EQP_IT_CBox_CITY,TppEquip.EQP_IT_CBox_CITY_G01},
		mix={TppEquip.EQP_IT_CBox_CLB_A,TppEquip.EQP_IT_CBox_CLB_A_G01},
		rock={TppEquip.EQP_IT_CBox_CLB_B,TppEquip.EQP_IT_CBox_CLB_B_G01},
		wet={TppEquip.EQP_IT_CBox_CLB_C,TppEquip.EQP_IT_CBox_CLB_C_G01}
	}

	local s={'desert','green','red','urban','mix','rock','wet'}

	for i=1,#s do
		for _,v in ipairs(boxType[s[i]]) do
			if cbox==v then
				return s[i]
			end
		end
	end
	return false
end

function e.isStealthItem(item)
	local t={TppEquip.EQP_IT_InstantStealth,TppEquip.EQP_IT_Stealth,TppEquip.EQP_IT_ParasiteCamouf}

	for i=1,#t do
		if item==t[i] then
			return true
		end
	end
	return false
end

function e.stealthItemType(item)
	local t={
		limited=TppEquip.EQP_IT_InstantStealth,
		battery=TppEquip.EQP_IT_Stealth,
		parasite=TppEquip.EQP_IT_ParasiteCamouf
	}

	for k,v in pairs(t) do
		if item==v then
			return k
		end
	end
	return false
end

function e.Messages()
	return Tpp.StrCode32Table{
	    Player={
			{msg='PlayerDamaged',func=e.OnPlayerDamaged},
			{msg='OnEquipItem',func=e.OnEquipItem}
		}
  	}
end

function e.Init(missionTable)
  e.messageExecTable=Tpp.MakeMessageExecTable(e.Messages())
end

function e.OnReload(missionTable)
  e.messageExecTable=Tpp.MakeMessageExecTable(e.Messages())
end

function e.OnMessage(sender,messageId,arg0,arg1,arg2,arg3,strLogText)
  Tpp.DoMessage(e.messageExecTable,TppMission.CheckMessageOption,sender,messageId,arg0,arg1,arg2,arg3,strLogText)
end

function e.OnPlayerDamaged()
	e.var.stealthCamo=false
	e.var.keepTime.parasiteStealth=false
end

function e.OnEquipItem()
	local itemIndex=vars.items[vars.currentItemIndex]
	
	if e.var.stealthCamo~='parasite' then
		e.var.stealthCamo=false
	elseif e.isStealthItem(itemIndex) then
		e.var.keepTime.parasiteStealth=false
	end

	if Player.IsVarsCurrentItemCBox() then
		e.var.ride='cbox'
		if e.isCboxCamo(itemIndex) then
			e.var.cboxCamo=e.cboxCamoType(itemIndex)
			return
		end
		e.var.cboxCamo=false
		return
	elseif e.var.ride=='cbox' then
		e.var.ride='none'
	end
	e.var.cboxCamo=false

	if e.isStealthItem(itemIndex) then
		e.var.stealthCamo=e.stealthItemType(itemIndex)
		if e.var.stealthCamo=='parasite' then
			e.var.keepTime.parasiteStealth=(Time.GetRawElapsedTimeSinceStartUp()+30)--need to get actual time based on suit grade
		end
		return
	end
end

function e.checkStealthItem(guardPhase)
	if not guardPhase or not e.var.stealthCamo then return 0 end
	if guardPhase==_.PHASE_ALERT then
		e.var.keepTime.parasiteStealth=false
		e.var.stealthCamo=false
		return 0
	end
	local n=e.index.points.item
	if e.var.stealthCamo~='parasite' then
		return n.stealthCamo
	else
		if e.var.keepTime.parasiteStealth then
			if e.buttonHold<e.var.keepTime.parasiteStealth then
				return n.parasiteCamo
			end
		end
	end
	return 0
end
BobDoleOwndU
advanced
Posts: 68
Joined: Thu Dec 24, 2015 7:45 am
Has thanked: 10 times
Been thanked: 10 times

Re: Metal Gear Solid 5 Ground Zeroes/Phantom Pain g0s archiv

Post by BobDoleOwndU »

So I discovered it's possible to get TPP to load new .dat files.

In chunk0, there's a file named foxfs.dat (Fox File System), which is just an .xml with its extension changed. When TPP loads, it uses a hardcoded reference to look for chunk0, but it only uses this reference to load foxfs.dat, and ignores the rest of the files from chunk0.

Inside foxfs.dat it contains a section for loading the chunk.dat files; this is when it loads the other files from chunk0 (and the rest of the chunk.dat files as well). From my testing, it seems that it loads the chunk.dat files in the order they are listed there, but it actually seems to load the texture.dat files in alphabetic order. You can create a .dat with priority over the original files by placing it in the list before the original files (or with a name that comes first alphabetically in the case of texture.dats). From my testing, it doesn't seem possible for .dats created with this method to gain priority over 0/00.dat and 0/01.dat. Hardcoded references are in the .exe for both of these files, and I think their priority is hardcoded as well.

If we could gain priority over 0/00.dat and 0/01.dat, it would allow us to easily add dedicated modding .dat files, and it would also allow SnakeBite to directly install loose .ftex(s) files as mods. It would also mean SnakeBite wouldn't need to shove all of 00.dat's files into 01.dat. There are other ways to work around this, but gaining priority over those files would be the most convenient.
caplagrobin
ultra-n00b
Posts: 9
Joined: Thu Oct 06, 2016 7:17 pm
Has thanked: 4 times
Been thanked: 1 time

Re: Metal Gear Solid 5 Ground Zeroes/Phantom Pain g0s archiv

Post by caplagrobin »

BobDoleOwndU wrote:So I discovered it's possible to get TPP to load new .dat files.
!
But that's only TPP, right? Won't work on MGO .dats or .G0s?
BobDoleOwndU
advanced
Posts: 68
Joined: Thu Dec 24, 2015 7:45 am
Has thanked: 10 times
Been thanked: 10 times

Re: Metal Gear Solid 5 Ground Zeroes/Phantom Pain g0s archiv

Post by BobDoleOwndU »

caplagrobin wrote:!
But that's only TPP, right? Won't work on MGO .dats or .G0s?
MGO also has the foxfs.dat, so it should be possible for MGO. Taking a quick look at GZ, it doesn't have one, so I don't think it'll work there.
nasanhak
advanced
Posts: 71
Joined: Sat Nov 28, 2015 6:01 am
Has thanked: 10 times
Been thanked: 4 times

Re: Metal Gear Solid 5 Ground Zeroes/Phantom Pain g0s archiv

Post by nasanhak »

Sometime ago I saw an image file detailing how the inputs to Player.SetAroundCameraManualModeParams work. It showed how the camera position offsets resulted in actual in-game camera position. Can't seem to find this image again.

If anybody knows what I am talking about and has the images or the link to them, then please do share!

Would save me a tonne of work :)
unknown123
advanced
Posts: 75
Joined: Sat Apr 09, 2016 5:36 pm
Has thanked: 4 times
Been thanked: 13 times

Re: Metal Gear Solid 5 Ground Zeroes/Phantom Pain g0s archiv

Post by unknown123 »

nasanhak wrote:Sometime ago I saw an image file detailing how the inputs to Player.SetAroundCameraManualModeParams work. It showed how the camera position offsets resulted in actual in-game camera position. Can't seem to find this image again.
Wasn't it made by Tex? I think he uses that in IH.
nasanhak
advanced
Posts: 71
Joined: Sat Nov 28, 2015 6:01 am
Has thanked: 10 times
Been thanked: 4 times

Re: Metal Gear Solid 5 Ground Zeroes/Phantom Pain g0s archiv

Post by nasanhak »

unknown123 wrote:
nasanhak wrote:Sometime ago I saw an image file detailing how the inputs to Player.SetAroundCameraManualModeParams work. It showed how the camera position offsets resulted in actual in-game camera position. Can't seem to find this image again.
Wasn't it made by Tex? I think he uses that in IH.
Yeah I had thought so too but can't find those images. I may as well start with the leg work till I find it.
Post Reply