Page 93 of 109

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

Posted: Fri Oct 14, 2016 10:12 pm
by nasanhak
CantStoptheBipBop wrote:nasanhak wrote:
@Tex
Dear God I feel exactly like I did looking at the game's code 9 months ago.

It's a well known fact that he's actually Hideo Kojima. It's the only explanation that fits.
This made me laugh. Although I doubt if Kojima works on any code.
Tex wrote:Part of that is my overengineering again.
The original goals for that were:
'easily' add update functions without having to add them to TppMain.SetUpdateFunction
Filter execution for performance since updates are per frame.
The updateRate stuff was built for the enemy phase change feature, but now I think that using repeating timer messages might be better.
Putting the update state info in the Ivars was a so-so idea, it broke down a bit as some updates are either not really associated with any option, or actually associated with multiple options.
TBH your approach is pretty much the only way to go about it since the game won't support any UI modding. If anybody wants to build a menu that's pretty much the only way they'll achieve it.

If you are gonna use timer messages then remember that demos seem to disable all timers.

Now for some sharing:
I had been tinkering with route randomization and may have figured it out. It's not really by any engine call but rather intercepting the engine calls and randomizing the about to be selected routes.
https://youtu.be/z4YFRaQkS3A

The same mission played twice at the same time of day with different results (apologies for the shitty quality). What the randomization does is simple shift entries around in the table to be returned. Not really a big deal. BUT it kinda looks cool. The video clearly shows issues with LRRP route selection which has been addressed in the code below.

Pros:
1. Doing a mission at the same time over and over will no longer be a sniper here, armor there kind of run
2. Triggering a caution alert sends the base into a sort of chaotic frenzy. Normally, each soldier will be assigned a caution route closest to their position but with randomization, this isn't the case. Soldiers will run about till they get to their route positions. Things quiet down after but it looks cool nonetheless.

Cons:
1.a. LRRPs have issues that may not be possible to sort out. While testing, LRRP foot patrols work gloriously but vehicles do not. So it turns out, for each outpost LRRPs have an in route("_lin_") and an out route("_lout_") as well as a "hold" route("_l_") in between for that outpost. When they travel out of the outpost, the engine fires the route selector and if a new random route is picked, different than where they are supposed to be going originally, well - all hell breaks loose if the LRRP is driving a vehicle. They'll suddenly gain a craving for off-roading. So LRRPs are a no go.
1.b. In the case of LRRPs, the very first route assigned seems to be fixed and is actually a good thing but adding it here anyways since further randomization is not really feasible.
2. Game(Fox Engine?) has no path finding unless in combat alert. This sucks as soldiers follow a fixed path when a caution alert is triggered to get to new far away route.
3. Over use of the phantom cigar may sometimes lead to soldiers in close proximity leaving wide gaps to sneak in.
4. Needs extensive testing for each mission obviously.

Replace following two functions in TppEnemy. ShuffleRoutes func is mine.

Code: Select all

function this.RouteSelector(cpId,routeTypeStrCode32,sysPhaseOrSoldierGroupOrLrrpTravelOrDefault)
--sysPhaseOrSoldierGroupOrLrrpTravelOrDefault - check mvars.ene_routeSets for clarity on absurd naming
  local routeSetsForCpId=mvars.ene_routeSets[cpId]
  if routeSetsForCpId==nil then
    return{"dummyRoute"}
  end
  if sysPhaseOrSoldierGroupOrLrrpTravelOrDefault==StrCode32"immediately"then
    if routeTypeStrCode32==StrCode32"old"then
      local routeTypeToSelect=this.GetCurrentRouteSetType(nil,this.GetPhaseByCPID(cpId),cpId)
      return this.GetPrioritizedRouteTable(cpId,mvars.ene_routeSetsTemporary[cpId][routeTypeToSelect],mvars.ene_routeSetsPriorityTemporary)
    else
      local routeTypeToSelect=this.GetCurrentRouteSetType(nil,this.GetPhaseByCPID(cpId),cpId)
      return this.GetPrioritizedRouteTable(cpId,routeSetsForCpId[routeTypeToSelect],mvars.ene_routeSetsPriority)
    end
  end
  if sysPhaseOrSoldierGroupOrLrrpTravelOrDefault==StrCode32"SYS_Sneak"then
    local routeTypeToSelect=this.GetCurrentRouteSetType(nil,this.PHASE.SNEAK,cpId)
    return this.GetPrioritizedRouteTable(cpId,routeSetsForCpId[routeTypeToSelect],mvars.ene_routeSetsPriority,sysPhaseOrSoldierGroupOrLrrpTravelOrDefault)
  end
  if sysPhaseOrSoldierGroupOrLrrpTravelOrDefault==StrCode32"SYS_Caution"then
    local routeTypeToSelect=this.GetCurrentRouteSetType(nil,this.PHASE.CAUTION,cpId)
    return this.GetPrioritizedRouteTable(cpId,routeSetsForCpId[routeTypeToSelect],mvars.ene_routeSetsPriority,sysPhaseOrSoldierGroupOrLrrpTravelOrDefault)
  end
  local routeTypeToSelect=this.GetCurrentRouteSetType(routeTypeStrCode32,this.GetPhaseByCPID(cpId),cpId)
  local routesToUse=routeSetsForCpId[routeTypeToSelect][sysPhaseOrSoldierGroupOrLrrpTravelOrDefault]
  if routesToUse then
--  	TppPlayer.DebugPrint(
--	  "_______________________EarlyReturn_______________________"
--	  .."\ncpId: "..tostring(cpId)
--	  .."\nrouteTypeToSelect: "..tostring(routeTypeToSelect)
--	  .."\nsysPhaseOrSoldierGroupOrLrrpTravelOrDefault: "..tostring(sysPhaseOrSoldierGroupOrLrrpTravelOrDefault)
--  	,1)
  	
  	local tableSize=0
  	for k,v in pairs(routeSetsForCpId[routeTypeToSelect]) do
  		tableSize=tableSize+1
  	end
  	
--  	TppPlayer.DebugPrint(
--  	"routeSetsForCpId["..tostring(routeTypeToSelect).."]: "..tostring(InfInspect.Inspect(routeSetsForCpId[routeTypeToSelect]))
--  	.."\nrouteSetsForCpId["..tostring(routeTypeToSelect).."]Size: "..tostring(tableSize)
--  	,1)
--	  TppPlayer.DebugPrint(
--	  "-------------------BeforeShuffle-------------------"
--	  .."\nroutesToUse: "..tostring(InfInspect.Inspect(routesToUse))
--	  .."\nroutesToUseSize: "..tostring(InfInspect.Inspect(#routesToUse))
--	  ,1)
	  
	  --Nope sadly, even with the conditions, while you can "fix" LRRP routes while *at* an outpost, the moment they leave new routes are selected using this same function. So, simply exclude LRRP from this over randomization
  	if tableSize>1 and routeTypeToSelect~="travel" and not string.find(routesToUse[1], '_l_') and not string.find(routesToUse[1], '_lin_') and not string.find(routesToUse[1], '_lout_') then
  		TppPlayer.DebugPrint("Setting new route!",1)
  		local indexOfRouteToSelect = math.random(tableSize)
  		local i=0
  		local nameOfNewRouteToSelect=nil
  		for indexName, routes in pairs(routeSetsForCpId[routeTypeToSelect]) do
  			i=i+1
  			if (i==indexOfRouteToSelect) then
  				nameOfNewRouteToSelect=indexName
  				break
  			end
  		end
--  		TppPlayer.DebugPrint(
--  		"OLDsysPhaseOrSoldierGroupOrLrrpTravelOrDefault:"..tostring(sysPhaseOrSoldierGroupOrLrrpTravelOrDefault)
--  		.." nameOfNewRouteToSelect:"..tostring(nameOfNewRouteToSelect)
--  		,1)
  		routesToUse=routeSetsForCpId[routeTypeToSelect][nameOfNewRouteToSelect]
  		
  	end
  	
  	
	  routesToUse=this.ShuffleRoutes(routesToUse)
--	  TppPlayer.DebugPrint(
--	  "-------------------AfterSuffle-------------------"
--	  .."\nroutesToUse: "..tostring(InfInspect.Inspect(routesToUse))
--	  .."\nroutesToUseSize: "..tostring(InfInspect.Inspect(#routesToUse))
--	  ,1)
    return routesToUse
  else
    if routeTypeToSelect=="hold"then
      local routeTypeToSelect=this.GetCurrentRouteSetType(nil,this.GetPhaseByCPID(cpId),cpId)
      return this.GetPrioritizedRouteTable(cpId,routeSetsForCpId[routeTypeToSelect],mvars.ene_routeSetsPriority)
    else
      local routeTypeToSelect=this.GetCurrentRouteSetType(nil,this.GetPhaseByCPID(cpId),cpId)
      return this.GetPrioritizedRouteTable(cpId,routeSetsForCpId[routeTypeToSelect],mvars.ene_routeSetsPriority)
    end
  end
end

function this.GetPrioritizedRouteTable(cpId,selectedRoutesForCpId,routeSetsPriority,sysPhaseOrSoldierGroupOrLrrpTravelOrDefault)
--	TppPlayer.DebugPrint("_______________________TppEnemy.GetPrioritizedRouteTable BEG_______________________"
--	.."\ncpId: "..tostring(cpId)
--  .." sysPhase: "..tostring(sysPhaseOrSoldierGroupOrLrrpTravelOrDefault)
--  ,1)
  local routesToUse={}
  local priorityRouteSetsForCP=routeSetsPriority[cpId]
  if not IsTypeTable(priorityRouteSetsForCP)then
    return
  end
  if mvars.ene_funcRouteSetPriority then
    routesToUse=mvars.ene_funcRouteSetPriority(cpId,selectedRoutesForCpId,routeSetsPriority,sysPhaseOrSoldierGroupOrLrrpTravelOrDefault)
  else
    local t=0
    for a,e in ipairs(priorityRouteSetsForCP)do
      if selectedRoutesForCpId[e]then
        local e=#selectedRoutesForCpId[e]
        if e>t then
          t=e
        end
      end
    end
    local e=1
    for t=1,t do
      for r,a in ipairs(priorityRouteSetsForCP)do
        local n=selectedRoutesForCpId[a]
        if n then
          local n=n[t]
          if n and Tpp.IsTypeTable(n)then
            routesToUse[e]=n
            e=e+1
          end
        end
      end
    end
    for r=1,t do
      for a,t in ipairs(priorityRouteSetsForCP)do
        local n=selectedRoutesForCpId[t]
        if n then
          local n=n[r]
          if n and not Tpp.IsTypeTable(n)then
            routesToUse[e]=n
            e=e+1
          end
        end
      end
    end
  end
--  TppPlayer.DebugPrint(
--  "selectedRoutesForCpId: "..tostring(InfInspect.Inspect(selectedRoutesForCpId))
--  .."\nrouteSetsPriority["..tostring(cpId).."]: "..tostring(InfInspect.Inspect(routeSetsPriority[cpId]))
--  ,1)
  
--  TppPlayer.DebugPrint(
--  "-------------------BeforeShuffle-------------------"
--  .."\nroutesToUse: "..tostring(InfInspect.Inspect(routesToUse))
--  .."\nroutesToUseSize: "..tostring(InfInspect.Inspect(#routesToUse))
--  ,1)
  routesToUse=this.ShuffleRoutes(routesToUse)
--  TppPlayer.DebugPrint(
--  "-------------------AfterSuffle-------------------"
--  .."\nroutesToUse: "..tostring(InfInspect.Inspect(routesToUse))
--  .."\nroutesToUseSize: "..tostring(InfInspect.Inspect(#routesToUse))
--  ,1)
--  TppPlayer.DebugPrint("TppEnemy.GetPrioritizedRouteTable END",3)
  return routesToUse
end

function this.ShuffleRoutes(routesToUse)
	math.random()math.random()math.random()
	local tempRoutesList = {}
	local actualRoutesCopy={}
	
	if #routesToUse > 0 then
		for k,v in pairs(routesToUse) do
			table.insert(actualRoutesCopy, v)
		end
	end
	
	while #actualRoutesCopy>0 do
		local index=math.random(#actualRoutesCopy)
		table.insert(tempRoutesList, actualRoutesCopy[index])
		table.remove(actualRoutesCopy, index)
		math.random()math.random()math.random()
	end
	
	return tempRoutesList
	
--	for index,routeName in ipairs(routesToUse) do
--		table.insert(tempRoutesList, routeName)
--		table.remove(routesToUse, index)
--	end
--	TppMain.Randomize()
--	while #tempRoutesList > 0 do
--		local index=math.random(#tempRoutesList)
--		table.insert(routesToUse, tempRoutesList[index])
--		table.remove(tempRoutesList, index)
--	end
--	
--	return routesToUse
	
end
Ignore/delete commented debug print statements.

Doing this I learned that '#' operator only works on array tables and not on indexed tables.

A randomseed can be set on the mission random seed value to create a bit more consistent inconsistency - specially for mission restarts, checkpoint reloads won't work as well. While this randomization does not make a big deal of difference, I played the same mission thrice at the deployment time with slightly different results so it's somewhat worth it.

This would have been perfect if there could be 31 soldiers per outpost, but then that also involves adding in (even if repeated) new routes for those additional soldiers.

Soldier chat routes are triggered by player proximity and have nothing to do with the route selector. Chats worked fine.

Firing this randomization on MB leads to something very special. The 4 (or 2 if using roof LZ) salute soldiers may be from any platform on the command cluster. Meaning they move back to their appropriate platform. But when I used the Phantom Cigar, TppEnemy.RouteSelector did not fire even though it is registered for the MB Cps.

mtbs_enemy.GetRouteSetPriority doesn't fire on MB either, I think it's FOB only. If MB route randomization can be figured out it would be really cool having the default soldiers move about platforms at shift change.

Looking at the routes for MB, there do seem to be different night/day route names at least, so either they never change once assigned or even if they are changed somewhere, then they are the same routes anyway(most likely). Still, a shuffle wouldn't hurt.

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

Posted: Sat Oct 15, 2016 12:05 pm
by CantStoptheBipBop
@nasanhak I'm running behind so I don't have time to check it out, but that sounds look a pretty cool mod.

@tex I forgot to address the rmdir error. You just need to move your switches to after rmdir but before the target directory, like "rmdir /a /b "folder"". Or "rd /a /b "folder"" works too if you like doing shorthand versions of commands.

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

Posted: Sat Oct 15, 2016 11:58 pm
by nasanhak
Can't believe it took this long to figure it out. I wasn't so comfortable with the game's systems the first time I tackled it plus the recent I/O dumps helped (thanks Tex!)

Shut up radio when a cassette tape is playing. Fire as an update func:

Code: Select all

function this.DisableAllRadio()

	--want to play end mission result radio
  if mvars.mis_missionStateIsNotInGame or mvars.mis_loadRequest then
    return
  end

  if 
  	TppMusicManager.IsPlayingMusicPlayer() 
--  	and RadioDaemon.IsPlayingRadio() --did not test
--  	and TppRadioCommand.IsPlayingRadio() --the radio-in sound plays at least
  then
  	TppRadioCommand.StopDirect()
  end
  
end

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

Posted: Mon Oct 17, 2016 8:17 am
by nasanhak
TppEnemy.ShiftChangeByTime() does an early return for MB and MBQF. Removing the return allows for shift change at morning and evening. With that am able to randomize routes such that soldiers move about platforms. It does lead to situations where one platform may be completely empty BUT the game clearly has routes for upto 10 (and 13 in some cases) soldiers per platform.

@Tex not sure if you utilized these routes or made your own movement between existing routes, haven't tried that feature from IH. Also you should be able to do the same instead of creating a timer based event like it currently is, only downside is that the shift happens only twice per day.

https://youtu.be/DvIXl0Kd2nQ

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

Posted: Mon Oct 17, 2016 8:54 pm
by unknown123
Made a tool to calculate filename hashes used in fmdl/fv2 files (see viewtopic.php?p=121141#p121141).

https://github.com/unknown321/mgsv_path_hasher code
https://github.com/unknown321/mgsv_path_hasher/releases - compiled exe.
Of course it's a one-way hashing, no way to get filename out of hash.

------------------------------------

Recalculated hashed for files in fpk archives, now you can search for them as well - commit.

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

Posted: Tue Oct 18, 2016 7:45 pm
by Tex
nasanhak wrote:- route shuffling -
Neato.

Yeah randomizing vehicle lrrp routes isn't really going to work, the routes for their travel plans pretty much only cover their designed routes.

I did a shitty map of the free roam travel plans when I was working out the convoy feature, as the only ones that will work for that kind of thing is complete loops with no reversing.
http://imgur.com/a/d39RJ
(Really should pull together maps using the idroid map textures)
It also roughly notes the positions of the lv/light vehicles (jeeps) and trc/trucks.
The lrrp travel numbers are defined by afgh/mafr_travelPlans.lrrpNumberDefine
nasanhak wrote:TppEnemy.ShiftChangeByTime() does an early return for MB and MBQF. Removing the return allows for shift change at morning and evening
Cool.
I'll be staying with my method for MB for my feature though, which shifts individual soldiers roughly every minute, but balances the route selection so platforms aren't emptied or overcrowded.
Entire shift changes would be neat too, but I'd have to see if my current system isn't overriding the normal system completely.
unknown123 wrote:Made a tool to calculate filename hashes used in fmdl/fv2 files

Recalculated hashed for files in fpk archives, now you can search for them as well.
Nice stuff.

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

Posted: Wed Oct 19, 2016 7:15 am
by CantStoptheBipBop
Tex wrote:(Really should pull together maps using the idroid map textures)
I actually quilted the satellite textures of Africa a few months ago. Big ol' quilt. You'll probably notice the contrast is weird on one of the squares. That's because I flattened the image back when I made it but didn't have the sense to turn it from grey-scale to something more like the iDroid's coloration. If you look to the upper right of the image you'll see that some devs got bored and put face doodles as mountains and such in a few spots. Which is just hilarious to me. Or perhaps I'm seeing things?

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

Posted: Sat Oct 22, 2016 11:26 pm
by CantStoptheBipBop
unknown123 wrote:Made a tool to calculate filename hashes used in fmdl/fv2 files
Sweet that might be useful for doing hash compares like with the lang dictionary. It would probably be a little more complex to find filepaths in some cases but I can get away with recycling code at least. While I was trying to get the ball rolling for that I created seperate text documents that are lists of unique folder/file names, sorted alphabetically. They're just stuff I pulled from the fox, qar, and fpk dictionaries. link. I was planning to chop the lists up to make dictionary attack word lists but figured someone here might have their own use for them.

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

Posted: Wed Oct 26, 2016 9:25 pm
by unknown123
viewtopic.php?p=117015#p117015
Tex wrote:Getting there:
https://youtu.be/Kx2_cjmPEG0
Model swapped the main afgh soldiers model and using the related fovas.
The equivalent named fovas applied to the Africa soldier model doesn't seem to be along the same lines, it doesnt hide any meshes:
https://i.imgur.com/5JbWevc.jpg

And the africa model has texture loading issues: https://i.imgur.com/YJZUqOL.jpg
loading a level that loads the textures itself (africa, or mother base with DD suit set to africa soldiers) fixes it, and the textures will remain correct on going back to ACC. I don't know why africa soldiers would have this issue and soviet not.
It happens because you were in afgh-themed acc enviroment. When you return to acc from let's say Afgh, game loads low-poly map of Afghanistan, probably to keep weather/lightning settings. Same for motherbase/africa. Game doesn't have to unload assets if you choose to play more missions in the same region so it is smart resource-wise. You can teleport outside the heli to run around these maps if you want.

For those wanting to run around - you won't warp from heli immidiately. Use code below to break free:

Code: Select all

--avatar will play this motion first
Player.RequestToPlayDirectMotion {	
		"missionclear"
		{
			"/Assets/tpp/motion/SI_game/fani/bodies/snap/snapnon/snapnon_f_idl7.gani",
			false,
			"",
			"",
			"",
			false
		},{}
	}

--motion for player
Player.RequestToPlayDirectMotion {	
		"missionclear"
		{
			"/Assets/tpp/motion/SI_game/fani/bodies/snap/snapnon/snapnon_f_idl7.gani",
			false,
			"",
			"",
			"",
			false
		},{}
	}
Player.RequestToStopDirectMotion()
----------------------------------------------
My current progress on fovas:
There is no difference between NPC and player fovas (judging by bytecode), but applying NPC fovas to player will crash the game no matter what. I teared apart ocelot's fova from mission 2 first demo, it uses command EB77FEBF to attach 3912EA51948CA384 (tpp/item/ewr/Scenes/ewr0_eqhd0_cov) to 989F16BF (ALWAYS FIRST SKL HASH). Skl hash exists in every model, so there is no problem with it. Filepath is also fine, added needed files into plparts_normal.fpk(d). The mystery is EB77FEBF command that apparently loads and attaches the model. It also manages the position of glasses because there is nothing that points to model eye region (maybe that byte at 0x25 does the trick?).
Replacing texture paths in fv2 works fine, made some abominations but no screenshots. https://developer.valvesoftware.com/wik ... ent_tables - similar mechanism is used in fovas as well.

Teared player fovas from hospital too (sna1_v04.fv2 from plparts_hospital.fpk), mostly it uses 3 commands to manipulate textures:

Code: Select all

Base_Tex_SRGB
SpecularMap_Tex_LIN
24F7F217
and E6DB2698 command to apply bandage mesh.

List of used files:

Code: Select all

1 2898587abb9ab.ftex - face
2 10a9f5617b387.ftex - facemask

3 25b1e1d8ac451.ftex - bandage

4 19db40a9af383.ftex - body
5 2be12abeb1323.ftex - bodymask

6 25bd197efbf1e.ftex - pants
7 3fc288b2d1607.ftex - pants mask
I'll try to make a more proper explanation on fova structure (how I see it) and commands used, but it will take a long time.


Stuff that should help:
Figure out how strings are hashed in fmdls to find out name of that command - see viewtopic.php?p=121100#p121100 for manually ripped hashes. It is definitely not CityHash64 used for filepaths, something more compact that hashes any string into 12 bytes.
Unpack all pftxs files to calculate their hashes as well - can't find some of them in my pre-calculated hashes.

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

Posted: Fri Oct 28, 2016 1:50 am
by Tex
unknown123 wrote: It happens because you were in afgh-themed acc enviroment.
Model-swapped pfcs has incorrect texutures on game load to both afgh and mtbs acc or actual map, fine on mafr acc/map.
In line with what you're saying.
But model-swapped soviets textures work fine on game load to either mafr or mtbs acc/map (from cold start).

For pfcs it's only some textures that are loading incorrect.
So either the soviet textures are pegged to load in any map, or there's some textures with the same name as pfs that load by default, and it's only when loading mafr that they get priority? I don't know lol.

Try yourself if you want:
https://mega.nz/#!Pd1gxRBK!HGcJBixIzFNS ... jRk_ieleYc

With IH since for pfc you have to actually apply a fova, since I guess the fmdl isn't set up for a default look unlike svs?
Turn on Use fova in the Player settings > Player Appearance > Form variation menu
My current progress on fovas:
Great stuff.

ewr0_eqhd0_cov is referenced in the demo files, p31_010010_demo.fox2 p31_010020_demo.fox2 . Maybe demo files can also do attachment setup? (I think you've already suggested this yourself)
The DemoStreamAnimations that they are referenced in do reference a parts file, but it looks like it's for another fmdl.

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

Posted: Fri Oct 28, 2016 5:43 am
by BobDoleOwndU
Tex wrote:Model-swapped pfcs has incorrect texutures on game load to both afgh and mtbs acc or actual map, fine on mafr acc/map.
In line with what you're saying.
But model-swapped soviets textures work fine on game load to either mafr or mtbs acc/map (from cold start).

For pfcs it's only some textures that are loading incorrect.
So either the soviet textures are pegged to load in any map, or there's some textures with the same name as pfs that load by default, and it's only when loading mafr that they get priority? I don't know lol.

Try yourself if you want:
https://mega.nz/#!Pd1gxRBK!HGcJBixIzFNS ... jRk_ieleYc

With IH since for pfc you have to actually apply a fova, since I guess the fmdl isn't set up for a default look unlike svs?
Turn on Use fova in the Player settings > Player Appearance > Form variation menu
I might know why the textures aren't loading correctly.

For some textures in the texture.dat files, the .ftex and .1.ftexs aren't there. Only the .2.ftexs and .3.ftexs are located in the texture.dat files for these textures. The .ftex and .1.ftexs files for these textures are stored in the .pftxs of the respective model. If the game hasn't loaded the files from the .pftxs you'll get missing/distorted textures showing up on the model since only the .2.ftexs and .3.ftexs have been loaded.

You can get around this by injecting the files from the .pftxs into either the .pftxs of the player model you swapped over, or directly into the texture.dat files themselves. Once you've done that, the textures should show up correctly even if the files from the .pftxs haven't been loaded by the game.

I think the enemy soldier textures are stored in chunk0\Assets\tpp\pack\mission2\common\mis_com_afgh.pftxs and chunk0\Assets\tpp\pack\mission2\common\mis_com_mafr.pftxs respectively. This would explain why the enemies' textures only load correctly in their respective areas. I haven't checked the chunk.dat files to see if the .ftex and .1.ftexs files are missing for those textures though, so I could be wrong.

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

Posted: Fri Oct 28, 2016 9:51 am
by Tex
I had tried copying pfs pftxs over the player models back when I made the original post, tried again for good measure, still no dice.

Loading mother base with DD soldiers using the mis_com_mafr body does cause the model swaps textures to load.
Strange that it's not picking up the same pftxs when it replaces the player models.

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

Posted: Fri Oct 28, 2016 1:20 pm
by nasanhak
Oh man this guy is good:
https://www.youtube.com/watch?v=xGbDZv4-hCQ

Was he ever in the modding scene?

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

Posted: Fri Oct 28, 2016 4:42 pm
by unknown123
Tex wrote: Try yourself if you want:
https://mega.nz/#!Pd1gxRBK!HGcJBixIzFNS ... jRk_ieleYc
Crashes before title screen for both soviets and pfs. I am using a male dd soldier as primary one so he would appear on the title screen, but it looks like something is wrong. Maybe you are forgetting something?

Edit: change main character to snake, then install the mod and select dd soldier on sortie prep screen. Changing camos to swimsuits will fix that horrifying mess on first picture leaving us only with disfigured face - http://imgur.com/a/LQRdS.
-------------------------------
ewr0_eqhd0_cov is referenced in the demo files, p31_010010_demo.fox2 p31_010020_demo.fox2 . Maybe demo files can also do attachment setup? (I think you've already suggested this yourself)
I am not quite sure how it works myself, some models are mentioned and some are not. Snake's pilot glasses are not mentioned (as far as I remember) and yet they are there.

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

Posted: Fri Oct 28, 2016 7:21 pm
by Tex
unknown123 wrote: Crashes before title screen for both soviets and pfs. I am using a male dd soldier as primary one so he would appear on the title screen, but it looks like something is wrong. Maybe you are forgetting something?

Edit: change main character to snake, then install the mod and select dd soldier on sortie prep screen. Changing camos to swimsuits will fix that horrifying mess on first picture leaving us only with disfigured face - http://imgur.com/a/LQRdS.
Is that with or without IH?

I've never had any crashing or warped bones(?) issues related to that modelswap on my end.

Changing to swimsuits should change it to the actual swimsuit model since it's a completely different fpk than the dd_male modelswap I provided, I don't even know how it could still be showing.